你是一名资深前端开发工程师,擅长数据可视化大屏开发,精通 HTML/CSS/JavaScript、ECharts 图表库、CSS 动效设计。你需要根据以下完整的产品设计文档,生成一个单文件 HTML 数据可视化大屏项目。
| 项目 | 说明 |
|---|---|
| 项目名称 | 中国安全生产科学研究院实验室安全智慧化管控中心 |
| 项目类型 | 数据可视化大屏(单文件 HTML) |
| 设计分辨率 | 1920 × 1080px |
| 主题风格 | 科技蓝 + 科幻风 |
| 目标用户 | 中国国内科研院所实验室安全管理人员 |
| 技术栈 | 原生 HTML/CSS/JS + ECharts 5.5.0 + Ant Design Reset CSS |
| 外部依赖 | 本地引用 libs/reset.css(Ant Design Reset)、libs/echarts.min.js(ECharts 5.5.0) |
主背景色: #020c1b → #061630 → #0a2550 (深蓝渐变)
面板背景: rgba(6, 22, 56, 0.82)(毛玻璃效果, backdrop-filter: blur(8px))
面板边框: rgba(72, 180, 255, 0.28)
主文字色: #d8f4ff
辅助文字色: #7eacc8
强调色: #48d7ff(科技蓝)
强调色2: #3a7bff(深蓝)
安全色: #36d399(绿色,空闲/正常)
警告色: #ffb020(橙黄,预警)
危险色: #ff4d4f(红色,异常/报警)
实验室安全等级配色(教育部标准):
I级(红): #ff4d4f
II级(橙): #ff8c00
III级(黄): #ffcc00
IV级(蓝): #3a7bff
font-family: "DIN Alternate", "Alibaba PuHuiTi", "PingFang SC", "Microsoft YaHei", sans-serif;
项目包含 两个页面,通过顶部导航栏按钮切换(JS 控制 display,无路由):
| 位置 | 内容 |
|---|---|
| 左侧 | 项目标题「中国安全生产科学研究院实验室安全智慧化管控中心」,渐变文字(白→科技蓝) |
| 中间 | 两个页面切换按钮:「实验室情况」(默认选中)、「视频监控」 |
| 右侧 | 天气信息 + 星期 + 实时时钟(HH:MM:SS,每秒更新) |
导航栏高度 72px,底部有渐变分割线 + 流光动画。
整体布局为左(440px)、中(自适应)、右(440px)三栏,间距 14px。
环形图(ECharts pie, radius ['45%','70%']):
状态卡片(3个并排):
堆叠柱状图(ECharts bar, stack):
dataZoom 实现,每 5 秒向右滚动一个单位,初始显示 6 个单位,超出后循环数字翻牌器(两组并排):
折线图(ECharts line, smooth):
自动滚动列表:
translateY(-50%) + 数据翻倍实现无缝滚动,速度 40s 一轮预警统计:本月预警响应总数(大字数字 + 发光文字动画)
滚动预警列表:
顶部统计卡片(2个并排):
下部左侧:仪表盘(ECharts gauge)
下部右侧:设备类型列表(4项纵排)
饼图(ECharts pie, radius ['30%','60%']):
中部统计(3个并排卡片):
底部状态统计(4个并排卡片):
| 组件 | 说明 |
|---|---|
| 标题 | "建筑结构导航" |
| 搜索框 | 可搜索楼栋/楼层,聚焦时边框发光 |
| 筛选下拉 | 按二级单位筛选(安全技术研究所、职业安全研究所、化学品安全研究所、矿山安全研究所) |
| 树状结构 | 可展开/折叠,层级为:院区 → 楼栋 → 楼层 → 房间 |
树节点交互:
| 组件 | 说明 |
|---|---|
| 面包屑 | 显示当前路径:院区 → 楼栋名称 → 楼层名称 |
| 视频网格 | 3×3 九宫格,每个格子为一个摄像头 |
| 分页 | 上一页 / 第 X / Y 页 / 下一页 |
摄像头格子(cam-frame)科幻风边框设计:
AI 智能摄像头(每页第一个):
当传感器数据超出阈值时触发,参考科幻电影系统报警风格。
覆盖层效果:
弹窗内容(左右布局):
左侧信息区(flex:1):
| 字段 | 说明 |
|---|---|
| 实验室 | 实验室名称(房号) |
| 楼栋楼层 | 楼栋-楼层 |
| 所属单位 | 二级单位名称 |
| 异常参数 | 异常传感器名称(红色高亮) |
| 当前数值 | 异常数值(红色高亮) |
| 实验室负责人 | 负责人姓名 |
| 联系电话 | 负责人电话 |
| 预警时间 | YYYY-MM-DD HH:mm:ss |
右侧视频区(320px):
底部:确认按钮(红色渐变,悬停发光)
JS 函数:showAlert(lab, building, unit, param, value, person, phone)
panelGlow, 4s 周期)panelScan, 6s 周期,各面板 stagger 延迟)cornerBreathe, 3s 周期)titleBarGlow, 2.5s)navFlow, 4s)titleGlow, 3s)clockPulse, 2s)tabGlow, 2.5s)cardBreathe, 4s, stagger 1.3s)digitGlow, 2s)sensorFadeIn, 0.5s)warnBorderPulse, 3s)warnCountGlow, 2s)alarmIconShake, 0.5s)videoPageFadeIn, 0.6s)sidebarScan, 5s)sidebarEdgeGlow, 3s)treeSelectedGlow, 2.5s)treeExpand, 0.35s)breadcrumbFlow, 5s)+ 文字微光呼吸videoGridBreathe, 5s)+ 技术网格背景gridScanLine, 8s)camCellEntrance, 0.5s)camCornerGlow, 2.5s, stagger 0.6s)camFrameBreathe, 4s)camInnerScan, 6s)dotBlink, 2s)aiBadgePulse, 1.5s)aiFrameBreathe, 3s)pageBtnPulse, 4s)videoParticlesDrift, 12s)particleDrift, 20s)Math.min(vw/1920, vh/1080) 缩放比transform: scale() 居中缩放resize 事件实时更新requestFullscreen(){ once: true } 确保只触发一次switchPage('lab' | 'video')rgba(6,22,56,0.9) + 蓝色边框.resize()project/
├── index.html # 主文件(单文件,包含全部 CSS + JS)
└── libs/
├── reset.css # Ant Design 5.28.0 Reset CSS
└── echarts.min.js # ECharts 5.5.0
<style> 标签内,所有 JS 写在 <script> 标签内libs/reset.css、libs/echarts.min.js)@keyframes 实现,不使用第三方动画库