# H5 会话关闭「重复提醒」优化(方案A)— 交付概要 ## 问题 员工端会话关闭后,消息列表**系统消息**(`✅ 会话已关闭。24小时内可重新打开。`)与底部 **QueueCapsule 横幅**(`会话已关闭 · 24小时内可重新打开 点击重新打开 🔄`)两处重复展示同一提醒文案,且横幅另带「点击重新打开」入口,造成信息冗余。 ## 方案(用户选定 · 方案A) - 保留消息列表系统消息,在其卡片内新增「🔄 重新打开」按钮(上下文最近、最自然); - 删除底部 QueueCapsule 的 resolved 横幅(去重)。 ## 改动文件(均位于真实部署目录 `src/frontend-h5/`) 1. **`src/frontend-h5/src/components/chat/MessageBubble.vue`** - 模板:系统消息 `
` 内新增 `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`)