比较提交
4
次代码提交
| 作者 | SHA1 | 提交日期 | |
|---|---|---|---|
|
|
21b5b5cf01 | ||
|
|
f75c679c9d | ||
|
|
8c44c113f3 | ||
|
|
938ca1702f |
@@ -119,6 +119,13 @@ generated: "2026-07-22T13:25:00+08:00"
|
|||||||
|
|
||||||
前端禁用判断只使用 `available === false`。禁止用 `requirementMatched === false`、`seatsEnough === false` 或车型不一致禁用车辆;这些情况应显示“需求不匹配/座位不足”提示,但允许车务选中。
|
前端禁用判断只使用 `available === false`。禁止用 `requirementMatched === false`、`seatsEnough === false` 或车型不一致禁用车辆;这些情况应显示“需求不匹配/座位不足”提示,但允许车务选中。
|
||||||
|
|
||||||
|
需求不匹配必须使用车辆卡片内的显式标签,不能再以黄色外框作为主要提示:
|
||||||
|
|
||||||
|
- `requirementMatched === false`:在车辆名称/状态附近显示橙色 `需求不匹配` 标签。
|
||||||
|
- `seatsEnough === false`:额外显示红色或橙红色 `座位不足` 标签。
|
||||||
|
- 移除需求不匹配专用黄色外框;边框只保留选中态、档期冲突等已有交互语义,避免颜色含义不明。
|
||||||
|
- 标签只负责提醒,不改变 `available`、点击选择或最终派单规则。
|
||||||
|
|
||||||
### 先选司机与取消车辆
|
### 先选司机与取消车辆
|
||||||
|
|
||||||
- 仅传 `selectedDriverId` 时,`selectedDriverResidentVehicle` 返回该司机常驻车的完整车辆候选;司机无常驻车时为 `null`。
|
- 仅传 `selectedDriverId` 时,`selectedDriverResidentVehicle` 返回该司机常驻车的完整车辆候选;司机无常驻车时为 `null`。
|
||||||
@@ -157,7 +164,7 @@ generated: "2026-07-22T13:25:00+08:00"
|
|||||||
|
|
||||||
- [ ] 车辆和司机列表分别接 `records/total/page/pageSize` 并增加独立分页控件。
|
- [ ] 车辆和司机列表分别接 `records/total/page/pageSize` 并增加独立分页控件。
|
||||||
- [ ] 车队和车型筛选使用 `fleetTeamFacets/vehicleTypeFacets` 动态渲染及计数。
|
- [ ] 车队和车型筛选使用 `fleetTeamFacets/vehicleTypeFacets` 动态渲染及计数。
|
||||||
- [ ] 车辆行展示车型、常驻司机、协议参考价;需求车型或座位不匹配只醒目标记,不禁选。
|
- [ ] 车辆行展示车型、常驻司机、协议参考价;需求不匹配改用卡片内显式标签并移除黄色外框,座位不足追加独立标签,均不禁选。
|
||||||
- [ ] 支持再次点击已选车辆取消选择,并传 `selectedVehicleId: null`。
|
- [ ] 支持再次点击已选车辆取消选择,并传 `selectedVehicleId: null`。
|
||||||
- [ ] 支持先选司机,并展示/置顶 `selectedDriverResidentVehicle`。
|
- [ ] 支持先选司机,并展示/置顶 `selectedDriverResidentVehicle`。
|
||||||
- [ ] 司机范围与排序按原型平铺为 2+4 个按钮,默认“仅空闲 + 智能推荐”,不得折叠成两个下拉框。
|
- [ ] 司机范围与排序按原型平铺为 2+4 个按钮,默认“仅空闲 + 智能推荐”,不得折叠成两个下拉框。
|
||||||
|
|||||||
@@ -0,0 +1,161 @@
|
|||||||
|
---
|
||||||
|
schema: "hl-changelog/v1"
|
||||||
|
ticket: "5145"
|
||||||
|
title: "选车后常驻司机默认配对"
|
||||||
|
consumer: "admin"
|
||||||
|
backend: "verified"
|
||||||
|
gateway: "verified"
|
||||||
|
frontend: "pending"
|
||||||
|
base: "dev-v3"
|
||||||
|
generated: "2026-07-22T15:30:00+08:00"
|
||||||
|
---
|
||||||
|
|
||||||
|
# 【修改接口·前端待处理·管理后台】选车后常驻司机默认配对
|
||||||
|
|
||||||
|
## 目标前端
|
||||||
|
|
||||||
|
- 端类型:管理后台(Web)
|
||||||
|
- 目标仓库:`mmg/hl-ui`
|
||||||
|
- 仓库地址:<https://git.1814.love:8443/mmg/hl-ui.git>
|
||||||
|
- 目标分支:`v2.1`
|
||||||
|
- 联调/验收环境:<http://192.168.100.160:9527>
|
||||||
|
- 小程序:无需处理
|
||||||
|
|
||||||
|
> **服务**: hl-fleet-service
|
||||||
|
>
|
||||||
|
> **后端 PR**: [wx/HL#5148](https://git.1814.love:8443/wx/HL/pulls/5148)
|
||||||
|
>
|
||||||
|
> **工单**: [wx/HL#5145](https://git.1814.love:8443/wx/HL/issues/5145)
|
||||||
|
>
|
||||||
|
> **日期**: 2026-07-22
|
||||||
|
>
|
||||||
|
> **影响范围**: 管理后台订单派车弹窗的车辆/司机联动选择
|
||||||
|
|
||||||
|
## 关键变化
|
||||||
|
|
||||||
|
`POST /admin/fleet/assignments/candidates` 的响应新增 `data.selectedVehicleResidentDriver`。前端选中车辆后,可直接取得该车常驻司机的完整候选快照并按档期决定是否自动选中,不再依赖当前司机页中能否找到该司机。
|
||||||
|
|
||||||
|
这个独立快照不受司机关键词、司机分页、`driverAvailability=AVAILABLE` 或排序条件影响;没有有效常驻司机时为 `null`。
|
||||||
|
|
||||||
|
## 变更接口
|
||||||
|
|
||||||
|
| 方法 | 路径 | 变更类型 | 说明 |
|
||||||
|
| --- | --- | --- | --- |
|
||||||
|
| POST | `/admin/fleet/assignments/candidates` | 响应新增字段 | 返回已选车辆的常驻司机候选快照 |
|
||||||
|
|
||||||
|
请求时继续传当前选中车辆:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"orderId": "2080000000000000001",
|
||||||
|
"requirementId": "2080000000000000101",
|
||||||
|
"fleetItemIndex": 0,
|
||||||
|
"startDate": "2026-07-29",
|
||||||
|
"endDate": "2026-07-31",
|
||||||
|
"selectedVehicleId": "2080000000000000201",
|
||||||
|
"selectedDriverId": null,
|
||||||
|
"driverKeyword": "不会命中常驻司机的关键词",
|
||||||
|
"driverAvailability": "AVAILABLE",
|
||||||
|
"driverPage": 3,
|
||||||
|
"driverPageSize": 10
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
响应新增字段示例:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"selectedVehicleResidentDriver": {
|
||||||
|
"driverId": "2080000000000000301",
|
||||||
|
"name": "常驻司机",
|
||||||
|
"maskedPhone": "135****5001",
|
||||||
|
"available": true,
|
||||||
|
"availabilityReasonCode": "AVAILABLE",
|
||||||
|
"availabilityReasonMessage": "所选服务日期内可用",
|
||||||
|
"availabilityWindows": [
|
||||||
|
{ "startDate": "2026-07-29", "endDate": "2026-07-31" }
|
||||||
|
],
|
||||||
|
"insuranceCoverageStatus": "ANNUAL_COVERED",
|
||||||
|
"insuranceCoverageMessage": "全年保险已覆盖",
|
||||||
|
"insuranceCovered": true,
|
||||||
|
"residentVehicleId": "2080000000000000201",
|
||||||
|
"residentVehiclePlate": "蒙A-示例",
|
||||||
|
"completedOrderCount": 12,
|
||||||
|
"rating": null,
|
||||||
|
"hasRating": false,
|
||||||
|
"conflicts": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
冲突时该字段仍返回,不会被 `driverAvailability=AVAILABLE` 过滤:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"data": {
|
||||||
|
"selectedVehicleResidentDriver": {
|
||||||
|
"driverId": "2080000000000000301",
|
||||||
|
"available": false,
|
||||||
|
"availabilityReasonCode": "ASSIGNMENT_CONFLICT",
|
||||||
|
"availabilityReasonMessage": "所选服务日期内存在派单冲突",
|
||||||
|
"availabilityWindows": [],
|
||||||
|
"conflicts": [
|
||||||
|
{
|
||||||
|
"startDate": "2026-07-30",
|
||||||
|
"endDate": "2026-07-31",
|
||||||
|
"blocking": true,
|
||||||
|
"reasonCode": "ASSIGNMENT_CONFLICT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
雪花 ID 继续按字符串处理,禁止 `Number()` 或 `parseInt()`。
|
||||||
|
|
||||||
|
## 前端交互口径
|
||||||
|
|
||||||
|
### 选车后默认常驻司机
|
||||||
|
|
||||||
|
- 用户选中车辆后重新请求候选接口,并读取 `selectedVehicleResidentDriver`。
|
||||||
|
- 字段非空且 `available === true`:默认选中该司机,并记录本次司机选择来源为“车辆常驻司机自动选中”。
|
||||||
|
- 字段非空且 `available === false`:不要自动选中;在车辆/司机联动区域显示醒目的 `常驻司机档期冲突` 标签,可补充 `availabilityReasonMessage`。
|
||||||
|
- 字段为 `null`:该车辆没有有效常驻司机,不自动选择司机。
|
||||||
|
- 不要在 `drivers.records` 中二次查找常驻司机;它可能因关键词、分页或“仅空闲”条件不在当前列表。
|
||||||
|
|
||||||
|
### 更换自动选中的常驻司机
|
||||||
|
|
||||||
|
- 只有当前司机是本次选车后自动选中的常驻司机时,用户点击其他司机才弹二次确认。
|
||||||
|
- 推荐文案:`该车辆已默认匹配常驻司机「{name}」,确认更换为「{newName}」吗?`
|
||||||
|
- 点击取消:保留原常驻司机,不更新本地 `selectedDriverId`,也不要以新司机重新查询接口。
|
||||||
|
- 点击确认:替换为新司机,再以新 `selectedDriverId` 查询候选接口。
|
||||||
|
- 常驻司机因档期冲突未自动选中时,用户选择其他司机不需要这次二次确认。
|
||||||
|
- 用户主动选择其他司机后的跨常驻关系,仍按已有 `selectedRelation.requiresConfirmation` 做最终派单确认;两种确认不可合并。
|
||||||
|
|
||||||
|
### 车辆取消与切换
|
||||||
|
|
||||||
|
- 再次点击已选车辆取消选择时,同时清除“自动常驻司机”来源标记;是否保留司机沿用当前页面既有取消车辆口径。
|
||||||
|
- 切换到另一辆车后,以上规则按新响应重新执行;不得沿用上一辆车的常驻司机快照。
|
||||||
|
|
||||||
|
## 前端处理清单
|
||||||
|
|
||||||
|
- [ ] 接入 `selectedVehicleResidentDriver`,不依赖司机当前分页定位常驻司机。
|
||||||
|
- [ ] 常驻司机档期可用时默认选中,并记录自动选择来源。
|
||||||
|
- [ ] 常驻司机冲突时不自动选中,展示 `常驻司机档期冲突` 标签。
|
||||||
|
- [ ] 更换自动选中的常驻司机时增加二次确认;取消不产生瞬时切换或接口重查。
|
||||||
|
- [ ] 保留已有跨常驻最终派单确认,两种确认分别处理。
|
||||||
|
- [ ] 雪花 ID 全程按字符串处理。
|
||||||
|
|
||||||
|
## 验证证据
|
||||||
|
|
||||||
|
- 定向测试覆盖:常驻司机在司机关键词/分页/仅空闲筛选之外仍返回;档期冲突仍返回;车辆无常驻司机返回 `null`。
|
||||||
|
- `mvn -pl hl-fleet-service -am test` 通过。
|
||||||
|
- `mvn -pl hl-fleet-service spotless:check` 通过。
|
||||||
|
- `mvn -pl hl-fleet-service -am verify` 通过。
|
||||||
|
- `hl-fleet-service` 已从 `dev-v3` 滚动部署测试环境,8087/8187 双实例健康。
|
||||||
|
- 测试网关实测 HTTP/业务码 200:常驻司机快照在司机关键词不命中、司机页为空和 `AVAILABLE` 筛选下仍返回,司机 ID 与车辆 `primaryDriverId` 一致;无常驻司机车辆返回 `null`。
|
||||||
|
|
||||||
|
> 本文是前端接入通知,不代表已修改或发布 `mmg/hl-ui`。
|
||||||
在新工单中引用
屏蔽一个用户