📝 日志审计
查看所有敏感操作记录,支持按操作者/资源类型/时间范围筛选,导出CSV。
页面结构
- 顶部按钮:刷新 / 导出CSV
- 筛选栏:操作者下拉(从 /admin/users 加载)+ 资源类型下拉(动态从日志数据提取)+ 时间范围 + 清空按钮
- 搜索栏:按操作者昵称/操作类型/资源类型搜索(300ms防抖,本地过滤)
- 统计卡片:当前页记录数
- 日志表格:操作者 / 操作类型 / 资源类型 / 资源ID / IP地址 / 操作时间
- 分页器:总页数 + 上一页/下一页
触发时机详解
1. 页面加载 → 2个请求并发
触发条件:进入审计日志页面,GET /admin/users 和 GET /admin/audit-logs 同时发出
GET
/api/admin/audit-logs
✅ 页面加载时触发;切换分页时触发;筛选条件变化时触发(page 重置为 1)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
page | number | 选填 | 页码(默认1) |
limit | number | 选填 | 每页条数(默认30) |
start_date | string | 选填 | 创建时间起始(YYYY-MM-DD) |
end_date | string | 选填 | 创建时间截止(YYYY-MM-DD) |
user_id | string | 选填 | 操作用户ID |
resource_type | string | 选填 | 资源类型 |
响应:
{
"logs": [{
"id": "string",
"user_id": "string",
"user_nickname": "string",
"action": "string",
"resource_type": "string",
"resource_id": "string",
"details": "string",
"ip_address": "string",
"created_at": "ISO8601"
}],
"totalPages": 5,
"currentPage": 1
}
GET
/api/admin/users?limit=1000
✅ 页面加载时触发(用于填充操作者筛选下拉)
2. 修改筛选条件 → 重新请求(page 重置为 1)
触发条件:修改操作者 / 资源类型 / 开始时间 / 结束时间任意一项 → setPage(1) + fetchLogs()
3. 搜索框输入(本地过滤,不发请求)
触发条件:搜索框输入 → 300ms 防抖后本地过滤(不回发请求)
过滤字段:user_nickname / action / resource_type
过滤字段:user_nickname / action / resource_type
4. 点击「刷新」
触发条件:点击刷新按钮 → 重新请求 GET /api/admin/audit-logs(保留当前筛选和分页状态)
5. 点击「导出CSV」→ 本地生成(无需后端)
触发条件:点击导出CSV按钮 → 纯前端 JS 根据筛选后本地数据生成 CSV 下载
6. 点击「清空」
触发条件:点击清空按钮 → 重置所有筛选条件 + 本地搜索状态为"", 并重置所有 ref 和 state
7. 切换分页 → 重新请求
触发条件:点击上一页/下一页 → setPage(N) → 重新请求(保留当前筛选条件)