1. 页面概览

审计日志页是 AIP 管理后台的审计查询入口,路由 /admin/audit,仅管理员可访问。它读取平台 audit_log 表中的审计事件,按用户、事件类型、时间范围与条数筛选查询,并可逐条展开查看 action_details 详情 JSON。登录、NLQ 查询、AI 决策、数据源操作等关键动作都会落库一条审计记录,本页为管理员与安全审计人员提供"谁在何时做了什么"的取证能力。页面为轻量查询形态:顶部刷新按钮 + 筛选条 + 日志表格,无翻页、无导出。

2. 访问入口

2.1 路由与菜单

path /admin/audit、name AdminAudit、title 审计日志;挂载在父路由 /admin(AdminLayout)下,侧边栏菜单项「审计日志」。源码 action/web/src/views/AuditLogPage.vue,注册于 action/web/src/router/index.js

2.2 认证与权限

父路由 meta 为 requiresAuth: true, requiresAdmin: true,非管理员(localStorage.aip_is_admin !== '1')被前端守卫重定向到智能查询页。请求经 aipClient.js 附带 Authorization: Bearer <aip_token>,后端 401 清 Token 跳登录,非管理员请求 admin 组接口返回 403。

2.3 端口与 API 前缀

AIP 后端 18080,前缀 /aip-api(baseURL /aip-api/v1,Vite 代理重写为 /api/v1)。

3. 界面布局

审计日志                                  [刷新]
[操作结果提示 alert(可关闭)]
筛选条:用户ID | 事件类型(逗号分隔) | 开始/结束时间 | 条数(20/50/100)
        [查询] [重置]
日志列表:ID | 时间 | 用户ID | 事件类型 | 结果 | 详情(展开/收起)
  展开行 = action_details 格式化 JSON

4. 交互元素

控件位置含义与作用
刷新按钮页面头部按当前筛选条件重新拉取日志
用户 ID 输入框筛选条按用户精确过滤,如 1;空则不过滤
事件类型输入框筛选条逗号分隔列表,如 LOGIN,QUERY;空则不过滤
开始/结束时间筛选条datetime-local 选择器,前端转 RFC3339(补 :00+08:00
条数下拉框筛选条单次加载条数 20/50/100,默认 20
查询 / 重置按钮筛选条查询按当前条件拉取;重置清空过滤项后重拉
展开 / 收起按钮表格每行展示该行 action_details 的格式化 JSON
结果徽标表格列resultSUCCESS 绿色(status-on),其余红色(status-off),空值灰色

5. 后端关联

5.1 端点表

方法路径用途
GET/audit/logs查询审计日志,query 支持 limit/offset/user_id/event_type(逗号分隔)/start_time/end_time(RFC3339)

5.2 请求与响应

成功返回 {"logs": [...]},每条含 idtimestampuser_idevent_typeaction_detailsresultref_typeref_idstep_type。后端 limit 默认 50、offset 默认 0,时间解析失败时忽略。

5.3 关键机制

6. 权限与安全

7. 常见问题与排错

问题 1:提示「加载审计日志失败:...」

问题 2:非管理员访问被重定向到智能查询页

问题 3:按事件类型过滤查不到结果

问题 4:时间过滤与实际不符

8. 已知缺陷与边界

说明
无导出与 Foundry 审计页不同,本页不提供 CSV/JSON 导出
徽标二值化SUCCESS 一律红色,不区分 FAILURE/DENIED 等中间态
类型需手填事件类型无候选列表,需知道准确字符串

注:offset 写死 0 无法翻页(每次固定取前 limit 条,大批量需缩小过滤范围)已于 2026-09-06 修复(上一页/下一页 + 页码指示)。