---
schema: "hl-changelog/v2"
ticket: "5693"
title: "矩阵拖拽改派一步到位（拖到目标车/司机直接改成，不再弹窗手选）"
consumer: "admin"
author: "wx"
change_type: "前端修复"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "implemented"
frontend_owner: "mmg"
frontend_ref: "23d6e7b1"
target_release: ""
verified_at: ""
status_note: ""
updated_at: "2026-08-08"
base: "origin/dev-v3"
generated: "2026-08-08"
---

# 矩阵拖拽改派一步到位（前端修复）

## 口径（wx）
矩阵拖拽改派要**一步到位**——拖到目标车辆/司机就**直接改成它**（该车常驻司机或拖到的司机），**不再弹改派页手选槽位+重选车/司机**（拖完还手选=失去拖拽意义）。

## 现状（前端问题）
`matrix/index.vue:442 onDropAssign` 拖后仍 `openAssign` 弹窗手选——拖拽后还要手选槽位+车/司机。

## 后端能力已齐备（零改动）
- change API `POST /admin/fleet/assignments/{id}/change`：`newVehicleId`/`newDriverId` 均可空，必填仅 `effectiveDate`/`holdMode`/`reason`/`requestId`
- 拖拽落点行已带 `assignmentId`/`slotId`（只切片该槽位）
- 矩阵车辆行已带 `primaryDriverId`（常驻司机）
- 价格/收费日默认沿用

## 前端修复
拖拽 drop 后**直接调 change**：
- 拖到车辆行 → change 传该 vehicleId + 其 primaryDriverId（常驻司机），effectiveDate=落点日期，切片该槽位
- 拖到司机 → change 传该 driverId
- 多槽位：拖拽落点确定改哪个槽位（slotId）
- 仅跨常驻确认 / 605041 基线差异 / 多车 warning 等分支弹**轻量确认**，不弹完整改派页手选

## 验收
- [ ] 拖拽到目标车/司机直接改派生效（一步到位，不弹改派页手选）
- [ ] 多槽位拖拽落点确定改哪个槽位
- [ ] 跨常驻/基线差异等弹轻量确认
- [ ] 拖拽后价格/逐日正确

## 关联
- #5693（后端排查，契约齐备零改动；证据 evidence/5693/issue-comment-onestep.md）

## 联系人
- 后端/协调台：wx

## 前端实证确认（2026-08-08 mmg，hl-admin）

按协调台拍板的「向导预选直达确认步」口径实现（非字面「直接调 change 不弹页」），hl-admin@23d6e7b1：

- **矩阵拖拽补传常驻司机**：`matrix/index.vue onDropAssign` 从落点车辆行取 `primaryDriverId`（字符串透传，空归一 null），两个模式分支统一 `openAssign(order, { vehicle, driver: residentDriverId, mode })`。
- **AssignModal reassign 应用预选**：拖拽条目 `order.assignmentId` 命中 `activeAssignments` 且带预选车辆时，自动锁定被拖槽位为改派目标 + 进入「已清除重选」态（`changeDraftCleared=true`，等价手选槽位后点清除），费用草稿按 `mergeSlotChangeSegments` 整段合并目标 + `preferSavedTotal` 恢复；`restoreSelection({ vehicleId, driverId, autoSelectResidentDriver })` 复用 batch 分支同一机制——预选司机仅作初始草稿，仍随 `loadCandidates` 携带两侧 ID 复核可用性与常驻关系，不硬信车辆档案；落点车无常驻司机时留空走既有空态。
- **保持不变**：提交链 `buildAssignmentSubmission/changeAssignment`、跨常驻确认（605036）、基线差异（605041）、ORDER_HAS_OTHER_VEHICLES warning、逐日车费拦截全部未触碰。
- **与原口径差异**：拖拽后仍需用户在改派向导点一次「下一步/确认」提交（未做到完全不弹页直接 change）。取舍原因：落点缺目标司机、落点日期、逐日车费三个向导输入，直接重建精简 change 链需自行补齐这三值，风险高于复用既有向导校验；多槽位由被拖条目 assignmentId 确定槽位（满足「落点确定改哪个槽位」）。
- 验证：fleet/board 定向 vitest 413/413 通过；checkpoint（含生产构建）全绿。若需进一步做到「完全不弹页直改」，属另一次精简 change 链重建，建议单列工单。
