# 操作日志强化需求

## 背景

当前后台已经具备基础操作日志能力，可以记录部分后台动作并在页面查看。随着证书、学员、项目、导入文件等管理动作增多，日志需要更方便排查问题、追踪责任和留档审计。

## 一期目标

快速增强后台操作日志的可用性，不做复杂审计系统，但要满足日常运营排查和关键动作追踪。

## 功能需求

1. 日志列表支持筛选和搜索：
   - 按操作类型筛选。
   - 按对象类型筛选。
   - 按风险等级筛选。
   - 按关键词搜索对象 ID、摘要、详情内容。

2. 日志显示更易读：
   - 操作名显示中文。
   - 对象类型显示中文。
   - 增加操作摘要，例如“作废证书：PX2026-xxx”“删除导入文件：test.xlsx”。
   - 高风险动作增加醒目标记。

3. 日志详情弹窗：
   - 展示操作时间、操作人、操作、对象、对象 ID、风险等级。
   - 展示摘要。
   - 展示完整详情 JSON，便于排查。

4. 关键动作记录更多上下文：
   - 新增/修改/停用项目记录项目代码、名称、状态变化。
   - 新增/修改/删除学员记录姓名、脱敏手机号、状态变化。
   - 新增/作废/重置链接证书记录证书编号和学员信息。
   - 上传/确认/删除导入批次记录文件名、导入统计。

5. 日志导出：
   - 支持导出 Excel。
   - 导出内容包含时间、操作人、操作、对象、对象 ID、风险等级、摘要、详情。

## 风险等级规则

高风险：
- 作废证书。
- 删除导入批次/导入原文件。
- 重置证书公开链接。
- 停用项目。
- 删除学员。

中风险：
- 修改项目。
- 修改学员。
- 确认导入。
- 新增证书。

低风险：
- 新增项目。
- 新增学员。
- 上传导入文件。
- 导出数据。

## 暂不做

- 日志删除功能。
- 日志归档策略。
- 复杂审计报表。
- 登录失败风控和异常 IP 告警。

## 日志保留与清理策略

一期采用自动清理过期日志，不开放任意删除单条日志，避免审计证据被误删。

- 普通后台操作日志保留 180 天。
- 学员公开查询、公开下载日志保留 180 天。
- 高风险后台操作日志保留 365 天，包括作废证书、删除导入批次、重置证书公开链接、删除学员。
- 系统启动和进入日志管理时可以触发过期清理。
- 后台日志页提供“清理过期日志”按钮，只清理超过保留周期的日志，不删除未过期日志。

## 公开访问日志

需要记录学员/外部用户主动查询和下载电子证书的行为，用于排查“用户是否查过/下载过”的问题。

- 公开查询证书：
  - 记录查询方式：证书编号或手机号。
  - 记录姓名。
  - 手机号脱敏。
  - 记录匹配数量。
  - 记录失败查询，但不记录验证码。

- 公开下载证书：
  - 记录证书编号。
  - 记录学员姓名。
  - 记录项目代码。
  - 不记录公开 token 原文。

## 自行决策记录

- 一期优先增强后台日常可用性，不引入新的日志表结构。
- 风险等级先由操作类型在服务端/前端映射计算，避免为当前版本增加迁移复杂度。
- 敏感信息在摘要里脱敏，完整详情尽量不写入明文手机号或 token。
- 公开查询/下载先进入同一张操作日志表，操作人 ID 为空，用“公开访问”对象类型区分。
