# 大屏看板页面

> 最后更新：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 info，5秒后消失）
- 无交互操作：鼠标悬停卡片有轻微发光效果，无点击跳转

### 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/**）免认证，但仅限读取，不暴露管理接口。**
