9.4 KiB
schema, ticket, title, consumer, author, change_type, backend_status, gateway_status, frontend_status, frontend_owner, frontend_ref, target_release, verified_at, status_note, updated_at, base
| schema | ticket | title | consumer | author | change_type | backend_status | gateway_status | frontend_status | frontend_owner | frontend_ref | target_release | verified_at | status_note | updated_at | base |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hl-changelog/v2 | frontend-groupbatch-vehicle-house-panel-gaps | 团期详情页「用车/用房」面板:乘车户全选汇总人数 + 确认按钮布局 + 对话入口缺失(3 项前端待办) | admin | wx(GIT) | 前端缺陷 | not_required | not_required | verified | mmg | d59180090e17c3fe1b9a1a4fb4fde22fc9f91685 | 2026-09-23 | wx 团期详情页用车/用房面板走查反馈,3 项均为纯前端待办:①乘车户全选+人数自动汇总(数据 participantCount 已在 orders 数组里,未被读取)②接送机逐户确认按钮布局(未右对齐)③子订单行缺与定制师对话入口(已有可用的既有后端会话接口 open-group,未接入)。三项互相独立,backend_status=not_required 是因为本文件不改任何后端契约。 | 2026-09-23 mmg 交付:三项全落(全选汇总/右对齐/两面板联系定制师透传 ChatDrawer) | 2026-09-23 | dev-v3 |
团期详情页「用车/用房」面板:乘车户全选汇总人数 + 确认按钮布局 + 对话入口缺失(3 项前端待办)
服务: 无后端服务变更(纯前端 UI;第 3 项引用的
hl-user-service/admin/message/chat/open-group是已存在的能力,本次不新增/不修改) PR: 无(前端尚未提交) Issue: 无(wx 口头/会话反馈,未建 Gitea 工单) 日期: 2026-09-23 影响范围: 管理后台团期详情页「用车」「用房」两个 Tab 面板
⚠️ 关键变化
本文件是待补齐清单,不是"已交付变更"说明——三项各自独立、互不依赖,可分别排期,涉及文件都在 hl-ui origin/v2.1 分支。
一、乘车户「全选」+ 按所选户自动汇总人数
涉及文件: src/views/order-v2/batch/detail/components/GroupVehicleRequirementEditModal.vue(「正式用车需求编辑」弹窗,逐日行区块,第 165-201 行)
现状(实测代码):
- 「人数」是
<n-input-number v-model:value="d.headcount">(第 177-186 行),headcountRule(第 375-382 行)只校验"非空且 ≥1",没有联动逻辑。 - 「乘车户」是
<n-select multiple filterable :options="memberOptions">(第 190-198 行),memberIdsRule(第 383-388 行)只校验"非空数组"。 - 两个控件之间没有任何联动,也没有"全选"控件。
可用但未被读取的数据:memberOptions(第 323-333 行)目前只从 props.orders 取 orderId/customerName/contactName/teamNo 组装 { label, value },没有带出 participantCount。participantCount 其实已经在同一个 orders 数组里(团期订单列表 GB-ADM-003 契约字段),同级的 VehicleHouseholdsSection.vue:71 与 RequirementTab.vue:476 已经在直接读它展示"N 人"——不需要新接口,只是这个弹窗的 memberOptions computed 没把它带出来。
需要的改动(供参考,不限定实现方式):
- 全选:一个按钮/开关把
d.memberOrderIds置为memberOptions.value的全量value。 - 自动汇总:
memberOptions补出participantCount(或另建orderId → participantCount的 Map),选中集合变化时把d.headcount自动置为已选各户participantCount之和;participantCount为null的户按 0 计。 headcount输入框保留手动可编辑——自动填充只是给个起点,若某户实际乘车人数与participantCount(报名人数)不一致(如小孩不占位、分批乘车),管理员仍需手动改。
业务边界:
- 这里自动算出的人数只是填表辅助,不是权威口径——整团/整日的用车人数汇总另有独立的后端工单在跟(wx/HL#8220,backend),本项做完之后
d.headcount仍然只是这张表单自己的字段,不代表后端汇总接口上线后的口径一定与这里手填/自动填的值相同。 participantCount为null的户参与"全选"时按 0 计入自动汇总,不阻断全选本身(该户仍会被选中,只是不贡献人数)。
二、接送机需求逐户「确认」按钮挪到行右侧
涉及文件: src/views/order-v2/batch/detail/components/VehicleHouseholdsSection.vue
现状(实测代码 + 样式):
- 「确认」按钮(
canConfirmReq(req)为真时渲染,第 122-129 行)与车型/状态标签、"XX 人"文字同处一行——.vehicle-households__req-head(第 92 行起)。 - 该行样式(第 495-500 行):
display: flex; align-items: center; gap: 8px; flex-wrap: wrap;,没有justify-content或对按钮单独设margin-left: auto,按钮紧跟在"XX 人"文字后面,不在行的最右侧。
需要的改动:给 .vehicle-households__req-head 加 justify-content: space-between(把按钮包进一个独立的尾部容器),或直接给「确认」按钮加 margin-left: auto,把它推到行右侧。
业务边界:
- 只影响
.vehicle-households__req-head这一处的 TRANSFER 行确认按钮;用房面板RoomHouseholdsSection.vue全文没有等价的逐户「确认」按钮(已核查,仅第 127/289 行的注释提到"整团确认",属另一套交互,不在本项范围)。
三、用车/用房子订单行缺「和定制师发起对话」入口
涉及文件:
VehicleHouseholdsSection.vue的.vehicle-households__card-head(第 56-77 行)RoomHouseholdsSection.vue的.room-households__card-head(第 44-68 行)
两处的 v-for 都已经在 household 上下文里拿到 household.orderId,但都没有任何对话/聊天入口(全文 grep「对话」「chat」「Chat」在这两个组件里零命中,RoomHouseholdsSection.vue 里唯一相关的是两处注释提及"整团确认",与聊天无关)。
已就绪的后端契约(本次核实,非新增,backend_status=not_required 是因为接口本身没有变化,只是首次要接给这两个面板用):
POST /admin/message/chat/open-group(hl-user-service ChatMessageController.openGroup,工单 #7211)
- 请求体
ChatOpenGroupReqVO:{ "orderId": "70123" }——orderId必填(@NotNull),团期子订单 id,雪花值按字符串传(与本仓其它 19 位 ID 字段一致,避免 JS 精度丢失)。 - 响应体
ChatOpenFullRespVO(继承ChatOpenRespVO):conversationKey(如GROUP:70123,不含 adminId 对)、peerAdminId、peerName、peerRole、peerRoleLabel、peerOnline、unreadCount、isNew、order(订单卡)、thread(首屏 20 条消息)、unreadTotal(合并未读,本次调用会把该会话标记已读之后的值)。 - 团期管理员是团队制,不指派到人:定制师这一侧打开会话时,对端固定是「团期管理员」团队占位——
peerRole="GROUP_ADMIN"、peerRoleLabel="团期管理员",不是某一个具体的管理员账号。 - 准入:该订单当前定制师(CUSTOMIZER),或当前角色持权限码
group-batch:demand:confirm(超管天然通过);其余角色统一拒绝且零写入。 - 错误码:缺
orderId→ 281012「缺少订单上下文」;不满足上述准入身份 → 281002「无权访问该会话」;该订单不是团期子订单(团期摘要groupBatchId为空)→ 281015「该订单不是团期子订单,无法联系团期管理员」。 - 打开会话之后,同一个
conversationKey(GROUP:{orderId})继续走通用的两个端点,不区分模块:GET /admin/message/chat/{conversationKey}/messages(上滑翻页取更早历史)、POST /admin/message/chat/{conversationKey}/messages(发消息)。如果车务/房务面板已有复用的聊天组件,直接换open端点为open-group即可接入,不需要重新对接翻页/发送逻辑。 - 网关:
hl-user-service的/admin/message/**路由已覆盖,不需要新配路由。
业务边界:
- 用车、用房两个面板的子订单行请求体字段完全一样(都只传
orderId),可以共用同一套"发起对话"组件。 - 会话按
GROUP:{orderId}维度建:同一个子订单如果在用车、用房两个面板里都出现,两边打开的是同一条会话,不会产生重复会话或未读数分叉。
七、不影响范围
- 仅影响:管理后台团期详情页「用车」「用房」两个 Tab 组件(模板/脚本/样式,纯前端文件)。
- 零影响:
- 本文件三项都不改后端契约;第三项引用的
POST /admin/message/chat/open-group是首次被这两个面板消费,接口本身(CUSTOMIZER↔团期管理员团队场景)未做任何变更。 - 其它已在用
open-group/open-fleet/open-house的既有调用方不受影响。 - 团期用车需求的后端保存/校验接口(
GroupVehicleRequirementSaveReqVO等)不受影响——第一项只改前端表单填充逻辑,提交给后端的字段结构不变。
- 本文件三项都不改后端契约;第三项引用的
十、相关文档
open-group契约来源:hl-user-service/src/main/java/com/hulalv/user/notification/chat/controller/ChatMessageController.java(工单 #7211)。participantCount字段来源:GB-ADM-003团期订单列表契约(src/api/orderV2GroupBatch.js第 143-160 行注释)。
关联 / 联系人
链接
- 无 PR / 无 Issue(本文件为纯前端待办清单,未建 Gitea 工单)。
联系人
- 第三项接口如有疑问:@wx