diff --git a/changelogs-v2/2026-07/52_4862_订单用车通用特殊诉求字典化-管理后台.md b/changelogs-v2/2026-07/52_4862_订单用车通用特殊诉求字典化-管理后台.md new file mode 100644 index 0000000..6563faf --- /dev/null +++ b/changelogs-v2/2026-07/52_4862_订单用车通用特殊诉求字典化-管理后台.md @@ -0,0 +1,179 @@ +# 【前端对接·管理后台】订单用车通用特殊诉求改为字典 + +> Issue: [wx/HL#4862](https://git.1814.love:8443/wx/HL/issues/4862) +> 服务: `hl-user-service` / `hl-order-service-v3` +> 日期: 2026-07-09 +> 影响范围: 订单详情 / 调整订单弹窗 / 车辆安排 + +## 1. 结论 + +- 「车辆安排」里的 `specialTags` 现在必须来自业务字典 `vehicle_special_demand`。 +- 后端新增字典种子,并在提交用车需求、调整订单车辆需求时做强校验。 +- 字段结构不变,仍然是 `specialTags: string[]`。 +- 未列入字典的个性化要求请写入 `remark`,不要作为 `specialTags` 提交。 + +## 2. 字典 + +前端从通用字典接口读取: + +```http +GET /admin/dict/data/vehicle_special_demand +Authorization: Bearer +``` + +或使用全量字典缓存接口中的同名 `dictType`。 + +当前字典项: + +| value | label | +|------|------| +| `儿童安全座椅` | 儿童安全座椅 | +| `大行李空间` | 大行李空间 | +| `中文司机` | 中文司机 | +| `老司机(5年以上)` | 老司机(5年以上) | +| `含高速油费` | 含高速油费 | +| `静音车型` | 静音车型 | +| `有 WiFi` | 有 WiFi | + +说明:本次 `value` 与 `label` 保持一致,兼容现有已提交的中文标签。 + +## 3. 首次提交用车需求 + +```http +PUT /v3/admin/order/2074746808742928386/vehicle-requirement +Authorization: Bearer +Content-Type: application/json +``` + +请求示例: + +```json +{ + "fleet": [ + { + "vehicleType": "suv2", + "seats": 5, + "count": 1 + } + ], + "specialTags": ["儿童安全座椅", "中文司机"], + "remark": "需要接机,后备箱放 2 个 28 寸行李箱" +} +``` + +成功响应示例: + +```json +{ + "loginStatus": 200, + "requestStatus": 200, + "code": 0, + "msg": "success", + "data": { + "id": "91011223399", + "orderId": "2074746808742928386", + "version": 1, + "status": "PENDING" + } +} +``` + +## 4. 调整订单提交车辆需求 + +调整订单的车辆需求也支持并校验 `updates.vehicleRequirement.specialTags`。 + +```http +POST /v3/admin/order/2074746808742928386/adjustment/submit +Authorization: Bearer +Content-Type: application/json +``` + +请求示例: + +```json +{ + "updates": { + "vehicleRequirement": { + "fleet": [ + { + "vehicleType": "suv2", + "seats": 5, + "count": 1 + } + ], + "specialTags": ["儿童安全座椅", "中文司机"], + "remark": "第 3 天需要儿童安全座椅" + } + } +} +``` + +成功响应示例: + +```json +{ + "loginStatus": 200, + "requestStatus": 200, + "code": 0, + "msg": "success", + "data": { + "success": true, + "changeItems": [ + { + "type": "VEHICLE_REQ", + "label": "车辆需求已调整" + } + ] + } +} +``` + +## 5. 错误响应 + +提交字典外值: + +```json +{ + "fleet": [ + { + "vehicleType": "suv2", + "seats": 5, + "count": 1 + } + ], + "specialTags": ["随便写一个"], + "remark": "错误示例" +} +``` + +响应示例: + +```json +{ + "loginStatus": 200, + "requestStatus": 200, + "code": 582025, + "msg": "用车通用特殊诉求不在字典 vehicle_special_demand 中", + "data": null +} +``` + +字典不可用时: + +```json +{ + "loginStatus": 200, + "requestStatus": 200, + "code": 582026, + "msg": "用车通用特殊诉求字典不可用", + "data": null +} +``` + +## 6. 前端改造点 + +- 不要继续在 `FunItemAdjustModal.vue` 里硬编码 `VEHICLE_SPECIAL_OPTIONS`。 +- 用 `vehicle_special_demand` 字典渲染多选按钮。 +- 提交 `option.value` 数组到 `specialTags`。 +- 自定义、不确定、长文本诉求写入 `remark`。 +- 空选择提交 `specialTags: []` 即可。