feat: 数据真实化、企业展示墙、全局手势识别与 3D 模型完善
- 数据大屏改用真实数据(xls 统计表 + 宣传册口径);TOKEN/工具调用基于真实锚点测算 - 新增企业展示墙页(/wall,39 家全量档案 + MQTT/admin/ESP32 控制文档) - 新增全局手势识别(GlobalVision 全局挂载 + dpm:gesture 事件分发) - 3D 模型墙面逐间修复、去除门/过道顶棚/调试标签、房间资产不穿墙、会议室多小桌 - 侧栏企业分布扩展至 39 家完整信息,分区按官方四大孵化区域 - 语音页多轮对话展示优化、去除页脚与检测横条、背景对齐
This commit is contained in:
+524
-2
@@ -300,12 +300,21 @@
|
||||
height: 128px;
|
||||
}
|
||||
.bd-feed-row .bd-feed {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
/* 每屏一组:3 列 × 2 行,切换时整体淡入(bdSlideIn) */
|
||||
.bd-feed-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||
gap: 4px 10px;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
align-content: center;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.bd-feed-row .bd-feed-item {
|
||||
padding: 4px 10px;
|
||||
@@ -2700,3 +2709,516 @@
|
||||
margin-left: 4px;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
/* ============ 真实数据面板补充样式 ============ */
|
||||
.bd-jobs-panel,
|
||||
.bd-revenue-panel {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow: hidden;
|
||||
}
|
||||
.bd-jobs-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
column-gap: 14px;
|
||||
row-gap: 12px;
|
||||
padding: 8px 2px;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
.bd-jobs-grid .bd-big-stat {
|
||||
padding: 9px 14px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.bd-jobs-grid .bd-big-stat b { font-size: 19px; }
|
||||
.bd-jobs-grid .bd-big-stat span { font-size: 11.5px; }
|
||||
.bd-jobs-grid .bd-big-stat b em { font-size: 11.5px; }
|
||||
.bd-jobs-panel > .bd-hbars {
|
||||
flex: 0 1 auto;
|
||||
min-height: 0;
|
||||
gap: 5px;
|
||||
}
|
||||
/* 营收总额面板:8 卡紧凑布局,确保不溢出面板 */
|
||||
.bd-revenue-nums {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
column-gap: 14px;
|
||||
row-gap: 12px;
|
||||
padding: 8px 2px;
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
.bd-revenue-nums .bd-big-stat {
|
||||
padding: 9px 14px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.bd-revenue-nums .bd-big-stat b { font-size: 19px; }
|
||||
.bd-revenue-nums .bd-big-stat span { font-size: 11.5px; }
|
||||
.bd-revenue-nums .bd-big-stat b em { font-size: 11.5px; }
|
||||
.bd-revenue-panel .bd-revenue-tags,
|
||||
.bd-revenue-panel .bd-real-metrics { flex-shrink: 0; }
|
||||
.bd-revenue-panel .bd-real-metrics { margin-top: 6px; }
|
||||
.bd-revenue-panel .bd-real-metrics span { padding: 2px 8px; font-size: 11px; }
|
||||
.bd-jobs-note {
|
||||
margin-top: 10px;
|
||||
padding: 8px 12px;
|
||||
border-radius: 10px;
|
||||
background: rgba(47, 107, 255, 0.06);
|
||||
border: 1px solid rgba(47, 107, 255, 0.12);
|
||||
font-size: 12px;
|
||||
line-height: 1.7;
|
||||
color: var(--bd-sub, #7d8fa9);
|
||||
}
|
||||
.bd-real-metrics {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 8px;
|
||||
margin: 8px 0 0;
|
||||
padding: 0 2px;
|
||||
}
|
||||
.bd-real-metrics span {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
padding: 3px 10px;
|
||||
border-radius: 999px;
|
||||
background: rgba(47, 107, 255, 0.06);
|
||||
border: 1px solid rgba(47, 107, 255, 0.14);
|
||||
font-size: 12px;
|
||||
color: var(--bd-sub, #7d8fa9);
|
||||
white-space: nowrap;
|
||||
}
|
||||
.bd-real-metrics b { color: #2f6bff; font-weight: 700; }
|
||||
/* ============ 入驻企业展示墙(/wall · 全量档案版 · 配色与整体一致) ============ */
|
||||
.cw-page {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: clamp(12px, 1.4vw, 24px) clamp(16px, 2vw, 34px);
|
||||
gap: clamp(10px, 1.2vw, 18px);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
color: var(--bd-ink);
|
||||
font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans SC", sans-serif;
|
||||
}
|
||||
.cw-page::before {
|
||||
content: '';
|
||||
position: absolute; inset: 0;
|
||||
background-image:
|
||||
linear-gradient(rgba(47, 107, 255, 0.045) 1px, transparent 1px),
|
||||
linear-gradient(90deg, rgba(47, 107, 255, 0.045) 1px, transparent 1px);
|
||||
background-size: 44px 44px;
|
||||
mask-image: radial-gradient(ellipse 90% 80% at 50% 30%, #000 30%, transparent 100%);
|
||||
pointer-events: none;
|
||||
}
|
||||
.cw-glow {
|
||||
position: absolute;
|
||||
border-radius: 50%;
|
||||
filter: blur(90px);
|
||||
pointer-events: none;
|
||||
}
|
||||
.cw-glow-a { width: 420px; height: 420px; top: -140px; left: -100px; background: rgba(76, 194, 255, 0.15); }
|
||||
.cw-glow-b { width: 460px; height: 460px; bottom: -180px; right: -120px; background: rgba(47, 107, 255, 0.12); }
|
||||
|
||||
.cw-head {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
justify-content: space-between;
|
||||
gap: 18px;
|
||||
flex-wrap: wrap;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.cw-eyebrow {
|
||||
display: block;
|
||||
font-size: 10px;
|
||||
letter-spacing: 0.32em;
|
||||
color: rgba(125, 143, 169, 0.65);
|
||||
margin-bottom: 6px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
.cw-title h1 {
|
||||
margin: 0;
|
||||
font-size: clamp(26px, 2.6vw, 40px);
|
||||
font-weight: 800;
|
||||
letter-spacing: 0.06em;
|
||||
background: linear-gradient(92deg, var(--bd-blue-deep) 10%, var(--bd-blue) 55%, var(--bd-cyan) 100%);
|
||||
-webkit-background-clip: text;
|
||||
background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
filter: drop-shadow(0 2px 12px rgba(47, 107, 255, 0.14));
|
||||
}
|
||||
.cw-sub {
|
||||
margin: 8px 0 0;
|
||||
font-size: 13px;
|
||||
color: var(--bd-sub);
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
.cw-stats {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.cw-stat {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
gap: 6px;
|
||||
padding: 8px 16px;
|
||||
border-radius: 14px;
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border: 1px solid rgba(47, 107, 255, 0.1);
|
||||
box-shadow: 0 2px 12px rgba(29, 93, 206, 0.06);
|
||||
}
|
||||
.cw-stat b { font-size: 22px; font-weight: 800; color: var(--bd-blue); font-family: "JetBrains Mono", monospace; }
|
||||
.cw-stat i { font-style: normal; font-size: 11.5px; color: var(--bd-sub); }
|
||||
.cw-status {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 7px;
|
||||
padding: 8px 16px;
|
||||
border-radius: 999px;
|
||||
font-size: 12px;
|
||||
color: var(--bd-sub);
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border: 1px solid rgba(47, 107, 255, 0.12);
|
||||
}
|
||||
.cw-dot {
|
||||
width: 8px; height: 8px; border-radius: 50%;
|
||||
background: var(--bd-green);
|
||||
box-shadow: 0 0 10px rgba(23, 178, 106, 0.5);
|
||||
animation: cwPulse 1.6s ease-in-out infinite;
|
||||
}
|
||||
.cw-dot.idle { background: #94a3b8; box-shadow: none; animation: none; }
|
||||
@keyframes cwPulse { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }
|
||||
|
||||
/* 滚动墙 */
|
||||
.cw-wall {
|
||||
flex: 1;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
border-radius: 20px;
|
||||
border: 1px solid rgba(47, 107, 255, 0.1);
|
||||
background: rgba(255, 255, 255, 0.35);
|
||||
mask-image: linear-gradient(180deg, transparent, #000 6%, #000 94%, transparent);
|
||||
-webkit-mask-image: linear-gradient(180deg, transparent, #000 6%, #000 94%, transparent);
|
||||
}
|
||||
.cw-track {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
gap: clamp(12px, 1.2vw, 20px);
|
||||
padding: clamp(14px, 1.4vw, 24px);
|
||||
animation: cwScrollY linear infinite;
|
||||
}
|
||||
.cw-wall:hover .cw-track { animation-play-state: paused; }
|
||||
@keyframes cwScrollY {
|
||||
from { transform: translateY(0); }
|
||||
to { transform: translateY(-50%); }
|
||||
}
|
||||
|
||||
/* 企业卡片 */
|
||||
.cw-card {
|
||||
position: relative;
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
padding: 18px 20px 18px 16px;
|
||||
border-radius: 16px;
|
||||
background: rgba(255, 255, 255, 0.88);
|
||||
border: 1px solid rgba(47, 107, 255, 0.1);
|
||||
border-left: 3px solid var(--ind);
|
||||
box-shadow: 0 3px 16px rgba(29, 93, 206, 0.06);
|
||||
transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
|
||||
break-inside: avoid;
|
||||
}
|
||||
.cw-card:hover {
|
||||
transform: translateY(-3px);
|
||||
border-color: rgba(47, 107, 255, 0.32);
|
||||
box-shadow: 0 10px 28px rgba(47, 107, 255, 0.12), 0 3px 16px rgba(29, 93, 206, 0.06);
|
||||
}
|
||||
.cw-idx {
|
||||
flex-shrink: 0;
|
||||
font-family: "JetBrains Mono", monospace;
|
||||
font-size: 30px;
|
||||
font-weight: 800;
|
||||
line-height: 1;
|
||||
color: var(--ind);
|
||||
opacity: 0.3;
|
||||
padding-top: 2px;
|
||||
min-width: 34px;
|
||||
text-align: center;
|
||||
}
|
||||
.cw-body { flex: 1; min-width: 0; }
|
||||
.cw-top {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.cw-name {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
margin: 0;
|
||||
font-size: clamp(14px, 1.25vw, 18px);
|
||||
font-weight: 700;
|
||||
line-height: 1.35;
|
||||
color: var(--bd-ink);
|
||||
letter-spacing: 0.01em;
|
||||
}
|
||||
.cw-tags { display: flex; gap: 6px; flex-shrink: 0; flex-wrap: wrap; justify-content: flex-end; }
|
||||
.cw-tag {
|
||||
font-size: 11px;
|
||||
padding: 2px 10px;
|
||||
border-radius: 999px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.cw-tag-ind { border: 1px solid transparent; font-weight: 600; }
|
||||
.cw-tag-zone {
|
||||
color: var(--bd-sub);
|
||||
background: rgba(148, 163, 184, 0.12);
|
||||
border: 1px dashed rgba(125, 143, 169, 0.45);
|
||||
}
|
||||
|
||||
.cw-founder {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
padding: 9px 12px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 12px;
|
||||
background: rgba(244, 248, 253, 0.85);
|
||||
border: 1px solid rgba(47, 107, 255, 0.08);
|
||||
}
|
||||
.cw-avatar {
|
||||
flex-shrink: 0;
|
||||
width: 34px; height: 34px;
|
||||
border-radius: 50%;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
font-size: 15px; font-weight: 700; color: #fff;
|
||||
box-shadow: 0 0 0 2px rgba(255,255,255,0.9), 0 2px 8px rgba(29, 93, 206, 0.2);
|
||||
}
|
||||
.cw-finfo { min-width: 0; }
|
||||
.cw-flabel {
|
||||
display: block;
|
||||
font-size: 9.5px;
|
||||
letter-spacing: 0.18em;
|
||||
color: rgba(125, 143, 169, 0.75);
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
.cw-fname { font-size: 13.5px; font-weight: 700; color: var(--bd-ink); }
|
||||
.cw-fbio {
|
||||
margin: 2px 0 0;
|
||||
font-size: 11.5px;
|
||||
line-height: 1.6;
|
||||
color: var(--bd-sub);
|
||||
}
|
||||
|
||||
.cw-bio {
|
||||
margin: 0;
|
||||
font-size: 12.5px;
|
||||
line-height: 1.75;
|
||||
color: #4a5b76;
|
||||
white-space: pre-line;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 4;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
.cw-card:hover .cw-bio { -webkit-line-clamp: unset; }
|
||||
|
||||
.cw-foot {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
flex-shrink: 0;
|
||||
text-align: center;
|
||||
font-size: 11px;
|
||||
color: rgba(125, 143, 169, 0.7);
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
/* 手势识别徽标 + 隐藏摄像头 */
|
||||
.cw-vision {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 7px;
|
||||
padding: 8px 14px;
|
||||
border-radius: 999px;
|
||||
font-size: 12px;
|
||||
color: var(--bd-sub);
|
||||
background: rgba(255, 255, 255, 0.85);
|
||||
border: 1px solid rgba(47, 107, 255, 0.12);
|
||||
}
|
||||
.cw-vision .cw-vision-ico { font-size: 13px; filter: grayscale(1) opacity(0.7); }
|
||||
.cw-vision.on { border-color: rgba(23, 178, 106, 0.35); }
|
||||
.cw-vision.on .cw-vision-ico { filter: none; }
|
||||
.cw-vision-tip { color: var(--bd-green); font-weight: 600; }
|
||||
.cw-vision-off { color: #94a3b8; font-weight: 400; }
|
||||
.cw-video { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
|
||||
/* ============ 全局手势识别(GlobalVision) ============ */
|
||||
.gv-video { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
|
||||
.gv-badge {
|
||||
position: fixed;
|
||||
right: 16px;
|
||||
bottom: 16px;
|
||||
z-index: 999;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
padding: 7px 14px;
|
||||
border-radius: 999px;
|
||||
font-size: 11.5px;
|
||||
color: var(--bd-sub);
|
||||
background: rgba(255, 255, 255, 0.9);
|
||||
border: 1px solid rgba(47, 107, 255, 0.14);
|
||||
box-shadow: 0 4px 18px rgba(29, 93, 206, 0.12);
|
||||
backdrop-filter: blur(6px);
|
||||
transition: border-color 0.3s ease;
|
||||
}
|
||||
.gv-badge .gv-ico { font-size: 13px; filter: grayscale(1) opacity(0.65); }
|
||||
.gv-badge .gv-dot {
|
||||
width: 7px; height: 7px; border-radius: 50%;
|
||||
background: #94a3b8;
|
||||
}
|
||||
.gv-badge.on { border-color: rgba(23, 178, 106, 0.35); }
|
||||
.gv-badge.on .gv-ico { filter: none; }
|
||||
.gv-badge.on .gv-dot {
|
||||
background: var(--bd-green);
|
||||
box-shadow: 0 0 8px rgba(23, 178, 106, 0.6);
|
||||
animation: cwPulse 1.6s ease-in-out infinite;
|
||||
}
|
||||
.gv-badge.flash {
|
||||
border-color: rgba(23, 178, 106, 0.6);
|
||||
background: rgba(232, 250, 241, 0.95);
|
||||
color: #047857;
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
/* ============ 企业详情卡片(完整信息版) ============ */
|
||||
.bd-twin-detail {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
padding: 14px 16px;
|
||||
background: linear-gradient(165deg, rgba(255,255,255,0.94), rgba(244,248,253,0.9));
|
||||
border: 1px solid rgba(47, 107, 255, 0.14);
|
||||
border-radius: 14px;
|
||||
box-shadow: 0 4px 18px rgba(29, 93, 206, 0.08);
|
||||
}
|
||||
.bd-twin-detail-head {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 8px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 1px dashed rgba(47, 107, 255, 0.16);
|
||||
}
|
||||
.bd-twin-detail-head b {
|
||||
font-size: 14.5px;
|
||||
line-height: 1.4;
|
||||
color: var(--bd-ink);
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
.bd-twin-tags {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
gap: 4px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.bd-twin-ind {
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
padding: 2px 10px;
|
||||
border-radius: 999px;
|
||||
border: 1px solid transparent;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.bd-twin-zone-tag {
|
||||
font-size: 10.5px;
|
||||
padding: 1px 9px;
|
||||
border-radius: 999px;
|
||||
background: rgba(125, 143, 169, 0.1);
|
||||
border: 1px dashed rgba(125, 143, 169, 0.4);
|
||||
white-space: nowrap;
|
||||
}
|
||||
/* 创始人区 */
|
||||
.bd-twin-founder {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: 10px;
|
||||
padding: 9px 11px;
|
||||
border-radius: 11px;
|
||||
background: rgba(244, 248, 253, 0.9);
|
||||
border: 1px solid rgba(47, 107, 255, 0.08);
|
||||
}
|
||||
.bd-twin-avatar {
|
||||
flex-shrink: 0;
|
||||
width: 36px;
|
||||
height: 36px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
box-shadow: 0 0 0 2px rgba(255,255,255,0.9), 0 2px 8px rgba(29, 93, 206, 0.18);
|
||||
}
|
||||
.bd-twin-founder-info { min-width: 0; }
|
||||
.bd-twin-founder-info i {
|
||||
display: block;
|
||||
font-style: normal;
|
||||
font-size: 9.5px;
|
||||
letter-spacing: 0.16em;
|
||||
color: rgba(125, 143, 169, 0.8);
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
.bd-twin-founder-info b {
|
||||
font-size: 13.5px;
|
||||
color: var(--bd-ink);
|
||||
}
|
||||
.bd-twin-founder-info p {
|
||||
margin: 2px 0 0;
|
||||
font-size: 11px;
|
||||
line-height: 1.6;
|
||||
color: var(--bd-sub);
|
||||
}
|
||||
/* 企业简介 */
|
||||
.bd-twin-bio {
|
||||
margin: 0;
|
||||
font-size: 12px;
|
||||
line-height: 1.8;
|
||||
color: #4a5b76;
|
||||
max-height: 108px;
|
||||
overflow-y: auto;
|
||||
padding-right: 4px;
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
.bd-twin-bio::-webkit-scrollbar { width: 4px; }
|
||||
.bd-twin-bio::-webkit-scrollbar-thumb { background: rgba(47, 107, 255, 0.25); border-radius: 4px; }
|
||||
.bd-twin-detail-meta {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
padding-top: 6px;
|
||||
border-top: 1px dashed rgba(47, 107, 255, 0.12);
|
||||
font-size: 12px;
|
||||
color: #64748d;
|
||||
}
|
||||
.bd-twin-detail-meta b { color: var(--bd-ink); margin-left: 3px; }
|
||||
.bd-twin-detail-meta b.ok { color: var(--bd-green); }
|
||||
|
||||
/* 企业详情卡片:公司名单行显示(过长自动缩小) */
|
||||
.bd-twin-detail-head b {
|
||||
display: block;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
line-height: 1.35;
|
||||
}
|
||||
.bd-twin-detail-head {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user