# 系统审计功能 - 页面改动说明

## 1. 文档目的

本文档用于记录本次"系统审计功能"在原型 Demo 及正式项目中涉及的页面范围、菜单调整、权限变更与具体改动点，便于后续开发、回溯或扩展修改。

---

## 2. 本次改动概述

本次目标是：

- 新增审计日志查询页面，基于现有埋点表 `DATA_TRACING` 展示系统操作日志
- 调整系统设置菜单结构，移除已被其他模块承接的旧菜单项
- 调整系统设置菜单可见性，审计员角色可访问

本次方案当前覆盖：

1. 审计日志查询页面新建（列表 + 筛选 + 详情弹窗；导出功能本期暂不实现）
2. 系统设置菜单结构调整（移除 4 个旧菜单项，新增 1 个）
3. 系统设置菜单可见性调整（审计员可见）

本次明确不包含：

- 后端新建日志表或拦截逻辑（复用现有 `DATA_TRACING` 表）
- 审计报告生成、异常告警、日志统计分析（后续迭代）
- Controller → MODULE 中文名映射（直接展示原有值）

---

## 3. 涉及页面范围

本次实际改动的页面文件如下：

- `xtgl/审计日志.html`（新建）

本次修改的配置文件：

- `src/data/info.json`（菜单配置）
- 或对应的菜单管理后台

本次仅设置可见性、不改动页面内容的模块：

- 系统设置菜单节点本身

本次移除的旧菜单项（清理）：

| 路由 | 菜单名 | 移除原因 |
|------|--------|---------|
| `/inProgress` | 已上线规则 | 功能已由风险管理模块承接 |
| `/launchedRules` | 上线中规则 | 功能已由风险管理模块承接 |
| `/draftRules` | 草稿规则 | 功能已由风险管理模块承接 |
| `/riskDoubtManagement` | 风险疑点管理 | 功能已由风险管理模块承接 |

---

## 4. 各页面/配置改动说明

### 4.1 菜单配置（info.json / 菜单管理后台）

#### 改动目的

- 新增审计日志菜单入口
- 清理系统设置下已被替代的旧菜单
- 调整菜单可见角色

#### 具体改动

**4.1.1 新增菜单项**

| 属性 | 值 |
|------|-----|
| 父级模块 | 系统设置（`xtgl`） |
| 菜单名称 | 审计日志 |
| 路由地址 | `/xtgl/auditLog` |
| 可见角色 | `qzxtxtgly`（系统管理员）、`auditor`（审计员） |
| 图标 | 沿用系统设置模块图标 `Platform` |

**4.1.2 移除菜单项**

在 `xtgl` 节点下删除以下 4 个菜单配置：

| 菜单名 | 原路由 | 原可见角色 |
|--------|--------|-----------|
| 已上线规则 | `/inProgress` | `qzxtxtgly` |
| 上线中规则 | `/launchedRules` | `qzxtxtgly` |
| 草稿规则 | `/draftRules` | `qzxtxtgly` |
| 风险疑点管理 | `/riskDoubtManagement` | `qzxtxtgly` |

**4.1.3 调整后系统设置菜单结构**

```
系统设置 (xtgl) [qzxtxtgly, auditor]
└── 审计日志  /xtgl/auditLog
```

**4.1.4 模块可见性变更**

| 模块 | 原可见角色 | 新可见角色 | 变更说明 |
|------|-----------|-----------|---------|
| 系统设置 (`xtgl`) | `qzxtxtgly` | `qzxtxtgly`, `auditor` | 新增审计员可见 |

---

### 4.2 审计日志页面（新建）

#### 文件

- `xtgl/审计日志.html`（Demo 原型）
- 正式项目对应 Vue 组件：`src/views/xtgl/auditLog.vue`

#### 页面布局

```
┌──────────────────────────────────────────────────────────────────────┐
│  系统设置 / 审计日志                                                   │
├──────────────────────────────────────────────────────────────────────┤
│  操作时间：[____] 至 [____]   操作人：[________]                       │
│  操作类型：[全部  ▼]  所属模块：[全部  ▼]  操作结果：[全部  ▼]         │
│  IP地址：[________]                            [查询] [重置]           │
├──────────────────────────────────────────────────────────────────────┤
│  共 XXXX 条记录                                                       │
├──────────────────────────────────────────────────────────────────────┤
│  操作时间│操作人│所属单位│操作类型│操作描述│所属模块│方式│IP│结果│耗时│操作│
│  ───────┼──────┼───────┼───────┼───────┼───────┼───┼──┼───┼───┼───│
│  05-18..│黄振林│超高压..│ QUERY │分页查..│风险场..│POST│..│成功│25 │详情│
│  ───────┴──────┴───────┴───────┴───────┴───────┴───┴──┴───┴───┴───│
│  [< 1 2 3 ... >]    每页 [20 ▼] 条                                   │
└──────────────────────────────────────────────────────────────────────┘
```

#### 列表字段（11 列）

| # | 列名 | 数据来源字段 | 宽度 | 说明 |
|---|------|-------------|------|------|
| 1 | 操作时间 | `OPERATION_TIME` | 180px | YYYY-MM-DD HH:mm:ss，默认降序 |
| 2 | 操作人 | `OPERATOR_NAME` | 100px | - |
| 3 | 所属单位 | `OPERATOR_ORG_NAME` | 150px | - |
| 4 | 操作类型 | `OPERATION_TYPE` | 90px | 彩色标签（ADD绿/UPDATE橙/DELETE红/QUERY蓝/EXPORT紫/IMPORT青/LOGIN_SUCCESS绿/LOGIN_FAIL红/LOGOUT灰/OTHER灰） |
| 5 | 操作描述 | `OPERATION_NAME_CN` | 自适应 | 最可读字段，如"分页查询风险场景""登录认证" |
| 6 | 所属模块 | `MODULE_NAME_CN` | 150px | Controller 中文名 |
| 7 | 请求方式 | `HTTP_METHOD` | 70px | GET / POST / PUT / DELETE |
| 8 | IP 地址 | `REQUEST_IP` | 130px | - |
| 9 | 操作结果 | `STATUS` | 80px | 1=成功（绿色）/ 0=失败（红色） |
| 10 | 耗时(ms) | `DURATION_MS` | 80px | 右对齐 |
| 11 | 操作 | - | 100px | "查看详情"按钮 |

#### 筛选条件（6 项）

| # | 筛选项 | 控件类型 | 数据来源字段 | 默认值 |
|---|--------|---------|-------------|--------|
| 1 | 操作时间 | 日期范围选择器 | `OPERATION_TIME` | 近 7 天 |
| 2 | 操作人 | 文本输入（模糊） | `OPERATOR_NAME` | 空 |
| 3 | 操作类型 | 下拉单选 | `OPERATION_TYPE` | 全部 |
| 4 | 所属模块 | 下拉单选 | `MODULE_NAME_CN` | 全部 |
| 5 | 操作结果 | 下拉单选 | `STATUS` | 全部 |
| 6 | IP 地址 | 文本输入（模糊） | `REQUEST_IP` | 空 |

操作类型下拉选项：`ADD / UPDATE / DELETE / QUERY / EXPORT / IMPORT / LOGIN_SUCCESS / LOGIN_FAIL / LOGOUT / OTHER`

#### 详情弹窗（4 区域）

| 区域 | 展示内容 | 数据来源 |
|------|---------|---------|
| 基本信息 | 操作时间、操作人、所属单位、IP 地址 | `OPERATION_TIME`、`OPERATOR_NAME`、`OPERATOR_ORG_NAME`、`REQUEST_IP` |
| 操作信息 | 操作类型、所属模块(CN)、操作描述(CN)、请求 URL、HTTP 方法 | `OPERATION_TYPE`、`MODULE_NAME_CN`、`OPERATION_NAME_CN`、`REQUEST_URL`、`HTTP_METHOD` |
| 请求参数 | JSON 格式化展示 | `REQUEST_PARAMS` |
| 执行结果 | 成功/失败、错误信息、耗时(ms) | `STATUS`、`ERROR_MSG`、`DURATION_MS` |

#### 导出功能

> **本期暂不实现**，纳入后续迭代。

| 属性 | 说明 |
|------|------|
| 按钮位置 | 列表右上角"导出 Excel" |
| 导出范围 | 当前筛选条件下的数据 |
| 导出字段 | 列表可见的 11 列 |
| 数量限制 | 单次最多 10000 条 |

#### 接口依赖

| 接口 | 方法 | 说明 |
|------|------|------|
| `/core/auditLog/list` | GET | 分页查询列表 |
| `/core/auditLog/detail/{id}` | GET | 查询详情 |
| `/core/auditLog/export` | POST | 导出 Excel（本期暂不实现） |

#### 待确认 / 已知局限

- `MODULE_NAME_CN` 当前为 Controller 中文名（如"风险派发和处置"），不是用户侧菜单名，暂不映射
- `OPERATION_NAME_CN` 极少数接口可能缺少 `@Operation.summary`，兜底展示方法名
- 无 `USER_AGENT`、无 `OPERATE_OBJECT` 字段，本期接受
- QUERY 类型日志量大，本期不隐藏，全部展示

---

### 4.3 审计员登录后的只读模式

#### 涉及范围

所有业务模块页面（风险监控、制度分析、业务架构等），非本次新建，通过路由守卫 + `readonly=true` 参数全局生效。

#### 改动点

| 改动项 | 说明 |
|--------|------|
| 操作按钮 | 隐藏所有新增、修改、删除、审批按钮 |
| 表单控件 | 禁用所有输入框、下拉框、日期选择器 |
| 导出按钮 | 保留（本期暂不实现导出功能） |
| 审计日志页面 | **不受只读模式影响**，正常查询和操作 |

---

## 5. 交互流程说明

### 5.1 审计员登录

```
审计员登录
  → 路由守卫识别 auditor 角色，全局附加 readonly=true
  → 左侧菜单展示全部模块（同管理员）
  → 业务页面所有操作按钮隐藏、表单禁用
  → 系统设置菜单可见（此前不可见）
  → 点击系统设置 → 审计日志 → 进入查询页面
```

### 5.2 审计日志查询

```
进入审计日志页面
  → 默认展示近 7 天全部操作记录（按时间倒序）
  → 可设置筛选条件后点击"查询"
  → 点击"查看详情"弹出详情弹窗
```

---

## 6. 改动统计

| 类别 | 数量 | 说明 |
|------|------|------|
| 新建页面 | 1 | `xtgl/审计日志.html` |
| 菜单新增 | 1 | 审计日志 |
| 菜单移除 | 4 | 已上线规则、上线中规则、草稿规则、风险疑点管理 |
| 权限变更 | 1 | 系统设置模块新增 `auditor` 角色可见 |
| 新建接口 | 2 | list / detail（export 接口本期暂不实现） |
