# 房务待办列表:按订单聚合(一单一行、行内多类型标签)+ 类型字典化(前端必改) > 模块:房务管家 · 待处理(管理后台) > 类型:返回结构调整(PR #4587 已合 dev-v3 + 测试服实测) > 关联工单:#4575 > 日期:2026-06-28 ## 背景 房务反馈「同一订单出现多行(『刚抢单待配房』一行 + 『定制师消息未读』一行)」,要求**一个订单只占一行**,把该订单的多个待办分类标签都显示在这一行。 ## 返回结构变更(`GET /v3/admin/order/todos`) `list[]` 粒度由「(订单 × 待办类型) 一行」改为 **「一个订单一行」**,每行新增类型标签数组: | 字段 | 类型 | 说明 | |------|------|------| | `todoTypes` | Array | **本单当前 scope 下全部待办分类标签**(行内渲染多个标签) | | `todoTypes[].typeCode` | String | 类型码(SWAP_HOTEL / REFUND / HOTEL_REPLY_TIMEOUT / REQUIREMENT_ADJUSTED / INVENTORY_CHECK_OVERDUE / PENDING_ARRANGE / UNREAD_CHAT …) | | `todoTypes[].typeLabel` | String | **类型中文名(取数据字典 `house_todo_type`)**,前端直接展示 | | `todoTypes[].urgency` | String | 该标签紧急度 | | `todoTypes[].derived` | Boolean | true=派生项(刚抢单待配房/定制师消息未读,无 todoId 不可单独 RESOLVE);false=持久化项 | | `todoTypes[].todoId` | Long | 持久化待办 ID(derived=false 时有,供 RESOLVE/查看) | | `todoTypes[].unreadCount` | Integer | UNREAD_CHAT 标签的未读数 | - 保留 `orderTodoCount` = `todoTypes.size()`(前端原「本单共 N 个待办」可继续用,或直接用 `todoTypes.length`)。 - 行级 `urgency` = 该订单内各标签的最高紧急度(排序仍按此 + 时间)。 - **分页/total 口径改为 distinct 订单数**(不再是待办行数)。前端分页器按此对齐。 - 「核房超期」(INVENTORY_CHECK_OVERDUE,酒店维度无 orderId) 仍独立成行。 ## 前端必改 1. 每行渲染 `todoTypes[]` 多个分类标签(中文 `typeLabel`),不再一订单多行。 2. 操作入口按 `todoTypes[].derived`/`todoId` 区分:派生标签(刚抢单待配房/消息未读)走对应跳转、不可 RESOLVE;持久化标签带 todoId 可 RESOLVE/查看。 3. 分页 total 改读新的 distinct 订单口径。 ## 顺带(前端自查) 顶部说明文案「共 N 件待办 · 换酒店/核房超期/退订/询房 · 完成订单前置工作后自动解除」是前端硬编码旧文案,且「共 N 件」此前按旧枚举子集求和导致显示 0。请按新流程更新文案,「共 N 件」改为对聚合后 list/stats 全量统计。 ## 测试服实测 - 同订单「酒店超时未回复 + 刚抢单待配房」聚合为一行、todoTypes 2 个中文标签、orderTodoCount=2、total=distinct 订单数。