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.
17 KiB
17 KiB
操作日志
模块编码: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 | 含变更前后对比 |
交互流程要求
-
页面加载流程
- 进入页面 → 调用
GET /api/v1/audit-logs/permission加载列表(默认倒序) - 并行加载操作类型下拉
- 列表为空时显示空状态
- 进入页面 → 调用
-
查询交互流程
- 填写条件 → 点击"查询"→ 调用API → 重置到第1页
- 日期范围最多查询90天
-
行内操作流程
- 查看详情:点击"查看"→ 弹窗展示变更前后对比
- 新增权限绿色
[+新增]标记,移除权限红色[-移除]标记
-
异常处理
- 日期范围超限 → 提示"查询时间范围不能超过90天"
- 详情加载失败 → 提示错误信息
-
权限控制交互
- 无
audit-log:permission:view→ 页面不可见
- 无
-
[H1]防重复请求(列表页)
- 查询按钮点击后 disabled + loading态,API返回后恢复
- 行内"查看"按钮点击后整行操作禁用 + loading态
- 分页切换 abort上一请求后再发新请求
-
[H2]超时与加载反馈(列表页)
- 列表查询 timeout=15秒
- 超时 → ElMessage.error("请求超时,请稍后重试") + 按钮恢复
- 加载>2秒显示全局ElLoading
-
[H8]操作结果反馈
- 查询成功 → 正常渲染;查询失败 → ElMessage.error(0手动关闭)
-
[H1]防重复请求(详情弹窗)
- 详情查看:点击"查看"后该行按钮disabled,弹窗加载完成后恢复
-
[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 | 含变更前后数据 |
交互流程要求
-
页面加载流程:进入页面 → 调用列表API加载(默认倒序)→ 并行加载操作类型和账号类型下拉
-
查询交互:填写条件 → 点击"查询"→ API调用 → 重置到第1页;日期范围最多90天
-
行内操作:点击"查看"→ 弹窗展示完整操作信息(操作人、时间、IP、变更前后数据对比)
-
异常处理:日期超限提示;详情加载失败提示错误
-
权限控制:无
audit-log:list:view→ 页面不可见 -
[H1]防重复请求(列表页)
- 查询按钮点击后 disabled + loading态,API返回后恢复
- 行内"查看"按钮点击后整行操作禁用 + loading态
- 分页切换 abort上一请求后再发新请求
-
[H2]超时与加载反馈(列表页)
- 列表查询 timeout=15秒
- 超时 → ElMessage.error("请求超时,请稍后重试") + 按钮恢复
- 加载>2秒显示全局ElLoading
-
[H8]操作结果反馈
- 查询成功 → 正常渲染;查询失败 → ElMessage.error(0手动关闭)
-
[H1]防重复请求(详情弹窗)
- 详情查看:点击"查看"后该行按钮disabled,弹窗加载完成后恢复
-
[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 | — | 账号管理(操作时自动记录) |
业务规则
- 日志记录范围:权限管理(角色创建/修改/删除、权限分配/变更)、账号管理(创建/启停/续期/有效期修改)、系统管理(配置变更/缓存清理/版本管理)(来源:03-超级管理员 §8.1)
- 权限审计日志特殊展示:额外展示变更前后权限对比,用[+新增][-移除]标记(来源:03-超级管理员 §8.2)
- 日志记录内容:操作人、时间、IP、模块、操作类型、变更前后数据快照(来源:06 §4.5)
- 日志保留期限:至少保留1年,支持导出(来源:06 §4.5)
- 自动记录:所有写操作通过AOP切面统一记录,业务代码无感知(来源:06 §4.5)
- 超管仅查看系统数据:超管操作日志仅涉及账号/权限/系统配置相关操作,不包含任何业务数据(来源:01 §1.3)