Simon
|
c1d5dd584c
|
[REQ-通用-006] 预生产测试通道:三端测试登录入口 + 文档链 + 部署脚本
- 三端 Login.vue(坐席/管理/H5)新增「测试账号登录」面板:探测 /api/dev/health 决定可见性,公网 403 自动隐藏,免企微扫码登录(token 写入对应 localStorage 键)
- 新增 REQ-通用-006 文档链五件套:PRD / 技术方案 / 任务说明书 / 测试用例 / 部署方案(product-doc-standard 规范)
- 版本迭代总览追加 v5.1(预生产测试通道)行
- 部署辅助脚本:nginx /api/dev/ 内网闸门注入、H5 版本化 v20260808→v20260811 升级
部署已落地预生产(10.90.5.110):公网 /api/dev/* 403、内网 200、三端登录页新 hash 在线。
|
2026-08-11 11:29:20 +08:00 |
|
Simon
|
f1b12b7871
|
feat(agent): TaskDetailView 操作区主操作+⋯ 收纳(PRD-REQ-坐席-011 §6.4 决策 C-8)
按 v1.8 原型 + PRD-REQ-坐席-011 §6.4 落地 TaskDetailView 操作区「主操作按钮 + ⋯ 次要动作收纳」设计。
## 改动清单(4 files)
- **新增** src/frontend-agent/src/composables/useTaskActions.ts
工厂产出 TaskActionsConfig{main, more},状态驱动主操作按钮:
- ticket pending → 「📥 接单」disabled(U-1.1 ITSM 阻塞)
- ticket processing → 「✅ 结单」disabled(U-1.1 阻塞)
- ticket resolved → 「✅ 已结单」disabled
- approval sp_status=1 → 「✅ 审批通过」enabled(跳企微)
- approval 其他 → 「🔗 在企微审批中打开」enabled
⋯ 内含:
- ticket:开始处理/转派/挂起/升级优先级/打开原系统
- approval sp_status=1:拒绝/转交/加签(真跳转)
- 其他审批:空数组(无可执行动作)
全部 pure 函数(isTicketClaimable / buildTicketMainAction / buildTicketMoreActions / buildApprovalMainAction / buildApprovalMoreActions)便于单测。
- **改造** src/frontend-agent/src/components/chat/task/TicketDetail.vue
原 1 按钮 → 主操作(按状态动态文案)+ ⋯ 收纳(5 项 disabled 待后端 API)
新增 ⋯ 菜单 DOM(task-actions-menu)、CSS(参考 v1.7 .conv-menu 风格)、click-out/Esc 关闭逻辑。
保留对 ITSM 的跳转能力(disabled 占位也带 href,不破坏可达性)。
- **改造** src/frontend-agent/src/components/chat/task/ApprovalDetail.vue
原 4 跳转按钮 → 主操作(按 sp_status 驱动)+ ⋯ 收纳(sp_status=1 时显示拒绝/转交/加签)
降级跳转精神保留:所有审批动作仍走 <a target="_blank"> 跳企微审批原系统。
- **新增** src/frontend-agent/src/composables/__tests__/useTaskActions.vitest.test.ts
27 例:覆盖 ticket 4 状态 + approval 3 状态 + 兜底 + 边界条件(pure 函数单测)。
## 收益(用户的痛点)
- 中栏 TaskDetailView 操作区按钮数从 4 / 1 → 2(主+⋯)
- body 区可用高度 +50%↑,状态信息一眼可见
- v1.8 视觉与 PRD §6.4 一致
- TicketDetail 的接单/结单/转派按钮已「结构预留」,等 ITSM U-1.1 API 拿到后改 disabled=true 为 false 即可
## 测试
vitest: 102/102 全绿(含 27 新增 + 75 已有)
vue-tsc --noEmit: 我改的 4 个文件 0 个 TS 错误(30+ 历史遗留错误与本 PR 无关)
## 不影响
- 左栏三点菜单(PRD-012 §6.4 + useConversationMenuItems)
- 中栏顶栏 UserInfoBar(v1.7 D-2 已删 3 留 1)
- 后端 API(纯前端状态机调整 + 跳转 URL 保持原 wecomApprovalUrl)
## 已知阻塞
- Gitea 远端 192.168.3.200:8418 当前不可达(ping 100% 丢包)
- 本地 commit 已就绪,待网络恢复后 push
|
2026-08-10 11:59:51 +08:00 |
|
Simon
|
af87f1deb0
|
fix(backend): approval.py + byod.py 改用 settings.create_redis_client()
PR #3 (commit 9292f41) 引入的回归:get_redis() 用 `from app.main import redis_client`,
但 redis_client 是 lifespan 函数内的局部变量,永远不可跨模块导入。
冒烟测试:ImportError: cannot import name 'redis_client' from 'app.main'
→ 整个 approval 模块加载失败,所有审批路由 500
修复:改用 settings.create_redis_client() 自建连接(与 approval_webhook.py:_writeback_agent_todo 同款)。
byod.py 同样问题,预防性一并修复(避免 byod 模块首次被访问时再炸)。
实测:
- POST /approval/callback → HTTP 200 {errcode:0}
- GET /byod/eligible-positions → HTTP 200 (845B)
|
2026-08-09 22:26:02 +08:00 |
|
Simon
|
9292f41763
|
feat(agent/backend): 坐席端审批线降级跳转 + 回调最终一致回写
实现 Phase 0 审批线 T01+T02(依据 PRD-REQ-坐席-011 + U-1 技术验证结论)。
前端(T01):
- TaskDetailView.handleAction 移除 mock toast,审批类仅 console.info
- ApprovalDetail 通过/拒绝/转交 + 打开按钮接线为企微审批深链真实跳转(<a target="_blank">)
- useWebSocket 新增 todo_status_changed 实时刷新分支
后端(T02):
- approval.py 新增 writeback_approval_todo_status 主入口 + /approval/callback 接线
- approval_webhook.py 新增 _writeback_agent_todo 复用回调→WS 推送通道
- 以 approval:{sp_no} 为关联键,缓存就地改写 + 7天快照 + WS 推送,最终一致
测试:src/backend/tests/test_approval_todo_writeback.py(51 例全绿)
文档:PRD-REQ-坐席-011 v0.1、技术验证-U-1 v1.0
|
2026-08-09 00:46:31 +08:00 |
|
Simon
|
2fd2e7df02
|
feat(backend/h5): 回流 qrConnect 扫码登录分支
将生产服务器 api/h5.py 的 OAuth2 authorize 端点逻辑合回本地 src/backend:
- 移除对非企微 UA 的硬拒(_require_wework_ua),改为 UA 检测分流
- 生产环境 + 外部浏览器返回 wwopen/sso/qrConnect 扫码登录 URL
- 企微内 / 非生产环境仍走静默授权(snsapi_base)
- 闭环「生产代码未入版本库」治理缺口(选项B部署时为保全扫码登录能力保留)
Co-Authored-By: SeniorDeveloper <expert>
|
2026-08-08 22:48:01 +08:00 |
|
Simon
|
b80ebf1d7c
|
feat(agent): 工具栏纯图标化 + AI回复模式选项加对应图标
- 移除 InputBox/ReplyBox/AiReplyModeSwitch 工具栏内 .tb-tip 文字气泡,按钮收敛为固定正方形,hover 提示保留 title 原生属性
- AiReplyModeSwitch popover 每个模式项前加对应图标(👤/👥/⏸️),ai-reply-mode.ts 的 AiReplyModeOption 新增 icon 字段
- 纯前端改动,未触碰后端与开关逻辑
|
2026-08-08 21:59:57 +08:00 |
|
Simon
|
bdc5a3be50
|
fix(src): 从版本库移除 node_modules_old 依赖缓存污染
此前提交误将 src/frontend-h5/node_modules_old(11071 个依赖缓存文件)纳入版本控制。
本次基于已净化的索引生成新树, 彻底剔除该污染:
- .gitignore 新增 **/node_modules_*/ 排除规则, 防止再次误入
- .gitignore 根 data/ 锚定为 /data/, 避免误伤 src/.../data/ 真实源码
- 补入被误伤源码: seed_quiz.py / seed_rbac.py / qrData.ts
|
2026-08-08 19:07:33 +08:00 |
|
Simon
|
35c5580c3d
|
feat(src): 将活跃前端/后端源码纳入版本控制
此前 src/ 整个目录未纳入版本库,Gitea 远端仅含 2 个文件,
活跃前端源码处于裸奔状态(本地丢失即无法恢复)。
本次提交:
- 将 src/(frontend-h5 / frontend-agent / frontend-admin /
frontend-terminal / backend 源码)完整纳入版本控制(12112 文件)
- 同步补充 .gitignore 规则,排除构建产物与运行期数据:
src/backend/uploads/、src/frontend-*/dist*/
node_modules / dist / venv / __pycache__ / *.zip 等已由既有规则忽略。
|
2026-08-08 18:55:59 +08:00 |
|
Simon
|
6c60fb81db
|
feat(h5/chat): InputBar v2.0 服务蓝扁平服务舱重铸
按 PRD-REQ-通用-001-前端设计系统 v1.2 将 H5 输入栏主题由企微绿迁至
服务蓝 #1769E0(员工端新角色主题),并把工具栏从「水晶玻璃主导」
改为「扁平蓝色服务舱主导 + 玻璃增强可降级」。
主要改动:
- 色板迁移:文件/语音/群聊图标渐变、轨道渐变、坐席描边、在线徽标
全部由紫粉/主绿改为服务蓝 #1769E0 + 青蓝 #0E9FBA(AI 能力语义色)
- 工具栏三态实现:
· 默认 实色 #E7F0FF 浅蓝 + #1769E0 实色描边(稳定对比度、低性能成本)
· 增强 @supports (backdrop-filter) 内启用蓝色水晶玻璃 blur(20px) saturate(160%)
· 降级 @supports not (backdrop-filter) 实色回退,布局与对比度不变
- 装饰性外阴影收敛:3 层 feDropShadow → 1 层 --shadow-sm(PRD §4.1.3 约束 ≤2 层)
- 坐席按钮:移除紫粉渐变 ::before 描边,改 2px 服务蓝实色边框
- 在线徽标:#10B981 → 语义成功绿 #15803D(PRD §4.1.6 浅色主题成功色)
- glass-btn hover:半透明白 → #E7F0FF 主题浅背景 + #1769E0 边框(PRD §4.2.2)
- Token 三层架构落地:基础色板 → 角色主题 → 语义用途,组件只消费语义层
- v20260807f:去除工具栏容器药丸底色,保留拱形 SVG 玻璃与按钮
行为契约不变:5 按钮布局 + handleCallAgentClick + 6 态徽标。
变更规模:166 insertions(+), 149 deletions(-)
|
2026-08-08 12:54:36 +08:00 |
|
Simon
|
ad8fd18d85
|
feat(chat): 工具栏统一设计 v1.9 落地 — 圆润拱形 + 5 按钮 + 三区无边框融合
[REQ-会话-001] 员工端会话窗口输入区工具栏视觉重构
改动概览:
- 工具栏容器:.glass-toolbar(玻璃胶囊)→ .gem-toolbar(拱形轨道)
- 按钮顺序:emoji / 文件 / 坐席(居中 60px) / 语音 / 群聊(5 按钮)
- 坐席按钮:44px → 60px(较 40px 工具图标大 50%),新增 .agent-btn.gem 修饰符
- 三区融合:消息区 / 工具栏 / 输入区融为连续浅色表面(input-bar 容器透明)
- 拱形轨道 SVG:viewBox 0 0 312 84,宽穹顶 x 84..216,顶点 (156, 4) 圆肩水平切线
- 可访问性:aria-label / title / focus-visible 蓝环 / 装饰 SVG aria-hidden
- 响应式 ≤480px fallback:隐藏拱形 SVG、改胶囊(坐席缩至 52px)
- 深色模式骨架:prefers-color-scheme: dark 颜色变量预留
测试:
- InputBar.test.ts 保留 v1.3 历史契约,新增 v1.9 专项测试套(共 91/91 通过)
- 覆盖 5 按钮顺序 / 坐席 60px / SVG 路径关键控制点 / 三区融合 / 键盘可达性 / 响应式 fallback
验收:
- vitest: 91/91 通过
- vite build: 528 modules transformed, build OK
- 6 态坐席入口契约不变(callAgent/cancelQueue/endConversation/reopenConversation)
- 群聊按钮:toast 占位(store 暂无 groupChat action),后续接入时替换 handleGroupChat
ref: 原型-REQ-会话-001-工具栏统一设计v1.9-员工端落地版.html
ref: 交付-REQ-会话-001-工具栏统一设计v1.9-开发交付清单.md
|
2026-08-06 00:12:45 +08:00 |
|