--- schema: "hl-changelog/v1" ticket: "5131" title: "车队独立管理及车队字典下线" consumer: "admin" backend: "verified" gateway: "verified" frontend: "pending" base: "dev-v3" generated: "2026-07-22T10:46:00+08:00" --- # 【新增接口·修改接口·前端需联调·管理后台/H5】车队独立管理及车队字典下线 > **服务**: hl-fleet-service + hl-user-service > **日期**: 2026-07-22 > **工单**: #5131 > **影响范围**: 车队管理、车辆档案、司机 H5、自带车审核、派车候选、矩阵、车队对账 ## 关键变化 `fleet_attribution` 不再是车队数据源。后端新增 `fleet_team` 主数据,统一维护: - `teamName`:车队名称。 - `teamType`:`SELF_OPERATED` 自有 / `COOPERATIVE` 合作。 - `leaderName`、`leaderPhone`:负责人及电话;列表电话脱敏,详情返回编辑原值。 - `settleType`:直接复用资源付款方式 `resource_settle_type`,当前值为 `cash` / `sign` / `company`。 - `status`:`ACTIVE` / `DISABLED`。 车辆及相关链路以 `fleetTeamId` 为权威关联。旧 `fleet` 稳定编码仅在客户端切换期保留兼容,不得再用于生成选项或写死 `own/coopA/coopB`。 ## 变更接口 ### 车队管理 | 方法 | 路径 | 说明 | | --- | --- | --- | | GET | `/admin/fleet/teams/page` | 分页;支持 `keyword/teamType/status/settleType` | | GET | `/admin/fleet/teams/options` | 有效车队下拉;编辑存量时可传 `includeDisabledId` 回显当前停用车队 | | GET | `/admin/fleet/teams/:fleetTeamId` | 详情;负责人电话返回原值供编辑 | | POST | `/admin/fleet/teams` | 新增 | | PUT | `/admin/fleet/teams/:fleetTeamId` | 编辑 | | DELETE | `/admin/fleet/teams/:fleetTeamId` | 删除;仅名下无车辆且无未完结司机自助录入时允许 | | POST | `/admin/fleet/teams/:fleetTeamId/disable` | 停用;仍有在役车辆返回 `601103` | | POST | `/admin/fleet/teams/:fleetTeamId/enable` | 启用 | 保存请求: ```json { "teamName": "合作车队一队", "teamType": "COOPERATIVE", "leaderName": "张三", "leaderPhone": "13800138000", "settleType": "sign", "sortOrder": 20, "remark": "旺季合作车队" } ``` 下拉响应项: ```json { "fleetTeamId": "2080000000000000001", "teamCode": "ft_fsq1ab23cd", "teamName": "合作车队一队", "teamType": "COOPERATIVE", "settleType": "sign", "status": "ACTIVE" } ``` 雪花 ID 一律按字符串处理,禁止 `Number()` / `parseInt()`。 ## 修改接口 ### 车辆档案 - `POST /admin/fleet/vehicles`、`PUT /admin/fleet/vehicles/:id`:新增 `fleetTeamId`,新前端必传。 - `GET /admin/fleet/vehicles/page`:新增筛选参数 `fleetTeamId`;列表项新增 `fleetTeamId/fleetTeamName/fleetType/settleType`。 - `GET /admin/fleet/vehicles/:id`:详情新增同上字段。 - 车辆导入模板把车队列改为“车队名称”,填写独立车队管理中的有效名称;历史表头和稳定编码仍兼容。 ### 司机 H5 与审核 - `GET /app/h5/driver-onboard/init`:链接可编辑时新增 `fleetTeamOptions[]`,只包含 `fleetTeamId/teamName/teamType`,不暴露负责人和结算资料;续签会额外包含当前已停用车队用于原值回显。 - `SubmitVehicleVO`、续签常驻车回显新增 `fleetTeamId`。 - 待审核详情 `vehicle`、审核通过请求 `ownVehicle` 新增 `fleetTeamId`。 - H5 和管理端都必须提交 ID;旧 `fleet` 仅兼容已打开的旧页面。 ### 派车候选与矩阵 - 派车车辆候选新增 `fleetTeamId/fleetTeamName/fleetType/settleType`。 - `GET /admin/fleet/board/orders` 已派车辆新增 `currentVehicleFleetTeamId/currentVehicleFleetTeamName/currentVehicleFleetTeamType/currentVehicleFleetTeamSettleType`。 - `GET /admin/fleet/matrix/grid` 新增 `fleetTeamIds[]`;`fleets[]` 废弃。 - 矩阵车辆行新增 `fleetTeamId/fleetTeamName/fleetType/settleType`。 - 响应新增 `fleetTeamCounts[]`,每项包含 `fleetTeamId/teamName/count`;`fleetCount` 仅过渡兼容。 ### 对账 - 车费车队分组新增 `fleetTeamId/fleetType/settleType`,名称使用对账快照。 - `GET /admin/fleet/reconciliation/cars` 与 CSV 导出新增 `fleetTeamIds[]`;传入后优先于旧 `fleets[]`。 - 保险车队分组新增 `fleetTeamId/fleetName/fleetType/settleType`。 - 实际结算保存新增 `fleetTeamId`;旧 `fleet` 废弃。 - 后端按车队类型派生 `OWN_COST/COOP_QUOTE`,不再把 `own` 当特殊业务编码。 历史字典迁入的车队可能没有负责人资料。新增、编辑请求中的 `leaderName`、`leaderPhone`、 `settleType`、`sortOrder` 均为必填;前端编辑存量车队时必须提示车务人员补录真实资料,禁止用占位姓名或虚假电话自动填充。 ## 独立菜单与权限 user-service 在“车务管理”目录下新增子菜单: - 路由:`/fleet/teams` - 组件:`fleet/teams/index` - 权限:`fleet:team:list`、`fleet:team:create`、`fleet:team:update`、`fleet:team:status`、`fleet:team:delete` - 默认角色:`SUPER_ADMIN`、`ADMIN`、`VEHICLE_MANAGER` 前端必须新增对应组件,否则菜单发布后会出现空路由。 ## 前端必须修改的范围 ### 2026-07-24 页面复测反馈:列表列宽与暗色模式 测试环境 `/fleet/teams` 页面已经能展示负责人和脱敏电话,但当前样式仍需前端修正,本反馈不涉及后端接口或字段变化: 1. 表格列宽分配失衡。“车队名称”列占用过多空白,把“负责人 / 负责人电话”等核心联系人信息推到页面右侧,首屏信息密度过低。 2. 暗色模式不能只替换页面背景。当前筛选区、表头、行分隔线、空值、状态标签和操作区的层级与对比度不足,部分边界难以辨认。 3. 样式必须复用项目主题 token;禁止在本页写死仅适用于浅色模式的背景色、文字色或边框色。负责人电话仍只展示接口返回的脱敏值,样式调整不得绕过脱敏。 #### 展示矩阵 | 视口 / 主题 | 车队名称 | 负责人 / 负责人电话 | 其他列 | 验收表现 | | --- | --- | --- | --- | --- | | `>= 1440px`,浅色 | 弹性列,限制最大占比;超长省略并可查看完整名称 | 建议分别保留约 `120px / 140px`,左对齐 | 类型、付款方式、数量、排序、状态和操作按内容定宽 | 联系人紧邻业务字段,首屏无大段无意义空白 | | `>= 1440px`,暗色 | 同浅色列宽规则 | 同浅色列宽规则 | 使用暗色主题 token | 页面、筛选区、表头、数据行、状态标签和操作区层级清楚 | | `1024px - 1439px`,浅色/暗色 | 优先收缩并省略,不能无限占宽 | 不压缩为空或挤出主要阅读区 | 保留操作列可用宽度 | 联系人信息仍可直接阅读 | | `< 1024px`,浅色/暗色 | 设置表格最小宽度 | 保持可读宽度 | 允许横向滚动 | 不通过隐藏关键列或强行挤压完成适配 | 空负责人和空电话统一显示 `—`。联系人文本左对齐;车辆数、排序、状态和操作居中。浅色与暗色模式都必须覆盖默认、悬停、聚焦、禁用和空数据状态;普通文本与背景建议至少达到 `4.5:1` 对比度,控件边界和状态提示应清晰可辨。 ### 管理后台 1. 新增 `src/api/fleet/teams.js` 和 `src/views/fleet/teams/index.vue`,完成车队分页、新增、编辑、启停和删除: - “车队管理”必须显示在“车务管理”目录内,不得作为一级菜单处理。 - 按上面的展示矩阵修正表格列宽和明暗主题样式,不能让“车队名称”列挤占联系人信息区域。 - 仅 `vehicleCount === 0` 时展示/启用删除动作;调用删除接口后刷新列表。 - 后端仍会独立校验车辆及未完结司机录入关联,返回 `601107` 时提示“请先完成车辆/司机转移”。 - 编辑历史迁入车队时补齐负责人、负责人电话、付款方式和排序。 2. 车辆档案: - `src/views/fleet/vehicles/index.vue` - `src/views/fleet/vehicles/components/VehicleEditModal.vue` - `src/api/fleet/vehicles.js` 使用 `/admin/fleet/teams/options`,表单和筛选绑定 `fleetTeamId`,展示 `fleetTeamName`。 3. 自带车审核和车辆选择: - `src/views/fleet/drivers/pending/index.vue` - `src/views/fleet/drivers/components/VehiclePickerModal.vue` - `src/api/fleet/drivers.js` 不再读取 `fleet_attribution`。 4. 派车看板、矩阵和共享甘特:删除 `own/coopA/coopB` 固定数组和固定颜色映射,按 API 返回的 ID/名称动态分组。涉及: - `src/views/fleet/board/composables/useVehicleDriverPicker.js` - `src/views/fleet/board/components/VehiclePickerList.vue` - `src/views/fleet/matrix/**` - `src/views/fleet/_shared/fleetDisplay.js` - `src/views/fleet/_shared/gantt/**` 5. 车队对账:`src/views/fleet/recon/**` 删除三车队固定循环、固定展开状态和固定 CSV 顺序;实际结算提交 `fleetTeamId`。 动态车队颜色可由 `fleetTeamId` 做稳定哈希映射,但不得用数组下标产生每次刷新变化的颜色。 ### 司机 H5 以下文件把硬编码 `