You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
haoliang-net/docs/02-功能清单/大屏/01-01-大屏看板页面.md

238 lines
11 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 大屏看板页面
> 最后更新2026-04-26
> 状态:已设计
---
### 1. 基本信息
| 项 | 值 |
|----|-----|
| 路由 | /screen |
| 权限 | 无(免认证) |
| 入口 | 浏览器直接访问 /screen管理后台大屏配置页"预览"按钮 |
| 面包屑 | 无全屏独立Layout |
### 2. 界面布局
```
┌──────────────────────────────────────────────────────────┐
│ [顶部栏] height=50px 深色背景#1a1a2e │
│ 左CNC机床数据采集系统 │
│ 右:[车间▼A栋] [品牌▼全部] 2026-04-25 17:36:38 │
├──────────────────────────────────────────────────────────┤
│ [第一行:统计数字卡片] height=100px │
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │在线机床│ │今日总产│ │采集服务│ │活跃告警│ │平均产量│ │
│ │ 142 │ │ 8,520│ │ 运行中 │ │ 3 │ │ 60 │ │
│ │ /160 │ │ │ │3天16时 │ │ │ │/台 │ │
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
├──────────────────────────────────────────────────────────┤
│ [第二行:图表区] height=300px │
│ ┌────────────────────┐ ┌────────────────────┐ │
│ │ 各车间产量(柱状图) │ │ 产量趋势7天(折线图) │ │
│ │ ████ │ │ ╱╲ ╱╲ │ │
│ │ ████ ██ │ │ ╲╱╱ ╲ │ │
│ │ A栋 B栋 C栋 │ │ 4/19 ... 4/25 │ │
│ └────────────────────┘ └────────────────────┘ │
├──────────────────────────────────────────────────────────┤
│ [第三行:排行+状态] height=auto(填满剩余) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ 机床产量排行 │ │ 工人产量排行 │ │ 机床状态总览 │ │
│ │ 1.西-1.8 580│ │ 1.张三 1240│ │ ■■■■□□■■■□ │ │
│ │ 2.西-1.10 420│ │ 2.李四 980│ │ ■■□□■■■■□■ │ │
│ │ 3.东-2.0 380│ │ 3.王五 870│ │ ■=在线 □=离线 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────┘
```
**布局说明:**
- 全屏展示1920x1080优化Chrome全屏模式(F11)
- 深色主题:背景#0f0f1a卡片背景#1a1a2e文字白色/浅灰
- 无侧边栏、无面包屑、无滚动条(一屏展示所有内容)
- 卡片排列由管理后台"大屏配置"页面控制(排序/启停/类型)
- 以上布局为默认配置,卡片增减/顺序由cnc_screen_config决定
### 3. 数据区块
| 区块 | card_type | 数据来源API | 刷新策略 |
|------|-----------|-----------|---------|
| 在线机床数 | stat_number | /api/screen/summary | 每10秒(可配) |
| 今日总产量 | stat_number | /api/screen/summary | 每10秒 |
| 采集服务状态 | stat_number | /api/screen/collector-status | 每10秒 |
| 活跃告警 | stat_number | /api/screen/summary | 每10秒 |
| 平均产量 | stat_number | /api/screen/summary | 每10秒 |
| 各车间产量 | bar_chart | /api/screen/workshop-production | 每60秒 |
| 产量趋势7天 | line_chart | /api/screen/production-trend | 每300秒 |
| 机床产量排行 | rank_list | /api/screen/machine-rank | 每60秒 |
| 工人产量排行 | rank_list | /api/screen/worker-rank | 每60秒 |
| 机床状态总览 | status_grid | /api/screen/machine-status | 每10秒 |
### 4. 操作按钮
| 名称 | 位置 | 显示条件 | 点击行为 |
|------|------|---------|---------|
| 车间筛选 | 顶部栏右侧 | 始终 | 下拉切换,刷新所有卡片数据 |
| 品牌筛选 | 顶部栏右侧 | 始终 | 下拉切换,刷新所有卡片数据 |
| 全屏切换 | 顶部栏右侧 | 始终 | F11全屏/退出全屏 |
说明:筛选器为只读展示,可选项由管理后台大屏配置(cnc_screen_filter)定义。默认选中项由is_default字段决定。
### 5. 状态机
采集服务状态:
- running(运行中): 绿色脉冲圆点 + "运行中" + uptime
- stopped(已停止): 红色圆点 + "已停止" + 最后心跳时间
机床状态(status_grid)
- 在线(is_online=1): 绿色方块■
- 离线(is_online=0): 灰色方块□
### 6. 交互流程
- 加载:请求筛选配置->设置默认筛选->并行请求所有卡片数据->渲染
- 自动刷新定时器按卡片配置的刷新策略轮询全局默认10秒可通过cnc_sys_config.bigscreen_refresh_interval配置
- 筛选切换:选车间/品牌->所有API请求附加筛选参数->刷新所有卡片
- 全屏:首次进入自动提示"按F11进入全屏模式"el-message info5秒后消失
- 无交互操作:鼠标悬停卡片有轻微发光效果,无点击跳转
### 7. 空状态
- 统计数字无数据:显示"--"
- 图表无数据:居中灰色文字"暂无数据"
- 排行榜无数据:灰色文字"暂无数据"
- 状态网格无机床:灰色文字"暂无机床"
### 8. 接口引用与数据结构
> Mock/正式API的URL、HTTP方法均定义在 `03-API接口设计.md` §3.12 端点清单本节仅引用编号并定义返回数据结构。大屏API/api/screen/**)免认证,但仅限读取。
#### 接口引用
| 接口名称 | 端点编号 | 界面用途 |
|---------|---------|---------|
| 大屏汇总统计 | §3.12 #1 | 顶部统计卡片 |
| 采集服务状态 | §3.12 #2 | 采集服务状态卡片 |
| 各车间产量 | §3.12 #3 | 车间产量柱状图 |
| 产量趋势 | §3.12 #4 | 7天产量趋势折线图 |
| 机床产量排行 | §3.12 #5 | 机床排行TOP5 |
| 工人产量排行 | §3.12 #6 | 工人排行TOP5 |
| 机床状态总览 | §3.12 #7 | 机床状态网格 |
| 大屏筛选条件 | §3.12 #8 | 筛选下拉选项 |
| 刷新间隔配置 | §3.12 #9 | 自动刷新间隔 |
#### 数据结构
**大屏汇总统计§3.12 #1**
Response
```json
{ "code": 0, "data": { "onlineCount": 142, "totalMachines": 160, "todayProduction": 8520, "activeAlerts": 3, "avgQuantityPerMachine": 60 }}
```
**采集服务状态§3.12 #2**
Response
```json
{ "code": 0, "data": { "status": "running", "uptime": "3天16小时", "successCount": 12800, "failCount": 5, "lastCollectTime": "2026-04-25T17:36:38" }}
```
**各车间产量§3.12 #3**
Response
```json
{ "code": 0, "data": { "items": [
{ "name": "A栋", "quantity": 3200 },
{ "name": "B栋", "quantity": 2800 },
{ "name": "C栋", "quantity": 2520 }
]}}
```
**产量趋势§3.12 #4**
Response
```json
{ "code": 0, "data": { "items": [
{ "date": "04-19", "quantity": 8200 }, { "date": "04-20", "quantity": 7600 },
{ "date": "04-21", "quantity": 9100 }, { "date": "04-22", "quantity": 8500 },
{ "date": "04-23", "quantity": 7800 }, { "date": "04-24", "quantity": 9000 },
{ "date": "04-25", "quantity": 8520 }
]}}
```
**机床产量排行§3.12 #5**
Response
```json
{ "code": 0, "data": { "items": [
{ "rank": 1, "machineName": "西-1.8", "quantity": 580 },
{ "rank": 2, "machineName": "西-1.10", "quantity": 420 },
{ "rank": 3, "machineName": "东-2.0", "quantity": 380 },
{ "rank": 4, "machineName": "东-2.5", "quantity": 310 },
{ "rank": 5, "machineName": "南-3.1", "quantity": 290 }
]}}
```
**工人产量排行§3.12 #6**
Response
```json
{ "code": 0, "data": { "items": [
{ "rank": 1, "workerName": "张三", "quantity": 1240 },
{ "rank": 2, "workerName": "李四", "quantity": 980 },
{ "rank": 3, "workerName": "王五", "quantity": 870 },
{ "rank": 4, "workerName": "赵六", "quantity": 650 },
{ "rank": 5, "workerName": "孙七", "quantity": 520 }
]}}
```
**机床状态总览§3.12 #7**
Response
```json
{ "code": 0, "data": { "items": [
{ "machineId": 1, "machineName": "西-1.8", "isOnline": 1 },
{ "machineId": 2, "machineName": "西-1.10", "isOnline": 1 },
{ "machineId": 3, "machineName": "东-2.0", "isOnline": 0 },
{ "machineId": 4, "machineName": "东-2.5", "isOnline": 0 },
{ "machineId": 5, "machineName": "南-3.1", "isOnline": 1 }
]}}
```
**大屏筛选条件§3.12 #8**
Response
```json
{ "code": 0, "data": { "items": [
{ "filterType": "workshop", "filterValue": "A栋", "isDefault": 1 },
{ "filterType": "workshop", "filterValue": "B栋", "isDefault": 0 },
{ "filterType": "brand", "filterValue": "FANUC", "isDefault": 0 }
]}}
```
**刷新间隔配置§3.12 #9**
Response
```json
{ "code": 0, "data": { "interval": 10, "unit": "seconds" }}
```
### 9. 数据需求
> 以下为本页面需要的数据,数据库设计定稿时需覆盖。参考 `01-数据库设计.md` 草案。
| 数据需求 | 草案对应 | 说明 |
|---------|---------|------|
| 统计摘要 | cnc_machine + cnc_daily_production | 聚合查询 |
| 采集服务状态 | log_collector_heartbeat | 查最新一条心跳 |
| 各车间产量 | cnc_daily_production + cnc_machine + cnc_workshop | 按车间聚合 |
| 产量趋势 | cnc_daily_production | 近7天按日聚合 |
| 机床排行 | cnc_daily_production + cnc_machine | 按机床聚合TOP N |
| 工人排行 | cnc_worker_daily_summary | 按工人聚合TOP N |
| 机床状态 | cnc_machine.is_online | 全量查询 |
| 筛选配置 | cnc_screen_filter | 筛选可选项+默认值 |
| 卡片配置 | cnc_screen_config | 哪些卡片启用+排序+图表配置 |
**注意大屏API/api/screen/**)免认证,但仅限读取,不暴露管理接口。**