|
|
# 告警中心页面
|
|
|
|
|
|
> 最后更新:2026-04-26
|
|
|
> 状态:已设计
|
|
|
|
|
|
---
|
|
|
|
|
|
### 1. 基本信息
|
|
|
|
|
|
| 项 | 值 |
|
|
|
|----|-----|
|
|
|
| 路由 | /alert |
|
|
|
| 权限 | admin |
|
|
|
| 入口 | 侧边栏告警中心 |
|
|
|
| 面包屑 | 首页 / 告警中心 |
|
|
|
|
|
|
### 2. 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 首页 / 告警中心 │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ [查询条件区] │
|
|
|
│ 告警类型[▼全部] 处理状态[▼未处理] 时间范围[__________] │
|
|
|
│ 机床[▼全部] 关键字[___________] [查询] [重置] │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ [统计区] │
|
|
|
│ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │
|
|
|
│ │未处理 │ │采集失败│ │设备离线│ │产量异常│ │未知设备│ │
|
|
|
│ │ 15 │ │ 5 │ │ 6 │ │ 2 │ │ 2 │ │
|
|
|
│ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ [操作栏] [批量标记已处理] │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ [列表区] │
|
|
|
│ [x] | 时间 | 类型 | 标题 | 机床 | 详情 | 状态 | 操作 │
|
|
|
│ [x] | 2026-04-25 17:30 | 采集失败 | 采集请求失败 | 西-1.8 | HTTP超时(30s) | 未处理 | [标记已处理] │
|
|
|
│ [x] | 2026-04-25 17:00 | 设备离线 | 设备离线 | 东-2.5 | 连续3次Ping失败 | 未处理 | [标记已处理] │
|
|
|
│ [x] | 2026-04-25 16:00 | 产量异常 | 产量骤降 | 南-3.1 | 产量下降>50% | 已处理 | [查看] │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ [分页] 共320条 每页[20▼] < 1 2 3 ... 16 > │
|
|
|
└──────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 3. 查询条件
|
|
|
|
|
|
| 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 |
|
|
|
|------|------|------|--------|------|------|
|
|
|
| 告警类型 | el-select(采集失败/设备离线/产量异常/未知设备/服务错误/全部) | 否 | 全部 | - | 无 |
|
|
|
| 处理状态 | el-select(未处理/已处理/全部) | 否 | 未处理 | - | 无 |
|
|
|
| 时间范围 | el-date-picker type=daterange | 否 | 空 | - | 无 |
|
|
|
| 机床 | el-select filterable | 否 | 全部 | - | 无 |
|
|
|
| 关键字 | el-input placeholder=标题/详情 | 否 | 空 | - | 无 |
|
|
|
|
|
|
### 4. 列表字段
|
|
|
|
|
|
| 字段名 | 列宽 | 排序 | 筛选 | 固定 | 超长处理 | 对齐 |
|
|
|
|--------|------|------|------|------|---------|------|
|
|
|
| 选择框 | 50 | - | - | left | - | center |
|
|
|
| 告警时间 | - | y | - | - | - | center |
|
|
|
| 告警类型 | - | - | - | - | - | center |
|
|
|
| 标题 | - | - | - | - | tooltip | left |
|
|
|
| 机床 | - | - | - | - | tooltip | center |
|
|
|
| 详情 | - | - | - | - | tooltip | left |
|
|
|
| 处理状态 | - | - | - | - | - | center |
|
|
|
| 操作 | 120 | - | - | right | - | center |
|
|
|
|
|
|
> 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则:选择框固定50,数据列不设width自动均分,操作列固定120。
|
|
|
|
|
|
### 5. 操作按钮
|
|
|
|
|
|
| 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 |
|
|
|
|------|---------|------|---------|---------|
|
|
|
| 批量标记已处理 | alert:resolve | 页头 | 已选含未处理项 | 确认->批量标记 |
|
|
|
| 标记已处理 | alert:resolve | 行操作 | is_resolved=0 | 确认->标记已处理 |
|
|
|
| 查看 | - | 行操作 | is_resolved=1 | 弹窗展示详情(只读) |
|
|
|
|
|
|
### 6. 弹窗规格
|
|
|
|
|
|
**告警详情弹窗(只读):**
|
|
|
- 宽度600px,标题=告警详情
|
|
|
|
|
|
| 展示字段 | 说明 |
|
|
|
|---------|------|
|
|
|
| 告警时间 | created_at |
|
|
|
| 告警类型 | alert_type |
|
|
|
| 标题 | title |
|
|
|
| 机床 | 关联机床名 |
|
|
|
| 采集地址 | 关联采集地址名 |
|
|
|
| 详情 | detail(完整文本) |
|
|
|
| 处理状态 | is_resolved |
|
|
|
| 处理时间 | resolved_at |
|
|
|
|
|
|
### 7. 状态机
|
|
|
|
|
|
告警类型(alert_type):
|
|
|
- collect_fail(采集失败): el-tag warning
|
|
|
- device_offline(设备离线): el-tag danger
|
|
|
- production_anomaly(产量异常): el-tag warning
|
|
|
- unknown_device(未知设备): el-tag info
|
|
|
- service_error(服务错误): el-tag danger
|
|
|
|
|
|
处理状态(is_resolved):
|
|
|
- 0(未处理): el-tag danger -> 可标记已处理
|
|
|
- 1(已处理): el-tag success -> 只读查看
|
|
|
|
|
|
### 8. 交互流程
|
|
|
|
|
|
- 加载:默认查未处理告警->请求列表API+统计API->渲染
|
|
|
- 查询:选条件->查询->重置page=1->请求列表+统计
|
|
|
- 重置:清空条件(恢复默认"未处理")->请求
|
|
|
- 标记已处理:确认"确定标记为已处理? "->调API->刷新列表+统计
|
|
|
- 批量标记:勾选未处理告警->点批量标记->确认"确定对选中的{N}项标记为已处理? "->调API->刷新
|
|
|
- 查看详情:弹窗(只读)->关闭
|
|
|
|
|
|
### 9. 空状态
|
|
|
|
|
|
列表无数据:el-empty 暂无告警数据
|
|
|
统计区:各类型计数为0时显示0
|
|
|
|
|
|
### 10. 接口引用与数据结构
|
|
|
|
|
|
> Mock/正式API的URL、HTTP方法均定义在 `03-API接口设计.md` §3.8 端点清单,本节仅引用编号并定义返回数据结构。
|
|
|
|
|
|
#### 接口引用
|
|
|
|
|
|
| 接口名称 | 端点编号 | 界面用途 |
|
|
|
|---------|---------|---------|
|
|
|
| 告警统计 | §3.8 #1 | 顶部按类型统计卡片 |
|
|
|
| 告警列表 | §3.8 #2 | 表格数据,分页渲染 |
|
|
|
| 处理单条告警 | §3.8 #3 | 行操作"处理"按钮 |
|
|
|
| 批量处理告警 | §3.8 #4 | 批量处理按钮 |
|
|
|
| 机床下拉 | §3.13 #3 | 查询条件下拉 |
|
|
|
|
|
|
#### 数据结构
|
|
|
|
|
|
**告警统计(§3.8 #1):**
|
|
|
|
|
|
Response:
|
|
|
```json
|
|
|
{ "code": 0, "data": { "unresolved": 15, "collectFail": 5, "deviceOffline": 6, "productionAnomaly": 2, "unknownDevice": 2, "serviceError": 0 }}
|
|
|
```
|
|
|
|
|
|
**告警列表(§3.8 #2):**
|
|
|
|
|
|
Response:
|
|
|
```json
|
|
|
{ "code": 0, "data": { "items": [
|
|
|
{ "id": 1, "createdAt": "2026-04-25T17:30:00", "alertType": "collect_fail", "title": "采集请求失败", "machineName": "西-1.8", "detail": "HTTP超时(30s),连续失败3次", "isResolved": 0, "resolvedAt": null },
|
|
|
{ "id": 2, "createdAt": "2026-04-25T17:00:00", "alertType": "device_offline", "title": "设备离线", "machineName": "东-2.5", "detail": "连续3次Ping失败,IP:10.1.2.5", "isResolved": 0, "resolvedAt": null },
|
|
|
{ "id": 3, "createdAt": "2026-04-25T16:00:00", "alertType": "production_anomaly", "title": "产量骤降", "machineName": "南-3.1", "detail": "近1小时产量较前1小时下降>50%", "isResolved": 1, "resolvedAt": "2026-04-25T16:30:00" },
|
|
|
{ "id": 4, "createdAt": "2026-04-25T15:00:00", "alertType": "unknown_device", "title": "未知设备接入", "machineName": null, "detail": "采集地址FANUC-A栋返回未注册设备: fanake_9.9", "isResolved": 0, "resolvedAt": null }
|
|
|
], "total": 320, "page": 1, "pageSize": 20 }}
|
|
|
```
|
|
|
|
|
|
**处理单条告警(§3.8 #3)/ 批量处理告警(§3.8 #4):**
|
|
|
|
|
|
Response:
|
|
|
```json
|
|
|
{ "code": 0, "message": "success", "data": null }
|
|
|
```
|
|
|
|
|
|
### 11. 数据需求
|
|
|
|
|
|
> 以下为本页面需要的数据,数据库设计定稿时需覆盖。参考 `01-数据库设计.md` 草案。
|
|
|
|
|
|
| 数据需求 | 草案对应 | 说明 |
|
|
|
|---------|---------|------|
|
|
|
| 告警列表(含分页) | cnc_alert | 主表,需JOIN机床名 |
|
|
|
| 告警统计(按类型) | cnc_alert | GROUP BY alert_type, is_resolved |
|
|
|
| 标记已处理 | cnc_alert.is_resolved/resolved_at | 批量更新 |
|
|
|
| 机床下拉 | cnc_machine | 查询条件 |
|