86 KiB
排车列表前端原型核对
本轮范围与结论
2026-10-19,前端任务 01a1524f-52c7-7cc3-9b08-d34ad24c172a 按总控 01a15230-a9d6-7503-a8a9-d70691df49e5 的首轮准备派工形成本文。工作区为 TEST 项目 c64729ff-6710-43c6-8ef2-d84e9666cc1e、host local、C:/Users/BY-OY/Desktop/code/chongchong-global;三项已经通过本机项目清单和cwd核对。首轮仅写文档;随后总控按共同契约第八至十节解锁前端生产代码和离线验证,本文同步维护实施切片。始终不提交/推送/部署/运行环境SQL或真实HTTP,不操作真实业务,不建分支/worktree或项目副本,不跨对话发信或递归委派。
业务目标唯一见排车列表统一作业改造契约。其最新第八至十节覆盖本文首轮矩阵中的历史待裁定表述;以下“当前实现”记录首轮读取快照,实施结果单列,不把旧快照当作仍未修改的事实。日历新增预约已分离,不由本任务设计、编写矩阵或实现;仅保留整车改造影响的已有预约直接消费者接线。
首轮主要差异:Admin先创建客户排车再安排共享车次,审核进入旧车次详情;列表缺派送中、派送完成阶段。首轮排车详情为连续分区,首批现已改为独立页面四个彩色图标页签,真实数据对象仍待统一接入。PDA仍以 tripNo/tripRecordVersion/tripDispatchCount 执行旧多排车整车发车;目标语义已按正式契约确定,实际请求需等待公开提供者补全后原子替换,不用骨架冒充全链完成。
本文行号绑定本轮读取的工作区文件;其他任务后续修改可能移动行号,实施时用同列符号重新定位。
证据与优先级
| 编号 | 证据 | 使用方式 |
|---|---|---|
| P | C:/Users/BY-OY/Documents/WXWork/1688854456873012/Cache/File/2026-10/悦/悦/新版.html;SHA-256 844B6A602FBDD7382EFCF3C71A0F67018F5481C5B3189F3A6997CDF274A643C4 |
仅定向读取 page-outbound-vehicle、page-outbound-vehicle-detail 及其关联弹框、函数。下文 P:行号 均指此文件。 |
| S1 | C:/Users/BY-OY/AppData/Local/Temp/codex-clipboard-d961dfb7-bc3d-4d7b-95ac-6045d05ca279.png;SHA-256 C2567DABA3DFE91345CDBA043F5DEB50E1496821218BA8CAE46AEF2BEE5D4DE5 |
已用 view_image 核对:车辆信息、排车信息、单据信息、关联订单明细四块;字段和表列依据。截图截到了表格前部,不推断截断区域的行数或数据。 |
| S2 | C:/Users/BY-OY/AppData/Local/Temp/codex-clipboard-cb9010b0-8ce8-43e5-b40f-70f4a4d13150.png;SHA-256 72FC5CA97D8BA7FA717C201EDA135DAE18C2AE2608088C49E531F1D861D144AD |
已用 view_image 核对现有横向彩色图标、激活底色及下划线。八个旧车次页签仅作样式参考,不作为本批详情内容。 |
| C | 本批统一作业契约第一、二、三、六节 | 一单一车、五阶段、两种建单、临时外配、PDA 核平、四页签及附加能力保留优先于原型旧行为。 |
| V | docs/Admin-Client前端原型还原验收规则.md;docs/Admin高密度界面规范.md 的样式维护边界和新模块接入规则 |
按逐操作判断承载方式;采用公共密度、白底紧凑字段、原有字号与页签,不照搬灰卡。真实页面待人工在 1920×1080、100% 缩放下截图确认。 |
原型存在必须由 C 覆盖的行为:P:18656 completeOutboundVehicleLoading 同时写装车完成时间和 depart,不可复制;P:18744–18746 完成页从 vehicleBusinessRecords 取自营记录并有演示值拼接,必须改为排车自身的服务端正常签收汇总;P:18840 saveBol 一次只生成一张演示派送单,不满足按客户+目的仓拆分;P:18960 saveVehicleEdit 禁止无订单保存,与本批允许空单冲突;原型手工车辆状态、浏览器时间和示例附件均不能成为业务事实。原型派送异常入口 P:18791–18807 不在本批扩展线上闭环。
Admin 逐操作矩阵
以下实现路径均相对 apps/admin-web/src/。原型尺寸作为业务承载依据,密度及公共样式沿 C/V;没有明确原型的新增行为列为总控冻结项,不自行选抽屉或增加页面。
| 页面/操作 | 原型承载方式、尺寸与依据 | 当前实现与差异 | 本批结论与所需后端事实 |
|---|---|---|---|
| 排车列表/装车前 | P:4489–4501 独立列表,操作首列;P:4492–4493 主阶段+车辆信息/调度审核/理货员审核三个子区,switchOutboundVehicleTab/BeforeTab 在 P:18605–18606 |
overseas-warehouse/pages/DispatchesView.vue:54–79, 688–708 有阶段和审核子区,但额外“全部/已取消”,默认全部;子区只改变展示列,未传审核子阶段;审核和资源依赖 workflow.tripNo |
五阶段作为主流程,装车前保留三个审核子区;“全部/取消”如何作为辅助筛选由总控冻结,不冒充第六阶段。需分页支持阶段、审核子阶段及总数;每行返回审核事实、车辆资源和独立动作资格,不在当前页做过滤后冒充总数。 |
| 列表/装车中 | P:18655, 18706–18707, 18757–18760 同列表阶段、查看及管理资料;装车前理货通过转入装车中 P:18643 |
现有 LOADING 筛选,旧流程却是调度通过后先 PDA 拣货、平台实测装载、再理货审核,顺序与 C 不同 |
理货通过后才进入装车;PDA 扫码仍是真实事实来源。行显示核平进度与阻断;不得仅改状态标签放行。需服务端阶段、审核顺序、核平进度、可确认装车完成资格。 |
| 列表/装车后 | P:4492, 18655–18656, 18750–18753 同列表阶段,实际装车完成时间、管理资料 |
现有 AFTER_LOADING 依赖旧车次投影;DispatchesView.vue:595, 609–679 按 canTransfer 执行转派送,没有独立装车完成命令或后台发车动作 |
装车完成进入装车后;在此安排派送,完成后才能后台或 PDA 发车。需 loadedAt 类真实时间、安排派送进度及资格;不得将装车时间当发车时间。字段名待共同冻结。 |
| 列表/派送中 | P:18739 动态插入派送中页签,P:18681–18683 轨迹;getOutboundVehicleLoadStage 在 P:18655 |
DispatchQuery.stage 和列表枚举均没有派送中;现有 DEPARTED 只是排车执行状态,不足以代表五阶段 |
新增服务端阶段筛选,读取真实发车时间、各派送单状态及异常提示。轨迹与异常功能不因原型存在而扩大本批。需全部派送单关联及状态汇总,不以某一单签收结束整车。 |
| 列表/派送完成 | P:18738, 18741–18747 动态完成页签(原文“配送完成”) |
当前没有对应阶段;原型从另一业务记录取数据、显示值也有不一致 | 统一文案“派送完成”。只读服务端全部正常签收的汇总,部分签收/拒收/退回不自动完成;不增加人工“标记完成”按钮,不释放车辆/司机资源。 |
| 新建/先选货建单 | P:4491 新建排车按钮;关联预排生成 P:18575–18582;现有智能预排的独立原型尺寸不在本次指定两页中确定 |
SmartDispatchDialog.vue:322–419, 499 当前为宽 min(1800px,100vw-40px) 居中智能排车弹框,从 InboundOrdersView.vue:17,249 进入;非空装车容器分组原子提交,换标走整单专用提交;排车列表只有“安排车次” |
保留先选同起运仓可排来源/托盘建单,列表需有入口。新建入口如何复用现有宽弹框由总控冻结;不以 1120px 编辑框推定大型预排工作区尺寸。需创建直接产生一张整车单,显式多容器时返回逐组整车结果;跨客户货物保留归属,无需用户再安排共享车次。 |
| 新建/先建空单 | P:4491 仅按钮,无空单表单和处理函数;P:18960 反而禁止空关联订单 |
当前 SmartDispatchDialog.vue:336–339,674 禁止无托盘,TripPreparationDialog.vue:50–56 也必须已有排车及主档资源 |
C 明确允许,需新增空单创建模式;承载建议复用“维护车辆信息”的居中表单,精确字段和按钮由总控冻结,不伪造货物。需独立空单创建请求、起运仓和返回业务号/版本;空单可保存但不可审核进入作业/装车/派送/发车的确切门禁由后端返回。 |
| 编辑/维护车辆及预约信息 | P:12414–12446 居中宽表单,最大1120px、96vw;三列规则 P:12380–12389,页头、正文滚动、固定底部;P:18858–18875 editVehicle,P:18942 saveVehicleEdit |
DispatchesView.vue:446–465,505–529,718 居中900px三列;仅自由文本车牌/司机/电话/车队和时间预约,无主档切换、附件、加货;请求无版本和幂等;departAt 可编辑 |
本轮沿1120px维护弹框核对,不恢复原型手改状态/发车时间。计划时间和实际时间必须明确区分。需最新整车版本、编辑资格、资源模式、预约字段、备注;货物/关键资源变化后旧审核失效事实由服务端返回。 |
| 车辆/司机主档选择 | 指定两页编辑原型只有手填 P:12424–12426;现有 TripPreparationDialog.vue:38–44,77–80 提供聚焦远程主档候选 |
现有选择器位于“安排车次”,不是排车维护;车型预排选项 SmartDispatchDialog.vue:677 只是360px车型选择,不是真实车辆档案 |
C 明确支持主档。复用已公开候选能力、按需搜索,不在列表逐行查资源;容量/占用/证照由后端复核。需候选权限、主档ID及显示快照、允许选择状态、容量/证照阻断和提醒;保持长ID字符串。 |
| 车辆/司机临时外配 | P:12424–12426 直接填车牌/车队/司机/电话 |
排车自由文本存在,但主档车次安排仍强制 vehicleId/driverId,无法闭环 | 明确主档与临时外配模式;临时模式不创建主档、不传伪造关联,不能靠前端把文本填回一个任意ID。需资源来源枚举、临时快照、服务端完整性/占用校验及模式切换时清除旧关联规则。 |
| 加货 | P:12438–12441 维护弹框的关联订单页签;P:12451–12457 居中980px候选弹框,openOutboundVehicleOrderSelect/confirmOutboundVehicleOrderSelection 在 P:18921,18935 |
现有编辑只能移除,API 没有加货命令;智能预排是新单,不可拿新建接口冒充已存在单加货 | 保留维护弹框内关联货物入口,候选居中980px;需同起运仓跨客户可排候选、来源锁/版本、追加及去重、返回整车新版、变更后审核重置。后端决定变更开放阶段与在途阻断,前端不自行放开。 |
| 移除货物 | P:12441,18917–18919 关联订单删除为草稿移除,无明确确认 |
DispatchesView.vue:530–559,718 居中危险确认后按真实明细ID移除,刷新快照与路线 |
保留确认、服务端 canRemovePallet 和失败上下文,不能照搬浏览器数组删除。需版本、幂等和原子返回;换标全托/同托来源/批次分配不能在前端合并或丢失。 |
| 调度审核/通过 | P:12436 居中760px、95vw、88vh审核弹框;P:18617–18627 显示车辆、预约和附件;P:18644 通过后进入理货员审核 |
DispatchesView.vue:581–607 跳车次;TripDetailView.vue:135–149 通过直接发请求,驳回另开简单prompt,未展示同一审核弹框 |
在本批排车流程内760px审核弹框承载,显示整车资源/货物摘要/附件、审核意见;通过意见可选,不加虚构审核清单。需调度独立资格、当前审核事实、版本和幂等请求、通过后最新单据。 |
| 调度审核/驳回、原因查看与重提 | P:12436–12437 审核与被驳回详情两个760px居中弹框;P:18629–18645 驳回必填,回维护 |
当前审核依赖车次,列表可显示workflow原因,但没有原型被驳回详情与原位重提 | 驳回理由保留;维护后显式按新版本重提,不把保存自动当审核通过;需审核阶段/轮次、原因、时间、已失效事实和重提动作资格。驳回后的精确流转由共同契约冻结。 |
| 理货员审核/通过 | 与调度复用 P:12436,18622,18643,标题为理货员审核,通过后装车中 |
旧车次 reviewTripLoading 在确认实载后执行;旧指引要求理货后才能发车,未把它作为开始装车前置 |
按 C 移到装车前,独立权限及动作资格;通过后允许PDA拣货并进入装车中,不能用旧 canPick 仅调度通过的规则。需两审核序列事实和剩余阻断。 |
| 理货员审核/驳回、重提 | 同 P:18640–18645;驳回原因必填并回维护 |
现有车次prompt仅版本/结论/原因,无幂等及新顺序 | 在审核弹框内驳回;按服务端重提状态刷新,不能本地保留旧调度结论继续装车。需版本/轮次/事实失效及已开始PDA作业后的服务端禁止条件。 |
| 装车完成/后台 | P:18656 completeOutboundVehicleLoading 有直接修改模型函数,未找到本页对应完整确认承载;它错误同时写发车时间 |
旧 TripLoadingPanel.vue:62–82 是实测容量确认,不是统一整车装车完成;Admin排车无该动作 |
C第八节已明确确认装车弹框接入既有实载核对,有依据自动带出、缺项确认;必须PDA真实核平,不补录拣货数量,不新增第五页签。消费实际骨架LoadingComplete及其公开实载读取DTO后实施。 |
| 装车完成/PDA | 指定Admin原型没有PDA承载;C 为行为依据 | dispatch.vue:70,182–185 只有“完成排车拣货”并调用 /complete,仅提交幂等键 |
已按第九节及实际骨架明确:最后扫码仅形成pickingReconciled,双端使用loading-complete独立确认装车,旧complete协议直接替换。PDA核平后、后台先确认、PDA重入应显示服务端已装车事实,不重复扣货。 |
| 安排派送/费用 | P:28480–28570 modal-bol 居中1080px,三列派送字段、费用和货物表;P:18808–18850 打开和保存 |
现有1120px三列 AppDialog,DispatchesView.vue:466–503 打开后各一次读取运费和覆盖,609–679 提交整单一个 fees[];返回deliveries按目的仓,缺客户维度 |
名称及行为为装车后“安排派送”;用共同后端预览按客户+目的仓逐组核对派送资料、原费用覆盖、新增费用。建议沿现有宽版模态框容纳分组,宽度1080/1120差异由总控冻结;不得前端平均分费、复制整车费用到每组或先发车后补派送。需分组版本/hash、客户显示、货物来源、币种、覆盖明细、新费用及全组安排完成事实。 |
| 实际发车/后台 | 指定两页没有明确后台发车确认表单,C明确新增两端能力 | 排车无按钮;旧 TripDetailView.vue 和AGENTS明确PDA发车,需随本批收敛 |
建议小型居中确认,展示车牌、司机、排车号和全组派送就绪,待总控冻结承载;必须独立于装车完成,消费服务端 canDepart 类能力。需统一版本、幂等、操作时间、真实发车后状态及两端重复结果。 |
| 实际发车/PDA | C;现有设备页作为直接消费依据 | dispatch.vue:75–81,187–195 显示“车次+共N张排车”,验证 IN_TRANSIT + tripNo + dispatches包含当前单 后再GET任务释放键 |
改为“一张排车单整车发车”;不能继续强迫用户理解多个客户排车。等待后端冻结业务号和响应模型,再校验同一整车及真实阶段,保留未知结果恢复,不伪造 DEPARTED。 |
| 附件上传/预览 | P:12430 司机照片、车辆图片、驾驶证;P:18882–18891 居中900px图片预览/非图片下载;P:18763–18790 管理资料居中960px,图片图库和PDF文件 |
本批排车维护无附件API;旧BOL DispatchesView.vue:407–423 已用鉴权Blob新标签PDF;PDA交接状态为只读独立组件 |
审核与维护需要真实三类附件及按需鉴权预览,图片900px模态、PDF沿新标签预览;具体File提供者触点由总控分配。装车照片、BOL司机签收等管理资料角色/必填不由原型5张写死规则自动引入。需文件ID、角色、名称、媒体类型、权限、上传后绑定/替换语义及鉴权下载;列表不逐行下载附件。 |
| BOL读取 | P:18648–18653 调度通过后下载演示HTML |
现有正式PDF读取路径,getDispatchBolPdf dispatches.ts:203–207,有弹窗拦截和失败反馈 |
保留真实PDF,不改回原型HTML。新整车BOL应覆盖多客户货物且正确隔离;调度审核后可读的准确资格需返回,不能以按钮永远显示推定允许。 |
| 独立四页签详情 | P:9448–9456,21711–21732,21751–21754 独立页面,业务号、状态、返回、三字段块+关联表;S1/C改为四页签,S2仅样式 |
DispatchDetailView.vue:79–135,153–165 独立路由已存在;同页分区,无页签;单据信息用“关联订单”,更新时间/备注恒“—”;订单表集装箱恒“—”,按 orderRefs 将同托重量体积复制给多个订单 |
保持正式路由及返回上下文,四页签细则见下表;需服务端真实单据信息和订单级准确汇总。不得将同托整托重量重复归到每个订单,不以ID、样例或零替代未知。 |
| 取消/删除 | 指定两页未定义删除/停用;C只要求保留附加能力、聚焦主流程 | DispatchesView.vue:561–579 已有取消危险确认和托盘释放提示,没有删除单据 |
保留现有取消能力、独立权限与服务端资格,配合新版版本/幂等;不新增删除/停用。新状态下的取消与资源释放边界交后端和总控冻结,不以“测试可丢弃”授权删除。 |
四页签内容与数据缺口
页头保留排车单号、服务端阶段/状态、返回原入口及获准的主要操作;四页签顺序固定如下。采用 el-tabs.density-element-tabs.density-contained-tabs、density-tab-icon,页面不重定义公共字号/高度/底色/下划线。第一项车辆图标沿S2的 🚚,其余复用现有语义图标:📋、📝、📦(见 DeliveryOrderDetailView.vue:75,92,118);具体映射是本轮建议,交总控冻结,不新增图标系统。
| 页签(建议图标) | 固定字段/列顺序 | 现有来源与缺口 | 消费要求 |
|---|---|---|---|
车辆信息 🚚 |
车牌号、司机、联系电话、拖车公司名称、车辆状态 | DispatchSummaryDto.vehiclePlate/driverName/driverPhone/carrierName/status;当前 status 是排车状态,是否作为车辆显示状态须明确 |
返回主档或临时外配的真实显示快照和明确车辆状态文案;紧凑白底4–6组短字段,长车队名跨列。不拿内部主档ID或“待分配”示例代替缺失值。 |
排车信息 📋 |
路线、发车时间、预计到达时间、FBA预约 | 当前原生dispatchInfo提供路线、实际发车和逐批FBA预约;车辆预约字段及关联已按用户最新裁定移除 | 路线由货物目的地真实事实生成,不手输演示“30托盘”;发车只显示实际时间。多目的仓FBA预约按真实逐目的仓/批次事实展示,不能显示一个仓已约即全车已约。 |
单据信息 📝 |
排车单号、关联派送单、创建时间、更新时间、备注 | DispatchDetailView.vue:93–101 使用orderNos且缺updatedAt/remark;现有 TransferDeliveryItem 不含客户归属,详情没有deliveries |
返回所有真实派送业务号、对应客户+目的仓及状态供关联;多单号完整换行/明确链接,读取目标仍受各自权限;创建/更新时间与备注从服务端返回。关联订单不能代替关联派送单。 |
关联订单明细 📦 |
订单号、重量kg、托数、目的FBA仓、体积m³、集装箱号 | DispatchItemDto 无客户/containerNo,只有托级weight/volume及orderRefs;现有多订单循环重复累加整托载荷,containerNo恒空;bolLines有containerNo但不是订单级汇总映射 |
后端返回有客户归属的订单汇总行或足以准确归属的明细;同托多订单的重量/体积不可由浏览器猜分;未知显示“—”。只读通栏表,不为套规范新增操作列;订单业务号可完整展示,客户身份保留在模型,是否增显示列由总控决定,不自行改变S1六列。 |
仅以上四页签。现有 TripDetailView.vue:201 的分配与货物、外接预订、计划容量、实际装载、结案与任务结束、在途交接、直接成本、历史八项不移入新详情;其代码和对应后端能力先保留。不得把“派送完成”等同“资源任务结束”,不得因隐藏页签自动释放资源。既有路线地图若继续入口,放在排车信息的明确操作位置,不新增路线页签,需总控冻结最小接线。
后端消费者要求与实际骨架接入
首轮已读取两后端准备稿:排车列表接口与数据设计(主流程,首读快照SHA-256 F4D8AE6D46DEC5A1AC36BDE6926DD495F7E3180FCE5691AE36BA3BDA386156D0)与排车列表派送费用接口设计(派送费用,首读快照SHA-256 9BEE01228045D8C7A54BB3D1D4202ED52B6B550C36212EBA049BFB7DE4E536B5)。两稿随后按正式契约收敛;实施以共同契约第八至十节及提供者实际Java公开DTO为准,首读哈希仅用于追溯差异,不作为最新接口冻结值。以下消费者要求保持为接入核对清单,已确定部分见下一节。
| 范围 | 主流程后端必须明确 | 派送与费用后端必须明确 |
|---|---|---|
| 一单一车及身份 | 唯一用户可见排车业务号;旧tripNo与新排车是否仍有技术关联、唯一关系及各直接消费者更新方式;不保留用户必须多单绑定车次的流程 | 派送关联回同一整车业务号,各组保留客户及目的仓归属;同仓、同目的仓不同客户不能合并收费 |
| 详情/分页投影 | 五阶段、审核子阶段、业务状态分开;列表分页一次取动作摘要、审核、资源、货物统计;详情真实时间、备注、订单级载荷、集装箱、关联派送;动作资格缺失fail-closed | 每组计划/派送号、客户业务显示、目的仓、状态、费用覆盖摘要、正常签收与异常事实;不要求前端逐票查状态拼汇总 |
| 命令及版本 | 创建空单/选货建单、加减货、资源维护、提交/重提、两审核、完成装车、实际发车的精确方法/路径/请求/响应;所有必要写动作稳定幂等、版本0有效;PDA拣货是否需单/明细/库存位置版本 | 安排派送预览和原子确认;版本/hash包含全部分组、来源、货物及收费基线;返回全组结果与整车安排完成事实,不部分成功后由浏览器补写 |
| PDA真实核平 | 服务端返回计划/实拣/未拣、pickingReconciled及允许完成装车资格;旧complete替换为loading-complete;后台不能提交假的已拣数补齐,空单不可核平;两审核顺序服务端保证 | 装车后才可安排;未安排全组不可发车;同一拣货事实进入后续出库不得再拣一次、再扣一次或按派送拆分重复扣减 |
| 资源和附加能力 | 主档与临时外配请求及切换、容量/占用/证照规则、已保留附加能力对版本/资格的影响;不让旧实际装载/理货入口绕过新阶段顺序 | 外接约定运费仍是冻结事实;直接成本与客户应收分开,不因本批未展示而删除或自动收费 |
| 费用组归属 | 明细customer与source/destination/batch关系稳定,服务端跨客户权限;PDA只取Token仓,不收客户/仓范围入参 | 逐组原覆盖项、来源ID/版本/hash、金额币种、剩余新增费用、外接quote;fullyCoveredServices须按本组判断,不能用整车全覆盖隐去另一客户未覆盖费;不让前端平均分摊整车费 |
| 完成/异常 | 发车后的整车阶段及最终正常完成事实投影;资源释放继续独立;审核失效后可操作资格同步 | 全部正常签收才完成;部分、拒收、退回、取消、空组不得误算正常完成。返回明确数量/异常摘要,不以 remaining=0 或任意terminal判断完成 |
| 并发/未知结果 | 同命令同键同载荷重放、同键改载荷拒绝、版本冲突/业务失败/权限失败与未知网络结果的区分;返回业务号、最新版本、动作证据;可按原键核对或安全重放,不要求浏览器生成新键猜测 | 与完成装车/发车共用整车锁与一致性;费用基线变化冲突后重新预览,未知安排结果可原键恢复,不能生成第二批派送/费用 |
| 附件/权限 | 附件元数据/绑定与审核关系、专属下载;前端既有dispatch/trip写权限如何收敛,list包含详情只读,命令权限独立;File触点交总控分配 | 客户只可读自己的货物、派送和费用;整车跨客户平台投影不能直接复用给客户。共同权限、SQL和OpenAPI均由总控集成 |
现有Admin精确API基线:api/dispatches.ts:188–286 的平台排车列表/详情/更新/取消/移除、候选、预排和草稿;293–345 的转派送、约定运费和费用覆盖。现有PDA精确基线:src/api/fulfillment.js:3,86–111 的 /pda/v1/last-leg/dispatches 列表、详情、逐明细pick、complete、depart。这里只记录现状,目标是否复用或删除路径由共同接口冻结决定;不增加旧新别名或回退链。
两后端准备稿交叉核对与正式收敛
首轮记录的两稿差异已由共同契约第七至九节裁定,以下为现行执行基线,不再要求用户重复确认。Java公共骨架现位于 lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/port/;这里只读取实际DTO,不修改Java、不依据草稿猜API。
| 事项 | 正式结论及实际骨架 | 前端执行要求 |
|---|---|---|
| 整车与四页签 | 一张dispatch自动一对一Fleet资源记录;DispatchViews.Detail为vehicleInfo/dispatchInfo/documents/orderDetails;每客户一出库、每客户目的仓一派送 |
dispatchNo为唯一主操作业务号;完整outbounds/deliveries数组,不保留单个outboundNo别名。附加能力代码保留,不移入四页签。 |
| 状态、阶段与版本 | DispatchTypes.Status=ACTIVE/CANCELLED,Stage为五项;ReviewState和ReviewStatus独立;所有已有单写请求统一recordVersion,0合法 |
status不再混用拣货/车次状态,取消不是第六阶段;列表按真实Query及Statistics筛选统计,不按当前页长度计算。 |
| 临时外配证据 | 第八节已确认:空单先保存,审核前补齐本趟容量、司机证照和预计任务结束,调度核实;实际Vehicle/Driver分别有mode,DriverEvidence含证照号、到期、fileIds、expectedTaskEndAt | 两资源分别可MASTER/EXTERNAL;不创建主档、不伪造ID,不要求用户再次确认规则。附件提供者和公开候选读取仍须真实DTO。 |
| 实载与零扫码变更 | 确认装车弹框接入真实实载;LoadingComplete要求manifestHash/measurements。RETURN_TO_REVIEW保留原号,仅零扫码可退回重审 |
核平与装车确认分开,缺项只确认真实重量/体积/卸货点,不补拣货数量;未读到实载公开读取DTO前不补造manifestHash。 |
| 命令与业务摘要 | 全局唯一idempotencyKey,原主体/动作/单号/原版本/载荷绑定commandHash;安排单另有arrangementBusinessHash。CommandResult含action/key/status/stage/effect/result/replayed/alreadyArranged |
原键不换主体或载荷;新有权限主体以新键当前版本引用原安排,不再收费建单;校验同单同动作同键结果后GET当前事实,不用旧结果覆盖新阶段。 |
| 库存与发车 | 库存SHIP已在真实扫码执行;安排/装车/发车均不再扣一次。发车只推进来源订单、客户出库及派送计数和事实 | 只消费排车公共版本和真实动作结果;PDA不再以trip版本和多客户子排车成员判断发车,不发起第二遍出库拣货。 |
| 锁序 | 根trip→涉及的车辆→司机/资源→dispatch;扫码来源→库存且不锁派送;安排/发车先全部客户出库派送后来源费用;签收delivery→来源→持久信号 | 超时保留原键与载荷,不以换键自动重试掩盖死锁;不把列表资格快照当写入复验结果。后端对尚未核实的提供者锁点继续核对,前端不声称全域无死锁。 |
| 正常完成 | 签收提交后可靠持久信号;派送保存和数据访问,主流程有界消费/退避/重扫;父锁下读取已提交事实,阶段CAS与信号确认同事务 | 页面只显示已提交真实stage;签收成功不直接本地改DELIVERED,刷新读取最终汇总;部分/退回/拒收不当正常完成,资源结束仍独立。 |
| 组合安排 | DispatchDeliveryModels.ArrangementPreview含groups/arrange/cargoHash/loadingCompletionHash/arrangement;ArrangeDelivery公开recordVersion,逐组费用与证据 |
打开弹框一次组合GET;不再两辅助GET拼快照。严格组级覆盖,不跨客户免单、不平均分费。缺失字段交提供者补,不能客户端猜hash。 |
| Client与预约边界 | 第八节已确认平台安排这类整车派送;本任务取得Client直接消费者移除权。日历新增预约已单列排除 | Client旧创建页/API/按钮移除,读及合法资料保留;共享routes/权限由总控已接管。已有WorkDispatchForm/WorkExistingDispatchForm/WorkSharedTripForm仅列影响,未取得精确移交前不写。 |
接入前仍缺的公开消费事实(不是要求用户重新裁定业务):①确认装车前的既有实载读取端点及DTO(manifestHash、真实测量行、卸货点);②候选sourceVersion和草稿转换请求/结果的实际对外DTO;③新Detail与既有预约三表单使用的appointmentBatches、仓库和workflow差异及唯一写者;④临时证据上传/读取的真实File契约。主流程只产出port骨架不等于上述Controller/DTO及消费者均已完成。请求接入按实际提供者完成快照推进。
PDA接口差异与恢复要求
路径相对 apps/pda-overseas-uniapp/。
| 问题 | 源码证据/当前行为 | 目标及接口差异 |
|---|---|---|
| tripNo/tripRecordVersion | src/api/fulfillment.js:27–29,107–111 将车次版本转字符串,接受0;depart请求用trip版本,不是排车版本 |
冻结唯一整车版本及业务身份;不把dispatch版本误当trip版本。若模型移除trip相关字段,直接同步API/页面/草稿/测试,不做双协议解析。若仍保留技术关联,不在UI要求另一车次操作。 |
| 多排车整车响应 | dispatch.vue:75,189–194 显示共N张排车,按trip与dispatches成员验证整车 IN_TRANSIT,随后GET排车期待DEPARTED |
新单本身即整车,改验新响应的同一业务号、真实阶段和动作事实;不得保留“多张客户排车”UI或把IN_TRANSIT直接灌进旧单status。 |
| 真实拣货与两审核 | dispatch.vue:120–123 拣货和complete均依赖canPick;提示“调度审核后拣货”;明细以scheduled/picked、库位、退货箱作业 |
服务端canPick须包含调度+理货通过及当前版本;本地数量只做交互校验,不替代核平。保留真实托盘业务码、退货箱唛、同托多来源选择;禁止目的仓码代替实物码。需可信进度、空单阻断、作业失效事实。 |
| 完成拣货/装车/发车 | dispatch.vue:102,118,182–185 多个完成状态别名,complete仅幂等;187–195 发车独立但缺装车后派送安排的明确事实显示 |
冻结唯一状态集与complete语义。装车完成、派送已安排、发车三事实分明;新增资格严格消费boolean true;后台完成后PDA刷新直接显示事实,不能再次complete。 |
| 拣货未知结果 | submitPick:174–179 键按单/明细/position或carton/数量生成,POST后GET成功才释放 |
保留稳定请求键与原载荷;POST超时或GET失败时禁止改数量再重放旧键。若业务GET已反映拣货但没有动作证据,不能仅用“数量已增”判定原请求是谁执行;需原键回放/查询确定结果,避免滞留旧键误吞下一次相同数量拣货。 |
| 完成/发车未知结果 | complete键只含dispatchNo;depart键含tripNo和版本;store只保存signature→key,不存完整请求,刷新取得新版本会生成另一signature | 必须保存操作类型、单号、原版本/hash、原载荷、幂等键及未知结果标记;未知时先查服务端/重试原请求。不得因为刷新版本变大而生成新键重发旧动作。已证实成功后清理原pending;明确业务失败后才允许按新快照重新决策。 |
| Admin与PDA竞争 | 当前只有本页busy阻止双击,不能协调跨端;PDA pick/complete请求缺统一recordVersion | 两端同一服务端规则。并发确认只一次推进,失败方刷新读取已完成事实,不将合法重复误报成新成功;货物/资源变更造成旧审核和旧核平资格失效时服务端拒绝旧请求。 |
| GET迟到与切任务 | openTask:148–150 一次读取后覆盖current;run:198 全局busy/loading防重复;没有独立目标请求序列 |
新恢复流程需要请求代次/单号校验,迟到旧详情不能覆盖当前任务、当前版本或pending键;成功提示属于确认过的原操作单,不依据已切换current。 |
| 草稿隔离与进入方式 | stores/fulfillment.js:30–45 按操作员+绑定仓隔离;dispatch.vue:125–152 默认任务列表,仅 resume=1 显式恢复;closeTask不清pending |
保留隔离、上次作业标记和显式恢复;草稿是交互状态,不是库存/核平事实。退出详情可保留未决操作,重入优先核对,不跨单重放;权限撤回、主体/仓变化继续由会话层清理。 |
| 出库和附加能力 | dispatch.vue:41 发车后挂载 DispatchHandoverStatus.vue;其只读get及版本watch;出库扫码可显式跳转排车 |
保留组件实现;新阶段的挂载条件和trip标识映射交总控冻结,不把交接新增为详情页签。outbound共用API/store域保持完整,整车安排派送后出库扫码必须定位同一新排车,不增加重复拣货。 |
直接消费者及受保护接线
| 触点 | 已核实引用/最小调整 | 写入边界 |
|---|---|---|
| Admin排车主链 | DispatchesView.vue、DispatchDetailView.vue、SmartDispatchDialog.vue、api/dispatches.ts、types.ts:103、直接测试;InboundOrdersView.vue:17,249 当前智能排车入口 |
本轮只读;接口冻结解锁后再按精确文件实施。 |
| 旧车次强制步骤 | DispatchesView.vue:41–47,77–79,585–603,689;TripPreparationDialog.vue:46–83;api/trips.ts:81–87,122–125;tripTypes.ts:35–56;TripDetailView.vue:135–149,201 |
本批主流程不再跳转强制安排/审核车次。旧附加能力代码保留;若技术模型改变这些API,先由总控裁定最小接线,不能删除八页签能力或只改标题假装完成。 |
| 预约按批排货 | appointment-calendar/WorkDispatchForm.vue:5–6,88–102,117–123 提交准确batchAllocations后再安排车次;成功跳旧trip详情 |
保留batch/source/destination/packageCount事实;新创建直接返回整车后跳排车详情,去掉第二次安排步骤的接线由总控协调。当前预约文件有他人在途修改,本任务不覆盖。 |
| 预约已有排车 | WorkExistingDispatchForm.vue:19–26,34,41–42 校验批次后用TripPreparationDialog,“尚未关联车次”与旧trip跳转 |
保留批次一致性校验及外部跳转关闭事项弹窗语义;改用新整车资格和详情目标,交总控/当前写者处理。 |
| 预约跨客户共车 | WorkSharedTripForm.vue:23–36,42–48 明确要求各客户分别备排车,再两单共车 |
与一单一车冲突,不能继续作为本批主入口。最小建议改为同一排车加同仓货物,保持已有批次分配、前置货物状态与返回上下文;交总控协调,不自行删表单。 |
| 到港/排车日历 | tripCalendar.ts:36–38,56–80 读取fleet/trips/calendar,按tripNo去重,sourcePath指向旧trip;AppointmentCalendarView.vue:64–68 使用trip:list权限;AppointmentCalendarPanel.vue:77 只按sourcePath打开 |
后端冻结投影中的排车业务号与整车唯一关系后,最小更新去重键、标题、深链和权限;保留起运仓当地计划/实际发车时间语义、取消与缺资料投影,不改变其他日历业务。只读交总控。 |
| 共享装配/密度 | routes.ts:38–44 已有排车列表及详情;导航、根路由、permissions、src/styles/adminDensity.test.ts |
根路由、导航、权限与公共密度由总控协调;adminDensity.test.ts已有他人未提交修改,不接管。详情只选择现有公共类,若需更新显式消费者清单由总控安排唯一写者。 |
| PDA直接链 | pages/dispatch/dispatch.vue、api/fulfillment.js、stores/fulfillment.js、utils/dispatch-error.js、components/DispatchHandoverStatus.vue、出库扫码恢复入口、直接测试 |
后续解锁前明确必要新增写权;共用fulfillment文件的outbound/cargoDiscard能力不得丢失,不扩大其他业务整页。 |
2026-10-19准备时 git status --short:Admin存在预约日历、工作事项、schedule相关文件、self-operated/pages/OverviewView* 及 styles/adminDensity.test.ts 的其他未提交修改;PDA未报告未提交修改。本轮没有覆盖、暂存、回退或格式化它们。
既有预约三表单的精确替换清单(只读交总控)
本表仅为整车改造造成的直接消费者接线,不涉及日历新增预约。以下路径相对 apps/admin-web/src/modules/appointment-calendar/,三个文件及其测试本任务均未写入。
| 文件/符号 | 现有字段/请求或分支 | 最小替换及须由提供者补全的真实事实 |
|---|---|---|
WorkDispatchForm.vue imports、result、pending、save |
DispatchSummaryDto;旧drafts/pre-arrange返回response[0].dispatch;pending仅token/containerId/rows;创建后再TripPreparationDialog |
改成正式草稿转换命令结果,验证dispatchNo/action/idempotencyKey再GET新Detail;冻结原key/recordVersion/完整cargo和batchAllocations后重试。实际草稿结果DTO目前未公开,不能假定CommandResult数组外壳;仍保留容器对应和批次来源完整性校验。 |
同文件 load/select/save |
单客户自动全选条件、选择时不同customer拒绝、save用new Set(customerId).size!==1拒绝;按钮“创建本客户排车单” |
删除这三处单客户限制,改为同一起运仓和服务端来源资格;仍保留批次来源、allocations customer断言、托位限制及实物去重。BatchDispatchCandidate需返回真实warehouseId/sourceVersion,缺失不凭相同批次推仓;文案改为创建整车排车单。 |
| 同文件 result模板、tripSaved | result.overseasWarehouseId/Name、TripPreparationDialog、WorkSharedTripForm和旧trip详情路径 |
创建已自动关联Fleet,删后续“继续安排本批车辆/两单共车”步骤和对应import/ref;直接沿dispatchNo打开正式排车详情并保留emit external/update及事项弹窗关闭。剩余可排实物继续使用既有批次读取,不触及新增预约。 |
WorkExistingDispatchForm.vue load.matches |
row.id拼DISPATCH:${row.id}、row.appointmentBatches做batchKey/customerId核对 |
必须保留真实批次+客户关联验证。实际新Detail尚不含该关联;由主后端公开权威BatchReference及DISPATCH批次关系后改读,不以orderDetails客户清单、展示号或空数组替代;不继续从客户端内部ID拼权威批次键。 |
| 同文件 prepare/writable、selected、saved、模板 | PENDING_DEPARTURE、!workflow、overseasWarehouseId、顶层packageCount、TripPreparationDialog、旧trip:list/edit权限 |
新单status=ACTIVE、stage五项,操作资格读actions.EDIT/ADD_CARGO/RETURN_TO_REVIEW相应Gate;数量读counts.packageCount,资源不再另建车次。Detail需真实起运仓投影;使用正式排车详情入口办理资源/加货,移除prepare弹框与旧trip跳转,保留readonly/ready事件和批次不一致失败。 |
WorkSharedTripForm.vue prepare/saved及整段双单交互 |
输入otherNo、同时get两排车、比较旧status/workflow/overseasWarehouseId、dispatchNos=[A,B]后prepareTrip |
一单一车不能把两张整车再合为一车;移除双单共车操作及TripPreparationDialog调用。在同一dispatchNo下打开“添加同仓货物”,消费真实AddCargo(recordVersion/key/cargo/batchAllocations),或最小链接到该单加货;不得迁移另一张已排单货物或自动解锁其占用。按钮是否保留为加货由总控协调原写者,不在本任务直接改。 |
| 三文件共同权限/恢复 | 旧smart-dispatch、trip:list/edit及useWorkDraft;部分unknown键不含完整最终请求 | 创建权限收敛由总控IAM/前端权限集成;加货/资源沿排车edit及服务端Gate,不给日历读取权限追加整车写能力。保留useWorkDraft、原请求未知结果、当前批次分配与已保存预约关系,禁止结果未明就重新建单。 |
| 直接测试 | WorkDispatchForm.test.ts、WorkExistingDispatchForm.test.ts、WorkSharedTripForm.test.ts,WorkBatchContinuation.test.ts及WorkDetailPanel.test.ts中的实际引用 |
更换Mock及断言为正式整车结果/批次事实;补同仓跨客户、未决请求、批次客户不符、零扫码退回重审;原事项关闭、原单跳转、剩余实物恢复和错误后禁止重复创建回归继续保留。只读列明,写者由总控核对。 |
后续回归设计(首轮设计,按实施切片记录执行)
| 场景 | 输入/竞争方式 | 必须观察到的结果 | 拟落点 |
|---|---|---|---|
| 五阶段及子审核分页 | 切换五阶段与装车前子区,旧请求后返回;含空页、失败重试、无权限 | 服务端筛选/总数一致,旧响应丢弃;加载/空态/错误可用;动作资格缺失关闭写入;不逐行查详情 | Admin pages/DispatchesView.test.ts、api/dispatches.test.ts |
| 两种建单 | 空单保存后再加货;先选同仓两客户两目的仓;另加跨仓候选 | 两种方式均直接取得整车业务号;不要求第二次安排车次。空单不得产生核平或发车事实;跨仓由服务端拒绝,表单上下文保留 | Admin新建/加货行为测试及API精确载荷;后端对应场景由后端执行 |
| 资源模式 | 主档切临时再切回,延迟候选响应,过期证照/资源占用 | 不混传主档ID和临时快照;不建主档;警告与阻断区分;旧候选不覆盖新模式 | Admin维护组件测试、API类型检查 |
| 审核通过/驳回/重提 | 两审核各通过、驳回空理由、重提;期间加货/更换资源 | 顺序正确;驳回必填;旧审核失效;理货通过前PDA不可拣;权限只读可看但不能写 | Admin审核弹框行为、PDA canPick门禁、后端命令测试 |
| 真实拣货核平 | 未扫物、部分拣、重复扫码、错码、同托同仓不同来源、多行同palletNo、退货箱 | 只能按真实明细/实物码提交;不静默取第一行、不按目的仓码匹配;后台不能补数量绕核平;空单不算全部拣完 | PDA tests/fulfillment-workflows.test.mjs 中现有计算/方法注入harness扩充;后端核平事实验证 |
| 装车完成与发车分离 | 全部PDA核平→后台完成装车→PDA刷新;尚未安排派送时两端尝试发车 | 完成装车只进入装车后、loadedAt有值、实际departAt仍空;派送未就绪canDepart=false;PDA不重复complete | Admin动作测试、PDA页面方法行为测试 |
| 两端并发完成/发车 | Admin与PDA同版本同时确认,各种响应先后及一端409 | 服务端只推进一次;两端最终同阶段及真实时间;失败方刷新而非换新键盲试;不二次扣库存或生成派送/费用 | 双端Promise可控Mock行为;服务端并发验证不能由Mock通过代替 |
| 版本0与大版本 | 首版0、缺失、负值、非数字、精度边界;旧trip版本与单版本不同 | 0有效,错误/缺失版本关闭操作;长ID不转Number;严格只用冻结版本域,不解析旧别名回退 | PDA API请求单测、Admin类型/序列化测试 |
| POST未知与GET失败 | pick/complete/depart/安排派送:POST已执行但超时;POST成功后GET失败;关闭/重进/刷新 | 保留同一键、原载荷、原版本;按原请求安全核对后清pending;新快照不生成新键重放旧动作;相同数量下一次拣货不得被旧键吞掉 | PDA store与真实页面方法注入;Admin分组派送/动作组件延迟Mock |
| 同键载荷变化 | 未知期间修改数量/费用/资源,再点提交 | 冻结未决载荷,提示先核对原结果;不能同键改内容,也不能用新键制造重复命令 | 双端未知结果测试;服务端幂等合同 |
| 多客户费用 | 同仓客户A/B都送ONT8,另送LAX9;仅A有原派送费覆盖,含外接报价变化 | 按客户+目的仓独立组;B仍需未覆盖费;原费用不新增重复行;hash变化重取;未知重试仍同批单据 | Admin费用分组测试、后端派送/费用测试 |
| 正常完成及异常 | 三组仅两组正常签收;最后一组分别拒收/退回/取消/正常签收 | 前三种不自动派送完成;只有全部正常签收汇总完成,资源仍按原独立生命周期;不伪造退库/账务 | Admin阶段投影测试;后端正常完成事实测试 |
| 四页签与长数据 | 四页签、长排车/派送号、多单号、多订单同托、未知重量、缺集装箱 | 只有四项且顺序固定;真实字段不混用;重量体积不重复分摊;无内部ID回退、无假零;表格只读无新增操作列 | pages/DispatchDetailView.test.ts;人工1920×1080截图 |
| 附件 | 图片/PDF、403、网络失败、替换失败、关闭后迟到响应 | 鉴权按需读,业务错误不当图片;失败保留已绑定文件;关闭/卸载释放Blob、旧响应不打开已关闭预览;审核可读不等于可上传 | 新附件组件/API行为测试;人工预览 |
| 入口/返回与附加能力 | 入仓预排、预约批次、已有单、跨客户货物、日历深链、出库扫码resume、发车后交接 | 进入同一整车且来源/批次不丢;返回原上下文;默认PDA列表和显式resume保持;旧附加实现保留且不绕过新门禁 | 现有直接消费者测试,预约写者集成;PDA navigation/workbench/trip-handover测试 |
解锁实施后的最低检查按实际改动执行:Admin定向 pnpm test(上述页面/组件/API及 prototypeContract.test.ts、实际直接车次消费者),pnpm typecheck,最终全量 pnpm test 和 pnpm build;公共密度合同由总控安排;PDA运行 node --test tests/fulfillment-workflows.test.mjs tests/business-identifiers-ui.test.mjs 及实际受影响的navigation/project-contract/workbench/trip-handover测试,最终 npm test、npm run build:h5、npm run build:app。具体不重复跑未变输入;离线通过不等于真实HTTP、页面或PDA硬件通过。
首批实施结果(14:36前历史检查点)
已按共同契约第八至十节解锁,不再停在仅准备阶段。2026-10-19当前可独立集成的切片:
| 实际文件 | 变化与结果 |
|---|---|
Admin pages/DispatchDetailView.vue |
保持独立路由与返回语义,将连续四块改为仅四个Element彩色图标页签:车辆信息、排车信息、单据信息、关联订单明细;使用density-element-tabs、density-contained-tabs、density-tab-icon,删除旧分区布局样式,不写公共CSS、不改附加能力。当前数据读取仍待原子接入新DTO,不声称字段缺口已解决。 |
Admin pages/DispatchDetailView.test.ts |
增加真实Element页签顺序、激活状态、可见内容和不重复请求的行为回归。6项通过。 |
Admin layoutAcceptance.test.ts |
将已被本批四页签取代的document-section CSS断言改为公共页签及精确四页签合同;其他页面断言保留。 |
Client views/DeliveryOrderCreateView.vue |
删除旧客户直接创建这类派送的生产页面,不保留跳转别名或假成功页。 |
Client views/DeliveryOrdersView.vue |
移除创建按钮、入口事件和独立创建权限消费,保留全部本客户列表/详情/筛选。 |
Client api/deliveryOrders.ts |
移除createDeliveryOrder、DeliveryTransferPayload/Result,保留本客户分页、详情、费用读取、签收资料及鉴权二进制下载。 |
Client deliveryOrders.test.mjs |
改为平台专属安排边界,确认无客户POST、无创建页/按钮/路由/权限映射,保留客户读取隔离、签收数量、文件和负向权限回归。 |
| 总控集成,非本任务写入 | 总控已移除Client order-management/routes.ts中的orders/delivery/create整段,以及 tenant-management/contracts.ts中该创建权限的分组/映射。clientNavigation.test.mjs旧权限仅负向用例保留。 |
已执行证据:Client全量 pnpm test 601/601通过,pnpm typecheck通过,pnpm build通过;Admin pnpm typecheck和pnpm build通过。最终定向命令 pnpm test src/modules/overseas-warehouse/pages/DispatchDetailView.test.ts src/modules/overseas-warehouse/layoutAcceptance.test.ts src/modules/overseas-warehouse/pages/DispatchesView.test.ts src/modules/overseas-warehouse/pages/prototypeContract.test.ts src/modules/loading-lists/components/LoadingListsView.creation.test.ts --maxWorkers=2 为5文件66/66通过(9.62s)。首次Admin全量406文件、3386测试中3384通过、2失败:本批旧布局CSS断言(已更新且定向通过)及未改装柜创建用例5秒超时(隔离通过);pnpm test --maxWorkers=4最终406文件中397通过/9失败、3386测试中3375通过/11失败(557.59s);11项全部报5秒超时,分布为audit/CustomerAuditLogsPanel、customers/CustomersView、finance/FinanceG3G4Views三项、container-loading/GlobalSmartLoadingView、ocean-bookings/OceanBookingDetailView.release、overseas-warehouse/DispatchesView、RelabelOrdersView、warehouses/WarehousesView、warehouse-resources/pallets/PalletsView。没有放宽超时或修改这些生产页,不能声称全量通过。共享工作区其他写者仍有在途变更,上述结果绑定当时读取输入,不代表整车新接口或未来集成候选通过。真实视觉仍“待人工截图确认”,未做真实业务或PDA硬件验收。
上述为14:36前首批历史输入。后续原生DTO、五阶段和PDA接入已按第0/0.1节实际骨架推进,当前切片、验证和未关闭缺口统一见本文末“原生接口接入交付检查点”;首批Admin typecheck/build成功不代表当前集成候选通过。
本任务保持当前分支和工作区,不触及appointment-calendar、adminDensity.test.ts、自营等他人在途修改;只在自身对话报告,由总控主动读取。后续按公共提供者实际DTO和总控精确移交推进,不自行扩大日历新增预约、客户内部平台操作或附加功能整页。
本轮原生类型接入的受保护编译断点(总控接线)
2026-10-19总控14:36正式绑定13个公共port文件后,已删除旧DispatchSummaryDto、PreArrangeDispatchDraftPayload及preArrangeDraftDispatch导出,没有保留旧状态或字段别名。当前真实typecheck在下列保护中的文件报错;这些文件及测试仍未写入,本表供总控按精确写者处理。
| 文件/符号 | 真实断点与最小接线 |
|---|---|
| WorkDispatchForm.vue:imports/result/save | DispatchSummaryDto与preArrangeDraftDispatch已移除。改用CommandResult、DispatchDetail、DispatchDraft/ConvertDraft及convertDispatchDraft;后续读新详情。createDispatchDraftContainer改为一个对象{recordVersion,idempotencyKey,draftToken,capacity}返回完整Draft,容器标识为draftContainerId;lockDispatchDraftPallet改为DraftSelection(当前草稿版本、原键、容器、真实CargoSelection.sourceVersion);releaseDispatchDraft也携草稿版本/键。 |
| WorkDispatchForm.vue:load/select/save | 三处单客户限制应移除,保留逐来源batchAllocations的客户断言;同仓由服务端Candidate.warehouseId/sourceVersion及原子转换复验;不能按客户拆若干旧客户排车再共车。 |
| WorkExistingDispatchForm.vue:load.matches | getDispatch现返回DispatchDetail。appointmentBatches实际在dispatchInfo.appointmentBatches;客户逐batch的校验留在此数组,不提升到旧顶层字段。DISPATCH:${row.id}已无row.id,需原域权威批次引用校验,不重加内部ID或拼编号回退。 |
| WorkExistingDispatchForm.vue:prepare/template | 删除旧PENDING_DEPARTURE、workflow、overseasWarehouseId/Name和packageCount消费;新status ACTIVE/CANCELLED,stage五项、actions的EDIT/ADD_CARGO等Gate,数量在counts。直接打开同一dispatchNo的独立详情继续维护资源,不再调用TripPreparationDialog;起运仓如需展示,从真实ListRow按dispatchNo精确匹配获取,不从订单目的仓推导。 |
| WorkSharedTripForm.vue:prepare/template | getDispatch现返回四块详情,不存在workflow与旧仓字段。整段“两张客户排车安排同一车次”与新模型冲突,改为同一排车加同仓真实货物(AddCargo)或指向该单加货;不保留双单prepare/bind写协议。 |
| 三个同名.test.ts | Mock从旧客户Summary切换真实Detail/Page/Draft/CommandResult;缺版本拒绝、0合法、完整batch/source/货物归属、原事项关闭/原单跳转及未知请求恢复继续回归。WorkBatchContinuation/WorkDetailPanel实际受影响用例由总控一并协调。 |
上表是保护中文件的接线清单,实际原生切片已完成到下节检查点;整体typecheck尚未通过,不把局部测试通过当成集成完成。日历新增预约不在该接线范围。
原生接口接入历史检查点(2026-10-19 15:25,后续状态见文末)
本节替代前述首批检查点中的待实施状态。按总控14:36派工完成本任务独占的Admin/PDA原生接入切片;整体集成仍未通过。再次逐个核对实际13个公共Java port文件SHA-256,全部与主流程设计第0节一致(13匹配、0变化)。本任务17个生产文件候选聚合SHA-256为15931a9917bb562068eebfa7583288b41d653cbeb1819abe5dc17e74eb22239d:按完整仓库相对路径字典序,将每项“路径+LF+文件原始字节+LF”顺序输入SHA-256;清单为Admin本表13个排车生产文件、Master Data index.ts和PDA三个生产文件,测试与本文不计入。自查和验证绑定此候选。
不改Java,不保留旧DispatchSummaryDto、PENDING_DEPARTURE、旧trip版本发车、旧complete路径或旧参数别名。
| 本轮实际文件 | 已实现行为 |
|---|---|
Admin dispatchContracts.ts、api/dispatches.ts |
对应实际四块Detail、Page/Statistics、CandidateList、Draft/ConvertDraft、LoadingPreview、ArrangementPreview及动作判别CommandResult。已有单写入严格recordVersion,缺失/null/负数/非整数字符串/不安全number拒绝,显式0合法;长标识不转Number。预约更新仅支持referenceNo和预约自身recordVersion。移货实际为POST remove,装车完成为loading-complete;草稿转换完整组提交,不调用旧standalone pre-arrange。保留原预约域getBatchDispatchCandidates提供者,不伪造第三套协议。 |
Admin dispatchPresentation.ts、pages/DispatchesView.vue |
原生五阶段、独立ACTIVE/CANCELLED/ALL、装车前三个分区(车辆信息、调度审核、理货审核);分页/统计由服务端返回,丢弃迟到旧查询。写按钮同时核对严格boolean Gate和独立权限。审核、重审、加货、实载、安排与发车直接弹框;BOL鉴权Blob与按需路线读取保留,不逐行请求详情。列表提供跨筛选范围的原请求恢复入口。 |
Admin pages/DispatchDetailView.vue |
独立详情仅四个彩色图标Element页签,公共密度样式;真实vehicleInfo/dispatchInfo/documents/orderDetails,显示全部客户派送单及实际更新时间/备注。订单表保留服务端来源归属、客户、入仓码、真实集装箱与未知测量,不前端分摊或用内部ID回退。 |
Admin components/SmartDispatchDialog.vue、smartDispatchWarehouseTab.ts |
明确真实起运仓、空单建单、候选完整性/来源版本校验、显式恢复服务器草稿、逐组加货/移货/释放/原子转换。保留仓库展示Tab、来源单号/入仓码/托盘码/目的地地址邮编、集装箱及参考重量体积。每个容器分别维护车辆/司机/时间/备注,允许同仓跨客户;预约分配仍核对逐来源客户。草稿未知请求冻结原完整body/key/version,转换成功凭据先保存,全部新单详情核对后才清除;后续GET失败不再次转换。 |
Admin components/DispatchResourceFields.vue、overseas-master-data/index.ts |
通过实际公共候选API分别按权限查询车辆/司机,分别支持MASTER/EXTERNAL及混用,模式切换只清本资源。外配容量、证照号/到期/预计结束直接维护,不创建主档;保留已绑定证据。已关联主档选择器显示车牌/姓名或明确待核实,不泄露长ID。附件提供者仍未接入,见下表。Master Data只增加实际候选/类型公共导出,未删改原成本、容量、预订、交接、释放实现。 |
Admin components/DispatchWorkflowDialog.vue |
1120px维护/加货/实载/安排,760px两审核;驳回、退回、取消明确原因。实载只自动使用actual=true证据或相同manifest的confirmedLoad,参考分摊不填实测;逐托正数重量体积、整数托位及已匹配卸货序号验证。装车完成与实际发车独立。弹框目标变化立即重读,不能拿旧单版本/资料提交另一单。 |
Admin components/DispatchArrangeFields.vue |
一次组合GET,不再两个辅助GET拼快照;按客户+目的地显示全部货物、派送字段、真实报价和原费证据。每服务显式覆盖选择并携版本/hash,外接报价匹配同客户+入仓来源;部分覆盖仍保留未覆盖费用,不能跨客户免单。只显示适用服务的新增费用;不填伪零,不平均分摊整车费。一次POST发送全部组。 |
Admin dispatchCommandRecovery.ts |
同一登录主体共享一个完整未决命令,sessionStorage留原动作/业务号/body/key/version。未知结果先按原键查询,真实404才同键原请求重放;校验同单/动作/键及原装车/发车结果。先持久原结果,再GET当前详情并确认版本不早于命令版本后清pending;原结果不覆盖最新阶段。首次明确4xx业务拒绝可重新核对,5xx和网络结果未知、或前次未知后的迟到拒绝均不能丢键重建。CREATE与已有单动作恢复分开,不会将原DEPART发到建单API。 |
| Admin直接测试及类型/索引 | 重写原API、列表、详情、Smart与仓库Tab测试;新增Workflow/Resource/Arrange、命令恢复、原生fixture测试。prototypeContract、layoutAcceptance、types合同只更新本批被替代的排车断言,其他页面断言保留。index.ts导出实际新公共类型,types.ts删除旧DispatchListItem。 |
PDA src/api/fulfillment.js |
只消费原生PdaTask/actions/items/positions/returnCartons,0版本合法,缺版本拒绝;pick/loading-complete/depart各自带原生版本,新增loading和commands GET。删除旧completeDispatchPicking和tripDepartureRequest,不提交客户/仓作用域;普通outbound与cargo-discard API保持。 |
PDA src/stores/fulfillment.js |
排车保存完整pendingCommand,按登录人+冻结仓隔离恢复;不再用“同内容同键”吞掉下一次相同数量的实拣。结果确认才清命令,普通outbound保留原pendingKeys语义。 |
PDA src/pages/dispatch/dispatch.vue |
原生五阶段与Gate;真实实物码/退货箱唛拣货,错码清旧选择,同托多客户明细不能静默取首行。仓位选择跳过已拣分配,本次量同时受该位置可用量、分配余量和本明细余量限制。空单不核平;全部真实拣货+服务端pickingReconciled才可打开实载。实测确认独立于发车;未知重试与成功后GET失败保留原命令,支持另一端已推进阶段时读回最新事实。默认任务列表、显式resume、只读在途交接组件继续保留。 |
| PDA直接测试 | 同步fulfillment-workflows既有有意义断言,保留普通出库/收货/退货测试;新增dispatch-workflow真实页面方法harness,覆盖版本0、物理来源、分配上限、两级资格、未知POST、GET失败、跨端新阶段、5xx未知、旧详情版本和下一次等量扫码新键。 |
验证输入为当前工作区未提交候选,无隔离分支/副本,未提交、推送或部署:
- Admin定向12文件96/96通过(15:23,14.23s):api/dispatches、dispatchCommandRecovery、DispatchDetailView、DispatchesView、SmartDispatchDialog、DispatchWorkflowDialog、DispatchArrangeFields、DispatchResourceFields、prototypeContract、smartDispatchWarehouseTab、layoutAcceptance、types。随后本地版本校验错误改为明确DispatchInputError,受影响API/恢复/Workflow再跑3文件38/38通过(15:25)。
- Admin最新完整
pnpm typecheck仍失败,错误仅在保护中的WorkDispatchForm、WorkExistingDispatchForm、WorkSharedTripForm及其同名测试;本任务原生实现/直接测试无剩余类型错误。精确符号见前表。pnpm build前置即vue-tsc,当前不再重复打包或宣称构建通过;总控完成受保护接线后再验。未通过的全量11项5秒超时保留在历史记录,本轮依指令未重跑全量追绿、未放宽超时。 - PDA最终
npm test280/280通过;最后代码输入的npm run build:h5和npm run build:app均成功,H5初轮样式@import顺序警告已修正并重编译确认消失。App仅资源编译,不代表APK签名或设备验收。 - Client代码本轮未变;此前601/601、typecheck/build通过记录仍绑定此前切片,不重新触发全量。
- Admin/PDA独占变更
git diff --check通过(仅Git LF/CRLF提示);构建产物不纳入源码。自查覆盖实际13个公共Java records、请求序列化、直接消费者和失败/恢复分支,未冒充独立代理审查。
| 15:25时尚未关闭事项(非当前结论) | 当时事实与接线边界 |
|---|---|
| 三个预约表单与同名测试 | 当前仍引用被删除的DispatchSummaryDto、preArrangeDraftDispatch、旧draft id/签名、PENDING_DEPARTURE/workflow/顶层仓及appointmentBatches。保持只读,由总控/精确写者同步到同一原生接口;不得恢复旧类型别名遮盖断点。当前Admin尚不能作为可发布集成候选。 |
| 附件取证/预览 | Vehicle.evidenceFileIds和Driver.evidence.fileIds已真实保留,但公共骨架无本趟证据上传/绑定/鉴权下载元数据提供者;页面明确未接入。不编造File路径、不允许手填内部文件ID,不以空证据声称审核闭环。 |
| 实载卸货序号 | LoadingPreview已有deliveryIndex,双端只使用真实返回值;没有目的地/路线选择及更新提供者。缺值时明确阻断loading-complete,不猜顺序、不用行下标替代。 |
| 装车前移除货物UI | 已接实际POST items/{itemId}/remove及版本/原因API测试;平台Detail只有orderDetails/sourceKey,无可移除dispatchItemId。LoadingPreview是逐托实载,ArrangementPreview.cargo明确为不可变实际拣货来源,不能假设它覆盖装车前未拣明细,也不能借PDA任务接口取平台数据。故未伪造移货按钮或用sourceKey/仓托盘ID冒充itemId,需主流程提供装车前权威明细读取后补UI。 |
| 权限/入口/最新指引 | 本任务直接动作消费create、loading-complete、depart以及既有审核/edit等权限,统一IAM/SQL/导航由总控集成;入仓旧smart-dispatch权限消费者也需同步,不加OR旧权限降级。PDA AGENTS的旧canPick/tripDepartureRequest说明、Admin局部指引相关旧模型说明应由总控在最终索引维护批次更新;本任务未争写AGENTS。 |
| 真实验收 | 未调用真实HTTP、未写测试业务数据、未运行环境SQL/部署。双端Mock证明前端不重复发送和正确恢复,不证明服务端并发事务/库存/费用唯一性;后端及全链验收另核。Admin/Client仍待人工1920×1080、100%截图确认;PDA扫码枪/音效/离线重连/安装仍待真机。 |
仅在本对话交付供总控主动读取;没有跨对话回复、创建新聊天或内部代理。新增日历预约仍在本任务范围外。
六表单有限接线检查点(2026-10-19 15:50)
总控按主契约第九节精确移交WorkDispatchForm、WorkExistingDispatchForm、WorkSharedTripForm及三个同名测试;修改前逐文件git status无差异,并记录原SHA-256。六文件没有发现其他写入,当前继续为本任务唯一写者;其他日历文件仍未修改。
- WorkDispatchForm改为从真实ReceivingContext.batch.originWarehouseId限定同仓,将原批次实物与原生Candidate.sourceVersion精确关联,一个服务器草稿容器直接转换一张跨客户整车;逐来源batchAllocations保留客户/批次/目的地/数量,错客户/错来源/重复实物/未知数量/跨仓/不完整候选阻断。服务器草稿token和版本真实取得,不再客户端造token或按客户拆单。
- 草稿各步完整body/key/version和转换CommandResult按登录人及批次范围持久;未知响应只重放原步骤,原成功结果先保存再读详情,GET失败不再转换;事项关闭后的只读面板仍可核对原未决请求。首次明确拒绝才可显式读取本拥有者草稿新版本并释放,不以迟到冲突清除原未知命令。
- WorkExistingDispatchForm消费dispatchInfo.appointmentBatches逐客户验证。DISPATCH批次通过实际resolveBatchWork核对批次与业务号,不从内部ID拼字段回退;原单只读/继续维护均导航独立详情。
- WorkSharedTripForm保留文件名与父组件事件边界,内容改为同一排车ADD_CARGO,严格消费Gate/阶段/版本并复用实际WorkflowDialog及全局原命令恢复。删除另一客户子单输入和TripPreparationDialog共车写流程,不搬已扫码货物。
- public overseas-warehouse/index.ts只补实际原生API/类型/Workflow和命令恢复公共导出,未恢复旧别名。原批次分批、已有单恢复、原事项更新/跳转、剩余实物显式读取和unknown导航保护继续回归。
已运行:三个表单、WorkBatchContinuation、WorkDetailPanel及本任务原12个排车直接测试共17文件142/142通过(20.67s);完整pnpm typecheck通过;pnpm build包含再次vue-tsc和Vite构建均成功(Vite5.33s,仅已有大chunk提示)。此前三个表单造成的Admin类型阻塞已解除,不能把15:25的阻塞记录继续当作当前结论。该点后按总控新移交读取DispatchWorkModels与实际items/route/evidence端点,继续补三个此前缺提供者的UI,不把端点存在当作真实HTTP验收。
历史候选检查点(2026-10-19 16:03,已由下方 Long 修正候选替代)
六表单检查点后,已按总控追加移交完成原Admin独占范围的移货、既有路线排序及本趟附件UI。读取实际新增dispatch/port/DispatchWorkModels.java(SHA-256 1e91da656e38aebbc554b4b4275b080d387e6bdb2eefaa14d5ae1ebd5b1aec64,比较时忽略大小写)、DispatchAggregateController、DispatchAggregateService、DispatchEvidenceGateway/HttpDispatchEvidenceGateway,以及FleetTripService真实站序校验;未修改这些Java提供者。
| 本次生产变化 | 已完成的实际行为 |
|---|---|
dispatchContracts.ts、api/dispatches.ts |
精确接入DispatchWorkModels.Items/CargoItem、Route/Stop/RouteCommand和File元数据;GET items、GET/PUT route、POST multipart evidence/{VEHICLE或DRIVER}、GET文件元数据及/content。上传FormData只有file,不伪造业务类型、客户/仓范围或文件归属;所有版本化请求继续拒绝缺版本并接受0。 |
| 移货UI | 列表和四页签详情直接动作打开真实items清单,展示客户/订单/入仓码/托盘/应装/真实已拣及逐项remove Gate;只允许选服务端允许且pickedPackages=0的真实dispatchItemId。原因必填,POST path使用该真实明细ID;原itemId作为本地恢复目标与原body/key/version一起保留,不放进ReasonCommand JSON,不用sourceKey或仓托盘ID冒充。换标整源/已扫码等阻断原样保留。 |
| 路线UI | 原列表/详情增加“调整卸货顺序”居中弹框,仍只有四个详情页签;起运仓只读,只对实际Route.stops中的既有目的地上/下移。保存检查完整唯一目的地集合、版本、原因和Route.edit Gate;不能新增、删除、猜目的地,包含外接点。请求只交原destinationKeys顺序,后端保留真实名称地址。完成提示明确重新核对两级审核。 |
| 路线未知结果 | 后端实际账本动作是EDIT,前端只增加本地operation=ROUTE标记来保留原端点选择;该标记不进入公开请求。重放仍原动作/键/body/version,不能把路线原请求发送到资源Update;原CommandResult核对及GET当前详情规则继续复用。 |
components/DispatchEvidenceFiles.vue |
新增本车、两种实际证据类型的上传/替换/移除引用/鉴权预览组件。限PDF/JPG/PNG、10MiB;成功且元数据校验后才更换待保存引用,失败保留旧引用。上传本身不伪装成主单保存,随后通过原生版本化EDIT保存Vehicle.evidenceFileIds或Driver.evidence.fileIds,不自动删除File对象。 |
| 附件接入点 | 车辆维护弹框可上传并保存本趟证据;两级审核弹框及车辆详情页签只读预览。空单建单时尚无整车身份,提示先保存再维护附件,不编造创建前文件归属。Resource主档切换、模式、容量和证照输入保持。 |
| 图片/PDF与失败保护 | 当前弹框按需读取元数据,只有用户预览才GET本车/content Blob;图片900px居中,PDF用户点击时先开新窗再放入鉴权Blob URL。JSON业务错误不能当图像;身份/内容类型/大小不符拒绝预览;权限/网络错误保留code/requestId/traceId。切单、关闭、卸载后迟到响应不绑定/打开;撤销图片和卸载时回收URL,PDF URL定时回收。无匿名存储地址或内部ID显示回退。 |
本轮最终离线证据:
- Admin相关18文件155/155通过(15:59,22.12s):六表单对应三个测试、WorkBatchContinuation、WorkDetailPanel、原生排车API/恢复/列表/详情/Smart/Workflow/Resource/Arrange/Evidence、原型/密度/仓库Tab/类型合同。新增有意义回归包含真实itemId恢复、已扫码禁止移货、外接目的地不得丢失、路线原端点重放、只读附件、替换失败、切单迟到上传、JSON错误、关闭后迟到内容、PDF与弹窗阻断等。
- 路线成功提示与资格禁用最后收口后,受影响Workflow与WorkSharedTripForm再跑2文件13/13通过(16:01,3.96s)。
- 完整
pnpm typecheck通过;当前最后pnpm build再次包含完整vue-tsc并成功打包(Vite4.09s)。只有大chunk常规提示,没有放宽类型或测试超时。git diff --check通过,仅Git行尾转换提示。 - PDA本轮源码未变,沿用此前280/280和H5/App资源构建通过证据;Client仍为此前未变601/601及typecheck/build证据。未新增全量Admin追绿运行,历史11个超时不因此宣称消失。
自查/验证绑定21个本任务生产文件,聚合SHA-256为4d27e7fef94948d7169703c008a35e3e9ce86af8b2a0bc09effaff76842c32bd;算法仍为完整仓库相对路径字典序,每项路径+LF+原始字节+LF。清单为前一17文件、DispatchEvidenceFiles.vue及三个预约生产表单;测试、指引和本文不计入。此前17文件聚合只表示15:25历史输入,不能代替此候选。
当前结论:本任务已解除此前三个预约表单的类型阻塞,并完成三个新增提供者的UI消费,可以交总控集成;仍未提交/推送/部署、未启动后端、未写测试数据/SQL、未执行真实HTTP。尚需主后端对运行端点、批次关联、路由、版本/幂等/并发及完整持久化链统一验收,文件/货物/路线真实提供者运行状态由其实际检查证明。LoadingPreview若仍缺deliveryIndex或真实测量,双端继续阻断,不因路线UI存在而猜值补齐。Admin/Client视觉仍待人工1920×1080、100%截图,PDA硬件/安装仍待真机。统一权限/OpenAPI/索引由总控维护;WorkDetailPanel、WorkCreateAppointmentForm、AppointmentCreatePanel、planningApi、日历面板和adminDensity.test.ts均未修改。
历史候选:Long 响应边界修正(2026-10-19 16:39,已由下方批次版本候选替代)
已按总控授权解除本任务原有生产文件与直接测试的冻结,仅处理已确认的 Long 响应问题。common-web 的 Long/long 序列化实际输出十进制字符串,公共 JSON 解析器保留引号内的字符串;此前 WorkDispatchForm 的可用箱数严格比较、Workflow 的已拣数量零判断,以及附件元数据/Blob 大小比较因此错误阻断。本候选在排车 API 响应边界统一修正,保留既有组件业务判断,不向各页面散落 Number 转换。
- 新增
dispatchWire.ts,明确区分 HTTP Wire DTO 与应用内模型。统一校验并归一化全部实际 Long 数量:列表分页、Counts、统计/审核计数、候选、草稿 sources、明细应装/已拣、装载预览应装/已拣、文件大小、安排派送货物箱数/件数与出库/派送引用计数,以及 PICK/DEPART/ARRANGE_DELIVERY 命令结果、转换草稿内嵌结果。各实际 GET/POST/PUT/DELETE 消费边界均接入对应转换;Blob 内容仍走原鉴权下载。 - 仅接受非负安全整数,字符串必须是规范十进制整数;缺失、null、布尔值、空白、带符号、前导零、小数、指数写法、NaN/Infinity 和超出 MAX_SAFE_INTEGER 的值明确失败。ID、sourceVersion、recordVersion、reviewRound 均保持无损;Java int/Integer 的容量、站序、批次分配箱数,以及可空托数、BigDecimal 测量/金额不按 Long 数量转换。未修改共享 JSON 解析器、DataTable 或规划 API。
- PDA 仅加强原 normalizeDispatchTask 的已有转换:明细、库存位置和退货箱件数使用相同非负安全整数边界;既有数字和规范数字字符串均可读取,缺失及越界值阻断。ID 和 recordVersion 原样保留,出库等其他业务适配未动。
- 三个组件回归经真实 parseApiJsonResponse 和实际排车 API 执行:候选 availablePackages=字符串12 对接批次 Integer12 后可整车创建;pickedPackages=字符串0 可以移除权威未拣 itemId;sizeBytes=字符串3 可通过附件元数据与 Blob 校验、预览并替换,长文件ID不变。API 测试样例已按真实 items/loading/evidence/draft/converted 响应结构收敛,原版本、端点、幂等与分组断言保留。
- 同批较大回归发现附件预览 AppDialog 根缺少公共密度类,已仅在本任务 DispatchEvidenceFiles.vue 补 admin-density-dialog;未修改密度合同测试或其他共享样式。修复后密度与附件2文件38/38通过。
最终离线验证绑定本候选:Admin受影响19文件209/209通过(16:38,24.24s),其中新增 Wire 边界与三条真实字符串组件链;完整 pnpm typecheck 通过,最终 pnpm build 再次包含完整 vue-tsc 并成功打包(Vite4.22s,仅已有大chunk提示)。PDA npm test 282/282通过,build:h5 与 build:app 顺序完成;git diff --check 通过,仅Git行尾转换提示。没有调整超时、使用 any 或执行真实HTTP;此前 Admin全量11项超时没有在本轮重跑或宣称消失。Client本轮未变,先前601/601及构建证据仍仅代表先前输入。
当前聚合 SHA-256:63feb551c2325450ddd0bd7840c81191620372aa2cf64ea2dfb97027282c429f,共22个本任务生产文件。算法为完整仓库相对路径按字典序排序,每项依次写入“路径 + LF + 原始文件字节 + LF”后计算 SHA-256;测试和本文不计入。精确清单:
apps/admin-web/src/modules/overseas-warehouse/ 下:dispatchContracts.ts、dispatchWire.ts、dispatchPresentation.ts、dispatchCommandRecovery.ts、api/dispatches.ts、pages/DispatchesView.vue、pages/DispatchDetailView.vue、components/SmartDispatchDialog.vue、components/DispatchWorkflowDialog.vue、components/DispatchArrangeFields.vue、components/DispatchResourceFields.vue、components/DispatchEvidenceFiles.vue、smartDispatchWarehouseTab.ts、types.ts、index.ts;另含 apps/admin-web/src/modules/overseas-master-data/index.ts,apps/admin-web/src/modules/appointment-calendar/ 下 WorkDispatchForm.vue、WorkExistingDispatchForm.vue、WorkSharedTripForm.vue,以及 apps/pda-overseas-uniapp/ 下 src/api/fulfillment.js、src/stores/fulfillment.js、src/pages/dispatch/dispatch.vue。
最新源码只读核对表明,SmartDispatchController 已采用 destinationWarehouseCode 与原生 drafts/pre-arrange 契约,DispatchPdaController 已采用原生任务/装载完成/发车/命令结果入口,平台 DispatchAggregateController 也已有 /{dispatchNo}/depart 并调用 DispatchDepartureService;旧检查点关于这些源码仍未迁移的描述不能作为当前结论。本文只证明本任务消费与离线验证,没有修改 Java、共享权限/OpenAPI或环境配置。
可交总控集成;尚未提交、推送、部署、启动后端、写入测试数据/SQL或执行真实 HTTP。后端真实路由、权限、完整持久化和幂等并发链仍由总控统一验收;Admin/Client 人工1920×1080、100%截图与 PDA 真机扫码/安装仍待确认。本任务自查不冒充独立复核。
历史候选:既有批次版本与权限接线(2026-10-19 17:38,已由下方车辆预约取消候选替代)
按总控本轮精确授权,仅解除原排车模型/API/wire、SmartDialog、Workflow ADD_CARGO和既有Work排车表单对此版本字段的冻结;不触及日历新增预约、planningApi、面板生产逻辑、公共密度、PDA、Java或Maven。修改前已核对公共Java实际签名:DispatchContracts.BatchAllocation(..., Long recordVersion)、BatchReference(..., Long recordVersion)都要求显式非负版本且零合法;BatchReference的自动DISPATCH引用使用其真实主单版本。该文件读取摘要为73b5b83fcd0155bf09b18c18b1bd6a5bbb0175221102a13101248f92ca84f641。预约Provider的Allocation随后也实际增加recordVersion;AppointmentWorkDispatchCandidates第43行已用appointment.version().longValue()返回权威版本,前端不从Result.version、显示约号或默认零补造字段。
本次生产变化:
- dispatchContracts.ts的两个批次模型均增加必填Version字段;requireBatchVersions只校验并比较同批次版本,不改变原始值。0、字符串0及超过JS安全整数范围的长整数字符串均无损;缺失/null/非法/不安全number版本阻断,并提示重新读取候选。同一批次出现不同版本也阻断。
- dispatchWire.ts在真实候选、草稿sources和原车详情批次引用的响应边界检查版本;沿用公共JSON解析器,大整型裸JSON经公共解析器安全转成字符串后保留,不把合法长版本当数量做Number转换。批次箱数仍是Java int,原Long数量校验保持。
- api/dispatches.ts在直接创建、加货、全部组草稿转换前统一校验嵌套分配版本,跨组比较同批次版本;既有batch dispatch-candidates的分配必须带真实版本才交给组件。原请求对象与版本均原样发送。
- SmartDispatchDialog和DispatchWorkflowDialog将每个真实BatchReference.recordVersion原样写入对应BatchAllocation;创建/加货仍使用原来源/客户/目的地/数量,整车顶层recordVersion独立。原键恢复保留完整原body和嵌套批次版本,候选之后变化不能改写未知原请求。
- WorkDispatchForm使用原批次候选返回的allocation.recordVersion,核对同批次及原生引用版本一致后提交;不以Result.version代填。WorkExistingDispatchForm与WorkSharedTripForm生产无需改动:原详情经wire校验,既有加货经Workflow消费。index.ts仅公开本应用内部实际跨模块使用的版本校验入口。
- 原入仓单入口前批已单独获准收口:InboundOrdersView.vue要求dispatch:list与dispatch:create,并在打开方法再次守卫;permissions.ts删除旧inboundOrderSmartDispatch键、增加dispatchCreate。直接3文件30/30已通过,该输入本轮未再改动。
- 总控追加交付的CapacityInquiryTable.vue和CapacityInquiryDialog.vue修改前均无未提交差异,未见重叠写者;各只把bind动作旧smart门禁换成dispatch:create,capacity-offer:manage、booking-edit、trip:edit及业务/样式保持。负面测试继续证明旧smart权限无效,缺少其余任意一项也不能出现排入本车动作。
直接测试修改为dispatchWire、dispatches API、SmartDialog、Workflow、WorkDispatchForm和WorkExistingDispatchForm的合同样例及回归;TripAppointmentPanel.test.ts是类型检查发现的直接模型消费者,仅补一处样例recordVersion,不改面板生产文件。CapacityOffersBehavior.test.ts新增两入口共享的四权正负矩阵。WorkSharedTripForm和CapacityInquiryDialog直接测试按实际影响重跑但未改断言。
最终离线证据:批次包8文件145/145通过(17:34,30.52s),外接入口2文件38/38通过(17:36,4.39s),共10文件183项;包含零/长版本、缺失/非法版本、同批多版本拒绝、原键重试不换版本、已有关联读与加货、四权正例及旧权限负例。完整pnpm typecheck通过;最终pnpm build再次包含完整vue-tsc,Vite4.46s成功。git diff --check通过,仅Git行尾提示;没有重跑无变化的PDA全量和构建,也未重做全量Admin209或声称真实HTTP通过。
候选指纹:原22文件清单的当前聚合为709936a8236fee3a20e3facf6b07d5a8590ac7f0784e4a3deefa1e475fb33fb4;合并前批2个入仓入口权限文件及本批2个外接入口后的完整26生产文件聚合为2047b6dd54146fb394e63ae433e569e6079110864116f7f56a6deeff48cf9351。算法仍为完整仓库相对路径按字典序排序,依次写入path+LF+原始字节+LF后SHA-256;测试和本文不计入。完整26路径:
apps/admin-web/src/modules/appointment-calendar/WorkDispatchForm.vue
apps/admin-web/src/modules/appointment-calendar/WorkExistingDispatchForm.vue
apps/admin-web/src/modules/appointment-calendar/WorkSharedTripForm.vue
apps/admin-web/src/modules/overseas-master-data/components/CapacityInquiryDialog.vue
apps/admin-web/src/modules/overseas-master-data/components/CapacityInquiryTable.vue
apps/admin-web/src/modules/overseas-master-data/index.ts
apps/admin-web/src/modules/overseas-warehouse/api/dispatches.ts
apps/admin-web/src/modules/overseas-warehouse/components/DispatchArrangeFields.vue
apps/admin-web/src/modules/overseas-warehouse/components/DispatchEvidenceFiles.vue
apps/admin-web/src/modules/overseas-warehouse/components/DispatchResourceFields.vue
apps/admin-web/src/modules/overseas-warehouse/components/DispatchWorkflowDialog.vue
apps/admin-web/src/modules/overseas-warehouse/components/SmartDispatchDialog.vue
apps/admin-web/src/modules/overseas-warehouse/dispatchCommandRecovery.ts
apps/admin-web/src/modules/overseas-warehouse/dispatchContracts.ts
apps/admin-web/src/modules/overseas-warehouse/dispatchPresentation.ts
apps/admin-web/src/modules/overseas-warehouse/dispatchWire.ts
apps/admin-web/src/modules/overseas-warehouse/index.ts
apps/admin-web/src/modules/overseas-warehouse/pages/DispatchDetailView.vue
apps/admin-web/src/modules/overseas-warehouse/pages/DispatchesView.vue
apps/admin-web/src/modules/overseas-warehouse/pages/InboundOrdersView.vue
apps/admin-web/src/modules/overseas-warehouse/permissions.ts
apps/admin-web/src/modules/overseas-warehouse/smartDispatchWarehouseTab.ts
apps/admin-web/src/modules/overseas-warehouse/types.ts
apps/pda-overseas-uniapp/src/api/fulfillment.js
apps/pda-overseas-uniapp/src/pages/dispatch/dispatch.vue
apps/pda-overseas-uniapp/src/stores/fulfillment.js
共享提供者仍在途,不能把上述前端离线证据当预约—排车端到端接通:17:38读取的DispatchAggregateService与DispatchDraftService候选构造仍分别在第158/265行传入空appointmentBatches;尤其Smart草稿逐托选择/恢复后需由真实Provider保留引用和版本,前端不能拿旧显示约号或旧候选补造。总控/主后端继续处理实际候选/草稿提供、数据库锁内批次版本、完整持久化和发车复验。尚未提交、推送、部署、执行真实HTTP或写环境数据。新增日历预约及车辆预约权威提供者不在本前端包。
当前候选:取消排车车辆预约及完整构建复验(2026-10-19 19:03)
用户最新确认取消排车信息中的车辆预约字段及关联;FBA预约保留,详情仍严格为车辆信息、排车信息、单据信息、关联订单明细四个彩色图标页签。改动为API、模型、详情及直接样例/测试共8文件,精确清单与逐文件SHA在根.codex-temp/dispatch-remove-vehicle-appointment-20261019.json。总控已逐项核对8/8无漂移,聚合为f256c5a71bc67ad146702a28d30d7da0579fc69bb4ea92642c7f47ea44835957;4文件73项定向测试通过为前端执行证据。
完整类型检查先在2GB下OOM,启用节省内存选项仍OOM,均不计通过。用户随后明确授权本次完整检查临时使用4GB;总控经local-check执行node --max-old-space-size=4096 --optimize-for-size ./node_modules/vue-tsc/bin/vue-tsc.js --noEmit --pretty false,实际退出0(工具输出ef45f8)。随后恢复正常2GB限制,单独执行pnpm exec vite build,实际退出0,5135模块、Vite4.06s(工具输出79545d)。两步共同证明当前输入的完整类型检查与打包通过,没有排除测试、修改tsconfig或提高后续检查默认内存。上述结果不清除早前全量测试超时,也不代表真实页面、HTTP或PDA硬件验收。
日历新增预约仍归用户指定的其他对话,本批不接管。17:38候选的提供者缺失描述仅表示当时输入,当前公共字段/版本以最新主契约、Java和实际检查为准。