# 车务看板车型分段展示与车型下拉接口检查(前端待处理) - 日期:2026-07-05 - 端:管理后台 - 页面: - 车务管理 / 派单看板 `/fleet/board` - 订单详情 / 用车需求弹窗 - 结论: - “实际车型”下拉的读取接口已有:`GET /admin/fleet/vehicle-types`,非分页,返回车型大类 + 型号树。 - 派单看板列表当前没有“前几天哪个车型、后几天哪个车型”的分段字段,不能靠前端从现有聚合字段硬推。 - 订单用车需求提交接口当前也没有 `vehicleModelId` / 分段日期字段;前端不要把实际型号名直接塞进旧的 `vehicleType` 字段。 ## 1. 测试环境接口复验 ### 1.1 派单看板列表 ```http GET /admin/fleet/board/orders ``` 测试环境返回 `200`,列表记录当前有这些关键字段: | 字段 | 当前含义 | |------|----------| | `startDate` | 本条派单行的开始日期 | | `endDate` | 本条派单行的结束日期 | | `fleetItemIndex` | 同一用车需求展开后的项次序 | | `requiredVehicles` | 同订单聚合后的需求车型数组 | | `currentVehicleModel` | 已派车辆型号快照,未派为空 | | `currentVehicleSeats` | 已派车辆座位数,未派为空 | 实测同一个订单出现多条派单行时,返回形态类似: ```json [ { "fleetItemIndex": 0, "startDate": "2026-07-02", "endDate": "2026-07-04", "requiredVehicles": [ { "vehicleType": "mpv", "categoryLabel": "商务车", "seats": 7, "count": 1 }, { "vehicleType": "suv", "categoryLabel": "SUV", "seats": 5, "count": 2 } ] }, { "fleetItemIndex": 1, "startDate": "2026-07-02", "endDate": "2026-07-04", "requiredVehicles": [ { "vehicleType": "mpv", "categoryLabel": "商务车", "seats": 7, "count": 1 }, { "vehicleType": "suv", "categoryLabel": "SUV", "seats": 5, "count": 2 } ] } ] ``` 这说明 `requiredVehicles` 是订单级聚合,不是“该日期段对应车型”的明细。前端不能用这个字段推断“前几天商务车,后几天 SUV”。 ### 1.2 车型大类 + 实际型号树 ```http GET /admin/fleet/vehicle-types ``` 测试环境返回 `200`,非分页,结构为: ```json [ { "id": "车型大类ID", "typeKey": "suv2", "typeName": "SUV系列", "modelCount": 5, "models": [ { "id": "车型型号ID", "vehicleTypeId": "所属大类ID", "modelName": "丰田普拉多", "seats": 7, "basePrice": "1000.00", "alias": "", "inUseCount": 2 } ] } ] ``` 这个接口可以作为“实际车型”下拉的数据源。 对比: ```http GET /admin/fleet/vehicle-types/list ``` 这个接口只返回车型大类,不含 `models`,不适合做“实际车型型号”下拉。 ## 2. 前端处理要求 ### 2.1 车型下拉改用实际车型树 用车需求弹窗里的“车型”下拉不要继续用静态字典或写死选项: - 轿车 - 商务车 - SUV - 中巴 - 大巴 - 房车 - 行李车 应改读: ```http GET /admin/fleet/vehicle-types ``` 建议前端把 `data[].models[]` 拉平成可选项: | 下拉内容 | 取值 | |----------|------| | 展示文案 | `modelName`,可附带 `seats`,例如 `丰田普拉多 · 7座` | | 型号 ID | `models[].id` | | 所属大类 | 外层 `id / typeKey / typeName` | | 默认座位数 | `models[].seats` | 不要用 `/admin/fleet/vehicle-types/list` 做这个下拉;它只适合筛选大类,不含实际型号。 ### 2.2 不要把实际型号名直接提交到旧字段 当前用车需求提交接口仍是旧契约: ```http PUT /v3/admin/order/{id}/vehicle-requirement ``` 当前入参仍只有: | 字段 | 当前含义 | |------|----------| | `fleet[].vehicleType` | 车型分类 | | `fleet[].seats` | 座位数 | | `fleet[].count` | 辆数 | 当前没有: - `fleet[].vehicleModelId` - `fleet[].modelName` - `fleet[].startDate` - `fleet[].endDate` 所以前端不能把 `丰田普拉多` 这类 `modelName` 直接提交到 `vehicleType`。fleet 侧历史归一只识别 `suv / mpv / bus / sedan` 及少量中文分类别名,直接提交实际型号名会导致后续需求展开无法稳定归一。 如果本次只是“下拉数据来源先换成实际车型库”,前端可以先用车型树做展示和辅助填座位数,但真正保存实际型号 ID 需要后端补提交契约。 ## 3. 派单看板“前几天哪个车型、后几天哪个车型” 当前 `GET /admin/fleet/board/orders` 不满足这个展示。 原因: 1. `requiredVehicles` 是订单级聚合数组,不是分段明细。 2. `startDate/endDate` 是当前派单行日期段,不表达“某个车型需求对应哪个日期段”。 3. 订单用车需求源数据当前也没有每个车型项自己的开始/结束日期。 前端不要按以下方式硬推: - 不要用 `requiredVehicles` 数组顺序 + `fleetItemIndex` 猜测日期段。 - 不要用整单 `startDate/endDate` 切分成前后几天。 - 不要根据人数、车型数量或卡片顺序推断车型分段。 如果页面要稳定展示“前几天 A 车型,后几天 B 车型”,需要后端补明确字段。建议目标形态如下: ```json { "vehicleSegments": [ { "startDate": "2026-05-19", "endDate": "2026-05-21", "vehicleModelId": "2090000000000000001", "modelName": "丰田普拉多", "vehicleType": "suv", "vehicleTypeLabel": "SUV", "seats": 7, "count": 1 }, { "startDate": "2026-05-22", "endDate": "2026-05-24", "vehicleModelId": "2090000000000000002", "modelName": "别克GL8", "vehicleType": "mpv", "vehicleTypeLabel": "商务车", "seats": 7, "count": 1 } ] } ``` 后端补契约前,派单看板建议仍按现有字段展示: - 整体行程日期:`startDate ~ endDate` - 需求车型 chip:`requiredVehicles[].categoryLabel + seats + count` - 已派车辆:`currentVehicleModel / currentVehicleSeats / currentVehiclePlate` ## 4. 验收口径 - 用车需求弹窗车型下拉数据来自 `GET /admin/fleet/vehicle-types` 的 `models[]`,不再用写死选项。 - 下拉能展示实际型号名和座位数,例如 `丰田普拉多 · 7座`。 - 前端不把 `modelName` 直接提交到旧的 `fleet[].vehicleType`。 - 派单看板不基于 `requiredVehicles` 聚合数组硬推“前几天/后几天”的车型分段。 - 若要展示车型分段,等后端补明确的分段字段后再接。