# 【前端对接·管理后台】订单用车通用特殊诉求改为字典

> 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 <admin-token>
```

或使用全量字典缓存接口中的同名 `dictType`。

当前字典项：

| value | label |
|------|------|
| `儿童安全座椅` | 儿童安全座椅 |
| `大行李空间` | 大行李空间 |
| `中文司机` | 中文司机 |
| `老司机(5年以上)` | 老司机(5年以上) |
| `含高速油费` | 含高速油费 |
| `静音车型` | 静音车型 |
| `有 WiFi` | 有 WiFi |

说明：本次 `value` 与 `label` 保持一致，兼容现有已提交的中文标签。

## 3. 首次提交用车需求

```http
PUT /v3/admin/order/2074746808742928386/vehicle-requirement
Authorization: Bearer <admin-token>
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 <admin-token>
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: []` 即可。
