# 操作日志页面

> 最后更新：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 |
