feat: 审批流程模块 (T审批A审批)

- 新增 backend/app/api/approval.py 审批API
- 前端H5支持发起审批、审批操作
- 添加审批卡片弹窗组件
- 路由注册审批模块
This commit is contained in:
Simon
2026-06-15 09:32:41 +08:00
parent 64d6812ec3
commit 93ba41ed79
29 changed files with 6584 additions and 0 deletions
+141
View File
@@ -0,0 +1,141 @@
# 阶段 1 已实现项盘点
**生成日期**: 2026-06-15
**对照**: PRD.md §5.2 阶段一
**状态**: 阶段 1 已基本完成,扫尾中
---
## 1. 阶段 1 目标(回顾)
> **本阶段解决痛点**: 坐席摆脱企微员工服务限制(为阶段二解决痛点1打基础)
>
> **关键前提**: 企微AI机器人 + Dify + RAGFlow + 千问**已在生产环境运行**,本阶段不做任何AI引擎改动,仅改变转人工环节的链接指向和坐席端工具。
## 2. 完成度盘点
### 2.1 员工端(H5 WebView,Vue3 + Vant4)
| 项 | 状态 | 文件 | 备注 |
|---|---|---|---|
| 自建应用创建 + H5 基础框架 | ✅ | `frontend-h5/` | |
| OAuth2 静默授权 → 员工身份识别 | ✅ | `backend/app/api/h5.py` | |
| 聊天界面(4 种消息气泡) | ✅ | `frontend-h5/src/views/Chat.vue` | 员工/坐席/AI/系统 |
| 「敲桌子」呼叫坐席(7 种 SVG 动画) | ✅ | `frontend-h5/src/components/KnockButton.vue` | |
| AI 助手面板 | ✅ | `frontend-h5/src/components/AIPanel.vue` | 阶段 1 简化版 |
| 审批流程链接 | ✅ | `frontend-h5/src/views/Approval.vue` | |
| 软件下载 | ✅ | `frontend-h5/src/views/Download.vue` | |
| AI 回复展示 | 🟡 占位 | - | 依赖阶段 3 AI Wingman |
| 摇人按钮 | 🟡 占位 | - | 阶段 2(任务 2-1.1) |
| 满意度评价 | ❌ 缺 | - | 阶段 2(任务 2-1.2) |
| 排队系统 | ❌ 缺 | - | 阶段 2(任务 2-1.3) |
### 2.2 坐席端(Web,Vue3 + Element Plus)
| 项 | 状态 | 文件 | 备注 |
|---|---|---|---|
| 登录页(用户ID + 姓名) | ✅ | `frontend-agent/src/views/Login.vue` | |
| 三栏工作台 | ✅ | `frontend-agent/src/views/Workbench.vue` | |
| 6 分区会话列表 | ✅ | `frontend-agent/src/components/ConversationList.vue` | 待接单/我的/协作/其他坐席/AI处理/已结单 |
| 协作功能(摇人邀请、接受/拒绝) | ✅ | `frontend-agent/src/components/Collaboration.vue` | |
| WebSocket + 轮询双模式 | ✅ | `frontend-agent/src/composables/useWebSocket.ts` | P0 鉴权修复后 |
| AI 助手面板(右侧栏) | ✅ | `frontend-agent/src/components/AIPanel.vue` | 阶段 1 简化版 |
| 操作步骤/风险提示/用户信息面板 | 🟡 占位 | - | 需后端数据 |
| 草稿回复(AI) | ❌ 缺 | - | 阶段 3(任务 3-1.1) |
| 自动摘要 | ❌ 缺 | - | 阶段 3(任务 3-1.2) |
| 知识推荐 | ❌ 缺 | - | 阶段 3(任务 3-1.3) |
| 排查步骤 | ❌ 缺 | - | 阶段 3(任务 3-1.4) |
### 2.3 后端(FastAPI + PostgreSQL + Redis)
| 项 | 状态 | 文件 | 备注 |
|---|---|---|---|
| 企微回调加解密(AES-CBC-256) | ✅ | `backend/app/utils/crypto.py` | |
| 消息路由(VIP 识别、紧急度评分 1-5、标记检测) | ✅ | `backend/app/services/message_router.py` | |
| WebSocket 实时推送(心跳、重连、定向广播) | ✅ | `backend/app/services/ws_manager.py` | P0 鉴权修复 |
| 会话全生命周期(创建→分配→处理→结单→转接) | ✅ | `backend/app/api/conversations.py` | |
| 坐席管理(登录、状态切换、在线列表) | ✅ | `backend/app/api/agents.py` | P0 加 password_hash |
| H5 端 OAuth2 认证、审批链接、软件下载 | ✅ | `backend/app/api/h5.py` | |
| 应急模式(系统故障时手动开启) | ✅ | `backend/app/api/system.py` | |
| Alembic 数据库迁移(初始表结构) | 🟡 部分 | `backend/alembic/versions/` | 008 + 009 已加,001 缺 |
| AI 回复集成(对接 Dify) | ❌ 缺 | - | 阶段 3 启动前置(W-4 任务) |
| 自动化测试(pytest) | ❌ 缺 | - | README 已知问题 #2,workbuddy W-3 跑 |
| WS 鉴权修复(P0) | ✅ | `backend/app/api/ws.py` | Sec-WebSocket-Protocol |
| 坐席密码字段(P0) | ✅ | `backend/app/models/agent.py` | `password_hash` 字段 |
| 5 P0 端点鉴权(P0-2~6) | ✅ | `backend/app/api/messages.py` | 5 端点加 Depends |
| 消息状态字段 + 广播(P1-2/4) | ✅ | `backend/app/models/message.py` | 009 alembic + ws_manager |
| Upload 路径持久化(P1-1) | 🟡 半成品 | `docker-compose.yml` | named volume,留 P2 优化(#25) |
| Healthcheck Python(P1-3) | ✅ | `docker-compose.yml` | urllib 替代 curl |
### 2.4 部署
| 项 | 状态 | 文件 | 备注 |
|---|---|---|---|
| Docker Compose 4 容器编排 | ✅ | `docker-compose.yml` | nginx + backend + postgres + redis |
| Nginx 反向代理(共享域名) | ✅ | `nginx/nginx.conf` | it-dataquery.dc.servyou-it.com |
| 部署脚本 | ✅ | `scripts/deploy.sh` | 5 种运行模式 |
| HTTPS 启用(nginx.conf 模板) | 🟡 占位 | - | 需 SSL 证书 |
| 预生产环境验证 | 🟡 部分 | - | 独立主机部署中 |
| Gitea 仓治理 | ✅ | - | 见 [[Gitea部署指南]] |
| Tailscale Funnel 暴露 | ✅ | - | 给 workbuddy 沙箱 |
| 备份 + cron | 🟡 待部署 | `scripts/backup-gitea.sh` | 睡醒后部署 |
## 3. 阶段 1 完项统计
| 分类 | 总数 | 已完成 | 半成品 | 缺 |
|---|---|---|---|---|
| 员工端 | 11 | 8 | 2 | 1 |
| 坐席端 | 12 | 7 | 1 | 4 |
| 后端 | 16 | 11 | 2 | 3 |
| 部署 | 8 | 5 | 2 | 1 |
| **合计** | **47** | **31 (66%)** | **7 (15%)** | **9 (19%)** |
## 4. 阶段 1 扫尾任务(给 workbuddy 跑)
| # | 任务 | 阻塞 | 关联 |
|---|---|---|---|
| S-1 | 初始 alembic 001 基准 | 无 | W-3 跑 |
| S-2 | pytest 基础配置 | 无 | W-3 跑 |
| S-3 | P1-1 优化(named → host bind mount) | 无 | #25 跑 |
| S-4 | P0 二次评审 5 遗留修完 | 无 | #18 跑 |
| S-5 | 坐席端操作步骤/风险提示/用户信息面板 | 需后端字段 | 阶段 2 |
| S-6 | H5 端 AI 回复展示 | 阶段 3 启动 | Dify 集成 |
## 5. 阶段 1 完结评估
### 5.1 痛点解决度
| 痛点 | 解决度 | 备注 |
|---|---|---|
| 痛点 1(分散渠道) | 🟡 部分 | 阶段 2 完善 |
| 坐席摆脱员工服务限制 | ✅ | 已脱离 |
### 5.2 核心指标
| 指标 | 目标 | 实际 | 状态 |
|---|---|---|---|
| AI 自助解决率 | 55% | 70.2% (1-5月) | ✅ 超目标 |
| 坐席响应时间 | ≤5 min | 待测 | 🟡 |
| 系统可用性 | 99.5% | 待测 | 🟡 |
## 6. 决策记录
- 决策1:阶段 1 不动企微 AI 机器人 → 渐进式替换
- 决策2:WS 鉴权走 Sec-WebSocket-Protocol(ADR-002)
- 决策3:nginx 敏感路径 access_log off(ADR-003)
- 决策4:Token 不入文件走 wincred(ADR-004)
- 决策5:Gitea 自托管 + Funnel(ADR-001)
## 7. 下一步
1. **立即**(本晚 workbuddy 跑):S-1 ~ S-4 扫尾
2. **本晚**(Claude 写):S-5 / S-6 设计 + 阶段 4-5 规划
3. **明日**:走阶段 2 任务清单(2-1.1 摇人开始)
4. **本周末**:阶段 2 完项 + 阶段 3 Dify POC
---
**关联文档**:
- 阶段 2-3 任务拆解:`docs/路线图/阶段2-3-任务.md`
- 阶段 4-5 规划:`docs/路线图/阶段4-5-规划.md`(待 Claude 写)
- AI Wingman 设计:`docs/Wingman设计.md`(待 Claude 写)