--- schema: "hl-changelog/v2" ticket: "N/A" title: "核单「完成核单」按钮校验逻辑简化" consumer: "admin" change_type: "修改接口" author: "yaosutu(GIT)" backend_status: "deployed" gateway_status: "verified" frontend_status: "implemented" frontend_owner: "mmg" frontend_ref: "ce4d98b3" target_release: "" verified_at: "" status_note: "已实现。canComplete 由 5 条减为 3 条 UI 态防误触(hasLoadingStep/hasSavingStep/dirty),askComplete 同步删 vehicleSettlementBlocked 兜底拦截,并删除车辆分类顶部常驻提示条;LEGACY 金额未知空态的车辆编辑锁保留(防空草稿存成 0 元)。frontend_ref=ce4d98b3。" updated_at: "2026-08-09" base: "dev-v3" --- # 核单「完成核单」按钮校验逻辑简化 ## 变更类型 修改接口(前端逻辑调整,后端零改动) ## 端类型 管理后台 ## 变更说明 「完成核单」按钮的前端校验逻辑简化,去掉业务约束类校验,只保留 UI 态防误触校验。 ### 改动前(5 条校验) ```javascript const canSubmit = computed(() => !hasLoadingStep && // 1. 没有任何分类在加载中 !hasSavingStep && // 2. 没有任何分类在保存中 !dirty && // 3. 没有任何未保存的修改 !vehicleSettlementBlocked && // 4. 车辆核单状态不被拦(删) reportsReady // 5. 司机报账表 + 单团核算表都已生成(删) ) ``` ### 改动后(3 条校验) ```javascript const canSubmit = computed(() => !hasLoadingStep && // 1. 没有任何分类在加载中 !hasSavingStep && // 2. 没有任何分类在保存中 !dirty // 3. 没有任何未保存的修改 ) ``` ### 删除的 2 条校验及原因 | 删除项 | 原因 | |---|---| | `vehicleSettlementBlocked` | 后端 `finalize` 已有统一硬校验(`performSubmitBlockingChecks`),前端无需重复拦截 | | `reportsReady` | 报表是 finalize 的**产出**而非**前置条件**,逻辑反了,直接删除 | ### 后端统一拦截行为 用户点击「完成核单」后,后端 `finalize` 接口统一校验: - 对账一致性(支付流水 = 手工收款) - 车辆费用 freeze 校验 - 导游/摄影费用确认状态 - 司机结算完成 + 转账凭证 - 其他收入确认状态 校验失败返回对应错误码 + 提示信息,前端直接展示即可。 ## 影响范围 - 管理后台核单页面「完成核单」按钮 - 后端零改动 ## 关联 - 无 Issue(口头需求)