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-功能清单/管理后台/11-操作日志/11-01-操作日志页面.md

201 lines
9.1 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. 基本信息
| 项 | 值 |
|----|-----|
| 路由 | /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 | left |
| 目标ID | - | - | - | center |
| 修正前 | - | - | - | center |
| 修正后 | - | - | - | center |
| 修正原因 | - | - | tooltip | left |
| 操作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 | left |
| 消息 | - | - | tooltip+点击展开详情 | left |
> 列宽规则见 `02-前端全局规范.md` el-table列宽均分规则数据列不设width自动均分。
### 5. 操作按钮
| 名称 | 权限编码 | 位置 | 显示条件 | 点击行为 |
|------|---------|------|---------|---------|
| 查询 | - | 查询区 | 始终 | 重置page=1->请求列表 |
| 重置 | - | 查询区 | 始终 | 清空条件->请求列表 |
| 导出 | log:export | 查询区 | Tab1产量修正日志 | 按当前查询条件导出Excel |
| 查看详情 | - | 行操作 | Tab2系统运行日志 | 弹窗展示完整消息+堆栈 |
### 6. 弹窗规格
**系统日志详情弹窗(只读):**
- 宽度700px标题=日志详情
| 展示字段 | 说明 |
|---------|------|
| 时间 | created_at |
| 级别 | log_level |
| 来源 | source |
| 消息 | message完整文本支持换行 |
| 堆栈信息 | stack_trace代码格式化展示无则为空 |
| 附加数据 | extra_dataJSON格式化展示 |
### 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 |