|
|
# 操作日志页面
|
|
|
|
|
|
> 最后更新:2026-04-26
|
|
|
> 状态:已设计
|
|
|
|
|
|
---
|
|
|
|
|
|
### 1. 基本信息
|
|
|
|
|
|
| 项 | 值 |
|
|
|
|----|-----|
|
|
|
| 路由 | /log |
|
|
|
| 权限 | admin |
|
|
|
| 入口 | 侧边栏操作日志 |
|
|
|
| 面包屑 | 首页 / 操作日志 |
|
|
|
|
|
|
### 2. 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 首页 / 操作日志 │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ [Tab切换] [产量修正日志] [系统运行日志] │
|
|
|
├──────────────────────────────────────────────────────────┤
|
|
|
│ │
|
|
|
│ ====== Tab1: 产量修正日志 ====== │
|
|
|
│ │
|
|
|
│ [查询条件区] │
|
|
|
│ 时间范围[__________] 目标[▼全部] 关键字[________] │
|
|
|
│ [查询] [重置] [导出] │
|
|
|
│ │
|
|
|
│ [列表区] │
|
|
|
│ 修正时间 | 目标表 | 目标ID | 修正前 | 修正后 | 原因 | 操作IP │
|
|
|
│ 2026-04-25 15:30 | daily_production | 3 | 310 | 320 | 传感器计数偏差 | 192.168.1.5│
|
|
|
│ 2026-04-24 10:15 | worker_summary | 12 | 850 | 900 | 漏计补录 | 192.168.1.5│
|
|
|
│ │
|
|
|
│ [分页] 共80条 每页[20▼] < 1 2 3 4 > │
|
|
|
│ │
|
|
|
│ ====== Tab2: 系统运行日志 ====== │
|
|
|
│ │
|
|
|
│ [查询条件区] │
|
|
|
│ 日志级别[▼全部] 来源[▼全部] 时间范围[__________] │
|
|
|
│ 关键字[___________] [查询] [重置] │
|
|
|
│ │
|
|
|
│ [列表区] │
|
|
|
│ 时间 | 级别 | 来源 | 消息 │
|
|
|
│ 2026-04-25 17:36 | INFO | CncCollector | 采集完成:32台成功 │
|
|
|
│ 2026-04-25 17:35 | WARN | CncCollector | 采集失败:1台超时 │
|
|
|
│ 2026-04-25 17:00 | ERROR | CncCollector | 连接拒绝:10.1.2.5 │
|
|
|
│ │
|
|
|
│ [分页] 共5600条 每页[20▼] < 1 2 3 ... 280 > │
|
|
|
└──────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 3. Tab1-产量修正日志
|
|
|
|
|
|
#### 查询条件
|
|
|
|
|
|
| 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 |
|
|
|
|------|------|------|--------|------|------|
|
|
|
| 时间范围 | el-date-picker type=daterange | 否 | 空 | - | 无 |
|
|
|
| 目标表 | el-select(daily_production/worker_daily_summary/全部) | 否 | 全部 | - | 无 |
|
|
|
| 关键字 | el-input placeholder=原因/操作IP | 否 | 空 | - | 无 |
|
|
|
|
|
|
#### 列表字段
|
|
|
|
|
|
| 字段名 | 列宽 | 排序 | 超长处理 | 对齐 |
|
|
|
|--------|------|------|---------|------|
|
|
|
| 修正时间 | - | y(默认倒序) | - | center |
|
|
|
| 目标表 | - | - | tooltip | center |
|
|
|
| 目标ID | - | - | - | center |
|
|
|
| 修正前 | - | - | - | center |
|
|
|
| 修正后 | - | - | - | center |
|
|
|
| 修正原因 | - | - | tooltip | center |
|
|
|
| 操作IP | - | - | - | center |
|
|
|
|
|
|
> 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则:数据列不设width自动均分。
|
|
|
|
|
|
### 4. Tab2-系统运行日志
|
|
|
|
|
|
#### 查询条件
|
|
|
|
|
|
| 字段 | 控件 | 必填 | 默认值 | 校验 | 联动 |
|
|
|
|------|------|------|--------|------|------|
|
|
|
| 日志级别 | el-select(ERROR/WARN/INFO/DEBUG/全部) | 否 | 全部 | - | 无 |
|
|
|
| 来源 | el-select(CncCollector/WebApi/Scheduler/全部) | 否 | 全部 | - | 无 |
|
|
|
| 时间范围 | el-date-picker type=daterange | 否 | 空 | - | 无 |
|
|
|
| 关键字 | el-input placeholder=消息内容 | 否 | 空 | - | 无 |
|
|
|
|
|
|
#### 列表字段
|
|
|
|
|
|
| 字段名 | 列宽 | 排序 | 超长处理 | 对齐 |
|
|
|
|--------|------|------|---------|------|
|
|
|
| 时间 | - | y(默认倒序) | - | center |
|
|
|
| 级别 | - | - | - | center |
|
|
|
| 来源 | - | - | tooltip | center |
|
|
|
| 消息 | - | - | tooltip+点击展开详情 | center |
|
|
|
|
|
|
> 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则:数据列不设width自动均分。
|
|
|
|
|
|
### 5. 操作按钮
|
|
|
|
|
|
| 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 |
|
|
|
|------|---------|------|---------|---------|
|
|
|
| 查询 | - | 查询区 | 始终 | 重置page=1->请求列表 |
|
|
|
| 重置 | - | 查询区 | 始终 | 清空条件->请求列表 |
|
|
|
| 导出 | log:export | 查询区 | Tab1产量修正日志 | 按当前查询条件导出Excel |
|
|
|
| 查看详情 | - | 行操作 | Tab2系统运行日志 | 弹窗展示完整消息+堆栈 |
|
|
|
|
|
|
### 6. 弹窗规格
|
|
|
|
|
|
**系统日志详情弹窗(只读):**
|
|
|
- 宽度700px,标题=日志详情
|
|
|
|
|
|
| 展示字段 | 说明 |
|
|
|
|---------|------|
|
|
|
| 时间 | created_at |
|
|
|
| 级别 | log_level |
|
|
|
| 来源 | source |
|
|
|
| 消息 | message(完整文本,支持换行) |
|
|
|
| 堆栈信息 | stack_trace(代码格式化展示,无则为空) |
|
|
|
| 附加数据 | extra_data(JSON格式化展示) |
|
|
|
|
|
|
### 7. 状态机
|
|
|
|
|
|
日志级别(log_level):
|
|
|
- ERROR: el-tag danger
|
|
|
- WARN: el-tag warning
|
|
|
- INFO: el-tag success
|
|
|
- DEBUG: el-tag info
|
|
|
|
|
|
### 8. 交互流程
|
|
|
|
|
|
**Tab1-产量修正日志:**
|
|
|
- 加载:请求修正日志列表->渲染
|
|
|
- 查询:选条件->查询->重置page=1->请求列表
|
|
|
- 重置:清空条件->请求
|
|
|
- 导出:调API下载Excel
|
|
|
|
|
|
**Tab2-系统运行日志:**
|
|
|
- 加载:请求系统日志列表->渲染
|
|
|
- 查询:选条件->查询->重置page=1->请求列表
|
|
|
- 重置:清空条件->请求
|
|
|
- 查看详情:弹窗(只读)->展示完整消息+堆栈+附加数据->关闭
|
|
|
|
|
|
### 9. 空状态
|
|
|
|
|
|
修正日志无数据:el-empty 暂无产量修正记录
|
|
|
系统日志无数据:el-empty 暂无系统日志
|
|
|
查询无结果:el-empty 未找到匹配的日志,请调整查询条件
|
|
|
|
|
|
### 10. 接口引用与数据结构
|
|
|
|
|
|
> Mock/正式API的URL、HTTP方法均定义在 `03-API接口设计.md` §3.10 端点清单,本节仅引用编号并定义返回数据结构。
|
|
|
|
|
|
#### 接口引用
|
|
|
|
|
|
| 接口名称 | 端点编号 | 界面用途 |
|
|
|
|---------|---------|---------|
|
|
|
| 产量修正日志 | §3.10 #1 | Tab1表格数据,分页渲染 |
|
|
|
| 导出修正日志 | §3.10 #2 | Tab1导出Excel按钮 |
|
|
|
| 系统运行日志 | §3.10 #3 | Tab2表格数据,分页渲染 |
|
|
|
|
|
|
#### 数据结构
|
|
|
|
|
|
**产量修正日志(§3.10 #1):**
|
|
|
|
|
|
Response:
|
|
|
```json
|
|
|
{ "code": 0, "data": { "items": [
|
|
|
{ "id": 1, "createdAt": "2026-04-25T15:30:00", "targetTable": "daily_production", "targetId": 3, "oldValue": 310, "newValue": 320, "reason": "传感器计数偏差,手工校准", "operatorIp": "192.168.1.5" },
|
|
|
{ "id": 2, "createdAt": "2026-04-24T10:15:00", "targetTable": "worker_daily_summary", "targetId": 12, "oldValue": 850, "newValue": 900, "reason": "漏计补录,夜班产量未计入", "operatorIp": "192.168.1.5" }
|
|
|
], "total": 80, "page": 1, "pageSize": 20 }}
|
|
|
```
|
|
|
|
|
|
**系统运行日志(§3.10 #3):**
|
|
|
|
|
|
Response:
|
|
|
```json
|
|
|
{ "code": 0, "data": { "items": [
|
|
|
{ "id": 1, "createdAt": "2026-04-25T17:36:38", "logLevel": "INFO", "source": "CncCollector", "message": "采集完成: 32台成功, 0台失败", "stackTrace": null, "extraData": null },
|
|
|
{ "id": 2, "createdAt": "2026-04-25T17:35:38", "logLevel": "WARN", "source": "CncCollector", "message": "采集失败: 1台超时(fanake_2.5)", "stackTrace": null, "extraData": "{\"machineId\":4,\"addressId\":2,\"error\":\"timeout\"}" },
|
|
|
{ "id": 3, "createdAt": "2026-04-25T17:00:00", "logLevel": "ERROR", "source": "CncCollector", "message": "连接拒绝: 10.1.2.5", "stackTrace": "System.Net.Http.HttpRequestException: Connection refused\n at CncCollector.HttpClientWrapper.SendAsync()", "extraData": null },
|
|
|
{ "id": 4, "createdAt": "2026-04-25T01:00:00", "logLevel": "INFO", "source": "Scheduler", "message": "日终汇总完成: 160台, 耗时12秒", "stackTrace": null, "extraData": null }
|
|
|
], "total": 5600, "page": 1, "pageSize": 20 }}
|
|
|
```
|
|
|
|
|
|
**导出修正日志(§3.10 #2):**
|
|
|
|
|
|
二进制Excel文件,Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
|
|
|
|
|
### 11. 数据需求
|
|
|
|
|
|
> 以下为本页面需要的数据,数据库设计定稿时需覆盖。参考 `01-数据库设计.md` 草案。
|
|
|
|
|
|
| 数据需求 | 草案对应 | 说明 |
|
|
|
|---------|---------|------|
|
|
|
| 产量修正日志 | cnc_production_adjustment | 主表(业务库) |
|
|
|
| 系统运行日志 | log_system | 主表(日志库),按月分区 |
|
|
|
| 导出修正日志 | cnc_production_adjustment | 导出Excel |
|