---
schema: "hl-changelog/v2"
ticket: "frontend"
title: "派单 Step2：统一选车弹窗空白（后端有数据）+ 建议标签仍未删 + 需补用车需求展示区"
consumer: "admin"
change_type: "前端缺陷"
author: "wx(GIT)"
backend_status: "not_required"
gateway_status: "not_required"
frontend_status: "implemented"
frontend_owner: "mmg"
frontend_ref: "313609db"
target_release: ""
verified_at: "2026-08-11"
status_note: "前端已实现(313609db):1)统一选车/司机弹窗空白根因修复——候选按日期窗返回时行常不带 available/selectable,车辆 normalize 旧值 selectable=undefined,被统一选车(scope=slot→availableOnly)的 isFullyAvailableCandidate(要求 selectable===true)整列过滤成空白;单日入口 availableOnly=false 故正常。修 normalizeCandidateVehicle 缺省视为可选(显式 false 才禁用),与司机 normalize 同口径,补回归用例。2)槽位头「建议{车型}」标签已随 #5810(b6f9c44a)删除,本条复核无残留。3)需求语句展示区从弹窗头部挪到 Step2 排车页槽位表格下方常驻一行(原样渲染不解析,null 不渲染),与 11_5810b 车队组成格式兼容(格式收口后端)。picker spec 47 全过(含新增回归),fleet/board 35 spec 428 全过,checkpoint 3 文件全绿。"
updated_at: "2026-08-11"
base: "dev-v3"
---

# 派单弹窗 Step2「排车」三项前端待办（2026-08-11 wx 实操反馈）

> **页面**：车务管理 → 派单看板 → 订单派车弹窗 → Step2 排车
> **实测订单**：26-9313（orderId `2086270153414103041`，孙晓东，08/22→08/24，成人10）
> **后端**：本条**无后端改动**，三项全部是前端渲染/布局问题。相关字段在测试环境均已可实测。

---

## 1. 🔴 缺陷：「统一选择车辆/司机」弹窗一片空白（后端数据正常）

### 现象

槽位卡点「统一选择车辆/司机」→ 弹窗打开后，只渲染出顶部提示条「确认后统一写入该槽位全部可编辑用车日期；每天仍可单独调整」和右上「应用到槽位全部日期」按钮，**下方车辆列表 / 司机列表区域整片空白**。Network 面板中 `candidates` 请求返回 200。

### 后端实测（2026-08-11 网关 9443，车务管理员 token）

用该槽位的真实上下文调 `POST /admin/fleet/assignments/candidates`：

```json
{
  "orderId": 2086270153414103041,
  "requirementId": 2086700635972915201,
  "fleetItemIndex": 1,
  "startDate": "2026-08-22",
  "endDate": "2026-08-22",
  "headcount": 10,
  "excludeAssignmentId": 2086700639370301441
}
```

返回 `code=200`，**数据是齐的**：

| 字段 | 实测值 |
|------|--------|
| `vehicles.total` / 本页 | **21** / 20 条（蒙A-E2E01 丰田普拉多、蒙A-E2E99、蒙A-E5555 丰田埃尔法 …） |
| `drivers.total` / 本页 | **25** / 20 条（宝音德力格尔 15年、道尔吉 11年、巴雅尔 8年 …） |
| `vehicleTypeFacets` | 4 类（SUV系列 9 / 商务车 9 / 大巴系列 2 / …） |
| `fleetTeamFacets` | 4 组（北疆协作车队、合作车队A 4辆、合作车队B 2辆 …） |
| `canonicalSnapshot` | `planGeneration` / `snapshotVersion=6` / `retainedSlotIds` 均非空 |

### 结论与排查方向

**接口有数据，是前端拿到响应后没有把列表渲染出来。** 请重点看：

1. 响应取数路径：车辆/司机是 `data.vehicles.records` / `data.drivers.records`（分页对象，不是裸数组），`total` 在 `data.vehicles.total`。是否误按裸数组解构导致渲染空列表？
2. 该弹窗（「统一选择」入口）与单日「选择车辆/司机」入口是否复用同一个列表组件——单日入口此前是能出数据的，对比两条入口的 props/数据源差异。
3. 弹窗内是否有基于槽位状态/日期区间的前置过滤（例如按 `startDate===endDate` 或「可编辑用车日期」集合过滤），把 20 条全过滤掉了。
4. Network 里 `candidates` 调了两次（截图可见），确认是否第二次请求的响应覆盖了第一次、而第二次带了更严格的筛选参数。

---

## 2. ⚠️ 催办：槽位头「建议 SUV」「建议 车型未标注」标签仍未删除

`changelogs-v2/2026-08/11_5810_换版槽位人工制-需求语句与派车日期门禁-修改接口-管理后台.md` **§3 已明确要求删除**，当前线上（测试环境）仍在渲染，wx 2026-08-11 再次点名。

- 槽位头的「建议 {车型}」标签 → **全部去掉**（含车型缺失时的「建议 车型未标注」兜底文案）
- 字段层面 `vehicleSlots[].requiredVehicleType` / `requiredVehicleTypeLabel` / `requiredSeats` **后端仍返回真实值、契约保留**（其它场景可能用），只是**不要再渲染成槽位头的"建议 xx"标签**
- 原因重申：槽位人工制下车务爱派什么车派什么车，后端不按车型校验（车型/数量/人数不符**不拦截**），"建议"标签会让车务误以为必须匹配。车型诉求统一由下面第 3 条的需求语句表达一次

---

## 3. 📐 新增布局：Step2 排车页需要一块「用车需求」展示区

### 位置（wx 截图指定）

派单弹窗 Step2「排车」页，**槽位表格下方的空白区域**（截图中红框位置：最后一个槽位的日期表格结束之后、弹窗底部之前）。当前这块是纯空白，浪费了整屏空间，而车务在这一步恰恰最需要对照需求。

### 展示内容

数据源：`GET /admin/fleet/board/orders/{orderId}` **根级** `requirementFleetText`（字段已存在，测试环境可实测）。

- 26-9313 实测当前值：`商务车×1(7座)、SUV×1(5座)`
- ⚠️ 后端正在把格式统一为 **`商务车7座×1 + SUV5座×1`**（座位数内联到车型后、多项用加号连接，wx 2026-08-11 定稿）。格式变更单独发 changelog，**对前端接入方式无影响**——
- 🔴 **前端只管原样展示这个字符串，不要解析、不要自己按 `vehicleSlots` 或需求明细拼**（拼法口径归后端一处收口，否则日后改口径要改两边）
- `null` 时（需求不可达）整块不渲染，不要出现「当前需求：」空冒号或「当前需求：null」

### 建议形态

一行常驻文本即可，例如：

```
当前需求：商务车7座×1 + SUV5座×1
```

不做"变更态横幅"——常驻展示的好处是任何时候车务都能对照，不依赖任何"需求是否改过"的状态判断（`requirementChangePendingCount` 现已恒 0，不能再作为触发条件，见 #5810 §2）。

可一并放进这块区域的既有字段（同一接口根级，均已可实测，按需取用）：

| 字段 | 26-9313 实测值 | 说明 |
|------|---------------|------|
| `requirementFleetText` | `商务车×1(7座)、SUV×1(5座)`（即将改为新格式） | **必展示** |
| `headcount` | `10` | 乘车人数 |
| `suggestedVehicleCount` | `2` | 需求车辆数 |
| `specialTags` | `["儿童安全座椅","大行李空间","中文司机","老司机(5年以上)"]` | 特殊诉求，标签形态 |
| `requirementRemark` | `孙晓东10人mpvx1 suv*1` | 定制师需求备注 |

---

## 验证证据

- 第 1 条：2026-08-11 网关 `https://api.test.1814.love:9443` 车务管理员 token 实测 `POST /admin/fleet/assignments/candidates`，返回 `code=200`、`vehicles.total=21`、`drivers.total=25`、facets 非空（详见上表）。
- 第 2、3 条：同订单 `GET /admin/fleet/board/orders/2086270153414103041` 实测 `requirementFleetText="商务车×1(7座)、SUV×1(5座)"`、`headcount=10`、`suggestedVehicleCount=2`、`specialTags` 4 项、`requirementRemark` 非空；`vehicleSlots` 返回 3 个槽位且 `superseded` 全 false（#5810 后无旧数据行，符合预期）。
