diff --git a/changelogs-v2/2026-06/25_站内信会话化_前端待办总览_管理后台.md b/changelogs-v2/2026-06/25_站内信会话化_前端待办总览_管理后台.md new file mode 100644 index 0000000..2707940 --- /dev/null +++ b/changelogs-v2/2026-06/25_站内信会话化_前端待办总览_管理后台.md @@ -0,0 +1,63 @@ +# 站内信会话化改造 · 前端待办总览(管理后台) + +- **类型**:前端对接总览(**后端全部就绪**,本文汇总 mmg 一次接完) +- **端类型**:管理后台(hl-ui) +- **日期**:2026-06-25 +- **后端联系人**:王骁(wx) + +> 站内信升级聊天后,wx 提了一连串改造(按会话聚合 / 团号 / 订单简介条 / 跳转 / 铃铛红点)。**后端侧已全部实现并测试服实测通过**,剩下的都是前端接入。本文是总索引,每项指向已写好的详细 spec。 + +--- + +## 待办清单(后端均已就绪,按此接入) + +### 1. 「订单消息」改按会话聚合(一会话一行) +- **做什么**:站内信「订单消息」tab 改为一会话一行(对方+最新消息+未读+时间),点开看整段对话。不要再逐条铺消息。 +- **后端接口(现成)**:`GET /admin/message/chat/conversations?bizModule=HOUSE&pageNo&pageSize`,返回每会话一行。 +- **为什么**:逐条混排只显示「你收到的那一半」+ 释放转单致归属变动,数据不全;按会话聚合才完整。 +- **详见**:`25_站内信订单消息改按会话聚合+团号+跳转_前端对接` §2/§3。 + +### 2. 标题加团号 +- **做什么**:每行标题 = 团号 `orderNo`(建议拼客户名 `customerName`),如 `HL20260625134754752 · 库凡巧`。 +- **字段**:会话 VO 的 `orderNo` / `customerName`(已有)。 +- **注意**:`orderNo` 为 null 是**订单被删/不存在**(软依赖降级),不是 bug;真实订单都有团号。 + +### 3. 订单简介条(打开对话顶部) +- **做什么**:从会话列表打开对话时,对话顶部「订单简介条」也要显示 = **产品名 · 客户·人数 · 团号**(此前仅从订单页进才有)。 +- **字段(PR #4394 新增,已上线)**:`productName`(产品名)+ `customerName`(客户)+ `adultCount`/`childCount`(拼「2大1小」)+ `orderNo`(团号)——全在会话列表 VO 里,打开对话直接用,无需再查订单页。 +- **详见**:`25_站内信订单消息改按会话聚合+团号+跳转_前端对接` §6。 + +### 4. 每行跳转按钮(按你在该会话的身份) +- **做什么**:每行加跳转按钮,**按 peerRole 反推你是哪一方**(不能用登录账号全局角色,超管同时是两边人): + - 对方是房务/车务(`peerRole=HOUSE/FLEET`)→ 你是定制师 → **订单详情** `/order-v2/detail/{bizId}` + - 对方是定制师(`peerRole=CUSTOMIZER`)+ `bizModule=HOUSE` → 你是房务 → **配房页** `/housekeeper/orders?orderId={bizId}&requirementId={requirementId}`(用 `requirementId` 自动开配房详情) + - 对方是定制师 + `bizModule=FLEET` → 你是车务 → **配车页**(路由 best-effort,待车务模块核对) +- **字段**:`peerRole` / `bizModule` / `bizId` / `requirementId`(PR #4394 新增,房务自动开详情用)——全在会话 VO。 +- **详见**:`25_站内信订单消息改按会话聚合+团号+跳转_前端对接` §3.3。 + +### 5. 顶部铃铛未读红点 +- **做什么**:收到消息时收件方铃铛要亮红点/数字。 + - 每个带铃铛的页面**加载时调** `GET /admin/message/unread-count` 取初值。 + - 订阅 SSE 流(`/ws/admin-msg/stream`),在 `im-chat`/`message`/`unread-count` 事件里读 `payload.unreadCount` 实时刷角标。`im-chat` 既驱动聊天 UI 也驱动铃铛——别只 append 聊天。 +- **后端已就绪**:未读已落库、聊天发送 afterCommit 已推带 `unreadCount` 的 SSE 信令、`unread-count` 接口返真值(实测 countUnread=1 但前端铃铛没亮 = 前端没接)。 +- **详见**:`25_站内信顶部铃铛未读角标接入_前端对接`。 + +### 6. tab 归属 / 全部 tab(前端 IA 自定) +- 订单消息 = 会话列表(项1);普通消息 = `GET /admin/message/list?messageType=NORMAL`(仅系统通知);全部 = 前端决定(会话列表+系统通知合并 或 仅通知)。 +- **详见**:`25_站内信订单消息改按会话聚合+团号+跳转_前端对接` §4。 + +--- + +## 后端就绪情况一览(无需前端等后端) + +| 能力 | 后端状态 | 接口/字段 | +|------|---------|-----------| +| 会话列表(按会话聚合) | ✅ 现成 | `/admin/message/chat/conversations` | +| 团号/客户 | ✅ | `orderNo` / `customerName` | +| 订单简介条(产品名/人数) | ✅ PR #4394 上线 | `productName` / `adultCount` / `childCount` | +| 房务跳转自动开详情 | ✅ PR #4394 上线 | `requirementId` | +| 跳转判向 | ✅ | `peerRole` / `bizModule` / `bizId` | +| 铃铛未读(落库+信令+接口) | ✅ | `unread-count` + SSE `im-chat`(payload.unreadCount) | +| 聊天线程/发送/已读 | ✅ 既有 | `/admin/message/chat/messages` 等 | + +> 一句话:**后端全齐了,这几项卡的都是前端接入**。逐项 spec 见上面引用的 changelog。有疑问找王骁(wx)对字段/信令。