📝 日志审计

查看所有敏感操作记录,支持按操作者/资源类型/时间范围筛选,导出CSV。

页面结构

  • 顶部按钮:刷新 / 导出CSV
  • 筛选栏:操作者下拉(从 /admin/users 加载)+ 资源类型下拉(动态从日志数据提取)+ 时间范围 + 清空按钮
  • 搜索栏:按操作者昵称/操作类型/资源类型搜索(300ms防抖,本地过滤)
  • 统计卡片:当前页记录数
  • 日志表格:操作者 / 操作类型 / 资源类型 / 资源ID / IP地址 / 操作时间
  • 分页器:总页数 + 上一页/下一页

触发时机详解

1. 页面加载 → 2个请求并发

触发条件:进入审计日志页面,GET /admin/users 和 GET /admin/audit-logs 同时发出
GET /api/admin/audit-logs
✅ 页面加载时触发;切换分页时触发;筛选条件变化时触发(page 重置为 1)
参数类型必填说明
pagenumber选填页码(默认1)
limitnumber选填每页条数(默认30)
start_datestring选填创建时间起始(YYYY-MM-DD)
end_datestring选填创建时间截止(YYYY-MM-DD)
user_idstring选填操作用户ID
resource_typestring选填资源类型

响应:

{
  "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

4. 点击「刷新」

触发条件:点击刷新按钮 → 重新请求 GET /api/admin/audit-logs(保留当前筛选和分页状态)

5. 点击「导出CSV」→ 本地生成(无需后端)

触发条件:点击导出CSV按钮 → 纯前端 JS 根据筛选后本地数据生成 CSV 下载

6. 点击「清空」

触发条件:点击清空按钮 → 重置所有筛选条件 + 本地搜索状态为"", 并重置所有 ref 和 state

7. 切换分页 → 重新请求

触发条件:点击上一页/下一页 → setPage(N) → 重新请求(保留当前筛选条件)