# 站内信会话化改造 · 前端待办总览（管理后台）

- **类型**：前端对接总览（**后端全部就绪**，本文汇总 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）对字段/信令。
