## 1. 数据库 - [x] 1.1 创建 `docs/sql/migrations/2026-06-29-operation-audit.sql`(扩展 `sys_api_request_log` / `_his`:`tenant_no`、`business_title`、`business_type`、`business_id`、`oper_summary` + 索引) - [x] 1.2 同步 `docs/sql/shanxia2.0.sql` ## 2. 后端 · 采集层 - [x] 2.1 扩展 `app/core/context.py`:`oper_log_meta` ContextVar(title/type/id/summary)→ `oper_log_context.py` - [x] 2.2 新增 `app/core/oper_log_decorator.py`:`@oper_log(...)` 装饰器 - [x] 2.3 更新 `api_request_log_middleware.py`:解析 `real_name`、`tenant_no`;落库语义字段;推断兜底 - [x] 2.4 更新 `SysApiRequestLog` / `SysApiRequestLogHis` ORM ## 3. 后端 · 查询层 - [x] 3.1 更新 `oper_log.py`:优先读落库语义列;列表支持 `businessId`、`businessTitle`、`tenant_no` DB 筛选 - [x] 3.2 更新 `schemas/monitor/operlog.py` 与 `monitor.py` 请求体字段 - [x] 3.3 更新 `api_request_log_crud.py` 历史表字段(列表仍走 operlog API) ## 4. 后端 · 注解覆盖(首期) - [x] 4.1 CRM 客户写接口 `@oper_log`(增删改、公海、转移等) - [x] 4.2 CRM 合同写接口 `@oper_log`(新增/修改/删除/导出/作废) - [x] 4.3 配置项预留 `API_REQUEST_LOG_EXCLUDE_PATHS`(默认空) ## 5. 前端 - [x] 5.1 `api/monitor/operlog` 类型与查询参数扩展 - [x] 5.2 操作日志列表页 `views/system/operlog/index.vue`(P01)+ 详情弹窗 - [x] 5.3 路由 `router/modules/sqxp.ts` + 菜单 SQL(`system:operlog:list`) - [x] 5.4 CRM `CustomerDetailDialog`、`contract/detail` Tab 改为 `businessId` 查询 ## 6. 验收与文档 - [ ] 6.1 冒烟:写操作落库姓名/语义/入参出参;管理页筛选;客户详情 Tab(需执行迁移并重启后端) - [x] 6.2 默认配置 `API_REQUEST_LOG_ENABLED=true`(`config.py`) - [x] 6.3 `./scripts/update-graph.sh backend`(frontend 待有 import 变更后可再跑) ## 7. 后续(非本期阻塞) - [ ] 7.1 定时任务:热数据归档至 `sys_api_request_log_his` - [ ] 7.2 运输计划 / 报销等模块 `@oper_log` 全覆盖 - [ ] 7.3 响应体 PII 扩展脱敏规则