# 操作日志 > 模块编码: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)