diff --git a/docker-compose.yml b/docker-compose.yml index 5684384..2054502 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -136,8 +136,11 @@ services: - BACKEND_PORT=8000 # 上传文件目录(持久化) - UPLOAD_DIR=/app/uploads + # 运行期日志目录(供"运行期日志"管理页面读取,需与下方 volumes 挂载一致) + - RUNTIME_LOG_DIR=/app/logs volumes: - backend-uploads:/app/uploads + - ${RUNTIME_LOG_HOST_DIR:-/var/log/wecom-it-desk}:/app/logs depends_on: postgres: condition: service_healthy diff --git a/docs/02-产品需求/02-产品需求文档PRD-v1.2-20260704.md b/docs/02-产品需求/02-产品需求文档PRD-v1.2-20260704.md index e660107..6924c78 100644 --- a/docs/02-产品需求/02-产品需求文档PRD-v1.2-20260704.md +++ b/docs/02-产品需求/02-产品需求文档PRD-v1.2-20260704.md @@ -1071,6 +1071,30 @@ ALTER TABLE agents ADD COLUMN mfa_bound_at TIMESTAMP; **开发周期**:4-6周 +#### 管理后台日志体系(贯穿各阶段,2026-07-09 增补) + +> **为什么单列**:管理后台长期存在 5 类「日志」机制概念混淆(配置变更历史 / 安全审计日志 / 自动化动作日志 / 运行期结构化日志 / 会话消息记录)。本小节统一定义与边界,支撑阶段四「日志标准」,并将用户 2026-07-09 拍板的 5 项决策纳入 PRD。详细定义、接口、字段、验收标准见 `docs/04-功能设计/系统日志与审计日志-产品与设计.md`。 + +**五类日志定位**: + +| 编号 | 名称 | 落点 | 核心用途 | 实现状态 | +|------|------|------|----------|----------| +| A | 配置变更历史(系统日志) | `config_change_logs` | 配置项前后值 diff | 已实现(前端无筛选) | +| B | 安全审计日志(操作日志) | `audit_logs` | 安全行为事件 | 已实现(部分事件待补) | +| C | 自动化动作日志 | `auto_action_logs` | 外部系统调用出入参 | 已实现(落表为主) | +| D | 运行期结构化日志 | stdout → Docker 文件 | 应用运行排障 | 后端已实现,查看页未落地 | +| E | 会话 / 消息记录 | `conversations` / `messages` | 业务主数据 | 已实现 | + +**用户已拍板 5 项决策(2026-07-09,宋献)**: + +| # | 决策 | 优先级 | 验收要点 | +|---|------|--------|----------| +| 1 | 侧边栏「系统日志」区分命名:配置变更历史(A) vs 安全审计日志(B) | P1 | 两个独立清晰入口,无「系统日志」歧义统称 | +| 2 | 配置变更维持 A+B 双写,不收敛 | P0 | `PUT /api/admin/configs/{key}` 同时写两表(`config_change` 事件) | +| 3 | A 页补充「配置键 / 操作人 / 时间」筛选(后端 `GET /api/admin/system-logs` 加参) | P1 | 三筛选可用,后端参数支持 | +| 4 | D 运行期日志查看:按级别 / 时间筛选 + 下载(权限 admin) | P0 | 页面 + 后端接口落地(`.txt` / `.log`) | +| 5 | 补《系统日志/审计日志 产品+设计文档》,并入 PRD/架构、列项目任务 | — | 本文档即交付,看板登记 #101–#104 | + #### 阶段五:自动/辅助审核、开单、结单 > **本阶段解决痛点**:多系统切换效率问题(延伸痛点4/5,进一步提升人效)。 diff --git a/docs/03-技术架构/00-系统架构设计文档-v1.3.md b/docs/03-技术架构/00-系统架构设计文档-v1.3.md index a9a3f05..16636b6 100644 --- a/docs/03-技术架构/00-系统架构设计文档-v1.3.md +++ b/docs/03-技术架构/00-系统架构设计文档-v1.3.md @@ -294,6 +294,18 @@ OAuth2 授权完成(用户端) / 登录成功(坐席/管理端) - 会话监控 - 知识图谱管理 +#### 7.1.1 日志体系(2026-07-09 增补) + +> 管理后台 5 类「日志」机制统一归口,详细定义、接口、字段、权限见 `docs/04-功能设计/系统日志与审计日志-产品与设计.md`。 + +| 编号 | 日志 | 表 / 存储 | 接口路径 | 权限 | 状态 | +|------|------|-----------|----------|------|------| +| A | 配置变更历史 | `config_change_logs` | `GET /api/admin/system-logs`(写:`PUT /api/admin/configs/{key}`) | admin | 已实现(无筛选) | +| B | 安全审计日志 | `audit_logs` | `GET /admin/audit-logs` | `audit_log:read:all`(admin / auditor) | 已实现(事件待补) | +| C | 自动化动作日志 | `auto_action_logs` | (落表,暂未暴露列表接口) | — | 已实现 | +| D | 运行期结构化日志 | stdout → Docker 文件 | 待开发:`GET /api/admin/runtime-logs`(筛选 + 下载) | admin | 查看页未落地 | +| E | 会话 / 消息记录 | `conversations` / `messages` | 会话管理相关接口 | agent / admin | 已实现(业务主数据) | + ### 7.2 坐席工作台模块 **技术栈**:Vue 3 + TypeScript + Element Plus + Pinia diff --git a/docs/10-项目管理/05-项目状态看板/01-项目状态看板.md b/docs/10-项目管理/05-项目状态看板/01-项目状态看板.md index bd76a71..5ad42d3 100644 --- a/docs/10-项目管理/05-项目状态看板/01-项目状态看板.md +++ b/docs/10-项目管理/05-项目状态看板/01-项目状态看板.md @@ -4,7 +4,7 @@ > > 📝 **更新规则**:每次 Claude 完成 / 开始 / 阻塞重要任务,会主动更新本文件。你也可以自己改(纯 markdown,git 跟踪)。 -最后更新:**2026-07-09 09:20**(WS 子协议修复部署生产 + 合入 origin/main;方案A E2E 2026-07-08 通过) +最后更新:**2026-07-09**(WS 子协议修复部署生产 + 合入 origin/main;方案A E2E 2026-07-08 通过;+ 日志体系 5 项决策登记 #101–#104) --- @@ -151,6 +151,7 @@ | #48 | v1.0 收窄 set_real_ip_from | 🔴 P0 | 现 allow 0.0.0.0/0 是临时方案,正式上线前必须改精确代理 IP | | #81 | 敏感词检测 + 语气优化 | 🔴 P0 | v0.7.1 开发内容,文本安全过滤 ⚠️验真:隐私检测Bug+仅警告 | | #90 | 身份认证问题修复 | ✅已完成 | ✅Portal→H5 token传递修复:路由守卫接收token后调用fetchEmployeeInfo()获取用户信息 | +| #104 | 运行期结构化日志查看页(D) | 🔴 P0 | 决策4:落地「按级别/时间筛选 + 下载」页面与后端接口(`GET /api/admin/runtime-logs`),权限 admin;产品规格见 `docs/04-功能设计/系统日志与审计日志-产品与设计.md`;状态:待开发 | --- @@ -166,6 +167,9 @@ | #100 | 消息推送策略优化与超时提醒 | ✅已完成:坐席回复仅推 H5,超时未回复发送企微提醒,10分钟后标记待关闭 | | 🆕 | 修 64 pre-existing 测试失败 | Role.data_scope 缺字段 / WecomService DI / test_message_experience 等 | | #75 | 头像同步功能完善 | 登录全路径强制同步 + 前端首字降级;代码已交付(12/12 单测 + 103 回归),**业务效果待端到端验真** | 🆕 等用户通知执行 | +| #101 | 管理后台日志命名区分(决策1) | 侧边栏「系统日志」明确区分「配置变更历史(A)」与「安全审计日志(B)」,避免管理员混淆;状态:待开发 | +| #102 | 配置变更 A+B 双写边界确认(决策2) | 维持 `PUT /api/admin/configs/{key}` 同时写 `config_change_logs` 与 `audit_logs` 的 `config_change` 事件,不收敛;代码已实现,本文档锁定边界;状态:设计中 | +| #103 | 配置变更历史页筛选(决策3) | A 页补充「配置键/操作人/时间」筛选,后端 `GET /api/admin/system-logs` 增加对应过滤参数;状态:待开发 | --- diff --git a/frontend-h5/src/views/Login.vue b/frontend-h5/src/views/Login.vue index e37d55d..2c13eff 100644 --- a/frontend-h5/src/views/Login.vue +++ b/frontend-h5/src/views/Login.vue @@ -21,10 +21,10 @@
@@ -156,7 +156,7 @@ function handleResetPassword(): void { async function handleLogin(): Promise { const id = employeeId.value.trim() if (!id) { - showToast('请输入员工ID') + showToast('请输入员工账号') return }