Files
wecom_it_smart_desk/overview.md
T

50 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# H5 会话关闭「重复提醒」优化(方案A)— 交付概要
## 问题
员工端会话关闭后,消息列表**系统消息**(`✅ 会话已关闭。24小时内可重新打开。`)与底部 **QueueCapsule 横幅**`会话已关闭 · 24小时内可重新打开 点击重新打开 🔄`)两处重复展示同一提醒文案,且横幅另带「点击重新打开」入口,造成信息冗余。
## 方案(用户选定 · 方案A
- 保留消息列表系统消息,在其卡片内新增「🔄 重新打开」按钮(上下文最近、最自然);
- 删除底部 QueueCapsule 的 resolved 横幅(去重)。
## 改动文件(均位于真实部署目录 `src/frontend-h5/`
1. **`src/frontend-h5/src/components/chat/MessageBubble.vue`**
- 模板:系统消息 `<div>` 内新增 `v-if="isResolveMessage && canReopen"` 的「🔄 重新打开」按钮,点击 `handleReopen`
- script:新增 `isResolveMessage`(content 含「可重新打开」判定)/ `canReopen`store.canReopen/ `isReopening`store.isReopening/ `handleReopen`(调 `store.reopenCurrentConversation()` + toast 展示后端真实错误);
- CSS`.message-bubble__reopen-btn`(企微绿 `#07c160` 圆角胶囊,含 `:active`/`:disabled` 态)。
2. **`src/frontend-h5/src/components/chat/QueueCapsule.vue`**
- `visible` computed 新增 `if (currentState.value === 'resolved') return false`,隐藏 resolved 横幅;
- 纯函数 `computeVisible` / `computeCapsuleState` 保持不变(既有逻辑测试不受影响)。
## 设计决定(透明说明)
InputBar 的「人工坐席」按钮在 resolved 态仍保留 `reopen` 能力 —— 它仅显示徽标 + tooltip(**无可见重复文案**),作为常驻 reopen 入口;6 态状态机与既有测试不变。若你希望 reopen 入口**唯一收口**到系统消息卡片,可再隐藏该按钮(需同步改 `inputBarCallAgentState.ts``reopen` 分支,并调整 28 例相关测试)。
## 验证结果
- **vue-tsc**:仅历史既有类型错误(RecommendCard / SelfDiagnosis / conversation.ts 等),**无本次新增**;模板引用 `handleReopen`/`isResolveMessage`/`canReopen`/`isReopening` 均已正确定义;
- **vitest**171 例(inputBarCallAgentState / QueueCapsule / integrationZoneLogic**全过**
- **vite build**:成功(529 模块,built in 2.74s)。
## 回滚能力(满足用户硬约束:微小改动后页面回老版本)
- 改动前已备份:`D:\资料\03-项目开发\wecom_it_smart_desk\.backup\h5-20260807\src-frontend-h5-src.tar.gz`171MB,排除 node_modules/dist);
- 回滚:`tar -xzf .backup/h5-20260807/src-frontend-h5-src.tar.gz -C <项目根>` 还原 `src/frontend-h5/`
- ⚠️ 本环境 safe-delete 垫片会**拦截 `rm`**fail-closed),勿先 `rm -rf`;用 `tar` 直接覆盖即可。
## 部署状态:**已上线生产(2026-08-07 13:15**
采用既有「版本化 PATH + 302 跳板」体系破除 WAF path 缓存:
- 新版本入口:`/h5/v20260807a/`nginx `alias` 指向同一 root `dist/`,仅 URL 路径不同)
- `/h5/go` 302 目标已由 `v20260806g` 改为 `v20260807a`
- 改后 `docker exec wecom_it_nginx nginx -t` 通过 → `docker restart wecom_it_nginx`
**验证(内网 + 外网 WAF 双通过)**
- 内网:`/h5/v20260807a/`=200、`/h5/go`=302→`/h5/v20260807a/``/h5/assets/index-C1Q6Rane.js`=200(新 hash
- 外网:`https://itsupport.servyou.com.cn/h5/go`=302→`/h5/v20260807a/`;外部 index.html 引用新 hash `index-C1Q6Rane.js`
- 产物核对:built JS 含「🔄 重新打开」「重新打开中」、CSS 含 `message-bubble__reopen-btn` → 方案A 代码确已生效
**回滚预案(nginx 层,秒级)**
```
sudo cp /opt/wecom-it-desk/nginx/nginx.conf.bak-20260807 /opt/wecom-it-desk/nginx/nginx.conf
docker restart wecom_it_nginx
```
(dist 构建产物回退需重新解上次构建包;源码级备份见 `.backup/h5-20260807/src-frontend-h5-src.tar.gz`