# 站内信消息分类口径修正：订单消息=聊天会话 / 普通消息=系统通知（前端对接）

> 模块：消息中心 · 站内信（管理后台）
> 类型：**接口语义修正（messageType 派生口径变更）+ 前端 tab 装配说明**
> 关联：工单 #4535 · 后端 PR #4537（已合 dev-v3 + 测试服实测通过）
> 日期：2026-06-28

---

## 一、背景：原分类口径错了

消息中心三个 tab `全部 / 订单消息 / 普通消息` 分类全乱。根因：后端拼了两套数据源——**收件箱**（`/admin/message/list`，单条消息粒度）+ **会话列表**（`/admin/message/chat/conversations`，会话粒度），且原「订单消息」是**按 bizType 派生**（挂订单/房务/退款/车务就算订单消息），把「核房记录已更新」这类**系统通知**也误标成了订单消息。

产品口径（已确认）：

- **订单消息 = 实时聊天会话**（房务/定制师之间围绕订单的对话）
- **普通消息 = 所有系统通知**（核房记录/超时提醒等，挂着订单的也算普通）
- **全部 = 会话 + 通知 按时间合并**

## 二、后端改了什么

### 1. `GET /admin/message/list` 的 `messageType` 语义变更（按 kind 派生）

`messageType` / `messageTypeLabel` 返回字段、以及 `messageType` 入参过滤，**全部改为按消息特性 `kind` 派生**（不再看 bizType）：

| `kind` | `messageType` | `messageTypeLabel` |
|--------|---------------|--------------------|
| `CHAT`（实时聊天） | `ORDER` | 订单消息 |
| `NOTIFY`（系统通知） | `NORMAL` | 普通消息 |

> ⚠️ **行为变化**：核房记录、询单超时等系统通知（`kind=NOTIFY`）的 `messageType` 由原来的 `ORDER`（订单消息）**改为 `NORMAL`（普通消息）**。测试服已实测：收件箱里系统通知现在恒返 `messageType=NORMAL / messageTypeLabel=普通消息`。

入参 `messageType` 过滤同步改为按 kind：

- `messageType=NORMAL` → 返回**所有系统通知**（`kind=NOTIFY`）
- `messageType=ORDER` → 返回聊天消息（`kind=CHAT`，单条粒度）
- 不传 → 系统通知 + 聊天混排（不变）

### 2. `GET /admin/message/chat/conversations` 过滤空占位会话

会话列表不再返回「没有任何消息的空占位会话」（如抢单前 pending 会话：对方为空、无最近消息、无时间）。原先列表里那种 `HOUSE:xxx`、对方=「—」、最近消息=「-」的空白行已消失。测试服实测：会话列表行均带 `lastMessageAt` 与对方信息。

## 三、前端三个 tab 怎么接（核心）

三个 tab 用**两个端点**装配，按性质分类：

| Tab | 数据源 | 粒度 |
|-----|--------|------|
| **订单消息** | `GET /admin/message/chat/conversations`（会话列表） | 会话粒度（一个订单/对话一行，团号·对方·最近消息·未读） |
| **普通消息** | `GET /admin/message/list?messageType=NORMAL` | 消息粒度（系统通知逐条，标题·内容·时间） |
| **全部** | 上面两者**按时间合并**展示 | 会话行 + 通知行混排，按各自的最近时间（会话用 `lastMessageAt`、通知用 `createTime`）倒序 |

要点：

- **订单消息**不要再用收件箱（`/admin/message/list`）去取——那是单条消息粒度，取不到「会话卡」。用会话列表端点（你们现在订单消息 tab 已经是这个，保持即可）。
- **普通消息**改调 `/admin/message/list?messageType=NORMAL`，即可拿到全部系统通知（含核房记录等，现在都归普通消息）。
- **全部**之前只显示了收件箱通知、看不到聊天会话；现在请把「会话列表 + 普通消息」两个结果在前端按时间合并后展示（两种行结构不同，前端按卡片类型分别渲染即可）。

## 四、端点出参（未变，供参考）

- 会话列表 `ChatConversationRespVO`：`conversationKey / bizModule / bizId / peerName / peerRole / peerRoleLabel / unreadCount / lastMessagePreview / lastMessageAt / pendingReply` 等（字段不变）。
- 收件箱 `AdminMessageRespVO`：`messageId / categoryCode / title / content / link / bizId / bizType / isRead / createTime / messageType / messageTypeLabel / kind / senderName / conversationKey`（字段不变，仅 `messageType/Label` 派生口径如上变更）。
