|
|
# 操作日志
|
|
|
|
|
|
> 模块编码:audit-log
|
|
|
> 端侧:Web专属(仅超级管理员)
|
|
|
> 关联文档:01-模块划分 §2.3 / 02-功能清单-超级管理员 §4 / 03-业务流转逻辑-超级管理员 §8 / 05-接口规范 §9.2 / 06-项目技术要求 §4.5
|
|
|
> 强制规范遵循 `07-前端界面开发规范.md`
|
|
|
|
|
|
## 功能概览
|
|
|
|
|
|
| 项目 | 说明 |
|
|
|
|------|------|
|
|
|
| 菜单名称 | 操作日志 |
|
|
|
| 子菜单 | 权限变更日志、账号操作日志 |
|
|
|
| 功能编号 | SA-L-01 ~ SA-L-02 |
|
|
|
| 权限编码前缀 | audit-log:permission:view / audit-log:list:* |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面1:权限变更日志页
|
|
|
|
|
|
**页面编号**:SA-L-01-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/audit-log/permission
|
|
|
|
|
|
### 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 操作日志 > 权限变更日志 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [查询条件区] │
|
|
|
│ 操作人[____] 操作类型[▼] 角色[____] 日期[起始]~[结束] [查询] [重置]│
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [列表区] │
|
|
|
│ 序号 | 操作时间 | 操作人 | 操作类型 | 目标角色 | 变更摘要 | 操作 │
|
|
|
│ 1 | 14:00 | admin | 权限修改 | 巡检主管 | +2项 -1项 | 查看 │
|
|
|
│ 2 | 11:30 | admin | 角色创建 | 保洁主管 | 初始权限 | 查看 │
|
|
|
│ 3 | 09:15 | admin | 角色分配 | 医院查看 | 分配给5个账号| 查看│
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [分页] 共120条 每页[20▼] < 1 2 3 ... 6 > │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 查询条件
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 说明 |
|
|
|
|--------|----------|------|--------|------|
|
|
|
| 操作人 | 文本输入 | 否 | — | 模糊匹配 |
|
|
|
| 操作类型 | 下拉单选 | 否 | 全部 | 角色创建/权限修改/角色分配/角色移除 |
|
|
|
| 角色 | 文本输入 | 否 | — | 模糊匹配角色名称 |
|
|
|
| 日期范围 | 日期范围 | 否 | — | 操作时间范围 |
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 序号 | 60px | — | 自增 |
|
|
|
| 2 | 操作时间 | 150px | 是 | 默认倒序 |
|
|
|
| 3 | 操作人 | 100px | 否 | — |
|
|
|
| 4 | 操作类型 | 100px | 否 | 彩色标签区分 |
|
|
|
| 5 | 目标角色 | 120px | 否 | — |
|
|
|
| 6 | 变更摘要 | 150px | 否 | +N项 -M项 简述 |
|
|
|
| 7 | 操作 | 80px | — | 查看详情 |
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 查看详情 | audit-log:permission:view | 行操作 | 始终 | 弹窗展示变更前后对比 |
|
|
|
|
|
|
### 变更详情弹窗
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ 权限变更详情 [×] │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ 角色:巡检主管 │
|
|
|
│ 操作人:超级管理员(admin) │
|
|
|
│ 操作时间:2026-04-16 14:00:00 │
|
|
|
│ 操作类型:权限修改 │
|
|
|
│ 操作IP:192.168.1.100 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ 变更对比: │
|
|
|
│ [+新增] 在线报修 → 工单详情 → 延期审批 → 审批 │
|
|
|
│ [+新增] 在线报修 → 工单列表 → 工单管理 → 导出 │
|
|
|
│ [-移除] 巡检管理 → 巡检计划 → 计划管理 → 删除 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [关闭] │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### API端点
|
|
|
|
|
|
| 页面操作 | API路径 | 方法 | 说明 |
|
|
|
|----------|---------|------|------|
|
|
|
| 列表查询 | /api/v1/audit-logs/permission | GET | 分页查询 |
|
|
|
| 详情查询 | /api/v1/audit-logs/permission/{id} | GET | 含变更前后对比 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**
|
|
|
- 进入页面 → 调用 `GET /api/v1/audit-logs/permission` 加载列表(默认倒序)
|
|
|
- 并行加载操作类型下拉
|
|
|
- 列表为空时显示空状态
|
|
|
|
|
|
2. **查询交互流程**
|
|
|
- 填写条件 → 点击"查询"→ 调用API → 重置到第1页
|
|
|
- 日期范围最多查询90天
|
|
|
|
|
|
3. **行内操作流程**
|
|
|
- **查看详情**:点击"查看"→ 弹窗展示变更前后对比
|
|
|
- 新增权限绿色 `[+新增]` 标记,移除权限红色 `[-移除]` 标记
|
|
|
|
|
|
4. **异常处理**
|
|
|
- 日期范围超限 → 提示"查询时间范围不能超过90天"
|
|
|
- 详情加载失败 → 提示错误信息
|
|
|
|
|
|
5. **权限控制交互**
|
|
|
- 无 `audit-log:permission:view` → 页面不可见
|
|
|
|
|
|
6. **[H1]防重复请求**(列表页)
|
|
|
- 查询按钮点击后 disabled + loading态,API返回后恢复
|
|
|
- 行内"查看"按钮点击后整行操作禁用 + loading态
|
|
|
- 分页切换 abort上一请求后再发新请求
|
|
|
|
|
|
7. **[H2]超时与加载反馈**(列表页)
|
|
|
- 列表查询 timeout=15秒
|
|
|
- 超时 → ElMessage.error("请求超时,请稍后重试") + 按钮恢复
|
|
|
- 加载>2秒显示全局ElLoading
|
|
|
|
|
|
8. **[H8]操作结果反馈**
|
|
|
- 查询成功 → 正常渲染;查询失败 → ElMessage.error(0手动关闭)
|
|
|
|
|
|
9. **[H1]防重复请求**(详情弹窗)
|
|
|
- 详情查看:点击"查看"后该行按钮disabled,弹窗加载完成后恢复
|
|
|
|
|
|
10. **[H2]超时与加载反馈**(详情弹窗)
|
|
|
- 详情查询 timeout=15秒
|
|
|
- 弹窗内 v-loading 展示加载态
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 日期范围选择 | el-date-picker | type="daterange", value-format="YYYY-MM-DD" |
|
|
|
| 操作类型标签 | el-tag | 角色创建:type="success", 权限修改:type="warning", 角色分配:type="primary", 角色移除:type="danger" |
|
|
|
| 变更摘要 | span | [+N项] color=green, [-M项] color=red |
|
|
|
| 详情弹窗 | el-dialog | width="650px" |
|
|
|
| 新增权限 | div | color=var(--el-color-success) |
|
|
|
| 移除权限 | div | color=var(--el-color-danger) |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 日期范围 | 最多90天 | "查询时间范围不能超过90天" |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 查询条件一行排列;列表完整展示所有列 |
|
|
|
| 1024-1279px(Pad横屏) | 查询条件两行排列;"目标角色"列隐藏 |
|
|
|
| 768-1023px(Pad竖屏) | 查询条件两行排列;列表仅显示:序号、操作时间、操作人、操作类型、操作 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面2:账号操作日志页
|
|
|
|
|
|
**页面编号**:SA-L-02-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/audit-log/account
|
|
|
|
|
|
### 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 操作日志 > 账号操作日志 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [查询条件区] │
|
|
|
│ 操作人[____] 操作类型[▼] 账号类型[▼] 日期[起始]~[结束] [查询] [重置]│
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [列表区] │
|
|
|
│ 序号 | 操作时间 | 操作人 | 操作类型 | 目标账号 | 账号类型 | 详情 │
|
|
|
│ 1 | 15:00 | admin | 账号创建 | hosp01 | 医院 | 查看 │
|
|
|
│ 2 | 14:30 | admin | 账号续期 | prop01 | 物业 | 查看 │
|
|
|
│ 3 | 10:00 | admin | 账号禁用 | prop02 | 物业 | 查看 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [分页] 共85条 每页[20▼] < 1 2 3 4 5 > │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 查询条件
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 说明 |
|
|
|
|--------|----------|------|--------|------|
|
|
|
| 操作人 | 文本输入 | 否 | — | 模糊匹配 |
|
|
|
| 操作类型 | 下拉单选 | 否 | 全部 | 创建/编辑/启用/禁用/续期/重置密码 |
|
|
|
| 账号类型 | 下拉单选 | 否 | 全部 | 医院/物业管理员 |
|
|
|
| 日期范围 | 日期范围 | 否 | — | 操作时间范围 |
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 序号 | 60px | — | 自增 |
|
|
|
| 2 | 操作时间 | 150px | 是 | 默认倒序 |
|
|
|
| 3 | 操作人 | 100px | 否 | — |
|
|
|
| 4 | 操作类型 | 100px | 否 | 彩色标签 |
|
|
|
| 5 | 目标账号 | 120px | 否 | — |
|
|
|
| 6 | 账号类型 | 90px | 否 | 医院/物业管理员 |
|
|
|
| 7 | 绑定单位 | 150px | 否 | 医院或物业公司名称 |
|
|
|
| 8 | 详情 | 80px | — | 查看 |
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 查看详情 | audit-log:list:view | 行操作 | 始终 | 弹窗展示完整操作信息 |
|
|
|
|
|
|
### 操作详情弹窗
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ 账号操作详情 [×] │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ 操作人:超级管理员(admin) │
|
|
|
│ 操作时间:2026-04-16 15:00:00 │
|
|
|
│ 操作IP:192.168.1.100 │
|
|
|
│ 操作类型:账号创建 │
|
|
|
│ 目标账号:hosp01 │
|
|
|
│ 账号类型:医院账号 │
|
|
|
│ 绑定医院:XX医院 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ 变更前数据:(无,新增操作) │
|
|
|
│ 变更后数据: │
|
|
|
│ 登录账号:hosp01 │
|
|
|
│ 绑定医院:XX医院 │
|
|
|
│ 有效期至:2027-04-16 │
|
|
|
│ 分配角色:医院查看模板 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [关闭] │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### API端点
|
|
|
|
|
|
| 页面操作 | API路径 | 方法 | 说明 |
|
|
|
|----------|---------|------|------|
|
|
|
| 列表查询 | /api/v1/audit-logs/account | GET | 分页查询 |
|
|
|
| 详情查询 | /api/v1/audit-logs/account/{id} | GET | 含变更前后数据 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用列表API加载(默认倒序)→ 并行加载操作类型和账号类型下拉
|
|
|
2. **查询交互**:填写条件 → 点击"查询"→ API调用 → 重置到第1页;日期范围最多90天
|
|
|
3. **行内操作**:点击"查看"→ 弹窗展示完整操作信息(操作人、时间、IP、变更前后数据对比)
|
|
|
4. **异常处理**:日期超限提示;详情加载失败提示错误
|
|
|
5. **权限控制**:无 `audit-log:list:view` → 页面不可见
|
|
|
|
|
|
6. **[H1]防重复请求**(列表页)
|
|
|
- 查询按钮点击后 disabled + loading态,API返回后恢复
|
|
|
- 行内"查看"按钮点击后整行操作禁用 + loading态
|
|
|
- 分页切换 abort上一请求后再发新请求
|
|
|
|
|
|
7. **[H2]超时与加载反馈**(列表页)
|
|
|
- 列表查询 timeout=15秒
|
|
|
- 超时 → ElMessage.error("请求超时,请稍后重试") + 按钮恢复
|
|
|
- 加载>2秒显示全局ElLoading
|
|
|
|
|
|
8. **[H8]操作结果反馈**
|
|
|
- 查询成功 → 正常渲染;查询失败 → ElMessage.error(0手动关闭)
|
|
|
|
|
|
9. **[H1]防重复请求**(详情弹窗)
|
|
|
- 详情查看:点击"查看"后该行按钮disabled,弹窗加载完成后恢复
|
|
|
|
|
|
10. **[H2]超时与加载反馈**(详情弹窗)
|
|
|
- 详情查询 timeout=15秒
|
|
|
- 弹窗内 v-loading 展示加载态
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 日期范围选择 | el-date-picker | type="daterange", value-format="YYYY-MM-DD" |
|
|
|
| 操作类型标签 | el-tag | 创建:type="success", 编辑:type="primary", 启用:type="success", 禁用:type="danger", 续期:type="warning", 重置密码:type="info" |
|
|
|
| 详情弹窗 | el-dialog | width="600px" |
|
|
|
| 变更前数据 | el-descriptions | title="变更前", :column=1, border |
|
|
|
| 变更后数据 | el-descriptions | title="变更后", :column=1, border |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 日期范围 | 最多90天 | "查询时间范围不能超过90天" |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px | 查询条件一行;列表完整展示 |
|
|
|
| 1024-1279px | 查询条件两行;"绑定单位"列隐藏 |
|
|
|
| 768-1023px | 查询条件两行;列表仅显示:序号、操作时间、操作人、操作类型、详情 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 需求追溯
|
|
|
|
|
|
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|
|
|
|------------|----------|----------|----------|----------|
|
|
|
| SA-L-01 | 权限变更日志 | 02-超级管理员 §4 / 03-超级管理员 §8.2 / 01 §8.5 | — | 权限管理(变更时自动记录) |
|
|
|
| SA-L-02 | 账号操作日志 | 02-超级管理员 §4 / 03-超级管理员 §8.1 | — | 账号管理(操作时自动记录) |
|
|
|
|
|
|
## 业务规则
|
|
|
|
|
|
1. **日志记录范围**:权限管理(角色创建/修改/删除、权限分配/变更)、账号管理(创建/启停/续期/有效期修改)、系统管理(配置变更/缓存清理/版本管理)(来源:03-超级管理员 §8.1)
|
|
|
2. **权限审计日志特殊展示**:额外展示变更前后权限对比,用[+新增][-移除]标记(来源:03-超级管理员 §8.2)
|
|
|
3. **日志记录内容**:操作人、时间、IP、模块、操作类型、变更前后数据快照(来源:06 §4.5)
|
|
|
4. **日志保留期限**:至少保留1年,支持导出(来源:06 §4.5)
|
|
|
5. **自动记录**:所有写操作通过AOP切面统一记录,业务代码无感知(来源:06 §4.5)
|
|
|
6. **超管仅查看系统数据**:超管操作日志仅涉及账号/权限/系统配置相关操作,不包含任何业务数据(来源:01 §1.3)
|