Compare commits

58 Commits
Author SHA1 Message Date
ouyangxq 178cfdf99a docs(admin): preserve approved measurement workspace appearance 2026-11-05 14:21:42 +08:00
ouyangxq 249276debf 优化 2026-11-04 18:08:25 +08:00
ouyangxq f3b4e914f9 记录财务与采购运输修复续批测试发布 2026-10-30 19:02:21 +08:00
ouyangxq 57bf848432 记录10月30日测试环境发布与核验结果 2026-10-30 16:00:01 +08:00
ouyangxq 38a136e509 补充客户端新增页和海外PDA界面规范 2026-10-30 15:42:39 +08:00
ouyangxq 3ff7841a89 统一客户端新增页布局与字段校验设计规范 2026-10-29 14:16:02 +08:00
ouyangxq d7f5d02ac1 记录海外PDA托盘异步校验修复测试H5发布 2026-10-28 17:39:55 +08:00
ouyangxq b17f4592bc 记录履约界面和船节点署名测试环境发布 2026-10-28 17:03:46 +08:00
ouyangxq e33825c161 记录采购出库提示及费用重试列测试环境核验 2026-10-28 14:16:37 +08:00
ouyangxq e4c6712634 记录预约与客户工作台续批测试发布及费用菜单修复 2026-10-28 12:07:10 +08:00
ouyangxq d584217da5 记录后台统一布局与已完成修复的测试环境发布 2026-10-28 11:14:01 +08:00
ouyangxq ed07692a16 docs: 记录船期顺延真实 HTTP 验收结果 2026-10-27 17:26:11 +08:00
ouyangxq b59ad09423 docs: 记录船期日历测试发布与接口验收结果 2026-10-27 17:15:35 +08:00
ouyangxq b0d249973a docs: 明确船期日历顺延和订柜统计口径 2026-10-27 16:56:21 +08:00
ouyangxq f5a8fe5f78 docs(admin): clarify finance cards and detail spacing 2026-10-27 16:55:36 +08:00
ouyangxq 32af159987 docs: record finance reopen and lifecycle TEST acceptance 2026-10-27 15:39:48 +08:00
ouyangxq b1baceaa08 docs: record tested finance and admin deployment 2026-10-27 12:18:47 +08:00
ouyangxq e50cf9e5e6 优化 2026-10-27 12:09:18 +08:00
ouyangxq 806641c579 优化 2026-10-26 18:52:09 +08:00
ouyangxq 1a92bba2d5 优化 2026-10-26 17:27:38 +08:00
ouyangxq 517efab68c 优化 2026-10-26 13:58:45 +08:00
ouyangxq 75461279d8 docs(deploy): record evening test release and PDA static hosting 2026-10-23 20:03:13 +08:00
ouyangxq 10864cdb92 docs(lastleg): define sequenced outbound task identifiers 2026-10-23 18:45:49 +08:00
ouyangxq 2e40d91391 docs(deploy): require static PDA H5 hosting in test and gray 2026-10-23 15:25:46 +08:00
ouyangxq 51b72e8e57 docs(deploy): record gray release and postrelease acceptance 2026-10-23 14:25:39 +08:00
ouyangxq 8dc95856f5 docs(deploy): record verified dispatch publication TEST release 2026-10-23 13:23:38 +08:00
ouyangxq e4c728ff12 docs(dispatch): restrict demand publication to smart dispatch 2026-10-23 12:42:23 +08:00
ouyangxq 31b63e28a6 优化 2026-10-23 12:06:41 +08:00
ouyangxq 8201fe6ee9 docs: record TEST booking and measurement deployment 2026-10-23 11:04:42 +08:00
ouyangxq 1b0f16de1e docs: update booking workflow and TEST verification records 2026-10-23 10:56:39 +08:00
ouyangxq 519f141406 docs: verify review index widths after final release 2026-10-23 03:24:30 +08:00
ouyangxq 5672f446fb docs: close eighteen-item test release acceptance 2026-10-23 03:17:12 +08:00
ouyangxq 65dd56b543 docs: record final four-app recovery and feedback acceptance 2026-10-23 03:15:44 +08:00
ouyangxq eb265e1a93 docs: record PDA runtime fix and live dispatch verification 2026-10-23 01:55:31 +08:00
ouyangxq cbd757d1cf docs: record dispatch UI checks and pending driver preview release 2026-10-23 01:16:13 +08:00
ouyangxq 514ad62f83 docs: record release18 HTTP and partial browser acceptance 2026-10-23 00:21:29 +08:00
ouyangxq ff86bc0d46 docs: record October 22 repair scope and authorized TEST release 2026-10-22 23:15:32 +08:00
ouyangxq 2e98b7224d 优化 2026-10-22 14:38:03 +08:00
ouyangxq 9dcc1045e8 记录入库计划到仓取值修复与测试环境发布 2026-10-22 14:13:09 +08:00
ouyangxq c8099930bb 优化 2026-10-22 11:56:50 +08:00
ouyangxq 8ebea7c4cb 优化 2026-10-21 21:30:28 +08:00
ouyangxq 5273422937 docs(deploy): 记录散板需求新数据源和装车确认发布结果 2026-10-21 19:03:03 +08:00
ouyangxq 94faf0f017 docs(dispatch): 明确排车发布余位与直接装车确认规则 2026-10-21 18:50:57 +08:00
ouyangxq b781548e8c docs: 收敛散板需求旧车次入口并记录TEST发布 2026-10-21 18:18:02 +08:00
ouyangxq 9bcc71d6a3 docs: 保留其他任务发布记录的原未提交状态 2026-10-21 18:11:19 +08:00
ouyangxq b818c26e29 docs: 记录散板需求只读余位池TEST发布 2026-10-21 18:10:31 +08:00
ouyangxq e112805290 优化 2026-10-21 18:04:58 +08:00
ouyangxq de1df1b56c 优化 2026-10-21 17:57:17 +08:00
ouyangxq 06bbb88f5b 优化 2026-10-21 17:26:45 +08:00
ouyangxq 33d3a76f54 优化 2026-10-21 17:22:22 +08:00
ouyangxq 00bce8f4ba 优化 2026-10-21 17:08:56 +08:00
ouyangxq 681a85e66b 优化 2026-10-21 16:58:34 +08:00
ouyangxq 846d1ffcba 优化 2026-10-21 16:40:14 +08:00
ouyangxq 5aed9d0af0 优化 2026-10-21 15:53:29 +08:00
ouyangxq fc711c5471 优化 2026-10-21 15:10:48 +08:00
ouyangxq be51f03c6c 优化 2026-10-21 14:30:36 +08:00
ouyangxq 1fb613c8bd 优化 2026-10-21 13:22:39 +08:00
ouyangxq 5706c3483f docs(calendar): clarify container search and local dispatch dates 2026-10-21 11:44:02 +08:00
37 changed files with 2458 additions and 1101 deletions
+25 -9
View File
@@ -23,16 +23,32 @@
- 在工作区根使用:`& ./baiyue-firstleg/scripts/local-check.ps1 -WorkingDirectory ./apps/admin-web -Label 'Admin typecheck' -Command @('pnpm', 'typecheck')`。定向 Vitest 示例:`-Command @('pnpm', 'exec', 'vitest', 'run', 'src/目标.test.ts')`;后端示例:`-WorkingDirectory ./baiyue-firstleg -Command @('mvn', '-pl', '目标模块', '-am', 'test-compile')`。参数使用数组,不拼接命令字符串。 - 在工作区根使用:`& ./baiyue-firstleg/scripts/local-check.ps1 -WorkingDirectory ./apps/admin-web -Label 'Admin typecheck' -Command @('pnpm', 'typecheck')`。定向 Vitest 示例:`-Command @('pnpm', 'exec', 'vitest', 'run', 'src/目标.test.ts')`;后端示例:`-WorkingDirectory ./baiyue-firstleg -Command @('mvn', '-pl', '目标模块', '-am', 'test-compile')`。参数使用数组,不拼接命令字符串。
- 查看占用:`& ./baiyue-firstleg/scripts/local-check.ps1 -Status`。默认最多排队 900 秒(`-WaitSeconds`),执行最多 1200 秒(`-TimeoutSeconds`)。排队超时退出 75 且不启动检查;执行超时退出 124 并回收本次进程树;其他情况透传命令退出码。锁由操作系统文件句柄维护,不删除锁文件抢占。正常结束、超时和包装器强制退出均由 Windows Job Object 回收本次后代;不按 Node/Java 进程名清理其他任务。 - 查看占用:`& ./baiyue-firstleg/scripts/local-check.ps1 -Status`。默认最多排队 900 秒(`-WaitSeconds`),执行最多 1200 秒(`-TimeoutSeconds`)。排队超时退出 75 且不启动检查;执行超时退出 124 并回收本次进程树;其他情况透传命令退出码。锁由操作系统文件句柄维护,不删除锁文件抢占。正常结束、超时和包装器强制退出均由 Windows Job Object 回收本次后代;不按 Node/Java 进程名清理其他任务。
- 子进程默认设置 Vitest 最多 2 个 worker;Node 单进程堆上限 2048MB;Java 单进程堆上限 1536MB、可见处理器 2 个。直接运行 `node --test` 时自动补 `--test-concurrency=2`;直接运行 Maven 时补 `-T 1 -DforkCount=1 -DreuseForks=true`,拒绝重复指定这些并发参数。嵌套 shell/自定义脚本不得另行提高并发、覆盖限制或并发启动重型任务;经包管理器间接调用 Node 内置测试时,在该测试命令中显式保留 `--test-concurrency=2`。这些是每进程限制,并非整个进程树的总内存限额。 - 子进程默认设置 Vitest 最多 2 个 worker;Node 单进程堆上限 2048MB;Java 单进程堆上限 1536MB、可见处理器 2 个。直接运行 `node --test` 时自动补 `--test-concurrency=2`;直接运行 Maven 时补 `-T 1 -DforkCount=1 -DreuseForks=true`,拒绝重复指定这些并发参数。嵌套 shell/自定义脚本不得另行提高并发、覆盖限制或并发启动重型任务;经包管理器间接调用 Node 内置测试时,在该测试命令中显式保留 `--test-concurrency=2`。这些是每进程限制,并非整个进程树的总内存限额。
- 前后端全量入口 `backend-full-regression.ps1`、`frontend-full-regression.ps1` 执行时整批占一个名额,DryRun 不占用。已在入口保护下的批次执行原始命令,不重复申请锁;入口会拒绝嵌套调用,避免互相等待。 - 后端分层入口 `backend-check.ps1` 及前后端全量入口 `backend-full-regression.ps1`、`frontend-full-regression.ps1` 执行时整批占一个名额,DryRun 不占用。已在入口保护下的批次执行原始命令,不重复申请锁;入口会拒绝嵌套调用,避免互相等待。
- 每个任务先完成必要的定向检查;批次收尾再统一执行应用要求的全量门禁,不因排队取消必要验证。复用结果前核对命令、目录、相关源码/依赖/配置均相同;验证期间相关输入变化则作废重跑。入口仅保存最近一次执行摘要,不自动计算代码快照、不自动跳过测试,也不保证先来先执行。 - 按下文“验证范围选择”完成必要检查,不因批次收尾扩大范围;排队也不改变检查范围。复用结果须核对命令、目录和相关源码/依赖/配置;输入变化只作废依赖该输入的结果,补跑受影响检查,不自动重跑整批。交付简述范围、结果和未验证项;不能仅凭时间接近或上次绿灯推定有效。入口仅保存最近摘要,不自动计算快照或跳过测试,也不保证先来先执行。
- 本机每槽独立保存占用者与最近结果:首槽 `owner.json`、`last-result.json`,第二槽 `owner-2.json`、`last-result-2.json`。只保存检查名称、目录、工具、PID、槽号、时间和退出码,不保存命令参数、凭据或测试输出;名称不得包含秘密。`-Status` 分别展示两槽及总占用,摘要不是业务/部署事实来源。无需凭据,不访问网络、数据库或部署环境;被包装命令原有的网络/写入能力及授权要求不变。 - 本机每槽独立保存占用者与最近结果:首槽 `owner.json`、`last-result.json`,第二槽 `owner-2.json`、`last-result-2.json`。只保存检查名称、目录、工具、PID、槽号、时间和退出码,不保存命令参数、凭据或测试输出;名称不得包含秘密。`-Status` 分别展示两槽及总占用,摘要不是业务/部署事实来源。无需凭据,不访问网络、数据库或部署环境;被包装命令原有的网络/写入能力及授权要求不变。
- 只读检索和互不冲突的编辑可并行;开发服务按应用复用已有实例,不纳入短任务队列,也不通过本入口启动常驻服务。已有运行任务由所属对话收尾;本入口不自动终止它们。 - 只读检索和互不冲突的编辑可并行;开发服务按应用复用已有实例,不纳入短任务队列,也不通过本入口启动常驻服务。已有运行任务由所属对话收尾;本入口不自动终止它们。
- 免排队范围仅限离线只读的静态合同:`baiyue-firstleg/scripts/agents-index-contract.ps1`、`scripts/mapper-scan-contract.mjs` 等直接扫描文件的 PowerShell/MJS 脚本;`node --test` 形式的合同测试文件仍属测试。任何 `pnpm test`、`pnpm typecheck`、`pnpm build`、`node --test` 和 `mvn` 命令必须经 `local-check.ps1`,不得以“离线合同”为由绕过。 - 免排队范围仅限离线只读的静态合同:`baiyue-firstleg/scripts/agents-index-contract.ps1`、`scripts/mapper-scan-contract.mjs` 等直接扫描文件的 PowerShell/MJS 脚本;`node --test` 形式的合同测试文件仍属测试。任何 `pnpm test`、`pnpm typecheck`、`pnpm build`、`node --test` 和 `mvn` 命令必须经 `local-check.ps1`,不得以“离线合同”为由绕过。
## 验证范围选择
从本轮差异、修改行为及直接引用确定范围,不把整个工作区已有改动算作本轮任务。各应用命令表是可用命令,不是每轮执行清单。
| 改动 | 默认验证 |
|---|---|
| 文案、注释、纯展示字段增删 | 核对差异及模板;已有断言受影响则调整并定向运行,不机械新增测试 |
| 文件内小逻辑、局部交互 | 覆盖修改分支和必要边界的定向测试,不自动整模块回归、typecheck 或构建 |
| 类型、签名、接口、模板绑定、模块引用、公共组件或共享逻辑 | 沿符号追踪实际消费者并运行相关测试;类型关系可能受影响时,补覆盖相关生产与测试源码的最小类型检查或编译 |
| 依赖、打包配置、模块装配 | 按变更选择受影响构建或测试;需要构建不等于同时需要全量测试 |
| 广泛公共变更或完整集成验收 | 先说明具体影响及定向检查不足的原因,再选择模块/全量范围;未调查清楚不能作为全量理由 |
- 用户明确要求完整回归时按指定范围执行;普通提交、对话结束、触及多个文件或发现他人未提交修改均不触发全量。
- 权限、金额、库存、状态和并发等关键行为必须覆盖相关边界,但不据此扫描或测试无关业务。定向失败先定位,不自动扩大测试范围。
- 仅复用编译配置、覆盖文件及相关输入相同的成功结果;构建未覆盖测试源码时,不能替代受影响测试的类型检查。API、Mapper、AGENTS 静态合同按各自触发条件执行;文档改动不触发业务回归。
## 当前开发阶段 ## 当前开发阶段
- 项目尚未上线,没有需要兼容的生产存量数据、线上客户端或已发布接口版本;所有代码与契约直接收敛到当前确认目标,用户确认上线或存在不可变外部契约后才重新建立版本兼容和升级规则。 - 项目尚未上线,没有需要兼容的生产存量数据、线上客户端或已发布接口版本;所有代码与契约直接收敛到当前确认目标,用户确认上线或存在不可变外部契约后才重新建立版本兼容和升级规则。
- 收敛范围包括源码结构、接口与 DTO、字段、状态机、权限、配置键、OpenAPI、数据库结构与初始化 SQL、事件、路由、页面、前端消费者、Mock/Fixture、测试和脚本;旧实现冲突时同步修改全部生产者与消费者并直接删除旧实现。 - 收敛范围限于本轮目标实际影响的源码结构、接口与 DTO、字段、状态机、权限、配置键、OpenAPI、数据库结构与初始化 SQL、事件、路由、页面、前端消费者、Mock/Fixture、测试和脚本;旧实现与本轮目标冲突时,同步修复实际受影响的生产者与消费者并删除被替代实现。
- 禁止为旧代码、旧调用或开发环境存量保留旧接口/旧字段别名、兼容分支、双协议、双写、灰度、回滚版本、降级解析、旧行为回退、临时适配层、迁移脚本、回填脚本、清理补偿或新旧版本并行;不得以“稳妥”“兼容历史数据”或“先保留以后删除”为由延迟收敛。 - 禁止为旧代码、旧调用或开发环境存量保留旧接口/旧字段别名、兼容分支、双协议、双写、灰度、回滚版本、降级解析、旧行为回退、临时适配层、迁移脚本、回填脚本、清理补偿或新旧版本并行;不得以“稳妥”“兼容历史数据”或“先保留以后删除”为由延迟收敛。
- 开发环境数据库记录、上传文件、缓存、会话、消息、搜索索引和其他运行状态均可丢弃;正常验证方式是更新最新初始化基线、重新造数或上传,并直接运行受影响回归,不模拟生产迁移。已有历史 SQL 只用于开发追溯,不构成兼容依据。 - 开发环境数据库记录、上传文件、缓存、会话、消息、搜索索引和其他运行状态均可丢弃;正常验证方式是更新最新初始化基线、重新造数或上传,并直接运行受影响回归,不模拟生产迁移。已有历史 SQL 只用于开发追溯,不构成兼容依据。
- 后端位于独立 Git 仓库 `../baiyue-firstleg/`,执行 Git 命令前确认当前工作目录。“无需兼容、直接修复”不授权自动重置数据库、删除数据/文件、执行 SQL、部署或修改环境。测试环境授权只读 `独立任务协作登记.md`,开发全流程授权只读 `开发环境独立任务协作登记.md`;未登记任务和生产环境仍需用户在当前轮明确授权。 - 后端位于独立 Git 仓库 `../baiyue-firstleg/`,执行 Git 命令前确认当前工作目录。“无需兼容、直接修复”不授权自动重置数据库、删除数据/文件、执行 SQL、部署或修改环境。测试环境授权只读 `独立任务协作登记.md`,开发全流程授权只读 `开发环境独立任务协作登记.md`;未登记任务和生产环境仍需用户在当前轮明确授权。
@@ -47,18 +63,18 @@
## 通用工程与质量门禁 ## 通用工程与质量门禁
- 对外 API 新增、改名、删除或访问域变化,以“调用端实际路径(含 API Base)→ 对应区域 Gateway → Controller → OpenAPI → 权限”作为一个交付单元;不能只在修改网关文件时才检查注册。已被正确通配路由覆盖时无需重复添加路由,内部服务令牌接口不得为通过检查而公开。 - 对外 API 新增、改名、删除或访问域变化,以“调用端实际路径(含 API Base)→ 对应区域 Gateway → Controller → OpenAPI → 权限”作为一个交付单元;不能只在修改网关文件时才检查注册。已被正确通配路由覆盖时无需重复添加路由,内部服务令牌接口不得为通过检查而公开。
- 提交前运行 `node --test scripts/gateway-route-contract.test.mjs` 及受影响服务/调用端的定向测试;路由合同失败不得提交或声称完成。该离线合同检查源码映射、目标服务及内部路径隔离,不代替权限、HTTP 方法、运行时 Nacos 或真实 HTTP 验收;前端 Mock 测试、类型检查及服务单测通过也不证明网关可达。 - 仅对外 API 路径/访问域新增、改名、删除或 Gateway 路由配置变化时,运行 `node --test scripts/gateway-route-contract.test.mjs` 及受影响服务/调用端测试;命中的路由合同失败不得声称完成。纯文案、内部逻辑和路径未变的前端消费不触发。该离线合同不代替权限、HTTP 方法、运行时 Nacos 或真实 HTTP 验收。
- 交付列明变更接口、路由是否复用或新增、验证结果及部署单元;Gateway 配置变化必须包含对应网关,Nacos 配置变化单独说明发布项。没有环境授权时只交付代码和待验收说明,不自动部署、发布配置或调用真实 HTTP。 - 交付列明变更接口、路由是否复用或新增、验证结果及部署单元;Gateway 配置变化必须包含对应网关,Nacos 配置变化单独说明发布项。没有环境授权时只交付代码和待验收说明,不自动部署、发布配置或调用真实 HTTP。
- 保持变更小而聚焦,遵循目标项目现有命名、分层和格式,不顺手重构无关代码。 - 修改范围与停止条件遵循[工作区根指引](../AGENTS.md#修改范围与停止条件),保持目标项目现有命名、分层和格式。
- 优先复用现有依赖和公共能力;新增或升级依赖前说明必要性、影响范围和替代方案。 - 优先复用现有依赖和公共能力;新增或升级依赖前说明必要性、影响范围和替代方案。
- 不提交依赖目录、构建产物、运行日志、编辑器缓存或本地临时文件;不写入密钥、令牌、真实客户数据或环境特定地址。 - 不提交依赖目录、构建产物、运行日志、编辑器缓存或本地临时文件;不写入密钥、令牌、真实客户数据或环境特定地址。
- 用户可见文案保持清晰一致;代码标识符使用英文,业务说明和文档可使用中文。 - 用户可见文案保持清晰一致;代码标识符使用英文,业务说明和文档可使用中文。
- 仅运行目标项目实际声明的安装、检查、测试和构建命令。每次变更至少验证直接受影响的项目,跨项目变更还要验证对应消费者。 - 仅运行目标项目实际支持的检查命令,按上文选择最小有效范围;“验证受影响项目”不等于运行该项目全部命令。
- 修改方法、构造器、组件 Props、函数、接口、DTO 或请求/响应参数时,定向检索全部生产调用、测试调用、Mock、Fixture、契约测试和脚本引用,并同步修改。 - 签名、组件 Props、接口/DTO、请求响应结构或影响调用方的行为变化时,用 `rg` 按变更符号核对直接生产调用、测试、Mock、Fixture、契约测试与脚本;只修改实际受影响的引用,必要时沿直接依赖继续追踪。仅内部实现调整且调用契约与对外行为未变时,验证受影响逻辑,不自动修改调用方、Mock、Fixture 或文档。
- 参数或类型签名变化必须运行会编译测试源码的最小检查;无法验证时明确列出未验证范围。 - 参数或类型签名变化必须运行会编译测试源码的最小检查;无法验证时明确列出未验证范围。
- 修复缺陷优先增加复现测试;没有现成测试设施时不为小改动引入整套框架,应记录验证步骤和剩余风险。 - 行为缺陷优先用已有测试复现,缺失时补必要用例;文案和纯展示不机械新增测试,不为小改动引入框架。
- UI 变更按受影响范围检查加载、空态、错误态、权限、目标视口和可访问性;Admin/Client 视觉细则查 `Admin-Client前端原型还原验收规则.md` 和目标应用指引。 - UI 只检查本轮影响的状态与交互,不机械遍历加载、空态、错误态和权限;布局或承载方式变化再按前端验收规则核对对应视觉证据。
- 需求、技术栈或接口未确认时停在可逆设计阶段,不自行作出高成本平台决策。 - 需求、技术栈或接口未确认时停在可逆设计阶段,不自行作出高成本平台决策。
## 独立任务与多任务协作 ## 独立任务与多任务协作
+18 -34
View File
@@ -2,69 +2,53 @@
## 目标 ## 目标
Admin 与 Client 已向客户讲解或确认过的页面,必须以对应原型为直接事实来源逐页还原。不得先统一套用现有设计系统、抽屉、弹框、详情页或图标规范,再局部调整。 本文只维护逐操作核对方法、验收范围和证据要求。Admin 当前样式的唯一依据为 [Admin 界面规范](Admin高密度界面规范.md);Client 新增、新建、下单的通用外观按 [Client 界面样式规范](Client界面样式规范.md) 的“新增页面”章节,其他操作读取该规范的适用条款和已确认原型,不自动采用 Admin 风格。本文不重复定义配色、密度、按钮或弹窗尺寸。
页面业务字段、顺序、分组和操作承载以当前业务契约及逐操作确认为准;已有原型作为直接核对证据。Admin / Client 主规范已经确认替代的外观使用对应现行规则,其余差异逐项记录,不因套用公共组件而改动承载方式。
## 修改门禁 ## 修改门禁
每个页面修改前必须先形成以下矩阵,并给出原型文件及行号、元素 ID、函数名或截图证据: 新页面、整体视觉还原、布局重排或页面/弹框/抽屉承载变化,才对受影响操作形成以下矩阵,并给出原型或用户截图依据。文案、单个展示字段增删、局部逻辑及不改变承载方式的小调整,直接核对差异,不要求矩阵、完整原型检索或全页面验收:
| 页面 | 操作 | 原型承载方式 | 原型尺寸/布局 | 当前实现 | 结论 | | 页面 | 操作 | 原型承载方式 | 原型尺寸/布局 | 当前实现 | 结论 |
|---|---|---|---|---|---| |---|---|---|---|---|---|
| 示例 | 详情 | 独立页面 | 页面级头部、返回列表 | 右侧抽屉 | 改为正式路由页面 | | 示例 | 详情 | 独立页面 | 页面级头部、返回列表 | 右侧抽屉 | 改为正式路由页面 |
操作至少分别核对:详情、新增、编辑、审核/确认、文件预览、删除/停用确认。不得以其中一个操作的结论推断其他操作。 只核对本轮受影响操作,不机械遍历详情、新增、编辑、审核、预览和删除;不得用一个操作的结果推断其他操作已通过。
## 承载方式 ## 承载方式
- 原型使用独立页面:必须使用正式路由、页面级布局和明确返回入口;不得改成抽屉或弹框。 - 原型使用独立页面:必须使用正式路由、页面级布局和明确返回入口;不得改成抽屉或弹框。
- 原型使用居中弹框:必须使用居中模态框,并按原型宽度、标题、正文、底部按钮和关闭方式还原;不得改成右侧抽屉。 - 原型使用居中弹框:必须使用居中模态框,核对标题、正文、底部按钮和关闭方式;Admin / Client 外观分别按各自现行样式规范和已确认业务例外,承载尺寸按对应操作确认,不得改成右侧抽屉。
- 原型使用侧滑面板:仅该操作允许使用抽屉,并按原型方向、宽度和内部布局还原。 - 原型使用侧滑面板:仅该操作允许使用抽屉,并按原型方向、宽度和内部布局还原。
- 原型未定义:先停在矩阵中标记待确认,不得因为公共组件方便而自行选择。 - 原型未定义:先停在矩阵中标记待确认,不得因为公共组件方便而自行选择。
- 同一列表的详情、新增、编辑、审核可以采用不同承载方式,必须逐操作判断。 - 同一列表的详情、新增、编辑、审核可以采用不同承载方式,必须逐操作判断。
## 视觉与排版 ## 视觉与排版
- 字段顺序、分组、摆放、列宽、控件宽高、换行、对齐、外边距、内边距、间隙和留白按原型逐项核对。 - Admin 按 [主规范任务入口](Admin高密度界面规范.md#按任务阅读)选择对应章节核对;Client 按 [样式规范](Client界面样式规范.md) 的适用章节及对应操作原型逐项核对。矩阵标明当前依据及业务例外,不把旧试点和过程记录当成另一套通用规则。
- 顶部背景色、页面背景、区块背景、边框、圆角、阴影、字号、字重和文字颜色直接取原型值。 - 核对字段分组、列宽、换行、对齐、控件、表格、按钮及图标;保留原型的业务语义和操作资格。主规范未授权的装饰、功能与交互不得自行添加。
- 按钮位置、顺序、尺寸、颜色、危险语义、悬停态、禁用态按原型还原;不得自行增加“更多”菜单或纯文字替代。 - 长编号、长地址、长文件名、多字段、空值和业务状态使用真实形态的数据核对;不能靠缩小字号、裁切关键值或减少字段通过验收。
- 原型已提供图标、字符图标、图片或 SVG 时直接复用原型资源;不得自行绘制或替换。
- 表格按原型核对外边框、单元格边框、表头背景、斑马纹、行悬停背景、行高和横向滚动。
- 原型没有的公司名称图标、下划线、卡片装饰、悬停上浮、缩放和渐变效果不得添加。
### Admin 已确认布局基线
- Admin 所有弹窗的统一目标风格见 [Admin 统一弹窗规范](Admin高密度界面规范.md#弹框与表单)(2026-10-19 测量弹窗样板)。按大模块逐组盘点、实现和截图确认;在已确认范围内优先采用该规范的外观与密度,原业务字段、权限、提交逻辑以及独立页面/弹框/抽屉承载方式继续逐操作核对。
- 订单样板及国内仓样式统一采用 [Admin 高密度界面规范](Admin高密度界面规范.md)。其已确认的密度、容器和页签图标规则优先于历史原型中的对应视觉;字段、业务分组、权限、操作语义与页面/弹框/抽屉承载方式继续逐操作核对。该规范不表示其他页面已完成验收。
- Admin 是高信息密度业务系统。保留原型字段、顺序、业务分组和交互语义,但普通短字段优先使用连续白底、多列键值网格、描述表或紧凑列表,不把“一个标签 + 一个值”做成独立卡片。
- 详情页顶部尽量合并返回、标题、核心状态和主要操作;路由壳层已显示标题时正文不重复。状态或流程结论只保留一个主要视觉落点,除真实错误、阻断或危险外不叠加大面积彩色横幅。
- 在 `1920×1080` 下短字段通常并排 `4–6` 组;长文本、地址、备注和异常原因可以跨列或换行。长编号集中省略说明列宽设计失败,应调整列数、宽度或跨列,不继续缩小字号。
- 同一详情页使用一致的内容底色和容器语言;连续白底区域用分隔线和间距分区,同级独立卡片的背景、圆角、边框和外间距保持一致。
- 高信息密度不授权缩小可点击区域、删除标签、强制截断关键值或牺牲可访问性。使用真实长编号、空值、状态徽标和多字段数据核对首屏。
- 原型明确的承载方式和视觉细节优先;历史原型仅因大量字段卡片、重复状态块或过度留白与当前密度基线冲突时,收敛承载方式但不改变字段、分组和交互语义。
## 响应式与可访问性 ## 响应式与可访问性
- Admin、Client 当前只按 `1920×1080`、浏览器缩放 `100%` 验收;不检查或整改 `720px`、`320px` 等窄屏,也不删除已有响应式能力。用户恢复多视口验收后再统一调整。 - Admin、Client 当前只按 `1920×1080`、浏览器缩放 `100%` 验收;不检查或整改 `720px`、`320px` 等窄屏,也不删除已有响应式能力。用户恢复多视口验收后再统一调整。
- 弹框正文超过视口时只滚动正文,标题和操作区保持可见;独立详情页按正常页面滚动。 - 弹框正文超过视口时只滚动正文,标题和操作区保持可见;独立详情页按正常页面滚动。
- 字段数量较多、两列会导致弹框明显过高时,在 `1920×1080`验收视口下改用宽版三列表单;短字段单列占位,地址、长文本、备注、文件和表格按内容跨列或整行。小型确认类弹框不因此扩宽。 - 弹窗尺寸和字段列数按当前样式依据及业务例外核对,不在验收阶段另设通用尺寸;核对长正文、校验错误、附件和底栏是否可用。
- 保留键盘操作、焦点、表单标签、图标按钮名称和足够对比度。可访问性调整不得改变原型的主要布局与视觉语义。 - 保留键盘操作、焦点、表单标签、图标按钮名称和足够对比度。可访问性调整不得改变原型的主要布局与视觉语义。
## 执行与验收 ## 执行与验收
1. 先提交逐页矩阵,不直接批量替换公共组件。 1. 仅满足上述矩阵触发条件时记录受影响操作;局部小改直接核对差异,不批量替换公共组件。
2. 总控冻结该页结论后,任务只修改职责内模块,不触碰其他任务在途文件。 2. 按当前对话确认的范围修改目标模块,保留其他任务在途改动;存在总控协作时沿已冻结结论执行,不因普通样式任务额外创建总控流程。
3. 修改后由人工在 `1920×1080`、`100%` 缩放下操作并提供截图,标注与原型仍存在的差异;缺少截图时记录“待人工截图确认”,AI 不自行批量取证。 3. 需要视觉验收的布局/承载变化,由人工在 `1920×1080`、`100%` 缩放下提供受影响操作截图;缺少时记“待人工截图确认”,AI 不批量取证。文案、小逻辑和局部展示改动不以重新提交整页截图作为代码交付门禁,不据此宣称已通过视觉验收。
4. 运行直接测试与类型检查;共享组件变更必须检查全部消费者。 4. 按 `AI工程执行与协作约束.md` 的“验证范围选择”执行最小有效检查,不因页面修改自动全量测试、类型检查或构建;需要的重型检查经过 `local-check.ps1`。共享组件核对实际消费者,公共浮层选择器变化覆盖受影响的嵌套、Teleport、工具栏及全屏场景。
5. 不触发 Jenkins、不部署、不提交,除非当前对话另有明确授权。 5. 不触发 Jenkins、不部署、不提交,除非当前对话另有明确授权。
## 已确认示例 已改造弹框回看时,复用原固定编号清单,从本轮确定的当前项逐个处理,不另建全量清单、不重排编号。单项流程为“原改造记录与当前代码核对 → 实际截图核对 → 明确保留项和必要局部修正 → 有修改时完成相应代码检查 → 本项人工确认 → 下一项”。缺少截图时只记录源码事实与待核对项,不声称视觉通过;本项未确认前不并行修改后续弹框。复杂窗口的分栏、步骤、树表、预览与已确认尺寸分别核对,不按普通表单模板统一重排。
Admin 客户管理原型: ## 证据记录
- 客户详情:独立页面(`page-tenant-detail`)。 逐操作矩阵记录:页面/路由、具体操作及承载方式、原型或用户确认依据、采用的主规范章节/业务例外、自动检查结果和人工截图结论。各模块复用现有记录,不另建一份全端进度副本。示例原型的尺寸不覆盖当前已确认的业务尺寸。
- 新增客户:居中宽版弹框(`modal-tenant-add`,宽度约 1120px),基础资料和联系与商务使用三列,地址、备注和资质表格整行。
- 编辑客户:复用新增客户的居中宽版三列弹框(`modal-tenant-edit`,宽度约 1120px)。
- 重置密码:居中弹框(`modal-tenant-reset-password`,宽度约 520px)。
- 入驻审核:居中弹框(`modal-tenant-audit`,宽度约 900px)。
这些结论只适用于上述操作,不自动推广到其他页面。 人工核对独立打开/刷新、列表到详情、页签切换、长内容、宽表、空态、部分数据、失败与重试、只读/无权限及浮层普通/全屏/关闭重开。自动检查不能证明浏览器像素布局和实际滚动已通过。
+4
View File
@@ -1,7 +1,11 @@
# Admin 列表样式推广核对记录 # Admin 列表样式推广核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 本轮依据与边界 ## 本轮依据与边界
2026-10-21 后续视觉确认:列表页签对齐与灰白斑马纹以[蓝白工作台当前规范](界面参考/蓝白卡片式工作台风格参考.md#视觉基线与维护入口)为准;下文“无斑马纹”为此前批次实现记录,不再作为接入要求。
2026-09-30,用户确认排车列表样式后授权按客户管理、国内仓、货柜管理、海外仓顺序推广;特殊页面保留待人工确认。直接视觉依据为本轮截图 `41fea1ee-f30a-46db-97b0-82ec96846ec7/image-1.png` 与 [排车样板](Admin排车列表样式试点.md)。仅修改测试环境工作区 `apps/admin-web`,不部署或发布。 2026-09-30,用户确认排车列表样式后授权按客户管理、国内仓、货柜管理、海外仓顺序推广;特殊页面保留待人工确认。直接视觉依据为本轮截图 `41fea1ee-f30a-46db-97b0-82ec96846ec7/image-1.png` 与 [排车样板](Admin排车列表样式试点.md)。仅修改测试环境工作区 `apps/admin-web`,不部署或发布。
统一布局:左侧列表名称、右侧原业务按钮与字段设置,搜索和表格位于同一连续卡片。仅列表操作列采用蓝色普通文字、红色危险文字、悬停无下划线;查询、顶部、弹框按钮不变。列显隐、排序和拖动宽度使用公共浏览器偏好存储。保持所有业务字段、状态、权限和事件,不改变详情、新增、编辑、审核、文件预览与删除确认的承载方式。 统一布局:左侧列表名称、右侧原业务按钮与字段设置,搜索和表格位于同一连续卡片。仅列表操作列采用蓝色普通文字、红色危险文字、悬停无下划线;查询、顶部、弹框按钮不变。列显隐、排序和拖动宽度使用公共浏览器偏好存储。保持所有业务字段、状态、权限和事件,不改变详情、新增、编辑、审核、文件预览与删除确认的承载方式。
+13 -1
View File
@@ -1,5 +1,17 @@
# Admin 国内仓样式核对记录 # Admin 国内仓样式核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 弹框逐项复核(2026-10-21)
用户要求收紧测量样板推广范围,并按既有改造记录逐个回看。继续使用本文[固定编号清单](#当前修改的截图核对清单),编号不变;该清单兼作此前跨模块弹窗改造的复核入口。旧记录中的三色分区、连续编辑表和历史自动检查是当时的实现事实,不作为本轮必须保留的目标。当前规则以[弹框与表单](Admin高密度界面规范.md#弹框与表单)为准,逐项方法以[执行与验收](Admin-Client前端原型还原验收规则.md#执行与验收)为准。
用户本轮明确跳过 **第 1–20 项**,记录为“按用户要求跳过”,不记为视觉通过。当前项为 **第 21 项:编辑库位**;本轮尚无人工确认完成项。第 21 项确认后再看第 22 项,不批量修改后续窗口。历史截图与修正记录保留,不直接记为本轮通过。
| 当前编号/入口 | 已核对的源码事实 | 本项待截图核对与处理 | 本轮状态 |
|---|---|---|---|
| 21:国内头程 → 库位管理 `/master-data/locations` → 库位行的「编辑」 | `apps/admin-web/src/modules/warehouse-resources/locations/pages/LocationsView.vue` 的 `editorOpen` 弹框;宽度 `min(1000px, calc(100vw - 28px))`,双列表单、标签在上;标题含库位编码,编辑时所属仓库与状态禁用;模板未使用彩色分区 `data-tone` | 核对实际底色、1000px 双列布局是否合适、只读与可编辑字段辨识、长库位编码与校验错误、底栏及字段间距;保留原字段、保存、取消与编辑锁定,不按测量样板重排 | 源码已核对;页面代码未修改,待本轮人工截图 |
## 弹框可用性回归排查(2026-10-21) ## 弹框可用性回归排查(2026-10-21)
本轮仅修展示,保留已隐藏的长汇总、订单数量连续性与旧请求防覆盖、既有权限/API/状态/金额。依据本轮用户“弹框布局混乱”反馈及下表实际组件结构排查;没有新增真实页面截图,不把自动检查当成视觉验收。 本轮仅修展示,保留已隐藏的长汇总、订单数量连续性与旧请求防覆盖、既有权限/API/状态/金额。依据本轮用户“弹框布局混乱”反馈及下表实际组件结构排查;没有新增真实页面截图,不把自动检查当成视觉验收。
@@ -85,7 +97,7 @@
## 当前修改的截图核对清单 ## 当前修改的截图核对清单
按用户最新要求持续维护固定编号:先完成模块代码,再按本清单逐条提供截图。1—13 沿用对话中既有编号,14—17 对应此前“测量 1—4”。新增条目只向后追加,不因插入模块重排已提供编号。下表记录已落地的本次弹窗样式、共享变化及保留编号的关联核对;代码检查与人工截图结论分别记录在后文,列入清单不代表所有状态已视觉通过。 本清单保留既有改造编号与历史截图重点,当前逐项复核进度见[弹框逐项复核](#弹框逐项复核2026-10-21)。下表中的浅色分区、连续编辑表等文字只描述此前改造,不是本轮必须保留或推广的目标。1—13 沿用对话中既有编号,14—17 对应此前“测量 1—4”;新增条目只向后追加,不因插入模块重排编号。代码检查与人工截图结论分别记录,列入清单不代表本轮视觉通过。
| 编号 | 菜单 → 操作 | 本次改动及截图重点 | | 编号 | 菜单 → 操作 | 本次改动及截图重点 |
|---|---|---| |---|---|---|
+11
View File
@@ -1,5 +1,7 @@
# Admin 客户管理样式核对记录 # Admin 客户管理样式核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 范围与依据 ## 范围与依据
按当前客户管理导航的两个入口:客户列表、海外仓阶梯费用;客户详情及两个入口实际调用的编辑、审核、预览一并收敛。用户要求按钮使用纯文字,避免图标占位;详情页签保留已确认的彩色 Emoji。沿用《Admin 高密度界面规范》,验收视口为 1920×1080、100% 缩放。 按当前客户管理导航的两个入口:客户列表、海外仓阶梯费用;客户详情及两个入口实际调用的编辑、审核、预览一并收敛。用户要求按钮使用纯文字,避免图标占位;详情页签保留已确认的彩色 Emoji。沿用《Admin 高密度界面规范》,验收视口为 1920×1080、100% 缩放。
@@ -121,3 +123,12 @@
确认的问题:新增/编辑客户仍为已确认的 1120px 居中框,但基础资料与联系商务的短字段回退成两列;资质区前的表单因此加长。恢复两个分组每行三个短字段,保持原字段顺序、必填项和绑定;注册资本、地址、备注保留整行。普通标签宽度为 120px,较长的统一社会信用代码标签单独保留 144px。客户计费、资质预览、审核、结果及危险确认的原有承载未改。 确认的问题:新增/编辑客户仍为已确认的 1120px 居中框,但基础资料与联系商务的短字段回退成两列;资质区前的表单因此加长。恢复两个分组每行三个短字段,保持原字段顺序、必填项和绑定;注册资本、地址、备注保留整行。普通标签宽度为 120px,较长的统一社会信用代码标签单独保留 144px。客户计费、资质预览、审核、结果及危险确认的原有承载未改。
实际挂载验证包含三列单元格与整行跨列、客户名称真实 blur 校验后的错误提示、底部保存入口、原编辑与资质预览行为。测试插件按本项目其他 Element 行为测试采用同一 CJS 运行时,避免混用 ES/CJS 表单上下文使校验无法触发。客户 34 项和消息中心 22 项定向回归通过;该结果只证明挂载与交互,不证明真实排版已验收。普通/全屏、长公司名称、信用代码、文件名、多条错误、关闭重开与预览关闭后返回编辑,均待用户 1920×1080、100% 人工截图确认。 实际挂载验证包含三列单元格与整行跨列、客户名称真实 blur 校验后的错误提示、底部保存入口、原编辑与资质预览行为。测试插件按本项目其他 Element 行为测试采用同一 CJS 运行时,避免混用 ES/CJS 表单上下文使校验无法触发。客户 34 项和消息中心 22 项定向回归通过;该结果只证明挂载与交互,不证明真实排版已验收。普通/全屏、长公司名称、信用代码、文件名、多条错误、关闭重开与预览关闭后返回编辑,均待用户 1920×1080、100% 人工截图确认。
## 2026-10-22 客户编辑表单确认
用户提供当前客户编辑弹框截图并确认继续采用这套输入控件外观;通用规则唯一维护在[Admin 界面规范“输入框与字段”](Admin高密度界面规范.md#输入框与字段),本节仅记录本窗口落点。
- 保留 1120px 弹框、三列短字段及注册资本/地址/备注整行;普通标签 120px,“营业执照企业名称”和统一社会信用代码标签单独 144px。
- 输入控件白底、浅灰边框、8px 圆角,悬停加深、聚焦蓝框;注册资本与账期数字左对齐,客户昵称占位文字为“选填,默认自动生成”。通过 `density-form--outlined` 接公共边框,客户模块仅限定本编辑框的圆角与数值对齐。
- 删除底部保存/审核流程说明及已登记信用代码旁的只读说明;信用代码仍按原资格只读,保存、资质上传及提交审核行为不变。“企业认证资料”、帮助入口和现有状态标签同一行。
- 用户截图已核对输入边界和企业名称标签单行;后续数字对齐、占位文字及状态同行调整已获用户确认纳入规范。未据此推定资质区下半部分、错误态、普通/全屏及关闭重开的全部场景均完成视觉验收。相关定向检查已通过,本次写规范仅核对文档差异与引用,不重复执行业务测试。
+2
View File
@@ -1,5 +1,7 @@
# Admin 排车列表一体式布局试点 # Admin 排车列表一体式布局试点
> 文档职责:仅维护历史试点依据与检查记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
初次试点仅接入测试环境代码的 `/overseas-warehouse/dispatches`。依据为用户提供截图及 `新版.html` 的 `page-outbound-vehicle`(4472–4484 行);用户明确保留字段设置、搜索与表格不分离。2026-09-30 用户确认样板后授权推广至客户管理、国内仓、货柜管理和海外仓,并继续客户服务、海外业务、财务管理、通用、系统管理及消息列表。范围及例外见 [推广核对记录](Admin列表样式推广核对记录.md)。 初次试点仅接入测试环境代码的 `/overseas-warehouse/dispatches`。依据为用户提供截图及 `新版.html` 的 `page-outbound-vehicle`(4472–4484 行);用户明确保留字段设置、搜索与表格不分离。2026-09-30 用户确认样板后授权推广至客户管理、国内仓、货柜管理和海外仓,并继续客户服务、海外业务、财务管理、通用、系统管理及消息列表。范围及例外见 [推广核对记录](Admin列表样式推广核对记录.md)。
船期日历单页收尾按用户当前截图接入相同的页头、筛选和连续容器,通过 `results` 插槽保留日历与当日船次详情。日历不具备表格列配置,明确关闭字段设置且不添加分页;日历日期格和右侧详情布局由业务页维护。 船期日历单页收尾按用户当前截图接入相同的页头、筛选和连续容器,通过 `results` 插槽保留日历与当日船次详情。日历不具备表格列配置,明确关闭字段设置且不添加分页;日历日期格和右侧详情布局由业务页维护。
+26 -1
View File
@@ -1,5 +1,7 @@
# Admin 海外仓样式核对记录 # Admin 海外仓样式核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 范围与依据 ## 范围与依据
本轮用户确认继续“海外仓”模块。范围以 `adminNavigation.ts` 的 `overseas-inventory` 分组为准,按当前公开菜单、对应独立详情和实际调用的作业弹框逐项核对;当前分组包含11个菜单,废弃单和海外库位管理均单独登记。客户服务、海外业务、隐藏产品库和旧箱号页面不在范围内。 本轮用户确认继续“海外仓”模块。范围以 `adminNavigation.ts` 的 `overseas-inventory` 分组为准,按当前公开菜单、对应独立详情和实际调用的作业弹框逐项核对;当前分组包含11个菜单,废弃单和海外库位管理均单独登记。客户服务、海外业务、隐藏产品库和旧箱号页面不在范围内。
@@ -28,7 +30,7 @@
| 派送单资料 | `DeliveryDocumentsDialog` 上传、替换、删除、下载、保存、重新加载确认 | 1040px;关闭放弃未保存修改 | 保留文件生命周期,正文单一滚动区 | | 派送单资料 | `DeliveryDocumentsDialog` 上传、替换、删除、下载、保存、重新加载确认 | 1040px;关闭放弃未保存修改 | 保留文件生命周期,正文单一滚动区 |
| 换标单 | `RelabelOrdersView` 新增、审核、查看 | 760px 表单;独立详情 | 保留创建与审核模式、状态候选与必填字段 | | 换标单 | `RelabelOrdersView` 新增、审核、查看 | 760px 表单;独立详情 | 保留创建与审核模式、状态候选与必填字段 |
| 换标详情 | `RelabelOrderDetailView` 完工证据、总 PDF、明细 PDF 上传/预览 | 连续详情、预览 900px | 保留 PDF 物理预览尺寸与绑定数据,紧凑文件行 | | 换标详情 | `RelabelOrderDetailView` 完工证据、总 PDF、明细 PDF 上传/预览 | 连续详情、预览 900px | 保留 PDF 物理预览尺寸与绑定数据,紧凑文件行 |
| 托盘管理 | `PalletsView` 汇总、新增、编辑、查看;`PalletDetailView` | 760px 表单;独立详情 | 汇总改紧凑行;保留仓库编辑限制 | | 托盘管理 | `PalletsView` 汇总、新增、编辑、查看;`PalletDetailView` | 顶部四张等宽统计卡片,采用公共紧凑卡片及图标样式,不继承186px最小高度;760px 表单;独立详情 | 统计卡片按2026-10-22用户参考截图并依后续反馈压缩高度:白底圆角、浅色图标、蓝色数字和“个”单位;原四项统计与筛选口径、仓库编辑限制保留;压缩后待人工1920×1080、100%缩放截图确认 |
| 库存管理 | `InventoryView` 汇总、查看、导出;`InventoryDetailView` | 独立详情,库位/托盘箱号/流水表 | 连续汇总、信息表;不改变库存口径 | | 库存管理 | `InventoryView` 汇总、查看、导出;`InventoryDetailView` | 独立详情,库位/托盘箱号/流水表 | 连续汇总、信息表;不改变库存口径 |
| 库存流水 | `InventoryTransactionsView` 导出、返回、关联数据 | 列表深链;共享关联框 1060px | 只为本轮调用显式接入共享框,保留分区域只读权限 | | 库存流水 | `InventoryTransactionsView` 导出、返回、关联数据 | 列表深链;共享关联框 1060px | 只为本轮调用显式接入共享框,保留分区域只读权限 |
| 退货库存管理 | `ReturnInventoryManagementView mode=inventory` | 库存/流水页签、查询、分页 | 两页签保留各自数据和查询模式 | | 退货库存管理 | `ReturnInventoryManagementView mode=inventory` | 库存/流水页签、查询、分页 | 两页签保留各自数据和查询模式 |
@@ -48,6 +50,14 @@
## 用户截图复核修正 ## 用户截图复核修正
2026-10-21 接续原“整理页面风格”对话的两张截图:`b93804b4-c276-49bb-bc41-7fc054f889f5` 显示排车顶部执行阶段比下方审核分区多缩进一层;`72efa811-a846-41a4-a074-3dde6d4c2ae0` 为用户指定的销量分析灰白行底色样板。本次仅调整公共对齐与表格斑马纹,修复后仍待人工截图确认。
| 操作 | 截图现状与目标 | 本次修正 |
|---|---|---|
| 排车列表执行阶段切换、审核分区及筛选 | 顶部页签叠加工具栏 12px 缩进,下方分区未叠加 | 主列表首个状态页签由公共样式抵消重复缩进;前置返回按钮、嵌套列表保留自己的间距与布局 |
| 排车及其他标准列表查看、悬停、选中 | 多数列表显式关闭斑马纹;销量分析默认灰白相间 | 清理历史关闭属性,使用 DataTable 默认斑马纹;保留悬停/选中提示和业务行色,行底色不穿透内嵌表 |
| 主列表底部分页 | 用户补充底部 padding 过大;集成列表仍为最小 64px、上下 14px | 公共主列表分页收紧到最小 48px、上下 6px、左右 12px;保持按钮尺寸与换行,内嵌表格不继承该布局;待人工截图 |
用户提供尾程详情与国内订单详情截图后,确认上一轮仅接入密度变量不足以达到样板一致:尾程存在重复页头标签、缺少业务摘要、自定义绿色状态边框、页签首项贴边且选中底色缺失、基本信息被两个标题拆断。截图证据为本轮附件 f76bcf5f(尾程)与 151a1d06(国内样板)。 用户提供尾程详情与国内订单详情截图后,确认上一轮仅接入密度变量不足以达到样板一致:尾程存在重复页头标签、缺少业务摘要、自定义绿色状态边框、页签首项贴边且选中底色缺失、基本信息被两个标题拆断。截图证据为本轮附件 f76bcf5f(尾程)与 151a1d06(国内样板)。
| 操作 | 样板及现状 | 本次修正 | | 操作 | 样板及现状 | 本次修正 |
@@ -171,6 +181,21 @@
截图337—351唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本地Mock覆盖先建空单、档案/临时资源、组配置保留、整组来源展开、未知结果原请求、明确拒绝重选及已证明转换后的详情重读;未真实创建或转换草稿、排车、档案及业务数据,未提交、推送或部署。下一批接续排车详情的维护/审核/移货/卸货顺序等动作窗口及附件预览,其余Admin模块仍待整理。 截图337—351唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本地Mock覆盖先建空单、档案/临时资源、组配置保留、整组来源展开、未知结果原请求、明确拒绝重选及已证明转换后的详情重读;未真实创建或转换草稿、排车、档案及业务数据,未提交、推送或部署。下一批接续排车详情的维护/审核/移货/卸货顺序等动作窗口及附件预览,其余Admin模块仍待整理。
## 排车第14、16项当前核对(2026-10-22)
依据本轮确认:移除“调整已有排车货物”入口,调度审核采用约1100px居中弹框,信息、三类照片与审核操作分区清晰。尺寸与滚动继续使用《Admin高密度界面规范》的资料审核弹框规则。
| 页面 / 操作 | 确认承载与布局 | 当前实现 | 验收结论 |
|---|---|---|---|
| 智能排车 / 新建安排 | 保留新建草稿选货;删除已有排车调整入口 | 删除旧页签、独立组件及调用;保留三栏草稿选货、分组转换与空单创建 | 自动检查通过;待1920×1080、100%缩放实页确认 |
| 排车 / 调度及理货审核 | 居中弹框约1100px,三类照片横向并排 | 1100px及原全屏能力;车辆与货物、排车与预约、照片和审核意见分区;底部保留驳回、审核通过 | 自动检查通过;待1920×1080、100%缩放实页确认 |
本轮159项相关检查通过(5份业务测试157项、2项排车样式合同),AGENTS索引合同1622项通过。第15项已核对各阶段、装车前分区及DELIVERY/PICKUP/LOCAL_TRUCK均显示后端主单createdAt,沿用现有实现。共享样式整文件另有4项非本轮页面失败:订单详情概览类、货柜尾程费用行操作类、订舱详情局部36px规则、入仓预约分区旧断言;未修改对应页面,不将其计作通过。本轮仅本地实现与检查,未执行提交、部署或真实HTTP验收。
本轮文件(相对`apps/admin-web/`):修改`src/modules/overseas-warehouse/components/SmartDispatchDialog.vue`、`SmartDispatchDialog.test.ts`、`DispatchWorkflowDialog.vue`、`DispatchWorkflowDialog.test.ts`、`DispatchWorkflowDialog.layout.test.ts`;删除同目录`SmartDispatchExistingCargo.vue`及`SmartDispatchExistingCargo.test.ts`;同步`src/modules/overseas-warehouse/AGENTS.md`、`src/modules/overseas-warehouse/pages/prototypeContract.test.ts`、`src/styles/adminDensity.test.ts`及本记录。前述预约/BOL与6–9、11项改动保留;此包已停止编辑,交总控统一集成验收。
以下2026-10-20记录保留当时证据;本轮涉及的入口与审核尺寸以本节为准。
## 统一弹窗整理:排车详情操作与取证附件(2026-10-20) ## 统一弹窗整理:排车详情操作与取证附件(2026-10-20)
实际操作承载为DispatchWorkflowDialog,直接引用DispatchResourceFields、DispatchArrangeFields和DispatchEvidenceFiles;后者也供DispatchDetailView只读取证使用。保留560/760/1120px动作尺寸及900px图片预览,不改变详情路由、服务器Gate、版本化命令、费用覆盖、文件鉴权或恢复协议。 实际操作承载为DispatchWorkflowDialog,直接引用DispatchResourceFields、DispatchArrangeFields和DispatchEvidenceFiles;后者也供DispatchDetailView只读取证使用。保留560/760/1120px动作尺寸及900px图片预览,不改变详情路由、服务器Gate、版本化命令、费用覆盖、文件鉴权或恢复协议。
+15
View File
@@ -1,5 +1,20 @@
# Admin 货柜管理样式核对记录 # Admin 货柜管理样式核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 拖车预约说明提示清理(2026-10-21)
依据用户本轮拖车预约详情截图:移除说明图标及其提示内容,让页面更清爽。
| 页面 / 操作 | 现有承载与截图依据 | 本次变更 | 验收 |
|---|---|---|---|
| 拖车预约详情 | 原独立详情页;截图中的历史关联快照、拖车费、派车信息 | 删除三处 InlineHelp 及无用导入/样式;共享表单的新建与编辑入口同步移除费用和派车说明 | 定向5文件44项通过;待人工1920×1080、100%截图确认 |
| 拖车预约详情 → 单号去重 | 用户追加截图指出同一提单号显示四次 | 顶部仅保留预约号和状态,删除包含订舱号/提单号/订单号的副标题及历史关联快照行;订舱号在选择框、提单号与仓库在订舱带入信息各保留一处 | 定向5文件44项通过;待人工截图确认 |
保留订舱/供应商业务资料、字段、折叠区、校验、权限、状态操作及真实错误/阻断提示;只对展示位置去重,不改数据或共享提示组件。
本次类型检查、生产构建通过;全量4255项中4254项通过,唯一失败是并行排车文案改动后的 `overseas-warehouse/pages/prototypeContract.test.ts:264` 仍断言旧提示文字,与本次拖车提示清理无关。报告:工作区 `.codex-tmp/trucking-help-cleanup-20261021-tests.json`、`.codex-tmp/trucking-help-cleanup-20261021-full.json`。未改动排车在途文件。
## 浮层隔离与附件布局复查(2026-10-21) ## 浮层隔离与附件布局复查(2026-10-21)
本轮由用户反馈“推广后弹框混乱、不好用”触发,保留原承载与业务规则;不因定向测试通过关闭人工验收。 本轮由用户反馈“推广后弹框混乱、不好用”触发,保留原承载与业务规则;不因定向测试通过关闭人工验收。
+236 -115
View File
@@ -1,35 +1,32 @@
# Admin 高密度界面规范 # Admin 界面规范
## 确认依据与适用范围 本文件是 **Admin 样式的唯一主规范**,统一维护蓝白风格、业务密度、列表、详情、弹窗、提示文字与公共样式接入。沿用原文件路径,已有引用无需迁移。验收视口为 **1920×1080,浏览器缩放 100%**。
2026-09-14,用户在 Admin 样式优化对话中确认订单列表样板,并要求以此推进国内仓样式统一。样板包括订单列表、测量与订单审核弹框、订单详情的基本信息、货品信息、费用信息、状态历史、测量数据、其他、拆分履约。详情页签使用与客户管理一致的彩色 Emoji 图标。 ## 按任务阅读
本规范固定该样板的视觉与密度规则。验收视口为 **1920×1080,浏览器缩放 100%**。其他页面采用本规范不等于其功能或视觉已验收。 先看本节和“基本原则”,再只读任务对应章节,不要求每次通读全文。
这是一套后续 Admin 页面可复用的基线。新增菜单按“新模块接入规则”实施,不复制订单或客户模块 CSS;货柜管理的入口与共享组件边界见 [货柜管理核对记录](Admin货柜管理样式核对记录.md)。海外仓的 10 个菜单及共享详情边界见 [海外仓核对记录](Admin海外仓样式核对记录.md)。列入下一批入口不代表页面已完成改造或验收。 | 当前任务 | 本文入口 |
|---|---|
| 调整列表、搜索、页签、行操作 | [列表](#列表)、[尺寸与颜色](#尺寸与颜色) |
| 调整详情、费用、历史或测量 | [详情与基本信息](#详情与基本信息)、[费用、汇总与测量](#费用汇总与测量)、[历史、备注与空态](#历史备注与空态) |
| 新增、编辑、审核、上传、预览或确认弹窗 | [弹框与表单](#弹框与表单) |
| 提示小字、加载反馈、点击后页面跳动 | [提示文字与加载布局](#提示文字与加载布局) |
| 配色、工作台、指标卡或图表 | [蓝白主题与图表](#蓝白主题与图表);需要查看样板时再打开[样板目录](界面参考/蓝白卡片式工作台风格参考.md#其他页面该参考哪个样板) |
| 公共样式维护或新页面接入 | [公共样式维护边界](#公共样式维护边界)、[新模块接入规则](#新模块接入规则) |
| 确认验收方法与证据 | [前端验收规则](Admin-Client前端原型还原验收规则.md);其中不再另定 Admin 样式 |
当前推广范围包括 Admin 导航中的“国内仓”,以及本轮确认的“客户管理”两个入口:客户列表、海外仓阶梯费用,包含各入口实际使用的详情、页签、新增、编辑、审核、确认、图片/文件预览和其他业务弹框。客户管理下的海外仓阶梯费用属于客户费用配置,不扩大到海外仓作业菜单。跨菜单跳转应记录目标入口和共享组件影响;不因此把另一个菜单的全部页面自动加入改造范围。Client、PDA 与其他菜单采用规范时另行明确范围。 ## 适用范围与文档职责
样板实现入口: - 本规范是后续 Admin 改版基线:订单与客户管理样板确立业务密度,测量样板仅供参考弹窗基础框架,其分区配色与作业布局属于局部例外;蓝白自营样板确立配色、工作台和少提示文字风格。已确认的样式优先于历史原型中的对应外观;业务字段、分组、权限、状态、API、计算口径及页面/弹窗/抽屉承载方式仍按当前业务契约和逐操作确认保留。
- 规范适用于 Admin;Client、PDA 不自动套用。按用户确定的模块和操作范围逐批实施,规范统一不代表全端已改造或验收,也不授权批量替换公共默认值或发布。
- [公共密度样式](../apps/admin-web/src/styles/adminDensity.css):页面显式使用 `admin-density`,Teleport 弹框显式使用 `admin-density-dialog`;默认不改变其他菜单。 - 本文只维护当前有效规则,不并列保留已被替代的通用样式。新增确认直接修改对应条款,不在文末继续追加另一套规则。代码令牌是数值的唯一实现入口,变更须同步本文对应条款。
- [公共密度变量](../apps/admin-web/src/styles/adminDensityTokens.css):两模块的字号、间距、控件/行/按钮/页签高度、圆角、底色和按钮语义色的唯一默认值入口。 - [蓝白样板目录](界面参考/蓝白卡片式工作台风格参考.md)只保存页面参考和原图;[排车列表试点](Admin排车列表样式试点.md)只保存历史依据。二者不再定义通用样式。
- [维护合同检查](../apps/admin-web/src/styles/adminDensity.test.ts):限定已接入消费者,检查变量归属、公共样式作用域及页面重复实现。 - 模块记录只维护本模块改造范围、业务例外、检查结果与截图证据,不覆盖本文通用规则: [国内仓](Admin国内仓样式核对记录.md)、[客户管理](Admin客户管理样式核对记录.md)、[货柜管理](Admin货柜管理样式核对记录.md)、[海外仓](Admin海外仓样式核对记录.md)、[列表推广](Admin列表样式推广核对记录.md)、[自营](../apps/admin-web/src/modules/self-operated/operation-matrix.md)。只读本轮实际涉及的记录,不要求全部加载。
- [测量作业密度](../apps/admin-web/src/modules/inbounds/measurement/measurementDensity.css):测量与审核共享作业布局,宽度由测量弹框自身提供。
- [国内仓逐操作核对记录](Admin国内仓样式核对记录.md):三组页面的承载方式、例外和验收证据。
- [客户管理局部密度样式](../apps/admin-web/src/modules/customers/customerDensity.css):客户列表、详情、计费与相关弹框的显式密度入口。
- [客户管理逐操作核对记录](Admin客户管理样式核对记录.md):两个菜单入口及关联详情、审核、编辑与预览的范围和人工验收项。
- [订单列表与详情](../apps/admin-web/src/modules/unified-orders/pages/UnifiedOrdersView.vue):列表、顶部摘要、描述表、页签、日志表及订单弹框。
- [订单局部密度样式](../apps/admin-web/src/modules/unified-orders/styles/orderDensity.css):费用、履约与测量弹框的局部样式。
- [国内仓导航](../apps/admin-web/src/core/navigation/adminNavigation.ts):`domestic-warehouse` 分组是菜单范围来源。
本规范与 [Admin/Client 前端原型还原验收规则](Admin-Client前端原型还原验收规则.md) 配合使用。在本规范适用范围内,已确认的密度、容器和页签图标规则优先于历史原型中的大卡片、大留白和单色页签图标;字段、业务分组、权限、操作语义及页面/弹框/抽屉承载方式仍按当前业务契约和逐操作矩阵核对。样板中某个字段的专属宽度不能直接当作其他页面的固定宽度。
2026-10-19,用户确认以下“[弹框与表单](#弹框与表单)”作为所有 Admin 弹窗的统一目标规范,按大模块逐组落实,首组为导航“国内头程”。该弹窗目标范围补充上文早期推广范围;页面、列表、详情页签及 Client/PDA 仍按各自已确认范围执行。规范固定不表示全部弹窗已改造或验收。
## 基本原则 ## 基本原则
表格顶部操作栏的桌面尺寸统一由 `DataTable.vue` 维护:`padding: 6px 12px`、`min-height: 44px`。普通栏与 `.is-compact` 共用尺寸,后者只改变对齐;不再按 1920px 断点切换尺寸。公共密度样式和业务页面不得重复声明这部分 padding / height;组件现有移动端排列规则保留。 表格顶部操作栏的基础桌面尺寸由 `DataTable.vue` 维护:`padding: 6px 12px`、`min-height: 44px`;显式接入蓝白主题的主列表使用本文“蓝白主题与图表”的 48px 最小高度。普通栏与 `.is-compact` 只改变对齐,不按 1920px 断点切换尺寸;页面不得重复声明公共 padding / height,已有移动端排列规则保留。
1. 普通业务内容采用连续白底、细边框、描述表与数据表格。短字段以“标签 + 值”连续排列,不制作独立指标卡片。 1. 普通业务内容采用连续白底、细边框、描述表与数据表格。短字段以“标签 + 值”连续排列,不制作独立指标卡片。
2. 先压缩重复标题、重复汇总、容器层数和无意义留白,再调整列宽与行高。正文保持可读,不通过缩小整页、浏览器缩放或截断关键值提高密度。 2. 先压缩重复标题、重复汇总、容器层数和无意义留白,再调整列宽与行高。正文保持可读,不通过缩小整页、浏览器缩放或截断关键值提高密度。
@@ -51,42 +48,64 @@
| 页签图标 | 17px,固定 18px 占位,独立彩色显示 | | 页签图标 | 17px,固定 18px 占位,独立彩色显示 |
| 普通表格行 | 基准 36px,单元格上下内边距 4px;按内容自然增高 | | 普通表格行 | 基准 36px,单元格上下内边距 4px;按内容自然增高 |
| 普通输入框与工具栏按钮 | 通常 32px | | 普通输入框与工具栏按钮 | 通常 32px |
| 表格内操作按钮 | 28px,保留文字、焦点和禁用反馈 | | 表格内操作按钮 | 基准 28px;已接入标准列表使用纯文字行操作,保留焦点、禁用与处理中状态 |
| 区块间距 | 通常 12px;标准列表遵守现有 ListPageLayout 的单一间距,不叠加页级空白 | | 区块间距 | 通常 12px;标准列表遵守现有 ListPageLayout 的单一间距,不叠加页级空白 |
| 普通内容内边距 | 12px;弹框正文 12px 16px | | 普通内容内边距 | 12px;弹框正文 12px 16px |
| 容器圆角 | 0–4px;普通数据区无装饰阴影、渐变或上浮效果 | | 容器圆角 | 普通业务数据区 0–4px;独立搜索区 5px、作业分区 8px、蓝白指标卡 16px 按各自规则,不叠加整页外框 |
| 内容底色 | 白色 | | 内容底色 | 白色 |
| 表头、描述表标签底色 | 浅灰,参考 #f8fafc / #f9fafb | | 表格表头 | 浅蓝底 `#edf4ff`、深蓝文字 `#284b78`,标准列表、工作台、弹框/抽屉内 Element 表格及 `density-table` 共用 |
| 描述表标签底色 | 浅灰,参考 #f8fafc / #f9fafb,不跟随表格表头变蓝 |
| 边框 | 现有 `--cc-border`;表格参考 #e5e7eb | | 边框 | 现有 `--cc-border`;表格参考 #e5e7eb |
| 悬停、斑马纹 | 轻量区分,参考 #f3f7fb / #fcfcfd | | 悬停、斑马纹 | 轻量区分,参考 #f3f7fb / #fcfcfd |
颜色优先复用当前 `--cc-*` 与 Element Plus 语义变量。金额和测量数字可使用等宽数字排版,只有总计或关键结论适度加粗,不将每个值都加粗。 表头颜色由 `foundation.css` 的 `--cc-list-table-header-bg` 与 `--cc-list-table-header-text` 唯一维护。颜色优先复用当前 `--cc-*` 与 Element Plus 语义变量。金额和测量数字可使用等宽数字排版,只有总计或关键结论适度加粗,不将每个值都加粗。
## 提示文字与加载布局
2026-10-21 用户确认:Admin 页面默认不额外添加提示小字、装饰性副标题、功能介绍或独立说明行;用户明确要求展示的业务信息按实际用途保留。
- 常规加载、刷新、查询及页签切换不新增“页签数量加载中…”“数据加载中…”等独立文字行,不为每个局部请求补充提示小字。
- 加载反馈复用原位置、固定尺寸的加载图标、按钮 loading、区域遮罩或与内容等尺寸的骨架;加载前、加载中、完成后保持页签、工具栏、筛选区和表格的布局稳定,不因临时提示插入或移除而推挤内容、改变区块高度或造成页面跳动。不为被禁止的提示行额外预留空白。
- “覆盖加载状态”“保留状态反馈”不等于新增可见说明行。保留 `aria-busy` 等可访问语义;必要的读屏播报不得占用可见布局。
- 接口失败与重试、表单校验、权限限制、过期或异常状态、实际操作阻断和危险后果继续清楚反馈,在对应位置集中表达,避免重复;不得以精简小字为由隐藏影响用户判断或操作的信息。
- **详细口径按需展开。** 计算公式、统计口径、图例、来源解释和操作说明放入已有说明入口或 `InlineHelp`/tooltip,支持键盘聚焦;不为每张卡增加介绍段、装饰性副标题或长解释。确需影响判断的周期、单位和版本保留最短必要表达。
- **同一事实只讲一次。** 多张卡共用的统计周期、完整性或来源在分区层级统一表达;卡片仅显示自身特有状态。主状态、进度环、数量卡与阶段节点不重复整段等待原因。
- **异常优先合并到一个清晰入口。** 同一异常影响多块内容时,在相关区域保留一条简短状态与查看详情/重试入口;不要在每张卡和图表下重复警告。独立异常仍在对应位置明确呈现,不能合并后丢失作用范围。
- **关键异常与阻断常驻。** 当前失败、未知、陈旧、权限不足、操作阻断及危险后果必须能直接识别;细节可以展开,关键状态不能只藏进 tooltip。正常完整状态不需要逐卡反复宣告。
- **事实与视觉分开。** `0` 表示已知零值,`—` 或“待确认”表示未知;历史结果和陈旧快照要有简短标识。精简文案不得把未知显示为零、把暂停显示为完成,也不得隐藏真实风险。
库存分析样板按这套规则收敛:快照解释、“本仓概览/截至日期/采集时间”整行及图表范围说明移入已有说明入口;正常指标卡只保留名称、数值和单位,删除重复的“已确认”。真实未知、陈旧和异常继续显示简短提示。删除独占一行的“展开图表”,将图表操作并入顶部简短入口。完整数值来源、采集时点和估算细节可在说明或 tooltip 中查看;估算值必须能辨认其估算属性,不得因精简文案冒充实测值。
## 各类页面规则 ## 各类页面规则
### 列表 ### 列表
- 继续使用 `ListPageLayout + QueryToolbar + DataTable`。查询、批量操作、表格、分页构成连续工作区,不重复放置正文大标题或统计卡片。 - 使用 `ListPageLayout + QueryToolbar + DataTable`,搜索/筛选区与下方表格分成独立区块,搜索区圆角统一 5px。`foundation.css` 的 `--cc-list-query-radius` 与 `--cc-list-query-gap` 维护尺寸;DataTable 筛选容器提供边框、底色及下方 16px 间距,内部 QueryToolbar 不重复套卡片。独立 QueryToolbar 使用相同圆角及列表已有区块间距。
- “操作”列始终第一列,需要固定时固定在左侧。最多三个高频操作直接显示,更多操作使用已有菜单约定;保留页面已确认的直接操作数量。国内仓全部 7 个菜单及客户管理的行内业务操作采用下述纯文字描边按钮。危险动作保留明确文字与确认。 - 同级状态/分类页签与顶部业务按钮共用工具栏:页签放 `toolbar-start`,操作放 `toolbar-actions`/`toolbar-end`,查询放 `filters`;蓝白页签加 `workbench-list-tabs`。不叠加重复路由标题、页签行、按钮行;保留真实业务子分区、统计数量、失败重试与当前范围。
- 列宽按实际编号、状态和按钮数量决定;不能把样板的 260px 操作列套给所有列表。核对最多按钮、加载中和权限变化后的布局。 - “操作”列在第一列,需要固定时固定在左侧。默认最多三个高频操作直接显示,其余用更多菜单;保留已确认的直接操作数量、权限和危险确认。更多入口为 `…`(`MoreHorizontal`),保留业务对象相关的可访问名称与悬停提示,菜单项纯文字。
- 数值列右对齐,单位优先放表头;编号按业务需要设置宽度。保留横向滚动、列偏好、分页和已有行内编辑能力。 - 已接入标准列表的行操作采用纯文字:无描边、填充或装饰图标,400 字重,普通操作蓝色、危险操作红色、禁用灰色、悬停无下划线。`RowActions` 用 `text-actions`;手写按钮组用 `row-actions density-actions admin-text-actions`,危险语义通过 `data-tone="danger"` 或 `type="danger"` 显式指定。统一外观由 `adminTextActions.css` 维护,不再沿用早期国内仓描边行按钮。顶部、查询及弹框提交按钮按各自用途保留,不机械套用行操作外观;尚未接入的消费者在本轮明确范围内再调整。
- 状态列前置:有主要业务编号时紧跟编号,没有编号时紧跟主要名称;多个当前状态集中排列,操作列仍在第一列。DataTable 的状态列通过 `afterColumn` 显式指定跟随的列键,恢复已保存的列序时仍遵守该位置,状态列不独立拖动;其他列的个人顺序、列宽和显隐继续保留。历史记录中的原状态、新状态及状态变化保留事件阅读顺序。
- 列宽按实际编号、状态和按钮数量决定,核对长编号、最多按钮、加载与权限变化;不把样板操作列宽套给所有列表。数值列右对齐,单位优先放表头;保留横向滚动、列偏好、分页和行内编辑。
- 标准 DataTable 沿用默认灰白斑马纹,不由页面显式关闭;行底色复用 `--admin-row-stripe`,悬停行、当前行及悬停单元格由 Element 状态样式处理,父表底色不穿透子表。
- 表格与分页交界只画一条底线:Element Plus 的 `el-table__inner-wrapper::before` 保留,紧邻该表格的 DataTable 分页不再叠加上边框;自定义结果区域仍保留原分页分隔线。不全局隐藏表格底线,避免空表和无分页表格缺边。
- `appearance="integrated"` 保留原组件组合能力,不再表示搜索与表格必须相连。样式维护在 DataTable 和公共 CSS,不为接入样式切换业务模式。
- 详情内的充值申请、账户流水等连续表格同样使用 `workbench-table is-page-surface` 去掉 DataTable 外壳的重复边框、圆角和阴影,保留表格本体边线、横向滚动和分页。筛选放在 DataTable 的 `filters` 插槽时,接入 `appearance="integrated"`,由筛选容器独占边框与底色;内部 QueryToolbar 不再绘制第二层边框或阴影。优先复用这些公共入口,不在页面追加隐藏边框的覆盖规则。
#### 国内仓行内按钮(以订单列表样板统一) #### 公共列表能力
依据用户提供的白底描边按钮参考图,订单列表行内操作采用纯文字、白底、1px 细边框,无阴影,圆角 6px;保持 28px 高、13px 字号、600 字重、左右内边距 10px、按钮间距 6px。该按钮圆角为明确例外,普通内容容器仍为 0–4px。 Admin 仍使用 Element Plus。普通 `el-select` 由构建组件解析器统一接入 `src/shared/components/AdminSelect.ts`,仅将 `filterable` 默认值设为 `true`,使用 Element Plus 原有渲染、插槽、事件和公开方法;列表、表单、弹框及分页选择框均可输入关键词筛选当前选项。已有 `remote-method`、`filter-method`、多选、禁用和清空行为保持原有配置;搜索不改变候选业务范围,也不会自动新增远程接口调用。虚拟托盘选择框 `el-select-v2` 已显式启用远程搜索。
- 默认行内操作(详情、编辑、备注、更多):蓝色文字 `#1777ff` 与浅灰边框,由 `--admin-action-neutral` 统一维护。 推广时列设置显式使用 `column-settings-mode="show"`。已有 `preference-key` 保持,新接入的退货库存、流水和箱号各使用独立偏好键。存在非阻断警告时使用 `notices` 插槽,列表失败时通过 `results-visible` 隐藏结果和分页,标题、查询与重试保持可用;`before-results` 保留原统计与汇总。特殊工作台可使用 `results` 插槽承载原内容和自身分页,公共表格不重置它的页码与每页数量。
- 审核“通过”:橙色文字与浅橙边框,保留原确认流程。
- 测量:紫色文字与浅紫边框。
- 悬停使用对应浅色底,键盘焦点保持可见;禁用、处理中状态保留。更多入口统一为 `…`(Lucide `MoreHorizontal`),保留包含业务对象的“更多操作”悬停提示和可访问名称;下拉项纯文字。
该规则覆盖订单列表、订单测量、测量数据审核、预装清单、库位管理、托盘管理、整柜业务以及其详情中的行内操作。查看/编辑/备注为默认蓝色 `#1777ff`,测量为紫色,审核为橙色,启用为绿色,停用/删除为红色。预装共用组件只在 `preload` 模式接入,已确认装柜清单模式保持原规则。顶部查询/新增/批量操作和弹框提交仍使用 32px 主次按钮,不机械改成行内按钮,也不增加样板中不存在的业务操作。 列宽保存为公共 DataTable 能力,与已有列设置一同启用(提供 `preference-key` 且列设置可用),不依赖试点样式。拖动表头边界松开时,将宽度按稳定列键写入同一份本地偏好;重排、隐藏再显示不会丢失,刷新/重新进入时恢复。账号与表格分别隔离,仅保存到当前浏览器,不跨设备同步。“恢复默认”同时重置列顺序、显隐和宽度,重新采用页面声明的 width/minWidth。未启用列设置的表格不写入列宽偏好。
#### 客户管理按钮与详情 #### 客户管理按钮与详情
- 客户列表、海外仓阶梯费用及关联详情、编辑、审核、预览的业务操作按钮采用纯文字;查询、重置、复制也去掉装饰图标。分页箭头、列设置、筛选布局、关闭与全屏等独立图标控件保留,处理中旋转图标保留。 - 客户列表、海外仓阶梯费用及关联详情、编辑、审核、预览的业务操作按钮采用纯文字;查询、重置、复制也去掉装饰图标。分页箭头、列设置、筛选布局、关闭与全屏等独立图标控件保留,处理中旋转图标保留。
- 客户列表行内按钮沿用 28px 白底描边、6px 圆角、6px 间距:详情/编辑/更多为默认蓝色 `#1777ff`,审核为橙色,重置密码为紫色,跳转登录为蓝色,启用为绿色,停用/删除为红色。更多入口与订单列表统一显示 `…`,不显示“更多”文字;悬停提示及可访问名称保留,菜单项纯文字,保留原权限与操作分配。 - 客户列表行操作采用上文统一纯文字规则;保留原权限、操作分配、更多入口和危险确认。
- 海外仓阶梯费用列表按原档位顺序显示“天数:单价”,在费用单元格中连续排列、整组自然换行;不制作每档独立白块,不强制左右两列,不隐藏后续档位。币种只在独立列展示,计费单位保留在表头;零单价照常显示 `0`,没有档位显示“—”。编辑按钮沿用默认蓝色 `#1777ff` 文字、白底描边。 - 海外仓阶梯费用列表按原档位顺序显示“天数:单价”,在费用单元格中连续排列、整组自然换行;不制作每档独立白块,不强制左右两列,不隐藏后续档位。币种只在独立列展示,计费单位保留在表头;零单价照常显示 `0`,没有档位显示“—”。列表编辑按钮沿用统一纯文字行操作。
- 阶梯费用编辑弹框中的“新增阶梯”为蓝字浅蓝边、“删除”为红字浅红边,均使用 28px 高、6px 圆角的白底纯文字按钮;客户详情的海外仓费用编辑同步执行。底部保存/取消沿用 32px 主次按钮。按钮规则同时覆盖页面与 Teleport 弹框,并显式设置普通、悬停、焦点及禁用状态,避免默认主题色覆盖。 - 阶梯费用编辑弹框中的“新增阶梯”为蓝字浅蓝边、“删除”为红字浅红边,均使用 28px 高、6px 圆角的白底纯文字按钮;客户详情的海外仓费用编辑同步执行。底部保存/取消沿用 32px 主次按钮。按钮规则同时覆盖页面与 Teleport 弹框,并显式设置普通、悬停、焦点及禁用状态,避免默认主题色覆盖。
- 客户详情保留彩色页签;企业信息用连续四组键值表,联系与合作信息保留三组键值表,长地址整行。资质文件采用连续行,企业成员使用表格。 - 客户详情保留彩色页签;企业信息用连续四组键值表,联系与合作信息保留三组键值表,长地址整行。资质文件采用连续行,企业成员使用表格。
- 客户新增/编辑保留 1120px 三列表单,入驻审核保留 1040px,箱规规则编辑保留 1200px,海外仓阶梯编辑保留 1120px。宽度属于当前内容的适配值,不推广为全局默认。 - 客户新增/编辑保留 1120px 三列表单,入驻审核保留 1040px,箱规规则编辑保留 1200px,海外仓阶梯编辑保留 1120px。宽度属于当前内容的适配值,不推广为全局默认。
@@ -96,18 +115,19 @@
- 第一行集中放返回、业务编号、核心状态及主要操作。下一行用可换行摘要展示关键上下文,不使用大数字概览卡。 - 第一行集中放返回、业务编号、核心状态及主要操作。下一行用可换行摘要展示关键上下文,不使用大数字概览卡。
- 返回使用 `density-back` 轻量导航,与业务编号和状态排在同一行,保留箭头、文字、键盘焦点及原返回目标。该行并入连续白底详情区域,不为返回单独增加卡片或空白行;整柜库存的标题行与基本信息共用一个信息区。 - 返回使用 `density-back` 轻量导航,与业务编号和状态排在同一行,保留箭头、文字、键盘焦点及原返回目标。该行并入连续白底详情区域,不为返回单独增加卡片或空白行;整柜库存的标题行与基本信息共用一个信息区。
- 页签紧接摘要。页签已表达的标题不再在正文重复占用一大行;数量、更新时间与相关操作可放紧凑工具栏。 - 页签紧接摘要。页签已表达的标题不再在正文重复占用一大行;数量、更新时间与相关操作可放紧凑工具栏。
- 短字段通常每行四组,长内容跨两组或整行。描述表标签浅灰、数值白底,边线连续;标签宽度以 112px 为样板参考,按字段实际长度调整。 - 短字段通常每行 4–6 组,按内容和业务分组调整,长内容跨列或整行。描述表标签浅灰、数值白底,边线连续;标签宽度以 112px 为样板参考,按字段实际长度调整。
- 保留字段顺序和业务分组,不使用会改变阅读顺序的自动密集填空布局。 - 保留字段顺序和业务分组,不使用会改变阅读顺序的自动密集填空布局。
- 同一个订单或实体内部的内容连续分区,不再层层套卡片。 - 同一个订单或实体内部的内容连续分区,不再层层套卡片。
### 费用、汇总与测量 ### 费用、汇总与测量
- 汇总使用单行摘要或紧凑描述表。自动费用与其他费用保持各自业务口径,金额、单价、计费量、附加费和版本完整展示。 - 汇总使用单行摘要或紧凑描述表。自动费用与其他费用保持各自业务口径,金额、单价、计费量、附加费和版本完整展示。
- 客户资金账户详情采用已确认的六项紧凑金额卡片,复用公共 `workbench-metric is-compact` 外观;保留授信有效期、到期和负余额状态。导出流水与充值、扣款、授信操作集中在详情页头,流水区不再单独设置导出工具栏。结算单应收/应付详情同样使用三项紧凑金额卡片展示应收/应付、已收/已付、未结余额,到期日保留在基本信息中。以上为已确认的详情页例外,不推广到其他详情。
- 保留公式、计费依据和价格来源入口,不能为了减少行数合并不同口径的金额或重量。 - 保留公式、计费依据和价格来源入口,不能为了减少行数合并不同口径的金额或重量。
- 测量各来源保留独立分组;展开时在表尾显示合计,折叠时在标题显示摘要,同一口径不在上下重复占位。 - 测量各来源保留独立分组;展开时在表尾显示合计,折叠时在标题显示摘要,同一口径不在上下重复占位。
- 测量作业弹框采用用户确认的彩色分区:申报与实测对比浅绿(`#f4fbf8`)、客户申报明细浅蓝(`#f7f9ff`)、箱规明细浅黄(`#fffbf4`),保留浅色背景、细边框和 8px 圆角,不使用左侧强调色条,作为连续白底规则的局部例外。区块不得使用负外边距伸出正文;左右内边距由 `measurementDensity.css` 统一维护,通用密度规则不得将其清零。保持 1560px、92vh 居中作业弹框及原有业务分组,不因修复裁切而移除彩色分区。 三个分区同级排列,客户申报不得嵌套在实测大框内。箱数、毛重、体积集中在“指标/客户申报/平台实测/差异(实测 − 申报)”表中,不在下方重复总数;未采集显示“未测量/待测量”,申报缺失显示“—”,相等显示“一致”。净重、材积重单独显示平台事实,不与申报毛重混比。 客户申报区保持只读;实际品名和预计托数放在“平台实测箱规”区,沿用原保存与权限规则。未采集时只保留主状态,有箱规和来源后显示采集来源;平台补充数据的口径说明通过提示展示。提交按钮旁显示当前订单状态、缺少测量或称重等实际阻断原因。 桌面布局中,对比区标题与客户、渠道、状态同排;申报区标题与原单据号码同排,标签和值横向排列;实测箱规标题、实际品名、预计托数及录入操作共享一行。长内容自然换行,不截断编号或缩小字号。提交阻断原因集中在固定底栏,正文不重复显示同一提示,业务状态、偏差和冲突提醒保留。 - 测量作业弹框采用用户于 2026-11-05 重新确认的目标截图:申报与实测对比浅绿(`#f4fbf8`)、客户申报明细浅蓝(`#f7f9ff`)、平台实测箱规浅黄(`#fffbf4`),分别保留绿色、蓝色、黄色的 4px 左侧色条、细边框和 8px 圆角,作为连续白底规则的局部例外。区块不得使用负外边距伸出正文;左右内边距由 `measurementDensity.css` 统一维护,通用密度规则不得将其清零。保持 1560px、92vh 居中作业弹框及原有业务分组,后续通用样式调整不得将本窗口的配色、色条或字段统一移除。三个分区同级排列,客户申报不得嵌套在实测大框内。箱数、毛重、体积集中在“指标/客户申报/平台实测/差异(实测 − 申报)”表中,不在下方重复总数;未采集显示“未测量/待测量”,申报缺失显示“—”,相等显示“一致”。净重、材积重单独显示平台事实,不与申报毛重混比。客户申报区保持只读;实际品名和预计托数放在“平台实测箱规”区,沿用原保存与权限规则。未采集时只保留主状态,有箱规和来源后显示采集来源;平台补充数据的口径说明通过提示展示。提交按钮旁显示当前订单状态、缺少测量或称重等实际阻断原因。桌面布局中,对比区标题与客户、渠道、状态同排;申报区标题与原单据号码同排,标签和值横向排列;实测箱规标题、实际品名、预计托数及录入操作共享一行。长内容自然换行,不截断编号或缩小字号。提交阻断原因集中在固定底栏,正文不重复显示同一提示,业务状态、偏差和冲突提醒保留。
- 同一计算策略只保留一个明确操作入口,保存中、无权限、冻结与失败信息照常显示。 - 同一计算策略只保留一个明确操作入口,保存中、无权限、冻结与失败信息照常显示。
- 称重图片可用缩略图加紧凑事实行;保留查看原图、托盘/库位信息和人工修正入口。可视化、图纸、标签预览、库位示意等按业务用途保留合适尺寸。 - 测量称重图片可用缩略图加紧凑事实行;审核称重图片使用表格承载,保留查看原图、托盘/库位信息和人工修正入口。可视化、图纸、标签预览、库位示意等按业务用途保留合适尺寸。
### 历史、备注与空态 ### 历史、备注与空态
@@ -117,9 +137,9 @@
### 弹框与表单 ### 弹框与表单
本节是 **Admin 统一弹窗规范** 的唯一维护入口。2026-10-19 用户确认以测量作业弹窗为视觉样板,统一白底框架、紧凑标题栏、正文分区和固定底部操作。适用于 Admin 各大模块的新增、编辑、审核、只读查看、上传、预览及确认弹窗;按实际用途选择尺寸和内容结构。 本节是 **Admin 弹窗基础规范** 的唯一维护入口。通用统一范围限于白底框架、基础字号与控件、标题与操作区的可用性、间距和滚动边界;不统一业务正文结构、分区数量、字段排列、固定尺寸或装饰底色。普通表单与复杂作业弹框默认白底,按各自业务组织内容。测量样板的分区配色仅适用于已明确确认的具体窗口,不自动推广到其他新增、编辑、审核、上传、预览或确认弹窗。
参考图:[测量弹窗原始截图](界面参考/Admin弹窗样板-测量.png)(原附件 `codex-clipboard-3eeb665f-6eee-437e-886b-75d3cc0dc78e.png`)。截图只用于风格依据,尺寸沿用已确认规范;验收仍为 1920×1080、浏览器 100%,不按图片像素反推控件尺寸。 参考图:[测量弹窗原始截图](界面参考/Admin弹窗样板-测量.png)(原附件 `codex-clipboard-3eeb665f-6eee-437e-886b-75d3cc0dc78e.png`)。仅参考基础框架及该测量场景,不据此复制其他窗口的配色、分区、表格结构或尺寸;验收仍为 1920×1080、浏览器 100%,不按图片像素反推控件尺寸。
![Admin 弹窗样板:测量作业](界面参考/Admin弹窗样板-测量.png) ![Admin 弹窗样板:测量作业](界面参考/Admin弹窗样板-测量.png)
@@ -141,24 +161,38 @@
| 批量预览、对照与选择 | 约 1100px,随实际列宽调整 | 表格为主,保留数量、逐条明细和不可操作原因 | | 批量预览、对照与选择 | 约 1100px,随实际列宽调整 | 表格为主,保留数量、逐条明细和不可操作原因 |
| 测量等大型作业 | 样板 1560px、92vh | 业务分区、作业表格和固定操作底栏 | | 测量等大型作业 | 样板 1560px、92vh | 业务分区、作业表格和固定操作底栏 |
以上为类型参考,不覆盖已有逐操作确认的业务尺寸,例如客户重置密码 520px、客户新增/编辑 1120px。宽度同时受视口边距约束;不得靠缩小字号、隐藏字段或截断关键编号来容纳内容。 以上只用于没有已确认尺寸的新窗口,不作为重排现有弹框的模板,也不覆盖已有逐操作确认的业务尺寸,例如客户重置密码 520px、客户新增/编辑 1120px。复杂工作台按真实信息量保留宽高、分栏与独立工作区;宽度受视口边距约束,不靠缩小字号、隐藏字段或截断关键编号容纳内容。
#### 正文分区、配色与密度 #### 正文分区、配色与密度
- 短字段使用紧凑表单或连续键值表,明细使用表格;按业务分组保持阅读顺序。分区标题可与客户、渠道、来源单号、状态或当前操作同行,长内容自然换行。 - 默认使用白底,通过原有业务标题、间距与必要分隔线组织内容;不得因存在录入、只读、汇总或多分区就套黄、蓝、绿背景,也不为套样板新增标题、卡片或分区。
- 同一组含只读与可编辑数据时,优先放在一张连续信息表中:只读值直接展示,可编辑值在对应单元格中录入,保留标签、单位和焦点反馈。标签和值横排,不把只读字段做成禁用输入框;少量预估值并入同组末行,不为套用配色额外拆出大汇总卡片。配色统一不能增加层级、重复标题或挤压业务明细。 - 保留已有表单、左右分栏、主从表、步骤、树表、筛选候选、图文对照及预览区域。字段多或交互复杂不构成改成连续信息表、三列表单或同级彩色区块的理由;确有布局问题时先记录具体问题,再单独调整该窗口。
- 多分区作业采用浅色背景和细边框,取消左侧强调色条;分区圆角 8px,作为普通容器圆角规则的明确例外。分区同级排列,不层层套卡片。简单确认、短表单及普通说明保持连续白底,按需采用彩色分区。 - 只读值清楚展示,可编辑控件保留可辨识的边框、焦点、标签和校验;不为了连续表外观隐藏输入特征。仅在该窗口的信息关系适合且逐项确认后使用连续编辑表,不把只读与录入强制合并、不机械横排或并入汇总末行。
- 同类信息复用同一配色,保留文字标题;颜色不代替业务状态或校验提示。 - 下表只记录测量作业的已确认配色例外,不是按信息用途自动映射颜色的通用规则。其他具体窗口需要彩色分区时,在本窗口核对记录中说明业务用途与确认依据;旧批次记录中的“黄色录入区”不等于本轮已确认保留。
| 信息用途 | 样板对应分区 | 浅底色 | | 适用窗口 | 已确认分区 | 浅底色与色条 |
|---|---|---| |---|---|---|
| 汇总、实测对比与结论 | 申报与实测对比 | `#f4fbf8` | | 测量作业主弹框 | 申报与实测对比 | `#f4fbf8`,4px 绿色左侧色条 `#20a477` |
| 来源资料、只读申报与明细 | 客户申报明细 | `#f7f9ff` | | 测量作业主弹框 | 客户申报明细 | `#f7f9ff`,4px 蓝色左侧色条 `#647fec` |
| 当前录入、编辑与作业明细 | 平台实测箱规 | `#fffbf4` | | 测量作业主弹框 | 平台实测箱规 | `#fffbf4`,4px 黄色左侧色条 `#c79643` |
| 测量作业主弹框 | 测量偏差提示 | `#fff`(保留红色警示文字与图标) |
- 表格单元格以白底为主,表头浅灰;普通字号、控件高度、行高、间距沿用本规范公共令牌。单位、必填标识、校验错误、表单标签及原因说明完整保留。 - 表格单元格以白底为主,表头默认采用“尺寸与颜色”的统一浅蓝底、深蓝文字;测量作业按目标截图保留申报明细的浅灰表头,对比表以浅灰为底、客户申报列浅蓝、平台实测列浅绿。普通字号、控件高度、行高、间距沿用公共令牌。单位、必填标识、校验错误、表单标签及原因说明完整保留。
- 汇总尽量只出现一次;表格已完整表达的字段不再另做统计卡片。错误、警告、成功及禁用状态继续使用现有语义,彩色分区不掩盖真实风险。 - 汇总尽量只出现一次;表格已完整表达的字段不再另做统计卡片。错误、警告、成功及禁用状态继续使用现有语义,彩色分区不掩盖真实风险。
#### 输入框与字段
2026-10-22 用户确认以客户新增/编辑弹框的输入控件外观作为后续同类表单的参考;只统一控件外观与可用性,不据此复制客户的三列布局、表格结构或弹框尺寸。
- 文本、数字、日期、下拉选择及多行文本使用白底、可辨识的浅灰边框和 8px 圆角(`--cc-radius-lg`);悬停边框加深、聚焦使用蓝色边框。普通单行控件沿用通常 32px 的公共高度,多行文本保留业务需要的行数。不能通过透明边框把可编辑内容显示成普通文字。
- 普通文本与表单数字左对齐,包括注册资本、账期等;数字增减按钮与单位、币种保留原功能。此条不改变只读数据表的金额、数量列对齐方式。
- 横向排列的表单标签与控件垂直居中,由 `adminDensity.css` 统一处理;顶部标签保持原有上下排列。普通短字段标签优先单行,较长标签按实际文字单独加宽,不缩小字号或截断标签;长地址、备注等保留已确认跨列方式。
- 占位文字简短,避免长说明被输入框截断,例如客户昵称使用“选填,默认自动生成”。标签始终保留,不能仅靠占位文字说明字段含义;详细规则确有必要时放入已有说明入口。
- 只读值直接展示,与可输入控件明确区分;禁用、权限不足、校验错误、处理中和实际操作阻断保留原反馈。精简文案不改变字段可编辑资格、保存及审核流程。
- 分区标题、已有帮助入口与该分区状态标签优先同一行,例如“企业认证资料”与“启用”;不为简短状态单独占一行。内容过长时自然换行,不强行裁切。
- 字段旁及底部不重复铺设保存/审核流程介绍、只读规则等常驻小字,按[提示文字与加载布局](#提示文字与加载布局)处理;实际风险、错误和阻断原因仍须清楚反馈。
- 实现复用 Element Plus 控件。连续编辑表内的表单通过 `density-form--outlined` 接入 [adminDensity.css](../apps/admin-web/src/styles/adminDensity.css) 的白底与中性边框规则;客户参考实现为 [CustomersView.vue](../apps/admin-web/src/modules/customers/pages/CustomersView.vue) 与 [customerDensity.css](../apps/admin-web/src/modules/customers/customerDensity.css),后者当前限定客户编辑框的圆角和数字对齐。后续在明确修改范围内接入,通用外观维护在公共入口,不逐页复制颜色与控件规则,也不自动批量改造其他弹框。
#### 底部操作与交互 #### 底部操作与交互
- 底部以细分隔线与正文区分,右侧排列原有取消、保存、提交等操作;一个阶段突出一个主操作,其他操作保持次级样式。按钮职责、顺序和保存触发方式按当前业务确认保留,不新增原本没有的“暂存”或“保存并提交”。 - 底部以细分隔线与正文区分,右侧排列原有取消、保存、提交等操作;一个阶段突出一个主操作,其他操作保持次级样式。按钮职责、顺序和保存触发方式按当前业务确认保留,不新增原本没有的“暂存”或“保存并提交”。
@@ -167,16 +201,27 @@
- 审核、确认清楚展示业务对象;批量操作保留逐票预览、选中数量和不可操作原因。加载中、无数据、接口失败、无权限、禁用与处理中均应有明确反馈。 - 审核、确认清楚展示业务对象;批量操作保留逐票预览、选中数量和不可操作原因。加载中、无数据、接口失败、无权限、禁用与处理中均应有明确反馈。
- 保留提交锁定、原有遮罩/Esc/关闭规则、未保存保护及失败上下文;全屏切换、关闭和重开不丢失应保留的输入,不允许重复提交。关闭、全屏等功能图标保留,不为统一风格给标题、字段或按钮添加装饰 Emoji。 - 保留提交锁定、原有遮罩/Esc/关闭规则、未保存保护及失败上下文;全屏切换、关闭和重开不丢失应保留的输入,不允许重复提交。关闭、全屏等功能图标保留,不为统一风格给标题、字段或按钮添加装饰 Emoji。
#### 作用域与嵌套
新增、编辑先参考公共 `AppDialog`/`AppDrawer`,表单字段排列仍参考本业务已确认的样板。客户新增/编辑使用三列短字段,地址、备注和长内容跨列;小型确认框保留原宽度。智能装柜等工作台保留原有宽版和 92vh 高度,不把所有浮层压成同一尺寸。
- 标题、正文和页脚样式只匹配当前浮层的直接子节点;业务页的 `:deep` 规则也必须限定自身,不能通过任意后代选择器影响子弹框。
- 不假设 `AppDialog` 默认一定挂到 body。嵌在另一个弹框、工具栏或有裁切的容器中的独立浮层,应明确设置 `append-to-body`,并把主题类放到实际浮层根。核对关闭、重开、全屏和取消仅影响对应窗口。
- 标题与底部操作不随长正文滚走,正文使用单一纵向滚动区;真实宽表可在自己的区域横向滚动。不要通过整框 `overflow: hidden`、固定短高度或隐藏按钮解决溢出。
- 底部多按钮可换行且保持间距;已有复合底栏(统计、分页、提交等)保留自身布局,不强制改成一排普通按钮。工具栏的紧凑按钮尺寸不得传入浮层。
- 工具栏只控制自身操作按钮及已核实的包装层,遇到浮层、弹出菜单或内嵌 DataTable 就结束作用范围;保留按钮组与下拉按钮,不能为隔离而使已有操作失去样式。
- 长校验错误应占据正常布局空间,不能遮住下一行;长文件名允许换行,文件选择、上传和删除按钮保持可用宽度。必填标识、字段标签、错误和提交反馈不为清爽而删除。
#### 公共维护与分模块落地 #### 公共维护与分模块落地
- 框架能力维护在 `AppDialog.vue`,默认尺寸、字号和间距维护在 `adminDensityTokens.css`,通用外观维护在 `adminDensity.css`。彩色分区推广时提取到公共令牌与显式接入的样式原语;模块只维护字段顺序、列数、业务分组和已确认的尺寸例外,不复制通用 CSS。 - 框架能力维护在 `AppDialog.vue`,基础尺寸、字号和间距维护在 `adminDensityTokens.css`,通用外观维护在 `adminDensity.css`。模块保留业务结构及已确认尺寸;不得通过修改公共默认值,批量去色、重排或重置所有弹框。
- 已提供的分区原语为 `density-dialog-section`,通过 `data-tone="summary/source/work"` 分别选择汇总绿、来源蓝、录入黄;分区标题使用 `density-dialog-section__title`,连续分区容器使用 `density-dialog-sections`。弹窗通过 `admin-density-dialog` 接入;保留抽屉并显式采用相同详情密度时使用 `admin-density-drawer admin-density-drawer--detail`;实际侧滑编辑使用 `admin-density admin-density-drawer admin-density-drawer--editor`,复用相同分区、连续编辑表和底栏,不改变其他抽屉。公共选择器保持原弹窗的优先级。测量样板与订单弹窗共同消费 `--admin-dialog-*` 令牌,后续模块沿用同一入口。 - `density-dialog-section` 及其 `data-tone="summary/source/work"` 是既有彩色分区实现能力,不是所有弹框的必选结构;仅在明确确认保留的场景使用。分区标题类为 `density-dialog-section__title`,容器类为 `density-dialog-sections`,存在公共类不构成采用理由。普通弹窗通过 `admin-density-dialog` 接入基础外观;抽屉按实际查看/编辑用途保留 `admin-density-drawer--detail`/`admin-density-drawer--editor` 等边界,不因此改成连续编辑表或复制测量分区。共用 `--admin-dialog-*` 令牌只统一基础能力。
- 弹窗内简短说明显式使用 `density-dialog-note`,由公共样式维护辅助字号、颜色和尾距;业务页面不重复这些普通说明外观。 - 确有必要且已确认的弹窗说明使用 `density-dialog-note`,由公共样式维护外观;是否展示遵循“提示文字与加载布局”,不因存在说明类就新增小字。
- JSON及原文快照显式使用 `density-code-block`,由公共样式维护代码字号、底色和边框;长内容完整换行,沿用外框正文滚动,不另设固定高度、内容截断或纵向滚动。快照属于诊断证据,不据此将数据库ID展示为业务编号。 - JSON及原文快照显式使用 `density-code-block`,由公共样式维护代码字号、底色和边框;长内容完整换行,沿用外框正文滚动,不另设固定高度、内容截断或纵向滚动。快照属于诊断证据,不据此将数据库ID展示为业务编号。
- 连续信息表需要单元格编辑时,在 `density-table` 上显式添加 `density-table--editable`;数值与单位使用 `density-table-editor` 横排。输入的普通边框融入表格,保留悬停、键盘焦点及禁用反馈;页面只配置标签列宽和字段排列,不复制输入框外观。 - 连续信息表需要单元格编辑时,在 `density-table` 上显式添加 `density-table--editable`;数值与单位使用 `density-table-editor` 横排。输入的普通边框融入表格,保留悬停、键盘焦点及禁用反馈;页面只配置标签列宽和字段排列,不复制输入框外观。
- 小表单继续使用 `density-form`;末项已有明确紧凑尾距约定时显式添加 `density-form--flush-end`,不改变其他表单末项为校验错误保留的空间。 - 小表单继续使用 `density-form`;末项已有明确紧凑尾距约定时显式添加 `density-form--flush-end`,不改变其他表单末项为校验错误保留的空间。
- Teleport 弹框自身显式使用 `admin-density-dialog`,原有 `ElMessageBox` 使用 `admin-density-confirm`;原生 `el-dialog` 的外观按同一规范接入,是否收敛到 `AppDialog` 按实际能力和消费者核对,避免一次替换全部弹窗。抽屉继续使用既有 `admin-density-drawer` 边界。 - Teleport 弹框自身显式使用 `admin-density-dialog`,原有 `ElMessageBox` 使用 `admin-density-confirm`;原生 `el-dialog` 的外观按同一规范接入,是否收敛到 `AppDialog` 按实际能力和消费者核对,避免一次替换全部弹窗。抽屉继续使用既有 `admin-density-drawer` 边界。
- 按“盘点当前大模块 → 填写逐操作矩阵 → 完成样板组 → 人工截图确认 → 推广本模块其余弹窗 → 模块整体核对”的流程推进。先从“国内头程”的订单列表相关弹窗开始,以测量弹窗为样板,再依次整理订单测量、测量数据审核、库位管理、托盘管理、整柜业务、船期管理。实际入口以 `adminNavigation.ts` 和模块路由为准,共享弹窗记录全部直接调用方。 - 已改造弹框按原固定编号清单逐项复核,方法见 [前端验收规则](Admin-Client前端原型还原验收规则.md#执行与验收)。每项先核对改造记录、当前实现及实际截图,再决定保留或局部修正;一个样板通过不授权批量推广其业务布局和配色。共享弹框记录全部直接调用方,已有代码检查与历史截图不能替代本次视觉确认。
- 后续每个大模块按同一流程开展,进度和截图结论写入对应模块核对记录;本规范只维护稳定规则。页面字段、状态、权限、接口、计算口径、校验和提交逻辑继续按当前业务契约执行。 - 后续每个大模块按同一流程开展,进度和截图结论写入对应模块核对记录;本规范只维护稳定规则。页面字段、状态、权限、接口、计算口径、校验和提交逻辑继续按当前业务契约执行。
- 代码检查与人工视觉结论分别报告,逐项核对普通/全屏/关闭重开、长内容、空态、错误和权限状态;缺少截图时标记“待人工截图确认”。按模块汇总发布范围,部署继续沿用对应环境授权规则。 - 代码检查与人工视觉结论分别报告,逐项核对普通/全屏/关闭重开、长内容、空态、错误和权限状态;缺少截图时标记“待人工截图确认”。按模块汇总发布范围,部署继续沿用对应环境授权规则。
@@ -199,55 +244,147 @@
彩色图标用于详情页签。国内仓 7 个菜单的行内按钮与客户管理业务操作使用纯文字;返回箭头、顶部与弹框的既有功能图标可保留。不要给操作按钮、表头或字段添加 Emoji。 彩色图标用于详情页签。国内仓 7 个菜单的行内按钮与客户管理业务操作使用纯文字;返回箭头、顶部与弹框的既有功能图标可保留。不要给操作按钮、表头或字段添加 Emoji。
## 国内仓推广清单与顺序
此表是实施入口,不是完成状态。每个入口必须继续沿实际组件引用盘点可达弹框与详情,不把父页面验收等同于所有子界面通过。
| 顺序 | 菜单 | 主入口(相对 apps/admin-web/src) | 本组应覆盖 |
|---|---|---|---|
| 样板 | 订单列表 | `modules/unified-orders/pages/UnifiedOrdersView.vue` | 列表、详情全部页签、测量、单票/批量审核及实际可达弹框 |
| 1 | 订单测量 | `modules/inbounds/pages/InboundMeasurementsView.vue` | 列表、测量作业、称重图片与相关编辑/预览 |
| 1 | 测量数据审核 | `modules/inbounds/pages/MeasurementReviewsView.vue` | 列表、审核工作区、明细、确认及当前实际存在的修正操作 |
| 2 | 预装清单 | `modules/loading-lists/pages/PreloadPlansView.vue`、`PreloadPlanDetailView.vue` | 列表、详情各页签、相关确认及打印/预览容器 |
| 3 | 库位管理 | `modules/warehouse-resources/locations/pages/LocationsView.vue` | 列表、详情、新增/编辑及实际存在的批量操作 |
| 3 | 托盘管理 | `modules/warehouse-resources/pallets/pages/PalletsView.vue` | 列表、详情、新增/编辑及实际存在的关联操作 |
| 3 | 整柜业务 | `modules/domestic-containers/pages/DomesticContainersView.vue`、`DomesticContainerInventoryDetailView.vue` | 入库/出库/库存工作区、库存详情与实际可达弹框 |
每组先统一列表,再处理详情与弹框;同一业务工作区一起交付人工查看。未注册、已重定向或只存在于历史原型的页面不能只凭文件存在就恢复或加入本轮。
## 实现与验收 ## 实现与验收
1. 改造前读取最近指引,沿菜单、路由、组件与事件定位实际页面;填写逐操作矩阵。原型已有承载方式不因密度统一而替换,明确的样式改造可在已授权范围内推进。 逐操作矩阵、人工截图与自动检查的证据要求统一见 [前端验收规则](Admin-Client前端原型还原验收规则.md)。本规范不记录通过状态;缺少截图保留“待人工截图确认”。实现前核对实际路由与直接消费者,保持字段、单位、排序、权限、提交及错误处理,测试不能锁定已废弃外观或删掉业务断言。
2. 多个真实消费者使用同类密度时,将稳定尺寸与布局能力收敛到本应用的样式变量或现有共享组件的可选能力。先明确接入范围,不让全局默认变化影响尚未改造的菜单。
3. `adminDensityTokens.css` 定义默认值,`adminDensity.css` 承载通用组件规则;`orderDensity.css`、`measurementDensity.css`、`customerDensity.css` 只保留各自业务布局与引用公共变量的局部规则。按钮外观不得在模块中另写一套。跨菜单共用组件(如模拟柜创建、托盘码打印)通过可选 `dense` 参数接入;未传参数的调用保持原布局。
4. 弹框经 Teleport 后必须仍能获得对应样式。检查普通、全屏、关闭、重开以及多个入口使用同一组件时的表现;避免无边界的全局 `.el-dialog`、`.el-table` 或 `!important` 覆盖。
5. 每页检查长编号、长地址、多条数据、空态、失败态、无权限、禁用态及处理中状态;所有字段、单位、排序、权限与操作资格应保留。测试不得继续锁定已废弃的卡片结构,也不能删除业务断言以换取通过。
6. 按 Admin 指引运行直接影响测试、类型检查、全量测试与构建;公共组件检查实际消费者。视觉默认由用户在指定视口操作并截图,缺少证据标记“待人工截图确认”;用户明确要求 AI 界面验收时,按本轮授权操作并记录实际证据,不将代码测试当作视觉通过。
7. 每组交付说明修改页面、公共影响、检查结果、剩余视觉差异。任何尺寸或布局例外记录在逐页矩阵中,避免把一次性例外写成新的全局默认。
逐页核对记录模板: ## 蓝白主题与图表
| 页面/路由 | 操作及承载方式 | 原型或确认依据 | 采用规则/业务例外 | 检查与截图结论 | ### 视觉基线与维护入口
|---|---|---|---|---|
| 填写具体页面 | 分别填写详情、编辑、审核、预览等 | 原型 ID、代码入口或用户确认 | 列表/描述表/日志/作业弹框等 | 代码检查结果;待人工截图确认或实际结论 |
规范只记录稳定规则和入口。各组进度、临时问题与验收结果写入对应核对记录,不写入 `AGENTS.md`。 | 维护内容 | 唯一实现入口 |
|---|---|
| DOM 配色、字号、间距、圆角、阴影与辅助色 | [`adminWorkbenchTokens.css`](../apps/admin-web/src/styles/adminWorkbenchTokens.css) |
| 标题、指标卡、列表外壳、页签、阶段、图表空态与弹窗外观 | [`adminWorkbench.css`](../apps/admin-web/src/styles/adminWorkbench.css) |
| Canvas 图表字体、颜色、坐标网格与提示框主题 | [`adminWorkbenchChartTheme.ts`](../apps/admin-web/src/styles/adminWorkbenchChartTheme.ts) |
| 显式接入范围、变量归属、公共类与浮层作用域合同 | [`adminWorkbench.test.ts`](../apps/admin-web/src/styles/adminWorkbench.test.ts) |
| 原有表格、控件和弹窗密度 | [`adminDensityTokens.css`](../apps/admin-web/src/styles/adminDensityTokens.css)、[`adminDensity.css`](../apps/admin-web/src/styles/adminDensity.css) |
| 弹框与抽屉的标题、正文滚动和底部操作 | [`AppDialog.vue`](../apps/admin-web/src/shared/components/AppDialog.vue)、[`AppDrawer.vue`](../apps/admin-web/src/shared/components/AppDrawer.vue);真实 Element 挂载回归见 [`AppDialog.layout.test.ts`](../apps/admin-web/src/shared/components/AppDialog.layout.test.ts) |
## 国内仓、客户管理的样式维护边界 下列取值只用于显式 `admin-workbench` 主题内的对应元素;业务表格、控件与表单继续沿用上文密度值。代码以对应令牌为准,修改数值只改唯一实现入口并同步本表,不在页面重新声明默认值。
2026-09-30 确认的连续列表模式见 [排车列表公共接入规范](Admin排车列表样式试点.md):通过 `DataTable appearance="integrated"` 显式接入标题、业务按钮、查询、结果和分页共用卡片;仅操作列使用蓝色普通文字、红色危险文字并禁止悬停下划线。该模式的行高、卡片、搜索与页头样式由 DataTable 统一维护,行操作外观由 `adminTextActions.css` 维护;查询、顶部和弹框按钮保持原样。此约定优先于本节历史的行内描边、图标和独立路由标题规则;未接入页面保持默认。当前接入范围与特殊页面见 [推广核对记录](Admin列表样式推广核对记录.md)。 | 项目 | 样板基线 |
|---|---|
| 主操作与链接 | `--workbench-primary`,`#3784FA`;悬停、按下与禁用使用配套令牌 |
| 重点数字 | `--workbench-number`,`#1890FF` |
| 正文与辅助文字 | `--workbench-text`,`#1F2937`;`--workbench-muted`,`#64748B` |
| 表面与边框 | 白色主体,浅灰蓝辅助区;`--workbench-border`,`#E5EAF2` |
| 卡片与图标底座 | 卡片圆角 16px、图标底座圆角 12px,低强度阴影;使用公共令牌 |
| 普通指标卡高度 | `--workbench-metric-min-height: 186px`;长内容可自然撑高,紧凑指标不继承此最小高度 |
| 空间 | 外壳内容区上/左右 12px、底部 16px;工作台根内边距 `--workbench-page-padding: 12px`;区块间距仍为 24px,普通卡片内边距 20px、紧凑卡片内边距 14px、同级网格间距 18px |
| 主列表顶部 | 工具栏最小高度 48px、上下内边距 6px;筛选区上下 8px;两区左右统一 12px,普通按钮与筛选控件 32px;内容多时自然换行,不截断或固定总高度 |
| 主列表底部分页 | 最小高度 48px(border-box)、上下内边距 6px、左右 12px,与筛选区对齐;保留 32px 翻页按钮和长统计换行,不沿用集成列表旧的 64px 高度、14px 上下留白 |
| 文字层级 | 页标题 24px、分区标题 18px、普通指标名称 15px、重点数字 34px、紧凑指标数字 26px |
| 辅助色 | 青、绿、紫、黄、红用于图标、分区与真实状态,不能代替状态文字 |
本节维护表适用于已接入页面及其实际子组件,当前范围以推广核对记录为准。此次收敛以保留业务字段、权限、计算与承载方式为前提。 白色和细边框负责分层,不反复套大卡片;标题与数值形成重点,单位和补充说明降低权重。蓝色强调重点数据,不要求所有数字着色。红、黄继续表示风险、失败或警告;趋势是否改善由业务决定,不能仅凭上涨或下降设绿色。
2026-10-20 用户确认固化自营模块的蓝白、清爽、少提示文字风格,作为后续 Admin 改版基线。配色、卡片和图表外观统一从 [蓝白卡片式工作台风格参考](界面参考/蓝白卡片式工作台风格参考.md) 进入;该文档按总览、标准列表、复杂分析、运行看板与图表弹窗列出参考页面和公共样式入口。`adminWorkbenchTokens.css`、`adminWorkbench.css`、`adminWorkbenchChartTheme.ts` 只在显式 `admin-workbench` 范围内提供外观,保留本规范的业务密度、表单和浮层承载。按确定的模块范围分批接入、逐页核对,不直接改写全局默认值或将样板通过视为全端验收通过。 原有 `--admin-*` 密度默认值继续有效。公共控件、表格行高、行内操作、弹窗尺寸和滚动由原组件与密度规范管理;蓝白外观只在显式主题范围内生效。
页面和区块不再常驻重复的功能介绍。一般流程、计费规则和图表图例复用 `InlineHelp.vue`,在标题或对应操作旁显示信息图标,鼠标移入或键盘聚焦时浮层展示说明,不展开正文或增加独立说明行。已有包含交互操作的统计说明弹层保留其原交互。错误、权限、过期状态、操作阻断和危险后果仍直接展示,不通过全局隐藏段落或说明组件来精简页面。 页面边缘采用紧凑双层留白:`.page-container` 与 `.admin-workbench.admin-page` 分别使用 12px,避免旧外壳 20px 再叠加工作台 24px 挤占内容。页边距与区块间距使用独立令牌,不通过缩小表格行高、控件或文字来换空间。
页面内复用另一个完整 `AdminPage` 时,仅在嵌入调用上显式加 `is-embedded`,去掉内层重复 padding;独立路由打开仍保留原页边距。订单内的测量审核分支是此用法的参考。不要在业务页重复声明公共间距变量,也不要全局清空所有面板内距。
整页主体是一块连续白底,不再额外套一圈边框、圆角和阴影。包住主要列表的 `workbench-table`/`workbench-toolbar` 或整页详情 `workbench-panel` 显式增加 `is-page-surface`;内部指标、图表、并列独立面板继续保留细边框,表格单元格、表头和操作分隔线也保留。不能通过清除全部 `border` 把卡片、控件和表格边界一起抹掉。
详情主容器的 `workbench-panel.is-page-surface` 在屏幕展示时不再叠加 padding,即使同时有 `is-compact` 也由外层页面或业务分区提供唯一一层留白。独立预装/装柜清单详情和货柜内的清单页签按此规则接入;内部独立紧凑卡片仍为 14px,普通卡片仍为 20px。该规则排除 `AdminPage` 页根并仅用于屏幕,不覆盖页面原有 12px 或打印内距。
财务详情通过 `financeDensity.css` 的 `finance-density-detail` 统一收敛:账户、费用来源、对账单和结算单的页头、摘要、正文及底栏在屏幕上不重复增加左右内边距,由外层 `AdminPage` 提供。嵌套 `AdminPage` 必须使用 `admin-workbench is-embedded`;区块纵向间距、金额卡片、描述表单元格和筛选控件的内部留白保留,打印内距不变。
国内/海外托盘、整柜业务、应收款统计和应收/应付结算单的顶部统计卡片独立置于列表工具栏与筛选区上方。卡片网格与紧随其后的 DataTable 工具栏之间外层 `gap` 为 `0`,留白由工具栏已有的上下 padding 与最小高度提供,不能再叠加 6px 或默认页面间距;卡片之间的网格间距独立保留。此规则仅适用于这类直接相邻结构,不清零普通业务分区或筛选区与表格之间的间距。
间距和边框核对必须包含公共组件编译后的 scoped 选择器、模块规则、断点及加载顺序。显式接入规则应有稳定的优先级,不能仅凭源码出现 `gap: 0` 或 `padding: 0` 就判断已生效;自动合同检查与实际截图核对分别报告,不用 `!important` 或负外边距掩盖重复容器。
### 公共样式接入
页面直接导入 `@/styles/adminWorkbench.css`,保留原有密度入口,并在实际页面根容器增加 `admin-workbench`。不依赖先打开样板页后残留的 CSS,不将主题放入全局入口,不修改 `:root`。导航、顶栏、页签由总控在各自容器显式接入,不给包含业务页面的 `.app-shell` 或 `.app-main` 添加主题类;业务页和 Teleport 浮层仍须自己接入。
```vue
<script setup lang="ts">
import '@/styles/adminDensity.css'
import '@/styles/adminWorkbench.css'
// 继续使用该页面原有数据、筛选、权限与事件。
</script>
<template>
<AdminPage class="admin-density admin-workbench">
<ListPageLayout>
<div class="workbench-table is-page-surface">
<DataTable :data="rows" :columns="columns">
<!-- 原有工具栏、查询和操作插槽 -->
</DataTable>
</div>
</ListPageLayout>
<AppDialog
v-model="detailOpen"
class="admin-density-dialog admin-workbench is-dialog"
>
<!-- 原有内容与尺寸配置 -->
</AppDialog>
</AdminPage>
</template>
```
这个片段只说明主题作用域。`rows`、`columns`、弹窗宽高、事件与组件导入仍按目标页原实现补齐,不代表需要新建弹窗或更换承载方式。
| 场景 | 公共类与用法 |
|---|---|
| 页头与分区 | `workbench-heading`、`workbench-title`、`workbench-meta`、`workbench-section`、`workbench-section-heading`、`workbench-section-title`、`workbench-badge` |
| 普通指标卡 | `workbench-metric`、`workbench-metric-heading`、`workbench-icon`、`workbench-metric-label`、`workbench-metric-value`、`workbench-status`、`workbench-note` |
| 紧凑指标 | 在指标卡和图标上增加 `is-compact`;不继承总览卡片的最小高度 |
| 面板与提示 | `workbench-panel`、`workbench-notice`、`workbench-skeleton`;紧凑/自带头部面板使用 `is-compact`/`is-flush` |
| 图表与空态 | `workbench-chart`、`workbench-chart-heading`、`workbench-chart-title`、`workbench-chart-actions`、`workbench-chart-canvas`、`workbench-chart-empty`、`workbench-chart-empty-icon` |
| 标准列表 | **外层 `div.workbench-table` 包裹 DataTable**,统一外框、表头、边框、行悬停和分页强调;不修改业务列宽或行密度 |
| 整页主要内容 | 主要列表的 `workbench-table`/`workbench-toolbar`、整页详情的 `workbench-panel` 增加 `is-page-surface`,去掉整页外框、圆角和阴影;详情主容器的屏幕 padding 为 0,保留页面根及内部卡片内距;主表顶部同时使用公共紧凑高度与左右边界,子表格不自动套用 |
| 嵌入完整页面 | 仅在嵌入调用上加 `is-embedded`,清除内层 AdminPage 的重复内距;独立路由不加 |
| 独立查询区 | QueryToolbar 自身添加 `workbench-query`,保留控件与换行;位于 DataTable 的筛选区时由外层提供独立搜索区的边框、底色及间距,内部不重复套卡片 |
| 列表页签与操作 | 页签放 `toolbar-start` 并加 `workbench-list-tabs`,按钮保留原操作插槽;标准主表统一 48px 最小工具栏、32px 控件,无需销量页专属紧凑类。保留自动换行与键盘切换,嵌套表格、详情和弹框不继承该布局 |
| 只有查询工具栏 | 外层 `div.workbench-toolbar` 包裹 DataTable,保留组件原有工具栏和筛选排列 |
| 原生页签与输入 | 页签父级 `workbench-tabs`,保留按钮的 `aria-pressed` 和点击事件;原生输入使用 `workbench-input`,页面只保留业务宽度 |
| 阶段节点 | `workbench-step`、`workbench-step-index`,从已确认的 `data-state` 选择状态,不从任务名或阶段顺序推断完成 |
| 证据内容 | 容器 `workbench-evidence`;已有 `density-table` 保留行密度 |
| 详情与表单 | 显式主题根保留原密度类,已有 `density-detail-*`、`density-fields`、`density-descriptions`、`density-form`、`density-form-section` 适配中性外观;字段列数、字号、业务色、校验及尺寸保持原契约 |
| 抽屉 | 实际根使用 `admin-density-drawer admin-workbench is-drawer`,保留原有详情/编辑 modifier、方向、宽度、贴边形态和正文滚动 |
| 白色品牌资源底座 | `workbench-brand-mark` 提供蓝底与公共圆角;图片比例、容器宽高由实际布局决定,不替换品牌图形 |
| 辅助色 | 元素增加 `workbench-tone`,按需选择 `data-tone` 为 `blue`、`teal`、`green`、`purple`、`amber` 或 `rose`;语义胶囊可加 `workbench-badge is-toned` |
DataTable 的属性透传目标是内部表格,不能只把 `workbench-table` 加到组件上就认为外框已接入。默认与 integrated 模式各保留原密度,不能为了外观切换模式。Teleport 弹框必须自身带 `admin-workbench is-dialog`,页面祖先不能替代;同时保留 `admin-density-dialog`、全屏、关闭、重开和正文滚动规则。抽屉使用 `is-drawer`,不能套用弹窗类改变承载。
业务页只保留列数、排列、业务宽度与高度;接入公共类后删除被接管的私有配色、边框和标题外观,不能保留两套 CSS 再叠加优先级或 `!important`。共享组件应明确接入模式并核对实际调用者,避免影响尚未推广的页面。
### 图表与数据表达
Canvas 图表显式导入 `adminWorkbenchChartTheme`,在 option 构建处组合字体、轴标签、网格、颜色与 tooltip;不注册全局 ECharts 主题。业务 option 入口分别为 [`skuTrendChart.ts`](../apps/admin-web/src/modules/self-operated/skuTrendChart.ts)、[`dashboardChartOptions.ts`](../apps/admin-web/src/modules/self-operated/dashboardChartOptions.ts)、[`turnoverPresentation.ts`](../apps/admin-web/src/modules/self-operated/turnoverPresentation.ts)。
- 趋势使用蓝色直线和轻面积。只有连续完整数据段可以填充,未知与缺失日期继续断线,未完整日继续以虚线/空心点表达。
- 柱图使用圆角、真实数值尺度和清晰单位;未知分类用灰色并显示文字,不把缺失量补成零。排名、tooltip 内容、精度和点击业务键由业务模块负责。
- 进度环只表达当前已知阶段;总量未知、分母为零或数量异常时保留未知状态。待机不等于全部完成,当前阶段 100% 不代表报表已发布。
- 普通、加载、空数据、错误和部分数据都保留已有语义。减少装饰不能删掉覆盖不足、过期、权限或操作阻断提示。
- 图表面积按用途选择。库存周转保留 360px 面板及内部伸缩画布,不机械套用固定画布类;体积图保留右侧数值标签空间。长标签、长数字及单位不得挤出可视区域。
- 同类指标统一千分位,保留业务小数精度和单位,不为排版缩写成“万”或先舍入再计算;筛选文案明确对象,不使用多个无上下文的“全部”。
- 运行看板区分主状态、阶段进度、发布结果及等待原因;已关闭/暂停与保留进度应同时可辨认,不把保留进度表达为正在续采。采集完整与修订核对未知分别表达。
- 横向宽表保留业务标识的可见性;只读库存表可固定 SKU 首列,有操作列的业务表仍将操作列放第一列。按钮按用户理解的结果命名,保留原行为、权限和禁用条件。
### 导航外壳
自营样板不包含导航外壳;后续 Admin 推广由总控统一维护公共样式、共享组件和外壳,各业务任务按实际消费者逐模块接入。外壳参考 `AppLayout.vue`、`WorkspaceTabs.vue` 和 `shell.css`:白色顶栏、蓝色激活态、轻分隔线,现有白色 Logo 保留蓝底承载;折叠菜单和页签下拉单独声明 `popper-class` 主题范围。保留菜单尺寸、彩色图标、未保存标记、权限与页签行为,不能通过全局注入主题或替换所有 Element 默认样式跳过验收。Client、PDA 不自动套用。
折叠侧栏保留 76px 宽度,展开仍为 240px。菜单宽度随纵向滚动条占用后的实际可用空间伸缩,折叠触发器去掉重复横向 padding 和图标右边距并居中;侧栏只允许纵向滚动,悬浮子菜单继续 Teleport 到侧栏滚动区之外,不能为去掉横向滚动条而裁切子菜单。
## 公共样式维护边界
<a id="国内仓客户管理的样式维护边界"></a>
密度、蓝白主题与基础组件分别维护各自能力;模块只提供字段、列数、跨列、业务宽高及已确认例外,不重复定义公共默认值。下表适用于本轮已明确接入的实际消费者。
| 要修改什么 | 唯一维护位置 | 页面需要做什么 | | 要修改什么 | 唯一维护位置 | 页面需要做什么 |
|---|---|---| |---|---|---|
| 正文/辅助/分区/页头字号 | `adminDensityTokens.css` 的 `--admin-font-*` | 引用变量,不重新写 13px 等普通字号 | | 正文/辅助/分区/页头字号 | `adminDensityTokens.css` 的 `--admin-font-*` | 引用变量,不重新写 13px 等普通字号 |
| 表格行高、输入高度、操作按钮高度、页签高度 | `--admin-row-height`、`--admin-control-height`、`--admin-action-height`、`--admin-tab-height` | 使用已有公共组件和公共类 | | 表格行高、输入高度、操作按钮高度、页签高度 | `--admin-row-height`、`--admin-control-height`、`--admin-action-height`、`--admin-tab-height` | 使用已有公共组件和公共类 |
| 常用间距、圆角、普通数据区底色 | `--admin-space-*`、`--admin-radius`、`--admin-surface` 等 | 业务布局引用变量;不可在页面重定义变量默认值 | | 常用间距、圆角、普通数据区底色 | `--admin-space-*`、`--admin-radius`、`--admin-surface` 等 | 业务布局引用变量;不可在页面重定义变量默认值 |
| 表头配色、独立搜索区圆角与间距 | `foundation.css` 的 `--cc-list-table-header-*`、`--cc-list-query-*` | 标准组件消费统一值,不在模块重定义 |
| 列表纯文字行操作 | `adminTextActions.css`,`RowActions` 的 `text-actions`/手写组的 `admin-text-actions` | 保留动作资格与显式危险语义,不复制旧描边行按钮 |
| 描边按钮外观、悬停/禁用/焦点状态 | `adminDensity.css` 的 `.density-action` | 只选择 `data-tone` 与业务事件 | | 描边按钮外观、悬停/禁用/焦点状态 | `adminDensity.css` 的 `.density-action` | 只选择 `data-tone` 与业务事件 |
| 列表状态/分类页签(国内订单、尾程订单、车辆、供应商、整柜业务、国内/海外货柜工作台、退货库存) | `adminDensity.css` 的 `.density-status-tabs` | 原生按钮使用 `is-active`,Element 页签同时保留 `density-element-tabs`;保留业务分类、图标、数量、查询与切换,不在页面复制页签样式;详情页签继续使用原有详情规则 | | 列表状态/分类页签(国内订单、尾程订单、车辆、供应商、整柜业务、国内/海外货柜工作台、退货库存) | `adminDensity.css` 的 `.density-status-tabs` | 原生按钮使用 `is-active`,Element 页签同时保留 `density-element-tabs`;保留业务分类、图标、数量、查询与切换,不在页面复制页签样式;详情页签继续使用原有详情规则 |
| 详情返回导航 | `.density-back` | 使用 `link`,保留返回事件和可访问名称;客户管理按纯文字约定保留返回文字 | | 详情返回导航 | `.density-back` | 使用 `link`,保留返回事件和可访问名称;客户管理按纯文字约定保留返回文字 |
@@ -265,6 +402,8 @@
### 使用约定 ### 使用约定
下列 `density-action` 是非列表行操作的描边按钮原语;标准列表行操作使用上文 `text-actions`/`admin-text-actions`,不照搬此描边示例。
```html ```html
<!-- 业务按钮只选择语义,不复制尺寸、颜色及交互状态规则 --> <!-- 业务按钮只选择语义,不复制尺寸、颜色及交互状态规则 -->
<el-button class="density-action" @click="edit">编辑</el-button> <el-button class="density-action" @click="edit">编辑</el-button>
@@ -289,7 +428,7 @@
2. **新增通用尺寸先改变量。** 模块与页面只引用 `--admin-*`;禁止在页面重定义公共默认值。局部标签宽度是明确的业务参数,不改变全局标签宽度。 2. **新增通用尺寸先改变量。** 模块与页面只引用 `--admin-*`;禁止在页面重定义公共默认值。局部标签宽度是明确的业务参数,不改变全局标签宽度。
3. **不要把代码搬到模块 CSS 就称为公共化。** 多个业务共用的按钮、页签、信息表与弹框规则留在公共层;模块 CSS 不能依赖另一个业务模块的类名,也不引入第二套按钮颜色变量。 3. **不要把代码搬到模块 CSS 就称为公共化。** 多个业务共用的按钮、页签、信息表与弹框规则留在公共层;模块 CSS 不能依赖另一个业务模块的类名,也不引入第二套按钮颜色变量。
4. **保留显式接入边界。** 公共样式不能使用无范围的 `.el-button`、`.el-table`、`.el-dialog` 选择器。Teleport 的弹框、抽屉必须自己携带密度类;不能仅依赖页面父级。 4. **保留显式接入边界。** 公共样式不能使用无范围的 `.el-button`、`.el-table`、`.el-dialog` 选择器。Teleport 的弹框、抽屉必须自己携带密度类;不能仅依赖页面父级。
5. **共用组件保留未接入消费者。** CSS 变量的兜底值用于独立渲染和未接入入口;两个已接入模块始终由公共变量决定实际值,兜底值不是第二份密度配置。打印标签、PDF 尺寸、原图、画布和既有窄屏规则不能机械替换。 5. **共用组件保留未接入消费者。** CSS 变量的兜底值用于独立渲染和未接入入口;已接入消费者始终由公共变量决定实际值,兜底值不是第二份密度配置。打印标签、PDF 尺寸、原图、画布和既有窄屏规则不能机械替换。
6. **公共调整按消费者回归。** `adminDensity.test.ts` 维护明确的页面/组件清单,不扫描全部后台。检查模板中公共按钮、页签和信息表的真实祖先是否带有密度入口,不能仅断言文件导入了 CSS 或出现过密度类;页面弹框带有 `admin-density-dialog` 不代表列表与详情已接入。新增接入时同步清单及逐操作矩阵,运行合同、受影响测试、类型检查、全量测试和构建。 6. **公共调整按消费者回归。** `adminDensity.test.ts` 维护明确的页面/组件清单,不扫描全部后台。检查模板中公共按钮、页签和信息表的真实祖先是否带有密度入口,不能仅断言文件导入了 CSS 或出现过密度类;页面弹框带有 `admin-density-dialog` 不代表列表与详情已接入。新增接入时同步清单及逐操作矩阵,运行合同、受影响测试、类型检查、全量测试和构建。
7. **视觉与代码分开记录。** 本轮默认人工截图;代码通过不等于视觉验收通过。已确认业务宽度和工作区高度可以保留为例外,例外写入核对记录。 7. **视觉与代码分开记录。** 本轮默认人工截图;代码通过不等于视觉验收通过。已确认业务宽度和工作区高度可以保留为例外,例外写入核对记录。
@@ -298,34 +437,16 @@
### 先确定范围,再选择公共能力 ### 先确定范围,再选择公共能力
1. 用导航与实际路由列出全部菜单入口,以及新建、详情、编辑和深链页面;不能把文件夹数量当作页面覆盖数。为每个页面沿实际组件引用列出弹框、抽屉、消息确认、预览与打印入口,按逐操作矩阵记录承载方式。 1. 用导航与实际路由列出全部菜单入口,以及新建、详情、编辑和深链页面;不能把文件夹数量当作页面覆盖数。为每个页面沿实际组件引用列出弹框、抽屉、消息确认、预览与打印入口,按逐操作矩阵记录承载方式。
2. 默认复用普通表格 36px 行高、正文 13px、辅助文字 12px、行内描边按钮 28px、页签 38px、轻量返回和连续信息表。新模块的行内业务操作默认纯文字;顶部/提交保留 32px 主次按钮。动作语义色沿用本规范,不通过按钮文字自动猜测。 2. 默认复用普通表格 36px 行高、正文 13px、辅助文字 12px、行内操作基准 28px、页签 38px、轻量返回和连续信息表。新模块的行内业务操作默认纯文字;顶部/提交保留 32px 主次按钮。动作语义色沿用本规范,不通过按钮文字自动猜测。
3. 模块只保留业务列宽、字段跨列、布局与图纸尺寸等参数。`density-fields` 的四列是默认值,不是固定业务要求;返回位置与大弹框尺寸也不能从订单整页复制。 3. 模块只保留业务列宽、字段跨列、布局与图纸尺寸等参数。`density-fields` 的四列是默认值,不是固定业务要求;返回位置与大弹框尺寸也不能从订单整页复制。
4. 编辑表格、流程图、装柜模型、数据看板、图片、标签和 PDF 保留业务所需面积;指标卡和图表不得套用 `.density-fields`或其他详情表格样式,模型画布和打印尺寸不套普通行高。空态、错误、长内容、处理中、只读和无权限仍要可用。 4. 编辑表格、流程图、装柜模型、数据看板、图片、标签和 PDF 保留业务所需面积;指标卡和图表不得套用 `.density-fields`或其他详情表格样式,模型画布和打印尺寸不套普通行高。空态、错误、长内容、处理中、只读和无权限仍要可用。
5. 获准采用蓝白外观的页面按 [蓝白样板接入入口](界面参考/蓝白卡片式工作台风格参考.md#其他页面该参考哪个样板) 选择对应页面类型;列表参考销量分析,复杂分析参考库存分析,运行看板参考数据采集,不一律复制经营总览的大指标卡。保留现有密度根,显式接入主题根和公共类,浮层自行声明作用域;具体覆盖与截图结论回到目标模块现有矩阵。 5. 获准采用蓝白外观的页面按 [蓝白样板接入入口](界面参考/蓝白卡片式工作台风格参考.md#其他页面该参考哪个样板) 选择对应页面类型;列表参考销量分析,复杂分析参考库存分析,运行看板参考数据采集,不一律复制经营总览的大指标卡。保留现有密度根,显式接入主题根和公共类,浮层自行声明作用域;具体覆盖与截图结论回到目标模块现有矩阵。
### 完整接入示例 ### 密度类与浮层接入
下面展示已有页面的接入结构,`rows`、`columns`、事件与表单仍使用该页面原实现。页面脚本直接导入 `@/styles/adminDensity.css`,不依赖先进入其他菜单后残留的样式,也不把这份 CSS 放入 `scoped` 样式块。 页面直接导入 `@/styles/adminDensity.css`,实际根使用 `admin-density`;蓝白主题的组合示例见本文“蓝白主题与图表”。
```vue 样式接入不授权新增业务动作。详情复用页面根节点的 `admin-density`;原生详情页签用 `density-tabs` / `density-tab-icon`,连续信息表用 `density-fields`。既有 Element 页签使用 `density-element-tabs`;页签栏与正文分离时隐藏空内容容器。在 `el-tab-pane` 内承载正文的页面必须同时使用 `density-contained-tabs`,保留正文并由公共样式设置内容间距。不得依赖页面 CSS 覆盖隐藏规则。既有原生资料/历史表用 `density-table`,分组表单用 `density-form`。返回按钮使用 `link class="density-back"`,跟编号、状态排在同一行。
<AdminPage class="admin-density">
<ListPageLayout>
<DataTable :data="rows" :columns="columns">
<template #actions="{ row }">
<div class="density-actions">
<el-button class="density-action" @click="openDetail(row)">详情</el-button>
<el-button class="density-action" data-tone="warning" @click="review(row)">审核</el-button>
</div>
</template>
</DataTable>
</ListPageLayout>
<AppDialog class="admin-density-dialog" v-model="editorOpen" title="编辑资料">
<!-- 原有业务表单 -->
</AppDialog>
</AdminPage>
```
此结构只说明样式接入,不授权新增审核等业务动作。详情复用页面根节点的 `admin-density`;原生详情页签用 `density-tabs` / `density-tab-icon`,连续信息表用 `density-fields`。既有 Element 页签使用 `density-element-tabs`;页签栏与正文分离时隐藏空内容容器。在 `el-tab-pane` 内承载正文的页面必须同时使用 `density-contained-tabs`,保留正文并由公共样式设置内容间距。不得依赖页面 CSS 覆盖隐藏规则。既有原生资料/历史表用 `density-table`,分组表单用 `density-form`。返回按钮使用 `link class="density-back"`,跟编号、状态排在同一行。
Teleport 弹框用 `admin-density-dialog`,抽屉框架用 `admin-density-drawer`,`ElMessageBox` 用 `customClass: 'admin-density-confirm'`;这些浮层必须各自声明,页面祖先不能替代。抽屉当前公共框架负责字号、标题和正文边距;其正文若复用页面级表格、信息表或按钮原语,在正文业务根节点显式接入 `admin-density`。不要把名为 Drawer 的嵌入组件当作实际抽屉,承载方式以模板和调用端为准。 Teleport 弹框用 `admin-density-dialog`,抽屉框架用 `admin-density-drawer`,`ElMessageBox` 用 `customClass: 'admin-density-confirm'`;这些浮层必须各自声明,页面祖先不能替代。抽屉当前公共框架负责字号、标题和正文边距;其正文若复用页面级表格、信息表或按钮原语,在正文业务根节点显式接入 `admin-density`。不要把名为 Drawer 的嵌入组件当作实际抽屉,承载方式以模板和调用端为准。
+146 -2
View File
@@ -2,14 +2,17 @@
## 范围与验收状态 ## 范围与验收状态
- 本规范由客户端样式对话确认建立,首个验收样板为“头程物流 → 订单列表”(`/orders/first-leg`)。当前为首版实现,待人工截图确认;通过后再逐模块推广。 - 本文是客户端样式的现行维护正文,按新增页面和列表分别定义规则。后续客户端的新增、新建、下单操作统一采用下文“新增页面”的风格;列表沿用列表章节,不把两者的控件尺寸和间距混用。
- 新增页以“海外采购下单”和“美国本土卡车下单”在当前对话确认的外观与布局为样板:满宽、无阴影、精简说明、12px 模块间距、浅色 placeholder 和字段右上角校验提示。两页的不同字段排列见下文,不按整页截图机械复制。规范确定不等于所有新增页已改造或通过视觉验收。列表首个验收样板为“头程物流 → 订单列表”(`/orders/first-leg`),其验收状态见文末。
- 只维护 `apps/client-web/` 内的样式和公共组件,不与 Admin 跨应用链接依赖。 - 只维护 `apps/client-web/` 内的样式和公共组件,不与 Admin 跨应用链接依赖。
- 左侧菜单背景保持现状,不修改 `shell.css` 中的导航背景,也不通过全局品牌变量间接改变导航。 - 左侧菜单背景保持现状,不修改 `shell.css` 中的导航背景,也不通过全局品牌变量间接改变导航。
- 标准通过正文容器 `.client-ui` 接入;首批覆盖订单列表。创建、详情与其他模块需分别核对承载方式和字段,不以列表通过代替整模块验收。 - 标准通过正文容器 `.client-ui` 接入;新增页在本页或新增表单容器内覆盖对应令牌,不将新增页尺寸写入全局默认值。创建、详情与其他模块需分别核对承载方式和字段,不以某个样板通过代替整模块验收。
- 按 1920×1080、浏览器缩放 100% 验收,保留现有窄屏能力。 - 按 1920×1080、浏览器缩放 100% 验收,保留现有窄屏能力。
## 公共入口与职责 ## 公共入口与职责
按任务阅读:新增、新建、下单读“新增页面”;列表读“尺寸与布局”“颜色与按钮”及适用的列表样板条款。视觉核对方法只维护在 [Admin / Client 前端原型还原验收规则](Admin-Client前端原型还原验收规则.md)。
| 入口(相对 apps/client-web) | 职责 | | 入口(相对 apps/client-web) | 职责 |
|---|---| |---|---|
| `src/styles/client-ui.css` | `--client-*` 颜色、尺寸、间距;正文按钮和状态外观 | | `src/styles/client-ui.css` | `--client-*` 颜色、尺寸、间距;正文按钮和状态外观 |
@@ -17,11 +20,150 @@
| `src/components/common/DataTable.vue` | 表格、工具栏、行操作、分页;工具栏内容用插槽提供 | | `src/components/common/DataTable.vue` | 表格、工具栏、行操作、分页;工具栏内容用插槽提供 |
| `src/components/common/tableActions.ts` | 三个操作以内全部展示,超过三个折叠;禁用和加载状态执行保护 | | `src/components/common/tableActions.ts` | 三个操作以内全部展示,超过三个折叠;禁用和加载状态执行保护 |
| `src/modules/first-leg/utils/firstLegOrder.ts` | 头程状态码 → 语义色,不在公共样式中判断业务状态码 | | `src/modules/first-leg/utils/firstLegOrder.ts` | 头程状态码 → 语义色,不在公共样式中判断业务状态码 |
| `src/modules/cross-border/views/ProcurementView.vue` 的新增分支 | 新增页外观样板;只参考当前新增分支,不跨模块导入该业务页面 |
| `src/modules/cross-border/components/BusinessOrdersView.vue` 与 `TransportDemandForm.vue` 的新增分支 | 本土卡与散板共用新增外观;参考三列短字段、两列详细地址和右上角校验。编辑分支及各业务的视觉验收分别核对,不从共用组件推定已通过 |
页面只提供字段、操作、业务状态与权限,不再覆盖公共工具栏 padding、表格行高及分页 padding。确有业务差异时增加明确的组件能力,避免重复页面 CSS。 页面只提供字段、操作、业务状态与权限,不再覆盖公共工具栏 padding、表格行高及分页 padding。确有业务差异时增加明确的组件能力,避免重复页面 CSS。
## 新增页面
### 适用范围与设计依据
- 后续客户端新增、新建、下单操作按本章实施。既有页面在对应任务触及时按授权范围调整,不因规范更新批量改造其他页面。
- 本章替代最初海外采购 HTML / UI Redesign Spec 中的 1240px 内容宽度上限、26px 模块间距、24px 表单卡片内边距及重复说明文字;不采用带阴影的大圆角截图版本。桌面导出文件是参考材料,后续规则统一更新本文,不要求开发者依赖个人桌面文件或设计工具链接。
- 统一外观不统一业务表单:字段、顺序、分组、必填条件、默认值、权限、计算口径和提交行为仍按各业务契约及已确认原型。海外采购的采购方向、币种、收件资料等不自动成为其他新增页的字段。
- 独立页面、居中弹框、抽屉仍按对应操作的已确认承载方式;本规范不将所有新增操作改成独立页面。后续用户明确确认的外观例外优先于本章,其余通用外观不回退到旧原型的大留白、阴影或说明堆叠。
- 本章只约束新增内容区。复用现有侧边栏、顶栏、页签和面包屑,不复制设计稿中的静态用户名、菜单或页签,不因新增页改造修改公共外框。
### 企业设置承载方式
以下为当前已确认的企业设置操作,不按字段数量自动改造其他业务。企业设置常规表单采用“完整维护进入独立页面,少量字段用居中弹框”的方式;这些操作不再使用右侧抽屉。
| 操作 | 当前承载方式 |
|---|---|
| 编辑企业资料 | 独立页面,分企业基本信息、联系信息两块;保存后返回企业资料 |
| 成员新增/编辑 | 独立页面,分账号信息、联系信息与角色两块;保存后返回成员列表 |
| 角色新增/编辑 | 三个字段,使用居中弹框;内置角色和权限限制沿用业务规则 |
| 角色权限分配 | 保持现有独立页面 |
| 资质上传、文件预览、成员密码重置 | 保持各自专项弹框与原有业务校验 |
独立编辑页沿用本章的满宽、白色无阴影卡片、三列短字段、12px 模块间距与右上角校验提示。新增与编辑路由分别校验对应操作权限,菜单仍只展示原有业务入口;直接打开与刷新应重新加载服务端资料,加载失败提供重试,保存失败保留填写内容。
### 页面组织与信息密度
1. 独立新增页使用一个清晰标题,右侧按现有列表访问权限提供返回入口;默认不增加标题下的解释性段落。
2. 摘要区按业务需要使用,展示数量、预算等真实表单派生值。已有三项摘要时等宽三列;没有必要摘要的表单直接进入业务区,不为套用样板硬凑三个指标。
3. 表单按业务分组呈现为独立白色卡片,标题位于卡片上方,以小圆点区分分组。常规短字段使用三列等宽网格;成对详细地址可使用两列,单个长地址、链接、长备注可占满整行。具体排列按下文样板及业务确认,不把所有区域强制设成相同列数。既有明确分组和摆放不得因凑满网格擅自重排。
4. 独立页底部操作靠右,返回列表在前、主提交按钮在后;返回资格沿用现有权限。弹框或抽屉保留其已确认的取消、关闭和提交语义,不硬加“返回列表”。
5. 内容填满所在容器的可用宽度,使用 `width: 100%`、`min-width: 0`;独立页不设置 1240px 等固定内容上限造成右侧空白。弹框和抽屉中的满宽指其正文容器,不是铺满浏览器视口;保留应用壳层或容器已有边距,不重复包一层大 padding。
6. 在 1920×1080、100% 缩放下优先减少无效留白和重复文案,使主要填写内容更集中。长表单允许正常滚动,不通过隐藏必要字段、缩小字号、裁切内容或未经确认拆步骤强行塞进一屏;一屏效果以人工截图为准。
### 字段列数与宽度
“内容区满宽”“字段单独一行”和“控件占满整行”是三个不同要求,实施前按下表区分。
| 场景 | 当前标准 | 样板 |
|---|---|---|
| 页面、表单卡片 | 铺满可用正文宽度,不留下固定宽度上限造成的右侧空白 | 两个新增页 |
| 常规短字段 | 一行三列等宽,横向间距 20px;输入框填满所在列 | 采购品类/商品名称/商品规格;本土卡取货地/联系人/电话 |
| 前置选择项独立一行 | 单独占一行位置,控件只占三列中的一列,与下一行第一列对齐,右侧留空 | 采购方向、车辆类型 |
| 成对详细地址 | 同一行两列等宽,分别放取货地址、送达地址 | 本土卡运输信息 |
| 单个长字段 | 按已确认分组占满该行,例如商品链接、完整收货地址、备注 | 海外采购及本土卡备注 |
- 前置选择项的一列宽度按正文网格计算:`calc((100% - 40px) / 3)`,其中 40px 是两个 20px 列间距。不得改成任意固定的 280px,也不得把“独立一行”理解成下拉框横跨整张卡片。
- 混合三列短字段与两列地址时,可以使用六列基础网格,短字段跨两格、详细地址跨三格;这只是实现方式,用户看到的仍是三列或两列。前置项独占整行位置,再将自身宽度限制为标准一列。
- 字段按实际阅读顺序写入模板,键盘 Tab 顺序与视觉顺序一致;不只用 CSS `order` 把同一组联系人拆散重排。
### 两个样板的具体排列
以下是后续页面可对照的布局依据,不是要求其他业务复制相同字段、默认值或摘要指标。
| 页面/区域 | 已确认排列 |
|---|---|
| 海外采购/摘要 | 数量、预算单价、币种三张等宽卡片,数值与当前表单联动 |
| 海外采购/商品与预算 | 采购方向独立一行、控件一列宽;其后采购品类/商品名称/商品规格三列,采购数量/预算单价/预算币种三列;商品链接整行,预算总上限用普通文本 |
| 海外采购/收件资料 | 收件人、联系电话各占三列网格的一列,第三列留空;完整收货地址、采购要求各占整行 |
| 本土卡/运输信息 | 车辆类型独立一行、控件一列宽;取货地/取货联系人/取货联系电话一行三列;送达地/送达联系人/送达联系电话一行三列;取货地址/送达地址一行两列 |
| 本土卡/货物信息 | 托数/总重量/总体积一行三列 |
| 本土卡/费用与时效 | 预算总价与币种组成同一字段,占两列网格的左列,右列留空;取货时间/送达时间一行两列;备注整行 |
代码参考:[海外采购新增分支](../apps/client-web/src/modules/cross-border/views/ProcurementView.vue)、[本土卡页面外框](../apps/client-web/src/modules/cross-border/components/BusinessOrdersView.vue)、[本土卡表单](../apps/client-web/src/modules/cross-border/components/TransportDemandForm.vue)。新业务先确定字段分组与承载方式,再使用通用外观;若要调整上述排列或推广到其他共用分支,须在对应任务中明确范围,不顺手扩展。
### 尺寸与间距
以下数值分别适用,不将所有间距一律改为 12px。
| 元素 | 新增页标准 |
|---|---|
| 页头、摘要区、表单模块底部间距 | `margin-bottom: 12px` |
| 摘要卡之间 | 横向 gap 16px |
| 摘要卡内部 | padding 12px 16px;纵向 gap 8px |
| 摘要标题行 | 图标与标题 gap 12px;图标底块 44×44px,圆角 8px;线性图标 20px |
| 表单卡片 | padding 16px;1px 边框;圆角 10px |
| 摘要卡片 | 1px 边框;圆角 10px |
| 分组标题 | 下方 margin 10px;圆点 9px;圆点与标题 gap 10px |
| 表单网格 | 常规三列等宽,两列/整行区域按上文布局;纵向 gap 12px、横向 gap 20px;单项不另叠加底部 margin |
| 标签与控件 | 间距 6px;标签行高 20px |
| 字段校验提示 | 字段右上角、标签同行,12px 字号、20px 行高;不增加底部占位和字段高度 |
| 输入框、选择框 | 最小高 44px;圆角 6px;padding 10px 14px |
| 多行输入 | 最小高 110px;padding 11px 14px;允许纵向调整;字数计数在下方右侧,间距 4px |
| 预算等必要汇总值 | 上方 margin 10px;字号 13px、行高 20px;普通文本,不做说明横幅 |
| 底部按钮间距 | gap 12px |
| 次按钮 | 最小高 44px;padding 10px 18px;圆角 6px |
| 主按钮 | 最小高 44px;padding 12px 28px;圆角 6px |
### 字体、颜色与状态
字体沿用中文无衬线栈:`"PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif`。
| 用途 | 标准 |
|---|---|
| 独立页标题 | 26px / 700;margin 0 |
| 分组标题 | 18px / 700 |
| 正文、输入内容 | 14px / 400 |
| 字段标签 | 14px / 600 |
| 摘要标题、数值、单位 | 15px / 600;30px / 700;14px / 500 |
| 内容底色、卡片及控件底色 | `#F4F7FC`、`#FFFFFF` |
| 主文字、标签、次要文字 | `#1F2937`、`#374151`、`#6B7280` |
| 占位文字 placeholder | `#B0B7C3`;输入框、多行输入和选择框的未填写提示统一使用,已填写内容保持正文色 |
| 卡片边框、控件及次按钮边框 | `#E3E8F0`、`#D5DCE8` |
| 主按钮 | `#2F7BFF` 背景、白字 |
| 次按钮、摘要数值 | `#1D5FE0`;次按钮白底描边 |
| 必填星号 | `#E5484D` |
| 焦点 | 2px `#2F7BFF` outline;无发光阴影 |
- 卡片、输入框、选择框及其弹出层、按钮均不使用装饰阴影、渐变、毛玻璃或位移动效;分隔依靠边框与底色。
- 主要操作以蓝色为强调色,其他颜色仅用于必要的业务状态、错误反馈和小面积分组标记。样板图标底块可使用蓝 `#EAF2FF / #2F7BFF`、绿 `#E8F8F0 / #16A34A`、橙 `#FFF5E0 / #D97706`;分组圆点使用蓝色或青色 `#0EA5A4`,不把整块表单染成状态色。
- 已确认的原型图标沿用对应资源;未定义的图标使用项目既有图标库,不引入第二套组件库或表情图标。无需要时不添加装饰图标。
- 保留清晰的禁用、提交中、焦点和错误状态,状态不只依赖颜色表达;不得为了“干净”删去校验、失败重试或权限说明。
### 文案与数据绑定
- 删除重复解释性提示:不恢复页头“一单一个商品及规格……”、摘要卡下的说明行,也不新增类似的常驻说明段落或黄色提示横幅。
- 字段标签与简短占位提示负责说明输入用途;校验错误、提交失败、无权限及必要业务提示按实际状态就近出现。保留影响客户正确操作的必要信息,不将“去提示”理解为关闭验证或隐藏错误。
- 未填写字段应提供简短 placeholder,例如“请选择车辆类型”“请输入取货联系人姓名”“请选择取货日期和时间”;不要通过 `placeholder=""` 将必要输入提示清空。按字段性质标明选填,不使用整段业务说明代替占位文字;已存在默认值时显示真实值,不为显示 placeholder 清除默认值,尤其不得把有效的 `0` 当作空值。
- 保留真实汇总数据,例如货款预算总上限;摘要和汇总跟随当前表单实时更新,不能保留设计稿中的静态 `1`、`USD` 或 `0 / 1000`。
- 空值显示“—”,合法零值按零展示;金额沿用现有精度处理,不因样式调整改变校验或金额口径。支持多个币种或方向的业务继续联动展示,不用原型示例缩减现有能力。
### 必填校验与稳定布局
- 字段错误提示统一放在输入框右上方,与字段标签同行、靠右对齐;保留必填星号与错误边框。提示出现、纠正或清空时,后续字段和整张卡片不得上下跳动。
- 错误不参与正常文档流,不在控件下面额外预留 16px 空行;标签区应能同时容纳标签与简短错误文案。对当前明确的单行标签,可相对 `.el-form-item__content` 使用 `bottom: calc(100% + 6px)`、`right: 0` 定位,宽度避开标签。更长标签或提示须单独核对,不截断必要错误或覆盖标签、输入内容。
- 必填星号必须配套字段级校验:Element Plus 表单绑定 `ref`、`model`、`rules`,校验项绑定对应 `prop`;文本失焦、选项变化时校验当前字段,提交时校验全部必填项。未通过时不发送创建请求,不用整页错误代替缺失字段提示。
- 填写正确并再次触发校验后清除该字段错误;重置表单时清除校验状态;提交中防重复点击,失败保留填写内容。采购预算单价 `0` 是有效值,不得误报必填。
- 已有金额、格式、权限和服务端校验继续保留;非字段级请求失败仍按原有页面错误反馈处理。本规范不改变业务规则,也不将两页未统一的所有校验逻辑推定为已统一。
### 接入与核对
- 使用现有 Vue、Element Plus 和 `.client-ui`;新增页所需 44px 控件、14px 字号、配色等在新增内容容器内覆盖。列表仍使用下文的 32px 控件,不修改全局 `:root` 使其他页面跟随变化。
- 同一组件同时承载列表、新增和详情时,新增样式必须限制在新增分支;不得扩大到列表、详情或侧边导航。跨模块稳定复用时按应用指引抽取通用能力,不跨模块导入采购页,也不复制设计工具的 React 运行时。
- 新增或整体重排页面时,按前端验收规则核对该操作的承载方式、满宽、字段分组和按钮;重点检查前置选择项是否与三列网格对齐、短字段和成对地址列数、placeholder、长值、摘要联动、空值与零值、校验出现/消失时的位置稳定及正常滚动。纯文案或小间距调整只核对差异,不重复建立完整矩阵。
- 自动检查按实际变更选择;文案和纯样式不自动升级为全量测试、类型检查或构建。真实视觉由人工提供截图确认,部署成功或静态资源命中不等于一屏布局通过;不开展当前阶段未要求的窄屏验收。
## 尺寸与布局 ## 尺寸与布局
本节用于列表、查询栏和表格工具栏;新增表单使用上文“新增页面”的尺寸。
| 项目 | 标准 | | 项目 | 标准 |
|---|---| |---|---|
| 正文、表格、按钮字号 | 13px | | 正文、表格、按钮字号 | 13px |
@@ -42,6 +184,8 @@
## 颜色与按钮 ## 颜色与按钮
本节用于列表操作和状态语义;新增表单按钮的外观使用上文“新增页面”,业务危险语义和权限要求仍须保留。
| 用途 | 文字色 | 背景色 | | 用途 | 文字色 | 背景色 |
|---|---|---| |---|---|---|
| 默认操作 | `#1777ff` | 白色 | | 默认操作 | `#1777ff` | 白色 |
+39 -80
View File
@@ -1,91 +1,50 @@
# 虫虫出海文档索引 # 虫虫出海文档入口
项目交付文档按业务域组织。当前只有测试环境,以端到端全流程为统一范围;历史规划、确认和验收记录保留在对应业务域目录,仅用于追溯决策,不构成功能边界。 本文件只负责选入口,不保存业务规则或部署进度。已知页面、文件、API 或当前正文时跳过本文件;未知代码入口查[业务索引](业务快速索引.md)的命中行,不沿所有 README 逐层读取。
- [测试环境单机部署与配置契约](测试环境单机部署与配置契约.md):唯一环境、部署配置、整体切换与验收。 ## 按任务选一种入口
- [统一认证与服务通信契约](统一认证与服务通信契约.md):统一入口、权限撤销、逐事件投递与幂等。
- [业务单据编号契约](业务单据编号契约.md):单据前缀、北京时间日流水、唯一性及保留编号范围。
## 业务域文档 | 任务 | 从哪里开始 |
|---|---|
| 改代码、文案或局部逻辑 | 已知目标文件及适用 `AGENTS.md`;业务语义不明才补一段正文 |
| 只有中文业务词或多义词 | [业务索引](业务快速索引.md),代码入口与规则正文分开选择 |
| 跨阶段流程、节点关系或上下游交接 | [全流程维护入口](头程到尾程/README.md),只查受影响阶段 |
| 已知某个业务域,需要找规则 | 下表选择该域;找到正文后停止扩展 |
| 运行、验证、部署或数据库操作 | 下方工程专题,按操作类型只选对应章节 |
- [业务快速索引](业务快速索引.md):按关键词检索跨端代码入口与业务边界;含独立的按需原型入口表。先查根 AGENTS.md 短路由,只读命中行。 ## 业务域入口
- 终端业务细则:[Admin](../apps/admin-web/docs/business-index.md)、[Client](../apps/client-web/docs/business-index.md)、[海外 PDA](../apps/pda-overseas-uniapp/docs/business-index.md);先从各应用 AGENTS.md 短表定位,行为变更再核对受影响条款。
- [订单与客户](订单与客户/README.md):登录认证、客户与企业、权限、头程订单和客户工作台。 | 业务域 | 入口 |
- [入库测量与计费](入库测量与计费/README.md):预约取货、到仓收货、箱码与箱唛、测量、尺寸策略、计价和入库费用。 |---|---|
- [Firstleg 按需业务索引](../baiyue-firstleg/firstleg/docs/business-index.md):服务代码入口及测量、计价、装柜、PDA 资源结算细则;先读服务 AGENTS,再查受影响条款。 | 客户、企业、权限与头程订单 | [订单与客户](订单与客户/README.md) |
- [国内货柜履约](国内货柜履约/README.md):分柜与同柜、智能排柜、订舱、拖车、PDA 拣货、装柜、报关和国内出仓。 | 到仓、测量、箱码、计价与入库费用 | [入库测量与计费](入库测量与计费/README.md) |
- [船期日历功能规划](国内货柜履约/船期日历功能规划.md):渠道、周模板、单次船期、收货截止时间和按渠道货量统计的独立日历规划。 | 分柜、装柜、订舱、拖车、报关与国内出仓 | [国内货柜履约](国内货柜履约/README.md) |
- [海外仓业务](海外仓业务/README.md):船节点、海外接柜、入仓、库存、托盘、换标、转运、废弃、退货、排车、PDA 出库、派送、异常退回、客户回访、一件代发及海外本土业务。 | 接柜、库存、库内服务、排车、预约与海外本土业务 | [海外仓业务](海外仓业务/README.md) |
- [Lastleg 按需业务索引](../baiyue-firstleg/lastleg-service/docs/business-index.md):服务代码入口及事件、查询、履约约束;先读服务 AGENTS,再查受影响条款。 | 费用入池、账单、资金账户与收付款 | [财务管理](财务管理/README.md) |
- [排车列表统一作业改造契约](海外仓业务/排车列表统一作业改造契约.md):五阶段排车、一单一趟、跨客户同车、派送安排及四块排车详情的当前改造入口。 | 自营经营、库存周转与领星采集 | [自营业务](自营业务/README.md) |
- [外配业务首版开发契约](海外仓业务/外配业务首版开发契约.md):原排车装车后的外配车辆视图、整车承运金额、到达时间和五个装车照片位。 | 箱唛、托盘标、HOLD 与 BOL | [打印标签维护](打印标签维护/README.md) |
- [排车流程修复规划](海外仓业务/排车流程修复规划.md):取消释放、派送状态、换标全托、合托来源和前端草稿的修复边界、分工及回归要求。
- [采购订单样品履约流程变更需求](海外仓业务/采购订单样品履约流程变更需求.md):采购样品购买、装箱、面单、交寄、国内核费与寄客户的变更入口。
- [船节点标准化契约](海外仓业务/船节点标准化契约.md):统一船司原始状态、标准节点、预计/实际时间、异常事实、还柜停止规则和新增船司接入门禁。
- [美国预约管理统一总览与优化方案](海外仓业务/美国预约管理统一总览与优化方案.md):美国段各类预约的范围、关联关系、表单精简及分步实施建议。
- [预约工作日历 V13 变更说明](海外仓业务/预约工作日历V13变更说明.md):多客户共车、分批后送、改期取消、重新预约和未定日期跟进的正式业务规则与验收场景。
- [预约工作日历开发协作契约](海外仓业务/预约工作日历开发协作契约.md):工作日历与完整待办的接口、数据归属和开发文件边界。
- [预约送仓](海外仓业务/README.md#预约送仓):预约日历与跨客户同仓预约入口。
- [车辆管理原型梳理与任务规划](海外仓业务/车辆管理原型梳理与任务规划.md):司机资质、车次、自有/外接承运、运维与报价的范围及契约入口。
- [内部拼车需求池首版开发契约](海外仓业务/内部拼车需求池首版开发契约.md):车次余位发布、销售意向、承运占位、本土订单关联及我仓上车流程。
- [财务管理](财务管理/README.md):应收、应付、费用池、账单、收款、成本、核销、凭证以及国内外业务费用来源。
- [自营业务](自营业务/README.md):平台自营经营总览图表、SKU 销量、分仓产品库存、库存周转视图与数据采集;Admin 入口 `apps/admin-web/src/modules/self-operated/AGENTS.md`,业务设计、采集页面与进度图、查询性能优化及领星 API 联调依据见该业务域入口。
- [打印标签维护](打印标签维护/README.md):箱唛、各类托盘标、HOLD、BOL 与其他单据的现状盘点、参考样张和逐项改版记录。
## 全流程公共契约 ## 公共契约与工程专题(命中才读)
### 当前流程入口(收尾变更只看这里) | 主题 | 当前入口 |
|---|---|
| 服务拓扑、环境配置、部署状态与验收项 | [部署主契约](测试环境单机部署与配置契约.md) |
| Gateway、Auth 会话、服务身份与可靠投递 | [认证与通信主契约](统一认证与服务通信契约.md) |
| 平台/客户、菜单与操作权限 | [层级与权限契约](平台客户层级与权限契约.md) |
| 单据编号、订单主状态与操作 | [编号契约](业务单据编号契约.md)、[订单状态契约](统一订单主状态与操作契约.md),按问题选一项 |
| 本机资源、最小验证、工作区与协作执行 | [工程执行约束](AI工程执行与协作约束.md) |
| Admin 样式、Client 样式或视觉验收 | [Admin 样式](Admin高密度界面规范.md)、[Client 样式](Client界面样式规范.md)、[前端验收](Admin-Client前端原型还原验收规则.md),不将三份作为共同必读 |
| 海外 PDA 首页、作业列表与待办样式 | [海外 PDA 样式规范](海外PDA界面样式规范.md),不自动套用 Admin/Client 样式 |
| 测试 Jenkins、数据库操作与中文注释 | [测试部署指南](测试环境Jenkins部署指南.md)、[数据库操作手册](../baiyue-firstleg/deploy/sql/数据库迁移操作手册.md)、[数据库注释规范](数据库注释维护规范.md),按操作选读 |
| 测量设备上传 | [墨家接口说明](墨家设备测量上传接口说明-V3.md) |
- [头程到尾程当前维护入口](头程到尾程/README.md):集中进入总览、六个阶段、货柜入口、报关专题,以及页面和需求参考。 ## 方案、证据与历史(按需)
### 历史与参考(保留,不作为日常流程入口) - 独立主题设计只在该任务触发:[数据库发布方案](数据库版本迁移与Jenkins自动发布方案.md)、[生产发布方案](生产服务监控告警与无停机发布方案.md)、[生产环境方案](阿里云生产环境选型压测与上线手册.md)、[OSS 设计](阿里云OSS文件中心接入设计与评审.md)、[看板规划](首页数据看板真实化与统计策略规划.md)。方案不证明已实现或已部署。
- 原型与截图按应用指引定向查找;样板、样式核对记录、进度表和验收报告不作为日常开发入口。
- [历史流程](归档/头程到尾程/README.md)、[货柜历史](国内货柜履约/归档/README.md)、[财务历史](财务管理/归档/财务闭环盘点历史记录.md)仅用于追溯;旧双区域架构不覆盖当前主契约。
- 只有独立任务协作才查[开发环境独立任务协作登记](开发环境独立任务协作登记.md)或[测试环境独立任务协作登记](独立任务协作登记.md),不同时读取两表。
- [头程到尾程历史文档](归档/头程到尾程/README.md):全流程操作手册、旧现状全景、AI 上下文和易用性方案。 ## 维护边界
- [国内货柜履约历史记录](国内货柜履约/归档/README.md):开发规划、进度、门禁、验收矩阵、审计和旧确认材料。
以上文件继续保留,分别用于历史现状、操作说明和方案追溯;开发规划、进度、门禁和验收记录也按业务域保留,不再与当前节点总表同步改写。 同一主题优先更新现行正文,不为每轮对话新增方案、总结、进度或交接文件。只有独立主题且现有正文无法承载时才新增,并在所属域登记角色、触发条件和替代关系。已完成的过程材料冻结归档;索引只同步路径或职责变化,不复制阶段数量、字段、状态、测试结果或完成进度。事实优先级及修改范围遵循工作区根指引。
- [跨区域认证与服务通信契约](跨区域认证与服务通信契约.md):统一账号、国内/海外 Token、双区域 API、JWKS、Outbox/Inbox 与服务身份边界。
- [双区域部署与 Nacos 规划](双区域部署与Nacos规划.md):开发/测试同机共置、生产国内/海外独立控制面、Nacos、数据库及 Event Bridge 部署边界。
### 通用规则与专项入口
- [平台、客户层级与权限契约](平台客户层级与权限契约.md):平台/客户两级产品语义、列表包含详情的只读权限和跨层同步要求。
- [统一订单主状态与操作契约](统一订单主状态与操作契约.md):统一订单状态、操作编码、内部状态映射和可信履约回传边界。
- [Admin/Client 前端原型还原验收规则](Admin-Client前端原型还原验收规则.md):页面操作承载方式、视觉还原、响应式检查和验收证据要求。
- [Admin 高密度界面规范](Admin高密度界面规范.md):已确认订单样板的字号、间距、表格、描述表和彩色页签规则;[统一弹窗规范](Admin高密度界面规范.md#弹框与表单)维护所有 Admin 弹窗的目标风格、尺寸分类和分模块实施入口。
- [蓝白卡片式工作台风格参考](界面参考/蓝白卡片式工作台风格参考.md):自营样板的配色、公共样式和图表主题接入;按总览、标准列表、复杂分析、运行看板与图表弹窗选择参考页面,整端推广待人工确认。
- [Admin 客户管理样式核对记录](Admin客户管理样式核对记录.md):客户列表、海外仓阶梯费用及关联详情和弹框的样式与人工验收项。
- [Admin 国内仓样式核对记录](Admin国内仓样式核对记录.md):7 个菜单、关联详情与浮层的范围、样式复核和验收证据。
- [Admin 货柜管理样式核对记录](Admin货柜管理样式核对记录.md):订舱、拖车、送柜报关、清关提柜入口及共享组件边界。
- [Admin 海外仓样式核对记录](Admin海外仓样式核对记录.md):海外仓 10 个菜单、独立详情、作业弹框和共享组件显式接入边界。
- [AI 工程执行与协作约束](AI工程执行与协作约束.md):工作区、依赖、Git、部署、数据库、质量门禁、本机多对话重型检查限流和独立任务协作规则。
- [数据库中文注释维护规范](数据库注释维护规范.md):数据库注释口径、职责、迁移流程、自动门禁与实值验收要求。
- [数据库版本迁移与 Jenkins 自动发布方案](数据库版本迁移与Jenkins自动发布方案.md):两人团队自动迁移规划;统一工具入口、自动编号、开发/测试/生产执行分工、单服务迁移范围、漏写迁移检查、Flyway 校验、失败候选修订、发布证据保留、带数据升级演练及实施顺序。
- [数据库迁移操作手册](../baiyue-firstleg/deploy/sql/数据库迁移操作手册.md):开发者和发布执行人日常使用说明;包含新建、检查、生成清单、测试执行、生产晋级、失败处理和维护规则。
- [生产服务监控告警与无停机发布方案](生产服务监控告警与无停机发布方案.md):容器与外部可用性监控、部署期告警处理、自动恢复、发布通知及滚动/蓝绿发布演进方案。
- [测试环境 Jenkins 部署指南](测试环境Jenkins部署指南.md):测试环境持续部署授权、Job 参数、健康检查与失败处理。
- [阿里云生产环境选型、压测与上线手册](阿里云生产环境选型压测与上线手册.md):ECS/ALB、RDS MySQL、Redis、OSS、Nacos、RocketMQ、压测、高可用、监控、备份与上线清单。
- [阿里云 OSS 文件中心接入设计与评审](阿里云OSS文件中心接入设计与评审.md):Admin、Client、国内/海外 PDA 文件接入 OSS 的区域拓扑、存储适配、权限、一致性、实施拆分、验收门禁和方案评审。
- [首页数据看板真实化与统计策略规划](首页数据看板真实化与统计策略规划.md):首页指标、实时与缓存边界、统计口径和实施顺序。
- [墨家设备测量上传接口说明 V3](墨家设备测量上传接口说明-V3.md):测量设备经 Gateway 上传箱码、尺寸、重量和图片的接口契约。
## 环境协作
- [开发环境独立任务协作登记](开发环境独立任务协作登记.md):开发环境全流程总控与长期专项的稳定任务、职责及开发数据库/部署/HTTP 授权。
- [测试环境独立任务协作登记](独立任务协作登记.md):测试环境独立任务的稳定身份、职责和协作边界。
- [测试任务盘点与需求台账](测试任务盘点与需求台账.md):历史任务快照、未闭环需求、提交线索和待核实证据,不作为当前调度依据。
## 参考资料
- `悦/`:产品原型、流程图、历史架构资料和调研数据,只作为需求参考,不直接定义当前范围。
- `superpowers/`:按日期和主题保留的具体功能设计与实施记录。
## 维护规则
- 新文档按业务域归档,不新增以开发批次编号命名的目录、文件、标题、任务或范围标签。
- 已完成开发阶段的流程手册、规划、进度和验收资料统一放入 `归档/`;后续流程变更只从[头程到尾程当前维护入口](头程到尾程/README.md)进入。
- 当前交付范围始终按端到端全流程理解;业务域目录只用于检索和职责归属,不用于排除上下游流程。
- 范围、字段或流程冲突时遵循根 AGENTS.md 的事实优先级;归档确认记录不覆盖当前正式契约。文档角色按当前入口和明确标记判断,不只按文件名判断。
- 业务事实变化只修改其当前主文档及实际受影响的接口、权限、SQL、代码和测试;业务域 README 与索引仅在入口或职责变化时更新。历史规划、确认和验收记录冻结,不为追随当前规则批量改写。
- 原型中出现的功能不自动成为有效实现;必须由正式契约、代码和验收证据共同确认。
+9 -3
View File
@@ -18,20 +18,26 @@
| Order | `FL` 头程主订单 | | Order | `FL` 头程主订单 |
| Warehouse | `ZGRK` 国内整柜入库、`ZGCK` 国内整柜出库 | | Warehouse | `ZGRK` 国内整柜入库、`ZGCK` 国内整柜出库 |
| Firstleg | `OB` 订舱、`TA` 国内拖车派车、`LP` 预装/正式装柜计划、`DECL` 报关申报批次、`BR` 报关行批次、`PS` 船节点船期、`SL` 船期日历航次、`ST` 船期周模板、`CLG` 同柜组 | | Firstleg | `OB` 订舱、`TA` 国内拖车派车、`LP` 预装/正式装柜计划、`DECL` 报关申报批次、`BR` 报关行批次、`PS` 船节点船期、`SL` 船期日历航次、`ST` 船期周模板、`CLG` 同柜组 |
| Lastleg 入出库 | `IP` 入仓计划、`CK` 普通出库、`DFCK` 一件代发出库、`HBCK` 换标出库、`THCK` 退货出库、`DL` 派送、`EX` 异常、`CD` 废弃 | | Lastleg 入出库 | `WC` 头程来源尾程订单、`IP` 入仓计划、`CK` 普通出库、`DFCK` 一件代发出库、`HBCK` 换标出库、`THCK` 退货出库、`PDA` 出库作业任务、`DL` 派送、`EX` 异常、`CD` 废弃 |
| Lastleg 库内服务 | `TB` 换标、`ZY` 转运、`TH` 退货、`THHB` 退货换标、`RR` 退货收货、`RB` 收货批次、`HX` 合箱计划、`YY` 送仓预约 | | Lastleg 库内服务 | `TB` 换标、`ZY` 转运、`TH` 退货、`THHB` 退货换标、`RR` 退货收货、`RB` 收货批次、`HX` 合箱计划、`YY` 送仓预约 |
| Lastleg 商业业务 | `TR` 本土卡车、`LB` 散板、`CG` 采购订单、`PR` 采购实收、`PJ` 采购交寄、`PF` 采购费用(含更正与退款费用)、`PN` 采购说明、`PX` 采购关闭、`PG` 采购更正记录 | | Lastleg 商业业务 | `TR` 本土卡车、`LB` 散板、`CG` 采购订单、`PR` 采购实收、`PJ` 采购交寄、`PF` 采购费用(含更正与退款费用)、`PN` 采购说明、`PX` 采购关闭、`PG` 采购更正记录 |
| Lastleg 车队 | `PC` 海外排车(原规则已符合)、`CT` 车次、`FB` 车队预订、`FO` 运力发布、`VR` 车辆运维记录 | | Lastleg 车队 | `PC` 海外排车(原规则已符合)、`CT` 车次、`FB` 车队预订、`FO` 运力发布、`VR` 车辆运维记录 |
| Finance | `REC` 对账单、`AR` 应收结算、`AP` 应付结算、`RC` 充值申请、`AC` 账户流水、`VC` 车辆成本、`VP` 车辆付款、`PAY` 结算收付款流水 | | Finance | `REC` 对账单、`AR` 应收结算、`AP` 应付结算、`RC` 充值申请、`AC` 账户流水、`VC` 车辆成本、`VP` 车辆付款、`PAY` 结算付款流水 |
同柜组按入仓码查询的公开摘要返回 `groupNo`;结算详情的付款流水返回 `transactionNo`,均取已生成的业务号。应收结算引用的收款凭证不生成 PAY 号,其 `transactionNo` 为空,不以内部 ID 或银行参考号替代。
同一类型的所有创建入口共用序列:例如普通卡车下单与车队商业池创建均使用 `TR`;正常车次与取货车次均使用 `CT`。预装和正式装柜清单继续使用同一个 `LP` 计划编号。 同一类型的所有创建入口共用序列:例如普通卡车下单与车队商业池创建均使用 `TR`;正常车次与取货车次均使用 `CT`。预装和正式装柜清单继续使用同一个 `LP` 计划编号。
海外出库作业任务统一使用 `PDA + yyyyMMdd + 四位流水`,例如 `PDA202610230001`;一件代发、退货、转运和换标出库共用该序列,不拼接内部实体 ID。PDA 出库列表及详情以出库单号为主标识,任务号标明“任务号”作为辅助信息;扫描出库单号或任务号均可定位当前任务。入仓任务编号不在此规则范围内。
头程来源尾程订单采用 `WC + yyyyMMdd + 四位流水`,共14位,例如 `WC202610210001`,按来源柜 `sourceContainerBookingId` 复用:该来源柜首次创建尾程订单时在柜级行锁内取号,后续同柜的入仓单、不同客户或跨日交接事件复用原号;事件重放不重新取号。真实集装箱号 `containerNo` 不作为复用身份,不同来源柜即使使用相同集装箱号也不能共用尾程编号。
## 明确保留的规则 ## 明确保留的规则
- 入仓码、拆分子订单号和子入仓码不变。子订单继续使用主订单号加拆分后缀;新主订单改号后子单自然继承主号,但不改拆分算法或重新分配独立流水。 - 入仓码、拆分子订单号和子入仓码不变。子订单继续使用主订单号加拆分后缀;新主订单改号后子单自然继承主号,但不改拆分算法或重新分配独立流水。
- 柜次号继续使用全局连续的 `D0001`,不按日期重置,超过四位自然增长。 - 柜次号继续使用全局连续的 `D0001`,不按日期重置,超过四位自然增长。
- 实物箱码、散货托盘码、退货/转运箱码及一件代发 `DP-yyMMdd-####` 托盘标签不纳入本次改号。 - 实物箱码、散货托盘码、退货/转运箱码及一件代发 `DP-yyMMdd-####` 托盘标签不纳入本次改号。
- 尾程独立 `WC` 编号尚未确认。头程来源尾程订单保留原分组规则;换标、转运、退货来源尾程订单继续沿用对应业务单号,不增加第二套业务身份。 - 换标、转运、退货来源尾程订单继续沿用对应业务单号,不增加第二套业务身份。
- 自营采集任务号、主数据编码及未列入登记表的其他编号不在本次范围。 - 自营采集任务号、主数据编码及未列入登记表的其他编号不在本次范围。
- 外部提单号、真实集装箱号、运单号、FBA 货件号、银行流水号等保留外部原号。 - 外部提单号、真实集装箱号、运单号、FBA 货件号、银行流水号等保留外部原号。
+315
View File
@@ -0,0 +1,315 @@
# 业务实现边界
角色:按主题读取的跨端实现约束正文,承接原业务快速索引中的边界说明;不作为启动必读或部署进度来源。已知目标代码时直接工作,只有接口、状态、权限或业务归属不明确时才读取命中章节。
用 `rg -n -F '主题词' docs/业务实现边界.md` 定位标题,只读该标题到下一个同级标题。路径从工作区根或文中注明的应用 `src/` 起算;专题正式契约优先,新增专题规则只在其主文档维护,本文件保留必要的实现引用。
公共架构按主题选择[部署契约](测试环境单机部署与配置契约.md)或[认证与通信契约](统一认证与服务通信契约.md),不因读取本文件而同时加载两份契约,也不在本文另建环境、会话或投递规则。
## 登录认证
范围依据:`docs/订单与客户/README.md`。
Admin `modules/auth/`、`core/auth/`;Client `modules/auth/`;Backend `auth/`、`iam/`。统一 Token 不携带角色或权限集;各端读取 Auth 登录/刷新响应的顶层授权快照用于展示,Gateway 与业务服务通过统一会话及 Auth 权威校验执行授权,不再依赖 Lastleg 安全投影
## 客户与企业
范围依据:`docs/订单与客户/README.md`、`docs/订单与客户/订单与客户头程订单闭环设计.md`。
Admin `modules/customers/`;Client `modules/tenant-management/`、`modules/account/`;Backend `iam/`、`auth/`、`file/`。公司联系电话/邮箱是企业资料,不作为成员登录标识且不要求跨企业唯一;成员登录手机号归账号链路,修改时同步 Auth 并撤销该账号会话。审核必填资质仅营业执照与统一社会信用代码;法人身份证选填,可在已有营业执照后单独补传或替换,营业执照仍须与统一社会信用代码整包提交;默认尺寸配置由 IAM 持久任务异步调用 `firstleg/`,未就绪不得审核通过
## 供应商与国内整柜
范围依据:`docs/国内货柜履约/国内货柜履约需求确认表.md`。
Admin `modules/suppliers/`、`modules/domestic-containers/`;Backend `warehouse/`;OpenAPI `supplier-v1.yaml`、`domestic-container-v1.yaml`
## 平台收货仓
范围依据:`docs/订单与客户/订单与客户头程订单闭环设计.md`。
Admin `modules/warehouses/`;Client `modules/first-leg/`;Backend `warehouse/`
## 头程订单、批量审核预览与入仓码关系
范围依据:`docs/订单与客户/README.md`、头程订单闭环设计。
Admin `modules/first-leg-orders/`、`modules/unified-orders/`;Client `modules/first-leg/api/inboundCodeAssociations.ts`、`modules/first-leg/`;Backend `order/` 的 `InboundCodeAssociationService`、`UnifiedOrderQueryService`、`BatchOrderReviewPreviewService` 与 `firstleg/`。Order 为 `SUBMITTED` 时,即使 Firstleg 已存在准备中入库投影,统一列表仍固定显示 `PENDING_REVIEW` 并提供审核动作;批量审核弹框只调用 `/orders/first-leg/batch-review-preview` 一次获取按请求顺序返回的快照,不逐票查询详情,主要展示入仓码而非内部订单 ID
## 客户头程订单批量导入
范围依据:当前 Order 契约。
Client `modules/first-leg/views/FirstLegOrdersView.vue`、`api/firstLeg.ts`;Backend `order/` 的 `MerchantBatchImportService`、`MerchantWarehouseCatalogClient`、`MerchantPricingCatalogClient` 与 `order-v1.yaml`。中文 XLSX 模板按当前客户动态生成地址、全部有效仓库和渠道下拉;导入时重新校验动态选项与客户归属,最多 50 行,只创建草稿,支持部分成功或整批原子模式
## 平台旧系统订单导入
范围依据:当前 Order 契约。
Admin `modules/unified-orders/pages/UnifiedOrdersView.vue`、`api/unifiedOrders.ts`;Backend `order/` 的 `PlatformLegacyOrderImportService` 与 `/api/platform/v1/orders/first-leg/legacy-import`。固定归属启用客户“IT测试公司”,保留旧入仓码,按当前公共仓库和客户价格簿逐行校验,成功行进入待审核
## 平台修改客户原始申报与履约渠道
范围依据:当前 Order/Firstleg 契约。
Admin `modules/unified-orders/components/OrderDeclarationEditorDialog.vue`、`api/unifiedOrders.ts`;Backend `order/` 的 `OrderDeclarationUpdateService` 与 `order-v1.yaml`,通过 `ORDER_DECLARATION_UPDATED_V1` 同步 `firstleg/` 的 `OrderDeclarationSyncService`。只修改申报快照,不覆盖仓库/PDA 实测、测量审核、箱码或已确认费用;渠道变化额外校验分柜、同柜、装柜可逆性与重新计价,国内收货仓或中转仓变化必须重新下单
## 脚本管理、全量验证与测试造数
范围依据:`baiyue-firstleg/scripts/AGENTS.md`、`baiyue-firstleg/scripts/README.md`。
本机重型检查经 `scripts/local-check.ps1` 统一限流,规则见 `docs/AI工程执行与协作约束.md`;Backend `scripts/` 为仓库级入口,`scripts/admin-test-env-modules/` 为 Admin HTTP 内部模块;服务局部脚本留在 `<service>/scripts/`,不得散落到 `src/test/scripts/`;真实 HTTP、部署或环境写入仍须当前轮明确授权
## 平台/企业 RBAC
范围依据:订单与客户契约;公共语义见 `docs/平台客户层级与权限契约.md`。
Admin `modules/iam/`、`core/access/`;Client `modules/tenant-management/`;Backend `iam/`、`auth/`
## 消息中心与站内通知
范围依据:触发业务的阶段/专题契约,收件箱以 IAM OpenAPI 为准。
Admin/Client `modules/notifications/`;Backend `iam/.../notification/`;生产者留在所属服务
## PDA 拣货与柜级装柜证据
范围依据:国内 PDA README、拣货原型、国内货柜履约需求确认。
PDA `pages/picking/`、`stores/picking.js`、`api/pda-loading.js`;证据以 `taskId + warehouseId` 进入任务专用 API,业务所有权固定真实 `containerBookingId`,不得按入仓单或客户拆分;上传以幂等键绑定包含文件内容的请求哈希,完全重放直接返回已有结果且不得重复上传 File;Backend `firstleg/`、`warehouse/`、`file/`
## 到仓测量、测量库位、箱规策略与头程计费
范围依据:`docs/入库测量与计费/README.md`;规则查 `baiyue-firstleg/firstleg/AGENTS.md` 对应入口。
Admin `modules/inbounds/measurement/InboundMeasurementDialog.vue`、`InboundMeasurementPanel.vue`,称重 `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend `firstleg/` 的 `InboundMeasurementService`、`MeasurementLocationOccupationService`、`FbaPricingService`。库位归 `warehouse/`,图片归 `file/`,OCR 归 `integration-service/`;只按实际调用增加服务指引
## 客户专属报价、柜级阶梯运费与费用调整
范围依据:当前 Firstleg 计价契约、`docs/入库测量与计费/README.md`。
Admin `modules/fba-pricing/carrier-rates/`、`modules/inbounds/fee/`、`modules/unified-orders/components/InboundFeeDetailManager.vue`;Backend `firstleg/` 的 `PlatformPriceBookService`、`ActivePriceBookEstimator`、`FbaPricingService`、`ContainerTierAmountAllocator`、`InboundFeeDetailService` 与 `fba-pricing-v1.yaml`。公共报价使用 `customerId=0`,客户专属报价按客户独立版本化并优先于公共 ACTIVE 版本;柜级区域重量阶梯只聚合同柜同客户中费用快照同为 `REGION_WEIGHT_TIER` 的成员并守恒分摊,混柜的固定仓价等其他模型不参与阶梯且保持原费用,装柜成员变化只重算未锁定的区域阶梯费用。人工调整计费量限系统基准上下 10% 且必须带版本、原因和二次确认;`PRIVATE_LAST_MILE_DELIVERY` 只允许私人目的仓;一件代发在预装确认前完成计价,`WAIT_PALLETIZE` 试算不得回退托盘化状态
## 箱唛、箱码与单箱测量
范围依据:`docs/入库测量与计费/入库测量与计费需求优化版-v2-测量计费入库主流程.md`、`docs/墨家设备测量上传接口说明-V3.md`。
Admin `modules/inbounds/measurement/`;Client `modules/first-leg/`;Backend 按 `firstleg/AGENTS.md` 的箱唛与测量入口
## 称重确认、整票库位块与部分拣货资源结算
范围依据:`baiyue-firstleg/firstleg/AGENTS.md` 的称重入口、`baiyue-firstleg/warehouse/AGENTS.md` 的 A0/资源结算规则。
Admin `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend Firstleg `MeasurementLocationOccupationService`、`InboundMeasurementService`、`MeasurementSubmissionService` → Warehouse `LocationBlockService`。国内整票资源结算按 `reservationId` 定位;称重、槽位容量和部分拣货的详细门禁留在所属服务指引
## 入库扣货、解除与凭证
范围依据:入库测量与计费、国内货柜履约契约。
Admin `modules/unified-orders/pages/UnifiedOrdersView.vue`、`modules/inbounds/core/api.ts`;Backend `firstleg/` 的 `InboundHoldService`、`InboundHoldGuard`、`InboundHoldEvidenceService`,文件归 `file/` 的 `INBOUND_HOLD_EVIDENCE`。扣货状态必须阻断后续物理履约写入;已发生拣货、装柜或出仓时禁止手工扣货/解除,命令携带版本与幂等键,只有进入不可变历史的凭证可下载
## 财务管理与柜级公共费用分摊
范围依据:`docs/财务管理/` 产品确认、五页验收契约、Firstleg-Finance 跨服务契约。
Admin `modules/finance/`、`modules/loading-lists/components/ContainerFeesPanel.vue`;Client `modules/finance/views/FinanceBillsView.vue`,账单行按 `inboundCode` 复用头程入仓关系详情;Backend `finance/`、`firstleg/`,契约 `container-fees-v1.yaml`;导出与凭证归 `file/`。跨客户公共柜费按柜内真实客户与订单归属原子建组,金额合计等于柜费总额,审核、驳回、调整和作废整组处理,单行入口不得破坏组一致性
## 客户资金账户、充值、授信与业务扣费
范围依据:[客户资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户);资金指令投递查[统一通信契约](统一认证与服务通信契约.md#b-逐事件直接投递与结果确认)。
Admin `modules/finance/pages/FinanceCustomerAccountsView.vue`;Client `modules/finance/views/FinanceAccountView.vue`;Backend `finance/` 的 `FinanceWalletService` 与三类 Wallet Controller。充值申请经 File 保存凭证,平台审核或手工充扣;余额、授信、冻结、结算和释放以 Finance 主账为准。海外业务经 `WALLET_COMMAND_REQUESTED/COMPLETED` Outbox 直接投递往返,不跨区同步调用钱包
## 订单编排、分柜、同柜不可拆组与柜次
范围依据:`docs/国内货柜履约/README.md`、`docs/国内货柜履约/国内货柜履约需求确认表.md`、`docs/统一订单主状态与操作契约.md`。
Admin `modules/unified-orders/api/coLoadGroups.ts`、`modules/unified-orders/`、`container-loading/`;Client `modules/first-leg/`;Backend `firstleg/loading/coload/`、`firstleg/split/`、`firstleg/loading/`、`order/`;同柜组按订单创建,由服务端冻结每票全部可用入仓片段,仅要求同国内仓、同渠道,允许跨客户及不同目的仓港
## 全局智能排柜、预装与真实集装箱号后补
范围依据:`docs/国内货柜履约/README.md`、`docs/国内货柜履约/国内货柜履约需求确认表.md`、`docs/统一订单主状态与操作契约.md`。
Admin `modules/container-loading/components/SmartLoadingDialog.vue` 内嵌 `pages/GlobalSmartLoadingView.vue`,柜次页 `SmartLoadingWorkbenchView.vue`,预装详情 `loading-lists/pages/PreloadPlanDetailView.vue`;PDA `pages/picking/`;Backend `firstleg/` 的 `PlatformSmartLoadingController`、`SmartLoadingService`、`PendingReviewOrderClient`、`loading/`,待审核事实来自 Order `PendingReviewOrderQueryService`。全局候选覆盖 `PENDING_REVIEW/WAIT_MEASURE/WAIT_SPLIT/LOADING`,状态只用于筛选展示,能否加入以服务端 `canAssign` 为准;待审核/待测量可提前占位,但确认预装或启动 PDA 前必须进入 `WAIT_SPLIT`。暂估明细的 `totalPackageCount/remainingPackageCount` 在测量前取 Order 原始申报箱数,测量完成后取最新已审核测量箱数,读取补充失败只回退当前已分配数,写入调整仍重新校验权威数量。同柜不可拆组仅在全员命中状态集合时作为一个分页与分配单元;人工加入允许跨渠道,智能推荐仍按柜次渠道。计划可一次性移除全部未拣明细,但任一成员已拣的同柜组必须整组保留。创建柜次时原子生成唯一预装计划,加入入仓码即建立关联;真实集装箱号不阻塞订舱关联,但确认预装和创建 PDA 任务前必须补齐。历史缺号任务允许在预装详情首次补录,保存后恢复 PDA 可进入状态
## 客户入库结果与头程费用确认
范围依据:入库测量与计费主流程、当前 Firstleg 契约。
Client `modules/first-leg/components/InboundBillingPanel.vue`、`api/inboundBilling.ts`;Backend `firstleg/` 的 `MerchantInboundBillingController`、`MerchantInboundBillingService`、`FbaPricingService` 与 `firstleg-v1.yaml`。客户仅能确认本客户 `SENT` 的最新费用版本,提交 `expectedFeeVersion` 与幂等键;确认记录当前成员和时间并永久锁定该版本,平台不得再修改
## 订舱资料、放舱、出仓前船期与订舱级拖车
范围依据:国内货柜履约 README、需求确认和实施边界。
Admin `modules/ocean-bookings/`、`port-schedules/`、`trucking/`;Backend `firstleg/oceanbooking/`、`firstleg/portschedule/`、`TruckAppointmentService`。拖车预约由 `RELEASED` 订舱拥有,不按客户、柜次、装柜计划或真实柜号归属;每个订舱最多一张非终态拖车单,创建候选由服务端排除缺提单/有效订舱文件或已有有效拖车单的订舱;PDA 装柜完成不推进拖车状态;全部要求货柜确认国内离仓后自动完成,人民币拖车费按实装体积分摊为柜次应付并经 Finance Outbox 入池
## 目的港码头拖车与还空预警
范围依据:`docs/海外仓业务/README.md`。
与订舱级拖车预约是不同生命周期。Admin 海外清关提柜列表/详情 `modules/container-loading/pages/OverseasContainersView.vue`、`modules/container-loading/pages/OverseasContainerDetailView.vue`;Firstleg 拖车 API `api/terminalDrayages.ts`,柜级到仓 API `api/containerArrivalTimes.ts`。原预约/实际提柜列改为预计/实际到仓:预计时间由平台在列表快捷选择并同步 Lastleg 整柜尾程订单,实际时间取海外 PDA 首次开始收货;车队、邮件、还柜与 `unloadingCompletedAt + 72h` 预警仍归 `firstleg/terminaldrayage/`。
## 整柜报关资料与完成文件
范围依据:国内货柜履约契约。
装柜完成后由 Admin `modules/container-loading/components/ContainerCustomsPanel.vue` 管理整柜报关,Client `modules/first-leg/components/CustomsDocumentsDialog.vue`、`api/customs.ts` 按订单处理本客户退税资料;Backend `firstleg/customs/container/`、`customs-v1.yaml`,文件归 `file/`。客户资料可覆盖同柜多个退税入仓码,开始报关后冻结;平台逐资料回传完成文件,全买单柜走平台确认与明细导出
## 国内出仓确认
范围依据:国内货柜履约契约。
Admin `modules/outbound-dispatch/`;Backend `firstleg/outbound/dispatch/`
## 客户统计与平台日志
范围依据:[客户统计指引](../apps/admin-web/src/modules/customers/AGENTS.md)、[操作审计指引](../apps/admin-web/src/modules/audit/AGENTS.md),按对象选一项。
Admin `modules/customers/`、`modules/audit/`;Backend `firstleg/customerstatistics/`、`audit-service/`
## 客户工作台账户与设置
范围依据:订单与客户契约。
Client `modules/account/`、`system/`、`tenant-management/`;Backend `iam/`、`auth/`
## 企业订单与跨境业务
范围依据:订单与客户、国内货柜履约契约。
Client `modules/order-management/`、`cross-border/`;Backend `order/`、`firstleg/`、`integration-service/`
## 海外接柜、入库与库内库存
范围依据:`docs/海外仓业务/README.md`。
Admin 按 `apps/admin-web/AGENTS.md` 海外模块入口;海外入口 `gateway/`;尾程/入仓/换标/库存 `lastleg-service/`;仓库主档归国内 `warehouse/`,库位/托盘/锁归 `warehouse-overseas-service/` 并只引用国内 warehouseId;与排车、出库、派送共同组成海外仓全流程
## 尾程订单控制与柜级入仓计划转换
范围依据:`docs/海外仓业务/README.md`。
Admin `modules/overseas-warehouse/pages/LastMileOrdersView.vue`、`LastMileOrderDetailView.vue`、`api/lastMileOrders.ts`;Backend `lastleg-service/` 的 `LastlegOrderController`、`LastlegOrderCommandService`、`InboundPlanService`、`ContainerInboundPlanConversionCoordinator`,资源归 `warehouse-overseas-service/` 的 `WarehousePalletBatchService`。`orders/container-summaries` 按 `sourceContainerBookingId` 跨客户聚合并分页返回全部稳定来源柜,已完成计划转换的柜仍保留用于接柜仓查询与修改;生成动作只消费 `allPlansReady/pendingPlanCount/resourcePendingPlanCount`,详情不受列表分页截断。确认前从 `/inbound-plans/container-preview` 读取服务端分组、托数、阻断项与 `snapshotVersion/snapshotHash`;`convert-container` 锁柜重算后先批量预留真实托盘,再本地原子生成剩余独立计划并确认资源,失败仅补偿未确认资源,同柜重放不得产生第二批资源。单票手工计划保存后,全柜计划齐全且预览就绪时自动生成并绑定托盘资源,一票柜立即触发;`resourcePendingPlanCount` 表示自动生成异常后的重试入口,资源未齐不得进入 PDA 接柜。自动入口见 Lastleg `ContainerInboundPlanConversionCoordinator.convertManualAndAutoMaterialize`。单票可维护完整入库计划、暂扣/解除及八行人工节点快照;命令提交订单版本与幂等键,新增暂扣只允许完成入库后执行并仅阻断该票后续排车/出库,不阻断入库计划或入库作业;人工节点首次保存后固定 `MANUAL` 来源且不得回退柜级节点
### Admin 入仓计划页面约束
代码路径相对 `apps/admin-web/src/modules/overseas-warehouse/`,含 `../` 的路径按模块关系解析。
柜子工作台按 `sourceContainerBookingId` 消费 `/orders/container-summaries`;服务端分页返回全部稳定来源柜,计划已经齐全的柜仍保留用于接柜仓查询和修改,并按冻结 `plannedArrivalAt` 升序、空值最后排序。详情返回全柜订单且不受列表分页截断;单票手工计划保存后,由服务端在整柜最后一票计划齐全时自动生成并绑定全柜托盘码,一票柜立即生成;`resourcePendingPlanCount` 只表示自动生成异常的重试入口,不是正常人工步骤。柜级确认弹框先调用 `/inbound-plans/container-preview`,按服务端 FBA/一件代发/私人地址分组展示头程已有、海外仓补充和最终托数以及 `readiness/blockers`;散货最终托数不得少于头程已有托盘码,差额连续补码且不阻断流程;一件代发必须严格按不可变头程封托托盘数整体入库,单票表单托数锁定且服务端再次失败关闭校验。前端不计算托数、不逐票建计划、不预占托盘,再把同一 `snapshotVersion/snapshotHash` 原样提交 `/inbound-plans/convert-container`,快照冲突后重新获取预览。服务端只为剩余订单逐票生成独立计划,并为异常遗留的人工计划补齐真实托盘,整批原子且重放不得产生第二批资源。单票完整入库计划、暂扣/解除和八行人工节点均从 `api/lastMileOrders.ts` 提交订单版本与幂等键;入库弹框每次打开通过 `/orders/container-arrival-times/query` 读取柜级权威到仓结果,不使用订单列表旧快照作为显示或提交门禁;优先展示人工时间,未维护且未建计划时展示服务端按到港当地日期加两个自然日返回的 `plannedDate/isDefault`,默认日期不补零点,首个计划生成后沿用冻结日期。加载中、读取失败、缺失或同柜不一致时阻止提交;预计到仓时间不进入人工计划请求,服务端按整柜校验并写入同一日期;入仓码只读展示并提交订单冻结值,不允许人工改写。新增暂扣只在 `INBOUND_COMPLETED` 开放,解除暂扣保持可用;暂扣不阻断入库计划,只限制后续排车和出库。人工节点一经保存不得回退柜级节点。转仓候选只取 `../iam/api/platformIam.ts` 的平台公共 `ACTIVE + FBA` 仓主档;Backend `lastleg-service/`
## 海外仓 PDA
范围依据:`apps/pda-overseas-uniapp/AGENTS.md`;执行规则查 `baiyue-firstleg/lastleg-service/AGENTS.md`,跨模块流程才查海外仓 README。
入仓 `src/pages/operation/`、`src/api/inbound.js`;排车与出库 `src/pages/dispatch/`、`src/pages/outbound/`、`src/api/fulfillment.js`。Backend `lastleg-service/inboundplan/pda/`、`dispatch/pda/`、`delivery/`;统一经 `gateway/`。柜级收货与单票客户隔离按 Lastleg“PDA 入仓”规则核对
## 海外采购、本土卡车与散板
范围依据:`docs/海外仓业务/README.md`。
Admin `modules/overseas-business/`;Client `modules/cross-border/`;Backend `lastleg-service/` 的 `procurement/`、`trucking/`、`looseboard/`;统一经 `gateway/`
## 采购样品、货款、装箱清单、面单、预估快递费、国内收货寄客户
范围依据:`docs/海外仓业务/采购订单样品履约流程变更需求.md`。
采购流程变更入口;代码从上述采购模块进入
## 海外仓库与通用资料
范围依据:主档查 [Warehouse 指引](../baiyue-firstleg/warehouse/AGENTS.md),海外库位、托盘与锁查 [Warehouse Overseas 指引](../baiyue-firstleg/warehouse-overseas-service/AGENTS.md)。
全部仓库主档进入 Admin `modules/warehouses/` 与国内 `warehouse/`;海外库位/托盘/锁进入 `warehouse-overseas-service/` 并引用国内 warehouseId;报价、汇率、车辆按海外服务实际契约
## 车辆管理、司机证照、保养加油、车辆维修/故障/救援/异常、外接货与车次
范围依据:`apps/admin-web/src/modules/overseas-master-data/AGENTS.md`、`baiyue-firstleg/lastleg-service/AGENTS.md`;原型范围有疑问时查 `docs/海外仓业务/车辆管理原型梳理与任务规划.md`。
Admin `modules/overseas-master-data/`;Backend `lastleg-service/fleet/`,接口 `lastleg-service/src/main/resources/openapi/fleet-drivers-v1.yaml`、`fleet-trips-v1.yaml`、`fleet-vehicle-records-v1.yaml`;证照与运维照片存储查 `file/AGENTS.md`
## 拼车需求池、车次余位、销售拼车意向
范围依据:`docs/海外仓业务/内部拼车需求池首版开发契约.md`、`apps/admin-web/src/modules/overseas-master-data/AGENTS.md`。
复用 Lastleg Fleet 与本土业务;区分车次余位发布和客户订单,不从需求池生成第二套库存或费用
## 国内出仓后船节点
范围依据:`docs/海外仓业务/README.md`。
Admin `modules/port-schedules/`、`ocean-bookings/`、货柜详情;Backend `firstleg/portschedule/`、`integration-service/`;从确认国内出仓查询至目的港到达、提柜和还柜。节点按 `containerBookingId` 柜级聚合,跨区事件使用 `tenantId=0` 平台技术范围,不携带或校验客户
## 海外出库、排车、派送、异常与回访
范围依据:排车改造查[排车列表统一作业改造契约](海外仓业务/排车列表统一作业改造契约.md);既有缺陷修复查[排车流程修复规划](海外仓业务/排车流程修复规划.md)。
Admin `modules/overseas-warehouse/pages/DispatchesView.vue`、`DispatchDetailView.vue`、`OutboundsView.vue`、`DeliveryOrdersView.vue`、`ExceptionOrdersView.vue`、`CustomerVisitsView.vue`;Backend `lastleg-service/dispatch/`、`delivery/`、`dropship/`、`exceptionorder/`、`customervisit/`;统一经 `gateway/`
以下 Admin 条款来自模块指引,按具体页面选读;排车状态、照片门禁及自动发车时机以本节排车现行契约为准。代码路径相对 `apps/admin-web/src/modules/overseas-warehouse/`,含 `../` 的路径按模块关系解析。
### Admin 出库与派送页面约束
`api/outbounds.ts`、`api/deliveryOrders.ts`;出库详情使用 `deliveries` 展示按目的 FBA 仓拆出的全部派送单,派送列表和详情必须显示目的 FBA 仓。人工状态入口不提供完成派送;签收资料保存成功后提示自动完成并刷新列表。出库列表按类型筛选并展示中文类型,状态须覆盖 `WAIT_PICK/待拣货`、`PICKING/拣货中`、`PICKED/已拣货`、`WAIT_OUTBOUND/待出库`、`OUTBOUNDED/已出库` 和 `CANCELLED/已取消`;仅未开始的 `WAIT_PICK/WAIT_OUTBOUND` 允许取消。一件代发新建弹窗直接跨客户加载服务端可用候选,不单独展示客户筛选,海外仓必选并优先默认洛杉矶仓;订单条件可按订单号、入库单号、客户、托盘号、SKU 或品名查询/重置,以托盘+SKU 行分页多选。提交时从所选行解析唯一客户,并校验所选行属于当前唯一海外仓,不要求先选客户。退货出库客户下拉同时展示客户名称与联系电话并支持手机号检索,客户和仓库选项独立容错加载;选择客户后须立即按当前默认/已选海外仓加载库存。SKU 与箱号查询均使用输入态/已查询态分离,只允许点击查询按钮后生效;支持英文逗号批量条件,查询时清除空格并按任一条件命中,左右列表分别提供每页 5/10/20/50 条选择。SKU 列表只展示 `availableQuantity > 0` 的未占用可用数量,合箱后已扣减为零的 SKU 不再作为可选库存显示,实际作业以可用箱唛选择和箱内 SKU 明细扣减为准。取消、派送列表/详情及退回入口对应 Backend `lastleg-service/delivery/`、`dropship/`
### Admin 排车审核附件
- 排车调度/理货审核分区仅显示审核、详情;审核弹框的车辆图片、司机照片和驾驶证照片通过既有本车附件接口上传,随 `ReviewCommand.attachments` 保存,不调用资源编辑命令。已有资源与审核附件只读预览,详情合并展示;当前审核权限与服务端 Gate 控制上传及提交,列表查看权限控制读取。
### Admin 一件代发出库候选
- 一件代发出库候选选择:`pages/OutboundsView.vue` 按 `inventoryPositionId + skuCode` 保留跨页选择,只提供本页全选;查询/重置回到第一页,切换海外仓清空选择。提交仍校验同客户、同海外仓,数量取所选行的 `availablePackages`(箱数),不能按 SKU 件数替代;候选同时展示当前可出箱数对应的毛重、材积重和体积,创建出库单时服务端按本次出库箱数占实际入库箱数的比例冻结三项测量快照。候选交互回归见 `pages/OutboundsView.selection.test.ts`;状态展示与取消门禁见 `pages/OutboundsView.test.ts`、`pages/OutboundDetailView.test.ts`。
### Admin 货物计划与装车命令
- 装车完成通过`completeDispatchLoading`一次提交,返回状态、照片可上传阶段与自动推进条件按本节排车现行契约消费;原请求恢复不重建单据。未知费用保持未确认,由既有后台费用管理维护,不按金额推断覆盖或重复记费。已有排车加货和移货仅从`SmartDispatchDialog.vue`内的`SmartDispatchExistingCargo.vue`进入;移货必须使用`GET items`返回的真实dispatchItemId及逐项remove Gate;路线仅重排`GET route`返回的既有全部目的地,包含外接点,不能新增或猜测目的地。附件沿`DispatchEvidenceFiles.vue`的本车鉴权上传/读取,上传与主单引用保存分开。
- 排车列表车辆信息编辑、BOL PDF 和装车完成从 `pages/DispatchesView.vue` → `api/dispatches.ts` 进入;列表和详情不另设添加/移除货物入口。货物计划统一由 `components/SmartDispatchDialog.vue` 承载:新建使用候选、草稿及托盘锁,已有排车经 `components/SmartDispatchExistingCargo.vue` 读取实际明细并按版本增减;两类服务端命令不得混用。原加货/移货未知请求也在智能排车恢复。回归为对应组件测试、`pages/DispatchesView.test.ts`、`pages/DispatchDetailView.test.ts` 及 `pages/prototypeContract.test.ts`。
### Admin 取消与费用展示
- 出库取消提示先解除车次关联,取消后仍须在排车列表释放原排车占用;不提示库存已自动回滚。派送详情费用读取reviewStatus/sourceStatus/voidStatus,同一详情响应展示待财务确认、待财务处理、确认作废,不逐行查询,也不把取消成功视为费用作废。货柜费用面板直接消费同一费用来源接口,待确认时同样禁止调整和重复作废,沿用原页面/弹框承载。
### Admin 业务导出
- 尾程订单、库存余额与进销存记录导出统一使用 `../downloads/` 的 `useExportTask` 创建 XLSX 任务;保留当前筛选和业务导出权限,并要求 `platform:download:list`。Lastleg 内部 Provider 契约为 `lastleg-exports-v1.yaml`,业务页面不再请求同步 CSV。
### Admin 装车照片与资料入口
- 装车照片与资料从 `components/DispatchDocumentsDialog.vue` → `DispatchLoadingDocuments.vue` → `api/dispatchLoadingDocuments.ts` 进入;五框按整车保存,不依赖派送权限或派送单。原上传/绑定结果未知保留原文件、版本及键;明确版本冲突后刷新再用原文件保存。两端共享及自动推进规则唯一见排车正式契约。
## 海外业务费用来源与客户财务
范围依据:当前实现查财务契约与统一认证与服务通信契约;阶段 0A—0E 开发再读 `docs/财务管理/海外仓费用统一接入阶段0技术契约.md`。
当前 V1 由 `lastleg-service/financefee/` 校验海外入仓、采购、美国卡车、本土散板和海外仓服务费,通过完整快照和 Outbox 直接投递 Finance 内部入口入池;阶段 0 目标改为收费身份/候选版本、Finance 接受或拒绝结果事件及版本化资金计划。必须沿代码确认落地范围,不把技术契约当成已实现状态;Client 仍只读取获准客户财务
## 自营销量与领星统计
范围依据:`docs/自营业务/README.md`。
领星 WMS 自研系统(OMP)、经营总览图表、自营 SKU 日销量、热销与滞销排行、分仓产品库存与可售天数、库存周转、数据采集:先读 `apps/admin-web/src/modules/self-operated/AGENTS.md`;查询与采集编排查 `baiyue-firstleg/lastleg-service/AGENTS.md` 的自营入口,签名/限流/供应商分页问题才读 `baiyue-firstleg/integration-service/AGENTS.md`。区别于整箱库存和客户 WMS 作业库存。
自营专题按任务选择:总览图形/下钻查 `docs/自营业务/经营总览图表设计.md`,库存周转查 `docs/自营业务/库存周转视图设计.md`,采集交互查 `docs/自营业务/数据采集页面设计.md`,查询性能查 `docs/自营业务/领星统计查询性能优化方案.md`,外部接口联调查 `docs/自营业务/领星WMS接口联调手册.md`。架构/表结构不明时从 `docs/自营业务/README.md` 定位一期方案,不默认同时读取所有专题。
## 预约管理与工作日历
范围依据:`docs/海外仓业务/预约工作日历V13变更说明.md`(业务规则);`docs/海外仓业务/预约工作日历开发协作契约.md`(接口与文件边界),按本次问题选一项。
美国各类预约统一总览、提柜/用车/送仓预约梳理:`docs/海外仓业务/美国预约管理统一总览与优化方案.md`(设计建议);实际维护仍按下述来源模块进入。
预约工作日历、多客户共车、中转分批后送、改期取消、重新预约和未定日期事项:先读 `docs/海外仓业务/预约工作日历V13变更说明.md`(正式业务规则与验收),再读 `docs/海外仓业务/预约工作日历开发协作契约.md`(接口与文件边界);权威业务事实仍由下述来源模块维护。
预约管理、预约列表、到港/排车/还柜/计划到仓四类日历:Admin `apps/admin-web/src/modules/appointment-calendar/`,当前入口与日期规则见 `docs/海外仓业务/预约工作日历V13变更说明.md` 的“2026-10-19 当前预约列表收敛规则”;原送仓业务仍从 `docs/海外仓业务/README.md` 的“预约送仓”进入。排车只取海外仓送往 FBA/客户仓的真实车次,区别于订舱级拖车和港口提柜。
## 退货预报、签收、库存与合箱
范围依据:`baiyue-firstleg/lastleg-service/docs/business-index.md` 的退货入口。
退货预报、签收、库存与合箱:Client `modules/overseas-warehouse/views/ReturnOrdersView.vue`、`ReturnInventoryView.vue`;Admin `modules/overseas-warehouse/pages/ReturnInventoryManagementView.vue`;海外 PDA `src/pages/return-receipt/return-receipt.vue`、`src/pages/return-packing/return-packing.vue`,API 与检查入口见 `apps/pda-overseas-uniapp/AGENTS.md`;Backend `lastleg-service/returnreceipt/`,执行规则先读 `baiyue-firstleg/lastleg-service/AGENTS.md`,详细接口与状态按需查 `baiyue-firstleg/lastleg-service/docs/business-index.md` 的退货入口,OpenAPI 为 `overseas-business-v1.yaml`。客户预报 → 平台审核 → PDA 签收 → 退货箱/SKU 库存 → 同客户合箱 → `delivery/` 退货出库;两个 PDA 页面均在 `src/pages.json` 注册,由 `src/data/overseas-workbench.js` 提供入口,真机验收另取证。派送异常退回仍归 `exceptionorder/`。
## 散货托盘码生成、打印与跨区传递
范围依据:`docs/打印标签维护/README.md`;各应用/服务最近指引。
散货托盘码生成、打印与跨区传递:Admin `modules/loading-lists/components/PalletLabelPrintDialog.vue`;Firstleg `LoadingPalletLabelService`、`LoadingCompletedOutboxService`;Lastleg `LastlegSourcePalletMapper`、`InboundPlanService`。从各项目最近指引继续定位;散货 FBA 标签与一件代发实装托盘分别取各自冻结事实。
+61 -99
View File
@@ -1,40 +1,16 @@
# 业务快速索引 # 业务快速索引
本文件按需检索,不作为启动必读文档。以下路径均按工作区根目录或表内注明的应用源码根目录起算,不相对于 docs/。 本文件只负责消除歧义与定位,不是启动必读清单。已知文件、组件或 API 时跳过本文件;先按终端选应用,再用 `rg -n -F '组合词' docs/业务快速索引.md` 读取命中行。
Firstleg 代码从 `baiyue-firstleg/firstleg/AGENTS.md` 的短表定位;状态、计价、装柜和 PDA 资源规则按需查 `baiyue-firstleg/firstleg/docs/business-index.md` 对应条款,不全文加载其他业务。 代码问题直接进入列出的模块并读适用指引;只有业务边界不清时才读“边界正文”的命中章节,不串读各层 README、其他应用索引或整个正文文件。表内代码入口相对工作区根,前端仍按任务终端分流;服务端入口不要求纯展示任务先读后端。
Admin、Client、海外 PDA 从各应用 AGENTS.md 短表定位,行为变更按需查 [Admin 细则](../apps/admin-web/docs/business-index.md)、[Client 细则](../apps/client-web/docs/business-index.md)、[海外 PDA 细则](../apps/pda-overseas-uniapp/docs/business-index.md);Lastleg 的事件、查询与履约细则见[服务业务索引](../baiyue-firstleg/lastleg-service/docs/business-index.md),只读取受影响条款。
架构/环境/部署查[测试环境单机部署与配置契约](测试环境单机部署与配置契约.md);网关/Token/会话撤销/事件通信查[统一认证与服务通信契约](统一认证与服务通信契约.md)。下文旧区域服务路径用于定位现有实现,目标规则以这两份主契约为准。
## 常用说法与歧义分流 ## 常用说法与歧义分流
仓储转运审核、转运驳回:Admin 尾程订单 `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue` → `apps/admin-web/src/modules/overseas-warehouse/components/WarehouseTransferReviewDialog.vue`;权限、状态及 API 见该模块 `AGENTS.md` 的“仓储转运审核、通过与驳回”。不要把该入口当作头程订单审单,也不要按“转运”误入排车转派送。 取“终端+对象+动作”组合词;只读命中行。不同解释会改变范围且仍无法判断时再询问。
先从任务中取“终端 + 业务对象 + 动作”,如“海外 PDA + 柜号 + 收货”。优先检索下面列出的组合词,不拿整句自然语言做精确匹配;命中后沿指定模块继续,不把所有含同一宽词的行全部读入。代码路径从工作区根起算,检索提示不替代业务契约。
- 审核:订单审核 / 测量审核 / 仓储转运审核,分别进入 Order / Firstleg / Admin 海外仓模块。
- 库位:海外库位 / 整票库位块,分别进入 Warehouse Overseas / 国内 Warehouse,按任务只选其一。
- 收货:柜号签收 / 到仓测量,分别进入 Lastleg `ReceivingContainerService` / Firstleg 测量入口。
- 拖车:订舱级拖车 / 目的港码头拖车,分别进入 Firstleg `TruckAppointmentService` / `TerminalDrayageService`。
- 托盘:自动生成托盘 / 托盘标签,前者进入 Lastleg `ContainerInboundPlanConversionCoordinator`;后者先区分国内散货、一件代发与海外资源。
先在本节定位组合词,再只查命中的一行或模块。仍无法区分且会改变修改范围时,补问终端、对象或操作阶段。
### 高频任务最小读取集
- 订单审核:根 `AGENTS.md` → `docs/业务快速索引.md` 本节 → `apps/admin-web/src/modules/unified-orders/` → `baiyue-firstleg/order/AGENTS.md`;只有审核门禁跨到履约时才增加 `firstleg/AGENTS.md`。不读海外仓审核或全量权限 SQL。
- PDA 出库:根 `AGENTS.md` → `apps/pda-overseas-uniapp/AGENTS.md` → `src/pages/dispatch/` 和 `src/api/fulfillment.js` → `lastleg-service/AGENTS.md`;只有网关路径或 Token 失败才增加 `gateway/AGENTS.md`。不读 Admin 排车配置,除非问题涉及平台转派送资格。
- 客户账单:根 `AGENTS.md` → Client `apps/client-web/AGENTS.md` → `src/modules/finance/` → `baiyue-firstleg/finance/AGENTS.md`;平台账单才切换 Admin Finance。不要因“账单”自动加载柜费分摊或海外费用契约。
- 退货、异常、拖车:先用终端、阶段和动作分流;无法确定时只读取本节对应行,不全文加载海外仓 README 或 Lastleg 全部业务索引。
- Admin 弹窗样式、统一弹窗:先读 [Admin 统一弹窗规范](Admin高密度界面规范.md#弹框与表单),再进入当前大模块最近指引和实际弹窗组件;逐操作核对记录按 [Admin/Client 验收规则](Admin-Client前端原型还原验收规则.md) 维护。
每个入口标出业务边界,避免把相邻生命周期当作同一业务。读取量与适用指引层级统一遵循根 AGENTS.md;已提供的根规则不重复全文加载,跨服务只增加实际涉及的直接消费者或提供者。
| 常用说法 | 区分依据 | 首个定位范围 | | 常用说法 | 区分依据 | 首个定位范围 |
|---|---|---| |---|---|---|
| 没有报价、价格未命中、人工定价、手工报价 | FBA 单票费用的显式人工报价,不是价格簿上传或静默回退 | Admin `apps/admin-web/src/modules/inbounds/fee/api.ts` 的 `createManualInboundQuote`;Backend `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/FbaPricingService.java` 的 `manualQuote`,联查 `PlatformFbaPricingController`、`fba-pricing-v1.yaml`;Client 快照类型 `apps/client-web/src/modules/first-leg/types/inboundBilling.ts` | | 没有报价、价格未命中、人工定价、手工报价、私人地址报价 | FBA 未命中报价时人工定价;PRIVATE 私人地址使用人工头程报价,区别于价格簿上传 | Admin `apps/admin-web/src/modules/inbounds/fee/api.ts` 的 `createManualInboundQuote`;Backend `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/FbaPricingService.java` 的 `manualQuote`,联查 `PlatformFbaPricingController`、`fba-pricing-v1.yaml`;Client 快照类型 `apps/client-web/src/modules/first-leg/types/inboundBilling.ts` |
| 退货换标候选、退货单创建换标 | 客户退货库存进入换标申请,区别于平台审核与 PDA 签收 | `baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/returnreceipt/controller/MerchantReturnOrderController.java` 的 `GET /{returnNo}/relabel-candidates`、`POST /{returnNo}/relabel` → `ReturnReceiptService.relabelCandidates/createRelabel`;公共前缀 `/api/merchant/v1/last-leg/return-orders`,客户范围取认证身份 | | 退货换标候选、退货单创建换标 | 客户退货库存进入换标申请,区别于平台审核与 PDA 签收 | `baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/returnreceipt/controller/MerchantReturnOrderController.java` 的 `GET /{returnNo}/relabel-candidates`、`POST /{returnNo}/relabel` → `ReturnReceiptService.relabelCandidates/createRelabel`;公共前缀 `/api/merchant/v1/last-leg/return-orders`,客户范围取认证身份 |
| 退货审核、退货驳回、换标审核 | 先区分退货预报准入与换标申请审核,均不是仓储转运审核 | 退货预报 `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue`;换标申请 `apps/admin-web/src/modules/overseas-warehouse/pages/RelabelOrdersView.vue`;条件与 API 见该模块 `AGENTS.md` | | 退货审核、退货驳回、换标审核 | 先区分退货预报准入与换标申请审核,均不是仓储转运审核 | 退货预报 `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue`;换标申请 `apps/admin-web/src/modules/overseas-warehouse/pages/RelabelOrdersView.vue`;条件与 API 见该模块 `AGENTS.md` |
| PDA版本、安装包下载、热更新、发布版本、停发 | 平台管理版本与设备检查更新分开定位,先区分国内/海外 PDA | 管理页 `apps/admin-web/src/modules/pda-releases/pages/PdaReleasesView.vue`;设备更新为国内 `apps/pda-uniapp/utils/app-update.js`、海外 `apps/pda-overseas-uniapp/src/utils/app-update.js`;后端查 `baiyue-firstleg/file/AGENTS.md` | | PDA版本、安装包下载、热更新、发布版本、停发 | 平台管理版本与设备检查更新分开定位,先区分国内/海外 PDA | 管理页 `apps/admin-web/src/modules/pda-releases/pages/PdaReleasesView.vue`;设备更新为国内 `apps/pda-uniapp/utils/app-update.js`、海外 `apps/pda-overseas-uniapp/src/utils/app-update.js`;后端查 `baiyue-firstleg/file/AGENTS.md` |
@@ -47,87 +23,73 @@ Admin、Client、海外 PDA 从各应用 AGENTS.md 短表定位,行为变更
| 审核、测量审核、实测审核 | 仓库测量结果审核 | `baiyue-firstleg/firstleg/AGENTS.md` 中“审核与初始计价”;页面先查 Admin 入库模块 | | 审核、测量审核、实测审核 | 仓库测量结果审核 | `baiyue-firstleg/firstleg/AGENTS.md` 中“审核与初始计价”;页面先查 Admin 入库模块 |
| 费用、运费、报价、计费、船期价格表、价格簿 | 单票入仓计价、客户专属报价或调价 | `apps/admin-web/src/modules/inbounds/fee/`、`apps/admin-web/src/modules/fba-pricing/carrier-rates/pages/CarrierRatesView.vue`(列表/上传)、`apps/admin-web/src/modules/fba-pricing/carrier-rates/pages/CarrierRateDetailView.vue`(版本详情/映射确认);后端查 `FbaPricingService` | | 费用、运费、报价、计费、船期价格表、价格簿 | 单票入仓计价、客户专属报价或调价 | `apps/admin-web/src/modules/inbounds/fee/`、`apps/admin-web/src/modules/fba-pricing/carrier-rates/pages/CarrierRatesView.vue`(列表/上传)、`apps/admin-web/src/modules/fba-pricing/carrier-rates/pages/CarrierRateDetailView.vue`(版本详情/映射确认);后端查 `FbaPricingService` |
| 柜费、公共费用、分摊 | 国内柜费来源归 Firstleg;海外柜费来源归 Lastleg;账单与结算结果归 Finance | 业务路由查“财务管理与柜级公共费用分摊”或“海外业务费用来源与客户财务”,按实际请求区分 | | 柜费、公共费用、分摊 | 国内柜费来源归 Firstleg;海外柜费来源归 Lastleg;账单与结算结果归 Finance | 业务路由查“财务管理与柜级公共费用分摊”或“海外业务费用来源与客户财务”,按实际请求区分 |
| 充值、余额、授信、账单、核销 | 客户自助与平台管理先按终端区分 | Client `apps/client-web/src/modules/finance/`;Admin `apps/admin-web/src/modules/finance/` | | 钱包、充值、余额、授信、账单、核销 | 客户自助与平台管理先按终端区分 | Client `apps/client-web/src/modules/finance/`;Admin `apps/admin-web/src/modules/finance/` |
| 客户账单、客户对账单、账单确认 | 客户查看和确认本企业账单,不是平台柜费分摊或充值审核 | Client `apps/client-web/src/modules/finance/views/FinanceBillsView.vue`;Admin 平台账单查 `apps/admin-web/src/modules/finance/`;Backend `baiyue-firstleg/finance/` 的 Client Finance Controller | | 客户账单、客户对账单、账单确认 | 客户查看和确认本企业账单,不是平台柜费分摊或充值审核 | Client `apps/client-web/src/modules/finance/views/FinanceBillsView.vue`;Admin 平台账单查 `apps/admin-web/src/modules/finance/`;Backend `baiyue-firstleg/finance/` 的 Client Finance Controller |
| 自动生成托盘、托盘码没生成、计划齐全、重试生成托盘码 | 海外入库计划保存后资源生成,不是国内托盘标签打印 | Admin `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue`;Backend `baiyue-firstleg/lastleg-service/docs/business-index.md` 的“人工计划自动生成托盘与资源重试”,执行规则先读该服务 `AGENTS.md` | | 自动生成托盘、托盘码没生成、计划齐全、重试生成托盘码 | 海外入库计划保存后资源生成,不是国内托盘标签打印 | Admin `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue`;Backend `baiyue-firstleg/lastleg-service/docs/business-index.md` 的“人工计划自动生成托盘与资源重试”,执行规则先读该服务 `AGENTS.md` |
| 托盘码、托盘标签、补打 | 先区分散货装柜、一件代发和海外实体托盘 | 散货 `apps/admin-web/src/modules/loading-lists/components/PalletLabelPrintDialog.vue`;一件代发 `apps/admin-web/src/modules/inbounds/core/DropshipPalletPrintPanel.vue`,从订单“托盘打印”页签进入;海外单张打印 `apps/admin-web/src/modules/overseas-warehouse/pages/PalletsView.vue`,详见各应用/模块指引 | | 托盘码、托盘标签、补打 | 先区分散货装柜、一件代发和海外实体托盘 | 散货 `apps/admin-web/src/modules/loading-lists/components/PalletLabelPrintDialog.vue`;一件代发 `apps/admin-web/src/modules/inbounds/core/DropshipPalletPrintPanel.vue`,从订单“托盘打印”页签进入;海外单张打印 `apps/admin-web/src/modules/overseas-warehouse/pages/PalletsView.vue`,详见各应用/模块指引 |
| 箱码、箱唛、箱标、单箱扫码 | 单箱身份与测量,不是托盘或库位 | 业务路由查“箱唛、箱码与单箱测量”;后端查 `InboundCartonLabelService` | | 箱码、箱唛、箱标、单箱扫码 | 单箱身份与测量,不是托盘或库位 | 业务路由查“箱唛、箱码与单箱测量”;后端查 `InboundCartonLabelService` |
| 库位、托盘、占位、释放 | 国内称重整票块归 Warehouse;海外实物托盘资源归 Warehouse Overseas;业务任务归 Lastleg | 业务路由查“称重确认”或“海外仓库与通用资料”;用国内/海外和业务阶段继续限定 | | 库位、托盘、占位、释放 | 国内资源归 Warehouse;海外资源归 Warehouse Overseas;海外库存业务归 Lastleg | 业务路由查“称重确认”或“海外库位”;仓库名称/地址查“海外仓库主档” |
| 拖车、派车、提柜、还柜 | 国内订舱拖车与目的港码头车队是不同业务;海外配送排车另属 Lastleg | 国内 `apps/admin-web/src/modules/trucking/`;目的港 `apps/admin-web/src/modules/container-loading/api/terminalDrayages.ts`;配送查“海外出库、排车” | | 拖车、派车、提柜、还柜 | 国内订舱拖车与目的港码头车队是不同业务;海外配送排车另属 Lastleg | 国内 `apps/admin-web/src/modules/trucking/`;目的港 `apps/admin-web/src/modules/container-loading/api/terminalDrayages.ts`;配送查“海外出库、排车” |
| 报关资料、退税资料、完成文件 | 平台整柜操作与客户订单上传先按终端区分 | Admin `apps/admin-web/src/modules/container-loading/components/ContainerCustomsPanel.vue`;Client `apps/client-web/src/modules/first-leg/components/CustomsDocumentsDialog.vue` | | 报关资料、退税资料、完成文件 | 平台整柜操作与客户订单上传先按终端区分 | Admin `apps/admin-web/src/modules/container-loading/components/ContainerCustomsPanel.vue`;Client `apps/client-web/src/modules/first-leg/components/CustomsDocumentsDialog.vue` |
| 退货、退货预报、退货换标、退货签收、退货合箱 | 客户退货预报及签收库存,区别于派送异常退回 | Client `apps/client-web/src/modules/overseas-warehouse/views/ReturnOrdersView.vue`;Admin `apps/admin-web/src/modules/overseas-warehouse/pages/ReturnInventoryManagementView.vue`;PDA `apps/pda-overseas-uniapp/AGENTS.md`;Lastleg `returnreceipt/`,见下文“退货预报、签收、库存与合箱” | | 退货、退货预报、退货换标、退货签收、退货合箱 | 客户退货预报及签收库存,区别于派送异常退回 | Client `apps/client-web/src/modules/overseas-warehouse/views/ReturnOrdersView.vue`;Admin `apps/admin-web/src/modules/overseas-warehouse/pages/ReturnInventoryManagementView.vue`;PDA `apps/pda-overseas-uniapp/AGENTS.md`;Lastleg `returnreceipt/`,见下文“退货预报、签收、库存与合箱” |
| PDA 出库、PDA 发车、扫码出库、整托出库 | 海外 PDA 执行排车和出库,不是平台排车配置或客户派送查询 | 海外 PDA `apps/pda-overseas-uniapp/src/pages/dispatch/dispatch.vue`、`src/api/fulfillment.js`;Backend `baiyue-firstleg/lastleg-service/dispatch/pda/`;统一经 `gateway/` | | PDA 出库、PDA 发车、扫码出库、整托出库 | 海外 PDA 执行排车和出库,不是平台排车配置或客户派送查询 | 海外 PDA `apps/pda-overseas-uniapp/src/pages/dispatch/dispatch.vue`、`src/api/fulfillment.js`;Backend `baiyue-firstleg/lastleg-service/dispatch/pda/`;统一经 `gateway/` |
| 异常、退回、退仓、回访 | 派送异常退回与库存退货业务不可混用 | 派送查 `apps/admin-web/src/modules/overseas-warehouse/pages/ExceptionOrdersView.vue`;退货预报/库存查 Lastleg `returnreceipt/` | | 异常、退回、退仓、异常回仓、回访 | 派送异常回仓归 `exceptionorder/`,客户退货预报归 `returnreceipt/`,PDA 两类签收不可混用 | 平台查 `apps/admin-web/src/modules/overseas-warehouse/AGENTS.md`;现场查 `apps/pda-overseas-uniapp/AGENTS.md` 的 `ExceptionReturnWork.vue` |
| 仓储转运审核、转运通过 | 平台转运审核通过弹框 | `apps/admin-web/src/modules/overseas-warehouse/components/WarehouseTransferReviewDialog.vue` |
## 定位步骤与反馈 | 转运驳回、REJECT | API 审核结论;当前弹框无此动作 | `apps/admin-web/src/modules/overseas-warehouse/api/warehouseTransfers.ts` 的 `reviewWarehouseTransfer`;界面能力查最近指引 |
- 已知文件、组件或请求路径:读取适用指引后直接进入该文件或限定服务搜索路由,无需经过词表。
- 页面问题:终端指引 → 命中页面 → 实际 import/API → 对应 Controller/Service。纯展示问题定位到相关组件即可;遇到后端业务判断再追踪调用链。
- 状态或权限问题:已知请求时先定位 Controller 的权限与 Service 的状态门禁,再核对前端消费;尚不知请求时从触发动作找到 API。不要先扫所有权限初始化 SQL。
- 无精确命中:从用户原话提取短词查本表;仍有歧义时利用页面标题、业务编号类型和国内/海外范围缩小。每次只扩展相邻业务范围。
- 实际任务若发生入口误导、路径失效或重复扩大搜索,在当次交付中简记“原说法 → 最终入口 → 绕路原因”,并修正命中的索引行;进度与临时结果不写回本文件。
- 评价检索质量看首次入口是否正确、扩大范围次数、找到目标前额外读取的无关文件数;文件存在或离线合同通过只能证明部分有效性,不能代替真实任务耗时。普通任务不额外建立计时脚本或登记台账。
## 业务快速路由表 ## 业务快速路由表
领星 WMS 自研系统(OMP)、经营总览图表、自营 SKU 日销量、热销与滞销排行、分仓产品库存与可售天数、库存周转、数据采集:先读 `apps/admin-web/src/modules/self-operated/AGENTS.md`;查询与采集编排查 `baiyue-firstleg/lastleg-service/AGENTS.md` 的自营入口,签名/限流/供应商分页问题才读 `baiyue-firstleg/integration-service/AGENTS.md`。区别于整箱库存和客户 WMS 作业库存。 | 业务 | 首个代码入口 | 边界正文(仅需要规则时读) |
自营专题按任务选择:总览图形/下钻查 `docs/自营业务/经营总览图表设计.md`,库存周转查 `docs/自营业务/库存周转视图设计.md`,采集交互查 `docs/自营业务/数据采集页面设计.md`,查询性能查 `docs/自营业务/领星统计查询性能优化方案.md`,外部接口联调查 `docs/自营业务/领星WMS接口联调手册.md`。架构/表结构不明时从 `docs/自营业务/README.md` 定位一期方案,不默认同时读取所有专题。
美国各类预约统一总览、提柜/用车/送仓预约梳理:`docs/海外仓业务/美国预约管理统一总览与优化方案.md`(设计建议);实际维护仍按下述来源模块进入。
预约工作日历、多客户共车、中转分批后送、改期取消、重新预约和未定日期事项:先读 `docs/海外仓业务/预约工作日历V13变更说明.md`(正式业务规则与验收),再读 `docs/海外仓业务/预约工作日历开发协作契约.md`(接口与文件边界);权威业务事实仍由下述来源模块维护。
预约管理、预约列表、到港/排车/还柜/计划到仓四类日历:Admin `apps/admin-web/src/modules/appointment-calendar/`,当前入口与日期规则见 `docs/海外仓业务/预约工作日历V13变更说明.md` 的“2026-10-19 当前预约列表收敛规则”;原送仓业务仍从 `docs/海外仓业务/README.md` 的“预约送仓”进入。排车只取海外仓送往 FBA/客户仓的真实车次,区别于订舱级拖车和港口提柜。
退货预报、签收、库存与合箱:Client `modules/overseas-warehouse/views/ReturnOrdersView.vue`、`ReturnInventoryView.vue`;Admin `modules/overseas-warehouse/pages/ReturnInventoryManagementView.vue`;海外 PDA `src/pages/return-receipt/return-receipt.vue`、`src/pages/return-packing/return-packing.vue`,API 与检查入口见 `apps/pda-overseas-uniapp/AGENTS.md`;Backend `lastleg-service/returnreceipt/`,执行规则先读 `baiyue-firstleg/lastleg-service/AGENTS.md`,详细接口与状态按需查 `baiyue-firstleg/lastleg-service/docs/business-index.md` 的退货入口,OpenAPI 为 `overseas-business-v1.yaml`。客户预报 → 平台审核 → PDA 签收 → 退货箱/SKU 库存 → 同客户合箱 → `delivery/` 退货出库;两个 PDA 页面均在 `src/pages.json` 注册,由 `src/data/overseas-workbench.js` 提供入口,真机验收另取证。派送异常退回仍归 `exceptionorder/`。
本表只路由到范围依据和首个代码入口;Admin/Client 路径从对应应用的 `src/` 起算,国内 PDA 路径从 `apps/pda-uniapp/` 起算,海外 PDA 路径从 `apps/pda-overseas-uniapp/src/` 起算,Backend 路径从 `baiyue-firstleg/` 起算。进入目标后继续读最近的 `AGENTS.md`,不要把根表当作模块细节清单。
| 业务 | 范围依据 | 首个代码入口 |
|---|---|---| |---|---|---|
| 登录认证 | `docs/订单与客户/README.md` | Admin `modules/auth/`、`core/auth/`;Client `modules/auth/`;Backend `auth/`、`iam/`。统一 Token 不携带角色或权限集;各端读取 Auth 登录/刷新响应的顶层授权快照用于展示,Gateway 与业务服务通过统一会话及 Auth 权威校验执行授权,不再依赖 Lastleg 安全投影 | | 登录认证 | [模块指引](../apps/admin-web/src/modules/auth/AGENTS.md) | [对应章节](业务实现边界.md#登录认证) |
| 客户与企业 | `docs/订单与客户/README.md`、`docs/订单与客户/订单与客户头程订单闭环设计.md` | Admin `modules/customers/`;Client `modules/tenant-management/`、`modules/account/`;Backend `iam/`、`auth/`、`file/`。公司联系电话/邮箱是企业资料,不作为成员登录标识且不要求跨企业唯一;成员登录手机号归账号链路,修改时同步 Auth 并撤销该账号会话。审核必填资质仅营业执照与统一社会信用代码;法人身份证选填,可在已有营业执照后单独补传或替换,营业执照仍须与统一社会信用代码整包提交;默认尺寸配置由 IAM 持久任务异步调用 `firstleg/`,未就绪不得审核通过 | | 客户与企业 | [模块指引](../apps/admin-web/src/modules/customers/AGENTS.md) | [对应章节](业务实现边界.md#客户与企业) |
| 供应商与国内整柜 | `docs/国内货柜履约/国内货柜履约需求确认表.md` | Admin `modules/suppliers/`、`modules/domestic-containers/`;Backend `warehouse/`;OpenAPI `supplier-v1.yaml`、`domestic-container-v1.yaml` | | 供应商与国内整柜 | [模块指引](../apps/admin-web/src/modules/suppliers/AGENTS.md) | [对应章节](业务实现边界.md#供应商与国内整柜) |
| 平台收货仓 | `docs/订单与客户/订单与客户头程订单闭环设计.md` | Admin `modules/warehouses/`;Client `modules/first-leg/`;Backend `warehouse/` | | 平台收货仓 | [模块指引](../apps/admin-web/src/modules/warehouses/AGENTS.md) | [对应章节](业务实现边界.md#平台收货仓) |
| 头程订单、批量审核预览与入仓码关系 | `docs/订单与客户/README.md`、头程订单闭环设计 | Admin `modules/first-leg-orders/`、`modules/unified-orders/`;Client `modules/first-leg/api/inboundCodeAssociations.ts`、`modules/first-leg/`;Backend `order/` 的 `InboundCodeAssociationService`、`UnifiedOrderQueryService`、`BatchOrderReviewPreviewService` 与 `firstleg/`。Order 为 `SUBMITTED` 时,即使 Firstleg 已存在准备中入库投影,统一列表仍固定显示 `PENDING_REVIEW` 并提供审核动作;批量审核弹框只调用 `/orders/first-leg/batch-review-preview` 一次获取按请求顺序返回的快照,不逐票查询详情,主要展示入仓码而非内部订单 ID | | 头程订单、批量审核预览与入仓码关系 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#头程订单批量审核预览与入仓码关系) |
| 客户头程订单批量导入 | 当前 Order 契约 | Client `modules/first-leg/views/FirstLegOrdersView.vue`、`api/firstLeg.ts`;Backend `order/` 的 `MerchantBatchImportService`、`MerchantWarehouseCatalogClient`、`MerchantPricingCatalogClient` 与 `order-v1.yaml`。中文 XLSX 模板按当前客户动态生成地址、全部有效仓库和渠道下拉;导入时重新校验动态选项与客户归属,最多 50 行,只创建草稿,支持部分成功或整批原子模式 | | 客户头程订单批量导入 | [模块指引](../apps/client-web/src/modules/first-leg/AGENTS.md) | [对应章节](业务实现边界.md#客户头程订单批量导入) |
| 平台旧系统订单导入 | 当前 Order 契约 | Admin `modules/unified-orders/pages/UnifiedOrdersView.vue`、`api/unifiedOrders.ts`;Backend `order/` 的 `PlatformLegacyOrderImportService` 与 `/api/platform/v1/orders/first-leg/legacy-import`。固定归属启用客户“IT测试公司”,保留旧入仓码,按当前公共仓库和客户价格簿逐行校验,成功行进入待审核 | | 平台旧系统订单导入 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#平台旧系统订单导入) |
| 平台修改客户原始申报与履约渠道 | 当前 Order/Firstleg 契约 | Admin `modules/unified-orders/components/OrderDeclarationEditorDialog.vue`、`api/unifiedOrders.ts`;Backend `order/` 的 `OrderDeclarationUpdateService` 与 `order-v1.yaml`,通过 `ORDER_DECLARATION_UPDATED_V1` 同步 `firstleg/` 的 `OrderDeclarationSyncService`。只修改申报快照,不覆盖仓库/PDA 实测、测量审核、箱码或已确认费用;渠道变化额外校验分柜、同柜、装柜可逆性与重新计价,国内收货仓或中转仓变化必须重新下单 | | 平台修改客户原始申报与履约渠道 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#平台修改客户原始申报与履约渠道) |
| 脚本管理、全量验证与测试造数 | `baiyue-firstleg/scripts/AGENTS.md`、`baiyue-firstleg/scripts/README.md` | 本机重型检查经 `scripts/local-check.ps1` 统一限流,规则见 `docs/AI工程执行与协作约束.md`;Backend `scripts/` 为仓库级入口,`scripts/admin-test-env-modules/` 为 Admin HTTP 内部模块;服务局部脚本留在 `<service>/scripts/`,不得散落到 `src/test/scripts/`;真实 HTTP、部署或环境写入仍须当前轮明确授权 | | 脚本管理、全量验证与测试造数 | [模块指引](../baiyue-firstleg/scripts/AGENTS.md) | [对应章节](业务实现边界.md#脚本管理全量验证与测试造数) |
| 平台/企业 RBAC | 订单与客户契约;公共语义见 `docs/平台客户层级与权限契约.md` | Admin `modules/iam/`、`core/access/`;Client `modules/tenant-management/`;Backend `iam/`、`auth/` | | 平台/企业 RBAC | [模块指引](../apps/admin-web/src/modules/iam/AGENTS.md) | [对应章节](业务实现边界.md#平台企业-rbac) |
| 消息中心与站内通知 | 触发业务的阶段/专题契约,收件箱以 IAM OpenAPI 为准 | Admin/Client `modules/notifications/`;Backend `iam/.../notification/`;生产者留在所属服务 | | 消息中心与站内通知 | [模块指引](../apps/admin-web/src/modules/notifications/AGENTS.md) | [对应章节](业务实现边界.md#消息中心与站内通知) |
| PDA 拣货与柜级装柜证据 | 国内 PDA README、拣货原型、国内货柜履约需求确认 | PDA `pages/picking/`、`stores/picking.js`、`api/pda-loading.js`;证据以 `taskId + warehouseId` 进入任务专用 API,业务所有权固定真实 `containerBookingId`,不得按入仓单或客户拆分;上传以幂等键绑定包含文件内容的请求哈希,完全重放直接返回已有结果且不得重复上传 File;Backend `firstleg/`、`warehouse/`、`file/` | | PDA 拣货与柜级装柜证据 | [模块指引](../apps/pda-uniapp/AGENTS.md) | [对应章节](业务实现边界.md#pda-拣货与柜级装柜证据) |
| 到仓测量、测量库位、箱规策略与头程计费 | `docs/入库测量与计费/README.md`;规则查 `baiyue-firstleg/firstleg/AGENTS.md` 对应入口 | Admin `modules/inbounds/measurement/InboundMeasurementDialog.vue`、`InboundMeasurementPanel.vue`,称重 `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend `firstleg/` 的 `InboundMeasurementService`、`MeasurementLocationOccupationService`、`FbaPricingService`。库位归 `warehouse/`,图片归 `file/`,OCR 归 `integration-service/`;只按实际调用增加服务指引 | | 到仓测量、测量库位、箱规策略与头程计费 | [模块指引](../apps/admin-web/src/modules/inbounds/AGENTS.md) | [对应章节](业务实现边界.md#到仓测量测量库位箱规策略与头程计费) |
| 客户专属报价、柜级阶梯运费与费用调整 | 当前 Firstleg 计价契约、`docs/入库测量与计费/README.md` | Admin `modules/fba-pricing/carrier-rates/`、`modules/inbounds/fee/`、`modules/unified-orders/components/InboundFeeDetailManager.vue`;Backend `firstleg/` 的 `PlatformPriceBookService`、`ActivePriceBookEstimator`、`FbaPricingService`、`ContainerTierAmountAllocator`、`InboundFeeDetailService` 与 `fba-pricing-v1.yaml`。公共报价使用 `customerId=0`,客户专属报价按客户独立版本化并优先于公共 ACTIVE 版本;柜级区域重量阶梯只聚合同柜同客户中费用快照同为 `REGION_WEIGHT_TIER` 的成员并守恒分摊,混柜的固定仓价等其他模型不参与阶梯且保持原费用,装柜成员变化只重算未锁定的区域阶梯费用。人工调整计费量限系统基准上下 10% 且必须带版本、原因和二次确认;`PRIVATE_LAST_MILE_DELIVERY` 只允许私人目的仓;一件代发在预装确认前完成计价,`WAIT_PALLETIZE` 试算不得回退托盘化状态 | | 客户专属报价、柜级阶梯运费与费用调整 | [模块指引](../apps/admin-web/src/modules/fba-pricing/AGENTS.md) | [对应章节](业务实现边界.md#客户专属报价柜级阶梯运费与费用调整) |
| 箱唛、箱码与单箱测量 | `docs/入库测量与计费/入库测量与计费需求优化版-v2-测量计费入库主流程.md`、`docs/墨家设备测量上传接口说明-V3.md` | Admin `modules/inbounds/measurement/`;Client `modules/first-leg/`;Backend 按 `firstleg/AGENTS.md` 的箱唛与测量入口 | | 箱唛、箱码与单箱测量 | [模块指引](../baiyue-firstleg/firstleg/AGENTS.md) | [对应章节](业务实现边界.md#箱唛箱码与单箱测量) |
| 称重确认、整票库位块与部分拣货资源结算 | `baiyue-firstleg/firstleg/AGENTS.md` 的称重入口、`baiyue-firstleg/warehouse/AGENTS.md` 的 A0/资源结算规则 | Admin `modules/inbounds/weight/components/WeightOcrPanel.vue`;Backend Firstleg `MeasurementLocationOccupationService`、`InboundMeasurementService`、`MeasurementSubmissionService` → Warehouse `LocationBlockService`。国内整票资源结算按 `reservationId` 定位;称重、槽位容量和部分拣货的详细门禁留在所属服务指引 | | 称重确认、整票库位块与部分拣货资源结算 | [模块指引](../baiyue-firstleg/warehouse/AGENTS.md) | [对应章节](业务实现边界.md#称重确认整票库位块与部分拣货资源结算) |
| 入库扣货、解除与凭证 | 入库测量与计费、国内货柜履约契约 | Admin `modules/unified-orders/pages/UnifiedOrdersView.vue`、`modules/inbounds/core/api.ts`;Backend `firstleg/` 的 `InboundHoldService`、`InboundHoldGuard`、`InboundHoldEvidenceService`,文件归 `file/` 的 `INBOUND_HOLD_EVIDENCE`。扣货状态必须阻断后续物理履约写入;已发生拣货、装柜或出仓时禁止手工扣货/解除,命令携带版本与幂等键,只有进入不可变历史的凭证可下载 | | 入库扣货、解除与凭证 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#入库扣货解除与凭证) |
| 财务管理与柜级公共费用分摊 | `docs/财务管理/` 产品确认、五页验收契约、Firstleg-Finance 跨服务契约 | Admin `modules/finance/`、`modules/loading-lists/components/ContainerFeesPanel.vue`;Client `modules/finance/views/FinanceBillsView.vue`,账单行按 `inboundCode` 复用头程入仓关系详情;Backend `finance/`、`firstleg/`,契约 `container-fees-v1.yaml`;导出与凭证归 `file/`。跨客户公共柜费按柜内真实客户与订单归属原子建组,金额合计等于柜费总额,审核、驳回、调整和作废整组处理,单行入口不得破坏组一致性 | | 财务管理与柜级公共费用分摊 | [模块指引](../apps/admin-web/src/modules/finance/AGENTS.md) | [对应章节](业务实现边界.md#财务管理与柜级公共费用分摊) |
| 客户资金账户、充值、授信与业务扣费 | `docs/财务管理/README.md`、统一认证与服务通信契约 | Admin `modules/finance/pages/FinanceCustomerAccountsView.vue`;Client `modules/finance/views/FinanceAccountView.vue`;Backend `finance/` 的 `FinanceWalletService` 与三类 Wallet Controller。充值申请经 File 保存凭证,平台审核或手工充扣;余额、授信、冻结、结算和释放以 Finance 主账为准。海外业务经 `WALLET_COMMAND_REQUESTED/COMPLETED` Outbox 直接投递往返,不跨区同步调用钱包 | | 平台资金账户、充值审核、手工充扣与授信 | [Admin 财务](../apps/admin-web/src/modules/finance/AGENTS.md) | [资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户) |
| 订单编排、分柜、同柜不可拆组与柜次 | `docs/国内货柜履约/README.md`、`docs/国内货柜履约/国内货柜履约需求确认表.md`、`docs/统一订单主状态与操作契约.md` | Admin `modules/unified-orders/api/coLoadGroups.ts`、`modules/unified-orders/`、`container-loading/`;Client `modules/first-leg/`;Backend `firstleg/loading/coload/`、`firstleg/split/`、`firstleg/loading/`、`order/`;同柜组按订单创建,由服务端冻结每票全部可用入仓片段,仅要求同国内仓、同渠道,允许跨客户及不同目的仓港 | | 客户资金账户、余额、授信与充值申请 | [Client 财务](../apps/client-web/src/modules/finance/AGENTS.md) | [资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户) |
| 全局智能排柜、预装与真实集装箱号后补 | 同上 | Admin `modules/container-loading/components/SmartLoadingDialog.vue` 内嵌 `pages/GlobalSmartLoadingView.vue`,柜次页 `SmartLoadingWorkbenchView.vue`,预装详情 `loading-lists/pages/PreloadPlanDetailView.vue`;PDA `pages/picking/`;Backend `firstleg/` 的 `PlatformSmartLoadingController`、`SmartLoadingService`、`PendingReviewOrderClient`、`loading/`,待审核事实来自 Order `PendingReviewOrderQueryService`。全局候选覆盖 `PENDING_REVIEW/WAIT_MEASURE/WAIT_SPLIT/LOADING`,状态只用于筛选展示,能否加入以服务端 `canAssign` 为准;待审核/待测量可提前占位,但确认预装或启动 PDA 前必须进入 `WAIT_SPLIT`。暂估明细的 `totalPackageCount/remainingPackageCount` 在测量前取 Order 原始申报箱数,测量完成后取最新已审核测量箱数,读取补充失败只回退当前已分配数,写入调整仍重新校验权威数量。同柜不可拆组仅在全员命中状态集合时作为一个分页与分配单元;人工加入允许跨渠道,智能推荐仍按柜次渠道。计划可一次性移除全部未拣明细,但任一成员已拣的同柜组必须整组保留。创建柜次时原子生成唯一预装计划,加入入仓码即建立关联;真实集装箱号不阻塞订舱关联,但确认预装和创建 PDA 任务前必须补齐。历史缺号任务允许在预装详情首次补录,保存后恢复 PDA 可进入状态 | | 服务端资金账户、授信、冻结、结算与业务扣费 | [Finance](../baiyue-firstleg/finance/AGENTS.md) | [资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户) |
| 客户入库结果与头程费用确认 | 入库测量与计费主流程、当前 Firstleg 契约 | Client `modules/first-leg/components/InboundBillingPanel.vue`、`api/inboundBilling.ts`;Backend `firstleg/` 的 `MerchantInboundBillingController`、`MerchantInboundBillingService`、`FbaPricingService` 与 `firstleg-v1.yaml`。客户仅能确认本客户 `SENT` 的最新费用版本,提交 `expectedFeeVersion` 与幂等键;确认记录当前成员和时间并永久锁定该版本,平台不得再修改 | | 订单编排、分柜、同柜不可拆组与柜次 | [模块指引](../apps/admin-web/src/modules/container-loading/AGENTS.md) | [对应章节](业务实现边界.md#订单编排分柜同柜不可拆组与柜次) |
| 订舱资料、放舱、出仓前船期与订舱级拖车 | 国内货柜履约 README、需求确认和实施边界 | Admin `modules/ocean-bookings/`、`port-schedules/`、`trucking/`;Backend `firstleg/oceanbooking/`、`firstleg/portschedule/`、`TruckAppointmentService`。拖车预约由 `RELEASED` 订舱拥有,不按客户、柜次、装柜计划或真实柜号归属;每个订舱最多一张非终态拖车单,创建候选由服务端排除缺提单/有效订舱文件或已有有效拖车单的订舱;PDA 装柜完成不推进拖车状态;全部要求货柜确认国内离仓后自动完成,人民币拖车费按实装体积分摊为柜次应付并经 Finance Outbox 入池 | | 全局智能排柜、预装与真实集装箱号后补 | [模块指引](../apps/admin-web/src/modules/container-loading/AGENTS.md) | [对应章节](业务实现边界.md#全局智能排柜预装与真实集装箱号后补) |
| 目的港码头拖车与还空预警 | `docs/海外仓业务/README.md` | 与订舱级拖车预约是不同生命周期。Admin 海外清关提柜列表/详情 `modules/container-loading/pages/OverseasContainersView.vue`、`modules/container-loading/pages/OverseasContainerDetailView.vue`;Firstleg 拖车 API `api/terminalDrayages.ts`,柜级到仓 API `api/containerArrivalTimes.ts`。原预约/实际提柜列改为预计/实际到仓:预计时间由平台在列表快捷选择并同步 Lastleg 整柜尾程订单,实际时间取海外 PDA 首次开始收货;车队、邮件、还柜与 `unloadingCompletedAt + 72h` 预警仍归 `firstleg/terminaldrayage/`。 | | 客户入库结果与头程费用确认 | [模块指引](../apps/client-web/src/modules/first-leg/AGENTS.md) | [对应章节](业务实现边界.md#客户入库结果与头程费用确认) |
| 整柜报关资料与完成文件 | 国内货柜履约契约 | 装柜完成后由 Admin `modules/container-loading/components/ContainerCustomsPanel.vue` 管理整柜报关,Client `modules/first-leg/components/CustomsDocumentsDialog.vue`、`api/customs.ts` 按订单处理本客户退税资料;Backend `firstleg/customs/container/`、`customs-v1.yaml`,文件归 `file/`。客户资料可覆盖同柜多个退税入仓码,开始报关后冻结;平台逐资料回传完成文件,全买单柜走平台确认与明细导出 | | 订舱资料、放舱、出仓前船期与订舱级拖车 | [模块指引](../apps/admin-web/src/modules/ocean-bookings/AGENTS.md) | [对应章节](业务实现边界.md#订舱资料放舱出仓前船期与订舱级拖车) |
| 国内出仓确认 | 国内货柜履约契约 | Admin `modules/outbound-dispatch/`;Backend `firstleg/outbound/dispatch/` | | 目的港码头拖车与还空预警 | [模块指引](../baiyue-firstleg/firstleg/AGENTS.md) | [对应章节](业务实现边界.md#目的港码头拖车与还空预警) |
| 客户统计与平台日志 | 当前统计/审计契约 | Admin `modules/customers/`、`modules/audit/`;Backend `firstleg/customerstatistics/`、`audit-service/` | | 整柜报关资料与完成文件 | [模块指引](../apps/admin-web/src/modules/container-loading/AGENTS.md) | [对应章节](业务实现边界.md#整柜报关资料与完成文件) |
| 客户工作台账户与设置 | 订单与客户契约 | Client `modules/account/`、`system/`、`tenant-management/`;Backend `iam/`、`auth/` | | 国内出仓确认 | [模块指引](../apps/admin-web/src/modules/outbound-dispatch/AGENTS.md) | [对应章节](业务实现边界.md#国内出仓确认) |
| 企业订单与跨境业务 | 订单与客户、国内货柜履约契约 | Client `modules/order-management/`、`cross-border/`;Backend `order/`、`firstleg/`、`integration-service/` | | 客户统计与运营指标 | [客户模块](../apps/admin-web/src/modules/customers/AGENTS.md) | [统计与日志边界](业务实现边界.md#客户统计与平台日志) |
| 海外接柜、入库与库内库存 | `docs/海外仓业务/README.md` | Admin 按 `apps/admin-web/AGENTS.md` 海外模块入口;海外入口 `gateway/`;尾程/入仓/换标/库存 `lastleg-service/`;仓库主档归国内 `warehouse/`,库位/托盘/锁归 `warehouse-overseas-service/` 并只引用国内 warehouseId;与排车、出库、派送共同组成海外仓全流程 | | 平台日志、操作日志、审计日志与操作人缺失 | [审计模块](../apps/admin-web/src/modules/audit/AGENTS.md) | [统计与日志边界](业务实现边界.md#客户统计与平台日志) |
| 尾程订单控制与柜级入仓计划转换 | `docs/海外仓业务/README.md` | Admin `modules/overseas-warehouse/pages/LastMileOrdersView.vue`、`LastMileOrderDetailView.vue`、`api/lastMileOrders.ts`;Backend `lastleg-service/` 的 `LastlegOrderController`、`LastlegOrderCommandService`、`InboundPlanService`、`ContainerInboundPlanConversionCoordinator`,资源归 `warehouse-overseas-service/` 的 `WarehousePalletBatchService`。`orders/container-summaries` 按 `sourceContainerBookingId` 跨客户聚合并分页返回全部稳定来源柜,已完成计划转换的柜仍保留用于接柜仓查询与修改;生成动作只消费 `allPlansReady/pendingPlanCount/resourcePendingPlanCount`,详情不受列表分页截断。确认前从 `/inbound-plans/container-preview` 读取服务端分组、托数、阻断项与 `snapshotVersion/snapshotHash`;`convert-container` 锁柜重算后先批量预留真实托盘,再本地原子生成剩余独立计划并确认资源,失败仅补偿未确认资源,同柜重放不得产生第二批资源。单票手工计划保存后,全柜计划齐全且预览就绪时自动生成并绑定托盘资源,一票柜立即触发;`resourcePendingPlanCount` 表示自动生成异常后的重试入口,资源未齐不得进入 PDA 接柜。自动入口见 Lastleg `ContainerInboundPlanConversionCoordinator.convertManualAndAutoMaterialize`。单票可维护完整入库计划、暂扣/解除及八行人工节点快照;命令提交订单版本与幂等键,新增暂扣只允许完成入库后执行并仅阻断该票后续排车/出库,不阻断入库计划或入库作业;人工节点首次保存后固定 `MANUAL` 来源且不得回退柜级节点 | | 客户工作台账户与设置 | [模块指引](../apps/client-web/AGENTS.md) | [对应章节](业务实现边界.md#客户工作台账户与设置) |
| 海外仓 PDA | `apps/pda-overseas-uniapp/AGENTS.md`;执行规则查 `baiyue-firstleg/lastleg-service/AGENTS.md`,跨模块流程才查海外仓 README | 入仓 `src/pages/operation/`、`src/api/inbound.js`;排车与出库 `src/pages/dispatch/`、`src/pages/outbound/`、`src/api/fulfillment.js`。Backend `lastleg-service/inboundplan/pda/`、`dispatch/pda/`、`delivery/`;统一经 `gateway/`。柜级收货与单票客户隔离按 Lastleg“PDA 入仓”规则核对 | | 企业订单与跨境业务 | [模块指引](../apps/client-web/AGENTS.md) | [对应章节](业务实现边界.md#企业订单与跨境业务) |
| 海外采购、本土卡车与散板 | `docs/海外仓业务/README.md` | Admin `modules/overseas-business/`;Client `modules/cross-border/`;Backend `lastleg-service/` 的 `procurement/`、`trucking/`、`looseboard/`;统一经 `gateway/` | | 海外接柜、入库与库内库存 | [模块指引](../apps/admin-web/src/modules/overseas-warehouse/AGENTS.md) | [对应章节](业务实现边界.md#海外接柜入库与库内库存) |
| 采购样品、货款、装箱清单、面单、预估快递费、国内收货寄客户 | `docs/海外仓业务/采购订单样品履约流程变更需求.md` | 采购流程变更入口;代码从上述采购模块进入 | | 尾程订单控制与柜级入仓计划转换 | [模块指引](../apps/admin-web/src/modules/overseas-warehouse/AGENTS.md) | [对应章节](业务实现边界.md#尾程订单控制与柜级入仓计划转换) |
| 海外仓库与通用资料 | `docs/海外仓业务/README.md` | 全部仓库主档进入 Admin `modules/warehouses/` 与国内 `warehouse/`;海外库位/托盘/锁进入 `warehouse-overseas-service/` 并引用国内 warehouseId;报价、汇率、车辆按海外服务实际契约 | | 海外仓 PDA | [模块指引](../apps/pda-overseas-uniapp/AGENTS.md) | [对应章节](业务实现边界.md#海外仓-pda) |
| 车辆管理、司机证照、保养加油、车辆维修/故障/救援/异常、外接货与车次 | `apps/admin-web/src/modules/overseas-master-data/AGENTS.md`、`baiyue-firstleg/lastleg-service/AGENTS.md`;原型范围有疑问时查 `docs/海外仓业务/车辆管理原型梳理与任务规划.md` | Admin `modules/overseas-master-data/`;Backend `lastleg-service/fleet/`,接口 `lastleg-service/src/main/resources/openapi/fleet-drivers-v1.yaml`、`fleet-trips-v1.yaml`、`fleet-vehicle-records-v1.yaml`;证照与运维照片存储查 `file/AGENTS.md` | | 海外采购、本土卡车与散板 | [模块指引](../apps/admin-web/src/modules/overseas-business/AGENTS.md) | [对应章节](业务实现边界.md#海外采购本土卡车与散板) |
| 拼车需求池、车次余位、销售拼车意向 | `docs/海外仓业务/内部拼车需求池首版开发契约.md`、`apps/admin-web/src/modules/overseas-master-data/AGENTS.md` | 复用 Lastleg Fleet 与本土业务;区分车次余位发布和客户订单,不从需求池生成第二套库存或费用 | | 采购样品、货款、装箱清单、面单、预估快递费、国内收货寄客户 | [模块指引](../apps/admin-web/src/modules/overseas-business/AGENTS.md) | [对应章节](业务实现边界.md#采购样品货款装箱清单面单预估快递费国内收货寄客户) |
| 国内出仓后船节点 | `docs/海外仓业务/README.md` | Admin `modules/port-schedules/`、`ocean-bookings/`、货柜详情;Backend `firstleg/portschedule/`、`integration-service/`;从确认国内出仓查询至目的港到达、提柜和还柜。节点按 `containerBookingId` 柜级聚合,跨区事件使用 `tenantId=0` 平台技术范围,不携带或校验客户 | | 海外仓库主档、名称、地址与能力 | 前端 [Admin](../apps/admin-web/src/modules/warehouses/AGENTS.md);后端 [Warehouse](../baiyue-firstleg/warehouse/AGENTS.md) | [资源归属](业务实现边界.md#海外仓库与通用资料) |
| 海外出库、排车、派送、异常与回访 | 排车改造查[排车列表统一作业改造契约](海外仓业务/排车列表统一作业改造契约.md);既有缺陷修复查[排车流程修复规划](海外仓业务/排车流程修复规划.md) | Admin `modules/overseas-warehouse/pages/DispatchesView.vue`、`DispatchDetailView.vue`、`OutboundsView.vue`、`DeliveryOrdersView.vue`、`ExceptionOrdersView.vue`、`CustomerVisitsView.vue`;Backend `lastleg-service/dispatch/`、`delivery/`、`dropship/`、`exceptionorder/`、`customervisit/`;统一经 `gateway/` | | 海外库位、托盘与资源锁 | [Warehouse Overseas](../baiyue-firstleg/warehouse-overseas-service/AGENTS.md) | [资源归属](业务实现边界.md#海外仓库与通用资料) |
| 海外业务费用来源与客户财务 | 当前实现查财务契约与统一认证与服务通信契约;阶段 0A—0E 开发再读 `docs/财务管理/海外仓费用统一接入阶段0技术契约.md` | 当前 V1 由 `lastleg-service/financefee/` 校验海外入仓、采购、美国卡车、本土散板和海外仓服务费,通过完整快照和 Outbox 直接投递 Finance 内部入口入池;阶段 0 目标改为收费身份/候选版本、Finance 接受或拒绝结果事件及版本化资金计划。必须沿代码确认落地范围,不把技术契约当成已实现状态;Client 仍只读取获准客户财务 | | 车辆管理、司机证照、保养加油、车辆维修/故障/救援/异常、外接货与车次 | [模块指引](../apps/admin-web/src/modules/overseas-master-data/AGENTS.md) | [对应章节](业务实现边界.md#车辆管理司机证照保养加油车辆维修故障救援异常外接货与车次) |
| 拼车需求池、车次余位、销售拼车意向、散板加货 | [模块指引](../apps/admin-web/src/modules/overseas-master-data/AGENTS.md) | [对应章节](业务实现边界.md#拼车需求池车次余位销售拼车意向) |
散货托盘码生成、打印与跨区传递:Admin `modules/loading-lists/components/PalletLabelPrintDialog.vue`;Firstleg `LoadingPalletLabelService`、`LoadingCompletedOutboxService`;Lastleg `LastlegSourcePalletMapper`、`InboundPlanService`。从各项目最近指引继续定位;散货 FBA 标签与一件代发实装托盘分别取各自冻结事实。 | 国内出仓后船节点 | [模块指引](../apps/admin-web/src/modules/port-schedules/AGENTS.md) | [对应章节](业务实现边界.md#国内出仓后船节点) |
| 海外出库、排车、派送、异常与回访 | [模块指引](../apps/admin-web/src/modules/overseas-warehouse/AGENTS.md) | [对应章节](业务实现边界.md#海外出库排车派送异常与回访) |
| 海外费用明细、仓租库存与资金/投递重试 | [模块指引](../apps/admin-web/src/modules/overseas-business/AGENTS.md) | [后端入口](../baiyue-firstleg/lastleg-service/AGENTS.md#快速索引) |
| 海外业务费用来源与客户财务 | [模块指引](../baiyue-firstleg/finance/AGENTS.md) | [对应章节](业务实现边界.md#海外业务费用来源与客户财务) |
| 自营销量与领星统计 | [模块指引](../apps/admin-web/src/modules/self-operated/AGENTS.md) | [对应章节](业务实现边界.md#自营销量与领星统计) |
| 预约管理与工作日历 | [模块指引](../apps/admin-web/src/modules/appointment-calendar/AGENTS.md) | [对应章节](业务实现边界.md#预约管理与工作日历) |
| 退货预报、签收、库存与合箱 | [模块指引](../baiyue-firstleg/lastleg-service/AGENTS.md) | [对应章节](业务实现边界.md#退货预报签收库存与合箱) |
| 散货托盘码生成、打印与跨区传递 | [模块指引](../apps/admin-web/src/modules/loading-lists/AGENTS.md) | [对应章节](业务实现边界.md#散货托盘码生成打印与跨区传递) |
## 原型入口索引 ## 原型入口索引
@@ -143,6 +105,6 @@ Admin、Client、海外 PDA 从各应用 AGENTS.md 短表定位,行为变更
| PDA 拣货 | `docs/悦/PDA拣货/pda-picking.html` | | PDA 拣货 | `docs/悦/PDA拣货/pda-picking.html` |
| WMS 字段补充 | `docs/悦/货代SAAS平台后台/wms_full_data.json`、`docs/悦/货代SAAS平台后台/柏悦WMS系统文档.md` | | WMS 字段补充 | `docs/悦/货代SAAS平台后台/wms_full_data.json`、`docs/悦/货代SAAS平台后台/柏悦WMS系统文档.md` |
| 国内货柜履约原型盘点 | `docs/国内货柜履约/国内货柜履约页面与原型清单.md` | | 国内货柜履约原型盘点 | `docs/国内货柜履约/国内货柜履约页面与原型清单.md` |
| 海外仓全流程 | `docs/海外仓业务/README.md` 的页面 ID 索引 | | 海外仓全流程 | [海外仓页面 ID](海外仓业务/业务规则.md#原型页面定向索引) |
| 海外仓 PDA | `apps/pda-overseas-uniapp/AGENTS.md`、`apps/pda-overseas-uniapp/src/data/overseas-workbench.js`、`apps/pda-overseas-uniapp/src/pages/operation/operation.vue` 与 `docs/海外仓业务/README.md` | | 海外仓 PDA | `apps/pda-overseas-uniapp/AGENTS.md`、`apps/pda-overseas-uniapp/src/data/overseas-workbench.js`、`apps/pda-overseas-uniapp/src/pages/operation/operation.vue` 与[海外仓页面 ID](海外仓业务/业务规则.md#原型页面定向索引) |
| Admin/Client 验收 | `docs/Admin-Client前端原型还原验收规则.md` | | Admin/Client 验收 | `docs/Admin-Client前端原型还原验收规则.md` |
+2 -2
View File
@@ -1,6 +1,6 @@
# 国内货柜履约 # 国内货柜履约
本目录负责国内分柜、订舱、拖车、拣货、装柜、装柜后的报关协同、送港、进港和甩柜事实。整体货柜流程进入收尾,**报关协同代码尚未完成**;当前只在这里查找流程节点,报关开发请转到交接清单。 本目录负责国内分柜、订舱、拖车、拣货、装柜、装柜后的报关协同、送港、进港和甩柜事实。本入口只维护流程路由;代码、部署和验收状态以环境主契约及实际证据为准,不在此重复记录。
## 当前流程入口 ## 当前流程入口
@@ -9,7 +9,7 @@
- [阶段四:海运、目的港与尾程计划](../头程到尾程分阶段流程/阶段四-海运目的港与尾程计划.md):实际开船后的海运、目的港和尾程计划衔接。 - [阶段四:海运、目的港与尾程计划](../头程到尾程分阶段流程/阶段四-海运目的港与尾程计划.md):实际开船后的海运、目的港和尾程计划衔接。
- [报关资料与船期价格接入梳理](报关资料与船期价格接入梳理.md):报关资料、报关行回执、客户确认/打回、正式申报、海关结果和船期价格专题。 - [报关资料与船期价格接入梳理](报关资料与船期价格接入梳理.md):报关资料、报关行回执、客户确认/打回、正式申报、海关结果和船期价格专题。
- [船期日历功能规划](船期日历功能规划.md):渠道、周模板、单次船期、收货截止时间和按渠道货量统计的独立日历规划。 - [船期日历功能规划](船期日历功能规划.md):渠道、周模板、单次船期、收货截止时间和按渠道货量统计的独立日历规划。
- [报关代码开发交接清单](../头程到尾程/报关代码开发交接清单.md):报关代码当前未完成时,下一开发对话使用的范围和验收条件。 - [报关代码开发交接清单](../头程到尾程/报关代码开发交接清单.md):报关专项的实现范围与验收线索,任务确实涉及时读取,不代表当前完成状态。
## 货柜关键节点 ## 货柜关键节点
@@ -6,7 +6,7 @@
> **当前展示版范围已重新冻结:只做船期维护和只读展示,不做自动归班、不消费预报、不改写收货审核、不自动改绑,也不改变现有智能排柜流程。** 首版只需要让管理人员看到每个航次的已收/预计货量、可用容量、按柜型初算的建议柜数、已订柜和待补柜,并据此人工判断是否合并到其他船。后续若要增加货物归班,再单独立项评审。第 15.8 节覆盖本文此前关于自动归班和异常改配的旧口径。 > **当前展示版范围已重新冻结:只做船期维护和只读展示,不做自动归班、不消费预报、不改写收货审核、不自动改绑,也不改变现有智能排柜流程。** 首版只需要让管理人员看到每个航次的已收/预计货量、可用容量、按柜型初算的建议柜数、已订柜和待补柜,并据此人工判断是否合并到其他船。后续若要增加货物归班,再单独立项评审。第 15.8 节覆盖本文此前关于自动归班和异常改配的旧口径。
> **展示版统计口径**:每个船期按“收货仓 + 渠道 + 起运港 + 目的港”展示;已收使用现有收货/测量结果,预计量使用现有入仓和智能排柜可读数据;不创建或变更船期归班事实。收货截止时间只用于标记“截止前参考量/截止后风险”,不触发自动分配。订柜数只做只读初算,最终以现有智能排柜和人工确认结果为准。 > **展示版统计口径**:日历仅展示上海时区今天及以后开船的计划。未离仓审核实测货量优先保留有效订舱和排柜对应的船期,未安排或原安排失效的余量按“收货仓 + 渠道”展示在最近一班尚未截仓的有效船期;各船期继续展示自身起运港和目的港。顺延只改变日历货量和订柜参考,不创建或变更船期归班、订舱或排柜事实。订柜数按统一柜型容量向上取整,已离仓柜的容量不再抵扣余货需求,最终以现有智能排柜和人工确认结果为准,详细规则以第 15.8 节为准。
## 1. 输入来源与现状边界 ## 1. 输入来源与现状边界
@@ -652,20 +652,21 @@ Phase 1 不提供正常货量的批量改绑、强制赶截止和容量预占;
当前版本允许运营人员维护渠道、周模板和具体船期;货量相关能力全部只读: 当前版本允许运营人员维护渠道、周模板和具体船期;货量相关能力全部只读:
- **已收 CBM**:读取现有收货/测量流程已经产生的有效实测结果,不在船期页面重新生成收货事实。 - **有效船期与过期**:按 `Asia/Shanghai` 自然日,月历和汇总只纳入今天及以后开船的计划;今天之前的计划自然过期并从日历移除,不删除记录、不伪造已开船状态。服务端返回上海本地时间 `nextRefreshAt`,取下一零点和同仓、同渠道范围内最近截仓时刻之后 1 毫秒的较早值;截仓查询不受展示月份、船名、港口或状态筛选限制。页面据此自动刷新,失败后延迟 60 秒重试,避免跨月顺延后货量停留在旧值。
- **已收 CBM 与未发货顺延**:读取现有收货/测量流程已经产生且尚未确认国内离仓的有效实测体积。已排柜且关联有效 `RELEASED` 订舱的部分,保留在其开船日期不早于今天、状态为 `OPEN/CLOSED` 的船期,截仓后仍保留;支持既有跨仓、跨渠道安排。未安排或原安排取消、日期过期的余量,按原收货仓和渠道选取 `OPEN`、开船日期不早于今天且截止时间不早于当前时刻的最近一班,按开船时间、船期编号、ID 稳定排序。同一份货量只计入一班,部分排柜按体积分开,不受原收货月份限制;没有下一有效船期时保留原货物事实,后续新增有效计划即可承接。这里只改变只读展示,不改已确认订舱、排柜或真实运输安排。
- **预计 CBM**:读取现有入仓预报或智能排柜可读数据;没有可靠来源时显示“暂无数据”,不凭渠道名称或订单分页猜测。 - **预计 CBM**:读取现有入仓预报或智能排柜可读数据;没有可靠来源时显示“暂无数据”,不凭渠道名称或订单分页猜测。
- **截止前参考量**:按船期的收货仓、渠道、起运港、目的港和 `warehouseCutoffAt` 做查询口径,只用于显示“理论上可供管理人员参考的货量池”,不表示货物已经归入该船。 - **截止前参考量**:对顺延后的待发货量按收货时间与 `warehouseCutoffAt` 区分参考量和风险量,不表示货物已经绑定该船。每次月历查询共用一个业务时刻,避免跨过截仓瞬间造成重复。
- **已明确本船量**:只读取现有系统已经明确关联到该船名/航次或现有订舱/柜次事实的数据;日历不新增关联。 - **已明确本船量**:只读取现有系统已经明确关联到该船名/航次或现有订舱/柜次事实的数据;日历不新增关联。
- **建议订柜数**:按可展示货量和统一柜型容量做初算,显示计算时间、柜型和“最终以智能排柜/人工确认结果为准”;不创建订舱、不锁舱位、不改柜次。 - **建议订柜数**:对展示的待发实测与可核验预计体积之和,除以统一柜型容量向上取整;正货量不足一柜也算一柜,零货量为零柜。晚到/风险标签不直接抹除已收货量。待补柜按货量先扣除未离仓柜的可用订舱容量,再按对应柜型向上取整,下限为零;已离仓柜的容量不能抵扣仓内余货。日历卡片、汇总和各柜型方案保持一致。不创建订舱、不锁舱位、不改柜次。
- **合船判断**:页面只提供“本船未满、建议关注相邻船期”的提示,并展示相邻船的可用容量和货量对比;不自动合并、不自动改绑。 - **合船判断**:页面只提供“本船未满、建议关注相邻船期”的提示,并展示相邻船的可用容量和货量对比;不自动合并、不自动改绑。
展示版的数据实现口径再明确一层:已收实测只统计测量审核为 `APPROVED` 且有 `actual_volume_cbm` 的有效入库单,按上一班截止时间到当前班截止时间的窗口汇总;主单只在未拆分时统计,拆分后的有效余量子单单独统计,避免父子单重复。当前没有可核验的预计体积来源时,预计量按 0 展示并在页面提示“暂无可核验数据”,不得把申报体积、原始体积或分页列表合计冒充预计量。已订柜读取已放舱订舱的柜型需求,优先识别已有船期关联,同时允许用仓库、渠道、港口、船名、航次和开船日期做确定性只读匹配;日历页面不创建关联。建议柜数只按统一柜型容量计算,待补柜只做提示。 展示版的数据实现口径再明确一层:已收实测只统计测量审核为 `APPROVED` 且有 `actual_volume_cbm` 的有效入库单,限定 `WAIT_PALLETIZE/WAIT_SPLIT/LOADING/LOADED`。未拆分单与拆分后的余量单各按自身实测体积统计;PDA 拣货结算后处于 `FULLY_SPLIT + LOADING/LOADED` 的源单已归一化为实际装柜部分,未离仓前同样保留,不能与整票原始体积重复。每票按有效装柜明细拆分为已离仓体积、有效订舱占用体积与未安排余量;已离仓要求客户、入库单和柜次一致,离仓状态为 `WAITING_FOR_LOADING` 且存在确认时间。扣除已离仓和有效订舱占用后,余量最低为零;订舱占用部分单独计入对应船期,撤销离仓后按现有运输安排重新纳入。当前没有可核验的预计体积来源时,预计量按 0 展示并在页面提示“暂无可核验数据”,不得把申报体积、原始体积或分页列表合计冒充预计量。已订柜读取已放舱订舱的柜型需求,存在有效显式关联时只认该关联;没有有效显式关联才用仓库、渠道、港口、船名、航次和开船日期做确定性只读匹配,每条订舱只选一班。已订总容量保存在 `bookedPlanningCapacityCbm`,扣除已离仓柜后的可用容量为 `availableBookedCapacityCbm`;按订舱需求中的柜型容量整柜扣除,同柜多票只扣一次,撤销离仓后恢复。日历页面不创建关联,待补柜只做提示。
当前版本明确不做以下写操作: 当前版本明确不做以下写操作:
1. 收货审核通过时,不调用船期日历服务,不写入 `fl_sailing_assignment`、预报消费或船期实收事实。 1. 收货审核通过时,不调用船期日历服务,不写入 `fl_sailing_assignment`、预报消费或船期实收事实。
2. 创建或修订预报不自动生成船期归班;预报维护接口不作为本轮页面入口。 2. 创建或修订预报不自动生成船期归班;预报维护接口不作为本轮页面入口。
3. 取消船期不自动把任何货物转到下一班;货物归属仍由原智能排柜和订舱流程维护。 3. 取消船期后未离仓货量按上述规则顺延展示;不改写货物实际归属,仍由原智能排柜和订舱流程维护。
4. 页面不提供货量异常改配、手工绑定实收、订舱关联/解除等操作;这些操作留在现有业务流程。 4. 页面不提供货量异常改配、手工绑定实收、订舱关联/解除等操作;这些操作留在现有业务流程。
因此,本轮验收重点从“自动归班正确”改为:船期维护正确、展示口径透明、已收/预计/已订柜/建议柜数不重复、取消或截止只影响展示标签、不会改变原收货和智能排柜数据。后续如果需要让管理人员在页面上确认“合并到哪一班”,再单独增加人工确认动作和正式归属模型。 因此,本轮验收重点从“自动归班正确”改为:船期维护正确、展示口径透明、未发货量顺延且不重复、建议柜数向上取整、取消或截止只影响只读展示,不会改变原收货和智能排柜数据。后续如果需要让管理人员在页面上确认“合并到哪一班”,再单独增加人工确认动作和正式归属模型。
+1 -1
View File
@@ -1,6 +1,6 @@
# 头程到尾程分阶段流程 # 头程到尾程分阶段流程
本目录是端到端流程的分段查找入口。F01-F40 流程基线已确认,当前用于全流程收尾变更;阶段三报关协同代码已接入并通过真实 HTTP 验收。总览和节点关系看[《头程到尾程流程节点梳理》](../头程到尾程流程节点梳理.md),字段、页面操作、权限和异常细节在对应阶段文件维护。 本目录是端到端流程的分段查找入口。F01-F40 流程基线已确认,当前用于全流程收尾变更;本入口不记录代码、部署或验收进度,相关事实只查环境主契约。总览和节点关系看[《头程到尾程流程节点梳理》](../头程到尾程流程节点梳理.md),字段、页面操作、权限和异常细节在对应阶段文件维护。
## 三大业务块与六个分段 ## 三大业务块与六个分段
@@ -27,7 +27,7 @@
| 角色 | 终端 | 主要操作 | | 角色 | 终端 | 主要操作 |
|---|---|---| |---|---|---|
| 排柜操作员 | Admin | 创建模拟柜、搜索候选、推荐/人工加入、调整预装 | | 排柜操作员 | Admin | 创建模拟柜、搜索候选、推荐/人工加入、调整预装 |
| 订舱操作员 | Admin | 建订舱草稿、维护运输资料、上传文件、放舱 | | 订舱操作员 | Admin | 建订舱草稿、维护运输资料、放舱 |
| 国内调度 | Admin | 建订舱级拖车预约、选择供应商、维护时间和附件 | | 国内调度 | Admin | 建订舱级拖车预约、选择供应商、维护时间和附件 |
| 仓库主管 | Admin | 预装确认、真实柜号补录、任务和证据监督 | | 仓库主管 | Admin | 预装确认、真实柜号补录、任务和证据监督 |
| PDA 拣货员 | 国内 PDA | 领取唯一柜次任务、扫码、异常、拍照、完成装柜 | | PDA 拣货员 | 国内 PDA | 领取唯一柜次任务、扫码、异常、拍照、完成装柜 |
@@ -115,9 +115,12 @@
3. 选择 `ACTIVE/BOOKING` 订舱供应商; 3. 选择 `ACTIVE/BOOKING` 订舱供应商;
4. 填写三类参与方和已知运输资料; 4. 填写三类参与方和已知运输资料;
5. 至少维护一项、最多二十项柜型需求,数量为正整数; 5. 至少维护一项、最多二十项柜型需求,数量为正整数;
6. 保存为 `DRAFT`,系统生成 `OB-yyMMdd-####` 订舱号。 6. 录入预报(委)件数、毛重、体积及包装单位、品名、唛头;未确定的数据留空;
7. 保存为 `DRAFT`,系统生成 `OB-yyMMdd-####` 订舱号并留在详情,可继续维护资料、上传文件和打印托运单。
草稿允许资料不完整、替换文件和继续编辑。柜型需求只表达需要多少个什么柜型,不创建真实货柜行。 草稿允许资料不完整和继续编辑;关系方名称未填时,其已录入的联系人、邮箱、电话、税号和地址仍随草稿保存,放舱前必须补齐三方名称。柜型需求只表达需要多少个什么柜型,不创建真实货柜行。
新建页面默认柜型 `40HQ`、整箱 `FCL`,运费条款 `FREIGHT PREPAID`、运输条款 `CY-CY`、包装单位 `CARTONS`,均按实际业务维护。港口、日期、品名、免用箱要求及货量不写样例默认值;包装单位可选 CARTONS、PCS、PALLETS,货量为本订舱总量。
### 5.2 补齐并放舱 ### 5.2 补齐并放舱
@@ -127,16 +130,26 @@
- 船名、航次、起运港、目的港、ETD、ETA 和运输条款完整; - 船名、航次、起运港、目的港、ETD、ETA 和运输条款完整;
- 渠道仍有效; - 渠道仍有效;
- 柜型需求与平台规格一致; - 柜型需求与平台规格一致;
- 存在有效 `BOOKING_CONFIRMATION` 或 `BILL_OF_LADING` 文件; - 不要求上传订舱确认文件或提单文件;订舱页面不再展示“订舱资料”模块;
- 订舱供应商仍为有效主档。 - 订舱供应商仍为有效主档。
点击放舱后状态从 `DRAFT` 进入 `RELEASED`,运输快照永久只读。放舱不要求真实柜号,不得为了通过校验伪造柜号。 点击放舱后状态从 `DRAFT` 进入 `RELEASED`,运输和预报货量快照永久只读;实际货量通过独立受控入口补录。放舱不要求真实柜号,不得为了通过校验伪造柜号。
### 5.3 客服补实与单据打印
- 客服手工录入本订舱的实际件数、毛重(KGS)和体积(CBM),不自动汇总关联柜或覆盖仓库测量事实。未采集保持 NULL;已填写数值必须大于零,件数为整数,重量、体积最多三位小数。
- 草稿保存委/实资料;放舱后仅持有订舱编辑权限的人员可通过 `PUT /api/platform/v1/ocean-bookings/{oceanBookingId}/actual-cargo` 补录或修正三项实值,必须提交当前版本、幂等键和原因,同事务递增版本并记录前后快照、操作人和时间。运输资料、三方关系人、柜型需求、预报货量和文件关联仍冻结。
- 核心资料右侧并排展示发货人、收货人、通知人,下方独立展示船名、航次、提单号。保留仓库、渠道、预计到港及多柜型需求,移除订舱文件入口。
- “打印托运单”读取已保存的委值;“打印提单确认件”读取已保存的实值。两类单据复用现有 A4 PDF 模板和预览/下载,未填字段显示“—”,实值缺失不能回退为委值,也不以柜型容量代替货量。未保存修改须先保存再打印。
- 柜量描述按柜型需求和数量生成,件数英文大写按对应的委/实件数及包装单位生成;品名、唛头及三方联系信息来自已保存资料。没有来源的传真、代理联系人等保持“—”。
- 系统仅生成提单确认件,正式提单由外部提供;不新增正式提单签发模板。订舱页面移除附件资料模块,放舱及后续拖车预约、派车不依赖订舱附件。
- 不在订舱新增中实现 FBA 同组入仓 30 天校验;该规则须先明确分组与时间事实后单独确认。
## 6. F16 订舱级国内拖车 ## 6. F16 订舱级国内拖车
入口:Admin → 国内拖车预约。 入口:Admin → 国内拖车预约。
1. 从服务端候选中选择已 `RELEASED`、有提单号和有效订舱文件的订舱; 1. 从服务端候选中选择已 `RELEASED` 且有提单号的订舱(不要求订舱文件);
2. 选择 `ACTIVE/TRUCKING/DOMESTIC` 供应商; 2. 选择 `ACTIVE/TRUCKING/DOMESTIC` 供应商;
3. 填写计划装柜时间、联系人和附件; 3. 填写计划装柜时间、联系人和附件;
4. 保存/提交预约; 4. 保存/提交预约;
+1 -1
View File
@@ -24,7 +24,7 @@
## 跨层同步 ## 跨层同步
- 菜单结构、路由权限、页面按钮、Controller `@PreAuthorize`、OpenAPI 权限说明及 IAM 初始化/统一增量 SQL 必须同步核对,不能以局部测试通过替代跨层一致性。 - 新增、修改或删除权限码、访问域或授权语义时,仅对实际受影响的菜单、路由、页面按钮、Controller `@PreAuthorize`、OpenAPI 权限说明及 IAM 初始化/统一增量 SQL 同步核对;核对不等于必须修改各层,不能以局部测试通过替代跨层一致性。按钮或菜单的界面调整及对已有状态、权限和操作资格的消费不触发本节联动,服务端鉴权与业务校验仍须保留。
- 业务功能任务只维护所属页面与接口,不得根据局部旧上下文覆盖共享导航、根路由装配、IAM 菜单权限初始化或统一增量脚本中的已确认语义。 - 业务功能任务只维护所属页面与接口,不得根据局部旧上下文覆盖共享导航、根路由装配、IAM 菜单权限初始化或统一增量脚本中的已确认语义。
- 发现共享文件与本契约冲突时,保留现有其他任务改动并交由对应总控统一收口;只有用户当前明确改变本契约时才能调整。 - 发现共享文件与本契约冲突时,保留现有其他任务改动并交由对应总控统一收口;只有用户当前明确改变本契约时才能调整。
+4 -2
View File
@@ -26,10 +26,12 @@
## 参数与门禁 ## 参数与门禁
总控支持AUTO、SELECT、ALL。AUTO保留失败服务重试与直接依赖识别;架构首次切换使用审核后的完整匹配发布清单,不以AUTO遗漏服务。ENVIRONMENT仅test,下游前缀仅baiyue-firstleg-。DEPLOY默认false;IMAGE_REPOSITORY必须替换为已核镜像仓库,DOCKER_BASE_IMAGE由构建节点可访问的Java17镜像提供。不得将凭据拼入参数、URL或日志。 总控支持AUTO、SELECT、ALL。AUTO保留失败服务重试与直接依赖识别;架构首次切换使用审核后的完整匹配发布清单,不以AUTO遗漏服务。ENVIRONMENT仅test,下游前缀仅baiyue-firstleg-。DEPLOY默认false;IMAGE_REPOSITORY首次在各Job参数默认值中配置已核镜像仓库,后续流水线沿用当前Job参数值,不在每次构建后重置为空;总控仍明确向下游传递本次地址。更换仓库才需修改,空值、示例域名与格式校验仍保留,不在源码固定环境地址。DOCKER_BASE_IMAGE由构建节点可访问的Java17镜像提供。不得将凭据拼入参数、URL或日志。
默认执行Maven测试;仅明确选择SKIP_TESTS时跳过执行,仍编译测试源码。总控先统一测试,再向固定commit的单服务任务传递跳过重复执行。发布前还须完成网关路由、部署拓扑、失败回滚和受影响前端合同。离线检查不能证明镜像健康或HTTP闭环。 默认执行Maven测试;仅明确选择SKIP_TESTS时跳过执行,仍编译测试源码。总控先统一测试,再向固定commit的单服务任务传递跳过重复执行。发布前还须完成网关路由、部署拓扑、失败回滚和受影响前端合同。离线检查不能证明镜像健康或HTTP闭环。
总控 `TEST_SCOPE=AUTO` 在单个 Lastleg 的可追踪局部 Java 变更中,按反向类型引用、接口实现、测试夹具和变更写入 SQL 的同表消费者选择测试;公开契约变更追加相关静态合同。基线仅取带有新门禁通过标记、确实测试了目标服务的成功构建;跳过测试、失败、取消或仅测过其他服务的构建均不能作基线。公共模块、共享模型、配置、Schema、未知路径、多服务、其他服务或基线不可用时保持完整模块测试;`TEST_SCOPE=MODULE` 可显式执行完整回归,临时灰度始终保持 MODULE。完整生产和测试源码编译及既有 1GB/单 fork/类隔离不变。定向测试必须逐类取得本轮非零执行报告;真实环境 opt-in 类单独列为未执行,不计为通过,仍由完整模块/专项授权入口负责。此静态筛选不能发现所有运行时耦合,涉及未被 Java/SQL 引用表达的跨业务影响时须选 MODULE。首次发布本次流水线变更需先执行完整模块测试建立新基线。流水线/发布脚本变化仍命中既有 AUTO 全服务规则,首次可使用 SELECT 仅选 Lastleg、TEST_SCOPE=MODULE 建立基线;后续 AUTO 才按关联范围执行。精确耗时以部署后 Jenkins 为准。
同机测试代理的执行器数量固定为1,避免构建与其他重任务挤占业务服务。总控测试和单服务打包还必须共用 `firstleg-test-maven` 跨Job锁,经 `deploy/scripts/run-ci-maven.sh` 执行;仅 `disableConcurrentBuilds()` 不能限制不同Job并发。入口按同一构建账号使用本机flock,控制端掉线后已有任务仍持锁时拒绝再起Maven,不删除锁文件绕过互斥。部署的SOURCE_COMMIT必须包含此入口及 `ci-bounded` POM配置,旧提交缺少防护时应失败,不能回退到裸mvn。 同机测试代理的执行器数量固定为1,避免构建与其他重任务挤占业务服务。总控测试和单服务打包还必须共用 `firstleg-test-maven` 跨Job锁,经 `deploy/scripts/run-ci-maven.sh` 执行;仅 `disableConcurrentBuilds()` 不能限制不同Job并发。入口按同一构建账号使用本机flock,控制端掉线后已有任务仍持锁时拒绝再起Maven,不删除锁文件绕过互斥。部署的SOURCE_COMMIT必须包含此入口及 `ci-bounded` POM配置,旧提交缺少防护时应失败,不能回退到裸mvn。
当前初始预算:Maven堆768MiB、测试堆1GiB、单测试fork,并分别限制元空间和直接内存;Surefire保留JaCoCo,启用父进程心跳检查、停止时kill、fork运行20分钟和退出30秒上限。宿主机GNU timeout提供45分钟期限及30秒强制终止,Jenkins内部另设50分钟上限。预算不是总RSS保证,须在真实Linux节点核对代理内存、memory.events/pressure和完整服务测试峰值;不足时按证据调整,不能重新放开三个Maven并发,也不能仅提高MemoryHigh挤占业务服务。代理服务保持 `KillMode=control-group`、`SendSIGKILL=yes`;代理掉线或构建中止后,先检查该服务cgroup是否仍有构建/测试子进程,确认退出再恢复,不把Job的ABORTED当作进程已清理。 当前初始预算:Maven堆768MiB、测试堆1GiB、单测试fork,并分别限制元空间和直接内存;Surefire保留JaCoCo,启用父进程心跳检查、停止时kill、fork运行20分钟和退出30秒上限。宿主机GNU timeout提供45分钟期限及30秒强制终止,Jenkins内部另设50分钟上限。预算不是总RSS保证,须在真实Linux节点核对代理内存、memory.events/pressure和完整服务测试峰值;不足时按证据调整,不能重新放开三个Maven并发,也不能仅提高MemoryHigh挤占业务服务。代理服务保持 `KillMode=control-group`、`SendSIGKILL=yes`;代理掉线或构建中止后,先检查该服务cgroup是否仍有构建/测试子进程,确认退出再恢复,不把Job的ABORTED当作进程已清理。
@@ -42,7 +44,7 @@
所有服务使用同一Nacos Namespace ID/Group、Redis DB与会话前缀。Auth独占签名私钥;JWKS和内部会话验证共用Auth。EVENT_OPERATIONS_TOKEN独立于内部业务令牌,留空禁用运维操作。现有文件卷和非桥业务MQ保留,topic/group使用test-前缀。 所有服务使用同一Nacos Namespace ID/Group、Redis DB与会话前缀。Auth独占签名私钥;JWKS和内部会话验证共用Auth。EVENT_OPERATIONS_TOKEN独立于内部业务令牌,留空禁用运维操作。现有文件卷和非桥业务MQ保留,topic/group使用test-前缀。
Admin与Client各自Compose项目共接后端网络,发布必须给出CLIENT_WEB_URL/VITE_ADMIN_WEB_ORIGIN;两个PDA保留独立产物及仓绑定。域名、Namespace ID、MQ范围、数据卷和主机容量必须据实际清单核实,不能用模板默认值充当验收。 Admin与Client各自Compose项目共接后端网络,发布必须给出CLIENT_WEB_URL/VITE_ADMIN_WEB_ORIGIN;两个PDA保留独立产物及仓绑定,H5 直接上传宿主机 Nginx 站点,不纳入容器或 Jenkins 镜像发布;执行方式以[部署契约](测试环境单机部署与配置契约.md)的“PDA H5 发布方式”为准。域名、Namespace ID、MQ范围、数据卷和主机容量必须据实际清单核实,不能用模板默认值充当验收。
## 发布与验收 ## 发布与验收
+641
View File
@@ -1,5 +1,527 @@
# 测试环境单机部署与配置契约 # 测试环境单机部署与配置契约
## 2026-10-30 财务与采购、运输 review 修复续批:TEST 已更新
- 用户授权更新测试环境,发布本批已审阅的财务、采购照片整改、费用审核前调整与作废、运输取消及托数展示,并包含客户账单编号详情入口、对账单缓存页迟到响应隔离和部分拣货中文状态三项修复。发布前对齐测试分支新增的异步建单资金状态、异常退回及人工完结;保留两侧修改,补齐采购状态类型,未覆盖其他对话已提交的功能。
- Admin 提交 `7704532e8f2866718572a694af883780d9fab422`,`admin-web-test #738` SUCCESS;Client 提交 `63193d04deb6d739859383a52bc367ac86877889`,`client-web-test #459` SUCCESS;Lastleg、Finance 固定提交 `035e7e06af1f8c0ece3c0404085227da6addf8ad`,分别为 `baiyue-firstleg-lastleg-service #449`、`baiyue-firstleg-finance #146` SUCCESS。实际运行标签与对应提交前 12 位一致。Firstleg 及两个 PDA 无本批待发布修改,未重复发布。
- 用户单独授权执行 [对账单明细索引脚本](../baiyue-firstleg/deploy/sql/finance-reconciliation-line-uniqueness-repair.sql),SHA-256 为 `45887a1260404da7a86c9f78099fc8b5cdbf48e703c4d3db6b4e726cd58e52cd`。以一条原子 ALTER 将 `fin_bill_line` 的费用来源全历史唯一键改为单内唯一键,并补费用来源普通索引;原有 69 条明细的逐行摘要、字段及其他索引均保持一致,没有修改金额、回填或删除数据。
- 合并后的 Admin 234 项、Client 49 项及后端 154 项定向检查通过;输入未变的三项修复回归 62 项和其余财务定向结果复用。旧预算用例仍按同步建单假设断言跨客户提交失败,修正为验证相同请求键不能读取其他客户原单后复测通过,未放宽生产隔离。发布合同 17 项通过,新异常入口再次通过路由合同 5 项;Mapper 扫描核对 10 个持久化模块、432 个 Mapper。前端流水线类型检查与构建通过,后端复用已通过的定向验证,保留生产和测试源码编译、打包及健康检查。
- 最终只有 Admin、Client、Lastleg、Finance 四个应用镜像变化,15 个在用应用均 running/healthy;全部已记录容器的环境变量与挂载摘要不变,三个历史暂停服务保持原状。两前端临时 SCM 固定已逐字恢复原配置;未修改 Gateway、Nacos 或其他环境。
- 202 个 Admin/Client 公网首页及相关资源摘要与运行容器一致,确认账单编号链接和部分拣货文案进入产物。28 项真实 HTTP 检查全部通过,覆盖对账单列表与详情、费用来源、应收统计、应收应付结算、海外费用资格、采购、卡车、出库、异常及既有履约查询,并完成独立会话登录和退出。未进行业务写入回归,页面视觉及完整作业流程待人工验收。证据保存在本机私有临时目录 `codex-test-fix-release-20261030-01c45f16`。
## 2026-10-30 本批 review 修复及已完成修改:TEST 已更新
- 用户授权发布当前已完成代码,本批包括 Admin 采购审核仓库查询竞态、装柜及派送资料展示,Client 企业编辑与采购重试,海外 PDA 作业列表、待办和废弃扫码,以及 Lastleg 废弃预留重放、实际箱唛保存与预算到期判断。预算到期查询改为传入 UTC 截止时间,避免数据库会话时区导致刚创建的预留提前释放;未改变接口或追加数据库字段。
- Admin 固定提交 `4abd6ffd5d3af5d7d9604e36062a301a2731162f`,`admin-web-test #736` SUCCESS;Client 固定提交 `55868177cdc397cd69043adf1ec9fa7e1f32c5e0`,`client-web-test #457` SUCCESS。Firstleg、Lastleg 固定提交 `872215367b07b0e7af5674721df54dea0220cdd8`,分别为 `baiyue-firstleg-firstleg #528`、`baiyue-firstleg-lastleg-service #447` SUCCESS。实际运行标签均与对应提交前 12 位一致。Finance 保持本批开始时的 `e1bfcfc8f529`,无受影响源码,不重复发布。
- 用户单独授权执行 `discard-actual-carton-marks.sql`,仅为 `baiyue_lastleg.ll_cargo_discard_item` 新增可空 JSON 列 `actual_carton_marks_json`;SQL SHA-256 为 `d6208091cb8d0e78b9705768a62ec0c29056b0840dd2205025d68a53620f5202`。执行后字段已就绪,原有 9 条记录及索引保持一致,未回填或删除数据。其他依赖表与字段只读核对已存在,未执行额外 SQL。
- 海外 PDA H5 固定提交 `fadef061919add3c341d03c6b7d7ea883b0f15f3`,按既有宿主机 Nginx 静态托管方式备份并更新。服务器及公网 88 个文件摘要均与产物一致,整体 SHA-256 为 `c857b2bac5d0d65a29b254f8c9ff987078b147993306dfedddee6c2bc22d8e6b`;站点配置摘要不变,同源 Auth 登录、退出两项检查通过。国内 PDA 未发布,海外 PDA 未发布应用容器、APK 或 WGT。
- 定向验证通过:Admin 241 项、后端 85 项、海外 PDA 87 项及 H5 部署合同 4 项、部署合同 17 项、指引索引合同 1,637 项;Client 复用输入未变的 43 项采购定向回归。前端 Jenkins 类型检查与生产构建通过,后端流水线复用上述定向验证,完成生产及测试源码编译、打包和健康检查;不外推为整项目测试通过。
- 最终仅 Admin、Client、Firstleg、Lastleg 四个应用镜像变化,15 个在用应用均 running/healthy,全部已记录容器的环境变量和挂载摘要不变,三个历史暂停服务保持原状。Admin、Client 的 Jenkins 临时 SCM 固定已逐字恢复原配置;首次轻量检出固定提交失败的两次任务未进入部署,改为完整检出后上述发布成功。未修改 Gateway、Nacos 或其他环境。
- 196 个 Admin/Client 公网首页及相关资源摘要与运行容器一致;16 项 HTTP 检查通过,覆盖货柜、节点、船期、排车、尾程、统一订单、装柜关联、采购与废弃查询,并完成独立会话登录、退出。未执行业务写入回归;页面视觉、带仓身份的 PDA 操作和真机扫码待人工验收。执行证据保存在本机私有临时目录 `codex-test-release-20261030-e5f50c3a`,包括固定源码、定向验证、SQL 回执、构建结果、配置恢复、资源摘要及最终核对。
## 2026-10-28 海外 PDA 托盘校验竞态:TEST H5 已更新
- 用户授权部署本轮托盘校验修复,海外 PDA 固定提交 `a74f0a1e36f3c67c0dbbe4b039b5a3ba83a8d305`。托盘输入、入仓单、柜会话、作业账号/仓或页面生命周期变化后,旧校验的成功与失败响应均被丢弃;重新校验当前托盘后才能提交实收。已发送实收的服务端结果仍沿原流程确认。
- 按现行宿主机 Nginx 静态托管方式更新海外 PDA TEST H5:核对实际生效站点及 `nginx -T`,备份将覆盖的文件,先上传资源、最后原子替换首页;保留既有站点配置、证书目录和旧资源。服务器及公网 83 个文件摘要均与本次产物一致,产物整体 SHA-256 为 `5fc1c9ccb8f9be75fd1779f31236d794962938c3e9f397205a912b082da63361`。
- 37 项收货定向测试、4 项 H5 部署合同、H5 构建及产物校验通过;同源 Auth 代理独立登录和退出两项检查通过。Nginx 配置摘要不变,15 个在用应用容器均 healthy,所有既有容器的镜像、环境变量、挂载和运行状态保持一致。本批未执行 SQL、发布 PDA 容器或 APK/WGT;带仓身份的真实收货及 Android 扫码硬件仍待人工验收。
- 执行证据位于本机私有临时目录 `codex-pda-test-release-20261028-2c73e245`,包含固定源码及产物摘要、站点前后核对、覆盖文件备份摘要、公网逐文件校验和最终结果。
## 2026-10-28 履约状态与船节点署名:TEST 已生效
- 用户授权发布本批已 review 的修改及 PDA 状态修复。发布前已快进合入远端提交并保留全部工作区编辑;Client 同步包含已提交的统一换标明细模板与运输字段文案。Admin 整理装柜详情重复内容、照片类型、尾程筛选偏好及排车资料入口,订单详情补齐 `UNASSIGNED/PROCESSING/COMPLETION_FAILED` 中文状态;船节点日志使用操作时保存的用户名快照。
- Admin 提交 `d990637b387291a6b692fcb1514355f5aa10cfe6`,`admin-web-test #730` SUCCESS,运行标签 `d990637b3872`;Client 提交 `fdf646227eed741b1867d9cfe5c73d51c0e8c0e0`,`client-web-test #448` SUCCESS,运行标签 `fdf646227eed`;Firstleg 提交 `353c86f4cfbdb7526d6b231c3155b5c32e3448f3`,`baiyue-firstleg-firstleg #527` SUCCESS,运行标签 `353c86f4cfbd`。其他服务及两个 PDA 未重复发布,Lastleg 保持本轮开始时已部署的 `71a1026e21c2`。
- 用户单独授权后,以一次原子 ALTER 为 `baiyue_firstleg.fl_carrier_schedule_node_fact` 新增可空 `operator_id BIGINT UNSIGNED`、`operator_name VARCHAR(128)`;SQL SHA-256 为 `239bc75241aa4f61de782c52e7591cbf3ecc18e4d0876dee7b99245a70fac08c`。执行前后原有节点字段的逐行摘要、记录数及索引摘要一致,未回填历史节点。结构定义与 Firstleg 模块基线、国内统一空库基线一致。
- 定向自动检查通过:Admin 354 项(本次状态及详情 48 项,输入未变的其他 306 项复用 review 结果)、Client 91 项、Firstleg 54 项及部署静态合同 20 项。后端流水线复用已通过的定向测试并编译测试源码,前端流水线类型检查及构建通过;这些结果不代表完整模块或真实业务写入回归。
- 最终 15 个在用应用容器全部 healthy,仅上述三个应用镜像变化,环境变量、挂载及既有暂停容器状态保持一致。177 个 Admin/Client 公网首页及相关静态资源摘要与运行容器一致,PDA 状态和节点署名代码已进入产物;11 项只读 HTTP 检查通过,覆盖货柜列表/详情、节点事实、船期任务、排车、尾程订单及装柜/PDA 关联,并完成独立登录与退出。复用原 API 路由,节点事实响应新增 `operatorName`,本批未修改 Gateway 或 Nacos。页面视觉及真实补录、确认出仓的写入效果待人工验收;执行证据位于本机私有临时目录 `codex-test-release-20261028-review-5ae0ec39`。
## 2026-10-28 采购出库费用提示与费用重试列:TEST 已生效
- 用户要求继续更新新提交,本批按已提交版本核对。检查开始时,Admin 业务提交 `4581130b62058880554f310ecb30d9f8d7042ed1`(`admin-web-test #727`)和 Lastleg `f3d57869f2f80b52912ff355218c000be57becb4`(`baiyue-firstleg-lastleg-service #441`)已部署成功并 healthy,直接复用既有发布结果。采购创建出库不再以费用缺失或未审核作为门禁;费用查询只提供提示,原采购状态、数量、跟踪号、客户隔离、权限及幂等校验继续执行。
- 补充检查修正一处测试夹具默认值,由 `undefined` 改为新接口允许的 `null`,仅提交该测试文件。Admin 最终提交 `4fdba0fb5d47f2917703880ec7cd6865ae297db9`,`admin-web-test #728` SUCCESS,实际镜像标签 `4fdba0fb5d47`;采购业务源码与 `4581130b` 相同。Lastleg 实际标签保持 `f3d57869f2f8`,未重复发布。
- 已只读核对 [V35 费用重试列修复](../baiyue-firstleg/deploy/sql/migrations/overseas/baiyue_lastleg/V35__widen_finance_fee_command_action.sql) 的运行条件,脚本 SHA-256 为 `2e15dcc4e63b9ccc35d17197c6e41f0baaa75fb7f92f761dd55f58b393bdc57e`:`baiyue_lastleg.ll_finance_fee_command.action` 已为 `VARCHAR(32) NOT NULL`,`uk_ll_finance_fee_command` 仍按 `operator_id/action/idempotency_key` 唯一。本轮未执行 SQL,也未进行真实费用资金重试或余额操作。
- 前端 7 项、后端 7 项定向测试通过,包含采购出库可选费用提示、费用幂等动作扩列及原唯一约束;相关前端生产和测试源码类型检查通过。Jenkins 前端构建通过,不以本批定向检查代表完整模块回归。
- 最终 15 个在用应用容器均 healthy,相对本轮开始时仅 Admin 测试修正提交的镜像变化;环境变量及挂载保持一致,Client、其他服务及既有暂停容器保持原状。6 项只读 HTTP 检查通过,覆盖采购列表、详情、出库工作流、本单费用及独立登录/退出;86 个 Admin 公网首页及相关资源摘要与运行容器一致,采购费用提示代码已进入产物。
- 排车列表、Client 计费界面及排车业务文档的 7 处原有未提交编辑保留,不混入本批。未新建采购出库或执行真实资金重试,页面及写入业务效果仍待人工验收。执行证据保存在本机私有临时目录 `codex-test-release-20261028-next-36c8286c`。
## 2026-10-28 预约修复与客户工作台续批:已发布 TEST
- 用户授权发布当前全部修改,合并远端已发布的排车操作与客户海外仓界面修复后,提交并发布当前工作区的预约确认、原货件资料带入、无确认时间排车、测量体积显示、派送资料及公共筛选调整;Client 同步订单列配置持久化、最新计费量展示和报关资料弹框调整。两个 PDA 无新增源码修改,本批未重复发布。
- Admin 提交 `39b9a6a1a0b5ac89acd05544e1cc2226d0e30d07`,`admin-web-test #726` SUCCESS,实际镜像标签 `39b9a6a1a0b5`;Client 提交 `c187544a94aa90681a515f777af4be668d9383c7`,`client-web-test #446` SUCCESS,实际标签 `c187544a94aa`。Lastleg 提交 `4f2d90b490f355b3f575bf0aedf000e5f2a5b3b2`,总控 `backend-java #725`、单服务 `baiyue-firstleg-lastleg-service #440` SUCCESS,实际标签 `4f2d90b490f3`。
- 用户单独授权执行 [费用菜单归属修复 SQL](../baiyue-firstleg/deploy/sql/overseas-fee-menu-finance-parent-repair.sql),SHA-256 `5229d0e3b7174214c9697b20c5d9a15ac89a9352c811399b42129709c34395f4`。仅在 `baiyue_iam` 将海外费用菜单更名并归到财务管理,按脚本刷新相关授权版本;权限接口及数据库只读查询确认全部后置条件,临时过程已移除。首次执行后的回执校验误按整数判断 JSON 布尔值,随后仅修正校验并只读复核,未重复执行 SQL。
- 本批 Admin 336 项定向回归通过,另复用输入未变的 36 项;Client 63 项通过,复用此前 14 项;Lastleg 共 111 项相关测试通过,其中 57 项结果在输入未变时复用。Admin 相关生产及测试源码类型检查通过,两个 Web 的 Jenkins 构建通过;后端 Jenkins 明确复用已完成定向结果并跳过重复测试执行,仍完成生产/测试源码编译及打包,不将此记为全模块回归。预约原生弹框测试已同步正式确认及原货件接口;到仓修改沿用现行简化流程,未恢复旧的失败后锁定行为。
- 最终仅 Admin、Client、Lastleg 三个镜像变化,15 个在用应用容器均 running/healthy,环境变量及挂载摘要不变;既有暂停容器保持原状。未修改 Jenkins Job 配置、Nacos 或其他环境,未清库或删除业务记录。
- 最终 13 项 HTTP 检查通过,包含预约货物及有效货件资料契约、费用菜单归属、采购工作流、财务及订单读取、独立登录与退出;两个 Web 公网共 191 个首页及相关资源摘要与运行容器一致(Admin 84、Client 107),订单列配置持久化及状态列元数据已进入产物。未在共享测试环境新建业务数据验证实排车或采用资料写入,页面效果与完整业务闭环仍待人工验收。
- 执行与核验记录保存在本机私有临时目录 `codex-test-release-20261028-all-ffd3416f`,包含各仓库版本、定向测试报告、Jenkins 状态、SQL 回执、容器及公网资源摘要和最终 HTTP 结果,不含凭据。
## 2026-10-28 Admin 统一布局与已完成续项:已发布 TEST
- 用户授权提交当前工作区及其他对话已完成的修改并更新 TEST,随后明确本批只发布已完成修改;仍在开发的预约资料读取和预约时间修复保留在工作区,未提交、未发布。本批包含状态列位置及个人列序恢复、详情全宽与间距、计费预览和外箱快照、测量体积显示、排车 BOL 直接操作及作业界面文案调整。
- Admin 最终提交 `6f8dc920ca917c55bd80a49750549f62a50fcc4d`,`admin-web-test #724` SUCCESS,实际镜像标签 `6f8dc920ca91`;此前首批 `#723` 已发布 `e41e9e6d3fbd6a1f6948e415dc3e3cfc262c0a3e`。Firstleg 最终提交 `ca61f79b6d68c1cbabb6077f28266ed33da443ac`,总控 `backend-java #724`、单服务 `baiyue-firstleg-firstleg #526` SUCCESS,实际标签 `ca61f79b6d68`。Lastleg 提交 `b2e4f0d246a889331d18cac8d6ec827099df9943`,总控 `#723`、单服务 `baiyue-firstleg-lastleg-service #438` SUCCESS,实际标签 `b2e4f0d246a8`。
- 发布前只读烟测发现 TEST 缺少采购新流程表,收发货查询返回 S0500。用户单独授权后,仅执行 [采购流程建表脚本](../baiyue-firstleg/deploy/sql/overseas-procurement-workflow.sql),SHA-256 `c99c915f9a2369cb45e4e6ee5bf7fbea7a8cef19afbc0ea008045aed5339cf32`;三表执行前均不存在,执行后 `ll_procurement_workflow_receipt`、`ll_procurement_workflow_outbound`、`ll_procurement_workflow_command` 均为空,字段、中文备注及主键/索引已核对。未执行旧表退役或测试数据重置脚本,未回填数据。
- 前端最后一轮 378 项定向回归通过,含 79 项样式合同;其他批次公共表格及相关模块验证结果复用,Admin 类型检查和生产构建通过。Firstleg 续项 73 项、Lastleg 当前采购与费用边界 54 项定向测试通过;架构检查 15 项、Gateway 路由 5 项和 Mapper 扫描通过。初次总控 `#721` 因照片端口、车次模型的静态断言未同步而失败,精确修正后复验通过。
- 总控 `#722` 中 Firstleg 完整模块已完成 1,853 项报告,其中 9 项按既有条件跳过;Lastleg 完整回归未完成,任务因与已验证变更范围重复而主动终止,确认 Maven 锁释放。后续 `#723`、`#724` 明确复用对应源码的已完成验证并跳过重复测试执行,仍完成生产/测试源码编译、打包及部署健康检查;不将 `#722` 或 Lastleg 全模块记为通过。
- 最终逐项比对仅 Admin、Firstleg、Lastleg 三个应用镜像变化,15 个在用应用容器均 running/healthy;全部已记录容器的环境变量和挂载摘要不变,历史暂停容器保持原状。Client、两个 PDA 无本批已完成源码差异,未重复发布;未更改 Jenkins Job 配置、Nacos 或生产/灰度环境。
- 发布后 76 个首页和相关脚本/样式资源 HTTP 内容摘要与运行容器一致,已确认公共 DataTable、异常订单、应收/应付结算页的状态跟随编号元数据实际进入线上脚本。最终 10 项 HTTP 检查全部通过,覆盖异常订单、客户回访、采购列表/详情/工作流、本土卡车、统一订单、应收结算单及独立会话登录/退出;采购收发货查询已恢复。未造业务数据,未进行实际计费、收发货或人工页面截图验收。
- 文档索引合同仍有 5 项既有断言缺失,未计入通过项;预约修复及页面人工验收不在本批完成范围。执行和核验记录保存在本机私有临时目录 `codex-test-release-20261028-46819379`,包括 SQL 回执、各轮 Jenkins 日志/结果、测试报告、容器摘要及最终 HTTP 结果,不含凭据。
## 2026-10-27 船期日历顺延与订柜建议:已发布 TEST
- 用户授权部署本轮已提交的船期日历修改。Firstleg 最终提交 `57cd211973a87176a902eafdc6c68b4b501acb58`,`baiyue-firstleg-firstleg #523` SUCCESS;Admin 提交 `3464f35a010582fd7f86807d4db3b01c82dd6cb6`,`admin-web-test #721` SUCCESS。实际镜像标签分别为 `57cd211973a8`、`3464f35a0105`,均 running/healthy;发布前后仅这两个应用容器变化,环境变量及挂载摘要未变,Admin 临时 SCM 固定已逐字恢复。
- 首次 Firstleg `#522` 容器健康,但真实 11 月月历查询发现跨表排序规则冲突(MySQL 1267)。已在 Mapper 中按字段完整长度统一文本比较,保留完整渠道、港口、船名和航次匹配;修复后 48 项后端定向测试通过,再发布 `#523`。另有 28 项发布静态合同通过;复用 Admin 27 项业务测试,Jenkins 类型检查及生产构建通过。
- 发布后 12 次只读业务 HTTP 检查均成功,覆盖历史月、当前月、下月、四个有效船期的货量汇总和订柜建议,以及原货物渠道筛选。10 月五个过去船期已从月历隐藏,11 月四个船期正常返回,并提供下一刷新时间。Admin 健康入口、船期页面及船期脚本均返回 200,页面和脚本摘要与运行容器一致;独立验收会话已退出。
- 原截图船期 `SL202610210001` 的渠道为 `EXX_RAIL_NY`;首次发布时 11 月四个船期均属于另一渠道,同仓同渠道筛选为空。随后用户授权真实 HTTP 验收,按该仓库、渠道创建五个带 TEST 标记的临时船期;验收时实际未发货量为 123.986 m³,40GP/40HQ/45HQ 分别建议及待补 3/2/2 柜。等待真实截仓时间后,前班体积归零、下个月承接全部 123.986 m³、后续班为零;再取消承接班,体积完整进入下一班,没有重复统计。顺延仅改变只读货量投影,没有迁移正式订舱或排柜归属。
- 本轮专项正式执行 46 次 HTTP 请求、29 项断言全部通过,另有 6 次只读预检请求;覆盖过去船期隐藏、今天保留、三柜型向上取整、跨月筛选的刷新边界、真实截仓与取消顺延、未登录/不存在船期/陈旧版本拒绝,以及原业务船期及其历史不变。五个临时船期 `SL202610270001` 至 `SL202610270005` 全部取消并保留审计,未留下开放验收计划,独立会话已退出;因此该渠道仍需业务人员配置正式后续船期。没有在真实环境操作已订容量、离仓或撤销离仓,相关边界仍以定向测试为证,人工页面验收待完成。
- 部署阶段未造业务数据,后续验收只创建、编辑拒绝探测和取消自有临时船期;未执行业务 SQL、修改 Nacos、改动货物/订舱/排柜或发布其他服务,验收前后两应用容器版本及健康保持不变。部署证据在本机私有临时目录 `codex-sailing-release-20261027-iZrD1t`;HTTP 专项证据在 `codex-sailing-http-20261027-raL6DD` 的 `preflight.json`、`execute.json` 和 `summary.json`,含逐请求诊断及写入前检查点,不含凭据。
## PDA H5 发布方式(2026-10-23 当前约束)
- 国内、海外 PDA H5 在 TEST 与既有灰度统一采用宿主机 Nginx/宝塔站点直接托管构建产物。两端独立根目录,`location /` 读取上传的静态文件;`/gateway-api/` 独立转发当前环境统一 Gateway `/api/`。PDA H5 不再作为容器发布单元,不构建、恢复或发布旧 H5 镜像/Compose 服务;Admin、Client 与后端发布方式不受本条影响。
- 两端产物路径和操作步骤分别见 `apps/pda-uniapp/README.md`、`apps/pda-overseas-uniapp/README.md`;站点配置以实际 `nginx -T` 展开的文件为准,保留 HTTPS、证书及面板 include。先上传资源,再替换首页,核对线上响应与构建产物摘要;首页健康不替代 API 和页面验收。
- 用户本轮已删除灰度旧 PDA 容器,并按本轮提供的命令把两站点页面代理改回静态文件;用户回传国内、海外域名首页均 HTTP 200,并确认恢复。该结果不外推 TEST 容器清理、其他代理节点或完整业务验证;本轮未远程执行其他环境删除或发布。
- 2026-09-29 起的 TEST H5 容器方案、2026-10-07 灰度容器/端口转发及后续镜像更新记录仅证明当时部署事实,已被本节发布方式取代。历史 `reports/gray-release-20261007/`、`reports/three-module-gray-20261012/` 等脚本与报告只用于追溯,不得重跑以恢复 PDA 容器或覆盖站点路由。
## 2026-10-26 排车档案照片与装车多图:已发布 TEST 并完成定向验证
- 用户确认执行照片表 SQL 并发布 TEST。后端 PR #38 合入 `test`,固定发布提交 `be9f5d2a30e4d7441f72ac3e0ac1e32cfd377e1a`;Admin PR #30、海外 PDA PR #10 合入 `release/test`,分别固定为 `04b099249e710f4c9ff5665a35cbfed8e3eeba66`、`3934ad57f89fed68bdff6e792d11f2af46d9db87`。保留测试分支既有费用、仓租和采购改动,解决 SQL 基线与业务索引冲突,统一初始化建表数为 240;未重放初始化。
- 唯一数据库写入为 `deploy/sql/lastleg-fleet-resource-photos.sql`,SHA-256 `9721e33dc1d9c38c4c7c88fc435466f1bd547bb650af64fcb3106af4c1201c16`。执行前确认目标表不存在,执行后核对 `baiyue_lastleg.ll_fleet_resource_photo` 的 9 个字段及空表状态;仅新增照片版本表,未回填或删除业务记录。
- File `#159`、Lastleg `#433`、Admin `#715` 均 SUCCESS,耗时分别 66.811、106.009、61.291 秒。后端明确检出固定提交并复用已通过定向门禁,跳过重复测试执行但保留生产/测试源码编译、打包和健康检查;Admin 类型检查、生产构建和发布通过。Admin 临时 SCM pin 已恢复并逐字核对原配置。实际后端镜像 tag 为 `be9f5d2a30e4`,Admin 为 `04b099249e71`;只有这三个容器镜像变化,15 个在用应用容器均 healthy,所有已记录容器的环境变量及挂载摘要保持不变,未处理历史退役容器。
- 海外 PDA H5 在核对实际生效的宿主机 Nginx 站点及 `nginx -T` 成功后,先备份覆盖文件,再上传资源、最后替换首页。服务器及公网 83 个文件 SHA-256 均与本批构建一致;没有发布 PDA 容器、APK 或 WGT。Admin 公网首页与运行容器摘要一致,61 个首页引用资源均 HTTP 200。
- 真实 HTTP 使用专属 TEST 合成车辆、司机和图片验证两类档案上传、版本冲突拒绝、当前与历史图片下载,以及新建排车自动复制两类档案照片。替换档案后,原排车的文件引用和图片内容保持不变。23 项照片及样本收尾检查通过,随后 13 项只读复核及线上资源检查通过;另读取已有有效装车单资料成功。合成空排车 `PC202610260001` 已按正式接口取消,车辆和司机已停用,独立会话已退出;无货物、库存或费用操作,合成档案、图片和审计记录保留。
- 两次验收脚本假设已纠正并保留原失败记录:空照片字段会由 JSON 序列化省略;未进入装车阶段的空草稿必须返回 A0409。前者沿同一组已创建资源继续验证,未重复造主档;后者按正式阶段门禁核对,未绕过状态推进。未因此修改生产代码或再次部署。
- 合并门禁为后端 117 项定向用例、Admin 104 项业务用例、PDA 4 项部署合同,以及 23 项部署拓扑/恢复合同;Admin 与 H5 构建通过。后端照片表测试截取范围、Admin 入库详情组件隔离问题已在测试分支修复并复测。Admin 样式合同仍有 4 项测试分支既有失败,未宣称全量回归通过。每类五张的完整现场上传/替换、装车至签收全链、人工页面及 PDA 真机相机验收仍待完成。
- 本轮不发布生产或灰度,不改 Nacos/Gateway 配置。证据保存在本机私有 `artifacts/chongchong-global/fleet-photo-test-20261026/`,包括 SQL 回执、Jenkins 日志/状态、配置恢复核对、静态文件摘要及 HTTP 报告;凭据未进入仓库或报告。
### 同日 PC/PDA 同步修复续批:已更新 TEST,真实 HTTP 91 项通过
- 最新 Lastleg `#436`、File `#160`、Admin `#716` 均 SUCCESS,实际镜像分别为 `00616d593001`、`3e0d8d6c8849`、`0137fd3a4c8c`,三个容器均 healthy;与续批发布前相比仅这三个容器镜像变化,环境变量及挂载摘要未变。Admin 临时 SCM pin 已恢复。海外 PDA H5 基于 `105c7825b49f5558ed4b5f83ae161a0762ceecfc` 加工作区已有扫码提示改动构建,两个未提交文件的摘要单独记录;服务器及公网 83 个产物摘要均一致,未发布 APK/WGT。
- 合成测试排车 `PC202610260002` 沿同一业务链分阶段续跑,累计 **91/91 项 HTTP 检查通过**,补齐上批待验的每类五张上传/替换与自动发车。五类统一为司机驾驶证、车牌照片、装车完成、封车照片、BOL 司机签字;档案图片及 PDF 驾驶证自动复制至前两类,改车/司机后旧资料失效、重审带出新档案,旧轮上传和旧待绑定文件被拒绝。PC/PDA 交替填满每类五张、拒绝第六张、满额替换及幂等重放均通过,两端 25 份文件引用和下载字节一致。
- 两张原生转运入库单完成仓租预校验、真实 HTTP 拣货及装车确认,自动生成唯一出库单和派送单,最终 DELIVERING、出库两箱;不足量装车被拒绝,拣货/装车重放未重复扣库存或生成单据。临时海外 PDA 账号已停用、验收会话退出,合成单据和资料保留。本续批未执行 SQL、重置数据、修改既有 PDA 身份或操作生产/灰度。
- 真实 HTTP 先发现 File 尚未同步 PDF 资料策略,补发 File 后照片检查通过;随后发现仓租把转运尾程单 ID 当作库存入库单 ID,已改为核对转运单真实入库关联,保留错单和缺失关联拒绝。该修复 8 项定向测试通过;本批 File 13 项、照片后端 24 项、Admin 14 项和 PDA 61 项受影响测试及相应类型/构建检查通过。Lastleg `#434` 误启的冗余全模块测试已主动终止并确认进程退出;后续发布复用定向结果,不宣称全模块回归通过。
- 续批证据位于本机私有 `artifacts/chongchong-global/dispatch-loading-test-20261026-r2/`,最终为 `http-final/report.json` 与 `final-verification.json`;各阶段失败、修复、部署及续跑记录保留。这里只覆盖至自动发车,不替代签收链、人工截图或 Android 相机/扫码硬件验收。
### 2026-10-27 装车资料单列布局:已发布 TEST
- 用户确认发布 PC 装车资料布局调整。Admin `release/test` 提交 `4595dfef3475fccd76669338a27d91804dc14bde` 已推送,`admin-web-test #717` SUCCESS(60.496 秒),实际容器镜像 `4595dfef3475` 且 healthy。五类资料改为单列分区,每张资料的预览、保存时间及更换操作逐行对应,不再展示文件名;时间格式统一到秒。上传、自动带出及权限逻辑未变。
- 复用输入未变的 14 项组件回归与定向模板类型检查;Jenkins 类型检查、构建及发布通过。公网首页及 63 个相关资源与容器内产物摘要一致,已验证单列组件及时间格式代码。仅 Admin 镜像变化,容器环境变量及挂载摘要不变,Jenkins 临时 SCM pin 已恢复;未发布后端/PDA 或执行 SQL。
- 本批发布与资源验证不代替修改后人工视觉验收。证据保存在本机私有 `artifacts/chongchong-global/dispatch-loading-layout-release-20261027/`,含构建状态、配置恢复、前后运行版本、`public-verification.json` 与 `final-verification.json`。
### 2026-10-27 维护车辆附件上传:已发布 TEST
- 用户确认本批部署测试。Admin `release/test` 提交 `392f94e95cc0119c6f5cd934336f31849bd63942` 已推送,`admin-web-test #718` SUCCESS(58.648 秒),实际镜像 `392f94e95cc0` 且 healthy。三个附件上传按钮不再因未选车辆或司机而置灰,删除新增的操作说明;保存时拒绝将已有附件引用随空资源静默丢弃。既有权限、作业状态及上传中的禁用规则保留。
- 82 项定向测试通过,覆盖三类附件、档案及临时外配资源保存后重新打开和再次保存;Jenkins 构建与部署成功。公网首页及 62 个相关资源与容器内产物摘要一致,已核对保存校验存在且已删除的提示文案不在产物中。仅 Admin 镜像变化,环境变量和挂载摘要未变,Jenkins 临时 SCM pin 已恢复;本批未发布后端/PDA 或执行 SQL。
- 本批未执行新的业务写入或人工页面验收,不将静态资源验证视为实际上传闭环。发布证据保存于本机私有 `artifacts/chongchong-global/dispatch-evidence-upload-release-20261027/`。
## 2026-10-27 财务接收与三项读取修复:已发布 TEST 并只读复核
- 用户明确授权部署 Finance 与 Admin。后端 `test` 固定提交 `83f2fda4cd2a432c7516018f6ce3b1b05eb1d2d7`、Admin `release/test` 固定提交 `b9b930936d2db7acaa3c9c12eeacb1f7ceb522bb` 已推送;本批包含此前费用接收幂等、客户归属及金额校验修复,以及应付来源付款进度、对账单修订后金额和客户名称读取修复。
- `baiyue-firstleg-finance #140`、`admin-web-test #719` 均 SUCCESS,耗时分别 73.007、58.845 秒;实际镜像标签分别为 `83f2fda4cd2a`、`b9b930936d2d`,两容器 running/healthy。发布前后只有 Finance、Admin 镜像变化,历史退役事件桥保持原状。Admin 临时 SCM pin 已逐字核对并恢复。
- 复用输入未变的三项修复 92 项后端定向测试、此前费用接收 40 项定向结果,以及 Admin 27 项测试和类型检查;补跑 22 项发布合同全部通过。Finance 流水线显式跳过重复测试执行,仍完成生产/测试源码编译与打包;Admin 类型检查、生产构建及容器健康检查通过,不宣称全模块回归通过。
- 发布后通过真实 HTTP 只读核对 24 张对账单、24 张应收单、9 张应付单及 24 笔收款。26 条已付款应付来源在列表、筛选及详情均为 PAID,并从可选应付费用池排除;剩余 175 条可结算应付合计 CNY 707.00。24 张对账单的 144 条修订金额正确,8 次调账均保留 CNY 0.03 差额;对账单、应收/应付及统计的客户名称与账户主档一致,不再显示内部编号拼接名称。首轮只读核验时 PAYABLE_BILLED、PARTIALLY_PAID 无实存样本,后续真实 HTTP 已补齐这两个中间状态,见下文。
- 既有账单应收 CNY 34,343.92、已收 1,936.24、未收 32,407.68,正式应付 CNY 3,040.03 均已付,金额、版本及状态与修复前快照一致。本次发布后首轮快照为 755 条最新费用,较此前快照多 1 条头程应收 CNY 8,379.37;原有 754 条费用金额、归属和版本均未变化,仅上述 26 条应付读取状态变化。本次未新建、修改或推进任何业务单据,也未执行 SQL、重置数据或改动 Nacos/Gateway 配置。
- Admin 公网首页、运行配置、入口脚本及财务来源页面脚本均 HTTP 200,SHA-256 与运行容器一致,实际产物包含新增付款状态和文案。该核验不替代 1920×1080、100% 缩放人工页面验收。证据保存在本机私有临时目录 `codex-finance-release-20261027`,包括提交及门禁输入摘要、Jenkins 状态与脱敏日志、配置恢复、运行版本、只读数据核验及 `public-assets-final.json`。
### 同日应付来源中间状态补验:四阶段真实 HTTP 已通过
- 用户确认继续 TEST 应付状态衔接验收。沿用本对话原生合成转运单与启用的测试供应商,经海外费用正式入口新增并审核一笔 CNY 0.03 的 ON_ACCOUNT 应付费用,再生成 `AP202610270001`,先登记 0.01 元、再登记 0.02 元,最终 PAID。付款参考、备注及本轮上传凭证均标明合成测试,未发生银行或第三方转账。
- 37 项业务断言、63 次 HTTP 请求检查全部通过,包括预期拒绝;AVAILABLE → PAYABLE_BILLED → PARTIALLY_PAID → PAID 四阶段的来源列表、详情、状态筛选、待选池资格及账户成本汇总一致,应付单列表与详情、付款流水一致。创建/付款重放保持同一记录;重复占用费用、超额付款、旧版本付款、同键改金额及结清后继续付款均被拒绝,最终只有两条付款流水。
- 原有 24 张应收单、9 张应付单金额、状态和版本不变,原有 175 条待结算应付仍为 CNY 707.00。测试客户总成本、已付成本仅各增加 0.03 元,实际余额、冻结及可用金额不变。仅新增上述测试费用、应付单、两笔付款记录和合成凭证,未改源码、部署、执行 SQL 或清理数据;本轮会话已退出,样本保留。证据为本机私有临时目录 `codex-finance-ap-progress-20261027/progress.json`;四阶段 API 核验不替代人工页面验收。
### 2026-10-27 费用调整、作废与重开续检:Finance 已发布,AP/AR 本轮场景通过
- 用户明确授权部署 TEST Finance 并继续检查。后端 `test` 提交 `fe89b8a2b875d6634b0d7f2b28793b73c02bb4b6` 经 `baiyue-firstleg-finance #141` 发布成功,耗时 65.420 秒;重开重新锁定原费用/对账单,校验当前状态、客户、币种、金额及唯一占用,应付另校验供应商,应收逐行核对账单金额。新建与重开共用当前占用读取,避免等待来源锁后使用旧快照。修复前已复现重复占用缺口,修复后 52 项定向测试及 429 个 Mapper 注册合同通过。
- AP 真实 HTTP 验证:独立 ON_ACCOUNT 测试费用从 0.03 调整至 0.04、再调整至 0.05 元,审核前旧版本保持有效,审核后旧版本 SUPERSEDED,仅最新版本计成本。`AP202610270002` 合法作废/重开及幂等重放成功;费用被 `AP202610270003` 占用或被新版替代后,旧单重开均返回 FIN_409,金额、版本和修订未被错误推进。两张 AP 及最终费用均已作废,保留历史;业务端作废与 Finance ACK 已核对。首轮 70 项业务断言通过,最后的汇总断言误用了账户接口不存在的字段;随后仅只读补验 9 项通过,原失败报告保留,未重复造数或写入。
- AR 补验发现两处问题:作废应收仍被数据库全历史唯一键占用,重新建单返回 S0500;对账单动作即时响应在审计写入前取快照,少返回本次修订,重新查询时记录存在。修复提交 `ed6a173b8678a43d260b89b8d10a4d2e0e0f99af` 已推送并通过 Finance `#142` 发布,耗时 63.875 秒,最终镜像 `ed6a173b8678` running/healthy。新增修复通过 29 项定向检查(对账单行为 21、结算表基线 3、SQL 注释合同 5);基线测试实际执行模块与统一初始化中的表定义,覆盖作废历史、重建、有效应收唯一、重开冲突、客户隔离及应付不受影响。两次流水线复用相应本地测试,仍完成生产/测试源码编译、打包与健康检查。
- 用户单独确认执行 `deploy/sql/finance-receivable-active-uniqueness-repair.sql`。已在 TEST MySQL 8.0.45 的 `baiyue_finance.fin_settlement` 执行一次原子 ALTER,以虚拟生成列及有效应收唯一键替换全历史唯一键;执行前后 37 条记录及金额、版本汇总完全一致,未更新、删除或回填业务记录。首次连接在只读前置检查阶段因主机别名无法解析停止,尚未发出 ALTER;改用 Finance 容器实际解析结果后执行成功。执行文件 SHA-256 与已提交脚本一致;旧索引移除、新索引及生成列已回查确认。初始化模式仍为 `never`,未重放空库基线。
- 修复后 AR 完整真实 HTTP 验证 31 项业务断言、49 次请求检查全部通过:`REC202610270002` 生成 `AR202610270003`,合法作废/重开成功,作废后能生成 `AR202610270004`;新单占用、对账单调价及作废后,旧应收重开均被拒绝。提交、审核、出账、调账、作废的即时响应均包含本次修订,调账保留来源 0.03 元与账单 0.04 元差异。前一轮 `REC202610270001` / `AR202610270001` 的剩余场景也已补验并作废;没有重放失败写入,失败建单未留下新应收。
- 本轮新增 2 张 AP、3 张 AR、2 张对账单及对应测试费用最终均已作废,修订和来源版本保留;未新增收付款或转账。原有单据金额、状态、版本不变,原有 175 条应付待选费用仍为 CNY 707.00;应收 34,343.92、已收 1,936.24、未收 32,407.68,总成本 3,885.57、已付成本 3,178.57 及钱包余额均恢复检查前值。所有本轮认证会话已退出。
- 发布前后仅 Finance 镜像变化,Admin、Client、Lastleg 等服务版本及历史退役事件桥保持原状。证据分别在本机私有临时目录 `codex-finance-reopen-fix-20261027`(`lifecycle-final.json`、`ar-final.json` 等)和 `codex-finance-revision-release-20261027`(`sql-execute2.json`、`ar-lifecycle-final.json`、Jenkins 及运行版本证据)。本结论限于上述接口场景,不代表全部财务场景或 1920×1080、100% 缩放人工页面验收完成。
## 2026-10-26 海外费用与仓租 TEST 补齐:收费、仓租及应付链路已验,直付明细已修复并复验
- 本轮仅继续 TEST。先按已审阅的 `overseas-fees-storage-rent-structure-add.sql`、`overseas-storage-rent-zero-fee-repair.sql` 补齐 `ll_storage_rent_inbound`、费用审核人名称及自动免费仓租的金额/汇率约束,两文件执行成功。执行前后原有费用均为 143 条,资金编排及计租批次均为 0;未重放初始化、未回填或删除业务数据,未调整汇率。
- 首批配套后端固定源码 `f37d52aeadaab9a757a0caf7a6b2efac1bb1b3fe`:Firstleg `#521`、Warehouse `#138`、Finance `#138` 均 SUCCESS,当时实际容器镜像标签 `f37d52aeadaa` 且 healthy;Finance 后续单服务修复版本见本节下文。内部服务身份调用费用目录、指定验收客户仓租价格和钱包读取均为 HTTP 200 / 业务码 200;目录 16 项,客户仓租为 USD、9 个阶梯。Finance 两项事件摘要字段已为 `varchar(71)`,无需追加结构修复。
- Lastleg 固定到不可变标签 `test-overseas-finance-20261026-r2` / `c6bc3ac85b823d19af56826a17e448f08a214fb7`,`#432` SUCCESS,实际容器标签 `c6bc3ac85b82`、running/healthy。原 `#431` 完成 Lastleg 3,591 项测试,5 项失败、11 项跳过;失败来自初始化末尾建表统计未同步(238→239)、合托拣货测试夹具漏注入仓租服务、单表分页测试漏指定已开船条件三处。仅修正统计和测试,生产 Java 与服务资源保持 `f37d52aeadaa` 冻结源;相关 56 项定向复验通过。`#432` 复用已通过项和定向复验,显式跳过重复测试执行,保留编译、打包和健康检查;不能将原 `#431` 或未执行的集成测试记为通过。
- Admin `b5d8ccdffe9c56094f2d0c975c090e0957a49fc9` 已由 `#714` 发布,实际标签 `b5d8ccdffe9c`、running/healthy。`#713` 因 Jenkins 轻量检出把提交哈希当作分支而失败,未进入构建;改用完整检出后成功,临时 SCM 配置已逐字核对并恢复。海外 PDA `2ff0ae7975bfb3fe04a036dcea17845460196181` 的 51 项定向测试、H5 构建及产物核验通过;已备份并上传实际 TEST 宿主机静态站点,线上 83 个文件 SHA-256 与构建产物逐项一致,`/gateway-api/` 登录及退出成功。该代理连通性检查不代表 PDA 绑定仓库后的扫码作业通过。
- 配套发布后,统一 Gateway 的费用分页、费用目录、仓租列表、仓库选项及业务单选项均 HTTP 200 / 业务码 200;客户账号访问平台费用、仓租接口均 HTTP 403 / A0403。真实平台角色细分权限与跨客户伪造归属场景尚未在本批完整执行。
- 人工应收保留当前明确选择 BILL / WALLET 的实现,并分别用三笔新小额费用验收。USD 0.01 按现行月汇率 8 固定为 CNY 0.08,登记冻结、审核仅实扣一次;原创建及审核请求重放不重复创建或消费,同幂等键修改金额被拒绝。另一笔 CNY 0.02 驳回后释放、不实扣;BILL CNY 0.03 审核后形成唯一 AVAILABLE 费用,Lastleg Outbox 为 PUBLISHED、Finance Inbox 为 PROCESSED,无钱包引用或额外扣款。验收账户余额由 2.34 变为 2.26,冻结余额为 0,未充值或调整授信。
- 资金样本最终 22 项检查通过。首轮脚本误用 `sourceFeeId` 匹配 Finance 费用池,按实际 DTO 的 `sourceId` 修正后仅复核原样本,未重新造费;首轮失败记录、修正后 HTTP 结果及只读数据库投递证据均保留。没有据此认定正式账单生成、核销或付款流程通过。
- 后续真实 TEST HTTP 验收使用新原生样本,不回填历史库存、不修改入库时间。转运单 `ZY202610260001` 经平台审核、绑定仓 PDA 两托两箱清点及打托、客户测量确认,自动登记两个计租批次;实收与扫码原请求重放均不重复登记或扣减。两箱免费期出库均通过仓租预校验,未预校验的拣货被拒绝;出库后两个批次剩余数量均为 0、状态 CLEARED,自动生成两笔待审零元仓租且汇率为空。该结果来自正式 HTTP 作业,照片和测量均为合成验收数据,不代表实物扫码或页面验收。
- 免费仓租一笔按零元审核完成,无扣款流水;另一笔由零元补价至 USD 0.02,按月汇率 8 冻结 CNY 0.16,再降至 USD 0.01 审核,仅实扣 CNY 0.08,多余冻结释放。空调价原因及旧版本审核被拒绝,保留原计算零元依据;审核重放沿用同一仓租消费流水。转运原生实收续跑 8 项、免费出库及调价 26 项检查通过,账户余额从 2.26 降至 2.18、冻结为 0。
- 退货单 `TH202610260001` 原生签收批次 `RB202610260001` 为一托两箱、100 件,经正式清点为 2 件和 98 件两箱。出库 2 件的完整实物箱,按原托 1 天和 2/100 份额计算 USD 0.03,固定月汇率 8 折合 CNY 0.24;预校验冻结成功前不拣货,扫码仅扣减 2 件计租份额,审核后只实扣一次。签收、预校验、扫码、完成及审核重放均保留原记录,未重复计租或扣款;另一箱 98 件保持 AVAILABLE,原入库时间与一托计费基数未重置。原生退货入库续跑 8 项、非零出库结算 18 项检查通过,账户余额从 2.18 降至 1.94、冻结为 0;本批仓租均未进入账单池重复收费。
- 验收脚本首轮缺少转运清点必填箱数,及退货断言未按实际 DTO 处理字符串数量和 `RETURN_V1` 规则码,分别保留失败记录后修正脚本,仅续跑原业务样本;未为这些脚本问题修改生产代码、重建原单或重复收费。临时海外 PDA 仅绑定本批测试仓,完成后已停用,独立验收会话已退出;既有国内 PDA 账号未改为海外角色。本段后续 HTTP 验收未追加 SQL、部署、充值或授信修改。
- 供应商应付后续 TEST HTTP 共 31 项检查通过:在本批转运单上关联独立测试供应商,分别登记 CNY 0.03 的 ON_ACCOUNT 与 DIRECT_PAID 费用。账期审核后唯一入池;直付审核后生成唯一 CONFIRMED 成本,保留付款参考及凭证,且不进入账期待选池,强制创建 AP 被 FIN_409 拒绝。创建与审核重放均未新增费用或成本。
- 账期来源生成 `AP202610260001`,先登记 0.01 元、再登记 0.02 元付款,最终 PAID、未付 0、付款流水恰为两条;已占用费用不得重复生成结算单。超额付款、缺凭证、旧版本、同键修改金额及结清后继续付款均被拒绝,原付款请求重放保持原流水。本批应付及已付成本各增加 0.06 元,客户实际/可用余额保持 1.94 元、冻结 0;凭证及付款参考明确标记为合成验收材料,仅验证付款登记,不代表银行或第三方实际转账。样本保留,验收会话已退出,未执行 SQL 或重新部署。
- 本次同时发现并修复直付成本明细回显缺陷:成本汇总已正确计入已付,但 `/cost-entries` 及详情把已确认直付返回为“已付 0、未付 0.03”。仅修正 `FinanceQueryService.payableSettlements` 的金额映射:已确认 SOURCE_DIRECT_PAID 全额已付、未付为 0;作废直付保留原金额,已付与未付均为 0;人工成本口径保持原状。新增隔离用例先复现 3 项失败,修复后成本读取、客户过滤及汇总 14 项定向测试全部通过。接口路径、DTO、数据库结构及资金写入均未改变。
- 经单独确认,Finance 修复已按固定提交 `5b53be23e86362d849b15deee0989ed3be3914c5`、不可变标签 `test-finance-direct-paid-20261026` 发布 TEST。Finance `#139` SUCCESS,耗时 127.4 秒;复用上述 14 项定向测试,显式跳过重复测试执行,保留生产/测试源码编译、打包、镜像及部署健康检查。实际 `firstleg-test-finance` 镜像标签 `5b53be23e863`、running/healthy;前后逐项比对仅 Finance 容器发生变化。原直付样本的列表及详情均已返回“金额 0.03、已付 0.03、未付 0”;6 次发布后 HTTP 请求全部成功,成本身份及唯一性、`AP202610260001` 的两条付款流水与版本、成本汇总、客户实际/可用余额 1.94 和冻结 0 均保持不变。独立会话已退出,本次未重新造费、执行 SQL、改 Nacos 或发布其他服务,灰度部署阶段按条件跳过。
- 尚未关闭:头程来源同单同仓补入库不重置库龄、采购专用资金链、双设备竞争及页面人工截图。当前新增的两个转运计租批次已清空、一个退货计租批次保留 98 件合成库存;原请求重放及退货分箱出库不替代头程补入库验收。本批不涉及灰度、APK/WGT 或旧容器清理。
- 本批未纳入远端并行新增的采购提交;后端本地 `test` 与远端 `test` 的并行变更保持原状,发布使用上述不可变标签。其他对话未提交的入仓/排车修改均保留。执行结果保存在本机私有临时目录 `codex-overseas-finance-release-20261026/`、`codex-overseas-rent-acceptance-20261026/`、`codex-overseas-payable-acceptance-20261026/`,报告不保存密码或 Token;实际部署和验收状态只维护在本节。
## 2026-10-23 晚间 TEST 批次:已发布并完成部署烟测
- 用户授权提交当前工作区全部代码并部署 TEST;冻结版本为 Backend `a8192f51fefdc031a5b03136d4d6fb7caab26c64`、Admin `047cfb3d0b657b3ccac93486419bd3a0e45d95c5`、Client `2c98d121ca1d62f4b755deb5d9df790d09e4c19d`、国内 PDA `f39303ea24fa75b7cbd0c0de664ee37f8ef6e644`、海外 PDA `f5dc84b3c24d61019cadee7de6fe5a5da11d1c68`,均已推送 TEST 对应分支。后端仅 Lastleg 生产代码变化,出库任务编号改用统一日流水;前端包含智能装柜、订舱/出库展示、客户报关资料关闭按钮及 PDA 作业展示、失效托盘状态修正。
- `backend-java #719`、`baiyue-firstleg-lastleg-service #430`、`admin-web-test #710`、`client-web-test #443` 均 SUCCESS。Lastleg AUTO 根据可用基线转为完整模块门禁:3406 项测试、11 跳过,另 51 项集成测试,均零失败、零错误;本地 Admin 102 项、国内 PDA 12 项、海外 PDA 28 项定向测试通过。两端 Web 生产构建及两端 PDA H5 构建、产物核验通过。临时固定 SCM 均已恢复原分支配置。
- 发布后直接读取运行容器,Lastleg `a8192f51fefd`、Admin `047cfb3d0b65`、Client `2c98d121ca1d` 均 running/healthy。两 PDA 直接上传各自宿主机站点根目录,先资源后首页;备份原配置与被覆盖文件,补齐首页 no-store、独立 API 优先匹配及上传限制,`nginx -t` 和重载成功。临时工具容器只执行宿主机文件与配置操作,不是 PDA 服务发布;既有旧 PDA 容器未更新、未删除。
- 两 PDA 公网全部 149 个产物文件 SHA-256 与本地构建逐项一致;两 Web 首页与健康接口均 HTTP 200。后端上线后复验 Admin、Client、两 PDA 代理入口的登录/退出,以及 Admin 出库单查询,9 次 HTTP 与业务码均成功;独立烟测会话已退出。PDA 登录检查不代表绑定仓库后的出库/扫码作业链通过。
- Admin 出库列表、新建出库弹窗已在实际 TEST 页面打开并核对,未提交业务单据。其余完整页面视觉、真实出库写流程及 Android 扫描硬件未在本批新增验证;仅更新 H5,不发布 APK/WGT。不执行 SQL、Nacos 或业务数据清理。冻结后其他对话新增的 Admin 申报编辑器与密度样式修改保留在工作区,不计入本批发布。
- 脱敏 TEST 证据位于本机私有产物目录 `test-release-20261023-evening/`,包含版本清单、Jenkins 状态/日志、运行镜像、静态文件摘要、HTTP 烟测与局部页面截图;环境配置和凭据不入库。本批后续灰度晋级结果见下节。
### 本批灰度晋级:已发布并完成发布后 F40 验收
- 用户明确授权本批灰度发布;仅更新 Lastleg、Admin、Client,H5 仍由用户自行发布。后端 PR #32、Admin PR #23、Client PR #16 已合并,文件树分别与上述 a8192f51fefd、047cfb3d0b65、2c98d121ca1d 冻结源一致。`baiyue-firstleg-prod-lastleg-service #19`、`admin-web-prod #31`、`client-web-prod #20` 均 SUCCESS;实际运行 tag 分别为 a8192f51fefd、c853b919c039、2b5525ce499b,后两者为对应源的 main 合并提交。临时前端 SCM pin 已恢复;Firstleg 及其余后端未重复发布。
- Lastleg 灰度构建复用相同冻结源的 TEST #719/#430 测试门禁,显式跳过重复测试执行,保留生产及测试源码编译、打包和容器健康检查。无 SQL、Nacos 配置变更或数据清理。发布前 12 条排车的身份、状态及发布事实在最终回查中保持一致;采集任务、运行记录、4 个范围的配置摘要与事实/发布修订不变,自营两仓四页 8 个接口正常,BUSINESS 模式和列表总数保持一致。
- 发布后首轮完整 F40 为 1462 项、1458 通过、4 失败,报告与样本保留。两个根因断言来自船节点分页仍按旧 ISO 格式/校验位拒绝合法柜号,另两项为汇总失败;只读真实返回确认两条柜号非空且已规范化,替换该字段后旧结构校验通过,生产规则已允许非 ISO 柜号。仅修正 `phase4-carrier-nodes.mjs` 与对应合同测试,新增用例先复现 2 失败,修复后船节点及 F40 直接合同共 61 项通过;不修改灰度业务代码、不移除其他身份、归属及状态断言。脚本修正目前留在当前工作区,未并入本批已发布镜像。
- 使用新隔离批次重新执行完整 GRAY F40(BUY_DECLARATION),最终 **1467/1467 项断言、779 次唯一 HTTP 请求、0 失败、退出码 0**;覆盖下单、测量、分柜、装柜、海外收货、排车、出库、签收回传、重放和车/人资源释放。临时 PDA 按脚本 finally 停用,合成业务及审计证据留存。4 项非阻断缺口为外部第三方;不扩称默认 TEST 全模块、灰度页面视觉或硬件验收。
- 最终只读核验 28 项通过:仅上述三个容器镜像变化,15 个容器均 healthy,验收前后目标镜像 ID 一致;14 项 Nacos 摘要保持不变。Admin/Client 公网首页与各自容器一致,分别 61/93 个引用资源正常。证据保存在私有 `artifacts/chongchong-global/gray-release-20261023-evening/`,最终报告为 `production-f40-postrelease-r2-http.json`、`final-verification.json`;首轮报告、脚本修正摘要及构建日志均单独保留。
## 灰度发布后验收要求
- 用户于 2026-10-23 明确:每次灰度发布完成后,必须在实际部署的新版本上重新执行灰度验收脚本,不能复用上一版本真实 HTTP 结果代替发布后验收。发布前单测、构建与健康检查,以及局部接口烟测不能替代该步骤。
- 当前 Admin 全量入口的 gray 模式仅开放显式 `phase5-root-fulfillment` 完整 F40 闭环及其客户资质依赖;每批记录部署版本、独立报告、通过/失败及未覆盖范围。默认 TEST 全模块及故障注入不得直接用于灰度;灰度闭环通过不表述为默认全模块或人工页面验收通过。
- 本批 Firstleg/Lastleg 7ef8411ea45a、Admin 源 9542b71cc79b 已于北京时间 13:51–13:52 补跑发布后完整 F40:1440/1440 项断言通过、776 次唯一 HTTP 请求、0 失败,进程退出码 0。部署后验收要求本批已满足;覆盖边界与证据见本文末尾本批灰度晋级结果。
## 2026-10-23 取消柜号 ISO 校验:已发布 TEST 并完成真实 HTTP 联调
- 用户授权本次部署及真实 HTTP 验证。运行源码固定为后端 `9c19980736f4227b50ef94b19665b76db66b0fc0`,移除预装确认、PDA 任务与完成、装柜事件及海外接收链中的 ISO 6346 格式/校验位限制;继续校验非空、规范化、业务版本及状态。后续 `ecc76d4f9` 仅调整本轮 HTTP 验证范围及说明,不改变部署源码。
- `baiyue-firstleg-firstleg #517`、`baiyue-firstleg-lastleg-service #428` 均 SUCCESS;实际读取 `firstleg-test-business` 和 `firstleg-test-lastleg`,镜像 tag 均为 `9c1998073`,running/healthy。Firstleg 流水线测试 1782 项、0 失败/错误、9 跳过;Lastleg #427 的额外全模块回归主动停止,确认其进程退出后,#428 复用本轮 423 项已通过的定向检查(含 Lastleg 113 项),完成源码编译、镜像及健康检查,不宣称 Lastleg 全模块回归通过。
- 通过统一 TEST Gateway 执行新建测试批次 `ADMIN-API-20261023033041094`,619/619 断言、362 次唯一请求通过。柜次 `D2093` 使用截图箱号 `JZXH10231043` 成功确认预装并生成唯一 PDA 任务;领取前改为 `TEST-ADMIN-API-20261023033041094-CAB-NOISO`,完成拣货、五类测试照片上传及装柜,最终 `COMPLETED`,任务、计划及柜次身份保持稳定。
- 海外真实 HTTP 回查确认事件已消费,生成订单 `WC202610230192`,来源柜、非 ISO 箱号及客户快照一致。空柜号返回 A0400,领取后及完成后改柜号返回 A0409;确认幂等及重复确认冲突验证通过。四个验收会话均已登出。
- 本轮仅发布上述两个后端服务;未操作截图原单、执行 SQL 或删除数据,测试批次保留。不涉及海外入库/派送后续流程及人工页面、扫码硬件验收。脱敏证据位于后端 `reports/non-iso-container-20261023/` 的 `deployment.json`、`runtime-before.json`、`runtime-after.json`、`http-report.json`、`http-journal.jsonl`;不将本次 HTTP 结果扩称为全产品验收。
## 2026-10-23 订舱资料移除与测量审核更新:已发布 TEST
- 用户授权提交当前工作区更新并部署 TEST。本批 Admin `75bb0bf78ef3548ec7e2e3f7f49b187fc24902cb`、后端 `c38f1758c5c4ea105210f2a95d6888f0a29fed2b` 已推送;Admin 包含测量审核、称重图片预览与修正、订单详情展示,以及订舱资料模块移除。Firstleg 取消放舱与拖车候选、创建、派车的订舱附件前置条件,保留其他业务校验。
- `baiyue-firstleg-firstleg #516` SUCCESS,耗时 100.139 秒,精确检出后端提交。复用相关输入未变的 77 项后端定向测试,本次流水线跳过重复执行测试,仍完成生产及测试源码编译、镜像构建与健康检查。
- `admin-web-test #706` 因未传 `CLIENT_WEB_URL` 在构建前失败,未更新线上容器;沿用 #705 的已验证 TEST 参数后,#707 SUCCESS,耗时 61.177 秒,精确检出 Admin 提交,类型检查、生产构建和容器内健康检查通过。没有更改 Job 配置。
- 发布后直接读取 TEST 节点容器:`firstleg-test-business` 镜像 tag `c38f1758c5c4`、`admin-web-test` 镜像 tag `75bb0bf78ef3`,均 running/healthy;Admin 公网 `/healthz` 返回 200/ok。线上拖车表单资源不再包含订舱附件必填拦截。
- 本批受影响前端定向检查累计 188 项通过,全部待提交 Admin 文件及其测试源码的定向类型检查通过;发布合同 32 项通过。订舱静态测试中另有两条修改前已失效的容量/限重及客户选择展示断言,未扩大范围处理,不声称全量测试通过。没有执行 SQL、Nacos、数据库清理或业务写入,也未新增人工截图与真实业务流程验收。
- 本次发布以以上两个提交为边界;提交完成后工作区新增的柜号校验改动未包含在本次镜像内。
## 2026-10-23 TEST 更新至既有灰度:已发布,核心业务链验收通过
用户确认本轮是将 TEST 新版本更新至既有灰度,不是新建生产环境;两端 PDA H5 由用户自行发布,不属于本轮代发范围。用户另确认灰度现有旧排车单不再继续使用,按灰度测试数据处理;该确认不授权执行删除。用户进一步明确目标为将当前 TEST 版本发布到既有生产并跑通;当前只有自营「经营总览、销量分析、库存分析、数据采集」四页在真实使用,必须保留这些页面的全部数据、账号凭据与采集配置。固定候选镜像已全部构建并预拉;2026-10-23 11:42(北京时间)进入停写窗口,备份、清理、DDL 和权限 SQL 均已执行并核验,13 个后端和两端 Web 已全部发布;补充单列排序规则纠正后,核心 FBA 完整链与自营四页读取均验收通过。
### 版本范围与候选
切换前只读核对:13 个后端及 Admin、Client 共 15 个目标容器均 running/healthy。下面为候选冻结时的运行版本,不使用 Jenkins 的最后成功构建替代容器事实。
| 对象 | 切换前灰度 | 冻结时已验 TEST 来源 / 本次候选 |
| --- | --- | --- |
| Firstleg | `46d359241f27` | TEST `daa5d30d16aa`;可统一至后端候选 `18ef3380363a` |
| Lastleg | `46d359241f27` | `18ef3380363a` |
| IAM、Order、File、Integration、Warehouse Overseas | `46d359241f27` | TEST `de96e47d7494`;可统一至后端候选 |
| Finance、Warehouse | `4dc3d1752e27` | TEST `de96e47d7494`;可统一至后端候选 |
| Gateway、Auth、Print | `4825f782a32f` | TEST `de96e47d7494`;可统一至后端候选 |
| Audit | `7151222836f3` | TEST `de96e47d7494`;可统一至后端候选 |
| Admin | `eb1d75222acf` | `52045e5df25598ca4fe4b787e6802bfc516aabb7` |
| Client | `15b51b613963` | `3ffa706b89e113568dda03a00dd0ed59af1e7a88` |
运行源码比对基准为 `18ef3380363a347fae24723adde1aa129fa34767`;本次冻结发布源为 `3616e9db04bf85e91bb1f0fc6f87663c5e493d3e`,其后续差异仅为 9 个验收脚本、测试及说明文件,应用生产源码未变。逐项比较该提交与各服务当前 TEST 镜像来源的 `src/main`、模块 POM,13 项均无差异;公共模块生产源码、父 POM 与 BOM 亦与对应 TEST 来源一致。灰度至候选存在公共异常处理、JWKS 等直接依赖变化,本次按 13 个保留后端服务及 Admin、Client 准备匹配发布。此源码一致性核对不等于预构建或完整模块测试已通过;旧 Gateway Overseas/Event Bridge 不纳入发布。
### 数据库与权限
- 两环境原始结构差异:TEST 独有 21 表;字段 TEST 独有 348、灰度独有 27、定义不同 19;索引记录 TEST 独有 144、灰度独有 20、定义不同 10;约束记录 TEST 独有 78、灰度独有 5、定义不同 6;外键列记录 TEST 独有 11;触发器定义不同 3。索引/外键按元数据行计数,不代表独立索引或 DDL 条数;新增字段包含新表字段,不能据这些数量自动生成整库同步。
- 对照冻结候选基线,21 张表中需要纳入新建评审的为 **13 张**:Lastleg 的 `ll_delivery_facts_changed`、`ll_dispatch_command`、`ll_dispatch_delivery_arrangement`、`ll_dispatch_draft_command`、`ll_dispatch_history`、`ll_dispatch_item_source`、`ll_fleet_owned_business_command`、`ll_fleet_owned_business_history`、`ll_fleet_owned_business_ownership`、`ll_fleet_owned_business_record`、`ll_return_carton_stock_receipt`,以及 Order 的 `ord_document_sequence`、Warehouse 的 `wh_document_sequence`。
- 另 8 张 TEST 独有表不在冻结基线及目标服务生产源码引用中:`fl_loading_work_pallet`、`fl_loading_work_pallet_carton`、`ll_delivery_fee`、`ll_finance_fee_funding`、`ll_overseas_procurement_outbound`、`ll_storage_rent_lot`、`ll_storage_rent_preparation`、`ll_storage_rent_share`。不因 TEST 存在就复制至灰度。
- 对照冻结源码及生产 SHOW CREATE 收敛后的 DDL 草案:13 张新表、22 张既有表字段调整;新增字段 71、修改字段 16、删除旧字段 27,删除/新增索引 10/13,删除/新增 CHECK 4/5,替换触发器 2。TEST 独有的 `fl_terminal_drayage.actual_pickup_at`、`ll_cargo_discard_application.completed_at/outbound_no`、`ll_order.container_status` 不在当前基线,不复制;TEST 额外放宽的卡车预约币种 CHECK 亦不复制。旧柜次触发器先移除,再调整其引用列,最后按当前源码重建;整个间隔须停止相关业务写入。本段所列范围现已执行成功。
- 灰度旧排车实查为主单 21、草稿 15、明细 24、PDA 任务 21、拣货记录 23、Fleet 派送关联 19;主单状态为 DEPARTED 19、PENDING_DEPARTURE 2。新版要求 `status/stage/review_state`、真实 `trip_id` 和 `cargo_hash` 等,不能仅添加字段宣称旧样本已转换。用户已确认无需继续使用旧单;后续准备有界清理及结构切换清单,须继续核对关联占用、库存和来源,不扩展为全库重置,不设计旧单兼容/回填,已按下文批准清单清理。
- 权限资源原始差异 21 项中,仅 **9 项**匹配冻结 IAM 基线:自有业务和外配业务各 `list/edit/upload` 六项,以及排车 `create/depart/loading-complete` 三项。授权按目标种子、角色规则及权限版本同事务维护,不复制 TEST 的账号或角色关联。其余包括 4 项验收专用资源、6 项已暂缓的箱号/产品库常量和 2 项无当前目标引用的旧资源,不自动晋级。
### 配置与运行边界
- 灰度 14 个现行 Nacos Data ID 已只读取得;与 TEST 的 14 个现行 Data ID 比较,10 份内容完全相同,4 份有差异。TEST 另有旧事件桥 Data ID,不复制。
- **File**:灰度保留 `OVERSEAS_INVENTORY_LEDGER`、`FLEET_QUOTE_LIST`、`TRIP_OPERATIONS_LIST` 三类导出注册,TEST 运行配置缺少这些项,但冻结源码仍正式提供;应保留灰度注册,不能按 TEST 缺项删除。
- **Finance**:TEST 增加验收专用收款示例图默认地址,灰度保持自己的配置,不将该示例图当作灰度真实收款配置。
- **Lastleg / Integration**:灰度 Nacos 保持 BUSINESS 及连续采集配置、真实凭据和独占出口交接信息;TEST 为 OFF,另有临时诊断/采集配置。容器环境变量仍显示 OFF/false,不能仅按这些值断言应用已关闭,应以合并配置后的应用运行态复核。发布保留灰度独立配置和凭据,不覆盖为 TEST,不重新发起采集或出口交接。
- 冻结 Compose 对 Lastleg 新增 3 GiB 内存/交换上限、2 CPU 和 1536 MiB JVM 堆;此配置会随通用部署文件进入灰度,须核对当前灰度承载与采集任务,不能仅当作镜像代码变化忽略。
### 当前准备及执行门禁
- 三个正常发布合并请求已合并:后端 #30、Admin #21、Client #15,合并文件树逐项等于冻结源;发布源分别固定为上表两端提交及后端 3616e9db04bf,不随其他对话后续提交漂移。
- 后端生产预构建 #33 已结束 FAILURE,DEPLOY=false、SKIP_TESTS=false、TEST_SCOPE=MODULE;Lastleg 3395 项执行中 5 失败、9 错误、11 跳过,定位为三个旧测试夹具缺少当前真实库存/已拣归属查询所需表,未构建镜像或部署。已仅修正测试夹具;#34 首次补跑仍有两项夹具数据/重复建表问题,继续修正后 #35 SUCCESS,按原生产提交加三个测试文件补跑三类 23 项全部通过,并完成上次未执行的 File、Print、Audit、Finance、Integration。#36 SUCCESS,13 个固定源镜像全部构建完成(DEPLOY=false),复用 #33 已通过部分及 #35 补充门禁,不重复执行测试;临时 SCM 固定已恢复 main。原已通过模块复用证据,不把部分通过写成完整通过。先前 #31 因固定 SHA 的轻量检出、#32 因镜像仓库默认值空,在测试前失败,均未部署。已使用完整检出及上次成功生产发布参数修正;#33 检出核验后,临时 SCM 固定配置已恢复 main。
- 结构、权限、清理三个独立 SQL 文件已按批准哈希顺序执行 SUCCESS。清理范围为 23 张非空表的 770 条旧测试记录:21 张排车、15 张草稿、20 张出库及 20 张派送,以及对应 PDA 拣货、锁、派送资料/操作/回访;另含 21 个测试车次、23 个外接预订、5 个运力发布及其关联/历史。另 8 张当前为空的直接关联表仅作零记录前置校验。清理按精确主键、预期数量和外键顺序执行,单事务失败回滚;车辆、司机、仓库主档及自营全表均不在清理范围。用户已明确授权按上述范围备份、停写后执行 SQL 和清理,再继续发布与验证;授权仍限这份清单,结构或记录变化须先复核。
- 权限草案只新增 9 项正式权限,按源码规则授予平台管理员及仓库操作员;同事务递增受影响账号的权限版本,不替换账号、密码或现有权限关系。
- 只读数据前置校验已核对保留记录的非空/字符串长度与退货箱 CHECK,发现违规 0;排车新必填字段不使用伪造默认值,依赖批准后的旧样本清理。DDL 自动提交,不能将清理事务回滚能力误称为整个结构包可事务回滚;执行前须备份受影响表、触发器及原发布配置,并再次核验结构/数量。
- 自营保护基线:库存日事实约 956 万条、库存快照约 8 万条;4 个采集 scope 的配置摘要已保存。只读检查时没有运行中的采集任务或有效 scope 租约,已有 577 个 SUCCEEDED、27 个 DEAD 任务;历史失败不会因发布被标成修复。生产主机 8 CPU、约 30.7 GiB 内存,检查时可用约 10.4 GiB,Lastleg 实占约 1.48 GiB,无 OOM。当前容器无内存限制;候选 3 GiB/1536 MiB 堆约束仍须结合发布后峰值复核。
- 执行状态:固定生产源码镜像预构建已完成;SQL/删除已获明确授权,受影响的 46 张既有表已完成首份备份并核对完整标记及哈希;11:42 停写后再次备份 46 张表,11:43 完成三个 SQL 阶段,11:45 完成 721 项后置核验,随后启动 13 个后端的固定源切换;Admin #29、Client #19 已随后发布成功。Lastleg 重启期间四个自营页面会短暂不可用,但保留其数据与 BUSINESS 采集配置;不手动重建或重发真实采集任务。PDA H5 由用户发布。灰度实际登录/权限、自营四页读取及 F40 核心业务链验收已完成,具体证据见下文。
脱敏证据位于本机受控环境目录 `gray-update-readonly-20261023/`,包括 `jobs.json`、`runtime-{test,gray}.json`、`backend-candidate-parity.json`、`schema-diff.json`、`classified-diff.json`、`permission-classified.json`、`configuration-diff.json`、`gray-dispatch-counts.json`;不保存数据库密码、Token、私钥或 Nacos 原文。证据另含 production-{schema,cleanup,permissions}-plan.json、production-schema-preflight.json、production-selfop-before.json 和 production-capacity.json。准备阶段未修改应用生产源码;当前已完成本节授权的 SQL 数据与结构变更。后置核验曾误按 TEST 旧元数据比较四个字段,修正为已批准 SQL 的空值及继承排序规则后通过,没有扩大 SQL 范围。
### 发布后验证与单列纠正
- 后端 13 个固定源镜像已于北京时间 11:48 前全部运行 healthy;Admin #29、Client #19 均 SUCCESS,运行 tag 分别为 4b47e770a301、d1eeaab06747,文件树等于已冻结候选。临时 SCM 配置均恢复。
- Web 代理曾因旧 Gateway 连接出现一次 502;配置检查通过后 reload 恢复。自营两仓四页共 8 个读取接口全部 HTTP 200,销量/库存总数与发布前一致;14 份 Nacos 配置摘要、采集任务/运行/四个 scope 状态均未变化。新增 9 项权限已通过实际登录读取确认。
- 正式 GRAY F40 样本已完成国内订单、测量、两柜与海外接柜、排车及拣货/五类照片,确认装车时 S0500。1006 项断言中 1004 通过、2 失败(同一个装车错误及模块失败),不能声明全链通过;临时海外 PDA 已由 finally 停用,样本及原报告保留。
- 根因为外接预订 incoming_no 在原批准 ALTER 中未显式指定排序规则,继承灰度表默认 utf8mb4_0900_ai_ci;它与转运单 transfer_no 的 utf8mb4_unicode_ci 进行 JOIN 导致 MySQL 1267。后置校验此前按表继承规则接受了这一项,未检查跨表 JOIN 一致性,现已定位该遗漏。
- 已准备单列纠正 SQL:仅将 ll_fleet_external_booking.incoming_no 定义为 VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL,保留原注释;当前外接预订表 0 条,不删除或重建数据,不修改自营表。拟备份该表、短暂停 Lastleg 写入、执行并核对后恢复同一镜像、继续原验收。用户已明确授权该新增纠正 SQL。北京时间 11:58 完成该表单独备份、短暂停 Lastleg、单列 ALTER、元数据及原失败 JOIN 核验,再启动同一镜像 healthy;未删除数据。随后自营两仓四页 8 次 HTTP 读取通过,BUSINESS 模式保持。原失败报告与样本保留,使用新的隔离批次进行完整 F40 复验。
### 最终交付证据
- 第二批 GRAY F40(BUY_DECLARATION)完整通过:1435/1435 项断言、777 次唯一 HTTP 请求、零失败;覆盖本轮独立客户下单、国内测量与两片装柜、人工运输节点、海外收货、原生排车、真实 HTTP 拣货/出库、两片签收、根子完成回传、签收重放和车/人资源释放。正式结果 production-f40-fixed-http.json;首轮失败报告保留。
- 直接数据库只读回查确认根单 FL202610230004 与子单 FL202610230004-1 均 COMPLETED;排车 PC202610230002、PC202610230004 均 DELIVERED。两张正常业务车次完成并释放资源,后续空排车占用保护样本通过正常取消留存。两次临时海外 PDA 均已停用;首轮失败的 PC202610230001 保留在 LOADING,未生成出库/派送,未自动清理或重放。
- 最终 13 个后端镜像 tag 均 3616e9db04bf,镜像 ID 与预拉清单逐项一致、全部 healthy;Admin 4b47e770a301、Client d1eeaab06747 亦 healthy。两端公网 HTML 与抽查静态资源 HTTP 200;这不是浏览器视觉验收。
- 自营四页两仓共 8 次读取 HTTP 200,销量列表总数 5488/1069、库存列表总数 2783/769 与切换前一致,采集模式 BUSINESS。14 份 Nacos 内容摘要、采集任务/运行及 4 个 scope 状态与停写前一致;没有新发真实采集任务。Lastleg 当前 3 GiB/2 CPU、Xmx1536 MiB,验收时约 860 MiB、无 OOM,未以本次短期观察证明未来采集峰值。
- 本批只发布冻结候选,不包含其他对话在发布期间后续推送的 TEST 功能。H5 按用户要求自行发布;本次验收使用正式 HTTP 与明确合成业务材料,不覆盖真实扫描硬件、真实第三方供应商调用、真实邮件或支付,也不声明默认全模块/页面全量验收。三处旧 Lastleg 测试夹具修正留在当前工作区,#35 按当时保存的输入通过;收尾时其中 DispatchInboundReceiptPersistenceTest 已被其他工作追加货量测试,另外两处仍与 #35 输入哈希一致。保留并发修改,不将新增内容计为本轮已验,也未将其带入本次冻结生产源码。
## 2026-10-22—23 18项反馈及请求重放删除:发布及四端浏览器验收完成
- 用户本轮授权全部提交、TEST部署、测试数据库操作、真实HTTP,再以内置浏览器验收Admin/Client 1920×1080、两端PDA 390×848。第19项快递派送不实施;请求重放删除后的失败恢复和重复写入边界已按本节逐项核对。PDA发布及浏览器验收范围为H5,不包含APK/WGT发布或扫描硬件。
- 已发布候选:Backend `daa5d30d16aa00e318c0db93b9074da46929f970`,Admin `4a3456756f82ff4bce5bfbb57f6a708b976091e5`,Client `3ffa706b89e113568dda03a00dd0ed59af1e7a88`,国内PDA `51109ac85243e5445ca90bb10e9117c4f10aabc9`,海外PDA `54e49e24267cea247f0f10234c98b919523cb0d7`。Lastleg `#417`、Firstleg `#515`、Admin `#703`、Client `#442` 均SUCCESS;10月23日再次读取四任务确认均终止且队列为空。前端两任务临时SCM固定配置均已恢复。
- 国内/海外PDA本地H5构建、产物及部署合同均通过,静态镜像分别为 `pda-domestic-h5-test:51109ac85243`、`pda-overseas-h5-test:54e49e24267c`,部署后均healthy。国内首次远程执行脚本因Groovy换行转义失败,未启动构建;核对原记录后修正并成功发布。仅发布H5,不代替APK/WGT或真实扫描设备验收。
- 首轮Lastleg `#416`、Firstleg `#514` 在部署前主动中止:排车附件测试三处夹具缺少正式预约号。修正夹具后四类19项定向测试通过,后续发布复用有效定向结果并跳过重复测试;不宣称完整模块回归通过。后续验收脚本补齐三类审核照片、退货箱内清点及明确失败接续条件,已另提交推送 `f74861baea1a3c3865103feb409d2a91c9000698`;此提交仅影响验收脚本和说明,不改变已部署服务源码。
- 已执行并复查两处精确TEST DDL:移除 `baiyue_firstleg.fl_container_booking.chk_container_booking_iso6346`;替换 `trg_ocean_booking_before_update`,冻结比较只移除 `estimated_arrival_at`。执行前比对旧触发器,其余字段保护与版本推进条件一致;执行后核对其余五个CHECK完整保留。未更新业务行、重放初始化或重置数据库。
- Gateway及受影响验收脚本86项检查通过;索引合同1622项与417个Mapper注册通过;其他专项定向结果已交付。新增夹具修正的52项车次合同、44项退货合同、4项脚本文档合同通过,真实HTTP按当前前置运行,未放宽生产规则。
- 真实HTTP:订舱/国内测量/装柜/报关依赖链1449/1449断言、859次唯一请求通过;退货链423/423断言、361次唯一请求通过,旧实收快照换新键和部分合箱旧库存快照换新键均A0409拒绝且无重复入账/扣减。首轮退货因验收夹具漏箱内清点失败,修正后使用新批次,保留原失败事实。排车 `PC202610220023` 完成2托2箱、五类照片、原键重放不重复扣库存、自动出库与派送,12项检查/67次请求通过;首轮缺固定测试车辆配置在写资源前停止,回读原单DRAFT、零已拣后接续同单。
- 订舱补验:本轮 `OB202610220017` 放舱后窄接口修改预计到港成功,其他运输字段不变;旧版本提交A0409拒绝。新柜次 `D1829` 以 `TEST-R18-NON-ISO-1022` 成功关联其已放舱需求,确认应用与数据库均不再执行ISO柜号规则。
- Admin真实页面已设置1920×1080,核对上述订舱的预计到港和维护按钮。临时阻断该测试单的预计到港保存请求后,页面显示错误,输入/保存/取消仍可操作;恢复网络后在同一弹窗改为 `2026-09-23 08:00:00` 保存成功并关闭。网络记录完整无截断:失败一次;重新提交遇401后刷新会话一次、刷新权限一次、自动续发成功一次,随后渠道/代理各一次读取,没有循环重放。拦截已清除;仍需完成其余Admin条目、Client及两端PDA页面、失败恢复和请求量验收,不能据此宣称18项全部通过。
- 智能排车1920×1080截图及DOM已确认仅保留三栏选货,“调整已有排车货物”页签不存在,未生成新单。排车装车前的车辆信息、调度审核、理货员审核,以及装车中、装车后、派送中、派送完成均已核对创建时间及独立司机/联系电话列。管理资料只显示签收文件、装车资料,油耗入口隐藏;五个装车文件可读取。
- 10月23日新增浏览器样本 `PC202610230001`,正式脚本 `--stop-after-draft` 创建两托两箱及预约后停在零已拣草稿;报告明确标记 `DRAFT_FIXTURE_ONLY/fullFlowPassed=false`,53次HTTP/3项检查不代表完整链路。入口和说明已提交推送 `eb82401af`,仅该脚本说明段落入提交,其他对话在途脚本修改保留;4项文档合同通过。
- 维护车辆已核对预约号/确认时间只有一行、两票货件完整带出;缺车辆图片和缺司机照片均被真实提交校验拒绝,错误后输入、取消、保存及再次提交可用。上传车辆及司机照片后,服务端使用已上传的有效司机主档驾驶证,三类证据齐全并进入待调度审核;驾驶证当时在维护页面显示为空,属于主档预览缺失,不能据此判定后端遗漏第三类校验。
- 主档驾驶证预览修复已提交推送 Admin `cd86255b13881606671fabec9f314c4aa75c625f`:新选司机展示主档证照,切换司机清除旧照片;已保存冻结证照仍按排车权限读取,不强制增加司机主档读取权限。60项定向测试通过,调整测试类型后相关29项复验及覆盖改动生产/测试源码的定向类型检查通过。Admin `#704` SUCCESS,精确提交和运行镜像healthy已核对,临时SCM固定已恢复。1920×1080实页已确认保存证照回显、切换测试司机后旧司机照片清空且新主档图片读取成功;临时切换取消,随后按原司机重新提交审核。
- `PC202610230001` 的调度审核弹窗已按1920×1080截图核对:约1100px宽、车辆货物/预约/三类只读照片/审核意见分区及底部按钮完整。已通过正常“驳回”操作退回维护供修复后复验;真实HTTP回读为 `DISPATCH_REJECTED`、版本6、零已拣,三类文件保留。车辆候选补验确认本车资源保留、另一张派送中排车的占用车辆排除。首次只读核验误用通用REJECTED枚举,修正为实际DISPATCH_REJECTED后6次HTTP通过,原失败记录保留。
- 新增入库计划弹窗已从开船后尾程订单 `WC202610230035` 打开,1920×1080截图核对约1160px宽、来源摘要/计划设置分区、完整输入和固定底栏;仅查看并取消,未提交该订单。其余订单审核/报关、Client及国内PDA页面、失败恢复和请求量仍未完成,不标记18项整体验收通过。其他全量HTTP验收已终止失败,未计为本轮通过;准备新测量待审样本前仍须核对是否有新的共享环境写入。
- 海外PDA真实页面发现并修复 `dispatchVersionAtLeast` 漏导入:审核已成功但读取结果后抛ReferenceError、界面保留旧状态。测试加载器原本注入了页面未导入的依赖,现限定为实际imports;先复现失败,补导入后排车流程、展示、装车照片50项定向检查通过。提交并推送 `a06f54489c5e817a43aa5dea3222dffe460fd10e`,H5构建成功并部署对应镜像healthy;仅改页面引用与其测试加载器。
- 海外PDA以现有本地H5连接TEST验收,实际视口390×848;新标签最初默认1280×720截图作废,尺寸重设后保留拣货与五类照片截图。理货审核阻断一次后可编辑意见,第二次手动提交采用新键和新意见、服务端成功;首次页面引用错误保留证据,修复后同一单两托各拣1箱成功,首托仅1次POST及1次详情GET。装车现场上传阻断一次后可切换作业、重新选图,成功上传为5次业务请求(上传/读版本/绑定/读图/刷新任务);未自动循环写入,全部拦截已清除。
- `PC202610230001` 已通过Admin调度审核及PDA理货审核、两托两箱实际拣货、五类合成照片上传及显式确认装车。最终真实HTTP回读为 `DELIVERING/APPROVED`、版本15、2托2箱/已拣2/已发2;这取代上文退回维护时版本6的中间状态。页面核对装车现场、装车清单、发车前检查、驾驶证、回执具体名称。后半段37次业务请求含1次主动阻断,事件完整无截断;只证明本地H5连接TEST的当前作业,不外推公网页面、APK或扫码硬件。
- 同期其他工作发起 Lastleg `#418` / `0fd523e7408a` 在测试阶段FAILURE(3388项中3失败、8错误、11跳过),未发布该候选;后续 `#419` / `6cd27658f7c4` SUCCESS且运行镜像healthy已核对。PDA后半段验收跨越这次服务更新,不能将前后证据描述为同一后端版本。仍保留原构建失败事实,不以部署成功声明完整模块回归通过。
- 测量审核补验:正式准备入口 `--prepare-measurement-review true` 已提交推送 `7e1703bde`,35项定向检查通过;仅准备待审样本,报告明确 `fullAcceptance=false`。本轮样本 `NYEXX2610230193` 的准备链231/231断言、131次HTTP通过。1920×1080实页核对称重明细与图片区对齐,修改重量按钮直接可见;从页面将毛重60改为61,净重随之为49。通过弹框标题为“确认测量”,正文为“审核通过后,入库单将进入待分柜”;确认后HTTP回读 `WAIT_SPLIT/APPROVED`、两箱、毛重61/净重49。原始证据为 `admin-measurement-review-full.jpg`、`admin-confirm-measurement-1920.jpg`、`measurement-ui-final-readback.json`。
- 预录单补验:只读打开已有合成柜次 `D1922`,出口报关区显示“预录单”“预录单历史”,无可见版本标记;保留原上传文件名中的v2,不将文件名当版本徽标删除。原始浏览器截图 `admin-customs-prerecord-cdp-1920.png` 为1920×1080。普通截图接口对带滚动条页面存在裁切/渲染异常,其长图、375px或1905px截图不作固定尺寸验收依据。
- 国内PDA补验:`r18-domestic-ui-1023-b.json` 准备链290/290断言、165次HTTP通过;390×848本地H5连接TEST,在 `TSTU6188336` 完成1箱拣货、五类合成照片及显式装柜完成。开始时遇Firstleg重启中的503,核对恢复healthy后人工刷新成功。拣货、普通照片和封签照片各阻断一次,均释放操作态;封签从A改B后新请求携新值和新键。网络记录16次业务请求、3次主动阻断,完成为1次POST加2次状态GET;HTTP最终回读 `COMPLETED`。请求证据为 `domestic-ui-network.json`,截图为 `domestic-picked-390.jpg`;这些均为H5,不代表扫码硬件。
- 国内实页发现普通照片失败后草稿仍计入已拍数量。已提交推送 `81f63e5d26210ee82dce8dfb0d21646b18c3788c`:仅移除本次失败普通照片的本地项和草稿,保留已保存照片及可修改封签的待传照片。36项定向检查、HBuilderX 5.26 H5构建及66文件产物检查通过,对应TEST镜像healthy。新样本 `TSTU0721480` 准备链290/290断言、165次HTTP通过;阻断上传后回到待拍摄,重新上传后仅一张有效照片,2次业务请求含1次阻断。原始390×848截图为 `domestic-photo-retry-cdp.png`,网络证据 `domestic-photo-fix-network.json`;该复验样本仅补验照片,未声称已完成拣货或装柜。
- Client 1920×1080补验:从本轮订单复制创建草稿 `FL202610230487`。首次URL规则过宽,实际阻断两次保存前的入仓码规则GET,不能计为写入失败;恢复后一次POST成功,重新打开和HTTP回读均确认当前备注B。随后仅阻断此草稿更新接口,两次人工PUT分别携备注A、B及不同幂等键;报错后仍可编辑,返回/放弃修改正常关闭弹窗,全部阻断已清除。最终HTTP确认仍为DRAFT及失败前已保存备注。完整网络记录37次业务请求,其中14次通知摘要GET严格约60秒一次,不属于失败重放;写入仅1次创建及2次主动失败更新。证据为 `client-recovery-network.json`、1920×1080的 `client-update-error-1920.jpg` 和 `client-domestic-final-readback.json`。
- 本批四端候选均已推送;Admin `52045e5df255`、Client `3ffa706b89e1`、国内PDA `81f63e5d2621`、海外PDA `a06f54489c5e` 为本批最终前端版本。同期Lastleg已由其他工作更新到 `#420/85c7cde04091`,运行healthy;最终再核对Lastleg `#421/a7f680d69dd7` SUCCESS、运行healthy,本批排车回读仍为DELIVERING/APPROVED、版本15、2托2箱均已发。该提交仅在前述版本上调整仓储转运创建幂等;其他全量验收脚本仍属在途工作,不混入本批18项验收结论。上文“仍未完成”是各阶段中间状态,以以下条目对照及本次补验为准。
- 最终截图复核纠正第1项遗漏:此前只确认两表整体等宽,未发现称重图片表“#”列被均分拉宽。Admin `52045e5df25598ca4fe4b787e6802bfc516aabb7` 仅在审核模式将该列设为44px;56项相关检查通过,`#705` SUCCESS且运行镜像healthy,临时SCM已恢复。新待审样本 `NYEXX2610230343` 准备链231/231断言、131次HTTP通过;部署后实页量取箱规、称重明细、称重图片三个“#”表头均44px,证据为 `admin-weight-index-widths.json` 与原始1920×1080截图 `admin-weight-index-aligned-1920.png`。该样本只看布局,未再次提交审核;前一测量样本的重量修正/审批证据仍有效。此补验完成后才确认第1项通过。
本批条目证据对照(仅确认1–18及四端请求失败恢复,第19项不实施):
| 项目 | 验收依据 |
| --- | --- |
| 1、2、3 称重对齐、修改按钮、确认测量文案 | `NYEXX2610230343` 三个序号列实测44px;`NYEXX2610230193` 实页、1920×1080截图及审核后的HTTP回读。 |
| 4 已放舱关联取消柜号规则 | `D1829` 非ISO柜号正式关联成功;应用HTTP、DDL执行后结构及其余CHECK保留。 |
| 5 预录单命名及版本隐藏 | `D1922` 实页、原始1920×1080截图;内部并发版本及原文件名保留。 |
| 6 预约与货件自动带出、去重 | `PC202610230001` 维护实页,正式预约号/确认时间单行、两票货件均保留。 |
| 7 不可用车辆过滤 | 本车资源保留、其他派送中排车占用车辆排除,候选真实HTTP及直接检查。 |
| 8 三类图片必需 | 缺车辆或司机照片送审拒绝;三类证据齐全后审核通过。有效司机主档驾驶证可复用,预览缺陷已修复部署。 |
| 9、15 司机电话分列、各Tab创建时间 | 七个排车Tab DOM与实页核对;直接字段来自服务端创建时间。 |
| 10 四端失败不锁页面、删除强制重放 | Admin预计到港、Client创建/编辑、国内PDA拣货/照片/封签、海外PDA审核/照片真实失败与重新操作;直接回归保留在途防连点、权限、状态、版本和服务端幂等。 |
| 11 管理资料隐藏油耗图片 | 实页仅签收文件/装车资料,相关DOM与截图。 |
| 12 预计到港维护且放舱后可改 | `OB202610220017` 正式窄接口及实页修改成功,旧版本A0409;其他冻结字段未放开。 |
| 13 新增入库计划弹窗 | `WC202610230035` 1920×1080实页,约1160px宽及完整输入/底栏,查看后取消。 |
| 14 移除调整已有排车货物 | 智能排车实页及直接检查,无调整页签/能力;错误配货仍走现有取消重建。 |
| 16 调度审核样式 | `PC202610230001` 约1100px审核弹框截图,资料、预约、三类照片与按钮完整。 |
| 17、18 海外拣货样式、五类照片命名 | 原始390×848截图及2托2箱作业,五槽为装车现场/装车清单/发车前检查/驾驶证/回执,最终DELIVERING。 |
- 私有发布记录、HTTP报告及页面证据位于配置目录 `release18-20261022/`,包括 `r18-firstleg-1022-a.json`、`r18-return-1022-b.json`、`booking-supplement.json`、`admin-eta-network.json` 和预计到港截图;排车正式报告为后端 `reports/dispatch-loading-r18-dispatch-1022-b/report.json`。首次订舱详情截图尺寸1905×1072,只作辅助;错误恢复截图为实际1920×1080。
## 2026-10-22 逐托实收交接修复发布与 HTTP 验收
- Lastleg 修复提交 `c385b7543bf2039791b1107a910aa5c5a92269be` 已推送当前 `test` 分支。总控 `#716` 在回归过程中被管理员中止,不能计为完整模块测试通过;随后总控 `#717` / 单服务 `#414 SUCCESS` 发布同一提交,运行镜像 `c385b7543bf2` running/healthy。用户后续明确发布时跳过 Jenkins 测试,以本地定向回归加发布后 HTTP 验收为准;本轮未再触发构建。
- 通过正常公开 HTTP 新建独立 TEST FBA 20箱2托,完成国内测量、装柜及运输节点,生成 `IP202610220003`、预约 `YY202610220009` 和排车 `PC202610220020`。收货前原预排和预约分配均为10+10,两级审核通过;PDA实际点数9+11,确认入库后、任何出库拣货之前,原排车、原预约分配、实际库存都为9+11,真实已拣0。收货没有发生 ALLOCATE/PICK/SHIP;同键确认重放不改变版本、明细或库存流水。
- 随后真实 PDA HTTP 按两实托分别拣9箱和11箱,原键重放不重复扣减;上传本轮合成装车资料,显式装车完成进入 DELIVERING,实际SHIP流水9+11。自动出库 `CK202610220004`、派送 `DL202610220006` 均为2托20箱。合成照片与预约确认资料只用于TEST流程,不表示真实仓库扫描硬件或外部预约已验收。自建PDA账号已停用,最终核对会话已退出。
- 1920×1080 Admin 实页核对排车派送中、发车时间、关联出库与派送单、出库2托20箱并保存截图;出库详情第二实托按来源追溯显示2+9两行,物理托盘仍为11箱。未声明PDA浏览器页面完整验收。浏览器分步计时:读取21.09秒、元素点击21.33秒、结果验证21.08秒,句柄获取另约10秒;延迟在读取与动作调用中均出现,尚不能归因为业务接口慢。证据入口 `baiyue-firstleg/reports/receipt-nine-eleven-ui/summary.json`,截图及 `timings.json` 同目录。
- 原单 `PC202610220017` 最后只读回查仍为LOADING/version7/已拣9;两实托明细9+11,但历史预约分配仍10+10。本次未回填或重建原单,没有SQL、重置、清理库存、Gateway或Nacos变更;新收货链路修复不冒充历史单恢复完成。
## 2026-10-22 FBA先预约后排车发布与页面验收
- 用户授权 TEST Admin、Lastleg 发布及真实页面验收。Admin `#697` / `aac878c3d4300f02ab00826da7444321b1f4a4fa` SUCCESS,运行镜像 `admin-web-test:aac878c3d430` healthy。临时固定检出配置已恢复;随后其他批次继续发布时保留其配置和已上线改动。
- 总流水线 `#715` 曾发现新增前置校验误伤独立换标FBA来源,已在部署前停止。用户随后明确本轮仅完成普通入仓,保留换标/退货原流程;按来源类型收窄候选与草稿校验。最终版本 `86889d7e0ec2f30228ed4c5a6530d4aefbaf4bf9` 的13类119项定向检查通过,覆盖普通FBA选货、预约关联、共享额度、事务、版本、换标合托及取消、独立退货、公开接口合同;此前查询接口数量旧断言改为具体路径集合。复用有效检查结果,通过单服务任务 `baiyue-firstleg-lastleg-service #413 SUCCESS` 精确发布,发布时显式跳过重复测试;运行镜像 `lastleg-service:86889d7e0ec2` healthy。未宣称完整模块回归通过。
- 1920×1080真实页面验收通过本轮预约相关操作:无正式预约的普通FBA `ZY202610210008` 显示“暂不可排车”且移入车辆按钮禁用;已确认预约的在途计划 `WC202610220001` 可选入并生成 `PC202610220019`(1托1箱)。维护车辆的“关联正式预约”展示真实订单/入仓码、托盘、`YY202610220001`、当地时间及America/Los_Angeles;分配改0时提示完整分配且禁止保存,恢复1箱保存成功并重开回显。只读数据库确认原排车号、托盘及1箱分配保留,版本2、DRAFT/BEFORE_LOADING、真实已拣0;本轮未执行审核、拣货或发车,样本保留供核对。
- 原单 `PC202610220010` 已被其他操作取消,版本10、预约分配0行;本轮未恢复、重建或修改该单。已收货合成样本 `ZY202610220001` 选入时另遇既有运输实托占用A0409,保留失败事实并换用上述在途样本,不清理占用或推定全部收货场景通过。无SQL写入、Gateway/Nacos调整。私有发布记录和截图位于本机 `.codex/reports/dispatch-appointment-20261022/`,主要截图为 `unconfirmed-blocked.png`、`appointment-saved.png`。
## 2026-10-22 订舱 TEST 结构同步与页面验收
- 用户后续要求恢复预计到港并检查日历、入库依赖。已恢复新增/草稿录入、放舱摘要及前后端放舱必填和时间先后校验;草稿仍可留空。Admin `#702 SUCCESS` / `a041650ba18f`,镜像 ID `1189e42d1efa9c0dc4050e888072fe46ba6dc68ea72befaf655f6cd061b4832c`;Firstleg `#513 SUCCESS` / `310d86da8565`,镜像 ID `fb50f1d4b53c9ff08f912b5ff36c5b0c3e679c45ee7905e03d64b2be19655e05`,均 healthy。后端以当时已部署 `c5ac966ce9a1` 为父提交,仅叠加三份订舱源码/测试/OpenAPI,开发分支源码 `ef0f69184`;未夹入其他在途修改,Admin 原 SCM 配置全文恢复,未执行 SQL 或回填已有放舱数据。
- 本次前端 22 项、后端订舱和船期相关 32 项定向测试通过;TEST 1920×1080 实际录入、保存及刷新回显通过。原自有草稿 `OB202610220013` 预计到港保存为 `2026-11-15T10:00:00`、版本 1,默认委值保持。代码确认订舱 ETA 经关联柜次进入日历;海外到仓解析在无人工/计划冻结日期时读取同一到港来源加 2 天,入库计划沿用该日期。本轮未推进柜次及入库计划,未宣称完整业务链通过。证据为原目录 `ui-arrival-restored.png`、`arrival-restored-verification.json`;当前必填规则取代上次精简时的可选规则。
- 用户后续确认字段精简与默认值,并选择保留仓库、渠道功能、收进默认折叠的“作业配置”;其他红框字段及包装单位选择从页面移除,新增委值默认 `500 / 15000 / 68`、实值留空。预计到港改为放舱可选,既有计划值不覆盖。Admin `#700 SUCCESS` / `c3f7dcc6f1cd`,镜像 ID `d628181116291a45ae0939d416ae753ad646626290e3daaef7d4ce0b957bc833`;Firstleg `#512 SUCCESS` / `c5ac966ce9a1`,镜像 ID `d77523190c3f2db99726af959fcf4d548add69cf026bb81251f3a2c6a42b9d85`,均 healthy。后端以当时已部署 de96e47d 为父提交,仅叠加本轮四份订舱文件;开发分支提交 `9e0266b7c`,未夹入其他批次未部署改动。Admin SCM 原配置全文恢复,本轮未执行 SQL。
- 本轮前端 28 项、后端订舱 26 项定向测试和前端类型检查通过;真实 TEST 1920×1080 新增页已核对字段移除、默认值、作业配置收起/展开,页面保存草稿 `OB202610220013` 后默认值与服务端读回一致,实值和预计到港未填写。本轮未再次推进放舱,预计到港可选由前后端定向测试覆盖,不据此宣称完整链路或内嵌 PDF 显示通过。证据位于原目录的 `ui-booking-simplified-{new,saved}.png` 与 `simplified-form-verification.json`。
- 后续流程断开修复:放舱状态已保存但刷新清除临时预览标记,原实现导致第 2 步灰色、第 3 步完成;现按已放舱事实保留托运单阶段通过,状态明确为“可重新预览 / 打印”,不伪造预览或打印记录。Admin `#699 SUCCESS`,源码 `a86b19604d57`,运行镜像同标签 healthy、镜像 ID `f128c99f0aae19dfae5aa6ddd4d355b0dfc873c7f390cd1eba4492b49c2a55b8`;原 Jenkins 配置全文恢复。两份定向测试 24 项通过,1920×1080 页面刷新后第 1~3 步连线连续、第 4 步保持当前,截图 `ui-workflow-continuous.png`。本次仅前端逻辑,未写业务数据或变更后端;内嵌 PDF 显示未关闭。
- 用户授权 TEST 发布、真实页面验收,并随后单独授权精确 SQL。初次保存 S0500 的根因是 `package_unit` 等新增字段未同步。已执行仅涉及两张订舱表和一个冻结触发器的结构修复:新增主表 9 列、关系方 2 列,两项条款扩至 64,增加货物 CHECK,替换为已放舱仅允许实货量及审计元数据按版本更新的触发器。执行前断言旧结构完全匹配,执行返回 0;后置核对 `9 / 2 / 2 / 1 / 1` 通过。未删除业务数据、重置数据库或重新执行全量初始化。
- 真实页面核对发现数字组件原生禁用状态已变化,但 `aria-disabled` 仍保留挂载时值。修复提交 `d4921057` 已推送当前分支;以当时已部署 `#694` 为基线,仅两份订舱文件组成精确发布提交 `3dca7d9d600499db444657cde4e1c8268012150e`,经 Admin `#695 SUCCESS` 上线,镜像 `admin-web-test:3dca7d9d6004` healthy;Jenkins 原配置按 UTF-8 全文核对已恢复。Firstleg 复用 `#511` / `de96e47d7494bbe830a36e5d0324431bf95639d5`,本次未重复发布后端、Gateway 或其他服务。
- 保存后实值回显空白也已复现为数字组件输入缓存问题,刷新能恢复服务器值。已补回归并按保存成功版本重建实值控件;最终源码提交 `24ebfcf2e1b683388af5baefb19df8f17fdd44e2` 叠加当时最新已部署 `#697` / `aac878c3d4300f02ab00826da7444321b1f4a4fa`,保留其他批次已上线内容。Admin `#698 SUCCESS`,生产类型检查、Vite 构建及部署完成;实际镜像 `admin-web-test:24ebfcf2e1b6`、镜像 ID `828757d4b900a39c60c640dd81e4a61d16a1e0372f4fc0bc91351d158f9d0f37` healthy,Jenkins 原配置按 UTF-8 全文核对恢复。未创建或切换分支/工作树。
- 按用户本轮授权,AI 在 1920×1080 真实 TEST 页创建并保存 `OB202610220011`,成功留在详情;初始仅第 1 步高亮,保存后第 2 步、成功取得托运单后第 3 步、页面确认放舱后第 4 步,补实保存并分别取得两类 PDF 后四步完成。刷新后保留已保存/已放舱/实值,重置本次页面预览标记。可编辑白底与蓝色聚焦、真实禁用灰底、船公司选择及仓库—渠道联动已核对;运输及委值放舱后只读,实值可编辑。完整长字段展示与所有权限场景不据此推定通过。
- 测试前置运输资料和合成附件由公开接口准备;保存草稿、确认放舱、补实和两类预览入口由真实页面操作。未填补录原因时版本与实值未写入、输入保留;填原因后实值 `480 / 14320.125 / 65.321` 成功保存,版本 3→4,委值 `500 / 15000 / 68` 保持,历史含本轮原因。只操作本轮创建订舱,未改其他订舱或主数据。
- 最终版本真实页面回验:将件数修正为 481 并填写新的 TEST 原因,保存后无需刷新,三个输入立即显示 `481 / 14320.125 / 65.321`,原生与辅助禁用状态均为 false;服务端版本 5、委值仍 500,共两条实货量补录/修正历史。最终确认件 PDF 已下载并渲染核对为对应实值。截图 `ui-actual-final.png`、`ui-progress-final.png` 与脱敏服务端记录 `final-booking.json` 一致;回显问题已关闭。
- 两类 PDF 下载并渲染核对通过:托运单走委值,确认件走实值,未补实确认件显示“—”,无委值回退;均为 A4 单页。页面弹框打开、关闭和重开及取得文件后的进度标记已核对,但 Codex 内置浏览器的内嵌 PDF 区域空白,显示验收未通过,也未实际打印。不能将文件生成或截图外渲染等同浏览器显示正常。
- 放舱页与流程逻辑两份定向测试最终 23 项通过,修复前两类缺陷均有失败回归证据;其余未受影响检查复用前批结果,未宣称全项目测试。脱敏请求、SQL 执行/后置核查、发布记录、两类 PDF 与截图在本机 `C:/Users/BY-OY/.codex/booking-ui-acceptance-20261022/`。
## 2026-10-22 入库计划预计到仓带值修复发布
- 用户授权发布 TEST Admin。本轮提交 `29f4791b66518561f09c515136dee09339bc73b2` 已推送 `release/test`,以当前成功版本 `3e77c3976e6de9d0d703aea7dc1ee196fe94f30d` 为基线,只包含入库计划弹框、柜级到仓查询公开出口与对应行为测试三文件。弹框每次打开重新读取柜级权威到仓结果,手填时间、默认到港当地日期加两个自然日及已有计划冻结日期统一显示,读取中、失败、缺失或不一致时禁止提交;不改后端规则。
- `admin-web-test #694` SUCCESS,实际检出与镜像标签分别为上述完整提交和 `29f4791b6651`;构建包含生产类型检查与 Vite 构建,容器 Healthy、健康端点返回 ok。独立读取线上入口 `index-CuqIIHCB.js` 及 `LastMileOrdersView-Bh-OZx3u.js`,确认新加载错误、冻结时间提示和默认推算标记已上线。Jenkins 临时 SCM 标签已恢复 `release/test`,按 UTF-8 原文核对完整配置正文一致。
- 本次到仓取值、提交门禁及旧请求隔离八项定向行为测试、日期展示七项测试和受影响源码与测试类型检查通过;行为测试整文件仍有旧操作入口用例失败,未宣称整文件或全量回归通过。仅发布 Admin,无后端、SQL、Nacos 或 Gateway 发布,无业务数据写入;真实业务弹框操作与截图待人工确认。发布及线上资源证据在根 `.codex-temp/inbound-arrival-release-20261022/`。
## 2026-10-22 排车取消、驳回与失败后继续操作专项
- 用户授权 TEST 发布与真实 HTTP 验收。Admin 提交 `090431b40927b8f4f7770d4564dd23a463c0cf48` 已通过 `admin-web-test #692` 发布,镜像 `090431b40927`、镜像 ID `bc3825ed3ae3ee7593be6c8b0b2519b912e80ee3f3a2835d8e13e36e65925232`,running/healthy,健康端点返回 ok。复用已发布的 Lastleg `#411` / `e60890e63e36fd48ea601ecc1e9f95b1aa49d2b9`,再次核对镜像一致且 healthy。前端失败请求仅保留执行中的忙碌状态,结束后释放,清除旧会话缓存;部署资源已无“原请求结果尚待核对”提示。
- Admin `#691` 因浮动 Node 基础镜像更新后下载停滞而主动中止,未替换容器;`#692` 固定上一成功构建使用的 Node 镜像摘要后完成类型检查、生产构建及部署。临时构建参数已移除,Job 配置与操作前原文逐字核对一致。
- 本轮使用固定验收客户及现有海外 PDA、空闲合成测试车辆司机,通过正式接口实收入库两票各一托一箱;排车 `PC202610220004` 覆盖缺运输计划拒绝、过期版本拒绝后新请求成功、调度驳回、PDA 理货驳回。两类驳回均真实命中 BEFORE_LOADING / VEHICLE_INFO 列表,修改车辆资料后可重新提交并完成两级审核;零扫码显式退回后正常取消,关联车次取消,库存余额、库位明细及来货单完整快照不变,原两托重新成为可排候选。
- 使用上述同一批货物及原预约逐批分配重新建立 `PC202610220006`,原车辆司机分配成功,再次取消且货物快照不变;空单 `PC202610220007` 取消成功。首次重新建单请求漏带预约批次分配,被 A0409 正常拒绝;保留失败请求证据,回查原预约当前版本后补齐正式分配,未重做入库或通过 SQL 绕过校验。所有本轮排车最终取消,登录会话退出;未修改用户重下的 `PC202610210022`,无 SQL、删除、重置或新增主档。
- 本地前端 11 个受影响文件共 247 项测试通过,取消后端两类 40 项定向测试通过;未运行全量回归。真实 HTTP 证据为 `baiyue-firstleg/reports/dispatch-loading-exception-20261022-1030/report.json` 和 `dispatch-loading-exception-20261022-1030-resume2/{report,summary}.json`,原失败事实保留。无实托 PLAN 取消复用本文件下节已发布版本的 `PC202610220003` HTTP 证据;本轮新样本为实收货及空单。HTTP 与组件测试不替代页面截图或 Android 真机验收,本轮未宣称全部排车异常分支通过。
- 用户追加要求真实页面验收并指定 1920×1080、100% 缩放后,Admin 已发布页面通过智能排车重新选择本轮 `ZY202610220001/0002` 的两托两箱,生成 `PC202610220008`。实际触发维护保存缺车辆的 A0400 后,原弹框可继续选车辆司机、填写运输时间并提交;调度实际驳回后自动返回车辆信息,显示退回原因,可修改资料重提并审核通过。
- PDA 使用本机既有 H5、既有绑定洛杉矶仓的测试账号连接 TEST Gateway,实际打开同一排车并驳回理货审核;后台重新查询车辆信息显示同单与理货退回原因,实际维护修改、重提、调度通过后,PDA 再次审核通过,进入装车中且真实已拣仍为0。随后 Admin 页面执行零扫码退回装车前及取消 `PC202610220008`,原两托重新可选。
- 在原两托新草稿中仅对验收标签页模拟断网,生成失败后显示“本次排车操作失败,请重试”,货物选择保留、生成及取消等按钮可用;页面控制曾超时,恢复连接后明确执行在线网络设置,再核对原失败状态。在原弹框直接再次点击生成成功得到 `PC202610220009`,未退出、清缓存或重放旧请求;新单通过页面复用原车辆和司机并保存成功。未将控制连接延迟当作产品接口耗时。
- 最终通过正式 HTTP 核对原单已取消、新单为同两托且车辆司机保存正确;以当前版本正常取消新单释放测试资源,再从真实页面详情确认“已取消”。两单均无真实拣货、出库或派送,库存余额、库位明细及来货单与最初验收前完整快照相同,两托再次可排,车辆司机无占用,PDA 验收会话已从页面退出。本轮无源码修改、SQL、删除、重置、新账号或主档;未操作用户原排车单。
- 页面截图、失败后 DOM、最终 HTTP 回执及汇总保存在本机指定凭据目录下 `dispatch-ui-20261022/`;最终验收截图均为1920×1080,浏览器 scale=1。范围是上述取消、驳回重提、维护及网络失败恢复,PDA 为 H5 真实页面,不替代 Android 真机及未执行的其他异常分支。
- 用户继续要求先 HTTP、再页面覆盖当前排车异常清单后,新增主流程 `PC202610220011` 以两票真实 TEST 实收、两个目的仓预约执行94项 HTTP 场景,全部通过:权限边界、空值/过期版本/重复来源/草稿占用、移货恢复与路线、资源占用、两级驳回重提、零拣货退回、取消及终态限制、错误/超量/重复拣货、部分未核平装车拒绝、照片分类/版本/引用、五图齐全自动派送、三类异常登记、签收及资源分别结束。空单 `PC202610220014`、后续资源复用单 `PC202610220015` 均正常取消。原验收脚本对耗尽库存的详情 GET 断言不适用(当前返回A0404);保留原报告,接续使用库存列表、库位和流水核对,没有把此脚本断言当作业务失败或丢失实际拣货事实。证据为 `baiyue-firstleg/reports/dispatch-loading-all-exceptions-20261022-{r1,resume1}/`。
- 随后以独立单 `PC202610220016` 完成35项1920×1080、scale=1页面核对:必填移货原因、移出再加入原单、真实并发版本冲突后保留所选车辆司机并同弹框重试、调度及PDA空原因驳回/补原因驳回/回车辆信息/修改重提、错误扫码、超量及重复拣货、实际拣货后取消和退回入口收起、未拣齐不可装车、装车确认后补齐五图并替换、自动派送、空异常类型校验、拒收/部分签收/车辆异常及测试图片登记。三类异常记录保留,两个目的仓签收文件均从页面上传并保存,最终真实页面显示派送完成。测试脚本曾误用“移除托盘”匹配实际“移回托盘”按钮,保留断言修正记录,核对正确按钮及1/30托后通过;未作为产品缺陷处理。
- 通过正式接口结案并分别结束该单车辆司机任务后,原资源创建两托两箱的 `PC202610220018` 成功;页面实际空原因取消报错后补原因取消成功,智能排车重新列出原两票货且可移入新车辆草稿,随后关闭草稿。最终 HTTP 确认取消货物的库存、库位、流水、来货单完整快照不变;已派送货未发生重复扣减;车辆司机均空闲,PDA测试会话正常退出。以上本轮共新增5张排车(3张HTTP主/辅助单、2张页面主/取消单),未操作用户单据、执行SQL、删除、重置或新增账号主档。
- 扩展页面证据及最终库存资源回执在本机指定凭据目录下 `dispatch-all-ui-20261022/{ui-report,prepare-cancel-http,final-http}.json` 和5张截图。验收开始核对运行镜像为 Admin `3e77c3976e6d`、Lastleg `de96e47d7494`;共享环境后续其他批次发布照常保留,本轮未改源码或重复发布。零拣货页面退回与模拟断网后同弹框重新生成复用上文PC0008/0009证据,扩展轮新增当前版本冲突恢复证据;不据此宣称全部网络故障组合、所有货源排列或Android真机均已验证。
## 2026-10-22 本批32项修复发布与验收(已暂停,转人工验收)
- 本批固定源码:Backend `2c3435adafe48c8e97ef145fa301eaa11ea230be`,Admin `2e26477db523cebf23db8c28f8a4dc39cb0df1bd`,Client `7adb97d145e28e61eb391ff7609aecdb2fda7e62`,国内PDA `5fcc51d73c2ba48f109ca513831f4a5f816dbb92`,海外PDA `9c2f0a54ec1e9147db7cd434455e963e8c4cb22a`。在先取消专项与验收脚本工作树差异均保留,未夹入本批提交;远端新增尾程列表需求保留于合并后的开发分支,本次未发布该需求或Order。
- Firstleg `#510`、Finance `#136`、Lastleg `#409` 均SUCCESS,运行镜像标签均为 `2c3435adafe4`;复用本地定向测试,CI仍编译生产/测试源码并打包,未宣称全量测试。Admin最终 `#690` SUCCESS、镜像 `2e26477db523`;Client最终 `#440` SUCCESS、镜像 `7adb97d145e2`。已核运行镜像与目标提交一致,五个服务均running/healthy;前端任务SCM及lightweight配置已恢复原值。
- Client `#439` 在lightweight检出阶段失败,未替换容器;改用完整检出后完成 `#440`。Admin `#689` 曾因过早恢复SCM使agent工作区取到合并提交,随后保持精确pin至构建结束,`#690`已替换为本批目标镜像。保留上述事实,不把读取Jenkinsfile的SHA当作实际构建SHA。基础Node镜像下载较慢不构成代码检查通过或失败依据。
- 国内/海外PDA H5分别使用 `5fcc51d73c2b`、`9c2f0a54ec1e`,均running/healthy。普通文件归档、传输SHA及远端首页SHA已核对一致;国内首页 `34e9fc9fcef86d1fd7d375b0613df4babab720a9eb2c186ab59901f119625c17`,海外首页 `080d396928d6ccf1f92dd7d124c6bd0e605b776db24722de4045eb0abab39223`。仅发布H5,appResource/app编译不等于APK/WGT发布或真机验证。
- 真实HTTP已验证本批空排车 `PC202610220002`:MASTER车辆照片保存后引用及文件内容保留、8项维护资料往返保存和空值清空、原键重放不增版本、错误附件分类被明确拒绝、实际发车时间未被改写;空排车最终取消且登录会话退出。此前选到已被其他车次占用的车辆时接口正常拒绝,未生成排车;确认结果已知后改用只读核对为空闲的主档。未代替此空单提交调度审核,不据此声称审核页面已验收。
- 国内装柜完成真实HTTP通过:本批订单 `FL202610220001` 的1箱作业请求约88ms受理,约492ms观察到任务及完成命令最终COMPLETED;250ms串行观察,原operationId重放保持命令身份、任务版本、明细、操作历史和库存结算不变。首次测量审核因验收脚本使用旧主单版本而A0409明确拒绝,按权威measurement.inboundVersion接续同单,未重建订单或重做称重。证据为同目录 `loading-http.json`。
- 费用调整真实HTTP通过:应收、应付均使用同一费用项目创建两条独立来源100/100,只调整首条为120并审核;业务与Finance当前各2条合计220,历史3条,原100/调整120/另一100及对应版本操作日志一致。验收脚本曾仅按nullable sourceFeeId过滤而漏掉原v1,修正取稳定来源身份后只读接续原应收,不重发已成功写入;应付随后一次完成。未覆盖无公开新增来源入口的Finance手工费用调整,未机械重放无幂等合同的Firstleg调整。证据 `fees-http.json`。
- 尾程编号与默认日期真实HTTP通过:本批生成 `WC202610220001`,符合WC+yyyyMMdd+四位流水;原柜默认权威plannedDate为2026-10-28,未执行人工覆盖,直接转换唯一入库计划后plannedArrivalDate同为2026-10-28;权威查询planCount=1、isDefault=false、冻结日期不变。证据 `overseas-http.json`。预约来源正确阻断未开船货物,正按同一自有TEST柜补齐正式模拟前置,不借用其他单据或改数据库状态。
- 预约登记发现并修复未排车客户被空排车锁范围拒绝的真实缺陷:仅FbaAppointmentExecutionAdapter及直接测试29增1删,8项定向测试和独立审查通过;原发布基线2c3435ada叠加该修复的精确候选 `74f510a49b8a378b377f94c92f007a2b937f6744` 经Lastleg `#410` SUCCESS,运行镜像 `74f510a49b8a`、镜像ID `ae277a635af099220ec373ddbb4202491eb2fa184886d9677180927edcb1ea51` healthy。其余六个运行镜像不变;开发分支合入候选祖先并保留远端新需求与本地在途差异,不发布无关HEAD。
- 同一原TEST柜通过正式报关/自动离仓/人工模拟节点仅推进到DEPARTED_ORIGIN_PORT,原因明确SYNTHETIC_TEST,不代表真实报关或开船。登记下一步正确拒绝LGB8测试主档旧UTC-8;按现行WarehouseSaveNormalizer及已接受公共CSV,通过正常Warehouse PUT仅修正该既有主档为America/Los_Angeles,其他语义字段核对一致,未新增仓库、未SQL。保留所有明确拒绝回执后,用原预约批次、原key/body完成SUCCESS登记,确认号与时间窗读回一致;不代表第三方真实预约,客户原预约号自动带入按用户要求排除。证据 `appointment-fix-deployment.json`、`appointment-timezone-data.json`、`appointment-http.json`。
- 后继实际维护/调度审核通过:自有PLAN排车 `PC202610220003` 使用原 `IP202610220001` 和SUCCESS预约,完整8项维护字段、关联订单、白底上传卡片均已页面核对;由维护弹框正常提交审核,权威状态DISPATCH_PENDING/version4。实际审核弹框加载同一自有VEHICLE图片及MASTER驾驶证图片,均核到非零naturalWidth,未审核通过或推进实际仓库作业。准备取消时发现已发布版本错误复验未实收PLAN装车资格;将既有取消专项四文件88增1删精确叠加74f510,独立审查及两类40项定向测试全部通过,Lastleg `#411` SUCCESS,最终提交 `e60890e63e36fd48ea601ecc1e9f95b1aa49d2b9`、镜像ID `fbd61a6577b72ea9e837b12bb5538268976f0e7d34aa5fa0e8be39734bc68605` healthy,其余六镜像保持不变。随后原PC3及 `CT202610220003` 正常取消,车辆/司机occupiedTripNo均为空,0实际拣货/出库/派送;证据 `dispatch-cancel-fix-deployment.json`、`dispatch-ui-cleanup-http.json`。
- 内置浏览器已恢复;Admin/Client均实际1920×1080、100%。已核订单节点、其他页签顺序、新增费用白底与文字操作、测量申报底色/无更多、审核总览与称重表格、完整车辆维护及审核照片、柜次号副文案移除、柜详情指标/提示删减、人工补录白底、订舱草稿创建时间/放舱白底、关联白底/输入边界、智能装柜加入白底/提示删减、预装备注白底/输入边界、预装独立事件名称、日历柜次号、入库单查看预约白底、既有预约直接确认字段,以及客户端头程标签/按钮分行。货柜/订舱/日历一个明确诊断窗口58个数据请求,最大342ms;有会话过期刷新,未将401算作业务成功或将工具延迟算作产品延迟。更早请求计时缓冲区已满的记录只作局部证据,不据此宣称后续零请求。
- 用户现明确要求停止自动操作,改由人工验收;本批不标全量验收完成,不再自动修复、部署或推进业务。待人工重点核对客户端退税资料弹框、PDA双端390×848页面/上传/完成交互、推送PDA弹框及其余未完整覆盖场景。当前自有测试柜 `D1818` / `TSTU3723017`,订舱 `OB202610220002` 已在页面正常放舱并关联;预装 `LP202610220002` 已在页面加入退税测试单 `FL202610220003` / `ZBYHK2610220003` 的1箱,尚未选择PDA操作员、未确认推送、未领取/拣货/装柜完成、未报关。页面停在该预装详情的操作员下拉框,Admin/Client页保留供人工接手。前一张买单UI种子 `FL202610220002` / `ZBYHK2610220002` 仍待分柜。退税种子审核曾明确A0409拒绝版本4;原拒绝及INTENT保留,独立后缀双读一致的新版本后正常审核并完成费用/客户确认,未重建或重复测量,不把原拒绝回执改写为成功。
- 本地海外PDA仍为原5176服务、国内仍为原5175;未停止服务、未启动准备好的5176回环代理,未切换端口或改manifest。本轮未执行SQL、重置或新建公共主档;仅前述既有LGB8主档经正常API修正时区。部署/HTTP报告入口为 `baiyue-firstleg/reports/repair32-20261021/`;截图及详细浏览器请求记录保存在本机指定凭据目录的 `repair32-ui/`,不将客户与环境敏感信息入库。人工结果仍在本节接续。
## 2026-10-21 TEST 客户保留名单清理与恢复
- 用户明确要求删除其他客户,最终保留 `TEN2097708157074210818`、`TEN2097867276078874626`、`TEN2097882345072295938` 三个客户。核对 TEST 入口、数据库身份和编号映射后,20:17(Asia/Shanghai)单事务删除 738 个客户、761 个专属客户账号及相关资料、配置、资金账户、客户销售报价和安全关联,共 30 张表 59,278 行;904 个平台账号及平台主体保留。公共仓库、车辆、自营数据、独立审计、物理文件和编号序列继续保留。
- 维护前备份 30 张受影响表,7 个 SQL 文件共 90,508,929 字节,完成标记及 SHA-256 均保存于本机凭据目录下独立备份批次。55 项保留内容摘要前后一致;全部外键检查通过,未关闭外键或修改触发器。定向撤销已删账号的 82 组 Redis 会话集合及 200 个仍有效会话键,共删除 282 个键,复核待删账号会话集合和有效键均为零。
- 首次维护复核发现保留客户新建了 8 票订单,保护检查在任何删除前退出并恢复服务;将这些订单及关联数据纳入完整性摘要后重试成功,新增订单完整保留。清理期间暂停 13 个后端服务造成短暂 502;原有容器和镜像均已恢复,13 个服务全部 running / healthy,未发布新版本。
- 恢复后实际登录及客户列表 HTTP 200,客户总数精确为 3、编号与保留名单一致。平台、客户、国内 PDA、海外 PDA 四类账号登录及退出成功,36 个列表与辅助查询请求正常;数据库范围、保留摘要、关联与 HTTP 合计 84 项核对通过,0 失败。证据唯一入口:`baiyue-firstleg/reports/customer-cleanup-20261021/summary.json`;此前列表巡检确认的空关键词接口边界问题见下一节,本次客户清理未修改该接口。
- 另经客户网页公开入口补验 Nginx 代理这一跳:配置中的保留客户真实登录、头程订单列表、工作台列表和退出全部 HTTP 200 / 业务码 200;平台和客户网页容器的匿名 API 请求均按预期返回 401,未再出现 502。本轮重启后无需再次重载 Nginx;单独证据为同目录 `client-web-entry-verification.json`。
## 2026-10-21 清库后列表只读巡检
- 使用 TEST 平台、客户、国内 PDA、海外 PDA 四类账号,经统一检查入口执行真实 HTTP,只读核对 203 个不同接口(平台 149、客户 41、国内 PDA 3、海外 PDA 10),覆盖列表、统计、选项及辅助查询。有效请求 229 次,227 次成功;2 次失败为同一接口空关键词边界复现。最慢响应 3,156 ms,未超过前端 15 秒超时;本轮无业务写入,自建登录会话均已退出。
- 唯一确认的接口错误:客户历史订单候选 `GET /api/merchant/v1/last-leg/relabel-applications/historical-orders`,有效仓库且不传可选 `keyword` 时 HTTP 200 / 业务码 `S0500`。服务端 `RelabelApplicationService.historicalOrders` 无条件创建 AND 分组,空关键词跳过内部条件后生成 `AND )`,服务日志确认 SQL 语法异常;带非空关键词的对照查询正常返回空列表。本轮仅检查,未修复或部署。
- 当前页面调用链为仓储转运选择库存来源,`selectTransferInventory` 对空值提前返回,调用时传入非空入仓码,因此上述边界错误不等于当前页面必现错误;其余按页面调用参数执行的已测请求正常。初始探针缺筛选参数、国内 PDA 前缀不完整等已纠正,不计为产品故障;未挂载旧模块和无调用助手亦不计为当前页面故障。
- 证据入口:`baiyue-firstleg/reports/list-requests-20261021/summary.json`,保留各批次原始报告和错误日志摘录。清库后无父单据的订单、柜次、账单、排车及退货明细子列表未重新造数验证;未执行页面截图或交互验收,不宣称全场景通过。
- 后续用户实际登录发现客户网页入口 502:此前 HTTP 矩阵走配置中的统一 API 入口,未覆盖客户网页 Nginx 这一跳。20:08 核实客户账号/成员/客户均 ACTIVE 且未锁定,客户 Nginx 的失败上游地址已不同于当前 Gateway 容器地址,日志为连接被拒绝;静态 `/healthz` 正常不代表 API 代理可用。20:09 在配置语法检查通过后,仅平滑重载原 `client-web-test` Nginx,容器和镜像未变,未改密码或业务数据。经客户网页实际入口用配置中的 TEST 客户账号复验登录、头程订单列表、工作台及退出均 HTTP 200 / 业务码 200;用户指定账号未提供密码,未猜测或代其登录。证据为同目录 `client-proxy-recovery.json`。后续 Gateway 地址变化仍须覆盖此前遗漏的网页代理检查,不能把此次重载视为已发布自动刷新 DNS 的配置修复。
## 2026-10-21 TEST 业务数据清理完成
- 用户明确授权清理全部客户的头程、海外仓、尾程及车队业务,资金记录和实际余额归零,保留基础资料、授信配置、自营数据、独立审计和物理文件;订单自身状态与作业历史随单清理。执行前核对 TEST 环境标记、数据库身份与测试入口指向,并暂停 13 个在用后端服务。
- 19:37(Asia/Shanghai)事务提交:351 张业务表清空 660,376 行,按业务类型白名单删除导出任务 683 行及关联 Outbox 38 行,合计 661,097 行。114 个资金账户释放实际余额、冻结和授信占用,可用余额按当天有效授信重算;保留全部授信额度和有效期。释放国内库位 98 个、海外真实库位 39 个、托盘 1,742 个,并重置预约扫描协调状态;停用、报废资源、托盘库位关联及车辆主档保留。
- 提交前核对 117 张保留表行数一致,115 项保留内容及混合表配置摘要一致,外键孤儿记录前后均为 0;客户、账户权限、仓库、报价、编号序列、人工船期、车辆运维、通知、自营采集、独立审计、文件元数据和物理文件均按范围保留。20 个删除保护触发器仅在停写期间临时移除,随后恢复并核对全部 64 个触发器定义一致。首次执行因 MySQL 默认库要求报 1046,事务回滚且触发器恢复后修正重试,首次未删除业务记录。
- 涉及变更的 359 张表已保存为本机凭据目录下独立备份批次,共 7 个 SQL 文件、475,359,482 字节,完成标记和 SHA-256 校验通过;恢复定义与操作记录随批次保留。19:41 复核全部 351 张业务表仍为空,资金及资源占用校验通过,原 13 个后端容器均 running / healthy、镜像保持不变。证据入口:`baiyue-firstleg/reports/business-reset-20261021-live/execution-verification.json`,其中记录备份位置与校验值;此前真实 HTTP 单据样本保留为历史验收证据,后续业务回归需重新造数。
## 2026-10-21 当前排车发布内部散板需求
- 用户明确授权单字段 SQL 及 Lastleg、Admin 提交部署。仅向 TEST `baiyue_lastleg.ll_dispatch_order` 新增 `publish_looseboard_demand TINYINT(1) NOT NULL DEFAULT 1`,执行前确认列缺失,执行后核对类型、非空、默认值和中文注释;未执行业务回填或数据重置。源码及单独执行入口为 `lastleg-service/src/main/resources/db/dispatch-capacity-demand.sql`。
- Lastleg `baiyue-firstleg-lastleg-service #407` SUCCESS,精确提交 `e2ad7857b421ef0891da7e280ee89cfd733837da`,运行镜像 `e2ad7857b421`、镜像ID `sha256:33736a33b496666efda2f884f678166c5dd8b006a9e2d3cc58f2df5365f62057`,running / healthy。本次 `SKIP_TESTS=true`,复用本地定向验证,仍编译生产及测试源码并打包,未执行全量测试。
- Admin `admin-web-test #685` SUCCESS,精确提交 `875d2b2b04550633017b246bd066aa50c50b60d0`,运行镜像 `875d2b2b0455`、镜像ID `sha256:11c9ff850b6f5677b2eacc179c62d261745804a2ae04b5ed1f641e8863a9fbdf`,running / healthy,健康端点返回ok,已确认新需求池页面资源存在。前序 #684 在构建阶段因预约建单及两份业务夹具缺少新增字段失败,未替换容器;补齐三个直接消费者并通过预约排车25项定向复验后发布 #685,保留原失败事实。
- 本地前端8文件115项、装车弹框21项、预约排车25项定向检查通过;受影响类型检查与发布构建通过。后端需求池持久化、装车/照片流转、版本及幂等、平台权限、Schema/OpenAPI及网关合同定向检查通过;未运行全量测试。真实HTTP只读复验:平台需求池返回28条当前排车,分页首屏20条,排车详情发布状态一致,匿名401、客户账号403。
- 需求池数据及边界统一见[当前页面范围](海外仓业务/内部拼车需求池首版开发契约.md#当前页面范围2026-10-21)。装车和照片先后顺序的自动派送以定向持久化用例为依据,本轮未代用户执行真实装车、照片绑定或派送写入;1920×1080、100%页面视觉仍待人工截图确认。
## 2026-10-21 原预排托盘按实收箱数拣货修复发布
- 用户授权 TEST Lastleg 发布;`baiyue-firstleg-lastleg-service #405` SUCCESS,精确提交 `ae361879e5f1e9647b7ae35047e9a553a1935f34`,18:01 已确认运行镜像 `ae361879e5f1` healthy。原计划估算 10+10 不再阻断实收 9+11 的原单拣货;规则见[排车列表统一作业改造契约](海外仓业务/排车列表统一作业改造契约.md)。本次没有执行 SQL 或真实拣货、装车写入。
- 前序自动流水线 `backend-java #711` 使用 `1ea7b4ff12c1`,Lastleg 汇总 3280 项中 1 failure、1 error、11 skipped,两处均为已移除操作入口的旧断言,未部署。后续提交已修正;同版本本地统一检查入口验证 16 类161项全通过,涵盖后续提交直接影响测试及托盘实收回归。#405 复用此结果,跳过重复测试执行但保留生产及测试代码编译;本轮重复排队的 #403、#404 已取消。
- 发布后从已登录本机 H5 只读核对 `PC202610210018`:两托分别返回计划/可拣数量 9、11,已拣均0,阶段 `LOADING`、版本5;选择首托默认9箱且真实拣货按钮可用,未实际提交。H5 随后按用户要求将拣货与装车拍照分为两个 Tab,40项排车定向测试通过,当前本机页面已验证切换和拣货草稿保留;不据此宣称 Android 包已发布。
- 用户实际提交后暴露发布前实际库结构核对遗漏:TEST `ll_dispatch_order` 缺少源基线与海外空库基线均已声明的 `exceptions_json JSON NULL`,`saveState` 报 Unknown column 并回滚;此前本地 H2 使用完整基线、线上只读验证不能证明写入可用。用户单独授权后,仅执行 `ALTER TABLE baiyue_lastleg.ll_dispatch_order ADD COLUMN exceptions_json JSON NULL COMMENT '派送异常登记记录及图片引用,不改变派送及库存状态'`,执行前确认缺失、后确认 JSON/可空,未重新发布 Java。随后从原 H5 恢复入口以原幂等键重试首托9箱,真实提交成功:原命令查询 `PICK/APPLIED`、版本6、已拣9;首托9/9且可用0、第二托0/11且可用11,页面待处理请求已清除。未提交第二托或装车完成。此条补齐首托真实写入证据,不代表全单装车/派送全流程验收。
- 同日按用户现场反馈取消装车逐托必填重量、体积、托位,服务端按已扫码实托去重计数并留存已有实测,缺失保持未知且不阻塞装车;保留未拣齐、来源/版本变化、已知超载及原键防重。TEST Lastleg **#406 SUCCESS**,精确提交 `632d35faafde104171fe0dbdbdae8bcd11e93dd3`,运行镜像 `632d35faafde` healthy;发布耗时108秒,复用本地9类85项定向测试,仍编译全部生产和测试源码。仅发布本次修复,不含同期其他任务散板需求字段;未执行额外SQL。
- 本机PDA装车弹框已改为标题与单号分行、托/箱数量摘要、等宽取消/确认按钮,无逐托输入;PDA API/页面60项与照片7项、Admin确认/照片相关57项、追加照片成功预览与车次未知测量读取19项、受影响类型检查及HTTP脚本离线合同84项通过(部分集合重叠,不合计为独立总数)。当前单由用户自行完成第二托,发布后只读核对仍为LOADING、version7、9/9+11/11、装车资格允许,未替用户执行装车确认。
- PDA实际上传的明确标识测试图已保存为第一槽;Admin鉴权GET可读当前5张照片,第一槽PNG为19505字节,SHA-256与原上传文件完全一致。Admin成功图片缩略图/大图属性和只读权限通过组件测试;未声称Admin人工截图验收。首槽仍为测试图片,正式使用前需用户替换为真实装车照片。
## 2026-10-21 到港事实来源 review 修复与验收
- 已关闭下文清关提柜日期一致性修复的后续 review 边界:Firstleg 柜级 `arrivedDestinationPortAt` 与预约日历统一按 `observedAt`、事实记录顺序降序取最新非空实际到港事实,后续观测修正为更早日期时不再被历史最大时间覆盖;其他船节点推进规则保持。业务规则唯一入口为[船节点时间语义](海外仓业务/船节点标准化契约.md#3-时间语义与状态推进)。
- 新增真实 Mapper 的 H2 回归先在旧实现失败,再于修复后通过;覆盖向前修正、相同观测时间的记录顺序,以及只有预计时间的新观测不覆盖实际到港。Firstleg 5 类37项定向测试、Admin 3文件63项定向测试及生产/受影响测试类型检查通过,未执行全仓回归。
- 后端修复已提交并推送 `test`:`55436e3a0a0690fdb58293b3829c21a1864d705c`,仅3文件。Admin 最后模板类型修复已进入并推送 `release/test` 的 `e2f99b4f4b26c32ced254f2f232e3e96a56eb1eb`,远程文件 blob 与已验证工作区及线上文件一致;已关闭“只在工作区未提交”的发布风险。
- 用户授权的 TEST 发布 **Firstleg #508 SUCCESS**,精确提交同上。因期间其他发布已把 Firstleg 推进到 #507 / `c962f614e64b`,本轮基于该新基线追加3文件,未使用较旧镜像覆盖。CI复用本地定向测试结果,跳过执行但保留测试源码编译;运行镜像 `55436e3a0a06` healthy,Jenkins 原 `*/test` SCM 已恢复,保留流水线参数属性。本轮未发布 Admin、Lastleg、SQL、Gateway 或 Nacos;同期 Lastleg 由其他任务接续为 `c962f614e64b`,与线上 Admin `e2f99b4f4b26` 一同检查 healthy。
- 发布后真实 HTTP **53项断言、7只柜**通过,核对列表、详情与日历的实际/预计到港来源、默认日期、人工时间、已有计划冻结及实际到仓字段。原柜 `MSCU7264022` 前后读取一致:已保存 `2026-10-24T00:00:00`、version 1、1票计划,实际到仓 `2026-10-21T16:12:26.49`;本轮只读核查,没有改写业务资料,自有登录会话均退出。发布期间的基线预检曾遇容器重启窗口 HTTP 500,原日志保留;健康后完整验收通过,不将中间失败计为通过。
- 证据唯一入口:`baiyue-firstleg/reports/arrival-source-review-fix-508-20261021/summary.json`。代码、分支收尾、发布与本次自动/HTTP范围通过;无新增布局,不新增浏览器视觉通过结论。
## 2026-10-21 清关提柜与预约日历到仓日期一致性修复
- 用户已授权修改后部署 TEST 并执行 HTTP 联调。Admin **#677 SUCCESS**,提交 `536308f3ec987a4bbe6e814a83f3b55f4a1bab71`,以测试环境 #676 / `e6c864a2a64e` 为基线,仅包含本轮 11 文件;Lastleg **#400 SUCCESS**,提交 `1ad357d259010bcf3c005a358c58e118a0cfd303`,以 #399 / `6fe632f28ead` 为基线,仅包含本轮 5 文件。未混入在途排车异常/照片修改,两个容器均 running/healthy;两项 Jenkins 临时 SCM 标签均已恢复原配置,同时保留流水线更新的参数属性。
- 预约日历与清关提柜列表、详情共用日期投影:实际到港优先,其次预计到港;未人工维护、未建计划时展示到港当地日期加两个自然日的默认值,不制造零点、不自动保存。柜级查询补充 `planCount` 并与日历对齐人工/冻结时间语义,已有计划时列表禁改;无数据库结构、SQL、Gateway 或 Nacos 变更。
- 本地定向前端 112 项、后端 33 项通过;模板行类型修正后,列表 49 项复测、生产和受影响测试类型检查、生产构建通过。Lastleg CI 复用本地定向测试结果,跳过测试执行但保留生产与测试源码编译。未声称全仓回归通过。
- 真实 HTTP 与线上资源 21 项断言通过。`MSCU7264022` 首次只读查询为 version 0、无计划,实际到港 `2026-10-21T14:49:15`,默认日期应为 `2026-10-23`;调查期间该柜变为已保存 `2026-10-24T00:00:00`、version 1、1 票入库计划,验收核对三处均优先采用该冻结时间。本轮业务核查只有读取/查询请求,没有修改该柜时间或创建计划。另以既有 `TSTU4808232` 验证未维护场景:实际到港 9 月 29 日,默认到仓 10 月 1 日,列表、详情与日历一致且无具体时刻;自有登录会话均已退出。
- 后续 review 曾发现日期来源边界(已由本页同日“到港事实来源 review 修复与验收”关闭):Firstleg 日历按最新观测取实际节点,清关提柜按历史实际时间最大值聚合,后续观测修正为更早时间时默认到仓可能不同。两条实际 SELECT 用合成数据在内存中复现了23日后修正为21日时,清关提柜默认25日、日历默认23日;当时运行的 `b4ff441a7030` 两份查询源码与复核代码一致。原柜冻结的24日不受该边界影响,原21项只证明当时已测场景。
- 原发布证据:`baiyue-firstleg/reports/warehouse-arrival-677-20261021/summary.json`。后续边界修复及分支收尾见本页同日 review 修复与验收记录;未执行浏览器视觉验收,不能据此声称已通过人工页面截图确认。
## 2026-10-21 FBA 正式确认缺项提示发布与 HTTP 验收
- 用户本轮明确授权部署 TEST 与 HTTP 联调验收。Admin Jenkins **#674 SUCCESS**,精确提交 `8b02f1d8700a5c60328e5d2d5b3937f83451d250`,以 #673 / `39534530903c81a35bab24f6cfa531216e9ee9e4` 为基线,仅包含本轮预约相关 13 文件;未混入其他排车改动。Jenkins 临时标签固定配置已恢复 `release/test`。后端未由本轮部署,未执行 SQL、Nacos 发布或原业务单写入。
- 首次运行独立核对 Admin 对应镜像及 Lastleg 均 running/healthy。期间后续 Admin 发布接续到 `97277b031d3f6a696b21c87f6ae82f1203ab44a7`(直接父提交为本次发布提交),逐文件核对本轮 13 文件 blob 完全一致,修复仍在线;Lastleg 前后镜像 ID 一致且 healthy。
- 原预约 `YY202610210002` 只读核实:入仓码 `EXXHK2610200266` 的有效箱数为 20,缺 FBA 货件号/追踪号,仍 PENDING / version 0;地区时区仍为 `UTC-5`。该原预约在验收前后完整响应一致,本轮未代填业务资料或修改原 FBA 仓主档。
- 使用新建独立 TEST 客户及转运单 `ZY202610210006` / `ZY202610210007`,复用既有地区时区测试 FBA 主档;未新建仓主档、未执行 PDA 实收/出库。59 项联调断言通过,覆盖缺资料拒绝且状态/版本不变、核实资料保存/读回/同键重放、补资料不冒充确认成功、正式确认与同键重放不重复推进、陈旧版本拒绝及原资料齐全无需新核实记录。测试预约 `YY202610210003` 最终 SUCCESS / version 1 / `America/Los_Angeles`。货件号与确认号明确为 TEST 合成资料,不表示取得外部真实约仓确认;自有登录会话均已退出,测试样本保留。
- 公网资源图只读补证 2 项通过:逐票缺项/弹窗补充入口/用途说明及已有预约编辑指引均已发布,并保存资源 SHA256。初次前置主档不足及资源定位失败原报告完整保留,未重放已完成业务写入;后续补证只读取静态资源。证据唯一入口:`baiyue-firstleg/reports/fba-confirmation-674-20261021/summary.json`。
- 当前结论为发布、HTTP 和静态资源验收通过;真实页面仍按 1920×1080、100% 缩放待人工操作截图确认,不据此宣称视觉或真实第三方预约验收完成。
## 2026-10-21 Admin/Client 全量 HTTP 实跑 r1:未通过
- 用户明确要求全量测试,本轮串行执行Admin默认全量、Client全量和Client测量计费专项。报告统一保存在`baiyue-firstleg/reports/full-acceptance-20261021-r1/`,总览为`summary.json`;原始失败不改写,不代表页面、弹框或样式验收。
- Admin:11753项断言,11542通过、211失败;169次模块执行、95个独立模块、6631个独立请求。211项中86项关联请求、125项无请求,包含前置失败的连锁阻断,不等于211个独立接口缺陷。覆盖缺口28项,其中17项阻断。
- 首要前置为固定称重托盘`TP-001`未找到,测量至装柜及海外收货链因此无法完整执行;OCR本机默认图片不存在。费用目录实际122条/112条ACTIVE,与总数112的断言不同;卡车负例缺必填参数、散板直接状态推进与现行需求池流程不符。预约工作日历/汇总/列表返回A0409协调中;船期日历结构及操作员权限断言还需定向核对。
- Client:406通过、0失败、2跳过;跳过本轮客户无数据的入仓计划详情、派送单详情。测量计费专项只完成5项前置后中止,配置客户没有`WAIT_SPLIT + APPROVED + SENT`入仓样本;不能按零失败认定专项通过。
- 执行前13个在用业务服务healthy,Jenkins无在建任务。Lastleg镜像`0af977bdefc1`、Firstleg/Finance镜像`b4ff441a7030`、其余在用服务`f00d0e16cfca`;本地`40a03978c`含更新的排车/派送协议,但本轮下游受前置阻断,版本差异只作后续匹配风险,不能代替实际根因。旧双网关验收配置已收敛,PDA/只读取证配置补齐,实际Jenkins节点名为`java-test-agent`。
## 2026-10-21 全量验收脚本离线收敛
### 2026-10-23 固定客户复用续验(默认全量 HTTP 已通过)
- Admin 默认全量原始报告保存在后端 `reports/admin-full-20261023-review-r4.json`、`admin-full-20261023-review-r5.json`。r4 为 15739 项断言、15718 通过、21 失败;r5 为 17243 项、17233 通过、10 失败,170 次模块运行、138 个独立模块、9225 次独立请求。后继链路覆盖增加,不将两轮失败差值解释为同一固定断言集合的修复数。r5 请求证据没有创建客户、车辆或司机主档。
- 主流程与跨客户隔离分别复用已指定的两个固定测试客户;第二客户通过正式 OWNER 密码接口恢复登录、核对账号实际归属及 ACTIVE 状态,凭据仅保存在本机环境目录。海外 PDA、车辆司机和采购合作仓复用既有配置;换标托盘、正常订单和履约记录仍为必要业务产物,不自动删除历史。固定客户测试钱包通过正式接口补入测试余额,凭证为 `admin-full-20261023-funding-r2.json`、`admin-full-20261023-funding-r5.json`、`admin-full-20261023-funding-r7.json`,没有执行 SQL 写入或重置。
- Lastleg `#419` SUCCESS,固定源码 `6cd27658f7c4357cd86726cd3fe1e3994eede4cf`;后继 `#420` SUCCESS,固定源码 `85c7cde0409194e3d212e685a88f5c9b603c7d4a`;`#421` SUCCESS,固定源码 `a7f680d69dd7f3c15ea0e26c441e3877ba12599b`,修复转运创建原键重放先被自身占用箱拦截的问题(直接相关后端 51 项通过)。修复合法的分次拣货汇总、转运换标结算时序、全部尾程列表遗漏业务事实、一件代发箱归属及移托后排车仍使用原收货数量的问题。发布复用有效定向结果、跳过重复测试执行,仍编译测试源码;不宣称完整后端模块回归全绿。
- r5 已真实通过 PDA 三箱换标、退货原换标箱出库、原生开船前置及车队出车记录。其剩余失败集中在预约取消后误判释放分配、客户列表错误限定开船页签、C52 使用旧收货数量,以及 F40 未限定本轮 RECEIVED 计划;包含下游连锁阻断。脚本现已按原批次恢复预约、完整读取客户订单分页并限定 F40 计划。后继 `c52-route-recovery-20261023.json` 复用原排车单完成新增/移除/重新加入实托、路线与拒绝边界共 109 次 HTTP 请求;不改写 r5 的失败报告。
- r6 默认全量原始报告 `admin-full-20261023-review-r6.json`:17921 项断言、17912 通过、9 失败,170 次模块运行、138 个独立模块、9453 次独立请求;7 个明确跳过模块、27 个覆盖缺口(零阻断)。没有创建客户、车辆或司机主档。失败涉及转运创建重放、两个换标申请共用操作键、排车提交缺目的仓预约号及 F40 每页数量超过服务端上限;均已按当前合同修复,后继全量尚待验证。
- r6 原转运 `ZY202610230003` 后继定向证据 `r6-transfer-recovery*.json` 验证原关联换标认领、箱标/SKU、拆合托后按库存版本补测、客户确认、新 SKU 出库及原键重放零增量。原出库断言错误检查 `outboundAt`,已按正式详情 `actualShipAt` 修正。原目的仓 ABE3 没有可复用异仓同目的托盘,因此保留 OUTBOUNDED,不创建或修改公共资源;`transfer-target-pool-preflight-20261023.json` 只读验证既有 ABE4 异仓空闲托盘及库位,后继来源造单先按资源选线再核验报价,收货时重新核对占用状态。
- r7 默认全量 `admin-full-20261023-review-r7.json` 为 18535 项、18529 通过、6 失败,170 次模块执行、138 个独立模块、9595 次请求;仍有 7 个明确跳过、27 个非阻断缺口,零客户/车辆/司机主档创建。原转运 ZY202610230007 已实际完成新 SKU 出库、异仓收货及关联换标结算;其余失败涉及废弃把聚合库存当来源余额、散板 Long 版本误判、跨计划混托 BOL 来源关联错误及车辆占用连锁阻断。
- Lastleg #422 SUCCESS,固定源码 `5c5514436eddf8163cfb9f4120299179b12ea911`;BOL 以分配所属计划关联来源行,保留同客户逐来源数量与错误计划拒绝,28 项后端定向测试通过。`r7-bol-fleet-recovery.json` 证明原排车 PC202610230018 已下载有效 PDF,再正式退回并取消本轮零扫码原单释放固定车辆司机。`r7-discard-recovery.json` 以原聚合快照、来源余额详情和唯一流水核验扣减,再完成原废弃客户确认及终态重放(13 次 HTTP、25 项检查)。原 r7 失败报告未改写。
- 最新全部离线合同 `offline-full-20261023-r10-spec.txt` 为 237 个文件(根级 88、Admin 149)、2595 项全部通过,零失败/跳过。第八轮因既有异仓可预留同目的托盘耗尽而中止,未产生完成的全量 JSON;原日志和 `admin-full-20261023-review-r8-aborted.json` 保留 5714 条通过、19 条失败日志及 SHA256,不作为全量统计。
- 环境资源准备另以只读证据核验两只既有公共 IDLE 空托盘的活动库存及排车均为零,经正式接口仅绑定 ABE4,保持原编号、库位、类型、容量、费用、状态和备注;没有新建公共主档或 SQL 写入。证据 `reusable-transfer-pallet-empty-evidence-20261023.json`、`reuse-existing-empty-transfer-pallets-20261023.json`,后继 `transfer-target-pool-preflight-20261023-r2.json` 再次证明可预留。自动全量助手仍只读选择和业务预留,不自动改写公共资源。第九轮发现第八轮强制中止跳过了入口 finally,原 LOADING 故障代理仍覆盖 Firstleg 的 Lastleg 目标地址,故以 `PRODUCER_NOT_DIRECT` 阻断并中止;`admin-full-20261023-review-r9-aborted.json` 保留日志记录,不作为完成的全量报告。`restore-r8-event-fault.json` 按第八轮原 scope 恢复原镜像配置、健康状态并停止该任务代理,原远端状态回查 `prepared=false/restored=true`,未改业务 SQL。
- 总入口新增可选 `--stop-file`,只在模块及前置准备边界停止,仍经过故障配置恢复并保存中止失败报告,避免后续再强杀含故障注入的进程;21 项停止/故障执行器/脚本登记定向检查及最新全部离线 `offline-full-20261023-r11-spec.txt` 的 2596 项全部通过。第十轮 `admin-full-20261023-review-r10.json` 已按停止文件正常结束并完成故障配置清理:18204 项、18200 通过、4 失败,162 次模块运行、130 个独立模块、9164 次请求,明确 `stoppedByRequest=true`,不是完整全量通过。BOL、转运收货结算和废弃原单完整重放已通过;散板已发布本车余位,但 HTTP 字符串版本与 fixture 数字版本直接比较失败,另有固定车辆占用连锁阻断及显式停止记录。
- 散板版本按有效非负安全整数值比较并保持原客户/原单/当前状态校验;`r10-looseboard-recovery.json` 复用原 LB202610230008、CT202610230024 和已发布余位完成承运及原来货 ZY202610230015 创建,未另建商业订单。其后首次响应与重放的 updatedAt 出现纳秒/毫秒差异;后端 `f946285bccb64dae0ed06b03af9451880617700c` 在预订写入 DATETIME(3) 前固定毫秒,新增固定时钟回归并与请求哈希、报价、运费共 13 项定向检查通过,Lastleg #423 SUCCESS。后继全部离线 `offline-full-20261023-r12-spec.txt` 2596 项全过;原来货按当前 PDA 空草稿、生成绑定、原预报箱逐箱清点流程,已完成三箱两托入库及原承运实收确认并加入 CT202610230024;r10-looseboard-recovery-r3.json 保留第一箱已扫码、第二箱被拦截的真实结果。未改写原失败报告。数量修复的 16 项直接相关后端检查有通过证据。页面、第三方及硬件验收不由这些 HTTP 或合成 TEST 测量输入替代。
- 部分扫码后,预约分配资格仅看剩余库位库存,遗漏本明细已拣逐票事实,导致同托后续扫码被错误拦截。修复 f6c83125c95ddf0b9f3a5624cfe3902eaa6c9668 合并本明细已拣与当前实物,发车仍严格只认全部真实已拣;补充混来源、漏扫和全扫回归,后端定向 9 项全过。Lastleg #424 SUCCESS。全部脚本离线 offline-full-20261023-r13-spec.txt 为 237 个文件、2597 项全部通过,零失败/跳过。后继全量前只读复核异仓可预留托盘仍存在、固定客户测试余额 4.90 无需充值;原车次签收和资源释放仍待接续。
- r10-looseboard-recovery-r4.json 已从原单 1 箱接续至 11 箱全部扫码、五张装车资料保存,原装车完成事务因同码 FBA 来源的可选内部目的仓 ID 不同而明确 409 回滚;尚未发车。b92f7fe991963feae4adea4ebd6244632ca522e5 在同组真实仓码及其他目的地字段一致时沿已知内部仓引用核对,仍拒绝两个不同有效仓 ID、仓码或地址冲突;派送分组及服务、持久化 16 项全过。Lastleg #425 SUCCESS。脚本 51 文件修复已提交并推送 139f6b19325aa16c2d66ee9ead02438cc2674ca3,凭据、报告和临时接续程序不入库。
- r10-looseboard-recovery-r5.json 用原 PC202610230024 已明确拒绝的装车请求体及原键接续,验证 11 箱实际发运、装车原键重放及跨操作员拒绝、实际签收、车次结案、独立释放车辆/司机及旧释放键不得释放新占用;47 次 HTTP、89 项检查全部通过,状态 VERIFIED_ORIGINAL_LOOSEBOARD_AND_TRIP_RESOURCES_RELEASED。原 LB202610230008 已签收,未重建原商业订单。后继默认全量 r11 正在运行,不能从这份定向证据推定全量通过。
- r11 默认全量经停止文件正常结束并清理故障环境:17158 项、17155 通过、3 失败,159 次模块运行、127 个独立模块、8377 次请求、6 个明确跳过;三个失败分别为出库客户字段错误断言、主车尚未释放引起的人工矩阵占用及显式停止。正式 OutboundRow 不含 customerId,改为核对关联派送的客户/出库/派车/数量,直接消费者同步到普通换标与 F40。PDA 换标候选错误继承原接柜 planIds,已移除该筛选且缺源必须明确失败;同位置多箱扫码改为原箱标及实际逐 SKU 核验件数,不按箱数推算。
- r11-departed-fulfillment-recovery.json 证明原主车 CT202610230031 已签收、完成客户回访并释放资源;其后 r2/r3 保留 PDA 换标缺派车、件数错误及出库漏新箱标的失败。r4、r5 分别完成原 PDA/客户换标车的真实签收与资源释放,客户原贴标费用结算及主车财务核对通过,但明确保留 WITH_KNOWN_MISSING_MARKS,不把历史漏箱标快照改为通过,也未执行回填。
- 服务端 18ef3380363a347fae24723adde1aa129fa34767 将原换标冻结贡献中的实际箱标传入派送/出库快照;箱标换标使用新箱标,仅换 SKU 保留原实箱标,不把 SKU 标签写成箱标。内部 UnitFact 明确 cartonMark,生产者、冻结消费者和测试同步,61 项后端定向全过;Lastleg #426 SUCCESS。r14 全部离线 2600 项全过,其后逐箱件数用例和源码复测已通过,最新全部离线 offline-full-20261023-r15-spec.txt 为 237 个文件、2601 项全部通过,零失败/跳过,脚本续修已提交推送 2b54e709f820fae760530fe74ba151768d2a420c。后继全量前另核对两只既有 NY 空托的活动库存与排车均零,仅经正式接口绑定目的仓 ABE4,不创建公共主档,证据 reusable-transfer-pallet-empty-evidence-20261023-r12.json、reuse-existing-empty-transfer-pallets-20261023-r12.json。
- 原 r11 各自有车次均已完成实际任务并独立释放;未改变其他批次占用。转运目标复核 transfer-target-pool-preflight-20261023-r12-ready.json 通过,固定客户测试余额 4.87 无需充值。当前源码默认全量 r12 已启动,仍等待其完整结果,不以定向通过或已知漏箱标历史单据的完成替代全量结论。
- r12 默认全量在海外仓生产者前置的一次已完成计划新增明细拒绝探针出现 HTTP=0(TypeError: fetch failed),按停止文件正常清理结束:10019 项、10017 通过、2 失败,146 次模块运行、114 个独立模块、5886 次请求、6 跳过;两项失败为连接中断及显式停止。原 r12-completed-plan-rejection-probe.json 使用独立新拒绝探针对同一原计划返回 A0409、完整前后详情不变,不冒称原请求重放或改写 r12。脚本增加此特定 COMPLETED 拒绝探针的只读核实后原体原键一次重放,记录所有失败诊断;普通业务写入不自动重试,计划变化及未知二次结果保留失败。定向恢复合同通过,最新全部离线 offline-full-20261023-r16-spec.txt 为 237 文件、2604 项全部通过,零失败/跳过,修复已提交推送 3616e9db04bf85e91bb1f0fc6f87663c5e493d3e;后继默认全量 r13 已完整通过,结果见本节末条。
- 最终默认全量 admin-full-20261023-review-r13.json(marker ADMIN-API-20261022213624340)完整结束、退出码 0、success=true/fatal=null:**23844 项全部通过、0 失败,170 次模块运行、138 个独立模块、12100 次请求**。defaultPlanSelected=true、stoppedByRequest=false、非仅准备模式。零客户/车辆/司机主档 POST 创建,继续复用两个指定固定客户;三张本轮 Fleet 车次均 CARGO_COMPLETED_AND_RESOURCES_RELEASED。原散板真实同车签收、PDA 与客户换标新箱标快照、逐箱 SKU 件数、签收与独立资源释放、客户贴标结算、F40 根单与余量及财务链均由此轮证据核验。
- 最终清理只读证据 admin-full-20261023-review-r13-fault-cleanup.json:本轮 LOADING 故障状态 prepared=false/restored=true、代理已停,原配置正文与控制令牌已由 finish 移除;未遗留本轮故障覆盖。脚本提交 3616e9db04bf85e91bb1f0fc6f87663c5e493d3e 已推送;Lastleg #426 固定运行源码 18ef3380363a347fae24723adde1aa129fa34767。最新全部离线 r16:237 个文件、2604 项全过、零失败/跳过。
- 通过范围严格为当前默认 HTTP 计划:7 个明确跳过模块、31 个非阻断覆盖缺口、0 阻断,fullCoverage=false。跳过包含不新增公共主档/账号/费率的既定策略;其余包括外部船司/领星凭据与交互、真实 PDA 包/设备、预约工作清单写操作及三种公开接口无法构造的人工状态。页面、弹框、样式、真机测量与第三方实际效果仍未验收,不把本轮全量脚本通过解释为全部功能无缺口。
### 同日 r1 失败项修复与定向复测(进行中)
- 固定称重托盘池按原规则复用 `TP-001` / `YW-TP-002` 中任一有效托盘;不要求两只同时存在,不新建托盘。费用目录分别核对 112 条正式科目与完整目录中的扩展科目;船期 ETA 允许缺省但拒绝非法时间;仓库操作员权限按当前初始化基线核对。称重图片改为显式环境配置,本轮使用合成测试图片,只验证接口及人工确认,不作为实拍或 OCR 识别效果验收。
- 用户授权处理的 5 条旧时区预约中,3 条 ABE4 历史批次已被分批/合并替代,正式取消接口返回 A0409,未修改。另 2 条 `AP-20261016-955ABD8BD866`、`YY202610210002` 已正式取消并保留取消历史;ONT8 / ACY2 公共主档分别按初始化基线修正为 `America/Los_Angeles` / `America/New_York`。取消不释放原实物分配,因此通过原批次更新接口重新安排,两个批次均回查为 PENDING、版本 2 和正确 IANA 时区;未通过 SQL 改写历史。证据位于 `baiyue-firstleg/reports/full-acceptance-20261021-repair/appointment-*-journal.json`。
- 定向首轮 `targeted.json`:1960 项断言,1947 通过、13 失败,31 个模块、1156 个独立请求。失败集中于 OCR 空字段/修正确认版本的脚本误判、服务重启期间采购请求 HTTP 500、预约完整扫描未完成。OCR 已按服务端合同修复并通过 6 项直接合同测试;船期和海外业务直接合同 10 项通过。
- 预约同步在 15:27 完成整轮扫描后,`appointment-verify-r3-journal.json` 证明汇总、日历、事项列表均成功。期间 Lastleg 由其他工作发生重启,本轮未触发部署;不得把恢复单独归因于数据修复,也不把定向结果视为全量通过。修复后定向复测继续进行。
- 修复后 Admin 默认全量 `admin-full-r2.json`:16698 项断言、16670 通过、28 失败;170 次模块执行、138 个独立模块、9963 个独立请求、零跳过模块。详细失败保存于 `admin-full-r2-failures.json`。更深入的链路已执行,断言总量与 r1 不同,不能简单把两轮失败数当作同一覆盖范围比较。220 个根级及 Admin 合同文件的离线批次 `offline-full.tap` 为 2287 通过、零失败/跳过;批次后修改的清关文案、同步就绪条件、采购编号和手机号重试分别另有直接复测,不改写原批次结果。
- r2 剩余包括:未离仓清关的旧文案断言;开船来源改变后的同步就绪等待;换标/转运使用非权威箱号、部分废弃未选择具体箱;退货合箱缺箱内清点;逐票核实来源无实际船节点;BOL 缺来源/预约分配核实及实测缺 palletSpaces;F40 候选完整性;散板需求池至签收覆盖缺口;平台权限测试手机号冲突;采购编号仍按旧客户前缀判断。前两处及手机号、采购编号脚本已修正,HTTP 后继验证以独立报告为准,其余尚未闭合,不能宣称全量通过。
- `runtime.json` 核对 Lastleg 为 `6fe632f28ead`、Firstleg 为 `b4ff441a7030` 且 healthy,分别于 15:24、15:33 重启;由其他任务发生,本轮未部署。OCR 接口与人工确认链在 r2 通过,但识别状态为 FAILED,仍不构成识别效果或真机验收证据。
- 后继 HTTP `readiness-r3.json`:1646 项全部通过、24 个模块、969 个独立请求;清关文案和两种同步就绪条件已实际闭合。`master-data-r3.json`:164 项全部通过、98 个独立请求,包含权限用户创建及无权访问拒绝。两份均零跳过模块,只闭合各自受影响项,不宣称另一次全量全绿;采购编号修正尚无后继完整钱包链 HTTP 通过证据。
- 批次收尾 `offline-full-r2.tap`:220 个文件、2288 项全部通过,零失败/跳过,修改脚本语法检查通过。`repair-summary.json` 将原 r2 的 28 条失败按后继证据闭合 9 条,仍有 19 条未闭合断言(含连锁失败与覆盖缺口);保留 Client 专项样本缺失、OCR 识别未成功和 UI/真机未验边界。
- 本批优化验收范围与报告口径,修复固定称重托盘缺失时借其他托盘兜底、重派脚本仍调用手工派送/发车、初始化基线及迁移/OpenAPI断言滞后、PowerShell子进程版本和文案误触静态断言等问题。当前默认Admin范围为71个模块,可选模块单列,不将本地合同、HTTP和页面验收混为一个结果。
- 根级85个、Admin模块137个测试文件共2290项:完整离线批次2289通过、1条静态断言失败;最后修改的船司合同及直接相关异常合同复测14项全部通过。按受影响文件替换复测结果后,2290项均有通过证据、零跳过;这是批次加定向复测的汇总,不改写原失败报告,也不宣称单次全量零失败。
- 证据:`baiyue-firstleg/reports/acceptance-offline-consolidated-20261021.json`,关联原批次`acceptance-batch-final-green-20261021.xml`及复测`acceptance-carrier-final-20261021.xml`。报告文件名不作为通过依据,以实际断言结果为准。
- 本批未执行真实HTTP、数据库SQL或部署,未进行页面点击/弹框/样式验收;当前部署是否具备新的装车完成自动派送/发车协议,须在下一次真实验收前核对,不能从本地通过推定。
## 2026-10-21 排车日历柜号检索修复已发布 TEST
- 用户本轮明确授权发布 TEST。本批仅修复排车日历柜号检索、起运仓当地计划时间说明及缺资料提示,不包含其他任务正在修改的智能排车三栏页面,不执行 SQL、不推进排车业务状态。
- Lastleg Jenkins **#395 SUCCESS**,运行镜像提交 `a2c3d36c2062d407ea3f63a384858a2a46f72b9e`、容器 healthy。该发布对象以原运行 `f00d0e16cfca7f8f0ee6b701f0333736b33c5b84` 为父,仅纳入本批六文件;正常 `test` 分支实现提交为 `9fb39604c672026506c06da0f23485c5d331fe50`,已推送,未逆向覆盖该分支其他改进。CI 完整构建成功,测试日志合计 3420 项、零失败/错误;Lastleg 汇总含 11 项跳过,本批日历 13 项全部实际通过。
- Admin Jenkins **#670 SUCCESS**,运行镜像 `eb0b0f85d171094d068c8248dbef1148be53c36d`、容器 healthy,本批六文件已提交推送。#669 在检出阶段把裸提交号当分支而失败,未更新容器;#670 使用指向同一提交的固定标签成功,临时 SCM 固定配置已恢复 `release/test`,配置正文与原文一致。Jenkins 对 XML 声明的引号及换行规范化已单独核对,不视为配置正文变更。
- 真实只读 HTTP 已核对:`PC202610210010` 日历只出现一条,关联柜号 `MSCU7264017` 去重为一项,与详情两条货物的柜号一致;计划 UTC `2026-10-22T16:00:00Z` 按 `America/Los_Angeles` 落在 **2026-10-22 09:00**,对应北京时间 10 月 23 日 00:00。主单仍为 LOADING/version 8。本批自有验证会话已退出;其他不完整排车 `PC202610210006` 仍按真实缺时区/路线原因返回,不伪造日期。
- 公网实际日历资源 `/assets/AppointmentCalendarView-CM-FKpmg.js` SHA256 `1e465a40e2e9b291bec4b1ed56e81952e7abcbfa875e28ebe9fb3e841563e79b`,已核对柜号字段、当地时间说明、具名单号提示与新搜索占位文本。当前为接口、资源及运行健康验证通过,真实页面布局仍由用户刷新后人工确认。
## 本轮排车 HTTP 目标完成:原PLAN与自有/临时外配扩展(2026-10-21) ## 本轮排车 HTTP 目标完成:原PLAN与自有/临时外配扩展(2026-10-21)
本轮目标为TEST真实HTTP联调和完整请求响应小于1秒;截至本记录,原离港预排主链及原自有/临时外配同托双来源两条扩展链全部完成。不得扩大为界面、实物硬件或未单独验证的财务不干扰验收已通过。 本轮目标为TEST真实HTTP联调和完整请求响应小于1秒;截至本记录,原离港预排主链及原自有/临时外配同托双来源两条扩展链全部完成。不得扩大为界面、实物硬件或未单独验证的财务不干扰验收已通过。
@@ -2799,3 +3321,122 @@ Client #382(`a0736239e4ee4cd58b620dab912ffc0641360d9f`)正式页面在1920×
- Client `503659319555396708bdb85c239a8a1f9f4d870a` 已通过 TEST Jenkins `client-web-test #433` 发布,SUCCESS 且检出提交一致。新建、重置订单及快速下单生成草稿默认 `SELF_TRUCK`(卡车自送);已有草稿继续回显已保存的取货方式。 - Client `503659319555396708bdb85c239a8a1f9f4d870a` 已通过 TEST Jenkins `client-web-test #433` 发布,SUCCESS 且检出提交一致。新建、重置订单及快速下单生成草稿默认 `SELF_TRUCK`(卡车自送);已有草稿继续回显已保存的取货方式。
- 本次仅调整 Client 默认值,沿用原接口与取货方式枚举;无后端、SQL、Gateway 或 Nacos 变更。66 项受影响测试、类型检查和生产构建通过。 - 本次仅调整 Client 默认值,沿用原接口与取货方式枚举;无后端、SQL、Gateway 或 Nacos 变更。66 项受影响测试、类型检查和生产构建通过。
- 6 项真实 HTTP 检查通过:公开页面入口及新增页路由可访问,发布的普通下单与快速下单 JS 资源均包含卡车自送默认值。证据:本机私有环境目录 `firstleg-pickup-default-release-20261020.json`、`firstleg-pickup-default-http-report-20261020.json`。此次检查不包含浏览器实际点击操作。 - 6 项真实 HTTP 检查通过:公开页面入口及新增页路由可访问,发布的普通下单与快速下单 JS 资源均包含卡车自送默认值。证据:本机私有环境目录 `firstleg-pickup-default-release-20261020.json`、`firstleg-pickup-default-http-report-20261020.json`。此次检查不包含浏览器实际点击操作。
## Java、Admin、Client TEST 更新(2026-10-21)
- 后端 `f00d0e16cfca7f8f0ee6b701f0333736b33c5b84` 由 `backend-java #706` 发布,13 个保留服务全部 SUCCESS;逐项核对 SOURCE_COMMIT、镜像 tag `f00d0e16cfca` 与运行健康。网关随本批更新;未发布 Nacos 配置或 PDA 产物。
- Admin `db3b5f7157c900b885ade2626014f70c61cb0849` 由 `admin-web-test #668` 发布成功,类型检查、构建及健康检查通过。Client 最新提交 `78893f1144ff9c70d69a47ac73854b042665d1cc` 已由 `client-web-test #436` 发布,本轮核对运行版本后复用,未重复发布。
- 最终 13 个后端与两个前端共 15 个容器全部 running/healthy,镜像版本与目标提交一致。两端公网首页与容器首页 SHA256 一致,Admin 63 个、Client 93 个引用 JS/CSS 全部 HTTP 200。
- 本地部署/路由合同 32 项、Admin 466 文件/4255 项测试通过。后端 `#705` 在用户授权跳过剩余单测时终止:已报告 4094 项,其中 12 项跳过,失败与错误均为 0;不标记全量单测通过。随后 `#706` 显式 SKIP_TESTS=true,全部服务保留测试源码编译、打包和健康门禁;没有跳过测试源码编译。
- 经用户单独授权,仅执行一条 DDL:为 `baiyue_lastleg.ll_cargo_discard_carton` 补齐正式基线已有的 `source_type VARCHAR(32) NOT NULL DEFAULT 'DROPSHIP'`,回读确认成功。运输任务三表、任务类型、日流水及散板来源字段/索引此前已经存在,未重复执行 SQL,也未删除记录。
- 发布后 8 项 HTTP 检查通过:平台登录、工作台指标、本土卡车运输候选、到仓取货候选、平台退出、客户登录、客户资料、客户退出。首次核验脚本漏加客户 `/api` 前缀,修正为实际前端路径后复核通过;不是账号失效,未重置账号或凭据。
- 结构诊断不作为全库一致性通过证据:既有检查器将约束 AND/OR 行误判为 5 个字段;汇总 SQL 的退货出库流水表另含模块基线和实体均未声明的 `return_sku_quantity`,未据此扩大 DDL。本次结果仅覆盖发布版本、运行健康、静态资源和上述 HTTP 烟测,不替代完整业务写流程或人工页面验收。
- 发布证据保存在本机私有环境目录 `release-20261021-summary.json`、`release-20261021-runtime-verified.json`、`release-20261021-http-smoke.json` 与相应 Jenkins 日志;凭据和业务响应正文不写入本契约。
## TEST 充值渠道验收配置补齐(2026-10-21)
- 用户在单号 HTTP 验收对话选择“部署对话补齐后再验”,据此仅更新 TEST 的 `finance-service.yml`:`baiyue.finance.recharge.qr-code-url` 默认值补为 `/customer-recharge-qr.svg`,保留 `FINANCE_RECHARGE_QR_CODE_URL` 覆盖能力;源码 TEST 模板同步更新。其余 Data ID 和配置项未变。
- 复用 Client 已发布的示例 SVG,图片明确标注“开发示例、不可付款”,不含真实收款信息;仅用于测试充值申请流程,不用于真实转账。图片 HTTP 200、Content-Type 为 `image/svg+xml`,忽略换行格式后与源码一致。
- Nacos 发布与逐字回读一致,仅重启 Finance;运行镜像仍为 `f00d0e16cfca`(原 `baiyue-firstleg-finance #131`),容器恢复 healthy。没有重新构建、重跑全量单测或执行 SQL。
- 使用配置的客户账号实际调用 `GET /api/client/finance/v1/recharge-channel`,返回 `enabled=true`、`qrCodeUrl=/customer-recharge-qr.svg`。配置缺失阻塞已解除;未代替验收对话提交 RC,完整申请流程由该对话继续验证。验收会话已退出。
- 证据保存在本机私有环境目录 `rc-channel-20261021.json`、`rc-nacos-last-result-20261021.txt`;模板改动尚未提交。
## 业务单号 HTTP 验收与 Finance 幂等摘要修复(2026-10-21)
- 用户明确授权 TEST 部署、数据库操作及真实 HTTP 验收。最新编号字段补齐提交为 `b4ff441a7030`:Firstleg `#506`、Finance `#134` 均 SUCCESS;2026-10-21 12:21(北京时间)已核对两个运行镜像与提交一致、running/healthy。该次仅部署这两个服务,无数据库结构或配置变更;两任务的 SCM pin 均按原配置哈希保护恢复。其他服务的实际镜像记录在本轮 runtime-verified.json,不由本次重复发布。
- CLG 按入仓码公开摘要增加真实 `groupNo`;PAY 结算付款明细增加落库 `transactionNo`。读取经 Repository/Mapper,保持原平台权限、客户及结算单范围。应收结算引用的收款凭证不生成 PAY 号,字段为空,不以内部 ID 或银行参考号替代。OpenAPI 已同步,前端现有页面不依赖这两个新增字段,未变更页面展示或权限。
- 本地定向74项通过,Firstleg全模块1697项(9跳过)、Finance285项(无跳过),均0失败/0错误;Mapper注册和5项Gateway合同通过。CI Firstleg合计1845项(9跳过)、Finance合计433项(1跳过),均0失败/0错误。新HTTP批次 `http-public-number-fields.json` 为542/542通过,其中字段专项40项通过;新号 `CLG202610210002`、`PAY202610210004` 的创建、详情及原键重放一致,旧样本跨部署原号不变,应收收款未误填PAY号。同键异金额仍拒绝,付款只保留一笔1.23元合成样本;无未知写入结果,未清理样本。
- 49类改号前缀现均有本轮核心HTTP样本证据。初轮CLG/PAY依赖只读SQL补证的两项公开字段缺口已由上述HTTP复验关闭。逐项清单为私有 `numbering-http-progress.md`,裁定为 `numbering-http-adjudication.json`;不据此声称全系统所有业务、状态、权限及每个共享入口都已穷举通过。跨日、9999耗尽、事务回滚边界没有本轮真实HTTP证据;头程来源尾程分组号未单独完成HTTP验证,保留其限制。
- 此前Finance `#132` 发布 `b072c0a884b1`、`#133` 发布 `91b6574d5319`,修复五处幂等摘要:JSON Map稳定键序后求摘要,避免同请求跨重启误判异载荷。旧摘要不回填。AP/PAY以原键原载荷跨这两次真实重启重放成功;相关证据保留在 `finance-canonical-all/` 与 `http-finance-after-restart.json`。
- 此前充值申请表与正式基线不一致,已在确认主表及幂等记录为空后,按授权移除多余必填 `payment_method` 列/约束并将 `request_no` 对齐VARCHAR(32),未重置数据库或回填业务记录。首次失败前上传的合成附件保留。RC创建、审核、重放和唯一AC流水21/21;CK装车至派送23/23;二次拆分67/67;REC至AR收款20/20;CT取货共享入口12/12;运力确认TR/LB共享入口44/44通过。拆分沿用原单号/入仓码的`-1`、`-2`规则,D柜次号保持原全局连续规则。
- 退货脚本旧参数、PARCEL计箱及实物箱码断言已修,定向49项离线合同及语法检查通过,最终退货HTTP复验1282/1282。PDA非法PHOTO_STEP_9的S0503错误分类、无关bulk固定托盘文案合同失败仍保留;本轮新测量样本缺固定TP-001时复用同仓已有托盘,记录为非阻断fixture覆盖说明,不把未覆盖项改写为通过。
- 原始失败批次、最终报告和逐请求检查点保存在工作区私有 `.codex-temp/business-numbering-deploy/`,由 `http-followup-plan.json` 定位;本次发布证据在 `public-number-fields-release/`。密码与Token不进入报告,跟进自动化已停用以避免重复造数。早期旧模块曾绕过初始DELETE保护,删除本轮合成附件引用和临时分配,已告知用户并保留证据;随后统一请求与全局fetch均拦截DELETE,未再做清理。
## 自有业务与外配任务按实际拼车货物分类发布(2026-10-21)
- 用户授权 TEST Admin、Lastleg 发布及真实 HTTP 样本写入,并确认同时发布已提交的列表样式、智能排车交互和客户订单“已排车”按实际待出库单统计调整。最终 Admin `39534530903c81a35bab24f6cfa531216e9ee9e4`、`admin-web-test #673`;Lastleg `0af977bdefc1333186ead1234ea5aa824ebf83d9`、`baiyue-firstleg-lastleg-service #398`,均 SUCCESS。14:18 后核对运行镜像 tag 与提交一致且 healthy;Admin 临时 SCM pin 已按原配置哈希保护恢复。
- 自有业务按未实际接入需求池货物、外配任务按实际实收且绑定本车的需求池货物分类;车辆归属继续读取原装车快照。列表、同筛选完整统计、详情与附加登记沿服务端固定作用域执行;规则唯一维护在 `海外仓业务/外配业务首版开发契约.md`。本轮没有直接执行共享数据库 SQL、改表、修改 Gateway/Nacos 配置或重置数据。
- 真实 HTTP 暴露并已修复两处阻塞:拼车接入摘要将数组强转 JSON 对象导致异常;分类查询跨表标识比较遇到 MySQL 排序规则冲突。前者保留对象摘要原行为并支持来源键数组,后者按完整字节精确匹配来源标识,宽度覆盖 128 字符 utf8mb4。另修复 Admin 智能排车选择事件一处参数类型,解决 CI 类型检查失败;没有扩大到其他未提交的排车流程改动。
- Lastleg `#396` 对分类基线 `337da6d67c4e` 完成 3,426 项 CI 测试(含依赖,11 跳过),0 失败/0 错误。后续两个补丁分别通过本地受控入口 18 项、35 项定向回归;`#397/#398` 明确复用上述全量及受影响回归,`SKIP_TESTS=true`,仍完成测试源码编译、打包和容器健康门禁,不表述为最终提交重新全量执行。Admin 此前 4,295 项全量测试及事件修改后的 22 项针对性测试通过,最终 CI 类型检查与生产构建通过。初始 Admin `#671` SCM 检出、`#672` 类型检查失败均保留证据,最终由 `#673` 成功替代。
- 通过正式 Gateway HTTP 新建并实收样本:无拼车 `PC202610210012`、实际接入拼车 `PC202610210013`,两者均为 OWNED 车辆且完成 PDA 拣货与装车。拼车预订 `FB202610210004` 使用失败前原请求键恢复并成功 BOUND,重放不重复接入。两个单号分别只命中自有/外配列表,各自总数和阶段统计均为 1;错误分类详情、历史和写入返回 `A0404`,正确分类运营登记及原键重放只增加一次附加历史,未推进原排车或触发财务。另核对无拼车的 DISPATCHED 车辆仍归自有业务、两类列表无交集。用户原单 `PC202610210010` 未被本轮写入。
- 最终 53 项去重业务检查通过;拼车样本 PDA 扫码及版本检查另有 13 项通过。183 条请求记录中无未知结果,两个真实 S0500 失败请求及修复后结果均保留。首轮运营登记验收的序列化文本一致性断言失败已保留,最终采用结构比较核验原键结果通过,不将历史失败覆盖为通过。临时 PDA 账号已停用,本轮登录会话已退出,合成业务单及附件保留,未删除。
- Admin 已部署容器的页面、健康入口、页面 JS 与路由标题共 20 项 HTTP 检查通过,确认“自有业务 / 外配任务”及实际拼车分类文案。首次将 API origin 当作网页入口的脚本检查失败不作为页面故障;最终证据明确为容器 HTTP,不代替公网浏览器交互或 1920×1080、100% 缩放人工视觉验收。
- 本机私有环境目录证据:`pool-classification-final-report.json`、`pool-classification-release-state.json`、`pool-classification-http-state.json`、`pool-classification-frontend-report.json`、`pool-classification-collation-error.txt` 及对应 Jenkins 日志。凭据和业务响应正文不写入本契约。
### 分类页面读取失败修复(2026-10-21 14:59)
- 用户反馈两个页面均“读取失败”。真实接口已按拼车事实正确分类,但 Admin 两个 API 适配器仍分别只接受 OWNED、DISPATCHED 车辆,导致合法响应被前端拒绝。上一轮业务 HTTP 与静态文案检查未覆盖这层运行时解析,不应据此推定页面可用。此次仅将两处校验改为接受合法的两种车辆归属,并补充列表、详情、保存响应及非法值测试;分类仍由服务端保证。
- 当前分支修复提交 `fc4c14e420820adbaaafe5af5cfa0b1a12e438ab`。为保留其他任务已发布的预约确认改动且不夹带工作区其他排车修改,以当时实际部署的 `8b02f1d8700a5c60328e5d2d5b3937f83451d250` 为父提交,仅叠加上述四个文件,形成发布提交 `97277b031d3f6a696b21c87f6ae82f1203ab44a7`(tag `test-pool-ui-ownership-20261021`);未切换或新建工作分支、工作树。`admin-web-test #675` 精确检出、类型检查、构建和部署 SUCCESS,耗时 61.373 秒,运行镜像 `admin-web-test:97277b031d3f` healthy,临时 SCM pin 已恢复。
- 40 项受影响测试、生产构建及 5 项 Gateway 路由合同通过。当前共享工作区全量回归为 468 文件通过、2 文件失败,4,343 项通过、3 项失败:DispatchesView 两项审核操作按钮断言、DispatchDetailView 一项附件 A0404 诊断断言,均位于其他正在修改的排车代码;不标记全量通过,也未将这些工作区改动加入本次发布。
- 发布后直接读取运行容器实际引用的两个页面及 API JS,确认旧的单一 ownership 拒绝条件已替换。另通过实际 Admin API 适配器读取正式 Gateway 响应,两个默认列表及 `PC202610210012`、`PC202610210013` 详情共 4 项通过,覆盖无拼车 DISPATCHED 车辆与有拼车 OWNED 车辆;仅替换 HTTP 传输为真实 fetch,保留生产响应解析,未伪造业务数据。验收会话已退出。没有浏览器实际点击或新增人工视觉验收证据。
- 本次只发布 Admin;Lastleg 镜像仍为 `0af977bdefc1` 且 healthy,无数据库、Gateway、Nacos 或业务数据修改。证据保存在本机私有环境目录 `pool-ui-fix-commit.json`、`pool-ui-fix-release-state.json`、`pool-ui-fix-admin.log`、`pool-ui-fix-assets-before.json`、`pool-ui-fix-assets-report.json` 与 `pool-ui-api-live-report.json`。
### 自有业务行操作按钮样式修正(2026-10-21)
- 用户截图反馈自有业务列表三个操作仍为描边粗体。修复提交 `457a95941d407ff60cb8edb57459a96a274f0b0f` 仅为按钮组接入公共 `row-actions density-actions admin-text-actions`,同步一条密度合同断言及局部核对矩阵;按钮顺序、权限、禁用条件、路由和弹框事件未变。
- 本地受控检查:77 项定向测试、类型检查及生产构建、5 项 Gateway 路由合同通过;全量 470 文件、4,355 项通过,0 失败。全量针对当时共享工作区,不将其误称为独立发布提交的全量重跑。
- 发布前核对发现其他任务已通过 `admin-web-test #676` 发布 `e6c864a2a64e44e0b02ee97288c6ed47074150f2`,其父提交即本次修复,且该页面内容与本次准备的最小发布包一致。因而复用已完成发布,本任务未修改 Job 配置或触发重复构建;事先准备的 `test-owned-actions-style-20261021` 标签未用于部署。
- #676 SUCCESS、运行镜像 `admin-web-test:e6c864a2a64e` healthy;从实际容器入口引用的 `OwnedBusinessView-DRKKyoIB.js` 确认纯文字类已生效,入口公共 CSS 包含对应样式,健康入口通过。证据为私有 `owned-actions-style-release-state.json`、`owned-actions-style-assets-report.json`;修改后的人工截图仍待确认,不把静态资源核对当成像素验收。
### 2026-10-21 TEST Jenkins 镜像仓库默认值固定
- 用户针对 backend-java #707 的空 IMAGE_REPOSITORY 失败授权固定配置。通过 Jenkins API 核实 #706 成功构建的实际地址,并将相同值写入 backend-java 与13个 baiyue-firstleg- 单服务Job的参数默认值;14项逐一回读通过。保存前核对无运行/排队任务、无构建触发器,保存后按XML语义核对仅此默认值变化;真实地址保留在Jenkins配置,不写入源码与本文。
- 两份流水线改为沿用当前Job已有 IMAGE_REPOSITORY 参数值,防止声明式参数刷新再次清空默认值;缺失、示例域名与格式拦截继续保留。专属提交 94595c810 已推送 test 分支,仅含两份Jenkinsfile与直接合同测试,不夹带工作区其他修改。
- 定向流水线合同20项通过,两份文件通过Jenkins declarative validate API语法检查;未触发构建、服务部署或SQL。配置原文备份及逐Job回读报告保存在本机私有环境目录 registry-default-20261021/;这次配置成功不代表排车业务代码已部署。
### 自有业务列表补列 TEST 发布(2026-10-21 16:36)
- 用户明确授权部署 TEST。以当时已部署 Admin `536308f3ec987a4bbe6e814a83f3b55f4a1bab71` 为基线,仅叠加已提交 `a4c7f8edd51f1e71ec4bcc1e75131c4a9c5fb726` 中自有业务列表、对应测试及模块核对矩阵三个文件,形成 `698531dc2694679738d5997d8acb9cce60399579`,标签 `test-owned-fields-20261021`。未切换工作分支或创建工作树,保留 TEST 其他已上线改动,未包含外配待确认的拆分统计字段。
- `admin-web-test #678` 精确检出目标,类型检查、生产构建及部署 SUCCESS,耗时59.379秒;容器 `admin-web-test:698531dc2694` healthy。临时 SCM pin 按配置哈希保护恢复,当前工作区其他未提交修改未参与发布。复用相关源码未变的8项定向测试结果,未因本次部署重跑全量测试。
- 实际容器首页引用 `OwnedBusinessView-RPRRkScS.js`;13项资源内容检查确认派送仓库、独立总价/单价、预约/实际到达、最晚装车完成时间的空值插槽及纯文字操作类均已发布,健康入口通过。业务字段语义沿自有业务主契约;静态资源核对不代替人工截图验收。
- 仅发布 Admin,无数据库、Nacos、Gateway 或后端变更。证据位于本机私有环境目录 `owned-fields-commit.json`、`owned-fields-release-state.json`、`owned-fields-admin.log`、`owned-fields-assets-report.json`。
### 散板需求只读余位池 TEST 发布(2026-10-21)
- 用户确认只保留内部车次余位需求池,人工联系下单;直接隐藏登记、原单匹配、承运确认及后续履约,不增加开关、不删除原代码。规则唯一见[拼车主契约当前页面范围](海外仓业务/内部拼车需求池首版开发契约.md#当前页面范围2026-10-21)。页面、旧登记深链、角色及保留组件回归共43项通过,页面与相关测试源码定向类型检查通过。
- 页面收敛已提交推送 `ba072611dcf85eb0af8198b6a8419e6bb4072fe9`。首次 `admin-web-test #681` 因既有 `TransportExecutionPanel.vue` 两处资源候选显隐事件参数缺少类型而构建失败,未更新运行容器;仅补充两处 boolean 类型并提交推送 `b835c1cdfc4843501bf1bd55fa7aeeda9aed7a36`,未改变该模块业务行为。
- `admin-web-test #682` 精确检出 `b835c1cdfc4843501bf1bd55fa7aeeda9aed7a36`,类型检查、生产构建及部署 SUCCESS,耗时55.480秒。镜像 `admin-web-test:b835c1cdfc48` 启动后 Healthy,容器内 `/healthz` 通过。按用户要求复用此前定向验证,未重跑全量测试,流水线也未执行全量测试。
- 仅发布 TEST Admin,未发布后端或其它端,未执行数据库SQL、Nacos或Gateway变更。发布证据保存于本机私有环境目录 `looseboard-readonly-release-20261021.json`;本次健康检查不代替公网浏览器点击和1920×1080、100%缩放人工视觉验收。
### 散板需求旧车次入口隐藏 TEST 发布(2026-10-21)
- 用户截图指出需求池仍可经“选择车次发布余位”进入已退出日常使用的旧车次页面。本次直接隐藏该按钮,并将需求详情中的车次号改为纯文本;原按钮、跳转及其它拼车处理代码保留,无新增开关。规则沿拼车主契约当前页面范围。
- 修复提交 `2ecf4cf3fe88d0b029fae96843fe32b60579a409`,保留远端其它已提交改动后合并推送 `7c43fcacc426844bf3da4aa09045418eb7afbe60`。35项直接页面及保留组件回归通过,包含具备调度及车次权限时两个旧入口仍隐藏、需求详情和联系方式保留。未跑全量测试。
- `admin-web-test #683` 精确检出合并版本,类型检查、生产构建及部署 SUCCESS,耗时55.815秒;镜像 `admin-web-test:7c43fcacc426` Healthy,容器内 `/healthz` 通过。仅更新 TEST Admin,没有后端、SQL、Nacos或Gateway变更;流水线未运行全量测试。证据为私有环境目录 `looseboard-legacy-entry-release-20261021.json`。本轮未新增人工页面截图,不能用容器健康替代视觉验收。
### 2026-10-21 固定客户排车装车至签收定向验收
- 本轮使用固定 TEST 客户通过正式 HTTP 创建两张仓储转运并实收,两托共两箱,确认合成 ONT8 预约后生成 `PC202610210019`。缺运输时间的提交被明确拒绝;补齐车辆、司机和计划时间,通过调度及理货审核后真实拣货。五张 TEST 装车图片齐全,确认装车后自动生成 `CK202610210003`(OUTBOUNDED)与 `DL202610210006`(DELIVERING),原请求重放未重复扣库存。初次验收脚本缺少编辑必填 `publishLooseboardDemand`,明确 A0400 后修正并沿原单继续,无 SQL 或状态绕过。
- 页面验收实际执行 PDA 登录、拍照 Tab、图片上传替换及 Admin 资料查看、TEST 签收文件上传和保存;回查排车与派送均 DELIVERED,签收前后库存流水不变。图片、预约、证照均明确为 TEST 合成材料,不代表真实承运或收货。临时 PDA 账号已停用。
- Admin 资料弹窗补齐密度样式祖先;整车五照片不再叠加派送单的另一组照片上传框,当前页签单独统计资料类别。提交 `d8fbc16fd77ecf5ffad6bbc4449a61552f598201`,`admin-web-test #688` 精确构建 SUCCESS(59.187 秒),发布后已回看资料页签、五照片及派送完成列表。仅发布 Admin,未发布后端或执行 SQL。
- 直接验证:资料组件 16 项、履约脚本 42 项、脚本登记 4 项通过;本轮未跑全量测试。HTTP 与页面证据在后端 `reports/dispatch-loading-DISPATCH20261021FLOW03/`、`reports/dispatch-loading-DISPATCH20261021FLOW04/`,最终结果为后者 `final-ui-http.json`。范围为实收入库至签收,不包含真机相机、真实司机出行、结算或车队资源收车。
### 预约排车柜次短号搜索 TEST 发布(2026-10-22)
- 用户明确授权部署测试。本次仅发布 Admin `22e545fef978a9bfd7e2aac4f0888f96f98aaaf3` 与 Lastleg `bfeeef130e85381f9f38941f5b09f4b3c6a5af60`;柜次短号沿排车货物的同客户真实尾程订单及原装柜事件读取,完整柜号和短号分别去空去重,前端按当前月/周范围做忽略大小写的包含匹配。同车多柜仍只展示一条排车安排。
- `baiyue-firstleg-lastleg-service #415` SUCCESS,精确检出目标提交,镜像 tag `bfeeef130e85`,容器 running/healthy;随后 `admin-web-test #701` SUCCESS,精确检出目标提交,前端类型检查、生产构建及容器健康检查通过,耗时分别103.077秒和58.673秒。复用本轮14项后端定向测试及前端37项通过结果、相关生产与测试源码类型检查;另两项既有到仓日期断言失败已用修改前测试复现,不宣称全量测试通过。后端发布显式跳过重复测试执行,仍完成测试源码编译。
- 发布后真实HTTP核验通过:平台登录、日历新增短号字段、D1821关联排车、Admin公网健康、线上日历资源及退出自身会话。D1821返回排车单 `PC202610220021`,运输中,按洛杉矶当地实际发车日期归入2026-10-22 01:50;当前查询8条排车、0条日期未核实。公网首页引用的 `AppointmentCalendarView-QluvZypP.js` 已包含柜次短号字段及展示。没有新增人工页面截图,不将资源检查作为视觉验收。
- 无SQL、Nacos、Gateway、其它服务或业务数据修改。发布状态、脱敏Jenkins日志与HTTP报告保存在本机私有环境目录 `appointment-short-test-release-20261022.json`、对应服务日志及 `appointment-short-test-http-20261022.json`;保留其它任务已有工作区改动。
## 散板需求发布入口收敛 TEST 发布(2026-10-23)
- 用户授权提交全部当前改动并部署 TEST。有改动的后端、Admin、海外 PDA 与业务契约文档均已提交并推送至各自既有测试发布分支;本批运行版本固定为 Lastleg `7ef8411ea45ac9c57e43f420da3b5c605474d3bd`、Admin `9542b71cc79b56e77080591646285415ae2bcf5b`、海外 PDA H5 `1759290f8775d724449b03caecf4ddc1667e0f90`。只发布实际受影响的 Lastleg、Admin 与海外 PDA H5,其他后端、Client 及国内 PDA 未重复发布。
- `backend-java #718` 与 `baiyue-firstleg-lastleg-service #429` 均 SUCCESS。父任务保持测试执行开启,含依赖共报告 3,606 项测试、0 失败/0 错误、11 项真实环境 opt-in 用例跳过;下游复用父门禁,保留测试源码编译和镜像健康检查。Lastleg 镜像 tag `7ef8411ea45a` running/healthy,实际健康接口 UP。
- `admin-web-test #709` 精确检出目标提交,类型检查、生产构建、部署与健康检查 SUCCESS,运行镜像 tag `9542b71cc79b`。首次 #708 因提交 pin 与轻量检出不匹配,在检出前失败、未更新容器;重试临时关闭轻量检出,成功后按配置摘要保护恢复原 release/test 与原 Job 配置。
- 海外 PDA H5 本地构建及产物校验通过,直接相关 49 项测试通过;发布镜像 tag `1759290f8775` running/healthy,容器首页 SHA-256 与本轮本地构建相同。仅更新 TEST H5,未发布 APK/WGT,未作真机扫码或相机验收。发布拓扑、路由与回滚离线合同 32 项通过。
- 发布后平台真实登录、散板需求查询、排车列表与既有排车详情、退出本次会话均 HTTP 200 且业务码 200。Admin 公网健康及首页引用的 61 个 JS/CSS 资源均 HTTP 200,公网首页摘要与运行容器相同;实际发布 JS 保留智能排车“发布公共需求”,维护车辆的“发布公共散板需求”选项已移除。这是运行版本、资源和只读 API 证据,不替代人工页面截图或完整业务链验收。
- 本批未执行 SQL、未修改 Nacos/Gateway 配置,未创建、取消或修改业务单据。发布字段沿既有数据库列由新建请求显式写入;默认不发布及编辑不可修改的规则见拼车主契约。上轮额外运行的智能排车旧缓存清理测试仍有 1 项既有失败,未纳入本批已通过范围,不宣称 Admin 全量测试通过。
- 脱敏发布状态、构建日志、产物摘要及 HTTP 检查保存在本机私有环境目录 `publication-release-20261023/`;凭据不入仓库。用户要求在 TEST 部署及验证通过后通知既有灰度对话,本批不自行执行灰度部署。
### 本批灰度晋级结果(2026-10-23,已发布并通过定向验收)
- 用户已授权本批 Firstleg、Lastleg、Admin 发布、排车默认值调整及业务验证。发布前 15 个运行容器 healthy,14 项 Nacos 配置已留摘要;自营四页两个仓的 8 个接口正常,BUSINESS 模式、4 个采集范围配置及修订已留基线。
- 相对上一批灰度,本批累计包含 Firstleg 订舱/拖车资料前置条件移除、柜号规则调整,以及 Admin 测量/订单展示与订舱/拖车界面改动,因此实际发布 Firstleg、Lastleg 源 7ef8411ea45ac9c57e43f420da3b5c605474d3bd 及 Admin 源 9542b71cc79b56e77080591646285415ae2bcf5b。其他服务、Client 和 H5 未代发。Firstleg 及公共依赖源码与此前 #517 / 9c1998073 的已验输入一致;Lastleg 复用 #718/#429 的完整模块门禁。两项灰度 Job 显式跳过重复测试执行,仍完成生产及测试源码编译、镜像构建和健康检查。
- 唯一 SQL 为 ll_dispatch_order.publish_looseboard_demand 的 ALTER COLUMN SET DEFAULT 0。单表备份已核对导出完成标记、文件大小及 SHA-256;执行前后及发布后,原有 5 条排车的身份、状态和发布事实逐条一致。没有重放基线或清理数据,上批 incoming_no 的 utf8mb4_unicode_ci 纠正仍保留。自营源码无差异,数据、账号凭据及采集配置继续保护。SQL、备份、版本清单和脱敏验收证据位于仓库外 publication-gray-20261023/。
- 后端 PR #31、Admin PR #22 已合并;main 分别为 20b2a7e0582b、ff071c01592c,文件树与授权源一致。baiyue-firstleg-prod-firstleg #19、baiyue-firstleg-prod-lastleg-service #18、admin-web-prod #30 均 SUCCESS;后端运行 tag 7ef8411ea45a,Admin 运行 tag ff071c01592c(上述源的合并提交)。Admin 临时 SCM pin 在确认精确检出后已恢复。最终仅这三个容器镜像变化,15 个运行容器全部 healthy,两个后端健康接口 UP。
- 正式 Gateway 排车定向验收 18 项通过、21 次请求无未知结果:缺省不发布、显式发布、创建原键重放、普通维护保存及传入相反发布值均不改变创建事实。新建空单 PC202610230006(不发布)、PC202610230007(发布)均在验收后按正式取消入口变为 CANCELLED,记录和发布事实保留,无货物、车辆或司机占用;原 5 条排车未写入。此前定向验收未重复完整装车至签收链;用户明确每次发布后必须重跑后,已补充下述本批完整 F40,不再用上批版本结果替代。
- 自营四页两个仓的 8 个接口发布前后均 HTTP 200、业务码 200;销量总数 5488/1069、库存总数 2783/769 保持一致,采集模式 BUSINESS。4 个采集范围配置摘要、事实/发布修订、任务及运行状态完全一致;577 个 SUCCEEDED、27 个历史 DEAD 未变化。14 项 Nacos 配置摘要不变,Lastleg 保持 3 GiB 内存/交换总限额、2 CPU,未发生 OOM。
- 最终只读核验 27 项通过;Admin 公网首页与容器摘要一致、61 个首页引用 JS/CSS 均正常,实际 JS 保留智能排车“发布公共需求”并移除维护中的“发布公共散板需求”,自营四个页面包齐全。本次为真实接口、资源及运行验证,没有新增人工页面截图,不代替 1920×1080、100% 缩放人工视觉验收。H5 仍由用户自行发布。
- 发布后完整 GRAY F40 补验:北京时间 13:51–13:52,使用本工作区 7ef8411ea45a 的正式脚本、显式 gray/phase5-root-fulfillment/BUY_DECLARATION 和全新隔离批次执行,1440/1440 断言、776 次唯一 HTTP 请求全部通过,success=true、fatal=null、退出码 0、最终 VERIFIED/FINISHED。覆盖下单、国内测量与分柜、装柜、海外收货、排车、出库、签收回传、重放及车/人资源释放;本轮临时海外 PDA 在 finally 停用,合成业务与审计证据保留。4 项非阻断缺口属于外部第三方,不扩称默认 TEST 全模块、真实第三方或人工页面验收。
- F40 后再次验证:部署镜像 ID 无变化、15 容器 healthy、14 项 Nacos 摘要一致、原 5 条排车身份/状态/发布事实保留;自营四页两仓 8 次查询通过,采集任务、运行、范围配置及修订与发布前一致。报告为私有 publication-gray-20261023/production-f40-postrelease-http.json,过程、运行版本和保护回查分别见同目录 production-f40-postrelease-process.json、f40-runtime-before.json、f40-final-protection.json。
+101
View File
@@ -0,0 +1,101 @@
# 海外 PDA 界面样式规范
## 适用范围与维护职责
- 本文是 `apps/pda-overseas-uniapp/` 首页、作业入口和卡片列表外观的唯一维护正文,后续同类页面按本文调整。Admin、Client、国内 PDA 各自遵循所属规范,不自动互相套用。
- 当前样板为“拆柜收货”的候选柜列表、“仓储转运测量”的待测列表,以及首页的入口卡片与分项待办。规则统一不代表其他页面已改造或通过真机验收;详情、扫码、拍照和测量表单不因列表调整自动改版。
- 本文维护信息层级、尺寸、颜色、去重和反馈方式;业务字段、状态、权限、统计资格及提交行为仍按业务契约和实际接口维护。后续样式规则只更新本文,不另建页面样式总结副本。
按任务阅读:列表读“卡片列表”“信息去重”“状态与反馈”;首页读“首页入口与待办”;局部文案只核对对应条款。
| 当前实现入口 | 用途 |
|---|---|
| [公共样式](../apps/pda-overseas-uniapp/src/styles/pda.scss)、[列表样式](../apps/pda-overseas-uniapp/src/styles/task-list.scss)、[PortalHeader](../apps/pda-overseas-uniapp/src/components/PortalHeader.vue) | 页面外壳、导航、首页网格与基础样式;其他接入列表使用 `pda-task-list` 范围内的列表类,不覆盖未接入分支 |
| [拆柜收货](../apps/pda-overseas-uniapp/src/pages/operation/operation.vue) | `phase === 'candidates'` 列表分支;`.container-card-compact` |
| [仓储转运测量](../apps/pda-overseas-uniapp/src/pages/warehouse-transfer/warehouse-transfer.vue) | `entryMode === 'list'` 分支;`.transfer-card` |
| [首页](../apps/pda-overseas-uniapp/src/pages/home/home.vue)、[入口配置](../apps/pda-overseas-uniapp/src/data/overseas-workbench.js)、[待办读取](../apps/pda-overseas-uniapp/src/api/workbench.js) | 入口名称、卡片密度、待办展示与数据来源 |
## 卡片列表
### 页面与工具栏
- 顶部沿用 `PortalHeader`,保留返回和个人中心。页面标题只在导航栏出现一次,正文不再重复放置同名大标题。当前入口与页标题使用“仓储转运测量”。
- 工具栏左侧显示当前列表名称与数量,右侧放刷新,例如“共 38 柜”“待测转运单 · 6 单”。数量带业务单位,不用功能入口数量代替待办数量。
- 采用 CSS 逻辑像素,不把设计图或截图的物理像素直接当作控件尺寸;宽度随 PDA 可用视口适配。
| 元素 | 当前基准 |
|---|---|
| 列表背景 | `#f1f5fd` |
| 内容边距 | 左右 `14px`,列表顶部 `14px`;底部预留安全区 |
| 工具栏 | 最小高度 `36px`,与卡片间距 `11px` |
| 工具栏文字 | `14px`,行高 `20px`,字重 `700`,颜色 `#526174` |
| 刷新按钮 | 白底,`36px` 高,最小宽度 `72px`,左右内边距 `14px`,圆角 `20px`,边框 `1px solid #b8d1f5` |
| 刷新按钮内容 | 蓝色 `#135ee8`,图标 `18px`,文字 `13–14px`,图文间距 `5px`;请求中禁用并显示“刷新中…” |
### 卡片信息层级
卡片按以下顺序组织,不把所有信息挤进标题行:
1. **编号与状态**:左侧为柜号、转运单号等主要业务编号,右侧为状态标签。计划到仓等辅助时间放在编号下方。
2. **关键指标**:上方显示数值、下方显示名称,指标之间用细竖线分隔,整组上下用细横线界定。按业务选择必要指标,不为凑满列数补字段。
3. **补充信息**:展示接柜点、目的仓等未在上方表达的必要事实;缺码等额外问题单独提示。
4. **操作入口**:放在卡片底部右侧,使用“详情”“继续”“只读”“测量”“继续测量”等短文案与右箭头。左侧可放必要且不重复的补充业务码。
| 元素 | 当前基准 |
|---|---|
| 卡片容器 | 白底,内边距 `14px`,边框 `1px solid #dce5f0`,圆角 `13px`,无阴影,卡片间距 `11px` |
| 编号 | `18–20px`,字重 `750`,行高 `26px`,颜色 `#1f2937`;拆柜柜号当前 `20px`,转运单号当前 `18px` |
| 标题行 | 编号区域 `flex: 1; min-width: 0`,与状态间距 `10px`;状态不被挤压 |
| 状态标签 | `13px`,行高 `16px`,内边距 `6px 10px`,圆角 `9px`;保持完整状态文案 |
| 指标布局 | 四项等宽;转运三项当前为 `1 : 1.3 : 1`,中间目的仓适当加宽;分隔线 `#e1e7f0` |
| 指标区域 | 与标题间距 `12px`,上下内边距 `7–9px` |
| 指标值 | `22px`,行高 `26px`,字重 `750`,颜色 `#1f2937` |
| 指标名称 | `12px`,行高 `18px`,颜色 `#6f8194`,与值间距 `2–3px` |
| 辅助时间 | `12px`,行高 `18px`,颜色 `#718095` |
| 补充信息 | `12px`,行高 `20px`,行间距 `5px`;接柜点等关键归属信息可加粗 |
| 底部操作 | 蓝色 `#135ee8`,文字 `13px`、字重 `700`、行高 `22px`,右箭头 `14px`;底行最小高度 `28–32px` |
- 长编号、多目的仓和较大数值允许自然换行,不以省略号隐藏作业所需信息,也不把状态或操作挤出卡片。
- 隐藏底部补充信息后,操作仍靠右;不要因左侧无内容而把唯一操作移到左侧。
- 保留整卡已有的点击目标与操作资格;不要为了增大可点区域新增嵌套按钮或重复触发事件。
- 列表样式限定在列表分支;首页或列表的密度调整不覆盖详情、测量表单、照片区和底部提交栏。修改公共默认值前核对直接消费者。
## 信息去重
- 同一卡片内同一事实只展示一次。指标栏已展示计划数量和未操作数量时,不再追加“已生成 X 个入库计划,Y 个未操作”的重复汇总句。
- 仓储转运卡片以转运单号为主编号:入仓码为空,或去掉首尾空格后与转运单号相同,隐藏底部入仓码;不同时保留该入仓码。比较不改变业务码内容或大小写。
- 缺入仓码等上方未表达的异常信息继续单独展示,例如“2 单缺入仓码”;不要为去重隐藏问题提示。
- 不同含义的字段即使值相同也应保留,例如“总订单 1”和“入仓码 1”。不同记录共享接柜点或目的仓也不构成应删除的重复记录。
- 只展示服务端业务标识;必要关系缺失时使用“—”或明确的未关联提示,不以内部数据库 ID 回退。次要信息没有内容且无需提示时,不保留空白占位行。
## 状态与反馈
- 状态使用短文案配浅底标签。本轮样板中,待签收为橙色、待测量为蓝色、测量中为绿色、待齐全为灰色;颜色不代替文字,映射沿用对应业务状态。
- 待齐全或不可操作的柜保持灰色卡片与“只读”入口,仍能查看已有摘要;不能因为样式变灰而隐藏候选或放开写操作。
- 首次加载显示加载态;刷新保留已有列表并显示请求状态,避免连点。空态说明当前没有哪类任务,并提供适用的刷新入口。
- 加载失败与成功无记录是不同结果;错误不能变成“0”或成功提示。业务错误码、`requestId`、`traceId` 只用于故障诊断,不作业务编号。
## 首页入口与待办
### 紧凑入口卡片
- 保持三列网格,列间距 `8px`。入口保留图标、名称和一条待办或用途提示,不重复增加说明段落。
- 卡片使用 `height: auto; min-height: 104px; padding: 10px 6px`;长名称或较长待办文案可自然撑高,同一网格行保持对齐,不裁切内容。
- 图标区域当前 `40px × 40px`,图标 `28px`。名称当前 `12px`、行高 `17px`、顶部间距 `5px`,`.home-operation-name` 最小高度为 `17px`,最多两行;单行名称不强制预留两行的 `34px` 高度。
- 待办标签当前 `10px`、行高 `16px`,宽度不超过卡片;允许换行,避免长待办挤出卡片。
### 分项待办
- 待办数量放在各自入口,按对应业务单位展示,例如“38 柜”“6 单”“2 托”。首页不再以“16 项可处理”或分组下的功能个数冒充工作量,也不把不同单位和重叠阶段的任务简单相加。
- 任务列表与当前作业分开表达,例如仓储转运待测列表显示待测数量,转运测量入口显示本设备当前单的进行中状态;具体统计范围和资格维护在实际数据来源中。
- 分页接口使用明确的总数,不能将当前页记录数当全部待办;相同业务记录不重复计数。出库和废弃等不同工作来源需要分别标明。
- 正数用浅橙提示(文字 `#9a5300`、底色 `#fff0d6`);零、加载中和扫码提示用中性色(文字 `#6f8194`、底色 `#e7edf4`);获取失败用浅红提示(文字 `#b42318`、底色 `#fff1f0`)。
- 成功无任务可显示 `0`;尚未开始的当前作业可显示“未开始”。无独立待办队列的入口使用“扫码签收”“扫码作业”“扫码查询”等用途提示,不编造数量。
- 返回首页自动刷新,并提供手动刷新入口。局部获取失败只影响对应入口,保留其他成功数量;账号、仓库变化或旧页面请求返回时,不回显过期统计。
## 修改与验收
- 后续页面先确定主要业务编号、必要指标、补充信息和主操作,再按本规范组织卡片,不机械复制样板字段与状态。
- 人工检查重点为:长编号、多目的仓、指标较大值、入仓码相同与不同、缺码提示、零待办、加载失败、只读候选,以及首页长名称与标签换行。
- 视觉以用户提供的当前页面截图和人工验收为准;模板、样式编译及定向自动检查单独报告,不将编译成功记为真机扫码、照片上传、打印或整页视觉验收通过。
- 验证范围按[工程执行约束](AI工程执行与协作约束.md#验证范围选择)选择;纯文档维护不运行应用全量测试或构建。
+20 -175
View File
@@ -1,184 +1,29 @@
# 海外仓业务范围与快速索引 # 海外仓业务文档入口
## 已确认业务边界
- 当前开发环境按端到端全流程交付,不再用开发批次切断上下游。订单与客户、入库测量与计费、国内货柜履约、海外仓业务和财务共同组成一条连续业务链。 本文件只帮助选择正文,不定义字段、状态或部署进度。已定位页面、API 或服务时跳过本文件;代码从目标应用/服务最近 `AGENTS.md` 进入,业务依据只读下表命中的主题或条款。
- 海外仓业务从国内装柜完成及确认出仓后的船节点开始,覆盖海运在途、海外接柜、卸货入仓、库存与托盘、换标、转运、废弃、退货、排车、PDA 拣货与出库、发车、转派送、派送完成、异常退回、客户回访和一件代发。
- 海外采购、本土卡车、本土散板、海外仓报价、汇率和车辆主数据属于同一海外业务域,并统一经当前 `gateway/` 访问。
- 功能是否可用以正式路由、Controller/OpenAPI、权限、数据库结构和验收证据为准;历史规划只用于追溯,不再用于排除已经纳入全流程的能力。
## 人工验收入口 ## 当前业务正文
- 端到端人工验收统一使用[《虫虫出海全流程人工验收手册》](虫虫出海全流程人工验收手册.md)。手册覆盖客户与订单、国内履约、跨区事件、海外 PDA 入仓、库存与库内服务、排车出库、派送、异常退回、一件代发、海外主数据和海外业务,并区分页面、真机和自动化证据。 | 任务 | 读取入口 |
## 功能快速路由
- [排车列表统一作业改造契约](排车列表统一作业改造契约.md):五阶段排车、一单一趟、跨客户同车、派送安排及四块排车详情的当前改造入口。
- [排车流程修复规划](排车流程修复规划.md):排车撤销、派送状态、换标全托、合托来源及草稿交互的修改范围、分工与回归要求。
- [采购订单样品履约流程变更需求](采购订单样品履约流程变更需求.md):采购样品购买、装箱、面单、交寄、国内核费与寄客户的变更入口。
- [美国预约管理统一总览与优化方案](美国预约管理统一总览与优化方案.md):提柜、用车、FBA及普通送货等统一展示的需求梳理与设计建议。
- [预约工作日历 V13 变更说明](预约工作日历V13变更说明.md):已确认的多客户共车、分批后送、改期取消、重新预约、未定日期及下一步操作规则和验收场景。
- [预约工作日历开发协作契约](预约工作日历开发协作契约.md):工作日历的接口、数据归属与唯一文件写者;不是已实现或环境验收说明。
### 预约送仓
本轮变更行为以[预约工作日历 V13 变更说明](预约工作日历V13变更说明.md)为主入口。下述接口用于定位既有业务归属;涉及整票占用、分批、取消及重约的实现须按 V13 收敛,不能由接口入口存在推定本轮规则已全部实现。
内部历史展示读取仓库元数据使用`POST /internal/warehouses/platform-metadata/batch`,由Warehouse权威提供,内部服务令牌鉴权且不经公网Gateway。每批1至2000个不重复正数ID,只读平台公共仓的编号、名称、类型、国家、原时区和状态,包含停用仓;不存在、非公共或已删除的ID统一列为缺失,不返回联系人及客户数据。调用方不得把原固定偏移或缺失时区猜成IANA地点时区;国家/时区不明时单列待定位,不放入美国当地日期格。接口合同见Warehouse `warehouse-v1.yaml`。
仓库主档时区使用IANA地点标识(如`America/New_York`),不以固定UTC偏移表示当地时间。国内默认`Asia/Shanghai`;明确单一时区的美国州可自动选择,多时区或存在地方例外的州须按实际地址确认。新增、编辑和导入在Warehouse共用校验。初始化地址资料无法确定地点时区时保留为空并阻止正式预约确认;不根据旧偏移批量猜测或迁移现有主档。参考[IANA时区数据说明](https://www.iana.org/time-zones)。
- 预约以同一美国起运仓和目的FBA仓组织,允许多个客户的真实货源统一安排。未建入仓计划也可保存;同仓不同日期/时段、不同货物可以分别建约。主单不归属单一客户,客户归属保留在每票货物明细,库存、订单、费用及派送的客户隔离不随合并改变。
- 预约管理日历和入仓单中的预约操作共用 Lastleg 的 FBA 预约记录。平台可读取完整预约;客户只能经自己的订单/入仓单读取本客户货物,不开放跨客户预约详情。
- FBA日历按地点当地时段与查询范围相交读取,跨日安排在覆盖的每一天展示同一业务记录;午夜结束不占次日,仅日期安排只占当天。确认时段与计划时段成对选用,不用旧计划结束时间补齐未知确认结束时间。卡片保留完整起止日期,切换已加载日期不追加查询。
- 系统生成全局唯一AP业务单号,外部确认号单独保存并按目的FBA仓唯一。创建和编辑携带持久化幂等键、操作者及请求摘要,同键同内容返回原命令快照,即使后来编辑也不改变原结果;异内容拒绝。主单、明细和命令记录同事务。本轮分批后的占用按 V13 逐来源数量及有效批次身份收敛,不能继续用整票唯一占用阻断合法部分分配;取消后恢复原单或重约仍须重新核对当前占用。
- 计划日期、可选计划时段、对方确认时段分别保存;仅有日期不补09点/零点,未定日期进入未定时列表。PENDING允许外部约号及箱数暂缺,不伪造值;SUCCESS必须有真实货量、FBA货件号或追踪号、外部确认号以及目的仓权威IANA时区,校验夏令时并保存对应UTC时间点。结束时间未知保持空。预计装车归运输安排,不再作为FBA预约写入字段;没有权威装车事实的关联查询明确返回未知。
- 入仓明细入口仅用lineIds选择业务货物,服务端批量转换成原ORDER/BOOKING整票来源;外接来货后仍保持BOOKING键,禁止同时以ORDER别名建约。主表和明细只有一套,不并行维护“提前预约”副本。仓储转运的目的地和货件资料读取实际转运主记录,不能把未填充的尾程展示投影误报为目的地变化。
- 取消/未约成须记录原因,解除失效预约的有效覆盖/绑定,并保留原计划、确认事实和历史;仍需送货的批次数量与后续需求按 V13 第六至七节保留,不回退库存或使同一货量再次可选。已有有效排车时先核对并处理运输安排。编辑使用版本校验,已确认预约不能直接退回待确认。
- 用车计划来源读取Fleet日期范围接口,一车一条,保留计划/实际出发及司机任务预计结束的UTC时间点,不表示收货预约已确认。前端最多显示42个起运仓当地日期,通过前后各14小时的UTC检索余量覆盖跨日,已发车按实际出发时间、未发车按计划出发时间检索并逐条按权威地点时区落格,原计划保留供核对,改期不移动已执行事实;缺仓库、国家或时区时独立展示待定位记录,不用浏览器时区猜测。服务端UTC保护窗口最多44天,超过2000条明确拒绝并要求缩小范围,不逐页扫描或静默截断。读取仍需车次列表权限,正常一个车次SQL和一次内部仓库元数据批量调用;目录失败不可当作空结果。
- 提柜日历读取Firstleg原码头拖车记录,入口为`GET /api/platform/v1/terminal-drayages/calendar`,同时要求预约列表与码头拖车列表权限。按启用目的仓国家筛选美国业务范围,不推断港口国家;已提柜按船节点权威实际日期、未提柜按预约日期检索和展示,原预约时间独立保留,改期不移动已执行事实;原业务日期无时区事实时显示待核实,不套用收货仓时区或转为UTC。日期范围最多42天,预约来源和船节点实际来源分别有界读取并按柜去重;任一来源超出1000条或目的仓无法分类时标记统计不完整,目录失败报错,不能假装无预约。详情回到原清关提柜业务,不由日历直接写原状态。
- Admin 入口为 `../../apps/admin-web/src/modules/appointment-calendar/`,既有入仓单入口为 `modules/overseas-warehouse/`。日历读取权限为 `platform:appointment:list`,既有预约写权限独立;API 合同见 `../../baiyue-firstleg/lastleg-service/src/main/resources/openapi/fba-appointment-calendar-v1.yaml`。合并预约不表示已经排车或发车,运输执行继续按既有排车与共享车次流程处理。
#### 在途货源与拼车外接货的预约跟进合同
本节规定来源解析、人工跟进和已有预约覆盖的共同边界。美国全类型预约的总体目标见[优化方案](美国预约管理统一总览与优化方案.md);本节接口不代表总体目标、环境发布或整链验收已经完成。
| 事实 | 唯一来源与规则 |
|---|---| |---|---|
| 头程已开船货 | `ORDER:<尾程订单ID>`;依据真实船节点和美国接仓点/FBA目录读取,不要求先建入仓计划。建计划后仍是同一来源,不重复计票。内部ID仅用于关联,不作为业务编号展示。 | | 尾程订单、入仓计划、接柜、库存与仓储资源 | [系统边界](业务规则.md#系统边界与索引维护),按订单/计划/托盘等符号只读命中条款 |
| 拼车外接货 | `BOOKING:<原登记号>`;Fleet提供客户、目的地、接仓点、承运阶段、版本及可空的实际订单关联。确认承运后尚未来货可记录联系;生成订单后保持BOOKING键,禁止同时以ORDER别名重复计货。未知箱数保持空值。 | | 海外排车、出库与派送改造 | [排车现行契约](排车列表统一作业改造契约.md);已有缺陷追溯才读[修复规划](排车流程修复规划.md) |
| 时间 | 在途列表的预计到港/到仓是订单保存的快照;船节点观察时间不代表实时ETA。预约已确认时间只读,不被预计时间更新覆盖。原预约缺少时区时明确待核实,不按操作者浏览器时区猜测。 | | 外配车辆与承运 | [外配业务契约](外配业务首版开发契约.md) |
| 人工跟进 | `ll_appointment_followup`保留追加历史,跟进人取登录主体;允许没有入仓计划、约号、车辆时保存。提柜联系与码头申请按稳定柜次共享,接仓联系按柜次及实际接仓点共享,FBA联系按ORDER/BOOKING货源及客户保存;各事项独立,不推进正式确认或作业状态。 | | 预约工作日历、多客户共车、分批、改期取消 | [V13 业务规则](预约工作日历V13变更说明.md);接口/文件归属问题才读[开发协作契约](预约工作日历开发协作契约.md) |
| 预约覆盖 | `AppointmentCoverageService.query`按稳定来源及客户批量读取FBA预约,数量核对未覆盖、部分覆盖、待确认、已确认和待复核。外接货尚无订单但已保存安排时返回待确认及资料缺项,不返回假确认。正式确认号、地点时区和已核实来源版本分别读取;来源版本变化仅提示复核,不声称已完成精确船期影响分析。仓储转运的目的地与货件资料以转运主记录为准,缺少资料与实际目的地变化分开表达。 | | 船节点、查询频率、还柜与码头邮件 | [船节点契约](船节点标准化契约.md);实现补充查[定时查询](业务规则.md#船节点定时查询边界)或[码头邮件](业务规则.md#码头车队邮件) |
| 运输和容量 | 车次、正式排车关联、容量、余位及发布由Fleet维护。预约侧读取其真实结果,不以联系记录生成库存、托盘、车次或容量,也不在前端扣减余位。 | | 本土卡车与散板表单 | [统一表单](业务规则.md#本土卡车与散板统一前端下单)、[散板](业务规则.md#本土散板简化下单)、[美国本土卡](业务规则.md#美国本土卡独立下单),按任务选一项 |
| 采购样品、面单与寄送 | [采购样品流程](采购订单样品履约流程变更需求.md) |
| 司机、证照、车队与拼车需求池 | [车辆业务范围](车辆管理原型梳理与任务规划.md)、[拼车业务契约](内部拼车需求池首版开发契约.md),按具体业务选读 |
| 自有业务 | [自有业务契约](自有业务首版开发契约.md);接口细节查[接口设计](自有业务后端接口设计.md) |
HTTP入口为`/api/platform/v1/last-leg/appointment-planning`,包括`GET /cargo`、`GET /sources/resolve`及`GET/POST /sources/{sourceKey}/follow-ups`;请求和响应定义见[预约筹划OpenAPI](../../baiyue-firstleg/lastleg-service/src/main/resources/openapi/appointment-planning-v1.yaml)。深链进入预约页时须由后端重新核对客户、来源与目的仓,不能信任URL赋予资格。读取同时要求`platform:appointment:list`与`platform:overseas-warehouse:last-mile-order:list`,追加跟进另需`platform:appointment:followup`;仅平台主体可用,客户端不暴露跨客户货源。 专题契约描述确认目标,不表示代码、部署或真实验收已完成。只改唯一规则正文;入口或职责变化才同步本表。
整柜入口为`GET /containers`、`GET /containers/{containerId}`与`GET/POST /containers/{containerId}/follow-ups`,沿用上述权限。未传`warehouseId`记录整柜提柜或码头联系,传入时仅记录该柜实际接仓点的接仓联系。共享来源键由服务端生成`CONTAINER:<柜次>`或`CONTAINER:<柜次>:WAREHOUSE:<仓库>`,技术平台作用域不接收客户端客户参数,也不在界面展示内部键。原货源写入口仅接受FBA联系,不能逐客户重复登记整柜事项。 ## 预约送仓
整柜列表读取实际已开船且仍有效的头程货物,覆盖美国接仓点的各种目的地类型;不要求先建入仓计划。关键词命中某票后仍统计同柜全部美国范围货物,接仓点一次批量分组加载。任一票箱数未知则汇总箱数显示待核实;同柜另有未知或非美国接仓点时明确标记范围不完整并禁止新联系记录。来源预计到港仍是订单快照,不能当作实时船期或预约确认。已有联系历史在来源离开活动列表后保留可读。 送仓预约的基础边界见[预约送仓正文](业务规则.md#预约送仓);日历相关变更优先按上表定位 V13,不默认再读取总体优化方案和开发协作契约。
跟进写入携带事项版本和持久化幂等键。同键、同操作者、同内容重试返回原记录;异内容或不同版本冲突拒绝,未知结果重试保持原请求。跟进保存成功不代表预约申请或确认成功。仓库目录失败必须报错;日历某来源失败时保留其他来源结果并标注统计不完整。 ## 原型与验收(按需)
跨客户合批核对入口为`POST /batches/preview`,读取权限与来源查询相同,单批最多100票。服务端批量核对ORDER/BOOKING来源、客户归属及真实订单,拒绝重复别名、不同起运仓/目的FBA仓、暂扣、多目的地及已有有效预约;未知箱数保留缺项。`POST /appointments`重新核对后保存同一FBA预约聚合,另需既有FBA预约写权限;`GET /appointments/unscheduled`按预约列表权限分页读取无日期安排。允许未建计划及已确认承运但尚未来货的真实来源,不能信任浏览器预览作为写入依据。两种创建入口均自动提交选择时的接仓点和目的FBA仓,服务端在锁定货源后与当前事实比对;任一变化返回冲突并要求重新核对,不静默改约至新仓,也不增加人工填写字段。备妥窗口无权威依据时明确待核实,不能用预计到港或到仓替代。部署与真实验收状态见环境主契约。 - 页面还原按[页面 ID 索引](业务规则.md#原型页面定向索引)读取命中页面;不加载全部原型。
- 用户明确要求全流程人工验收时查[人工验收手册](虫虫出海全流程人工验收手册.md);普通修改按根指引选择最小验证。
已确认承运的外接货从原登记深链或`GET /external-candidates`服务端分页列表进入,必须经服务端核对后才能加入既有预约合批工作区;使用同一预览/创建接口,与同起运仓、同目的FBA仓的头程货共同保存,保留原BOOKING键,不生成ORDER别名。来源已有有效预约时不再提供新增入口;未形成入仓码或箱数未知仍可保存待确认安排,正式确认继续核验资料。 - [美国预约总体优化方案](美国预约管理统一总览与优化方案.md)、[PDA 改造评审](海外仓PDA拆柜收货改造方案评审稿.md)、后端缺口清单和原型核对属于专项设计/评审资料,不是普通开发的必读清单。
外接候选由Fleet只读适配器按原登记分页发现,限已确认承运/已实收/已绑定、车次未取消或完成、权威启用美国接仓点和FBA目的仓范围;支持登记号、车次号、客户名称及来货号检索,每页最多100票。预约侧对当页来源和覆盖批量核实,保留客户归属、原登记、真实订单关联及未知箱数;目录失败显式报错。Admin仅打开外接货源列表时请求,切换头程/外接保留同一合批选择,保存后刷新覆盖。它不提供承运确认、车次容量或发布写入。
共同样例:两柜头程货送同一美国接仓点再送ONT8,提柜分别按两柜联系,FBA货源保留各票ORDER来源;同一车次接入外部登记B-1时保留BOOKING:B-1。B-1确认承运但尚未来货时可以跟进和保存安排,不伪造入仓码或对方确认;实际来货在原登记行锁和同一事务内,将已有有效预约明细关联到真实订单及入仓码,继续通过同一BOOKING键读取覆盖;关联失败则来货事务一起回滚。该关联不自动改写预约数量快照、确认时间或来源版本,也不扫描补填历史记录。预约保存按登记号和订单号的稳定顺序锁定货源,并在订单锁定后清除查询缓存、重新核对来源,防止使用锁定前的旧事实。客户不符、目的仓变化、重复别名或已取消承运均不能借用其他货物的预约结果。跨来源筹划、正式确认和变化处理遵循总体方案,读取或核对成功不能代替保存和正式确认成功。
| 业务域 | 能力范围 | 原型入口 |
|---|---|---|
| 海外仓 | 尾程订单、入库单、换标单、托盘管理、库存管理;箱号管理与产品库当前暂不进入海外仓业务正式入口;Admin 入口 `../../apps/admin-web/src/modules/overseas-warehouse/` | 原型 `../悦/货代SAAS平台后台/prototype-src/modules/03-overseas-warehouse.html`;Backend `../../baiyue-firstleg/lastleg-service/`、`../../baiyue-firstleg/warehouse-overseas-service/`,经统一 `gateway/` |
| 海外仓排车与智能预排 | 平台查看排车列表/详情,按入仓计划或已收托盘创建预排,并完成编辑、取消、拣货、出库、发车和转派送 | Admin `../../apps/admin-web/src/modules/overseas-warehouse/pages/DispatchesView.vue`、`api/dispatches.ts`;Backend `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/` |
| 海外仓客户自助服务 | 客户工作台正式开放贴标申请、仓储转运、货物废弃和退货换标;所有查询和写入只使用登录态客户范围 | Client `../../apps/client-web/src/modules/overseas-warehouse/routes.ts`、`views/WarehouseServiceView.vue`、`api/warehouseServices.ts`;Backend `../../baiyue-firstleg/lastleg-service/` 的 `relabel/`、`transfer/`、`discard/`,经统一 `gateway/` |
| 海外仓 PDA 柜号签收与退货入库 | 独立应用 `../../apps/pda-overseas-uniapp/`;拆柜收货完成柜号认领、三类照片、按目的类型实收与全柜完成;退货入库支持扫描退货单号或 SKU 候选并按本包实收生成退货箱和计费批次,签收后可按同客户退货单合箱 | 拆柜前端 `src/api/inbound.js`、`receiving-adapter.js`、`pages/operation/operation.vue`;退货前端 `src/api/return-receipt.js`、`src/api/return-packing.js`、`pages/return-receipt/return-receipt.vue`、`pages/return-packing/return-packing.vue`;Backend 分别为 `inboundplan/pda/` 与 `returnreceipt/controller/PdaReturnReceiptController.java`、`PdaReturnInventoryController.java`,经统一 `gateway/` |
| 海外仓 PDA 库内、托盘、换标与查询 | Lastleg 提供盘点、同仓整托移库、托盘组拆换绑、换标和库存/库位/托盘查询能力;当前终端入口按工作台能力开关启用,未进入 PDA 的操作由 Admin/Client 正式页面承载 | Backend `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/pda/stocktake/`、`pda/move/`、`pda/warehouse/`、`palletops/`、`relabel/pda/`;契约 `src/main/resources/openapi/overseas-pda-operations-v1.yaml` |
| 海外仓出库与派送 | 排车编辑/取消、PDA 排车拣货、出库任务、发车门禁、转派送、客户派送单和派送完成 | Admin `../../apps/admin-web/src/modules/overseas-warehouse/`;Overseas PDA `../../apps/pda-overseas-uniapp/src/pages/dispatch/`、`src/pages/outbound/`;Backend `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/`、`delivery/` |
| 异常退回与客户回访 | 异常建档、派送退回入仓、派送状态、签收/回访附件和客户回访 | Admin `ExceptionOrdersView.vue`、`CustomerVisitsView.vue`;Backend `exceptionorder/`、`customervisit/` |
| 一件代发 | 国内订单强制 SKU 快照、装柜工作托盘、海外 SKU/箱唛库存和一件代发出库 | Backend `order/`、`firstleg/`、`lastleg-service/dropship/`;跨区事件见 `common-event-contract/` |
| 海外业务 | 本土散板、采购订单、本土卡车;Admin 入口 `../../apps/admin-web/src/modules/overseas-business/` | 原型 `../悦/货代SAAS平台后台/prototype-src/modules/07-overseas-business.html`;Backend `../../baiyue-firstleg/lastleg-service/` 的 `procurement/`、`trucking/` 及后续本土散板子域 |
| 仓库主数据与海外资源 | 仓库 ID、类型、状态、地址、能力统一由国内仓库主数据维护;海外服务只维护库位、托盘和资源锁 | Admin `../../apps/admin-web/src/modules/warehouses/`;国内权威 `../../baiyue-firstleg/warehouse/`;海外资源 `../../baiyue-firstleg/warehouse-overseas-service/` |
| 通用资料 | 海外仓报价、汇率管理、车辆列表;Admin 入口 `../../apps/admin-web/src/modules/overseas-master-data/` | `../悦/货代SAAS平台后台/prototype-src/modules/10-general.html` |
| 车辆管理、司机资质与保养加油 | 业务范围见[车辆管理原型梳理与任务规划](车辆管理原型梳理与任务规划.md);后端 `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/fleet/`,OpenAPI `fleet-drivers-v1.yaml`、`fleet-trips-v1.yaml`、`fleet-vehicle-records-v1.yaml`;证照和运维照片复用 File | Admin 接入目录 `../../apps/admin-web/src/modules/overseas-master-data/`;原型来源和页面 ID 按规划第 1、2 节定位 |
| 自有业务运营视图 | [自有业务首版开发契约](自有业务首版开发契约.md)、[后端接口设计](自有业务后端接口设计.md) | Admin海外通用资料模块;Lastleg `fleet/ownedbusiness/`,原排车为主事实,File分类契约 `fleet-owned-business-photos-v1.yaml` |
| 外配业务运营视图 | [外配业务首版开发契约](外配业务首版开发契约.md) | Admin海外通用资料模块;Lastleg `fleet/outsourcedbusiness/`,复用原排车事实和附加运营记录 |
| 内部拼车需求池 | [内部拼车需求池首版开发契约](内部拼车需求池首版开发契约.md):车次余位发布、销售意向、确认占位、本土订单关联及统一我仓上车 | 复用上述车辆管理及本土业务入口;不开放客户端运力市场 |
| 国内出仓后船节点 | 对已确认离开国内仓库的订舱/柜次定时查询船节点,保存最新节点、异常和查询历史,贯通目的港提柜至还柜事实 | 标准语义见[船节点标准化契约](船节点标准化契约.md);Admin `../../apps/admin-web/src/modules/port-schedules/`、`ocean-bookings/` 及货柜详情;Backend `../../baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/portschedule/`、`../../baiyue-firstleg/integration-service/` |
## 原型页面定向索引
原型本地完整入口为 `../悦/货代SAAS平台后台/index.html`。页面任务优先读取下列命中模块和页面 ID,不先加载完整原型。
### 海外仓
- 尾程订单:`last-mile-orders`、`last-mile-order-detail`。
- 入库单:`fba-inbound-order`、`fba-inbound-order-detail`;入库和退货入库相关库存视图按任务联查 `overseas-inbound`、`fba-return-inbound`。
- 换标单:`fba-relabel-order`、`fba-relabel-order-detail`;换标库存视图按任务联查 `overseas-relabel`、`fba-return-relabel`。
- 托盘管理:`fba-pallet`、`fba-pallet-detail`。
- 箱号管理:`fba-carton`、`fba-carton-detail` 当前暂缓,不注册正式菜单和路由。
- 产品库:`fba-product`、`fba-product-detail` 当前暂缓,不注册正式菜单和路由。
- 库存管理:`fba-stock-management`、`overseas-location`、`inventory-overview`、`warehouse-stock`、`overseas-stock`、`warehouse-stock-detail`、`inventory-transactions`、`purchase-stock`、`purchase-stock-detail`、`fba-return-stock`。
### 海外业务
- 采购订单:`overseas-purchase`、`overseas-purchase-edit`、`overseas-purchase-detail`。
- 本土卡车:`overseas-truck`、`overseas-truck-add`、`overseas-truck-edit`。
- 本土散板:`overseas-looseboard`、`overseas-looseboard-add`、`overseas-looseboard-edit`。
- `domestic-*` 和 `legacy-*` 页面不是海外仓业务默认入口;只有实际流程明确复用时才联查。
### 仓库与通用资料
- 海外仓合作仓:优先核对 `gen-partner-warehouse`,并同步核对现有平台仓库类型、接口和初始化 SQL。
- 海外仓报价:`gen-overseas-quote`;涉及车队报价时再联查 `delivery-fleet-quote`。
- 汇率管理:`gen-exchange-rate`。
- 车辆列表与详情:`vehicle`、`vehicle-detail`。
## 终端与模块边界
- 海外仓出库、派送、异常退回和一件代发已经纳入全流程,不再作为海外入仓之后的独立开发批次。
- 派送业务由 Admin/Client 承载,不进入海外 PDA;海外 PDA 负责现场入仓、托盘、排车拣货和出库等已注册作业。
- 箱号和产品信息作为入仓、库存、箱唛及 SKU 快照的一部分使用;是否提供独立维护页面由正式路由决定,不影响全流程状态推进。
- 高级 BI、开放平台和独立移动 APP 属于独立产品能力,不与现有业务全流程完成状态混为一谈。
## 船节点定时查询边界
- 所有供应商统一节点、时间语义、异常事实、停止规则和新增船司接入门禁以[船节点标准化契约](船节点标准化契约.md)为准;供应商缺失的节点保持缺失,不推测补齐。
- 现有 `CarrierScheduleQuery` 查询任务及其查询尝试、历史、来源、过期标识和频率约束整体重新归入海外仓业务;不再把它列作国内货柜履约港务/船期查询能力,也不得另建一套重复任务。
- 定时查询对象必须关联真实订舱、柜次以及可用的船司/船名航次或跟踪标识,不建立脱离业务单据的孤立轮询任务。
- Firstleg `portschedule/` 负责任务编排、业务关联、最新节点、节点历史、幂等和停止条件;`integration-service/` 只负责船司或轨迹供应商适配、限流、超时、重试和错误归一化,不保存业务主数据。
- 查询从确认柜子离开国内仓库后开始,贯通目的港到达、卸船、清关、提柜和还柜事实,默认在实际 `EMPTY_RETURNED` 后停止;这只扩展货柜轨迹事实,不纳入海外派送、海外仓出库或库存离仓业务。失败不能伪造成功节点,需保留来源、观测时间、最近成功时间和失败原因。
- 现有“每 3 天一次、窗口最多 3 次”、六家船公司来源、最近有效结果和过期标识是同一查询能力的既有约束,归海外仓业务继续核对;后续若调整自动轮询频率、供应商额度、退避或停止规则,应只修改海外仓业务契约和这套任务。
- 当前原型没有独立的“船节点定时查询”页面;涉及页面展示时从订舱、船期或货柜详情进入,不得为了匹配原型菜单把它归入海外派送。
## 本土卡车与散板统一前端下单
- 同一业务在 Admin 新增/编辑和 Client 下单使用一致的字段、顺序、控件、默认值、校验及提交转换;Admin 新增额外选择客户,编辑固定原订单客户;Client 的客户仅由登录会话确定,业务请求体不携带客户标识。
- 业务表单统一为运输信息、货物信息、费用与时效和备注。起运地/目的地、两端联系人、电话及详细地址左右对应;件数、预计托数、重量和体积默认零,预算默认为空、币种 USD,空预算和零预算分别保留。车辆只在卡车填写,商品与预计托数只在散板填写。
- 两端统一使用数字控件和 USD/CNY 选择;重量支持三位小数、体积六位小数、预算两位小数;取送时间按当地分钟输入并提交秒为零的值,不进行时区转换。四项联系信息及两个时间均必填,送货不能早于取货。
- 各应用内部由 `TransportDemandForm.vue` 和 `transportDemandForm.ts` 复用表单、校验与业务请求转换;两端对应源码按同一内容核对,不建立跨应用目录依赖。创建保留稳定幂等键;平台编辑保留客户、业务单号和版本,受状态及只读承运来源限制。
## 本土散板简化下单
- 平台代客创建必须显式选择客户;客户端客户范围只取认证会话。新增、编辑保持现有独立页面;平台普通编辑仍只允许待接单且非拼车来源订单,池来源继续只读展示真实承运安排。
- 下单移除运输方式及柜型字段,不再要求选择自送或我司提货。拼车或优先拼载属于内部安排,不再冒充交货方式或作为下单必填项;运输类型和是否打盘不在新增主表单要求填写,未知安排保持空,不自动补造。散板移除柜型字段。
- 需求保存取货地、目的地、可选详细地址补充、起运地联系人及联系电话、目的地联系人及联系电话、商品名称、预计托数、件数、总重量、总体积、预算总价、币种、取货与送达时间和备注。商品名称、预算和备注选填;四项联系人信息与取货、送货时间全部必填;预计托数、件数及重量体积可为零,不能为负。件数、地址补充和备注按统一前端下单表单展开填写。
- `estimatedPalletCount` 是下单预计托数;`packageCount` 是件数,二者独立。下单不生成实物托盘,不把预计托数写成实际收货或实占托位;拼车来源沿真实询价的货名与预计托数保存。
- `pickupAt` 与 `deliveryAt` 保存不带时区的当地日期时间,按分钟输入、原值显示,不进行 UTC 转换。取货与送货时间均必填;送货时间不能早于取货时间。预算明确显示 USD 或 CNY,金额空值与零值区分。
- 平台和客户接口共用 Lastleg `looseboard/dto/LocalLooseboardRequests.java`、`LocalLooseboardResponses.java` 及 `overseas-business-v1.yaml`,不保留旧运输枚举或要求日期别名。现有 API 路径与权限复用,空库结构同步模块基线及海外统一初始化,不回填测试存量,不自动执行 SQL 或部署。
## 美国本土卡独立下单
- 客户端和平台新增/编辑共用同一服务端需求合同:移除运输类型、柜型、下单预报托盘数及原要求时间;车辆类型为必选的“15拖”(`PALLET_15`)或“30拖”(`PALLET_30`)。车辆主档仍独立维护实际容量,车型不等于本票货量。
- 起运地联系人、起运地联系电话、目的地联系人、目的地联系电话、取货时间和送货时间全部必填。时间按日期及小时分钟填写,不进行时区转换;送货不能早于取货。列表、详情与平台编辑展示同一份保存值,客户端不提交客户标识。
- 独立下单不生成预报托盘,首次实际收货确定确认托数;已有拼车来源的真实预报及实际履约继续独立记录。拼车来源未提供的车型、目的地联系人/电话、送货时间保持未知,页面显示“—”,不捏造数据。美本土散板按本文“本土散板简化下单”使用独立需求合同。
- 接口及字段唯一实现合同为 Lastleg `trucking/dto/UsTruckOrderRequests.java`、`UsTruckOrderResponses.java` 与 `src/main/resources/openapi/overseas-business-v1.yaml`;数据结构同步模块基线及海外统一空库初始化。页面承载核对见 Client `cross-border/PROTOTYPE_MATRIX.md` 和 Admin `overseas-business/PROTOTYPE_MATRIX.md`。
## 系统边界与索引维护
- 托盘管理提供当前托盘单张标签 PDF:Admin `PalletsView.vue` → `warehouse-overseas-service` 的 `GET /api/platform/v1/warehouse-admin/{warehouseId}/pallets/{id}/label`。有 FBA 仓码的托盘与国内统一使用 Print `FBA_PALLET_A4_LANDSCAPE_V1`(297×210 mm):顶部 SCK8 等仓码,中间 Code 128、底部完整托盘号,141 等内部编号保留在托盘号中;其他托盘使用 `INBOUND_MARK_V1`(100×100 mm)。只按真实托盘编码打印,不重新生成编号;模板约束、服务接入与权限见海外资源服务 `AGENTS.md`。
- 海外仓合作仓是现有头程仓库主数据的类型扩展,需同步核对 Admin `warehouses`、Warehouse Service 的 DTO/Controller/OpenAPI/SQL 及实际消费者;不得因此把海外库存业务写入国内 Warehouse Service。
- 海外库存、库内作业和海外本土业务已有明确服务入口:`gateway/` 是统一 API 网关,`lastleg-service/` 拥有尾程订单、入仓计划、换标、库存业务、采购和本土卡车;国内 `warehouse-service` 是仓库主数据唯一权威,`warehouse-overseas-service/` 只拥有库位、托盘及资源锁并引用国内 `warehouseId`。不得把海外库存业务塞入国内 `firstleg/` 或 `warehouse/`。
- 国内装柜完成事件只在海外生成 `PENDING_ASSIGNMENT` 尾程订单、冻结快照和 `FIRST_LEG` 在途库存,不自动生成入仓计划。平台通过 `GET /api/platform/v1/last-leg/orders/container-summaries` 按稳定 `sourceContainerBookingId` 服务端聚合全柜订单、入仓码、计划数、未操作数和 `allPlansReady`,分页返回全部稳定来源柜,已生成计划的柜仍保留供接柜仓查询与修改;`pendingPlanCount` 区分待建计划,`resourcePendingPlanCount` 区分托盘资源待生成,后者仅用于自动生成异常后的重试;详情 `/{sourceContainerBookingId}` 返回柜内全部订单与计划且不受订单分页截断。`plannedArrivalAt` 只来自装柜完成事件 `estimatedWarehouseArrivalAt` 冻结到 Lastleg `ll_order.estimated_warehouse_at` 的计划到仓事实,不得使用创建时间、预计到港或当前时间替代,并按该时间升序、空值最后排序。确认后调用 `POST /api/platform/v1/last-leg/inbound-plans/convert-container`;服务端一次锁定整柜、每票独立生成一个计划,整批原子且幂等。转换成功才将尾程订单推进为 `INBOUND_PLANNED`,并把库存余额的来源入仓码展示快照替换为各自 `planNo`。
- 尾程订单的 `inboundCode` 只保存并展示真实来源入仓码;换标申请、本土散板等没有入仓关系的海外本土业务保持为空,由页面显示 `—`,不得用换标单号、本土散板单号或内部 ID 冒充入仓码。
- 平台可按单票尾程订单入库计划(托数、托盘类型、分配/可合托/加急和备注);入库仓、入仓码和预计到仓时间均展示冻结事实,不允许人工改写。预计到仓日期由服务端锁定来源柜全部订单的 `estimated_warehouse_at`,缺失或同柜不一致时阻断,人工与自动计划统一写入该柜日期。写入时校验订单版本、客户归属、仓库主档和幂等键;一票柜保存后立即自动生成并绑定托盘码、海外仓托盘和资源锁,多票柜在最后一票计划齐全时自动为全柜完成同一动作。`resourcePendingPlanCount` 只用于自动生成失败后的显式重试,不是正常人工步骤。分配、可合托、加急必须随入库单列表和海外 PDA 入仓码作业返回并展示,其中“可合托”只向现场提供选择:合托时扫描同目的仓已使用的托盘码,独立收货时扫描新托盘码,不作为实收或完成门禁。新增暂扣只允许货物完成入库后执行;暂扣只作用于该票并仅阻断排车和出库,不阻断入库计划或入库作业,同柜其他订单不受影响。
- 头程散货在预装确认且真实集装箱号就绪后,按 `集装箱号-FBA仓编码-三位序号` 冻结托盘码;序号在当前柜、当前 FBA 仓内从 001 独立递增。送柜报关、清关提柜和预装清单共用同一按 FBA 仓分组的打印清单,可整柜打印或选择单仓前 N 张补打。该编号随装柜完成事件进入海外,生成入库计划与海外实体托盘时原样沿用;一件代发继续使用国内装箱打托形成的托盘号,不参与散货重新编号。
- 头程与海外仓允许装托密度不同。尾程最终托数取不低于头程已有托盘码数的海外计划结果:头程已有编码全部保留,数量不足时在同柜、同 FBA 内按连续下标补码,不因数量差异阻断。柜级预览必须分别返回并展示头程已有、海外仓补充和最终托数;最终总数不得标成“本次新增”。
- 尾程订单人工节点固定为国内报关完成、预计/实际开船、预计到港、国外清关完成、实际到港等待卸船、预约提柜和卸柜八行完整快照。第一次保存后该订单永久使用 `MANUAL` 来源,读取和页面展示不得再回退柜级节点,也不得反向修改货柜船节点。
- 目的港码头拖车仍归 Firstleg 货柜聚合,但 Admin 清关提柜列表不再使用预约/实际提柜作为到仓业务时间:原两列改为“预计到仓/实际到仓”。预计到仓在列表内人工选择并由 Lastleg 按 `sourceContainerBookingId` 原子同步整柜尾程订单,已有入库计划后锁定;实际到仓只取海外 PDA 首次开始收货的 `ll_receiving_container_session.receiving_at`。车队、邮件、还柜及 `unloadingCompletedAt + 72h` 还空预警仍按原码头拖车链路处理。
- 手动还柜以真实海外卸柜完成且尚未还柜为准,仍校验独立还柜权限;无需事先存在车队、预约或提柜时间。首次命令使用版本 0 创建拖车记录,车队字段可为空,不补造提柜事实。还柜时间不得早于卸柜完成时间或已有提柜时间,成功后同步标准还柜节点并解除报空预警。
- 船节点是头程海运在途事实与海外接柜之间的衔接能力,业务聚合继续由 Firstleg 按 `containerBookingId` 柜级持有,不绑定客户;跨区域事件使用 `tenantId=0` 平台技术范围,到港/可提柜结果通过明确契约提供给海外区域,不复制第二套轮询任务。
- Admin、Client 仍使用统一账号体系,并按根 `AGENTS.md` 的双区域 API、海外 Token 和跨区域事件约定接入;业务页面不自行实现第二套登录。
- 海外仓 PDA 使用独立 `apps/pda-overseas-uniapp/` 工程和发布身份,但账号仍由国内 Auth 唯一签发;真实作业请求必须经统一 Gateway 的显式 PDA 路由。工作台只展示已注册并启用的现场作业,其他业务通过 Admin/Client 完成,不以某个终端是否承载全部操作判断端到端流程是否完成。
- 海外 PDA 的实际收货仓是国内 `warehouse-service` 中 `tenant_id=0`、类型为 `OVERSEAS`、状态 `ACTIVE` 且启用 `RECEIVING` 能力的平台共享物理仓,并由 `WAREHOUSE_PICKER` 的 Token Claim 固定;海外数据库只保存相同 `warehouseId` 引用。PDA 不接收仓库 ID,也不能切换柜号。统一 Gateway 对每个 `/api/pda/**` 请求在本地验签后向 Auth 实时核对账号 `token_version` 与当前仓绑定,换仓或清空绑定后旧 Token 立即失效,Auth 不可用时拒绝请求。待收柜在首次准备时原子认领到该仓,入仓计划、尾程订单和收货会话冻结实际仓 ID/名称;国内装柜事件的仓库仅作为来源仓快照,目的仓/FBA 仓也不得冒充实际收货仓。
- 海外 PDA 接柜候选、认领会话、国内五类装柜照片对照、海外三类签收照片与整柜完成均按 `sourceContainerBookingId + containerNo` 聚合,不保存客户并允许同柜多个客户。国内照片在签收阶段展开、收货阶段折叠,只读加载失败不阻断拆柜。签收后为柜内每个计划按其自身客户生成任务;入仓码解析、SKU 实收、托盘占用和库存入账继续按该票真实客户隔离,整柜完成需全部计划核平且只发布一次柜级完成事件。
- 新增实际代码模块、API、权限、OpenAPI 或数据库入口后,同步更新根 `AGENTS.md`、对应应用/服务 `AGENTS.md` 和本文件;不把排期、完成比例或临时任务状态写入快速索引。
## 码头车队邮件
首次选择车队后从清关提柜列表发送请求,更换车队时原子保存原车队取消和新车队提柜两封邮件;同一车队重复选择不发信。邮箱读取供应商资料,缺失或无效时阻断发送或换队。邮件顺序投递,失败待人工核对后重试。接口、临时模板和启用方式见 [Firstleg 车队邮件说明](../../baiyue-firstleg/firstleg/docs/terminal-drayage-mail.md)。
+173
View File
@@ -0,0 +1,173 @@
# 海外仓业务规则与实现边界
角色:业务规则正文,不是导航或部署进度。已知代码入口时直接沿模块指引工作;需要业务依据时,按索引链接或 `rg -n -F '符号或主题' docs/海外仓业务/业务规则.md` 读取命中标题/条款,不全文加载。
专题正式契约优先:排车查《排车列表统一作业改造契约》,预约查《预约工作日历V13变更说明》,船节点查《船节点标准化契约》,纸张与标签查打印标签维护入口;下列实现约束不得覆盖这些当前主题规则。部署与验收状态只查工作区根指引指定的环境主契约。
## 业务范围
- 当前开发环境按端到端全流程交付,不再用开发批次切断上下游。订单与客户、入库测量与计费、国内货柜履约、海外仓业务和财务共同组成一条连续业务链。
- 海外仓业务从国内装柜完成及确认出仓后的船节点开始,覆盖海运在途、海外接柜、卸货入仓、库存与托盘、换标、转运、废弃、退货、排车、PDA 拣货与出库、发车、转派送、派送完成、异常退回、客户回访和一件代发。
- 海外采购、本土卡车、本土散板、海外仓报价、汇率和车辆主数据属于同一海外业务域,并统一经当前 `gateway/` 访问。
- 功能是否可用以正式路由、Controller/OpenAPI、权限、数据库结构和验收证据为准;历史规划只用于追溯,不再用于排除已经纳入全流程的能力。
## 预约送仓
本轮变更行为以[预约工作日历 V13 变更说明](预约工作日历V13变更说明.md)为主入口。下述接口用于定位既有业务归属;涉及整票占用、分批、取消及重约的实现须按 V13 收敛,不能由接口入口存在推定本轮规则已全部实现。
内部历史展示读取仓库元数据使用`POST /internal/warehouses/platform-metadata/batch`,由Warehouse权威提供,内部服务令牌鉴权且不经公网Gateway。每批1至2000个不重复正数ID,只读平台公共仓的编号、名称、类型、国家、原时区和状态,包含停用仓;不存在、非公共或已删除的ID统一列为缺失,不返回联系人及客户数据。调用方不得把原固定偏移或缺失时区猜成IANA地点时区;国家/时区不明时单列待定位,不放入美国当地日期格。接口合同见Warehouse `warehouse-v1.yaml`。
仓库主档时区使用IANA地点标识(如`America/New_York`),不以固定UTC偏移表示当地时间。国内默认`Asia/Shanghai`;明确单一时区的美国州可自动选择,多时区或存在地方例外的州须按实际地址确认。新增、编辑和导入在Warehouse共用校验。初始化地址资料无法确定地点时区时保留为空并阻止正式预约确认;不根据旧偏移批量猜测或迁移现有主档。参考[IANA时区数据说明](https://www.iana.org/time-zones)。
- 预约以同一美国起运仓和目的FBA仓组织,允许多个客户的真实货源统一安排。未建入仓计划也可保存;同仓不同日期/时段、不同货物可以分别建约。主单不归属单一客户,客户归属保留在每票货物明细,库存、订单、费用及派送的客户隔离不随合并改变。
- 预约管理日历和入仓单中的预约操作共用 Lastleg 的 FBA 预约记录。平台可读取完整预约;客户只能经自己的订单/入仓单读取本客户货物,不开放跨客户预约详情。
- FBA日历按地点当地时段与查询范围相交读取,跨日安排在覆盖的每一天展示同一业务记录;午夜结束不占次日,仅日期安排只占当天。确认时段与计划时段成对选用,不用旧计划结束时间补齐未知确认结束时间。卡片保留完整起止日期,切换已加载日期不追加查询。
- 系统生成全局唯一AP业务单号,外部确认号单独保存并按目的FBA仓唯一。创建和编辑携带持久化幂等键、操作者及请求摘要,同键同内容返回原命令快照,即使后来编辑也不改变原结果;异内容拒绝。主单、明细和命令记录同事务。本轮分批后的占用按 V13 逐来源数量及有效批次身份收敛,不能继续用整票唯一占用阻断合法部分分配;取消后恢复原单或重约仍须重新核对当前占用。
- 计划日期、可选计划时段、对方确认时段分别保存;仅有日期不补09点/零点,未定日期进入未定时列表。PENDING允许外部约号及箱数暂缺,不伪造值;SUCCESS必须有真实货量、FBA货件号或追踪号、外部确认号以及目的仓权威IANA时区,校验夏令时并保存对应UTC时间点。结束时间未知保持空。预计装车归运输安排,不再作为FBA预约写入字段;没有权威装车事实的关联查询明确返回未知。
- 入仓明细入口仅用lineIds选择业务货物,服务端批量转换成原ORDER/BOOKING整票来源;外接来货后仍保持BOOKING键,禁止同时以ORDER别名建约。主表和明细只有一套,不并行维护“提前预约”副本。仓储转运的目的地和货件资料读取实际转运主记录,不能把未填充的尾程展示投影误报为目的地变化。
- 取消/未约成须记录原因,解除失效预约的有效覆盖/绑定,并保留原计划、确认事实和历史;仍需送货的批次数量与后续需求按 V13 第六至七节保留,不回退库存或使同一货量再次可选。已有有效排车时先核对并处理运输安排。编辑使用版本校验,已确认预约不能直接退回待确认。
- 用车计划来源读取Fleet日期范围接口,一车一条,保留计划/实际出发及司机任务预计结束的UTC时间点,不表示收货预约已确认。前端最多显示42个起运仓当地日期,通过前后各14小时的UTC检索余量覆盖跨日,已发车按实际出发时间、未发车按计划出发时间检索并逐条按权威地点时区落格,原计划保留供核对,改期不移动已执行事实;缺仓库、国家或时区时独立展示待定位记录,不用浏览器时区猜测。服务端UTC保护窗口最多44天,超过2000条明确拒绝并要求缩小范围,不逐页扫描或静默截断。读取仍需车次列表权限,正常一个车次SQL和一次内部仓库元数据批量调用;目录失败不可当作空结果。
- 提柜日历读取Firstleg原码头拖车记录,入口为`GET /api/platform/v1/terminal-drayages/calendar`,同时要求预约列表与码头拖车列表权限。按启用目的仓国家筛选美国业务范围,不推断港口国家;已提柜按船节点权威实际日期、未提柜按预约日期检索和展示,原预约时间独立保留,改期不移动已执行事实;原业务日期无时区事实时显示待核实,不套用收货仓时区或转为UTC。日期范围最多42天,预约来源和船节点实际来源分别有界读取并按柜去重;任一来源超出1000条或目的仓无法分类时标记统计不完整,目录失败报错,不能假装无预约。详情回到原清关提柜业务,不由日历直接写原状态。
- Admin 入口为 `../../apps/admin-web/src/modules/appointment-calendar/`,既有入仓单入口为 `modules/overseas-warehouse/`。日历读取权限为 `platform:appointment:list`,既有预约写权限独立;API 合同见 `../../baiyue-firstleg/lastleg-service/src/main/resources/openapi/fba-appointment-calendar-v1.yaml`。合并预约不表示已经排车或发车,运输执行继续按既有排车与共享车次流程处理。
#### 在途货源与拼车外接货的预约跟进合同
本节规定来源解析、人工跟进和已有预约覆盖的共同边界。美国全类型预约的总体目标见[优化方案](美国预约管理统一总览与优化方案.md);本节接口不代表总体目标、环境发布或整链验收已经完成。
| 事实 | 唯一来源与规则 |
|---|---|
| 头程已开船货 | `ORDER:<尾程订单ID>`;依据真实船节点和美国接仓点/FBA目录读取,不要求先建入仓计划。建计划后仍是同一来源,不重复计票。内部ID仅用于关联,不作为业务编号展示。 |
| 拼车外接货 | `BOOKING:<原登记号>`;Fleet提供客户、目的地、接仓点、承运阶段、版本及可空的实际订单关联。确认承运后尚未来货可记录联系;生成订单后保持BOOKING键,禁止同时以ORDER别名重复计货。未知箱数保持空值。 |
| 时间 | 在途列表的预计到港/到仓是订单保存的快照;船节点观察时间不代表实时ETA。预约已确认时间只读,不被预计时间更新覆盖。原预约缺少时区时明确待核实,不按操作者浏览器时区猜测。 |
| 人工跟进 | `ll_appointment_followup`保留追加历史,跟进人取登录主体;允许没有入仓计划、约号、车辆时保存。提柜联系与码头申请按稳定柜次共享,接仓联系按柜次及实际接仓点共享,FBA联系按ORDER/BOOKING货源及客户保存;各事项独立,不推进正式确认或作业状态。 |
| 预约覆盖 | `AppointmentCoverageService.query`按稳定来源及客户批量读取FBA预约,数量核对未覆盖、部分覆盖、待确认、已确认和待复核。外接货尚无订单但已保存安排时返回待确认及资料缺项,不返回假确认。正式确认号、地点时区和已核实来源版本分别读取;来源版本变化仅提示复核,不声称已完成精确船期影响分析。仓储转运的目的地与货件资料以转运主记录为准,缺少资料与实际目的地变化分开表达。 |
| 运输和容量 | 车次、正式排车关联、容量、余位及发布由Fleet维护。预约侧读取其真实结果,不以联系记录生成库存、托盘、车次或容量,也不在前端扣减余位。 |
HTTP入口为`/api/platform/v1/last-leg/appointment-planning`,包括`GET /cargo`、`GET /sources/resolve`及`GET/POST /sources/{sourceKey}/follow-ups`;请求和响应定义见[预约筹划OpenAPI](../../baiyue-firstleg/lastleg-service/src/main/resources/openapi/appointment-planning-v1.yaml)。深链进入预约页时须由后端重新核对客户、来源与目的仓,不能信任URL赋予资格。读取同时要求`platform:appointment:list`与`platform:overseas-warehouse:last-mile-order:list`,追加跟进另需`platform:appointment:followup`;仅平台主体可用,客户端不暴露跨客户货源。
整柜入口为`GET /containers`、`GET /containers/{containerId}`与`GET/POST /containers/{containerId}/follow-ups`,沿用上述权限。未传`warehouseId`记录整柜提柜或码头联系,传入时仅记录该柜实际接仓点的接仓联系。共享来源键由服务端生成`CONTAINER:<柜次>`或`CONTAINER:<柜次>:WAREHOUSE:<仓库>`,技术平台作用域不接收客户端客户参数,也不在界面展示内部键。原货源写入口仅接受FBA联系,不能逐客户重复登记整柜事项。
整柜列表读取实际已开船且仍有效的头程货物,覆盖美国接仓点的各种目的地类型;不要求先建入仓计划。关键词命中某票后仍统计同柜全部美国范围货物,接仓点一次批量分组加载。任一票箱数未知则汇总箱数显示待核实;同柜另有未知或非美国接仓点时明确标记范围不完整并禁止新联系记录。来源预计到港仍是订单快照,不能当作实时船期或预约确认。已有联系历史在来源离开活动列表后保留可读。
跟进写入携带事项版本和持久化幂等键。同键、同操作者、同内容重试返回原记录;异内容或不同版本冲突拒绝,未知结果重试保持原请求。跟进保存成功不代表预约申请或确认成功。仓库目录失败必须报错;日历某来源失败时保留其他来源结果并标注统计不完整。
跨客户合批核对入口为`POST /batches/preview`,读取权限与来源查询相同,单批最多100票。服务端批量核对ORDER/BOOKING来源、客户归属及真实订单,拒绝重复别名、不同起运仓/目的FBA仓、暂扣、多目的地及已有有效预约;未知箱数保留缺项。`POST /appointments`重新核对后保存同一FBA预约聚合,另需既有FBA预约写权限;`GET /appointments/unscheduled`按预约列表权限分页读取无日期安排。允许未建计划及已确认承运但尚未来货的真实来源,不能信任浏览器预览作为写入依据。两种创建入口均自动提交选择时的接仓点和目的FBA仓,服务端在锁定货源后与当前事实比对;任一变化返回冲突并要求重新核对,不静默改约至新仓,也不增加人工填写字段。备妥窗口无权威依据时明确待核实,不能用预计到港或到仓替代。部署与真实验收状态见环境主契约。
已确认承运的外接货从原登记深链或`GET /external-candidates`服务端分页列表进入,必须经服务端核对后才能加入既有预约合批工作区;使用同一预览/创建接口,与同起运仓、同目的FBA仓的头程货共同保存,保留原BOOKING键,不生成ORDER别名。来源已有有效预约时不再提供新增入口;未形成入仓码或箱数未知仍可保存待确认安排,正式确认继续核验资料。
外接候选由Fleet只读适配器按原登记分页发现,限已确认承运/已实收/已绑定、车次未取消或完成、权威启用美国接仓点和FBA目的仓范围;支持登记号、车次号、客户名称及来货号检索,每页最多100票。预约侧对当页来源和覆盖批量核实,保留客户归属、原登记、真实订单关联及未知箱数;目录失败显式报错。Admin仅打开外接货源列表时请求,切换头程/外接保留同一合批选择,保存后刷新覆盖。它不提供承运确认、车次容量或发布写入。
共同样例:两柜头程货送同一美国接仓点再送ONT8,提柜分别按两柜联系,FBA货源保留各票ORDER来源;同一车次接入外部登记B-1时保留BOOKING:B-1。B-1确认承运但尚未来货时可以跟进和保存安排,不伪造入仓码或对方确认;实际来货在原登记行锁和同一事务内,将已有有效预约明细关联到真实订单及入仓码,继续通过同一BOOKING键读取覆盖;关联失败则来货事务一起回滚。该关联不自动改写预约数量快照、确认时间或来源版本,也不扫描补填历史记录。预约保存按登记号和订单号的稳定顺序锁定货源,并在订单锁定后清除查询缓存、重新核对来源,防止使用锁定前的旧事实。客户不符、目的仓变化、重复别名或已取消承运均不能借用其他货物的预约结果。跨来源筹划、正式确认和变化处理遵循总体方案,读取或核对成功不能代替保存和正式确认成功。
| 业务域 | 能力范围 | 原型入口 |
|---|---|---|
| 海外仓 | 尾程订单、入库单、换标单、托盘管理、库存管理;箱号管理与产品库当前暂不进入海外仓业务正式入口;Admin 入口 `../../apps/admin-web/src/modules/overseas-warehouse/` | 原型 `../悦/货代SAAS平台后台/prototype-src/modules/03-overseas-warehouse.html`;Backend `../../baiyue-firstleg/lastleg-service/`、`../../baiyue-firstleg/warehouse-overseas-service/`,经统一 `gateway/` |
| 海外仓排车与智能预排 | 平台查看排车列表/详情,按入仓计划或已收托盘创建预排,并完成编辑、取消、拣货、出库、发车和转派送 | Admin `../../apps/admin-web/src/modules/overseas-warehouse/pages/DispatchesView.vue`、`api/dispatches.ts`;Backend `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/` |
| 海外仓客户自助服务 | 客户工作台正式开放贴标申请、仓储转运、货物废弃和退货换标;所有查询和写入只使用登录态客户范围 | Client `../../apps/client-web/src/modules/overseas-warehouse/routes.ts`、`views/WarehouseServiceView.vue`、`api/warehouseServices.ts`;Backend `../../baiyue-firstleg/lastleg-service/` 的 `relabel/`、`transfer/`、`discard/`,经统一 `gateway/` |
| 海外仓 PDA 柜号签收与退货入库 | 独立应用 `../../apps/pda-overseas-uniapp/`;拆柜收货完成柜号认领、三类照片、按目的类型实收与全柜完成;退货入库支持扫描退货单号或 SKU 候选并按本包实收生成退货箱和计费批次,签收后可按同客户退货单合箱 | 拆柜前端 `src/api/inbound.js`、`receiving-adapter.js`、`pages/operation/operation.vue`;退货前端 `src/api/return-receipt.js`、`src/api/return-packing.js`、`pages/return-receipt/return-receipt.vue`、`pages/return-packing/return-packing.vue`;Backend 分别为 `inboundplan/pda/` 与 `returnreceipt/controller/PdaReturnReceiptController.java`、`PdaReturnInventoryController.java`,经统一 `gateway/` |
| 海外仓 PDA 库内、托盘、换标与查询 | Lastleg 提供盘点、同仓整托移库、托盘组拆换绑、换标和库存/库位/托盘查询能力;当前终端入口按工作台能力开关启用,未进入 PDA 的操作由 Admin/Client 正式页面承载 | Backend `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/pda/stocktake/`、`pda/move/`、`pda/warehouse/`、`palletops/`、`relabel/pda/`;契约 `src/main/resources/openapi/overseas-pda-operations-v1.yaml` |
| 海外仓出库与派送 | 排车编辑/取消、PDA 排车拣货、出库任务、发车门禁、转派送、客户派送单和派送完成 | Admin `../../apps/admin-web/src/modules/overseas-warehouse/`;Overseas PDA `../../apps/pda-overseas-uniapp/src/pages/dispatch/`、`src/pages/outbound/`;Backend `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/dispatch/`、`delivery/` |
| 异常退回与客户回访 | 异常建档、派送退回入仓、派送状态、签收/回访附件和客户回访 | Admin `ExceptionOrdersView.vue`、`CustomerVisitsView.vue`;Backend `exceptionorder/`、`customervisit/` |
| 一件代发 | 国内订单强制 SKU 快照、装柜工作托盘、海外 SKU/箱唛库存和一件代发出库 | Backend `order/`、`firstleg/`、`lastleg-service/dropship/`;跨区事件见 `common-event-contract/` |
| 海外业务 | 本土散板、采购订单、本土卡车;Admin 入口 `../../apps/admin-web/src/modules/overseas-business/` | 原型 `../悦/货代SAAS平台后台/prototype-src/modules/07-overseas-business.html`;Backend `../../baiyue-firstleg/lastleg-service/` 的 `procurement/`、`trucking/` 及后续本土散板子域 |
| 仓库主数据与海外资源 | 仓库 ID、类型、状态、地址、能力统一由国内仓库主数据维护;海外服务只维护库位、托盘和资源锁 | Admin `../../apps/admin-web/src/modules/warehouses/`;国内权威 `../../baiyue-firstleg/warehouse/`;海外资源 `../../baiyue-firstleg/warehouse-overseas-service/` |
| 通用资料 | 海外仓报价、汇率管理、车辆列表;Admin 入口 `../../apps/admin-web/src/modules/overseas-master-data/` | `../悦/货代SAAS平台后台/prototype-src/modules/10-general.html` |
| 车辆管理、司机资质与保养加油 | 业务范围见[车辆管理原型梳理与任务规划](车辆管理原型梳理与任务规划.md);后端 `../../baiyue-firstleg/lastleg-service/src/main/java/com/baiyue/lastleg/fleet/`,OpenAPI `fleet-drivers-v1.yaml`、`fleet-trips-v1.yaml`、`fleet-vehicle-records-v1.yaml`;证照和运维照片复用 File | Admin 接入目录 `../../apps/admin-web/src/modules/overseas-master-data/`;原型来源和页面 ID 按规划第 1、2 节定位 |
| 自有业务运营视图 | [自有业务首版开发契约](自有业务首版开发契约.md)、[后端接口设计](自有业务后端接口设计.md) | Admin海外通用资料模块;Lastleg `fleet/ownedbusiness/`,原排车为主事实,File分类契约 `fleet-owned-business-photos-v1.yaml` |
| 外配业务运营视图 | [外配业务首版开发契约](外配业务首版开发契约.md) | Admin海外通用资料模块;Lastleg `fleet/outsourcedbusiness/`,复用原排车事实和附加运营记录 |
| 内部拼车需求池 | [内部拼车需求池首版开发契约](内部拼车需求池首版开发契约.md):车次余位发布、销售意向、确认占位、本土订单关联及统一我仓上车 | 复用上述车辆管理及本土业务入口;不开放客户端运力市场 |
| 国内出仓后船节点 | 对已确认离开国内仓库的订舱/柜次定时查询船节点,保存最新节点、异常和查询历史,贯通目的港提柜至还柜事实 | 标准语义见[船节点标准化契约](船节点标准化契约.md);Admin `../../apps/admin-web/src/modules/port-schedules/`、`ocean-bookings/` 及货柜详情;Backend `../../baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/portschedule/`、`../../baiyue-firstleg/integration-service/` |
## 原型页面定向索引
原型本地完整入口为 `../悦/货代SAAS平台后台/index.html`。页面任务优先读取下列命中模块和页面 ID,不先加载完整原型。
### 海外仓
- 尾程订单:`last-mile-orders`、`last-mile-order-detail`。
- 入库单:`fba-inbound-order`、`fba-inbound-order-detail`;入库和退货入库相关库存视图按任务联查 `overseas-inbound`、`fba-return-inbound`。
- 换标单:`fba-relabel-order`、`fba-relabel-order-detail`;换标库存视图按任务联查 `overseas-relabel`、`fba-return-relabel`。
- 托盘管理:`fba-pallet`、`fba-pallet-detail`。
- 箱号管理:`fba-carton`、`fba-carton-detail` 当前暂缓,不注册正式菜单和路由。
- 产品库:`fba-product`、`fba-product-detail` 当前暂缓,不注册正式菜单和路由。
- 库存管理:`fba-stock-management`、`overseas-location`、`inventory-overview`、`warehouse-stock`、`overseas-stock`、`warehouse-stock-detail`、`inventory-transactions`、`purchase-stock`、`purchase-stock-detail`、`fba-return-stock`。
### 海外业务
- 采购订单:`overseas-purchase`、`overseas-purchase-edit`、`overseas-purchase-detail`。
- 本土卡车:`overseas-truck`、`overseas-truck-add`、`overseas-truck-edit`。
- 本土散板:`overseas-looseboard`、`overseas-looseboard-add`、`overseas-looseboard-edit`。
- `domestic-*` 和 `legacy-*` 页面不是海外仓业务默认入口;只有实际流程明确复用时才联查。
### 仓库与通用资料
- 海外仓合作仓:优先核对 `gen-partner-warehouse`,并同步核对现有平台仓库类型、接口和初始化 SQL。
- 海外仓报价:`gen-overseas-quote`;涉及车队报价时再联查 `delivery-fleet-quote`。
- 汇率管理:`gen-exchange-rate`。
- 车辆列表与详情:`vehicle`、`vehicle-detail`。
## 终端与模块边界
- 海外仓出库、派送、异常退回和一件代发已经纳入全流程,不再作为海外入仓之后的独立开发批次。
- 派送业务由 Admin/Client 承载,不进入海外 PDA;海外 PDA 负责现场入仓、托盘、排车拣货和出库等已注册作业。
- 箱号和产品信息作为入仓、库存、箱唛及 SKU 快照的一部分使用;是否提供独立维护页面由正式路由决定,不影响全流程状态推进。
- 高级 BI、开放平台和独立移动 APP 属于独立产品能力,不与现有业务全流程完成状态混为一谈。
## 船节点定时查询边界
- 所有供应商统一节点、时间语义、异常事实、停止规则和新增船司接入门禁以[船节点标准化契约](船节点标准化契约.md)为准;供应商缺失的节点保持缺失,不推测补齐。
- 现有 `CarrierScheduleQuery` 查询任务及其查询尝试、历史、来源、过期标识和频率约束整体重新归入海外仓业务;不再把它列作国内货柜履约港务/船期查询能力,也不得另建一套重复任务。
- 定时查询对象必须关联真实订舱、柜次以及可用的船司/船名航次或跟踪标识,不建立脱离业务单据的孤立轮询任务。
- Firstleg `portschedule/` 负责任务编排、业务关联、最新节点、节点历史、幂等和停止条件;`integration-service/` 只负责船司或轨迹供应商适配、限流、超时、重试和错误归一化,不保存业务主数据。
- 查询从确认柜子离开国内仓库后开始,贯通目的港到达、卸船、清关、提柜和还柜事实,默认在实际 `EMPTY_RETURNED` 后停止;这只扩展货柜轨迹事实,不纳入海外派送、海外仓出库或库存离仓业务。失败不能伪造成功节点,需保留来源、观测时间、最近成功时间和失败原因。
- 现有“每 3 天一次、窗口最多 3 次”、六家船公司来源、最近有效结果和过期标识是同一查询能力的既有约束,归海外仓业务继续核对;后续若调整自动轮询频率、供应商额度、退避或停止规则,应只修改海外仓业务契约和这套任务。
- 当前原型没有独立的“船节点定时查询”页面;涉及页面展示时从订舱、船期或货柜详情进入,不得为了匹配原型菜单把它归入海外派送。
## 本土卡车与散板统一前端下单
- 同一业务在 Admin 新增/编辑和 Client 下单使用一致的字段、顺序、控件、默认值、校验及提交转换;Admin 新增额外选择客户,编辑固定原订单客户;Client 的客户仅由登录会话确定,业务请求体不携带客户标识。
- 业务表单统一为运输信息、货物信息、费用与时效和备注。起运地/目的地、两端联系人、电话及详细地址左右对应;件数、预计托数、重量和体积默认零,预算默认为空、币种 USD,空预算和零预算分别保留。车辆只在卡车填写,商品与预计托数只在散板填写。
- 两端统一使用数字控件和 USD/CNY 选择;重量支持三位小数、体积六位小数、预算两位小数;取送时间按当地分钟输入并提交秒为零的值,不进行时区转换。四项联系信息及两个时间均必填,送货不能早于取货。
- 各应用内部由 `TransportDemandForm.vue` 和 `transportDemandForm.ts` 复用表单、校验与业务请求转换;两端对应源码按同一内容核对,不建立跨应用目录依赖。创建保留稳定幂等键;平台编辑保留客户、业务单号和版本,受状态及只读承运来源限制。
## 本土散板简化下单
- 平台代客创建必须显式选择客户;客户端客户范围只取认证会话。新增、编辑保持现有独立页面;平台普通编辑仍只允许待接单且非拼车来源订单,池来源继续只读展示真实承运安排。
- 下单移除运输方式及柜型字段,不再要求选择自送或我司提货。拼车或优先拼载属于内部安排,不再冒充交货方式或作为下单必填项;运输类型和是否打盘不在新增主表单要求填写,未知安排保持空,不自动补造。散板移除柜型字段。
- 需求保存取货地、目的地、可选详细地址补充、起运地联系人及联系电话、目的地联系人及联系电话、商品名称、预计托数、件数、总重量、总体积、预算总价、币种、取货与送达时间和备注。商品名称、预算和备注选填;四项联系人信息与取货、送货时间全部必填;预计托数、件数及重量体积可为零,不能为负。件数、地址补充和备注按统一前端下单表单展开填写。
- `estimatedPalletCount` 是下单预计托数;`packageCount` 是件数,二者独立。下单不生成实物托盘,不把预计托数写成实际收货或实占托位;拼车来源沿真实询价的货名与预计托数保存。
- `pickupAt` 与 `deliveryAt` 保存不带时区的当地日期时间,按分钟输入、原值显示,不进行 UTC 转换。取货与送货时间均必填;送货时间不能早于取货时间。预算明确显示 USD 或 CNY,金额空值与零值区分。
- 平台和客户接口共用 Lastleg `looseboard/dto/LocalLooseboardRequests.java`、`LocalLooseboardResponses.java` 及 `overseas-business-v1.yaml`,不保留旧运输枚举或要求日期别名。现有 API 路径与权限复用,空库结构同步模块基线及海外统一初始化,不回填测试存量,不自动执行 SQL 或部署。
## 美国本土卡独立下单
- 客户端和平台新增/编辑共用同一服务端需求合同:移除运输类型、柜型、下单预报托盘数及原要求时间;车辆类型为必选的“15拖”(`PALLET_15`)或“30拖”(`PALLET_30`)。车辆主档仍独立维护实际容量,车型不等于本票货量。
- 起运地联系人、起运地联系电话、目的地联系人、目的地联系电话、取货时间和送货时间全部必填。时间按日期及小时分钟填写,不进行时区转换;送货不能早于取货。列表、详情与平台编辑展示同一份保存值,客户端不提交客户标识。
- 独立下单不生成预报托盘,首次实际收货确定确认托数;已有拼车来源的真实预报及实际履约继续独立记录。拼车来源未提供的车型、目的地联系人/电话、送货时间保持未知,页面显示“—”,不捏造数据。美本土散板按本文“本土散板简化下单”使用独立需求合同。
- 接口及字段唯一实现合同为 Lastleg `trucking/dto/UsTruckOrderRequests.java`、`UsTruckOrderResponses.java` 与 `src/main/resources/openapi/overseas-business-v1.yaml`;数据结构同步模块基线及海外统一空库初始化。页面承载核对见 Client `cross-border/PROTOTYPE_MATRIX.md` 和 Admin `overseas-business/PROTOTYPE_MATRIX.md`。
## 系统边界与索引维护
- 托盘管理的单张标签 PDF 从 Admin `PalletsView.vue` → `warehouse-overseas-service` 的 `GET /api/platform/v1/warehouse-admin/{warehouseId}/pallets/{id}/label` 进入,只按真实托盘编码打印,不重新生成编号。纸张、方向和模板字段只查[打印标签当前入口](../打印标签维护/README.md)的对应类型;服务接入与权限见海外资源服务 `AGENTS.md`,不在本文复制模板常量或尺寸。
- 海外仓合作仓是现有头程仓库主数据的类型扩展,需同步核对 Admin `warehouses`、Warehouse Service 的 DTO/Controller/OpenAPI/SQL 及实际消费者;不得因此把海外库存业务写入国内 Warehouse Service。
- 海外库存、库内作业和海外本土业务已有明确服务入口:`gateway/` 是统一 API 网关,`lastleg-service/` 拥有尾程订单、入仓计划、换标、库存业务、采购和本土卡车;国内 `warehouse-service` 是仓库主数据唯一权威,`warehouse-overseas-service/` 只拥有库位、托盘及资源锁并引用国内 `warehouseId`。不得把海外库存业务塞入国内 `firstleg/` 或 `warehouse/`。
- 国内装柜完成事件只在海外生成 `PENDING_ASSIGNMENT` 尾程订单、冻结快照和 `FIRST_LEG` 在途库存,不自动生成入仓计划。平台通过 `GET /api/platform/v1/last-leg/orders/container-summaries` 按稳定 `sourceContainerBookingId` 服务端聚合全柜订单、入仓码、计划数、未操作数和 `allPlansReady`,分页返回全部稳定来源柜,已生成计划的柜仍保留供接柜仓查询与修改;`pendingPlanCount` 区分待建计划,`resourcePendingPlanCount` 区分托盘资源待生成,后者仅用于自动生成异常后的重试;详情 `/{sourceContainerBookingId}` 返回柜内全部订单与计划且不受订单分页截断。`plannedArrivalAt` 只来自装柜完成事件 `estimatedWarehouseArrivalAt` 冻结到 Lastleg `ll_order.estimated_warehouse_at` 的计划到仓事实,不得使用创建时间、预计到港或当前时间替代,并按该时间升序、空值最后排序。确认后调用 `POST /api/platform/v1/last-leg/inbound-plans/convert-container`;服务端一次锁定整柜、每票独立生成一个计划,整批原子且幂等。转换成功才将尾程订单推进为 `INBOUND_PLANNED`,并把库存余额的来源入仓码展示快照替换为各自 `planNo`。
- 尾程订单的 `inboundCode` 只保存并展示真实来源入仓码;换标申请、本土散板等没有入仓关系的海外本土业务保持为空,由页面显示 `—`,不得用换标单号、本土散板单号或内部 ID 冒充入仓码。
- 平台可按单票尾程订单入库计划(托数、托盘类型、分配/可合托/加急和备注);入库仓、入仓码和预计到仓时间均展示冻结事实,不允许人工改写。预计到仓日期由服务端锁定来源柜全部订单的 `estimated_warehouse_at`,缺失或同柜不一致时阻断,人工与自动计划统一写入该柜日期。写入时校验订单版本、客户归属、仓库主档和幂等键;一票柜保存后立即自动生成并绑定托盘码、海外仓托盘和资源锁,多票柜在最后一票计划齐全时自动为全柜完成同一动作。`resourcePendingPlanCount` 只用于自动生成失败后的显式重试,不是正常人工步骤。分配、可合托、加急必须随入库单列表和海外 PDA 入仓码作业返回并展示,其中“可合托”只向现场提供选择:合托时扫描同目的仓已使用的托盘码,独立收货时扫描新托盘码,不作为实收或完成门禁。新增暂扣只允许货物完成入库后执行;暂扣只作用于该票并仅阻断排车和出库,不阻断入库计划或入库作业,同柜其他订单不受影响。
- 头程散货在预装确认且真实集装箱号就绪后,按 `集装箱号-FBA仓编码-三位序号` 冻结托盘码;序号在当前柜、当前 FBA 仓内从 001 独立递增。送柜报关、清关提柜和预装清单共用同一按 FBA 仓分组的打印清单,可整柜打印或选择单仓前 N 张补打。该编号随装柜完成事件进入海外,生成入库计划与海外实体托盘时原样沿用;一件代发继续使用国内装箱打托形成的托盘号,不参与散货重新编号。
- 头程与海外仓允许装托密度不同。尾程最终托数取不低于头程已有托盘码数的海外计划结果:头程已有编码全部保留,数量不足时在同柜、同 FBA 内按连续下标补码,不因数量差异阻断。柜级预览必须分别返回并展示头程已有、海外仓补充和最终托数;最终总数不得标成“本次新增”。
- 尾程订单人工节点固定为国内报关完成、预计/实际开船、预计到港、国外清关完成、实际到港等待卸船、预约提柜和卸柜八行完整快照。第一次保存后该订单永久使用 `MANUAL` 来源,读取和页面展示不得再回退柜级节点,也不得反向修改货柜船节点。
- 目的港码头拖车仍归 Firstleg 货柜聚合,但 Admin 清关提柜列表不再使用预约/实际提柜作为到仓业务时间:原两列改为“预计到仓/实际到仓”。未人工维护且未建入库计划时,预计到仓按[预约日历统一日期规则](预约工作日历V13变更说明.md#2026-10-19-当前预约列表收敛规则)展示到港日期加两个自然日的默认值,列表与详情一致且不自动写入。人工调整在列表内选择日期时间并由 Lastleg 按 `sourceContainerBookingId` 原子同步整柜尾程订单,已有入库计划后锁定;实际到仓只取海外 PDA 首次开始收货的 `ll_receiving_container_session.receiving_at`。车队、邮件、还柜及 `unloadingCompletedAt + 72h` 还空预警仍按原码头拖车链路处理。
- 手动还柜以真实海外卸柜完成且尚未还柜为准,仍校验独立还柜权限;无需事先存在车队、预约或提柜时间。首次命令使用版本 0 创建拖车记录,车队字段可为空,不补造提柜事实。还柜时间不得早于卸柜完成时间或已有提柜时间,成功后同步标准还柜节点并解除报空预警。
- 船节点是头程海运在途事实与海外接柜之间的衔接能力,业务聚合继续由 Firstleg 按 `containerBookingId` 柜级持有,不绑定客户;跨区域事件使用 `tenantId=0` 平台技术范围,到港/可提柜结果通过明确契约提供给海外区域,不复制第二套轮询任务。
- Admin、Client 及海外 PDA 按当前统一 Gateway、Auth 会话与可靠直接投递契约接入;不沿用旧双区域 API 或独立海外 Token,业务页面不自行实现第二套登录。
- 海外仓 PDA 使用独立 `apps/pda-overseas-uniapp/` 工程和发布身份,但账号仍由国内 Auth 唯一签发;真实作业请求必须经统一 Gateway 的显式 PDA 路由。工作台只展示已注册并启用的现场作业,其他业务通过 Admin/Client 完成,不以某个终端是否承载全部操作判断端到端流程是否完成。
- 海外 PDA 的实际收货仓是国内 `warehouse-service` 中 `tenant_id=0`、类型为 `OVERSEAS`、状态 `ACTIVE` 且启用 `RECEIVING` 能力的平台共享物理仓,并由当前海外 PDA 作业账号的仓绑定固定,角色与会话字段以统一认证契约为准;海外数据库只保存相同 `warehouseId` 引用。PDA 不接收仓库 ID,也不能切换柜号。统一 Gateway 对每个 `/api/pda/**` 请求在本地验签后向 Auth 实时核对账号 `token_version` 与当前仓绑定,换仓或清空绑定后旧 Token 立即失效,Auth 不可用时拒绝请求。待收柜在首次准备时原子认领到该仓,入仓计划、尾程订单和收货会话冻结实际仓 ID/名称;国内装柜事件的仓库仅作为来源仓快照,目的仓/FBA 仓也不得冒充实际收货仓。
- 海外 PDA 接柜候选、认领会话、国内五类装柜照片对照、海外三类签收照片与整柜完成均按 `sourceContainerBookingId + containerNo` 聚合,不保存客户并允许同柜多个客户。国内照片在签收阶段展开、收货阶段折叠,只读加载失败不阻断拆柜。签收后为柜内每个计划按其自身客户生成任务;入仓码解析、SKU 实收、托盘占用和库存入账继续按该票真实客户隔离,整柜完成需全部计划核平且只发布一次柜级完成事件。
- 业务规则只改本主题正文或相应正式契约;仅代码入口、职责或路径变化时更新实际受影响的索引与最近指引,不批量同步所有层级。不把排期、完成比例或临时任务状态写入快速索引。
## 码头车队邮件
首次选择车队后从清关提柜列表发送请求,更换车队时原子保存原车队取消和新车队提柜两封邮件;同一车队重复选择不发信。邮箱读取供应商资料,缺失或无效时阻断发送或换队。邮件顺序投递,失败待人工核对后重试。接口、临时模板和启用方式见 [Firstleg 车队邮件说明](../../baiyue-firstleg/firstleg/docs/terminal-drayage-mail.md)。
@@ -4,6 +4,16 @@
## 1. 目标与首版范围 ## 1. 目标与首版范围
### 当前页面范围(2026-10-21)
用户确认「海外业务 → 散板需求」当前仅作为平台内部的排车余位需求池,人工联系、下单,不向客户公开运力市场。2026-10-22 简化智能排车:搜索区仅提供默认不勾选的“发布公共需求”,统一应用于本次生成的所有排车单,每车独立保存;移除下方计划时间与备注填写区,需求时间直接使用关联排车的计划发车时间,时间和备注沿用“维护车辆信息”维护。2026-10-23 收敛为仅在“智能排车”建单时选择发布,默认不勾选;排车列表和入库单复用同一智能排车弹窗。维护车辆不再提供发布、取消发布或恢复发布,编辑命令不接收发布字段;预约工作日历创建排车不自动发布,服务端新建缺省也不发布。需要重发时,按原取消门禁取消当前排车,再通过智能排车重新创建并勾选发布。发布选择与新建命令同事务保存,沿用原权限和幂等键。
数据源直接来自当前排车主单,不再依赖旧车次的人工余位发布记录,也不创建另一份车次、发布单或占位。仅勾选发布、ACTIVE、DELIVERY、未实际发车且处于装车前/装车中/装车后的排车进入列表;取消排车、实际发车/进入派送中或任一已知容量维度满载时自动退出。取货和本土卡车排车不参与。查询复用实时排车快照,按本车业务号一行展示,不返回客户货物、司机私人信息或内部ID。
车辆容量与已排实托数分别展示,不将实托数等同标准托位。可靠装载确认存在时,用去重实托的标准托位、重量和体积计算起运段可再接的余量;首版均从我仓上车,沿途只卸货。任一已知维度已满即退出;缺少可靠装载/容量资料时保留需求并明确“余位待确认”,不填零、不按车型名称或默认30托推算。不存在可公开的调度联系方式时,不以司机电话替代。新列表仅读取运输和容量摘要,不开放详情跳入旧车次、登记、确认承运、来货、核量或排入本车等操作。
原需求池与后续拼车实现保留,不增加开放登记的功能开关、不删除组件或业务处理代码。客户本土散板下单入口保持独立;下文完整拼车流程描述保留能力,不能据此认为当前页面已开放。新增发布字段、读接口与页面的代码完成不等于已执行SQL、已部署或已通过真实环境验收。
### 2026年10月9日操作简化开发定稿与预约交接 ### 2026年10月9日操作简化开发定稿与预约交接
本次已收到开始开发指令,采用《拼车数据入口与操作简化评估草案》第七、八节的完整范围:已有车次接货,分阶段登记、服务端缺项及角色提示、原登记连续履约、合格排车候选、共用车次准备与实收排入。保留直接外接预订来源,不新增独立待配货池、虚拟运力或跨车改配。本文记录规则,发布与实际验收继续归环境主契约。 本次已收到开始开发指令,采用《拼车数据入口与操作简化评估草案》第七、八节的完整范围:已有车次接货,分阶段登记、服务端缺项及角色提示、原登记连续履约、合格排车候选、共用车次准备与实收排入。保留直接外接预订来源,不新增独立待配货池、虚拟运力或跨车改配。本文记录规则,发布与实际验收继续归环境主契约。
@@ -1,8 +1,10 @@
# 外配业务首版开发契约 # 外配任务开发契约
## 已确认业务边界(2026-10-20) ## 已确认业务边界(2026-10-21更新)
本页是原排车装车后的外配车辆运营视图,与自有业务按车辆归属区分,不是第二套排车或车次流程。仅显示 ACTIVE 且 AFTER_LOADING、DELIVERING、DELIVERED 的原排车,一单一行,多个目的地、预约在行内展开。档案车辆装车时归属 DISPATCHED、临时车辆原资源模式 EXTERNAL 都属于本页;读取原装车事务的归属证据,不按货物 OWN/EXTERNAL 分类,不在 GET 回填旧样本。原排车四页签及履约流程不变。 本页是原排车装车后实际接入拼车货物的运营视图,与自有业务按是否实际拼车区分,不按车辆归属区分。仅显示 ACTIVE 且 AFTER_LOADING、DELIVERING、DELIVERED 的原排车,一单一行,多个目的地、预约在行内展开。自有车辆、档案外配车辆、临时外配车辆均可进入;车辆信息继续读取原装车证据,不在GET回填旧样本。原排车四页签及履约流程不变。
实际拼车判定复用原关系:`ll_fleet_external_booking.offer_id`非空、状态BOUND、有实收确认,且trip_id/dispatch_no指向本车;来货客户和入仓来源须在本车真实计划托盘组成中,实托已关联且货物箱数为正。只发布余位、询价、确认占位、未排入的实收、已取消或移出本车的货物不计;非需求池来源的普通外接登记和多客户同车本身也不计。用EXISTS判断,至少一票即整车归入外配任务,多票不得重复计数。自有入口使用相同条件的否定;列表、全量统计、详情和运营操作保持一致。装车后货物不能普通增删,已绑定预订不能普通取消;复用这些现行门禁及关联事实,不新增分类持久化或回填链路。
用户本轮明确批准:后台登记整车承运金额,单价为金额除以实际物理托数;保留逐目的仓实际到达时间和五个装车照片位,省略实际里程、油耗与两个油耗照片位。不实现原型的自有货/外接货拆分成本或自动分摊、应付/支付;不增加报价、派单、改派或异常状态机。异常仍按已确认的线下处理规则。 用户本轮明确批准:后台登记整车承运金额,单价为金额除以实际物理托数;保留逐目的仓实际到达时间和五个装车照片位,省略实际里程、油耗与两个油耗照片位。不实现原型的自有货/外接货拆分成本或自动分摊、应付/支付;不增加报价、派单、改派或异常状态机。异常仍按已确认的线下处理规则。
@@ -15,7 +17,7 @@
- 外配 DTO 单独明确表达精简字段:`operations={money,arrivals}`,无实际里程/油耗;`vehicle={vehicleId,plate,ownership,carrierName}`,vehicleId 可空;`photoSummary={loadingCount}`。其他 Row/Detail/History/Command 字段及版本语义沿已确认自有合同,附加与原主单版本独立。后台拒绝本域不支持的油耗写入/照片槽,不能仅前端隐藏。 - 外配 DTO 单独明确表达精简字段:`operations={money,arrivals}`,无实际里程/油耗;`vehicle={vehicleId,plate,ownership,carrierName}`,vehicleId 可空;`photoSummary={loadingCount}`。其他 Row/Detail/History/Command 字段及版本语义沿已确认自有合同,附加与原主单版本独立。后台拒绝本域不支持的油耗写入/照片槽,不能仅前端隐藏。
- 五框枚举为 LOADING_SCENE、LOADING_LIST、PRE_DEPARTURE_CHECK、DRIVER_LICENSE、RECEIPT;复用已经发布的原排车装车照片 File 分类,不新增 File 分类。上传与绑定分开,multipart 内 file/idempotencyKey,未知停写、绑定失败复用原 fileId 与原键。 - 五框枚举为 LOADING_SCENE、LOADING_LIST、PRE_DEPARTURE_CHECK、DRIVER_LICENSE、RECEIPT;复用已经发布的原排车装车照片 File 分类,不新增 File 分类。上传与绑定分开,multipart 内 file/idempotencyKey,未知停写、绑定失败复用原 fileId 与原键。
- 详情三个彩色图标页签:任务与车辆信息、路线货物与凭证、操作记录。运营登记和照片居中弹窗沿现有组件规范;照片只有装车五框。列表操作列第一列;缺值明确“—”,无 GPS/ETA 样例。 - 详情三个彩色图标页签:任务与车辆信息、路线货物与凭证、操作记录。运营登记和照片居中弹窗沿现有组件规范;照片只有装车五框。列表操作列第一列;缺值明确“—”,无 GPS/ETA 样例。
- 可以复用四张附加表及原装车捕获;技术表名不决定车辆分类,服务端按冻结归属与可信入口限定。本域不新增业务表、不改原主单/库存/财务。如确有无法复用之处先交根裁定,不自行执行 SQL 或扩大持久化模型。 - 复用四张附加表及原装车捕获;服务端按实际拼车分类与可信入口限定业务访问,原车辆冻结证据只保证真实车辆信息。vehicle.ownership允许OWNED/DISPATCHED,不能固定返回DISPATCHED。本次不扩展两页运营表单及照片槽,本域不新增业务表、不改原主单/库存/财务。
## 本批职责与验证 ## 本批职责与验证
@@ -1,26 +1,49 @@
# 排车列表统一作业改造契约 # 排车列表统一作业改造契约
本契约规定排车列表五阶段、整车与客户货物归属、派送安排及 Admin 和海外 PDA 的共同目标。2026-10-19 用户确认一张排车单代表一趟车,并指定当前对话为本批总控;经逐项问答确定本契约的业务和界面基线,再下发三个任务做技术准备,共同接口冻结后才解锁生产代码实现。本契约描述目标及实施边界,不表示代码、部署或真实验收已完成;部署与真实验收事实仍维护在两份环境主契约。 本契约规定排车列表作业阶段、整车与客户货物归属、派送安排及 Admin 和海外 PDA 的共同目标。2026-10-19 用户确认一张排车单代表一趟车,并指定当前对话为本批总控;经逐项问答确定本契约的业务和界面基线,再下发三个任务做技术准备,共同接口冻结后才解锁生产代码实现。本契约描述目标及实施边界,不表示代码、部署或真实验收已完成;部署与真实验收事实仍维护在两份环境主契约。
本批规则优先于旧车次独立列表及多张客户排车关联共享车次的交互说明。旧缺陷修复规划仅用于核对已修复行为,不覆盖本批目标。 本批规则优先于旧车次独立列表及多张客户排车关联共享车次的交互说明。旧缺陷修复规划仅用于核对已修复行为,不覆盖本批目标。
## 一 用户已确认的业务目标 ## 一 用户已确认的业务目标
1. 排车列表一次覆盖装车前、装车中、装车后、派送中、派送完成五个阶段。 2026-10-22 用户最新确认:允许先排车后预约,也允许先预约后排车;本条替代同日此前“FBA必须先约才能选入排车”的口径。一张排车单同一FBA目的仓仅填写一个约好的编号,同仓多票、多托及跨客户货物共用该目的仓编号;两个目的仓填写两个编号,不要求客服逐票关联或分配预约箱数。尚未预约不阻止普通入仓货物候选、新建、加货、草稿及正式转换,未实收仍沿真实计划来源,不伪造库存。客服在维护车辆信息中按目的仓填写,保存允许暂缺;提交调度审核必须补齐本车所有FBA目的仓编号,缺失时明确提示仓码。调度和理货通过、真实拣货、装车及发车继续复验,取消、驳回回车辆信息及失败后继续操作的规则保留。换标、退货独立来源不新增预约创建入口,实际客户、货物数量与库存归属保持逐来源核验。
车辆维护在现有派送信息区直接展示“目的仓/预约号/确认送达时间/货件号”表格,同仓只出现一行及一个预约号输入框,确认时间和全部货件号自动带出;修改编号后保存前不沿用原编号的确认时间,不再从关联订单跳转逐票预约分配弹框。已有完整且唯一的已确认预约来源可自动携带,按目的仓合并编号;同仓存在多个不同确认号时由客服明确填写本车使用的一个号,不任选第一条。未选正式批次时仍按本车真实客户、来源与箱数保存内部实物关联;已有明确批次引用继续核实归属及分配数量,但不要求客服逐票操作。维护写入沿用原Update的`maintenance.destinationAppointments[{destinationKey,appointmentNo}]`,存于既有resourcesJson,不新增表、权限或预约创建接口;原整车单号、货物和库存不变,编号变化使原审核依据失效。非法目的仓、重复仓、过期版本及阶段不符须拒绝并回滚,页面保留输入、重新读取后可重试。
列表、详情、审核、PDA与车辆维护共用按目的仓汇总的预约投影,BOL沿同一目的仓使用客服保存的编号,各票客户归属及箱数不改变;预约号筛选包含目的仓登记值,不再命中该仓已被人工改选覆盖的旧编号。已确认时间仍取匹配编号的当前有效正式确认,保留当地时区和原时段校验;仅填写编号不伪造正式确认时间,显示已登记,不能用计划发车或预计到达代替。货件号沿本车真实客户、计划逐票分配及直接订单关联读取,不依赖是否存在正式FBA预约批次;手填目的仓预约号时也须带出实际货件,同仓合并去重,不把其他客户货物并入本票。排车列表司机与联系电话保持两列,仅消费真实字段,缺失显示“—”。所有阶段、装车前审核分区和排车类型均展示主单created_at的真实创建时间,不以计划发车或更新时间替代,不逐行请求详情。
2026-10-22 车辆与图片门禁:车辆候选按海外在役状态及真实车次占用在服务端分页前筛选,排除其他车次占用并保留本车资源;当前选择失效可清除或改选,提交仍复验。草稿允许分步保存,提交审核及审核通过必须分别具备至少一张有效车辆图片、司机照片、驾驶证照片;选图未上传、上传失败、作废文件不计为有效资料;驾驶证接受PDF/JPG/PNG原件。每次放行复核文件有效性及分类归属;主档驾驶证按冻结来源读取,本趟补传图片按排车归属保留,不因主档解析丢失。主档换证后再次保存,服务端按原冻结来源标记剔除旧主档引用,再由车队解析当前主档;保留本趟补传图片及原历史,不把旧主档证照改按排车附件校验。
2026-10-21 新增内部散板需求发布选项,2026-10-22 简化智能排车入口;当前发布选项、时间来源及派送排车的候选、满载退出和未知容量口径统一见[内部散板需求池当前范围](内部拼车需求池首版开发契约.md#当前页面范围2026-10-21)。选项仅随新建命令按车同事务持久化,编辑不修改发布选择,不改变排车审核、实际拣货、装车照片或发车流程。
1. 2026-10-21 用户最新确认:排车列表恢复装车前、装车中、装车后、派送中、派送完成五个作业阶段。装车中可同步上传资料;确认装车完成且资料齐全才进入派送中。装完但资料未齐留在装车后,资料先齐则确认装车时直接派送;此规则替代同日此前“装完即发车”的确认。
2. 一张排车单就是一趟车,允许同车多个客户、多个目的仓;各票货物、库存、单据和费用必须保留真实客户归属。 2. 一张排车单就是一趟车,允许同车多个客户、多个目的仓;各票货物、库存、单据和费用必须保留真实客户归属。
3. 装车前包含车辆信息、调度审核、理货员审核;维护车辆信息后提交调度审核,再经理货员审核进入装车中。 3. 装车前包含车辆信息、调度审核、理货员审核;维护车辆信息后提交调度审核,再经理货员审核进入装车中。2026-10-21 用户确认审核链:客服在最初的车辆信息入口维护并提交,不新增独立客服审批级别;调度或理货员任一环节驳回均须填写原因,并统一回车辆信息/客服处理分区,离开待审队列。客服处理期间保留驳回环节、原因和原审核记录,编辑不抹除原因;重新提交开启新轮次,必须重新经过调度及理货审核,不复用旧批准。理货审核允许 Admin 或绑定仓 PDA 操作,两端共用版本、幂等和审核依据;通过前不得真实拣货,通过后才进入装车中。
4. 装车完成与实际发车是两个动作,均允许后台和 PDA 确认;两端使用相同服务端规则、版本和防重复约束。 2026-10-21 用户确认精简车辆维护入口:仓库派送排车的列表、详情隐藏“调整卸货顺序”和独立“提交调度审核”;提交统一放在“维护车辆信息”弹框,保留“保存”和“提交审核”。提交审核先保存本次车辆、司机、时间与附件,再读取最新版本和服务端资格提交;两步分别执行,失败提示后保留输入并结束请求态,用户再次点击按当前事实重新请求。车辆维护和提交审核不提供备注输入,保留已有备注;调度/理货审核的驳回原因仍必填。到仓取货沿独立运输操作入口,不受本次车辆维护弹框合并影响。
5. 装车完成进入装车后;后台在装车后、实际发车前办理安排派送,核对派送信息及各客户费用,按客户和目的仓拆分派送单。派送安排完成后才允许后台或 PDA 确认发车。 2026-10-21 用户进一步确认:调度审核、理货员审核两个列表分区只提供“审核、详情”,不展示维护车辆信息或其他操作菜单。Admin审核弹框可补充车辆图片、司机照片、驾驶证照片,已有证据只读预览;新增附件随本次通过或驳回保存,不借维护车辆信息重写车辆/司机资料或改变审核依据。上传及提交均按当前待审环节的审核权限校验,并逐文件核验本车及分类归属;附件读取沿列表查看权限。理货驳回、客服修改保留已提供证据,新一轮提交清当前审核附件并保留历史。PDA继续使用既有审核入口,本次不新增PDA上传界面。
6. 实际发车进入派送中;全部正常派送签收完成后自动汇总派送完成。拒收、退回等作为异常,先线下人工处理,不自动视为正常签收完成,不在本批新建线上异常闭环或伪造库存恢复、签收、账务结果。
维护资料通过 `DispatchCommands.Update.maintenance` 保存到现有 `resourcesJson.maintenance`,详情对称返回 `vehicleInfo.maintenance`,唯一类型为 `DispatchContracts.Maintenance`。整体及八字段均可空,空白文本规范为 null,允许空草稿保存:`plannedDeliveryDate` 为 ISO 日期 `YYYY-MM-DD`;`deliveryMethod` 为 FBA自提/客户自提/卡派打托/卡派地板/快递/外配;`pickupMethod` 为一提一卸/一提多卸;`loadType` 为托盘/地板/混装;`fleetEmail` 最多254字符;`vehicleType` 为厢式货车/平板车/集装箱卡车;`appointmentAccount` 最多128字符;`destinationAppointments` 按本车目的仓去重,每项为目的仓业务键和最多128字符的预约号,空白可暂存但提交审核必须齐全。不新增审核级别或权限,正式确认时间、实际发车及派送费用口径保留。MASTER/EXTERNAL 车辆的本趟 `evidenceFileIds` 均保留到资源快照,不能被主档解析清空;保存及审核对非空照片逐项核验本排车及 VEHICLE 类别、有效性,调度审核读取同一已保存证据,不写入车辆主档。
2026-10-21 用户确认:在装车前清除“有效排车”筛选后,仍保留车辆信息、调度审核、理货员审核三个页签及当前选中项;查询沿用空值默认有效排车的规则,切换页签继续按当前审核分区查询。
4. 2026-10-21 用户确认:装车完成确认真实实载,Admin与PDA成功结果在资料未齐时为AFTER_LOADING、资料已齐时为DELIVERING。装车中及装车后均提供司机驾驶证、车牌照片、装车完成、封车照片、BOL司机签字五类资料(每类1至5份),两端均可拍照/选择图片、上传、预览及替换,按整张排车单共用当前照片与附加资料版本,不依赖派送单或按客户重复上传。五框全部绑定保存且已确认装车完成后自动进入派送中;不以选图、文件上传回执或重复槽位充数。保留真实拣货核平、实载校验、版本及防重复约束。
自动带入规则:理货审核通过、进入装车阶段时,服务端将本趟已核验驾驶证和车辆照片分别复制为“司机驾驶证”“车牌照片”类别的独立装车附件,PC与PDA共用同一份照片记录及版本。每类最多带入5份,仅填充空类别,来源未变化时保留已有现场照片及替换结果,重复审核不重复复制;退回后保存车辆身份、司机身份或对应证照附件变更时,对应类别的旧资料(含手工上传)与资源修改同事务失效,保留文件和历史,车辆身份变化还须失效装车完成和封车照片,司机身份变化还须失效BOL司机签字;同一身份仅补换证照图片时保留其他现场凭证。再次理货通过后仅按新来源带入驾驶证及车牌资料,失效的现场凭证须重新上传。上传携带选择照片时的审核轮次reviewRound,服务端保存到原上传账本;绑定携uploadKey,核对文件、类别、操作者及当前审核轮次,旧轮次上传即使采用最新资料版本也不得绑定。后续主档换图不改本趟附件。司机人像不放入驾驶证类别,其余三类由现场上传。驾驶证支持PDF原件(计一份)并可在两端查看;其他类别只接受JPG/PNG。复制失败时本次审核与资料绑定同事务回滚;GET保持只读,不执行测试存量补写。
5. 装车已完成时,第五张装车照片绑定与按客户和目的地生成出库/派送单、记录实际发车并进入派送中在同一事务完成;照片先齐时,这些动作随装车确认在同一事务完成,仍无人工安排派送及确认发车入口。上传和绑定各保留稳定原请求键;第五张绑定或派送失败时保留装车后、前四张及原上传文件,原请求可恢复,不能留下半车或重复派送。PDA每次按Token绑定仓校验,Admin沿排车list只读、edit上传保存。照片使用原整车附加记录及文件归属,不新增存储表;五个既有技术槽位按顺序映射上述五类资料,不替代司机审核或真实签收。真实外接报价沿原费用路径发布,未知派送补充资料与费用保持未确认,不猜测金额或原费用覆盖、不填写零费;后续由既有后台资料/费用管理维护。装车中上传齐资料不会提前发车;照片先齐时派送失败回滚本次装车确认、保留已保存照片,原请求可重试。装车完成原键恢复本次事务原最终阶段(AFTER_LOADING或DELIVERING),资料保存原键恢复原保存结果,当前阶段须另读;不重复扣库存。
6. 实际发车后为派送中;全部正常签收完成后自动进入配送完成。派送中可以“标记异常”:类型必填(拒收、部分签收、车辆异常),退货去向选填(退回海外仓、其他),说明和图片选填。登记沿排车维护权限,按本车版本及原请求键防重,异常记录和图片保存在主单并于现有“排车信息”详情回看;阶段仍为派送中,不自动创建退货、恢复库存或确认签收。异常后续处置由人工处理,本轮不新增线上异常闭环。
资料入口(2026-10-28 最新确认):装车中、装车后从“管理资料”打开整车五类资料;有效排车在派送中从“管理资料”居中弹框进入,签收文件、装车资料两个页签,配送完成列表不再提供“管理资料”入口;2026-10-22 暂隐藏油耗图片上传和展示入口,原图片、版本及历史保留;按本车真实关联派送单及客户范围切换。签收文件与 BOL 复用派送单原附件记录;排车装车资料只维护整车共用的五类资料,不再同时显示另一套派送单装车照片上传框。派送单既有附件仍可从派送单资料入口查看,当前页签的上传类别统计只包含该页签内容。签收文件保存即沿现行逻辑完成对应派送单,全车全部正常签收才汇总配送完成;其他资料后补,不作为完成门禁。车辆与司机审核附件只读回看,油耗图片按车复用车队附加照片、版本及历史;保留原油耗接口的dispatch:list读取、dispatch:edit上传权限,当前排车页面不挂载油耗框,不改变车队原独立权限。外配任务原入口仍只输出五个装车框,但共享记录允许排车入口补充油耗图片;不复制派送签收文件为车队照片,不新增状态或数据库表。
2026-10-21 本轮登记契约:`POST /api/platform/v1/last-leg/dispatches/{dispatchNo}/exceptions`,动作`MARK_EXCEPTION`,`recordVersion/idempotencyKey/exceptionType`必填;`returnDirection/description/imageFileIds`选填。说明最多1000字、图片最多20张;异常图片类型`OVERSEAS_DISPATCH_EXCEPTION_EVIDENCE`,平台0、本车ID归属,非空JPG/PNG、单文件10MiB。主表新增可空`exceptions_json`,与原版本、历史、命令账本同事务保存;代码及基线已准备,未执行SQL或部署。
7. 本批聚焦排车列表、详情、直接关联操作及必要生产者和消费者。车辆列表、司机管理、自有业务、外配业务、出车记录的整页改造后续逐页处理。 7. 本批聚焦排车列表、详情、直接关联操作及必要生产者和消费者。车辆列表、司机管理、自有业务、外配业务、出车记录的整页改造后续逐页处理。
8. 同时支持先选同一起运仓的可排货物/托盘再生成排车单,以及先创建空排车单再添加货物;空单不能伪造货物、拣货、装车或发车事实。 8. 同时支持先选同一起运仓的可排货物/托盘再生成排车单,以及先创建空排车单再添加货物;空单不能伪造货物、拣货、装车或发车事实。2026-10-21 用户进一步明确先排车和货物,车辆、司机在建单后由调度或客服在后台补充,不涉及客户自助填写;新建排车不展示或要求填写车辆、司机及证照,先完成货物分组,允许选填每趟计划时间和备注。计划托位仅用于预排分组,不表示已绑定真实车辆。后续维护车辆信息及提交审核继续使用既有资源资格校验。用户随后明确:货物计划增减统一在智能排车办理,排车列表车辆信息及详情不再单独提供添加/移除货物。智能排车同时承载新建及已生成排车货物调整,已有单使用原排车号和正式货物命令,不转换为草稿或重建单据;保留真实PDA拣货,已扫码禁止调整,理货审核通过且零扫码时先显式退回重审后再调整。
2026-10-21 区域入口确认:智能排车新建选货删除查询区的海外仓选择,仅保留“全部/洛杉矶/纽约”。候选接口 `warehouseId` 可选,不传时按区域做数据库分页、计数;指定仓的已有排车和预约消费者保持单仓查询。首个选中来源决定草稿真实起运仓,草稿建立后按该仓读取并禁止切换至其他区域混仓;全部表示该草稿仓的全部候选。未确定起运仓且区域匹配多个仓时不能提前创建服务器车辆容器,先选货再确定仓。空单没有来源可推断仓,其起运仓放入排车设置内选择。创建、锁货和转换的同仓约束保持不变。
9. 车辆和司机既可从已有档案选择,也允许临时填写外配车辆和司机;临时填写不伪造车辆或司机档案关联,不自行创建主档。 9. 车辆和司机既可从已有档案选择,也允许临时填写外配车辆和司机;临时填写不伪造车辆或司机档案关联,不自行创建主档。
10. 后台确认装车完成必须以PDA真实拣货核平为前提。后台不提供替代PDA的拣货数量补录来绕过此条件;PDA和后台均可确认装车完成及实际发车的既有确认保持。 10. 后台确认装车完成必须以PDA真实拣货核平为前提。后台不提供替代PDA的拣货数量补录来绕过此条件;PDA和后台均可确认装车完成;两端可在装车中同步上传五类装车资料,由服务端在装车与资料均完成时自动发车。
11. 用户随后澄清本次“新增预约”是预约日历的功能需求,先与本批排车改造分开整理。本批不新增日历预约创建或独立约车流程;排车保留已有FBA预约关联;用户随后对车辆预约权威来源问题答复“那就不要”,因此排车取消车辆预约字段、关联操作及公开协议,不再等待或新建该权威提供者。此前确认的先保存后关联意见保留为日历需求输入,不作为本批扩大实现范围的授权。 11. 用户随后澄清本次“新增预约”是预约日历的功能需求,先与本批排车改造分开整理。本批不新增日历预约创建或独立约车流程;排车保留已有FBA预约关联;用户随后对车辆预约权威来源问题答复“那就不要”,因此排车取消车辆预约字段、关联操作及公开协议,不再等待或新建该权威提供者。此前确认的先保存后关联意见保留为日历需求输入,不作为本批扩大实现范围的授权。
12. 用户进一步明确“本批支持整托同车”:两张换标单已合到同一实托时,整托进入同一排车主单,物理托盘及容量只计一次,各换标单的箱数、客户及扫码归属分别保留。不得只装第一来源、借第一客户承载其他来源,或把同一实托拆成两张排车绕过排他占用;此确认取代该场景的待决定状态及仅作前置拦截的候选方案。 12. 用户进一步明确“本批支持整托同车”:两张换标单已合到同一实托时,整托进入同一排车主单,物理托盘及容量只计一次,各换标单的箱数、客户及扫码归属分别保留。不得只装第一来源、借第一客户承载其他来源,或把同一实托拆成两张排车绕过排他占用;此确认取代该场景的待决定状态及仅作前置拦截的候选方案。
13. 用户进一步确认:换标已由客户确认完成、关联出库单尚未扫码时,只取消本次出库安排,保留已完成的换标成果,退回待安排。不得将已确认换标申请一并作废;取消须清除本次有效出库关联,保持真实客户、原换标成果及重新安排资格。此规则不放开已扫码取消或新增回库流程,整车取消仍遵循既有阶段、版本和零扫码门禁。 13. 用户进一步确认:换标已由客户确认完成、关联出库单尚未扫码时,只取消本次出库安排,保留已完成的换标成果,退回待安排。不得将已确认换标申请一并作废;取消须清除本次有效出库关联,保持真实客户、原换标成果及重新安排资格。此规则不放开已扫码取消或新增回库流程,整车取消仍遵循既有阶段、版本和零扫码门禁。2026-10-21 用户确认排车安排与货物事实分离:整车取消只撤销本车运输安排、预约分配及逻辑/物理占用,恢复本车换标预占,不改变货物实收、库存或已完成换标成果;未实收计划无需实托,已有实托也不重新按当前库存数量、来源组成或装车资格校验取消。取消仍先锁本车原换标申请及原实托串行点,并保留版本、装车前、零真实扫码、无有效出库及车队未执行门禁;扫码、装车和发运继续使用原严格货源校验。
14. 2026-10-20 用户在人工BOL验收中最终确认:保持现有一次下载/预览PDF的方式,PDF内按“目的地+预约号”分别生成BOL;同仓同预约号的货物合并,不同预约号分成各自BOL,不按客户拆打印分组。用户前述“不同PDF”在后续“就和现在一样”的答复中已明确沿用现有承载,总控已说明当前实际是一个PDF包含多张BOL;不新增选择弹框、压缩包或下载协议。没有预约号也能打印,预约号栏留空,同目的地且均无号的货物合成一份。各BOL明细超页时可有自身续页,按原分页容量处理;打印分组不修改各票货物、库存、派送和费用的真实客户归属。货物按真实预约分配及数量归集,不把同一明细全量重复复制到每个预约。 14. 2026-10-21 用户确认:排车BOL前端仅在本轮调度审核通过后展示下载入口,无需等待理货审核或装车完成;未提交、待审核、驳回及审核失效时隐藏。用户明确本次仅改前端,后端下载接口不增加审核判断。审核分区仍仅保留审核、详情。2026-10-20 用户在人工BOL验收中最终确认:保持现有一次下载/预览PDF的方式,PDF内按“目的地+预约号”分别生成BOL;同仓同预约号的货物合并,不同预约号分成各自BOL,不按客户拆打印分组。用户前述“不同PDF”在后续“就和现在一样”的答复中已明确沿用现有承载,总控已说明当前实际是一个PDF包含多张BOL;不新增选择弹框、压缩包或下载协议。没有预约号也能打印,预约号栏留空,同目的地且均无号的货物合成一份。各BOL明细超页时可有自身续页,按原分页容量处理;打印分组不修改各票货物、库存、派送和费用的真实客户归属。货物按真实预约分配及数量归集,不把同一明细全量重复复制到每个预约。
15. 2026-10-20 用户确认排车业务号为`PC`前缀、八位日期、四位日流水,例如`PC202610200001`。日期沿用平台业务时区`Asia/Shanghai`,每天从0001开始,全平台跨客户和仓库统一递增;首次建单分配,命令重放返回原号。流水在独立短事务中原子分配,避免持车辆/来源锁时延长全平台序列锁;取消或建单失败不复用已分配号,最大流水反映编号进度,准确单量以列表主单统计为准。四位当日用满后明确拒绝,不回绕重号。本条不表示DDL执行或环境发布完成。 15. 2026-10-20 用户确认排车业务号为`PC`前缀、八位日期、四位日流水,例如`PC202610200001`。日期沿用平台业务时区`Asia/Shanghai`,每天从0001开始,全平台跨客户和仓库统一递增;首次建单分配,命令重放返回原号。流水在独立短事务中原子分配,避免持车辆/来源锁时延长全平台序列锁;取消或建单失败不复用已分配号,最大流水反映编号进度,准确单量以列表主单统计为准。四位当日用满后明确拒绝,不回绕重号。本条不表示DDL执行或环境发布完成。
@@ -30,10 +53,14 @@
候选分页参数为`page`(默认1)、`size`(默认20,最大50)及服务端仓库页签`warehouseTab=ALL/LAX/NYC`;沿用原仓、计划、订单、目的仓、来源阶段和草稿筛选。响应`total/page/size/pages`明确筛选全集及当前页,顶层`complete`仅首且唯一页包含全部来源时为true,不能用于拒绝普通分页;`selectionGroup.complete`继续独立证明同托及整申请完整来源。原草稿一次选取仍由服务端解析完整组,不能按页拆开锁货。 候选分页参数为`page`(默认1)、`size`(默认20,最大50)及服务端仓库页签`warehouseTab=ALL/LAX/NYC`;沿用原仓、计划、订单、目的仓、来源阶段和草稿筛选。响应`total/page/size/pages`明确筛选全集及当前页,顶层`complete`仅首且唯一页包含全部来源时为true,不能用于拒绝普通分页;`selectionGroup.complete`继续独立证明同托及整申请完整来源。原草稿一次选取仍由服务端解析完整组,不能按页拆开锁货。
原PLAN实收后的PDA任务GET须在不写入绑定的前提下,核对原客户、仓、数量、目的地、订单组成及完整同托来源后返回真实可拣仓位。未实收或组成变化不返回可拣仓位;首次pick仍在原事务中加锁复核、绑定原计划实托及扣减库存。诊断接口补仓位不算正式PDA产品链路通过。 2026-10-22 用户进一步确认:逐托数量在拆柜清点并确认入库时确定,收货9+11,原车出货也必须为9+11;不能等首次出货再补写数量。实收前的预排估算仅保留计划依据,不作为实收后逐托箱数相等的门禁。确认入库在原事务内先锁齐原车辆、排车与预约,再按已确认的逐客户、订单及托盘来源更新原排车实托绑定、明细箱数、整车/车次汇总和预约逐票分配;失败整体回滚,不产生出库扣减。预约归属沿原选择唯一匹配,不按托数均分实收、不替现场猜测多批次分配;身份及归属不变的自然实收保留原审核与历史。PDA任务GET只读取收货已交接事实,不投影修正数量;出货扫码只执行已确认的实托及箱数,不补绑定或改写收货数量,默认带出本来源可拣数量。未实收、来源身份变化、冻结/其他占用及重复扣货仍须阻止,不能吞入其他客户、订单或未选中的同托来源。诊断接口补仓位不算正式PDA产品链路通过。
2026-10-23 用户确认:普通入仓货物实收前保留计划分托估算;确认入库时,按各来源订单毛重×本托确认箱数÷该来源应收箱数汇总毛重(保留三位小数),体积汇总收货端记录的逐来源体积,并在原事务内同步原预排明细,包括清除已失去来源依据的计划值。后续新建/加货的已收货候选按当前可用库存位置及余额关联的真实入仓来源计算,以来源毛重/体积×当前可用箱数÷来源总箱数汇总,毛重三位、体积四位;拆合托及部分出库后不复用原整托收货数量,合入不同来源逐来源计算,缺少任一有效来源依据时对应指标保持未知。客户来货的仓储转运优先使用同一转运来源、同仓、全量可用且未拆合换绑的唯一逐托实测值;不将尾程订单ID当作入仓单ID,不把整托实测复制给部分库存。分摊值不冒充实测,不以材积重、零或旧计划值补齐未知货量;实际装载仍遵循独立实测证据契约。来源身份、箱数、预约归属、审核保留及失败整体回滚规则不变,关联订单仍按原来源逐行展示,不回填历史排车快照。
## 二 原型依据与详情四块 ## 二 原型依据与详情四块
2026-10-21 用户确认排车列表的主筛选改为“车辆状态”,本次提供待发车、配送中、已送达,已返回及返仓确认后续再补。这里表示本趟运输进度:有效排车的装车前/装车中/装车后显示待发车,派送中显示配送中,派送完成显示已送达;不读取车辆档案的在役、维修或归还状态作为本趟进度。列表新增同名状态列,取消单显示“—”,仍由单据状态标识已取消。单据范围(有效排车/已取消/全部单据)移至高级筛选,收起时仍提示非默认范围;切换单据范围为已取消或全部单据会清除车辆状态,选择车辆状态则回到有效排车。状态查询与现有阶段页签联动:配送中/已送达切到对应阶段,待发车保留当前装车前、装车中或装车后,否则切回装车前;切换阶段时同步已选车辆状态。查询、页码、总量与审核分区沿用服务端阶段分页,待发车仍按当前装车阶段/审核分区查看,不在浏览器截取当前页筛选。重置清除全部筛选(含收起的单据范围),恢复有效排车,保留当前阶段及审核分区。
原型为用户提供的新版 HTML,页面 `page-outbound-vehicle`、`page-outbound-vehicle-detail`,以及本轮最新排车详情截图。HTML 位于用户提供的本机原型路径,实施者沿本契约和目标模块矩阵定向读取,不扫描原型其他模块。截图最新确认优先于前一条“三块”的描述。 原型为用户提供的新版 HTML,页面 `page-outbound-vehicle`、`page-outbound-vehicle-detail`,以及本轮最新排车详情截图。HTML 位于用户提供的本机原型路径,实施者沿本契约和目标模块矩阵定向读取,不扫描原型其他模块。截图最新确认优先于前一条“三块”的描述。
排车详情继续使用独立页面、页头排车单号、状态和返回入口。用户在最新确认中明确将下列四块分别作为四个彩色图标页签,样式沿用现有后台横向页签;此确认取代此前同页四分区的布局描述。原型灰色卡片仅保留业务字段依据,具体字号、密度、底色、边线与页签使用现有公共规范。不新增路线或操作记录页签: 排车详情继续使用独立页面、页头排车单号、状态和返回入口。用户在最新确认中明确将下列四块分别作为四个彩色图标页签,样式沿用现有后台横向页签;此确认取代此前同页四分区的布局描述。原型灰色卡片仅保留业务字段依据,具体字号、密度、底色、边线与页签使用现有公共规范。不新增路线或操作记录页签:
@@ -90,7 +117,7 @@
- 同一仓多个客户、多个目的仓装一车;同一目的仓不同客户的派送及费用不串客户,客户只读只能访问自己的货物和单据。 - 同一仓多个客户、多个目的仓装一车;同一目的仓不同客户的派送及费用不串客户,客户只读只能访问自己的货物和单据。
- 调度审核与理货员审核的正常通过、驳回与重提;未通过不能进入装车,改货物或关键资源后旧审核不得误用。 - 调度审核与理货员审核的正常通过、驳回与重提;未通过不能进入装车,改货物或关键资源后旧审核不得误用。
- 装车完成与发车分离,未安排派送不得发车;后台与PDA对同一版本同时操作只产生一次合法结果,未知结果按原请求键核对和重试。 - 装车完成且资料齐全才进入派送中,两项可并行;后台与PDA对同一版本同时操作只产生一次合法结果,自动建单、发车和命令结果同事务,服务端继续保证版本校验和业务防重。2026-10-21 用户确认取消Admin排车前端的未确认请求持久化、旧请求重放及失败锁页:仅请求进行中防连点,任何失败均结束请求态并保留输入,下一次点击按当前事实重新请求;关闭重开不恢复历史失败请求,也不阻断其他排车或操作入口。
- 全部正常签收才汇总派送完成;部分签收仍未完成,异常不伪造完成、退库或费用结算。 - 全部正常签收才汇总派送完成;部分签收仍未完成,异常不伪造完成、退库或费用结算。
- 普通入仓、换标/退货来源、同托多来源及既有预约批次/工作事项的直接调用不丢来源、不重复扣库存或收费;保留上一批修复约束。 - 普通入仓、换标/退货来源、同托多来源及既有预约批次/工作事项的直接调用不丢来源、不重复扣库存或收费;保留上一批修复约束。
- 加载、空态、错误、无权限、附件预览及四页签长编号展示;不逐行查询列表详情或附件。 - 加载、空态、错误、无权限、附件预览及四页签长编号展示;不逐行查询列表详情或附件。
@@ -116,7 +143,7 @@
| 事项 | 确定规则 | 决策影响 | | 事项 | 确定规则 | 决策影响 |
| --- | --- | --- | | --- | --- | --- |
| 临时外配取证 | 建单人补齐本趟车辆容量、司机证照和预计任务结束,由调度审核核实;空单可先保存,审核前补齐 | 临时输入、证据上传、资格快照及审核必填;不自动建车辆或司机主档 | | 临时外配取证 | 建单人补齐本趟车辆容量、司机证照和预计任务结束,由调度审核核实;空单可先保存,审核前补齐 | 临时输入、证据上传、资格快照及审核必填;不自动建车辆或司机主档 |
| 实际装载核对 | 在确认装车弹框接入既有实载核对,有依据的实际数据自动带出,缺项再确认;保持PDA真实拣货核平前置 | 实载来源/字段/弹框及双端核验;不新增第五个详情页签,不代填拣货箱数 | | 实际装载核对 | 确认弹框仅展示已扫托数、箱数并整车一次确认,不要求操作员逐托填写托位、重量、体积;已有实测由服务端带出,未知保留空值且不阻塞装车,保持PDA真实拣货核平前置 | 实载来源/字段/弹框及双端核验;不新增第五个详情页签,不代填拣货箱数 |
| 零扫码变更 | 保留原排车单号,显式退回装车前,修改后两级审核重提 | 新审核轮次、权限和历史;已经扫码的退装/回库不在本批新增 | | 零扫码变更 | 保留原排车单号,显式退回装车前,修改后两级审核重提 | 新审核轮次、权限和历史;已经扫码的退装/回库不在本批新增 |
| 客户直接创建派送 | 本批整车安排仅由平台执行,客户继续查看自己的派送单,移除旧客户直接创建这类派送入口 | 派送后端移除对应Merchant创建写入口;前端任务按第九节更新Client直接消费者,保留本客户读取及合法资料操作 | | 客户直接创建派送 | 本批整车安排仅由平台执行,客户继续查看自己的派送单,移除旧客户直接创建这类派送入口 | 派送后端移除对应Merchant创建写入口;前端任务按第九节更新Client直接消费者,保留本客户读取及合法资料操作 |
| 换标合托同车 | 同一实托可承载两张换标单的逻辑运输来源并整托同车;各来源真实箱数、客户及扫码归属保留,托盘和实际容量只计一次 | 同车内物理占用共享、跨车排他;候选、整托完整性、扫码归属、实际装载及派送/来源状态的直接契约须一致,不能只放开重复托盘校验 | | 换标合托同车 | 同一实托可承载两张换标单的逻辑运输来源并整托同车;各来源真实箱数、客户及扫码归属保留,托盘和实际容量只计一次 | 同车内物理占用共享、跨车排他;候选、整托完整性、扫码归属、实际装载及派送/来源状态的直接契约须一致,不能只放开重复托盘校验 |
@@ -133,7 +160,7 @@
4. 采用全局唯一idempotencyKey的共同持久命令账本,绑定原主体/动作/排车及严格commandHash;同键不得换主体或载荷。安排业务另有整车唯一事实及arrangementBusinessHash,当前有权限的主体用新键、当前版本引用同一已安排业务,不再生成单据或收费;`replayed`与`alreadyArranged`语义分开。原动作结果不可变,前端随后GET当前事实。 4. 采用全局唯一idempotencyKey的共同持久命令账本,绑定原主体/动作/排车及严格commandHash;同键不得换主体或载荷。安排业务另有整车唯一事实及arrangementBusinessHash,当前有权限的主体用新键、当前版本引用同一已安排业务,不再生成单据或收费;`replayed`与`alreadyArranged`语义分开。原动作结果不可变,前端随后GET当前事实。
5. 共同根锁按已核对Fleet顺序为trip→涉及的车辆主档→司机/资源→dispatch;不采用准备稿早期trip→dispatch→资源的相反序列。扫码只走来源→库存链且不取派送锁;安排/发车先收齐全部客户出库/派送锁,再取得来源/费用锁;签收保持delivery→来源→持久信号、始终不回头申请父锁。装车/安排/发车不重复执行扫码已完成的库存SHIP。未核实的预约/资源提供者交集仍须补源码和竞争测试,不宣称已证明全域无死锁。 5. 共同根锁按已核对Fleet顺序为trip→涉及的车辆主档→司机/资源→dispatch;不采用准备稿早期trip→dispatch→资源的相反序列。扫码只走来源→库存链且不取派送锁;安排/发车先收齐全部客户出库/派送锁,再取得来源/费用锁;签收保持delivery→来源→持久信号、始终不回头申请父锁。装车/安排/发车不重复执行扫码已完成的库存SHIP。未核实的预约/资源提供者交集仍须补源码和竞争测试,不宣称已证明全域无死锁。
6. 共享契约只定义在`dispatch/port/`的DTO/接口,主流程后端唯一写入。采用DispatchExecutionPort、DispatchDeliveryPort、DispatchCompletionPort及明确的提醒数据访问端口;实现分别归dispatch和delivery,不跨域共享Entity或注入对方具体Controller/Service。派送任务保存持久信号及数据访问实现,主流程负责有界消费/退避/重扫;主阶段CAS和本次已核对信号确认在同一汇总事务中完成,失败回滚,错误记录在回滚后独立短事务更新。 6. 共享契约只定义在`dispatch/port/`的DTO/接口,主流程后端唯一写入。采用DispatchExecutionPort、DispatchDeliveryPort、DispatchCompletionPort及明确的提醒数据访问端口;实现分别归dispatch和delivery,不跨域共享Entity或注入对方具体Controller/Service。派送任务保存持久信号及数据访问实现,主流程负责有界消费/退避/重扫;主阶段CAS和本次已核对信号确认在同一汇总事务中完成,失败回滚,错误记录在回滚后独立短事务更新。
7. 平台新增排车、确认装车完成和确认实际发车分别使用`platform:overseas-warehouse:dispatch:create`、`platform:overseas-warehouse:dispatch:loading-complete`、`platform:overseas-warehouse:dispatch:depart`,列表/详情仍为dispatch:list,两级审核沿用既有独立审核权限。整车草稿及选货候选GET统一使用dispatch:list,草稿全部写动作统一使用dispatch:create;前端既有入仓单选货建排车入口同样核对排车查看与新建权限,不再依赖旧入仓单智能排车权限,不增加OR别名或通过补授旧权限绕过。客户仅保留本客户派送读取,不再登记或默认授予`merchant:warehouse:delivery:create`;海外PDA继续使用其独立作业角色、权限和仓绑定,不通过后台按钮权限进入作业。正式权限目录和角色关联以IAM源码及国内统一基线为准。 7. 平台新增排车和装车完成分别使用`platform:overseas-warehouse:dispatch:create`、`platform:overseas-warehouse:dispatch:loading-complete`;装车完成自动建单和发车,不额外要求已移除人工入口的安排/发车权限,列表/详情仍为dispatch:list,两级审核沿用既有独立审核权限。整车草稿及选货候选GET统一使用dispatch:list,草稿全部写动作统一使用dispatch:create;前端既有入仓单选货建排车入口同样核对排车查看与新建权限,不再依赖旧入仓单智能排车权限,不增加OR别名或通过补授旧权限绕过。客户仅保留本客户派送读取,不再登记或默认授予`merchant:warehouse:delivery:create`;海外PDA继续使用其独立作业角色、权限和仓绑定,不通过后台按钮权限进入作业。正式权限目录和角色关联以IAM源码及国内统一基线为准。
### 首批解锁和停止点 ### 首批解锁和停止点
@@ -161,7 +188,7 @@
候选由服务端返回完整选择组及组成版本,使用未被页面筛选截断的事实闭包,兼顾既有整申请规则;前端不按当前可见相同托盘码自行拼组。正式Create/AddCargo保留显式逐来源选择并在服务端复核全组;草稿单来源动作须服务端一次命令原子处理完整组,不能用前端循环多个写请求代替整组一致性。PDA保留逐明细精确扫码,展示明确换标业务号及该来源可拣位置/额度,全部逻辑来源核平后才允许装车;不新增整托一键多次扫码或自动补拣数量。 候选由服务端返回完整选择组及组成版本,使用未被页面筛选截断的事实闭包,兼顾既有整申请规则;前端不按当前可见相同托盘码自行拼组。正式Create/AddCargo保留显式逐来源选择并在服务端复核全组;草稿单来源动作须服务端一次命令原子处理完整组,不能用前端循环多个写请求代替整组一致性。PDA保留逐明细精确扫码,展示明确换标业务号及该来源可拣位置/额度,全部逻辑来源核平后才允许装车;不新增整托一键多次扫码或自动补拣数量。
LoadingPreview及实际容量按每实托一行,逻辑箱数、来源状态与费用分别按真实归属保留。整托实测重量/体积不复制到每逻辑来源;业务份额只使用实际来源证据,缺少证据保持未知,不按箱数推件数或平均分摊重量。主流程先产出字段级公共骨架及唯一接口设计,前端以实际Java记录对齐;来源贡献的仓库生产者/移动触点及精确DDL由主流程提出,总控核对现有写者后逐文件分配。共享SQL/OpenAPI仍由总控集成,Maven仍由主流程唯一执行;此前普通流程通过结果不覆盖本次新增模型。 装车确认仅传当前版本、清单摘要与幂等键,服务端按已扫实托去重计算托数(每实托一托),沿已有路线确定卸货站。已有重量、体积保留原实测依据,未知不要求现场重复测量、不填零、不推算;已知货量超出容量仍拦截,未知重量体积不作为可售余量。LoadingPreview及实际容量按每实托一行,逻辑箱数、来源状态与费用分别按真实归属保留。整托实测重量/体积不复制到每逻辑来源;业务份额只使用实际来源证据,缺少证据保持未知,不按箱数推件数或平均分摊重量。主流程先产出字段级公共骨架及唯一接口设计,前端以实际Java记录对齐;来源贡献的仓库生产者/移动触点及精确DDL由主流程提出,总控核对现有写者后逐文件分配。共享SQL/OpenAPI仍由总控集成,Maven仍由主流程唯一执行;此前普通流程通过结果不覆盖本次新增模型。
来源贡献的直接验证按主流程明确释放的有限边界并行:派送专项唯一新增`lastleg-service/src/test/java/com/baiyue/lastleg/dispatch/service/DispatchItemSourcePersistenceTest.java`,验证冻结贡献、逐明细/客户/位置消费、已消费额度、HOLD合计及事务回滚;该文件移交前主流程确认未创建、未写入。`DispatchItemSourceService`、Repository、Mapper、Entity及公共port仍由主流程唯一维护,派送专项不并修生产;提供者受控输入的组件测试不能代替真实provider与主流程的组合回归,Maven仍只由主流程执行。 来源贡献的直接验证按主流程明确释放的有限边界并行:派送专项唯一新增`lastleg-service/src/test/java/com/baiyue/lastleg/dispatch/service/DispatchItemSourcePersistenceTest.java`,验证冻结贡献、逐明细/客户/位置消费、已消费额度、HOLD合计及事务回滚;该文件移交前主流程确认未创建、未写入。`DispatchItemSourceService`、Repository、Mapper、Entity及公共port仍由主流程唯一维护,派送专项不并修生产;提供者受控输入的组件测试不能代替真实provider与主流程的组合回归,Maven仍只由主流程执行。
@@ -4,9 +4,9 @@
## 已确认规则 ## 已确认规则
用户最新明确本质:自有业务、外配业务就是现有排车列表装车后数据按自有车辆/外配车辆区分的运营视图,自有车辆管理细,外配车辆相对简化。本契约维护自有视图;用户随后批准的外配视图单独维护在[外配业务首版开发契约](外配业务首版开发契约.md)。两页共用原排车主单及真实履约事实,不另建第二套任务、车次主单、货物、审核、装车、发车或签收状态机;新增数据仅限关联该排车单的附加运营记录。 2026-10-21 用户确认按实际拼车货物分类:自有业务是未实际接入拼车货物的排车,外配任务是已实际接入拼车货物的排车,与车辆属于自有或外配无关。本契约维护自有视图;外配任务维护在[外配业务首版开发契约](外配业务首版开发契约.md)。两页共用原排车主单及真实履约事实,不另建第二套任务、车次主单、货物、审核、装车、发车或签收状态机。本次最小变更保留原页面、统计项及两页运营表单差异,不新增分类表或分类字段。
1. 自有指我们自己的车辆,不按自有货源过滤;承运货物仍保留各客户真实归属。外配业务按其单独契约处理,不混入自有视图。 1. 自有业务按“无实际拼车货物”筛选,允许自有车辆、档案外配车辆及临时外配车辆;承运货物仍保留各客户真实归属。实际拼车的判定唯一见外配契约,列表、完整统计、详情及运营写入统一使用同一分类;同车多客户本身不代表拼车。
2. 从排车装车完成后展示,覆盖装车后、派送中、派送完成;不把审核通过或拣货核平本身当作装车完成。 2. 从排车装车完成后展示,覆盖装车后、派送中、派送完成;不把审核通过或拣货核平本身当作装车完成。
3. 一张排车单就是一趟车,列表一张排车单一行;多个目的仓、预约号在行内展开,不按客户或目的地重复整车统计。 3. 一张排车单就是一趟车,列表一张排车单一行;多个目的仓、预约号在行内展开,不按客户或目的地重复整车统计。
4. 后台登记一次整车总金额,单价由系统按整车总金额除以实际托数计算。用明确币种记录,不将该运营金额自动当作客户应收、车队应付、Finance入账或利润;不重复收费。金额未登记与明确零金额区分,实际托数为零时不除零。 4. 后台登记一次整车总金额,单价由系统按整车总金额除以实际托数计算。用明确币种记录,不将该运营金额自动当作客户应收、车队应付、Finance入账或利润;不重复收费。金额未登记与明确零金额区分,实际托数为零时不除零。
@@ -18,6 +18,7 @@
10. 不写原型的固定日期、默认18.6油耗、预设GPS/ETA、驾驶证状态、占位图片或示例操作历史。缺失显示未登记或—,不借内部ID回退业务编号。 10. 不写原型的固定日期、默认18.6油耗、预设GPS/ETA、驾驶证状态、占位图片或示例操作历史。缺失显示未登记或—,不借内部ID回退业务编号。
11. 用户补充确认:按计划发车日期筛选,统计随同一筛选变化,原型“今日排车数”改为“排车数”。日期范围不硬编码示例日期,统计不以当前页行数代替全部筛选结果。 11. 用户补充确认:按计划发车日期筛选,统计随同一筛选变化,原型“今日排车数”改为“排车数”。日期范围不硬编码示例日期,统计不以当前页行数代替全部筛选结果。
12. 用户补充确认:新增“登记运营信息”居中弹框,填写整车金额、逐目的地实到时间、实际里程和油耗;照片继续沿原型独立上传弹框。具体尺寸按当前Admin表单密度与字段数量处理,不改为抽屉。 12. 用户补充确认:新增“登记运营信息”居中弹框,填写整车金额、逐目的地实到时间、实际里程和油耗;照片继续沿原型独立上传弹框。具体尺寸按当前Admin表单密度与字段数量处理,不改为抽屉。
13. 2026-10-21 字段核对确认:列表总价、单价、预约到达时间、实际到达时间独立成列,仍一车一行且按目的仓标识关联时间;“派送仓库”就是目的仓,复用同一来源展示,不新增独立仓库关系。“最晚装车完成时间”先留空显示“—”,不以计划发车或实际装车时间代替;保留已有计划发车列。图中仓库名称上方误写的“托数”保留正式名称“提货仓库”,物理托数仍只有一项;状态表头统一为“状态”。本项仅调整列表展示,不新增金额、日期写入或履约逻辑。
## 原型与实现差距 ## 原型与实现差距
@@ -56,7 +57,7 @@
- 油耗按原型单位L/100km,手填字段 `fuelConsumptionLitresPer100Km`;实际里程为mile,字段 `actualDistanceMiles`。不把油耗率变成燃油总升数,不自动推算总油量。 - 油耗按原型单位L/100km,手填字段 `fuelConsumptionLitresPer100Km`;实际里程为mile,字段 `actualDistanceMiles`。不把油耗率变成燃油总升数,不自动推算总油量。
- 金额币种沿已有CNY/USD,必须明确选择,不预选不换汇。一份整车金额可在同一版本化编辑中更正或清空,并保存历史;“登记一次”表示同车唯一记录,不是一次提交后永久不可编辑。零值、未登记及单价除零按既有条款区分。 - 金额币种沿已有CNY/USD,必须明确选择,不预选不换汇。一份整车金额可在同一版本化编辑中更正或清空,并保存历史;“登记一次”表示同车唯一记录,不是一次提交后永久不可编辑。零值、未登记及单价除零按既有条款区分。
- 照片沿原型七框,逐槽上传后绑定立即保存;只有绑定回执成功才显示已保存。上传成功绑定失败保留原fileId、绑定请求键及载荷,重试只绑定;未知上传保留原命令,不自动重新上传或虚称恢复成功。关闭弹框不另造保存动作。 - 照片沿原型七框,逐槽上传后绑定立即保存;只有绑定回执成功才显示已保存。上传成功绑定失败保留原fileId、绑定请求键及载荷,重试只绑定;未知上传保留原命令,不自动重新上传或虚称恢复成功。关闭弹框不另造保存动作。
- 车辆归属按原排车装车完成时点冻结,作为该排车的归属证据附加行,不构成第二套主单;根只在loadingComplete原事务接一个窄捕获点,新包提供者读取真实车辆ownership/版本。按原资源模式识别临时外配,不把MASTER当OWNED。旧已装车TEST无历史快照不回填、不以当前主档降级推算,本页实际验收使用新原生样本;原排车读取不受影响。 - 车辆归属仍按原排车装车完成时点冻结,仅作车辆事实及装车依据一致性校验,不再决定业务分类。两个入口的vehicle.ownership均可为OWNED/DISPATCHED,临时车辆vehicleId可空;按真实快照返回,不能以所在页面改写车辆归属。原loadingComplete捕获点不变,旧已装车TEST无车辆快照不回填、不按当前主档猜测;原排车读取不受影响。
- 数据表为附加record/command/history及ownership证据,结构由后端提出、根维护基线;文件分类为 `OVERSEAS_DISPATCH_LOADING_PHOTO`/`OVERSEAS_DISPATCH_FUEL_PHOTO`,平台0、businessId=原dispatch内部主键,JPG/PNG、10MiB。没有新的主排车状态机、客户收费或Finance写入。 - 数据表为附加record/command/history及ownership证据,结构由后端提出、根维护基线;文件分类为 `OVERSEAS_DISPATCH_LOADING_PHOTO`/`OVERSEAS_DISPATCH_FUEL_PHOTO`,平台0、businessId=原dispatch内部主键,JPG/PNG、10MiB。没有新的主排车状态机、客户收费或Finance写入。
- 附加命令唯一键为 `(dispatch_id,idempotency_key)`,记录并验证原operator;异操作者复用原键A0403,不按操作者分组创建第二条命令。同一原操作者只恢复同动作、原版本、原载荷,异载荷A0409;上传和绑定各保留自己的稳定键。 - 附加命令唯一键为 `(dispatch_id,idempotency_key)`,记录并验证原operator;异操作者复用原键A0403,不按操作者分组创建第二条命令。同一原操作者只恢复同动作、原版本、原载荷,异载荷A0409;上传和绑定各保留自己的稳定键。
- 操作记录只读聚合原排车真实历史与本页附加历史,不复制原流水。历史明确 `eventSource=DISPATCH/OPERATIONS`,附加recordVersion和原dispatchRecordVersion可分别为空,不混淆两个版本序列;原排车事件不伪造运营快照或照片,运营事件保留其真实快照。 - 操作记录只读聚合原排车真实历史与本页附加历史,不复制原流水。历史明确 `eventSource=DISPATCH/OPERATIONS`,附加recordVersion和原dispatchRecordVersion可分别为空,不混淆两个版本序列;原排车事件不伪造运营快照或照片,运营事件保留其真实快照。
@@ -64,6 +64,7 @@
3. 节点按固定序号单调推进;迟到的较早节点仍保存为历史事实,但不能回退最新实际节点。 3. 节点按固定序号单调推进;迟到的较早节点仍保存为历史事实,但不能回退最新实际节点。
4. 同一供应商事件使用稳定 `providerEventId` 幂等;重复查询不得重复插入。 4. 同一供应商事件使用稳定 `providerEventId` 幂等;重复查询不得重复插入。
5. 一个供应商事件只映射一个最精确的标准节点,不因中间节点缺失而自动补齐整条链路。 5. 一个供应商事件只映射一个最精确的标准节点,不因中间节点缺失而自动补齐整条链路。
6. 柜级实际到港时间在预约日历、清关提柜列表与详情中统一读取 `ARRIVED_DESTINATION_PORT` 的最新非空实际事实:按 `observedAt` 降序,同观测时间按事实记录顺序降序选一条。后续观测可能修正为更早的实际日期,不得用历史 `actualAt` 最大值覆盖新观测;仅有预计时间的观测不覆盖已取得的实际到港时间。本规则不改变节点序号推进或已保存事实。
## 4. 异常事实 ## 4. 异常事实
@@ -4,14 +4,16 @@
本节来自用户本次确认,优先于下文 V13 对预约列表入口、类型与承载方式的早期规定;下文数量、客户隔离、真实执行等原业务约束继续适用于各自业务模块。 本节来自用户本次确认,优先于下文 V13 对预约列表入口、类型与承载方式的早期规定;下文数量、客户隔离、真实执行等原业务约束继续适用于各自业务模块。
- 预约列表恢复用户截图 `codex-clipboard-840bcc07-6b54-4afa-9dc7-666d09ff04f2.png` 的左侧月/周日历、右侧当天安排。类型仅为到港、排车、还柜、计划到仓;每日期格最多三条预览,完整记录在右侧查看。保留当前范围搜索和未定日期入口。 - 预约列表恢复用户截图 `codex-clipboard-840bcc07-6b54-4afa-9dc7-666d09ff04f2.png` 的左侧月/周日历、右侧当天安排。类型仅为到港、排车、还柜、计划到仓;货柜事项以柜次号作为主标识,集装箱号只在明细与检索中展示;每日期格最多三条预览,完整记录在右侧查看。保留当前范围搜索和未定日期入口。
- 月视图按当月所需显示4、5或6个完整周,仅在首尾周补齐相邻月份日期,不固定追加六周。2026年10月显示9月28日至11月1日,不显示11月2—8日整周;日历查询同步采用实际展示范围,周视图仍为7天。 - 月视图按当月所需显示4、5或6个完整周,仅在首尾周补齐相邻月份日期,不固定追加六周。2026年10月显示9月28日至11月1日,不显示11月2—8日整周;日历查询同步采用实际展示范围,周视图仍为7天。
- 到港优先实际到港,缺实际时采用预计到港。计划到仓默认在该到港当地日期上加两个自然日,跨月和夏令时仍按日期加两天,不补造具体时刻。人工保存的整柜时间优先,已有入库计划的冻结时间保持;尚未人工维护和未建计划的默认日期随到港事实变化。该默认值属于日历日期推算,不自动写入入库计划、不充当实际到仓。人工调整复用整柜预计到仓命令、原编辑权限、版本及幂等键;已有入库计划后仍不可改。 - 到港优先实际到港,缺实际时采用预计到港。计划到仓默认在该到港当地日期上加两个自然日,跨月和夏令时仍按日期加两天,不补造具体时刻。人工保存的整柜时间优先,已有入库计划的冻结时间保持;尚未人工维护和未建计划的默认日期随到港事实变化。预约日历“计划到仓”与清关提柜列表、详情“预计到仓”共用该日期规则,默认值显示日期并标明“默认/默认推算”,不补零点。默认日期由 Lastleg 统一读取 Firstleg 权威到港来源后解析,清关提柜、日历及生成入库计划共用 plannedDate/isDefault;读取时不写尾程订单,生成入库计划时冻结该日期,不补造零点,也不充当实际到仓;读取失败或已有计划但时间不一致时,不以默认日期掩盖缺失。人工调整复用整柜预计到仓命令、原编辑权限、版本及幂等键;已有入库计划后仍不可改。
- 排车仅指海外仓送往 FBA/客户仓的真实整车排车主单,一张主单中的多客户只展示一次;已发车按实际起运仓当地日期,未发车按计划日期,取消主单不列入活动安排。日历返回真实排车单号并进入排车详情;独立旧车次不作为日历来源,也不得将内部车次号当排车号拼接路径。读取沿用排车列表权限;从详情可返回原日历日期与月/周视图。港口提柜送海外仓不作为排车类型。 - 排车仅指海外仓送往 FBA/客户仓的真实整车排车主单,一张主单中的多客户只展示一次;已发车按实际起运仓当地日期,未发车按计划日期,取消主单不列入活动安排。日历返回真实排车单号并进入排车详情;独立旧车次不作为日历来源,也不得将内部车次号当排车号拼接路径。读取沿用排车列表权限;从详情可返回原日历日期与月/周视图。港口提柜送海外仓不作为排车类型。
- 还柜未完成按原业务截止日期提醒,完成后按实际还柜日期展示;日历不独立计算或改写还柜状态,登记进入原货柜业务。 - 还柜未完成按原业务截止日期提醒,完成后按实际还柜日期展示;日历不独立计算或改写还柜状态,登记进入原货柜业务。
- 用户随后明确恢复日历顶部“新增预约”:本次先支持FBA,普通客户仓不在本次范围。居中弹框选择已有货物,核对真实来源后复用原预约表单与保存接口;同起运仓、同目的FBA仓可跨客户合约,保留原写权限、版本/幂等、未知结果重试及未保存保护。货物查询栏支持可搜索、可清空的目的FBA仓下拉框;选项来自同权限范围的权威美国FBA目录,不从当前分页推算。提交查询后回到第一页,翻页沿用目的仓条件,重置恢复全部目的仓;跨页已选货物仍保留并执行同起运仓、同目的仓校验。保存成功显示真实预约编号及内容,不自动创建车次,不增加第五类日历或手工编造到港/还柜等事实。 - 用户随后明确恢复日历顶部“新增预约”:本次先支持FBA,普通客户仓不在本次范围。居中弹框选择已有货物,核对真实来源后复用原预约表单与保存接口;同起运仓、同目的FBA仓可跨客户合约,保留原写权限、版本/幂等、未知结果重试及未保存保护。货物查询栏支持可搜索、可清空的目的FBA仓下拉框;选项来自同权限范围的权威美国FBA目录,不从当前分页推算。提交查询后回到第一页,翻页沿用目的仓条件,重置恢复全部目的仓;跨页已选货物仍保留并执行同起运仓、同目的仓校验。保存成功显示真实预约编号及内容,不自动创建车次,不增加第五类日历或手工编造到港/还柜等事实。
- 平台新建及重新登记 FBA 送仓预约时填写已取得的外部约号,直接保存正式确认,不再提供“先保存安排,等待对方确认”选项。确认开始、结束时间改为可选;预约列表的新增窗口不再显示这两个输入及其夏令时时差输入,未提供的确认时间保持为空,不从计划日期推造。其他原业务入口补充真实确认时段时仍执行地区时区、夏令时和起止顺序校验;已有取消、替代和只读记录仍展示真实历史状态。货物核对自动展示并带入有效货件号或追踪号:已补录的非空核实值优先,未补录货件时采用同客户原订单资料,只补过箱数的记录不得遮蔽原有编号;原资料确实缺失时仍须补齐。客户、来源版本、目的仓、货物完整性与外部约号唯一性校验继续执行。
- 入口移除全局工作待办、流程筛选、负责人分派、跟进、复核、责任交接,以及货物核实/分批/共约/共车编排入口;这些原业务在相应模块继续处理。仍由其他业务页面实际使用的精确来源或事项深链可以打开原业务表单,不恢复旧全局待办及筛选协议。 - 入口移除全局工作待办、流程筛选、负责人分派、跟进、复核、责任交接,以及货物核实/分批/共约/共车编排入口;这些原业务在相应模块继续处理。仍由其他业务页面实际使用的精确来源或事项深链可以打开原业务表单,不恢复旧全局待办及筛选协议。
- 缺权限、来源失败或缺时区明确提示数据范围不完整,不能显示为全部完成或完整空日历。未知日期保留未定,不用浏览器当前日期、内部 ID 或假数据补齐。 - 排车日历同时返回各排车单货物快照中的关联集装箱号,以及货物通过同客户真实尾程订单关联的原装柜事件中的柜次短号(如 D1821),分别按单去空、去重;同车多个完整柜号、柜次短号均可在当前日历范围搜索,支持忽略大小写的包含匹配,仍只展示一条排车安排。没有装柜来源时不推测短号,也不依赖当月到港记录拼接短号。柜号只作检索和展示,不改变客户归属、货物数量或排车状态。详情明确展示起运仓时区及当地计划出发时间;北京时间与美国当地日期可能跨日,不把浏览器日期用作日历归属。
- 缺权限、来源失败或缺时区明确提示数据范围不完整,不能显示为全部完成或完整空日历。未能定位日期的排车提示具体排车单号和原因,避免误认为当前搜索的单据缺资料。未知日期保留未定,不用浏览器当前日期、内部 ID 或假数据补齐。
代码与自动检查、部署、真实 HTTP 及人工视觉验收分别判定;本次 UI 目标仍为1920×1080、100%缩放,用户截图确认后才记录视觉通过。 代码与自动检查、部署、真实 HTTP 及人工视觉验收分别判定;本次 UI 目标仍为1920×1080、100%缩放,用户截图确认后才记录视觉通过。
+62 -1
View File
@@ -1,5 +1,60 @@
# 测试环境独立任务协作登记 # 测试环境独立任务协作登记
## 2026-10-22 用户反馈18项修复与发布验收
总控为“22号问题总控”`01a16320-fcec-7332-8223-0b51e9c382e9`,目标为 TEST 项目 `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host `local`、当前工作区 `C:/Users/BY-OY/Desktop/code/chongchong-global`。复用现有任务,不新建聊天、分支或 worktree,不操作开发工作区。
用户明确纠正:`01a16323-8ab4-7a83-be01-df8966f4ac8d` 是由用户直接跟进请求重放问题的对话,不接受本总控新增派工、优先级、冻结或交接要求。此前相关追加要求撤销,总控停止向它发送消息;它不承担本批12–18项。其既有差异保留,由总控只读核对交付和文件边界。
用户已授权全部代码提交、TEST部署、测试数据库操作、真实HTTP调用,以及随后内置浏览器登录验收。Admin/Client按1920×1080,国内/海外PDA按390×848验收。最新目标同时要求验收请求重放机制删除后的行为;该验收由总控负责,不给上述独立对话追加任务。凭据只从用户指定私有配置目录读取,不进入源码、文档或公开报告。实际发布、SQL和HTTP/UI结果只维护在[测试环境主契约](测试环境单机部署与配置契约.md)。
需求梳理已经结束,本批实施1–18;第19项“快递派送”明确暂缓。第12项放舱后仅允许维护预计到港,其他冻结资料不放开;第14项删除“调整已有排车货物”页签及调整能力,错误配货按现有资格取消并重新建单,不迁移调整入口或自动取消。第18项沿现有槽位命名“装车现场、装车清单、发车前检查、驾驶证、回执”。
| task_id | 对话及稳定职责 | 本批交付与边界 |
| --- | --- | --- |
| `01a16323-754a-7002-90a6-547545105647` | 22号修复|订单审核与称重 | 1–3、13、17–18已交付并停止编辑;海外PDA样式和五照片名称在总控只读核实原写者结束后接续完成,69项直接检查通过。 |
| `01a16323-7a96-7182-a73c-7ffa47b53b72` | 22号修复|订舱关联与报关 | 4–5、12已交付;Admin和Firstleg预计到港窄维护、柜号规则及预录单展示。数据库规则由总控按本轮授权审阅执行。 |
| `01a16323-8036-7353-b467-fe3e8465628f` | 22号修复|排车与车辆资料 | 6–9、11、14–16已交付并停止编辑;删除货物调整入口、1100px审核弹框、真实创建时间;末轮159项相关检查通过。共享样式测试另有4项非本轮页面失败,不据此宣称整套通过。 |
| `01a16323-8ab4-7a83-be01-df8966f4ac8d` | 22号修复|PC与PDA请求错误锁定清理 | 用户直接跟进的独立请求重放处理;不接受本总控派工或交接要求。已有源码由总控集成、部署及验收,不改派其职责。 |
共享文件实现已结束,进入总控固定版本、发布及真实验收阶段。执行专项不自行部署、执行SQL或改测试数据。总控保留其他对话已有修改;测试/构建经 `baiyue-firstleg/scripts/local-check.ps1` 两槽门禁,按差异复用有效结果。源码、自动检查、发布健康、真实HTTP、浏览器及扫描设备验收分别记录,未完成项不推定通过。
关键验收口径:确认测量弹框标题“确认测量”,正文“审核通过后,入库单将进入待分柜”;预录单/出口报关仅隐藏可见版本,不移除内部并发语义;预约编号、时间和货件来自正式预约与实际货物,去重不得丢票;三类车辆照片在送审/通过时必填,草稿允许未补齐。四端请求失败后提示错误、释放操作态并保留可编辑输入,允许关闭与重新操作,不强制刷新、查询或重放;在途防连点、服务端权限/状态/版本及幂等校验仍保持。实际失败和结果未知分开记录,不能以界面解锁推定业务未执行或据此伪造成功。
## 2026-10-21 用户验收32项修复与统一发布
总控为 `01a15eae-fd50-7f42-93b5-eb203648b808`。用户本轮指定复用五个既有对话,并在“样式优化”分区新增两个独立对话,合计七个执行专项;目标为 TEST 项目 `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host `local`、当前工作区 `C:/Users/BY-OY/Desktop/code/chongchong-global`。两个新对话保存项目已核对为 TEST;五个旧对话的项目迁移工具返回成功,但复读仍为 `projectId=null`,按实际空值登记,不声称迁移已落地。五者均为用户本轮精确指定的本地同工作区任务,未发生跨环境调度;不操作开发工作区、不新建分支或 worktree。
用户授权在本批全部修复、必要检查及总控复核完成后,由本总控统一部署受影响 TEST 服务及端侧,并执行真实 HTTP 验收。执行专项只有本地实现与定向检查写权,不自行提交、推送、发布、执行 SQL、造数或调用写接口。根负责精确发布候选、发布窗口及验收数据;删除、重置、SQL 和本批外发布不在授权内。凭据仅从用户指定的 `C:/Users/BY-OY/.codex/env/chongchong-global` 私有目录加载,禁止输出真实值或把值写入源码、文档及报告。部署事实只维护部署主契约,本节维护派工和文件归属。
| task_id | 本批稳定职责 | 问题编号及唯一写入边界 |
| --- | --- | --- |
| `01a15dcc-dfe7-7660-98b0-7f9a2384c439` | 订单、测量与审核 | 1–7;Admin `unified-orders`、`first-leg-orders` 及实际复用的入库测量/审核组件和直接测试;纯展示不进入后端。费用明细面板展示归本专项,财务记录调整逻辑归下行。 |
| `01a15dcc-5645-77b1-984b-f95af08120b7` | 客户应收应付 | 8;Admin `finance`、Finance费用调整的直接后端与测试。确需 Firstleg 费用来源修改先列精确文件,避开订单面板和柜费面板。 |
| `01a15dcc-7f62-70d1-a016-1410a5ae6b1e` | 货柜、智能装柜与预装清单 | 9–12、16–17、21–22、25;Admin `container-loading`(含本批 SmartLoading)与 `loading-lists`、对应直接测试。历史重复若需后端,仅对应历史生产/读取触点;不得并写 PDA完成链路。 |
| `01a15dcb-8638-7ca0-9037-b27b2a1ccac2` | 订舱管理 | 13–15;Admin `ocean-bookings` 与直接测试;时间字段缺失时可追踪 Firstleg `oceanbooking` 的直接生产者。货柜中的订舱关联弹框归货柜专项。 |
| `01a15eb4-8850-7582-8cf0-5ab848427ae7` | 国内PDA装柜完成链路 | 18;国内 PDA `pages/picking`、完成状态/请求辅助和直接测试,Firstleg装柜完成命令/查询的直接链路与测试。先拆分等待来源,不以隐藏处理中代替修复;货柜/清单展示文件不写入。 |
| `01a15eb4-8c12-7903-844f-a3241adcef3c` | 客户端头程订单与资料 | 19–20;Client `first-leg` 和退税报关资料直接使用组件及测试;“关闭”改“提交”只改文字,不改动作。 |
| `01a15e2b-3e40-7110-8d2b-88d15e965110` | 海外预约、尾程与入库 | 23–24、26–28;Admin `appointment-calendar` 与实际海外入库/FBA预约页面、Lastleg预约来源/编号/预计到仓传递的直接后端及测试;客户预约号的直接读取消费归本专项,Client源码若需修改须先协调。 |
总控唯一维护本批登记、公共样式/组件、共享导航/根路由/IAM/统一SQL和发布验收接线。实现者先回报入口、精确文件与预计验证,随后在授权范围继续;共享文件需求交总控,不并发改写。各组复用有效定向结果,不各跑全量;所有测试、类型检查、构建经 `scripts/local-check.ps1` 两槽门禁。界面视觉仍以1920×1080、100%人工截图为准;代码检查、部署/HTTP通过、人工视觉确认分别记录。
启动时已有他人差异必须保留:Admin 的 `WorkSharedTripForm.vue`、排车三个组件、`dispatchCommandRecovery.ts`、`DispatchesView.vue`;后端 `DispatchAggregateService/DispatchService` 与直接两测试,以及全量验收脚本专项在 `scripts/` 的现存差异。各专项不接管这些文件;必要交叉由总控确认唯一写者后接续。第1项先按移除“已经确认数据”节点展示定位,不授权删除业务数据;第11项先核重复来源,保留真实有效历史;第26项修复权威编号生成,不前端截短。
定位后的必要扩展:货柜专项追加 `port-schedules/components/CarrierScheduleQueryPanel.vue`、`ContainerPortSchedulePanel.vue` 实际路径与直接测试的展示写权,覆盖货柜人工补录及嵌入船期弹框;海外专项追加 Firstleg 日历柜次号的直接 DTO、查询/组装器和测试,精确类路径由专项回报,不改其他船节点、订舱历史或PDA完成链路。货柜组已冻结并按SHA256释放 `ContainersView.vue`、`ContainerDetailView.vue`,到仓结果映射的写权交海外组;实际类型触点为 `api/containerArrivalTimes.ts`。公共 `adminDensity.test.ts` 仍归总控。
用户后续追加29–32,仍复用上述七个执行对话,不新建聊天:订舱专项接续29–31排车“维护车辆信息”的原型字段补齐、上传操作及调度审核照片回显,PDA专项在18租约返修后接续32海外PDA装车照片样式。29的依据为用户截图 `codex-clipboard-0b236f6d-d66c-4878-8992-52ad04104489.png` 及命中的局部原型;先核字段与直接契约,不将原型示例或计划时间伪装为实际发车事实。新增前端触点以实际资源表单/审核/照片组件为限;现有排车并行写者未冻结前,共享调度文件只读。32仅复用国内上传呈现思路,海外源码留在本应用,保留照片、权限和命令语义。
29–31跨端拆包:`01a15dcc-5645-77b1-984b-f95af08120b7`在财务冻结后接续唯一后端实现,维护 `DispatchCommands.Update.maintenance`、`DispatchViews.VehicleInfo.maintenance`、必要资源快照/存取、Aggregate update/detail、`FleetTripService.dispatchResources`及直接测试/OpenAPI;订舱/车辆专项只写对应前端。八个可空字段为plannedDeliveryDate、deliveryMethod、pickupMethod、loadType、fleetEmail、vehicleType、appointmentAccount、appointmentNo;不新增金额/审核硬门禁,不把本趟预约资料替代正式FBA预约。优先沿已有资源JSON的唯一正式类型保存,不引入无必要表列。取消专项已完成并idle;总控已记录其既有调度文件差异基线,再释放 `DispatchWorkflowDialog.vue` 给前端、Aggregate局部给后端,保留全部在先差异,禁止整体覆盖。18/32已交付12文件并冻结,租约缺口已补实际Mapper/事务回归;财务同毫秒排序返修已通过独立只读复核。26前缀与24范围采用用户后续确认,见本节当前状态。
当前状态:七个实现包均已交付;财务同毫秒历史排序与PDA旧worker租约检查点两项审查缺陷均已返修并经独立复核关闭。订单超限提醒、订舱时间、货柜/预装白底、客户端两项、预约真实确认状态、到仓日期传递、车辆资料保存/照片审核与海外PDA照片均已完成相应定向检查;次数有交叉,不相加为覆盖总数。用户随后明确26采用WC+日期+四位流水,24暂不做客户原预约号自动带入;海外专项据此收口编号主契约,不新增客户字段或猜测referenceId映射。车辆后端独立审查无阻断;总控对照用户原型发现MASTER模式承运公司和电话缺少展示,现唯一释放 `DispatchResourceFields.vue` continuous分支及直接测试给订舱/车辆专项补只读可见信息,其他模式和入口保持原语义。
发布准备:Admin及Client生产构建通过,国内PDA的H5和appResource、海外PDA的H5和app资源编译通过;未发布APK/WGT、未在设备验证。MASTER补显34项及日期消费者32项定向检查已通过。客户端专项只在忽略临时目录准备逐项核实的HTTP验收草案,不读取凭据或联网;执行权仍归总控。人工视觉核对仍待1920×1080、100%截图。
固定发布候选:Backend `2c3435adafe48c8e97ef145fa301eaa11ea230be`、Admin `2e26477db523cebf23db8c28f8a4dc39cb0df1bd`、Client `7adb97d145e28e61eb391ff7609aecdb2fda7e62`、国内PDA `5fcc51d73c2ba48f109ca513831f4a5f816dbb92`、海外PDA `9c2f0a54ec1e9147db7cd434455e963e8c4cb22a`,均已推到各自既有分支。共享文件用本轮前快照剥离取消专项增量后写入index提交,保留完整工作树;布局测试亦只提交本批字段/照片用例。远端随后出现未部署的尾程列表需求,正常合并并保留分支源码,但本批发布仍pin上述原提交,不追加Order或该新需求;当前运行版本已核为本批候选祖先。尝试扩展审查后及时撤回该范围,局部草稿不进入发布。发布由总控执行,实际Jenkins、容器及HTTP事实只写部署主契约。
用户随后明确完整验收目标:总控在本批修改完成后,先运行真实HTTP流程,通过后打开内置浏览器登录检查样式、交互和请求量;Admin/Client使用已部署TEST、1920×1080,国内/海外PDA使用本地 `http://localhost:5176/#/`、390×848。该明确授权覆盖本轮默认人工截图限制,并允许TEST部署、真实HTTP及必要测试数据库操作;不据此清空用户数据或操作其他环境。总控继续唯一环境执行,专项只收口本地草案。当前部署与已验证范围见部署主契约,HTTP全链及四端页面未完成前不关闭目标。
## 2026-10-20 排车、自有及外配 HTTP 扩展收尾 ## 2026-10-20 排车、自有及外配 HTTP 扩展收尾
2026-10-21 本轮明确的TEST真实HTTP与小于1秒目标已完成:4f交付原PLAN主链及原extra两单后缀全部履约、结案、资源释放和完整库存证明;7b独立复核主链身份/时序/失败闭合通过;根核三单最终事实、真实全响应计时和两客户全部阶段库存一致。具体结果及保留限制只维护部署主契约顶部。56、63实现/审查候选保持冻结;没有新增生产改动、SQL或发布任务,不重复派工或重跑成功链。52此前四图与材料有效校验已纳入证据,若旧turn仍显示active不据此重启或扩大任务。 2026-10-21 本轮明确的TEST真实HTTP与小于1秒目标已完成:4f交付原PLAN主链及原extra两单后缀全部履约、结案、资源释放和完整库存证明;7b独立复核主链身份/时序/失败闭合通过;根核三单最终事实、真实全响应计时和两客户全部阶段库存一致。具体结果及保留限制只维护部署主契约顶部。56、63实现/审查候选保持冻结;没有新增生产改动、SQL或发布任务,不重复派工或重跑成功链。52此前四图与材料有效校验已纳入证据,若旧turn仍显示active不据此重启或扩大任务。
@@ -26,10 +81,16 @@
## 2026-10-20 Admin 蓝白清爽风格推广 ## 2026-10-20 Admin 蓝白清爽风格推广
本节由 `01a1587b-196b-7221-8774-933aab521ce9`(整理页面风格并定位修改页)总控维护。2026-10-21 用户反馈推广后多处页面、尤其弹框布局不可用,明确提供五个既有对话要求继续分工修复。当前为样式回归排查批次,复用这五个对话,不新建任务。已逐一核实五个任务桌面保存项目绑定均为 TEST `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host local、实际 cwd `C:/Users/BY-OY/Desktop/code/chongchong-global`,与本登记匹配;不使用同项目保存根中的开发目录。 本节原由 `01a1587b-196b-7221-8774-933aab521ce9`(整理页面风格)总控维护;2026-10-21 用户明确要求接手,现由 `01a15c55-dbec-78b3-9719-7d01b737679b` 在同一工作区接续。此前用户反馈推广后多处页面、尤其弹框布局不可用,明确提供五个既有对话要求分工修复;这批五组修复已完成自动检查,人工验收仍待截图。原五任务的桌面保存项目绑定均为 TEST `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host local、实际 cwd `C:/Users/BY-OY/Desktop/code/chongchong-global`,与本登记匹配;不使用同项目保存根中的开发目录。
当前接续范围为原对话最后两张截图提出的主列表状态页签对齐和灰白斑马纹:接续已有公共 CSS 修改,恢复标准表格默认斑马纹,保留业务行色与悬停/选中状态;不重新启动此前五组排查。本轮仅当前对话及内部子代理分工,公共样式与集成验证由当前总控唯一维护,内部子代理只清理列表 stripe 关闭属性及直接断言。既有排车、拖车在途业务改动保留;无部署或环境写入。
2026-10-21 接续新增用户要求:收紧主列表底部分页留白,公共规则采用最小 48px、上下 6px、左右 12px,保留翻页控件尺寸和换行。已清理58个Vue文件中59处标准DataTable关闭斑马纹属性,并启用财务调账明细表斑马纹;页签修复限主列表首项,避免挤压前置返回按钮。自动检查期间,用户另在 `01a15c6a-e715-7172-9d69-4c31cd5e0fb1`(分离搜索区与表格)要求公共搜索区独立、5px圆角及浅蓝表头,该对话仍维护这些增量。双方现有改动均保留,本接续不覆盖对方共享文件,不另启动重复全量。接续全量报告为467文件、4269项通过,但前后快照检测到7个公共文件被该对话更新,故该报告不作为最终统一快照通过证明;对方最新构建与129项公共定向检查已通过。最新整体全量收尾以该对话在途检查及其最终输入为准。本轮证据位于 Admin `.logs/admin-style-handoff-20261021/`;未发布,实际页面仍待人工截图。
此前全量自动检查仅证明当时输入的测试与编译结果,不能证明弹框视觉或交互已验收;此轮优先处理浮层布局、嵌套污染、正文与页脚滚动、表单和按钮可用性,再处理列表与详情的间距。用户已直接确认隐藏的长汇总不恢复,业务与权限变化不夹入本轮。 此前全量自动检查仅证明当时输入的测试与编译结果,不能证明弹框视觉或交互已验收;此轮优先处理浮层布局、嵌套污染、正文与页脚滚动、表单和按钮可用性,再处理列表与详情的间距。用户已直接确认隐藏的长汇总不恢复,业务与权限变化不夹入本轮。
接续三项样式在搜索区/表头增量合入后,已追加公共组件及样式6文件135项定向确认,全部通过;最新结果与并行输入限制见上述证据目录的 `verification.json`。本接续实现与定向验证收口,整体统一快照及发布不在此处重复宣告完成。
共同视觉合同为[蓝白卡片式工作台风格参考](界面参考/蓝白卡片式工作台风格参考.md):清爽、少提示,复用公共样式;保留当前业务、权限、数据含义、密度和交互承载。各组覆盖本域正式路由及其关联表单、详情、弹框和抽屉;打印版面保持原尺寸。以下目录均相对 `apps/admin-web/src/modules/`,只授予展示改造及直接验证、最近验收矩阵写权,不接管 API、业务状态、路由接线或其他专项在途逻辑。 共同视觉合同为[蓝白卡片式工作台风格参考](界面参考/蓝白卡片式工作台风格参考.md):清爽、少提示,复用公共样式;保留当前业务、权限、数据含义、密度和交互承载。各组覆盖本域正式路由及其关联表单、详情、弹框和抽屉;打印版面保持原尺寸。以下目录均相对 `apps/admin-web/src/modules/`,只授予展示改造及直接验证、最近验收矩阵写权,不接管 API、业务状态、路由接线或其他专项在途逻辑。
| task_id | 当前对话名 | 唯一风格改造职责 | | task_id | 当前对话名 | 唯一风格改造职责 |
@@ -1,185 +1,47 @@
# 蓝白卡片式工作台风格参考 # 蓝白样板目录与原始视觉参考
本文件是 Admin 蓝白样板的视觉与接入入口。风格为:**白色主体、明亮蓝色强调、浅色图标底座、轻边框圆角卡片、清晰的数字层级**。首屏保持清爽,页面先按用途选择样板,再组合公共样式,保留自身的业务信息和操作。 本文件只供按页面类型查找样板和原始截图。**Admin 样式统一从 [Admin 界面规范](../Admin高密度界面规范.md) 进入**;通用规则和公共类说明已并入主规范,本文件不再单独维护规则。普通样式任务无需先读本文件。
2026-10-20,用户选择自营经营总览制作样板,随后扩展到销量分析、库存分析和数据采集,包括共用的 SKU 趋势、图表证据弹窗;提供实际截图完成收尾,并授权更新 Admin 测试环境。用户随后要求正式固化该风格:**后续 Admin 页面以这套蓝白、清爽、少提示文字的样板为改版基线,按页面类型复用公共样式。** 各页面的实际视觉仍以人工截图为准;规范固化不代表全端已改造或验收通过。本文不记录部署成功或实施进度,任务范围与逐页结论回到对应模块现有逐操作矩阵。
## 其他页面该参考哪个样板 ## 其他页面该参考哪个样板
| 页面类型 | 参考入口 | 源码入口 | 复用内容与保留边界 | | 页面类型 | 参考入口 | 源码入口 | 复用内容与保留边界 |
|---|---|---|---| |---|---|---|---|
| 经营总览、首页指标、数据摘要 | **经营总览** `/self-operated/overview` | [`OverviewView.vue`](../../apps/admin-web/src/modules/self-operated/pages/OverviewView.vue)、[`DashboardTrend.vue`](../../apps/admin-web/src/modules/self-operated/components/DashboardTrend.vue)、[`DashboardBars.vue`](../../apps/admin-web/src/modules/self-operated/components/DashboardBars.vue) | 页头操作、统计口径、分区标题、指标卡、趋势和排行榜;按实际指标数量组织,六列指标、2:1 主图和三列榜单只属于该页 | | 经营总览、首页指标、数据摘要 | **经营总览** `/self-operated/overview` | [`OverviewView.vue`](../../apps/admin-web/src/modules/self-operated/pages/OverviewView.vue)、[`DashboardTrend.vue`](../../apps/admin-web/src/modules/self-operated/components/DashboardTrend.vue)、[`DashboardBars.vue`](../../apps/admin-web/src/modules/self-operated/components/DashboardBars.vue) | 页头操作、统计口径、分区标题、指标卡、趋势和排行榜;按实际指标数量组织,六列指标、2:1 主图和三列榜单只属于该页 |
| 标准查询列表、业务台账 | **销量分析** `/self-operated/sales` | [`SalesView.vue`](../../apps/admin-web/src/modules/self-operated/pages/SalesView.vue) → [`AnalyticsView.vue`](../../apps/admin-web/src/modules/self-operated/components/AnalyticsView.vue) | 浅色筛选区、列表外壳、主次按钮、表头与悬停态、分页;保留行密度、筛选条件、权限和操作列,不增加大指标卡 | | 标准查询列表、业务台账 | **销量分析** `/self-operated/sales` | [`SalesView.vue`](../../apps/admin-web/src/modules/self-operated/pages/SalesView.vue) → [`AnalyticsView.vue`](../../apps/admin-web/src/modules/self-operated/components/AnalyticsView.vue) | 独立筛选区、列表外壳、主次按钮、表头与悬停态、分页;保留行密度、筛选条件、权限和操作列,不增加大指标卡 |
| 有分类/状态页签的业务列表 | **整柜业务**、**排车列表** | [`DomesticContainersView.vue`](../../apps/admin-web/src/modules/domestic-containers/pages/DomesticContainersView.vue)、[`DispatchesView.vue`](../../apps/admin-web/src/modules/overseas-warehouse/pages/DispatchesView.vue) | 顶部左侧分类页签、右侧操作共用一行,随后为筛选和表格;排车审核子分区保留真实层级 | | 有分类/状态页签的业务列表 | **整柜业务**、**排车列表** | [`DomesticContainersView.vue`](../../apps/admin-web/src/modules/domestic-containers/pages/DomesticContainersView.vue)、[`DispatchesView.vue`](../../apps/admin-web/src/modules/overseas-warehouse/pages/DispatchesView.vue) | 顶部左侧分类页签、右侧操作共用一行,随后为筛选和表格;排车审核子分区保留真实层级 |
| 复杂分析、指标加宽表、多视图查询 | **库存分析** `/self-operated/inventory`,分别看“库存周转”和“库存明细” | [`InventoryView.vue`](../../apps/admin-web/src/modules/self-operated/pages/InventoryView.vue) → [`InventoryTurnoverView.vue`](../../apps/admin-web/src/modules/self-operated/components/InventoryTurnoverView.vue)/[`AnalyticsView.vue`](../../apps/admin-web/src/modules/self-operated/components/AnalyticsView.vue) | 视图页签、两组紧凑指标、可展开图表、宽表和关注条件;保留业务列宽、横向查看、固定业务标识及筛选作用范围 | | 复杂分析、指标加宽表、多视图查询 | **库存分析** `/self-operated/inventory`,分别看“库存周转”和“库存明细” | [`InventoryView.vue`](../../apps/admin-web/src/modules/self-operated/pages/InventoryView.vue) → [`InventoryTurnoverView.vue`](../../apps/admin-web/src/modules/self-operated/components/InventoryTurnoverView.vue)/[`AnalyticsView.vue`](../../apps/admin-web/src/modules/self-operated/components/AnalyticsView.vue) | 视图页签、两组紧凑指标、可展开图表、宽表和关注条件;保留业务列宽、横向查看、固定业务标识及筛选作用范围 |
| 采集、同步、批处理等运行看板 | **数据采集** `/self-operated/collection` | [`CollectionView.vue`](../../apps/admin-web/src/modules/self-operated/pages/CollectionView.vue) → [`CollectionAccountMonitor.vue`](../../apps/admin-web/src/modules/self-operated/components/CollectionAccountMonitor.vue)、[`CollectionTaskProgress.vue`](../../apps/admin-web/src/modules/self-operated/components/CollectionTaskProgress.vue)、[`CollectionProgressGauge.vue`](../../apps/admin-web/src/modules/self-operated/components/CollectionProgressGauge.vue) | 主状态、当前阶段进度环、数量卡、右侧后续安排、阶段流程与各仓结果;进度与发布结果分开表达,不复制该模块的任务状态机 | | 采集、同步、批处理等运行看板 | **数据采集** `/self-operated/collection` | [`CollectionView.vue`](../../apps/admin-web/src/modules/self-operated/pages/CollectionView.vue) → [`CollectionAccountMonitor.vue`](../../apps/admin-web/src/modules/self-operated/components/CollectionAccountMonitor.vue)、[`CollectionTaskProgress.vue`](../../apps/admin-web/src/modules/self-operated/components/CollectionTaskProgress.vue)、[`CollectionProgressGauge.vue`](../../apps/admin-web/src/modules/self-operated/components/CollectionProgressGauge.vue) | 主状态、当前阶段进度环、数量卡、右侧后续安排、阶段流程与各仓结果;进度与发布结果分开表达,不复制该模块的任务状态机 |
| SKU 趋势、图表明细和证据浮层 | 在上述页面点击已有趋势/明细入口 | [`SkuTrend.vue`](../../apps/admin-web/src/modules/self-operated/components/SkuTrend.vue)、[`ChartDetailsDialog.vue`](../../apps/admin-web/src/modules/self-operated/components/ChartDetailsDialog.vue),调用方见前三类页面 | 独立主题根、蓝白图表、说明与证据表;保留普通/全屏、关闭重开、正文滚动、原尺寸和数据重置行为 | | SKU 趋势、图表明细和证据浮层 | 在上述页面点击已有趋势/明细入口 | [`SkuTrend.vue`](../../apps/admin-web/src/modules/self-operated/components/SkuTrend.vue)、[`ChartDetailsDialog.vue`](../../apps/admin-web/src/modules/self-operated/components/ChartDetailsDialog.vue),调用方见前三类页面 | 独立主题根、蓝白图表、说明与证据表;保留普通/全屏、关闭重开、正文滚动、原尺寸和数据重置行为 |
新增、编辑、审核表单与独立详情继续从 [Admin 高密度界面规范](../Admin高密度界面规范.md) 的对应规则进入。蓝白样板提供外观,不能据此把表单改成指标卡、把抽屉改成弹窗,或改动字段分组与提交入口。打印标签、PDF、装柜模型和图纸保留业务所需尺寸。 样板只用于参考结构,不授权跨模块引用内部组件或改变业务字段、权限及承载方式。自营模块的逐操作与验收记录见 [operation-matrix.md](../../apps/admin-web/src/modules/self-operated/operation-matrix.md)。
样板用于参考结构与公共类;其他业务模块不得直接引用自营模块的内部页面或组件。真正跨模块复用的稳定能力,应沿现有 Admin 公共层扩展。
## 视觉基线与维护入口 ## 视觉基线与维护入口
| 维护内容 | 唯一实现入口 | 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#视觉基线与维护入口)。
|---|---|
| DOM 配色、字号、间距、圆角、阴影与辅助色 | [`adminWorkbenchTokens.css`](../../apps/admin-web/src/styles/adminWorkbenchTokens.css) |
| 标题、指标卡、列表外壳、页签、阶段、图表空态与弹窗外观 | [`adminWorkbench.css`](../../apps/admin-web/src/styles/adminWorkbench.css) |
| Canvas 图表字体、颜色、坐标网格与提示框主题 | [`adminWorkbenchChartTheme.ts`](../../apps/admin-web/src/styles/adminWorkbenchChartTheme.ts) |
| 显式接入范围、变量归属、公共类与浮层作用域合同 | [`adminWorkbench.test.ts`](../../apps/admin-web/src/styles/adminWorkbench.test.ts) |
| 原有表格、控件和弹窗密度 | [`adminDensityTokens.css`](../../apps/admin-web/src/styles/adminDensityTokens.css)、[`adminDensity.css`](../../apps/admin-web/src/styles/adminDensity.css) |
| 弹框与抽屉的标题、正文滚动和底部操作 | [`AppDialog.vue`](../../apps/admin-web/src/shared/components/AppDialog.vue)、[`AppDrawer.vue`](../../apps/admin-web/src/shared/components/AppDrawer.vue);真实 Element 挂载回归见 [`AppDialog.layout.test.ts`](../../apps/admin-web/src/shared/components/AppDialog.layout.test.ts) |
以下列出样板的主要取值,便于理解效果;代码以对应令牌为准,修改数值只改唯一实现入口,不在页面重新声明默认值。
| 项目 | 样板基线 |
|---|---|
| 主操作与链接 | `--workbench-primary`,`#3784FA`;悬停、按下与禁用使用配套令牌 |
| 重点数字 | `--workbench-number`,`#1890FF` |
| 正文与辅助文字 | `--workbench-text`,`#1F2937`;`--workbench-muted`,`#64748B` |
| 表面与边框 | 白色主体,浅灰蓝辅助区;`--workbench-border`,`#E5EAF2` |
| 卡片与图标底座 | 卡片圆角 16px、图标底座圆角 12px,低强度阴影;使用公共令牌 |
| 普通指标卡高度 | `--workbench-metric-min-height: 186px`;长内容可自然撑高,紧凑指标不继承此最小高度 |
| 空间 | 外壳内容区上/左右 12px、底部 16px;工作台根内边距 `--workbench-page-padding: 12px`;区块间距仍为 24px,普通卡片内边距 20px、紧凑卡片内边距 14px、同级网格间距 18px |
| 主列表顶部 | 工具栏最小高度 48px、上下内边距 6px;筛选区上下 8px;两区左右统一 12px,普通按钮与筛选控件 32px;内容多时自然换行,不截断或固定总高度 |
| 文字层级 | 页标题 24px、分区标题 18px、普通指标名称 15px、重点数字 34px、紧凑指标数字 26px |
| 辅助色 | 青、绿、紫、黄、红用于图标、分区与真实状态,不能代替状态文字 |
白色和细边框负责分层,不反复套大卡片;标题与数值形成重点,单位和补充说明降低权重。蓝色强调重点数据,不要求所有数字着色。红、黄继续表示风险、失败或警告;趋势是否改善由业务决定,不能仅凭上涨或下降设绿色。
原有 `--admin-*` 密度默认值继续有效。公共控件、表格行高、行内操作、弹窗尺寸和滚动由原组件与密度规范管理;蓝白外观只在显式主题范围内生效。
页面边缘采用紧凑双层留白:`.page-container` 与 `.admin-workbench.admin-page` 分别使用 12px,避免旧外壳 20px 再叠加工作台 24px 挤占内容。页边距与区块间距使用独立令牌,不通过缩小表格行高、控件或文字来换空间。
页面内复用另一个完整 `AdminPage` 时,仅在嵌入调用上显式加 `is-embedded`,去掉内层重复 padding;独立路由打开仍保留原页边距。订单内的测量审核分支是此用法的参考。不要在业务页重复声明公共间距变量,也不要全局清空所有面板内距。
整页主体是一块连续白底,不再额外套一圈边框、圆角和阴影。包住主要列表的 `workbench-table`/`workbench-toolbar` 或整页详情 `workbench-panel` 显式增加 `is-page-surface`;内部指标、图表、并列独立面板继续保留细边框,表格单元格、表头和操作分隔线也保留。不能通过清除全部 `border` 把卡片、控件和表格边界一起抹掉。
详情主容器的 `workbench-panel.is-page-surface` 在屏幕展示时不再叠加 padding,即使同时有 `is-compact` 也由外层页面或业务分区提供唯一一层留白。独立预装/装柜清单详情和货柜内的清单页签按此规则接入;内部独立紧凑卡片仍为 14px,普通卡片仍为 20px。该规则排除 `AdminPage` 页根并仅用于屏幕,不覆盖页面原有 12px 或打印内距。
主列表不要叠加“重复路由标题行 → 分类页签行 → 按钮行”。有同级分类/状态页签时,将原页签移入 DataTable 的 `toolbar-start`,原按钮留在 `toolbar-actions`/`toolbar-end`,筛选留在 `filters`;页签使用 `workbench-list-tabs` 清除重复外框和内边距。无页签时保留紧凑标题与按钮行。真实业务子分区、统计数量、加载失败与当前范围继续保留,不因减高消失。工具栏与筛选共用 `--workbench-list-inset`,页面不再额外增加左右偏移;表格单元格仍由原密度规范管理。
## 信息层级与渐进披露 ## 信息层级与渐进披露
页面常驻内容以**关键标题、数值、简短状态和操作**为主。老板已明确不希望页面堆满提示文字;以下规则用于组织实际业务信息,不能把本规范逐条搬成页面说明。 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#提示文字与加载布局)。
- **详细口径按需展开。** 计算公式、统计口径、图例、来源解释和操作说明放入已有说明入口或 `InlineHelp`/tooltip,支持键盘聚焦;不为每张卡增加介绍段、装饰性副标题或长解释。确需影响判断的周期、单位和版本保留最短必要表达。
- **同一事实只讲一次。** 多张卡共用的统计周期、完整性或来源在分区层级统一表达;卡片仅显示自身特有状态。主状态、进度环、数量卡与阶段节点不重复整段等待原因。
- **异常优先合并到一个清晰入口。** 同一异常影响多块内容时,在相关区域保留一条简短状态与查看详情/重试入口;不要在每张卡和图表下重复警告。独立异常仍在对应位置明确呈现,不能合并后丢失作用范围。
- **关键异常与阻断常驻。** 当前失败、未知、陈旧、权限不足、操作阻断及危险后果必须能直接识别;细节可以展开,关键状态不能只藏进 tooltip。正常完整状态不需要逐卡反复宣告。
- **事实与视觉分开。** `0` 表示已知零值,`—` 或“待确认”表示未知;历史结果和陈旧快照要有简短标识。精简文案不得把未知显示为零、把暂停显示为完成,也不得隐藏真实风险。
库存分析样板按这套规则收敛:快照解释、“本仓概览/截至日期/采集时间”整行及图表范围说明移入已有说明入口;正常指标卡只保留名称、数值和单位,删除重复的“已确认”。真实未知、陈旧和异常继续显示简短提示。删除独占一行的“展开图表”,将图表操作并入顶部简短入口。完整数值来源、采集时点和估算细节可在说明或 tooltip 中查看;估算值必须能辨认其估算属性,不得因精简文案冒充实测值。
## 公共样式接入 ## 公共样式接入
页面直接导入 `@/styles/adminWorkbench.css`,保留原有密度入口,并在实际页面根容器增加 `admin-workbench`。不依赖先打开样板页后残留的 CSS,不将主题放入全局入口,不修改 `:root`。导航、顶栏、页签由总控在各自容器显式接入,不给包含业务页面的 `.app-shell` 或 `.app-main` 添加主题类;业务页和 Teleport 浮层仍须自己接入。 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#公共样式接入)。
```vue ## 弹框与抽屉的布局边界
<script setup lang="ts">
import '@/styles/adminDensity.css'
import '@/styles/adminWorkbench.css'
// 继续使用该页面原有数据、筛选、权限与事件。
</script>
<template> 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#作用域与嵌套)。
<AdminPage class="admin-density admin-workbench">
<ListPageLayout>
<div class="workbench-table">
<DataTable :data="rows" :columns="columns">
<!-- 原有工具栏、查询和操作插槽 -->
</DataTable>
</div>
</ListPageLayout>
<AppDialog
v-model="detailOpen"
class="admin-density-dialog admin-workbench is-dialog"
>
<!-- 原有内容与尺寸配置 -->
</AppDialog>
</AdminPage>
</template>
```
这个片段只说明主题作用域。`rows`、`columns`、弹窗宽高、事件与组件导入仍按目标页原实现补齐,不代表需要新建弹窗或更换承载方式。
| 场景 | 公共类与用法 |
|---|---|
| 页头与分区 | `workbench-heading`、`workbench-title`、`workbench-meta`、`workbench-section`、`workbench-section-heading`、`workbench-section-title`、`workbench-badge` |
| 普通指标卡 | `workbench-metric`、`workbench-metric-heading`、`workbench-icon`、`workbench-metric-label`、`workbench-metric-value`、`workbench-status`、`workbench-note` |
| 紧凑指标 | 在指标卡和图标上增加 `is-compact`;不继承总览卡片的最小高度 |
| 面板与提示 | `workbench-panel`、`workbench-notice`、`workbench-skeleton`;紧凑/自带头部面板使用 `is-compact`/`is-flush` |
| 图表与空态 | `workbench-chart`、`workbench-chart-heading`、`workbench-chart-title`、`workbench-chart-actions`、`workbench-chart-canvas`、`workbench-chart-empty`、`workbench-chart-empty-icon` |
| 标准列表 | **外层 `div.workbench-table` 包裹 DataTable**,统一外框、表头、边框、行悬停和分页强调;不修改业务列宽或行密度 |
| 整页主要内容 | 主要列表的 `workbench-table`/`workbench-toolbar`、整页详情的 `workbench-panel` 增加 `is-page-surface`,去掉整页外框、圆角和阴影;详情主容器的屏幕 padding 为 0,保留页面根及内部卡片内距;主表顶部同时使用公共紧凑高度与左右边界,子表格不自动套用 |
| 嵌入完整页面 | 仅在嵌入调用上加 `is-embedded`,清除内层 AdminPage 的重复内距;独立路由不加 |
| 独立查询区 | QueryToolbar 自身添加 `workbench-query`,保留原控件宽高、内边距及换行;位于 DataTable 集成筛选区时保持连续表面,不重复套卡片 |
| 列表页签与操作 | 页签放 `toolbar-start` 并加 `workbench-list-tabs`,按钮保留原操作插槽;标准主表统一 48px 最小工具栏、32px 控件,无需销量页专属紧凑类。保留自动换行与键盘切换,嵌套表格、详情和弹框不继承该布局 |
| 只有查询工具栏 | 外层 `div.workbench-toolbar` 包裹 DataTable,保留组件原有工具栏和筛选排列 |
| 原生页签与输入 | 页签父级 `workbench-tabs`,保留按钮的 `aria-pressed` 和点击事件;原生输入使用 `workbench-input`,页面只保留业务宽度 |
| 阶段节点 | `workbench-step`、`workbench-step-index`,从已确认的 `data-state` 选择状态,不从任务名或阶段顺序推断完成 |
| 证据内容 | 容器 `workbench-evidence`;已有 `density-table` 保留行密度 |
| 详情与表单 | 显式主题根保留原密度类,已有 `density-detail-*`、`density-fields`、`density-descriptions`、`density-form`、`density-form-section` 适配中性外观;字段列数、字号、业务色、校验及尺寸保持原契约 |
| 抽屉 | 实际根使用 `admin-density-drawer admin-workbench is-drawer`,保留原有详情/编辑 modifier、方向、宽度、贴边形态和正文滚动 |
| 白色品牌资源底座 | `workbench-brand-mark` 提供蓝底与公共圆角;图片比例、容器宽高由实际布局决定,不替换品牌图形 |
| 辅助色 | 元素增加 `workbench-tone`,按需选择 `data-tone="blue|teal|green|purple|amber|rose"`;语义胶囊可加 `workbench-badge is-toned` |
DataTable 的属性透传目标是内部表格,不能只把 `workbench-table` 加到组件上就认为外框已接入。默认与 integrated 模式各保留原密度,不能为了外观切换模式。Teleport 弹框必须自身带 `admin-workbench is-dialog`,页面祖先不能替代;同时保留 `admin-density-dialog`、全屏、关闭、重开和正文滚动规则。抽屉使用 `is-drawer`,不能套用弹窗类改变承载。
业务页只保留列数、排列、业务宽度与高度;接入公共类后删除被接管的私有配色、边框和标题外观,不能保留两套 CSS 再叠加优先级或 `!important`。共享组件应明确接入模式并核对实际调用者,避免影响尚未推广的页面。
### 弹框与抽屉的布局边界
新增、编辑先参考公共 `AppDialog`/`AppDrawer`,表单字段排列仍参考本业务已确认的样板。客户新增/编辑使用三列短字段,地址、备注和长内容跨列;小型确认框保留原宽度。智能装柜等工作台保留原有宽版和 92vh 高度,不把所有浮层压成同一尺寸。
- 标题、正文和页脚样式只匹配当前浮层的直接子节点;业务页的 `:deep` 规则也必须限定自身,不能通过任意后代选择器影响子弹框。
- 不假设 `AppDialog` 默认一定挂到 body。嵌在另一个弹框、工具栏或有裁切的容器中的独立浮层,应明确设置 `append-to-body`,并把主题类放到实际浮层根。核对关闭、重开、全屏和取消仅影响对应窗口。
- 标题与底部操作不随长正文滚走,正文使用单一纵向滚动区;真实宽表可在自己的区域横向滚动。不要通过整框 `overflow: hidden`、固定短高度或隐藏按钮解决溢出。
- 底部多按钮可换行且保持间距;已有复合底栏(统计、分页、提交等)保留自身布局,不强制改成一排普通按钮。工具栏的紧凑按钮尺寸不得传入浮层。
- 工具栏只控制自身操作按钮及已核实的包装层,遇到浮层、弹出菜单或内嵌 DataTable 就结束作用范围;保留按钮组与下拉按钮,不能为隔离而使已有操作失去样式。
- 长校验错误应占据正常布局空间,不能遮住下一行;长文件名允许换行,文件选择、上传和删除按钮保持可用宽度。必填标识、字段标签、错误和提交反馈不为清爽而删除。
公共选择器修复至少覆盖真实 Element 挂载下的非 Teleport 嵌套、显式 Teleport、工具栏内浮层及全屏重开。组件测试可证明 DOM、状态与部分 CSS 作用域,不能证明浏览器像素布局或实际滚动已经验收;最终仍由用户在 1920×1080、100% 缩放下截图确认。
## 图表与数据表达 ## 图表与数据表达
Canvas 图表显式导入 `adminWorkbenchChartTheme`,在 option 构建处组合字体、轴标签、网格、颜色与 tooltip;不注册全局 ECharts 主题。业务 option 入口分别为 [`skuTrendChart.ts`](../../apps/admin-web/src/modules/self-operated/skuTrendChart.ts)、[`dashboardChartOptions.ts`](../../apps/admin-web/src/modules/self-operated/dashboardChartOptions.ts)、[`turnoverPresentation.ts`](../../apps/admin-web/src/modules/self-operated/turnoverPresentation.ts)。 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#图表与数据表达)。
- 趋势使用蓝色直线和轻面积。只有连续完整数据段可以填充,未知与缺失日期继续断线,未完整日继续以虚线/空心点表达。
- 柱图使用圆角、真实数值尺度和清晰单位;未知分类用灰色并显示文字,不把缺失量补成零。排名、tooltip 内容、精度和点击业务键由业务模块负责。
- 进度环只表达当前已知阶段;总量未知、分母为零或数量异常时保留未知状态。待机不等于全部完成,当前阶段 100% 不代表报表已发布。
- 普通、加载、空数据、错误和部分数据都保留已有语义。减少装饰不能删掉覆盖不足、过期、权限或操作阻断提示。
- 图表面积按用途选择。库存周转保留 360px 面板及内部伸缩画布,不机械套用固定画布类;体积图保留右侧数值标签空间。长标签、长数字及单位不得挤出可视区域。
## 本轮截图收尾约定 ## 本轮截图收尾约定
下列约定用于本轮样板收尾,也供后续页面逐项核对: 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#实现与验收)。
| 检查点 | 约定 |
|---|---|
| 数字格式 | 同一类指标统一千分位,例如 `31,279`、`192,445`;保持原有业务小数精度、单位、零值与空值语义,不为排版缩写成“万”或先舍入再计算 |
| 筛选含义 | 提示词包含筛选对象;货主输入明确“货主名称或编码”,关注/样本条件标明类别,不能用多个无上下文的“全部” |
| 运行状态 | 主状态、阶段状态与等待原因使用一致事实;采集关闭且存在保留进度时应明确已关闭/暂停与保留进度,不能同时给出容易被理解为正在续采的提示。关闭状态不改变进度数值,也不伪造恢复安排 |
| 数据状态 | “采集完整”和“修订核对状态未知”属于不同维度,保持各自含义;可调整措辞和层级,不能为美观隐藏未知 |
| 说明与重复提示 | 正常完整性、公共口径在分区统一表达,详细解释收至说明入口;同一异常保留一个清晰入口,不在各卡片重复长提示,也不添加装饰性副标题 |
| 库存分析样板 | 快照解释、本仓概览/截至/采集时间及图表范围说明进入已有说明;正常卡片仅名称、数值、单位,删除“已确认”;图表操作并入顶部,不保留独立“展开图表”说明行。来源和估算细节按需查看,估算属性仍须可辨认,未知/陈旧/异常保留短提示 |
| 留白 | 普通指标卡最小高度统一为 186px;主列表统一 48px 最小顶部操作栏、上下 6px、左右 12px,筛选上下 8px,避免页签和筛选重复缩进。收紧排行榜标题下空白,保留足够图表面积及首屏可读性,不靠裁切说明或缩小正文实现 |
| 宽表 | 横向查看时保留业务标识的对应关系;只读库存表可固定 SKU 首列。有操作列的业务列表仍按现行规则将操作放第一列、需要时固定左侧 |
| 操作措辞 | 按用户可理解的结果命名,例如“显示更多指标”;保留原按钮行为、权限与禁用条件 |
## 后续推广顺序与验收 ## 后续推广顺序与验收
1. 使用测试环境的自营页面和本规范作为已固化的风格基线;后续按用户确定的任务范围分批改造。每个模块独立保留人工截图结论,样板发布授权不自动扩展为后续批次的发布授权。 已统一至 [Admin 界面规范对应章节](../Admin高密度界面规范.md#新模块接入规则)。
2. 进入目标模块,按实际导航、路由和操作列出列表、独立详情、编辑、弹窗、抽屉及预览入口,更新该模块现有逐操作矩阵。只维护一份实施记录,不另建全端进度副本。
3. 从上方五类样板选择结构,显式接入公共样式;保留业务字段、统计口径、客户隔离、权限、API、筛选和页面承载。标准列表保留紧凑密度,不复制总览的大指标卡。
4. 扩展公共样式时回归真实消费者,更新 `adminWorkbench.test.ts` 与相关密度合同。受影响测试、类型检查、全量测试和构建均通过仓库 `local-check.ps1` 门禁;修改 `AGENTS.md` 后另跑索引合同。自动检查与视觉结论分别记录。
5. 人工按 **1920×1080、浏览器缩放 100%** 核对独立打开/刷新、长标题与长数字、宽表、空态、部分数据、错误、只读/无权限、弹窗普通/全屏/重开。缺少截图的状态仍标记“待人工截图确认”,不因构建成功直接判定视觉通过。
自营样板不包含导航外壳;后续 Admin 推广由总控统一维护公共样式、共享组件和外壳,各业务任务按实际消费者逐模块接入。外壳参考 `AppLayout.vue`、`WorkspaceTabs.vue` 和 `shell.css`:白色顶栏、蓝色激活态、轻分隔线,现有白色 Logo 保留蓝底承载;折叠菜单和页签下拉单独声明 `popper-class` 主题范围。保留菜单尺寸、彩色图标、未保存标记、权限与页签行为,不能通过全局注入主题或替换所有 Element 默认样式跳过验收。Client、PDA 不在本轮推广范围。
折叠侧栏保留 76px 宽度,展开仍为 240px。菜单宽度随纵向滚动条占用后的实际可用空间伸缩,折叠触发器去掉重复横向 padding 和图标右边距并居中;侧栏只允许纵向滚动,悬浮子菜单继续 Teleport 到侧栏滚动区之外,不能为去掉横向滚动条而裁切子菜单。
现行依据:[Admin 高密度界面规范](../Admin高密度界面规范.md)、[Admin 和 Client 前端原型还原验收规则](../Admin-Client前端原型还原验收规则.md)。自营模块的当前承载和核对记录见 [`operation-matrix.md`](../../apps/admin-web/src/modules/self-operated/operation-matrix.md)。
## 原始视觉参考 ## 原始视觉参考
+15 -384
View File
@@ -1,390 +1,21 @@
# 财务管理闭环盘点与范围建议 # 财务文档入口
当前费用入池 P0 的唯一收口说明见:[财务费用入池 P0 闭环](财务费用入池P0闭环.md)。费用入池后的对账、应收应付结算、收付款、冻结、隔离和导出闭环见:[财务对账结算 P1 闭环](财务对账结算P1闭环.md)。两份闭环文档覆盖当前已确认范围;与本文历史范围冲突时,以闭环文档和更新日期更晚的产品确认优先。 只负责路由。已知页面、接口或服务时跳过本文件;接口实现从 Finance Controller/DTO/OpenAPI 与最近指引进入,规则只读下表命中的正文段落。历史五页范围不覆盖后来确认的资金账户与当前闭环。
## 当前确认:一件代发客户资金账户(2026-09-05) ## 当前规则正文
当前对话已将资金账户作为一件代发的前置节点重新纳入范围,并覆盖本文后续历史章节中“钱包不做”的旧结论。首批固定为 CNY。平台设置授信时必须同时设置晚于今天的到期日,最远日期不设上限;到期日当天仍有效。有效期内消费先扣实际可用资金,不足部分累计为已用授信;次日授信失效时,已用授信自动并入实际余额并允许形成负数,负数实际余额会阻止客户提交新订单。充值先归还已用授信或负余额,剩余金额才形成正数资金。 | 任务 | 唯一维护入口 |
客户选择固定或自定义金额,查看后台配置的平台统一静态收款码,付款后上传 JPG/PNG 截图形成待审核申请。平台在客户账户明细顶部审核或驳回,也可手工充值、扣款和设置客户限时授信;每次变动写不可变账户流水。新账户默认授信为 `0.00`,只有平台明确设置额度与有效期后才启用。Finance 还提供仅服务令牌可访问、按业务类型和业务单号幂等的冻结、结算和释放接口,供一件代发等模块接入。审核、账户更新、流水、冻结记录和幂等结果在 Finance 单事务内完成,文件内容仍归 File 服务。接口契约见 [客户资金账户 OpenAPI](openapi/finance-wallet-v1.yaml)。
> 盘点日期:2026-09-09
> 当前状态:费用入池 P0 与对账结算 P1 已完成测试环境部署及真实 HTTP 全链验收;最终报告为 `baiyue-firstleg/reports/admin-test-env-acceptance-20260909103401.json`,1518/1518 通过。领导页面人工截图仍按独立验收规则执行
> 盘点范围:入库计费现状、平台后台财务原型、Admin/Client/Firstleg 当前实现
> 结论口径:本文区分“代码已实现”“原型展示”和“建议范围”;原型功能不自动成为开发范围。
## 费用来源扩展确认(2026-09-02)
- Finance 继续保持独立服务和独立数据库;业务服务只生产费用事实,不能直接写财务单据或余额。
- Firstleg 入库费用继续按客户和入仓码进入 Finance;柜级公共费用必须先按柜内真实客户与业务订单原子分摊,再逐客户进入应收应付。入仓码是可选引用:存在时必须校验真实归属,不存在时保留订单/业务单号,禁止伪造入仓码。
- Lastleg 的海外入仓、海外采购、本土卡车、本土散板和海外仓服务费使用统一版本化来源。审核通过、调整和作废同事务写海外 Outbox,通过 Event Bridge 向国内 Finance 投递完整不可变快照;Finance 不跨海外数据库回查。
- Finance 以 `sourceSystem + sourceType + sourceFeeId + sourceVersion` 唯一入池;重复事件幂等,同版本不同哈希拒绝,已进入有效账单或结算单的来源禁止替换/作废。
- 海外仓服务费只强制客户、海外仓和业务编号;入仓记录/入仓码按真实业务选填,月租、仓租等无入仓码费用仍可入池。
当前实现包含柜级分摊 API/Admin 录入、海外费用来源 API、跨区事件、Finance 通用消费入口及数据库脚本,并已完成测试环境数据库和真实 HTTP 验收。页面人工截图仍按独立验收规则执行。
## 历史测试环境部署状态(2026-08-12,已解除)
当时的 Finance 全链路测试环境实跑报告为 `baiyue-firstleg/reports/finance-full-acceptance-20260812.json`:共 430 项,411 项通过,19 项失败,当时结论为 `DEPLOYMENT_BLOCKED`。这些阻断已在后续版本解除,当前结论以 P0/P1 闭环文档和 2026-09-09 最终报告为准。
当前主要部署阻断:
- Gateway 健康,但 `/finance-service/v3/api-docs` 返回 HTTP 503,测试环境 Finance 服务不可用。
- `baiyue_finance` 当前仅部署旧 F0 schema;`fin_bill`、`fin_fee_source` 等存量表无业务数据,G3/G4 新表未部署。因此对账、应收应付、凭证及结算写链无法完成真实 HTTP 验收。
- 本地脚本和模块契约测试通过只证明验收程序契约成立,不代表测试环境 Finance 服务或数据库迁移已经部署成功。
报告生成后,产品进一步确认现有 ACTIVE 往来单位均可作为应付结算候选,不要求 `SUPPLIER` 类型。曾为诊断临时新增的 `FIN-FULL-SUP-20260812` 及其类型映射已从测试库完整删除;全量脚本和 Admin 页面均已改为复用现有 ACTIVE 往来单位。原报告中的“未找到 ACTIVE SUPPLIER”仅反映当时脚本的旧过滤条件,不能倒推为测试环境已通过。当前仍需完成墨家测量实重同步修复、Finance 服务部署和 G3/G4 schema 迁移,再重跑同一三模块链路形成新报告。
产品/业务逐项确认请使用:[财务管理产品确认表](财务管理产品确认表.md)。
产品回传后的差异和剩余门禁见:[财务管理产品确认版差异与剩余待确认](财务管理产品确认版差异与剩余待确认.md)。
技术边界已确认:[财务服务边界设计](财务服务边界设计.md)。Finance 采用独立服务和独立数据库,Firstleg 仅提供业务费用来源。
开发前总控门禁与 F0/F1 任务清单:[财务开工门禁与F0-F1任务清单](财务开工门禁与F0-F1任务清单.md)。
订单与客户领导验收唯一范围入口:[财务核心五页产品与接口验收契约](财务核心五页产品与接口验收契约.md)。
订单与客户 11 个 P0 操作、状态机与验收用例:[财务核心 P0 操作契约与验收用例](财务核心P0操作契约与验收用例.md)。
订单与客户实现与 Admin 接入证据(不反向修改目标契约):[财务核心 P0 实现证据矩阵](财务核心P0实现证据矩阵.md)。
文档优先级:五页验收契约和本轮产品确认 > 五页目标 OpenAPI > 既有人工 F1 契约/门禁 > 领域模型、历史全量规划和迁移文档。旧文档用于追溯,不得据此把钱包、充值、发票、费用分析或利润表重新纳入订单与客户。
旧文档降级规则:
| 文档/章节 | 当前用途 | 订单与客户实施约束 |
|---|---|---|
| 本文第六节起的“历史全量规划” | 保存早期盘点和演进背景 | 与五页契约冲突时全部失效,不作为菜单、路由、字段或接口依据 |
| `财务领域模型与跨服务契约.md` | 历史合并稿 | 已被数据字典和跨服务契约替代 |
| `财务服务边界设计.md`、`财务领域模型与数据字典.md` | 服务边界和长期模型参考 | 其中钱包、充值、发票、费用分析、利润模型不属于订单与客户 |
| `财务历史迁移与上线验收方案.md`、`财务F0实施任务拆分.md` | 历史迁移、底座任务追溯 | 不得覆盖五页范围和当前实现状态 |
详细设计材料:
- [海外仓费用统一接入财务评审方案](海外仓费用统一接入财务评审方案.md)
- [海外仓费用统一接入阶段0技术契约](海外仓费用统一接入阶段0技术契约.md)
- [财务业务操作流程图](财务全链路流程图.md)
- [财务业务全流程总览图(PNG)](财务业务全流程总览图.png)
- [财务来源接入现状](财务来源接入现状.md)
- [财务领域模型与数据字典](财务领域模型与数据字典.md)
- [Firstleg-Finance跨服务契约](Firstleg-Finance跨服务契约.md)
- [F1 人工账单、收款、成本接口契约](F1人工账单收款成本接口契约.md)
- [F1 人工财务契约审查与门禁](F1人工财务契约审查与门禁.md)
- [财务核心五页产品与接口验收契约](财务核心五页产品与接口验收契约.md)
- [财务核心五页 OpenAPI](openapi/finance-core-five-pages-v1.yaml)
- [财务核心 P0 操作契约与验收用例](财务核心P0操作契约与验收用例.md)
- [财务核心 P0 实现证据矩阵](财务核心P0实现证据矩阵.md)
- [财务历史迁移与上线验收方案](财务历史迁移与上线验收方案.md)
- [财务F0实施任务拆分](财务F0实施任务拆分.md)
历史合并稿:[财务领域模型与跨服务契约](财务领域模型与跨服务契约.md) 已由“领域模型与数据字典”和“Firstleg-Finance 跨服务契约”两份文档替代,不作为后续实施依据。
## 一、结论
当前首期采用人工简化方案:平台财务登记收付款并上传凭证;客户可查询并确认本人已出账对账单。首期不做银行自动对账、自动核销任务、复杂审批、客户钱包、发票、供应商在线结算、汇率、月结或总账。
当前已经实现业务计费闭环,并已落地 Finance 独立服务/数据库、人工账单/收款/成本基础接口、平台与客户权限种子、Admin 财务页面和 Client 只读账单页面。当前不是“整体未开发”,而是已进入专项修复和契约收敛阶段。
已具备的基础链路:
```text
测量/称重
-> 测量审核
-> 计费规则匹配
-> 费用试算与快照
-> 发布对客费用
-> 客户查看并确认已出账对账单
-> 完成入库
```
当前 F1 已具备的实现链路:
```text
平台财务创建草稿账单
-> 出账冻结
-> 人工登记收款
-> 一笔收款分配多张账单
-> 部分收款/收清状态更新
-> 客户只读查询
```
此前基础链路已完成 Firstleg 真实柜次体积快照、客户归属、成本凭证校验、revision、双权限上传、费用来源事件/Relay/快照、Finance `fin_fee_source` 消费写入和完整幂等。在此基础上,固定五页所需的 11 个目标 operation、Admin 页面动作与 IAM 权限目录现已闭环,G1-G4 本地门禁均为 `PASS`;最终直接证据包括 Finance 聚合 82/82、G3 16/16、G4 18/18、收款及 AR 同步 12/12、IAM 168/168、Admin 财务专项 60/60、Admin 全量 654/654 及 Admin 构建通过。真实 MySQL 执行、测试环境 HTTP 冒烟和领导页面验收仍需单独完成,未经当前对话明确授权不触发 Jenkins。
订单与客户范围已重新冻结为原型 5 页:客户账户、客户应收应付、客户对账单、结算单应收、结算单应付。费用分析、利润表、发票和钱包不做,也不保留菜单、路由或假按钮。客户账户改为账单、收款和应收应付来源派生的财务往来总览,不做充值/预收。
## 二、事实来源与边界
本次按以下资料核对:
1. 入库测量与计费需求文档明确入库测量与计费只做头程计费,不自动形成应收、应付、对账单、收付款、核销、发票、利润或总账。
2. 平台后台原型提供财务管理全量参考,但其中数据和交互主要由单页 HTML 内的静态数据及前端脚本驱动。
3. 当前代码用于证明“已经实现什么”,不反向扩大产品范围。
主要依据:
- `docs/入库测量与计费/入库测量与计费计费财务需求确认表.md`
- `docs/入库测量与计费/入库测量与计费V2需求确认清单.md`
- `docs/入库测量与计费/入库测量与计费需求优化版-v2-测量计费入库主流程.md`
- `docs/悦/货代SAAS平台后台/货代SaaS平台原型.html`
- `apps/admin-web/src/modules/inbounds/`
- `apps/admin-web/src/modules/fee-items/`
- `apps/admin-web/src/prototype/modules/finance/`
- `apps/client-web/src/modules/first-leg/`
- `apps/client-web/src/modules/finance/`
- `baiyue-firstleg/firstleg/`
## 三、当前已经具备什么
### 3.1 可作为财务上游的业务数据
| 能力 | 当前状态 | 可复用价值 | 不能代表什么 |
|---|---|---|---|
| 实测重量、体积、计费量 | 已实现 | 作为费用计算依据和业务快照 | 不是财务凭证 |
| 客户计费规则、船司价格 | 已实现 | 产生确定的对客头程价格 | 船司价格不等于供应商应付 |
| 费用试算、确认、发布 | 已实现 | 形成版本化对客费用快照 | 不等于应收单或账单 |
| 费用调整 | 已实现 | 已发布费用调整生成新版本并留原因 | 尚未定义已出账或已核销后的调整方式 |
| 客户侧费用与账单查看 | 已实现 | 客户能看到入库及已发布费用结果,并在线确认本人已出账且待确认的对账单 | 客户不能修改金额、在线提出争议或登记收款/核销 |
| 费用项目主数据 | 已实现 | 支持费用编码、分类、国内/国际、提货/仓库应收应付属性 | 费用项目属性不自动生成财务记录 |
| 入库费用明细 | 后端已实现 | 支持人工新增、编辑、删除、审核、自动发布的入库运费明细 | 尚无跨入库单财务台账和结算生命周期 |
| 权限与审计基础 | 部分具备 | 费用明细查看、编辑、删除、审核已有权限和业务审计 | 财务制单、复核、收款、核销、反核销权限尚未定义 |
### 3.2 当前费用明细的真实边界
Firstleg 已有 `fl_inbound_fee_detail`,包含:
- 入库单、费用项目、方向、业务发生日、币种、单价、金额;
- 重量、体积、计费量等业务快照;
- 审核状态、审核人、驳回原因;
- 发布状态、发布时间;审核通过后自动发布并成为结算候选;
- 自动计费来源的费用单号和版本。
但当前仍存在以下断点:
- 自动发布链路只生成 `RECEIVABLE` 对客运费。
- 人工 `PAYABLE` 明细使用 Warehouse `supplierId/supplierName` 快照;费用项目 `supplierCategory` 可空,空表示任意启用供应商,非空严格匹配。
- 人工明细采用编辑、提交、审核、调整、作废闭环;审核通过后自动发布,不再存在“是否结算”开关。
- 已发布应收明细只能按单个入库单查询,未形成按客户、币种、账期聚合的财务台账。
- 没有冻结、出账、核销后的费用变更规则,无法保证历史账单金额稳定。
## 四、原型中有什么
平台后台原型的财务菜单包含以下能力:
| 原型模块 | 原型展示的主要能力 | 当前代码状态 | 是否能直接纳入首期 |
|---|---|---|---|
| 客户账户 | 原型为余额、冻结、可用余额和充值流水 | 未实现 | 订单与客户保留汇总/详情/流水结构,但改为未收、待出账、本期已收等派生指标;删除充值/钱包能力 |
| 客户应收应付 | 费用明细、编辑审核、按截止时间或勾选生成账单 | 已接入真实费用来源和编辑审核闭环 | 作为应收应付费用池 |
| 客户对账单 | 账期、汇率、应收、已收、结清、明细和支付历史 | 未实现 | 可作为应收闭环核心,但汇率和开票先暂缓 |
| 结算单应收 | 应收、已收、余额、到期日、审批、部分收款 | 未实现 | 可合并进账单/应收单,避免首期重复建模 |
| 结算单应付 | 供应商应付、已付、余额、审批、部分付款、利润 | 未实现;上游成本来源不完整 | 订单与客户纳入,但删除利润字段/按钮;必须先补真实供应商应付来源和付款凭证链路 |
| 费用分析 | 内外部费用对比、趋势和明细 | 未实现 | 订单与客户明确不做,不进菜单/路由 |
| 利润表 | 按客户、货柜、单票、月份统计收入、成本、利润率 | 未实现 | 订单与客户明确不做,不进菜单/路由 |
原型还出现了发票抬头、开票日期、汇率、支付方式、收付款凭证号等字段。它们只说明未来可能需要,不代表当前产品已经确认税务、外币折算、资金或发票边界。
当前 Admin 已有正式财务路由、账单详情/草稿修改/出账/调整/作废、人工收款和成本页面及真实凭证上传调用,Client 已有正式只读账单页面。后端已改为根据 `containerId` 调 Firstleg 体积快照并完成成本凭证校验,但 Admin 仍强制人工填写并提交柜内订单体积,且未接客户账期和 revision,因此前端创建闭环尚未与最终契约对齐。
## 五、当前修复中缺口
| 序号 | 断点 | 直接影响 |
|---|---|---|
| 1 | 五页读接口、平台/客户固定 DTO 和追踪响应已实现 | Finance 35/35 BUILD SUCCESS;本轮使用现有 Surefire 报告核对,不重新执行 Maven |
| 2 | 收款和成本均已校验凭证,但 `fileClient == null` 时仍 fail-open | File 客户端缺失时可能绕过凭证校验 |
| 3 | 后端已使用 Firstleg 真实体积快照,Admin 仍要求人工填写并提交体积 | 页面与最终请求契约不一致,产生无效输入和误导 |
| 4 | 幂等已有 SHA-256 与同参重放,但未覆盖完整规范化请求,缺 PROCESSING 恢复测试 | 仍可能误判同参或无法恢复中间态 |
| 5 | 客户账单已过滤可见状态,收款列表仍暴露平台字段且未按可见账单过滤 | 客户只读边界仍不完整 |
| 6 | Admin 已接账单动作,但未接客户账期、revision,整柜仍人工填体积 | 平台财务页面仍非完整闭环 |
| 7 | 业务错误码仍以通用错误和中文消息为主 | 前端无法稳定区分版本、幂等、凭证和归属错误 |
| 8 | revision 后端查询已落地,Admin 尚未接展示 | 调整历史仍不能在产品页面核对 |
## 六、全量财务规划与交付顺序
### 6.1 历史全量规划(不作为订单与客户范围)
以下内容只保留为历史分析。若与《财务核心五页产品与接口验收契约》冲突,以五页契约为准。
| 目标域 | 业务结果 | 主要来源 | 不能提前假定的口径 |
|---|---|---|---|
| 客户账户 | 客户财务往来派生汇总、详情和流水 | 账单、收款和应收应付来源 | 订单与客户不建设钱包、充值、预收或自动扣款 |
| 客户应收 | 客户欠款、到期、逾期、结清 | 已发布对客费用、补差/冲销 | 收入确认节点和账期规则 |
| 客户应付 | 客户代垫或返还类应付款(如确有业务) | 业务费用或人工单据 | 产品是否真的存在“平台向客户付款”的场景 |
| 客户对账单 | 期间内费用汇总、明细、平台出账和客户确认 | 应收/应付费用池 | 一张账单是否允许混合方向、混合币种 |
| 结算单应收 | 可审批、可收款、可核销的应收结算单 | 已确认客户账单 | 与客户对账单是一对一还是一对多 |
| 结算单应付 | 供应商成本、付款、余额和结清 | 供应商费用、运力/仓储/报关成本 | 成本确认、供应商账期、审批和付款方式 |
| 收付款与核销 | 到账/付款凭证,部分结算、反核销 | 银行流水或人工登记 | 是否首期接银行流水,是否允许一笔多单核销 |
| 发票 | 开票申请、开具、红冲、作废和关联 | 已确认应收/收款 | 税率、含税/未税、开票主体、外部平台 |
| 费用分析 | 历史规划,订单与客户不做 | 应收应付台账 | 不进入订单与客户菜单、路由和验收 |
| 利润 | 客户/单票/柜次/月度收入、成本、利润率 | 应收收入 + 应付成本 + 分摊 | 汇率、成本分摊、收入成本确认时间 |
### 6.2 分阶段交付顺序
全量目标建议拆成五个可验收阶段:
| 阶段 | 交付范围 | 关键闭环 | 前置依赖 |
|---|---|---|---|
| F0 财务底座 | 独立 Finance 服务/数据库、财务主体、客户/供应商往来单位、币种、费用科目、期间、权限、审计、幂等、金额精度 | 所有后续对象使用同一基础口径 | 服务边界已技术确认;产品确认主体、币种、权限和编码 |
| F1 应收与客户对账 | 应收费用池、平台出账、客户确认、结算单应收、收款登记、核销、反核销 | 费用 → 账单 → 客户确认 → 应收 → 收款 → 结清 | 当前已发布对客费用来源 |
| F2 应付与供应商结算 | 成本费用池、供应商账单、结算单应付、付款登记、付款核销、应付调整 | 成本 → 供应商账单 → 应付 → 付款 → 结清 | 供应商主数据和真实成本来源 |
| F3 客户账户与发票 | 订单与客户只做派生客户账户总览;发票暂缓 | 账户只读聚合,不维护资金余额 | 发票不属于订单与客户 |
| F4 分析与利润 | 订单与客户不做 | 不建设菜单、路由或假入口 | 后续重新立项 |
阶段之间可以并行做页面原型和契约设计,但生产数据链路必须按 F0 → F1/F2 → F3 → F4 验收。F4 不能用原型静态数字先行替代真实台账。
### 6.3 F1 最小财务闭环
F1 先处理当前已经有可靠来源的对客头程费用:
```text
已审核并发布的应收费用明细
-> 进入待对账费用池
-> 按客户 + 币种 + 账期生成对账单
-> 内部复核
-> 客户在线确认(异议仍线下反馈)
-> 平台财务出账后形成应收
-> 登记实际收款
-> 将收款核销到应收
-> 全额核销后结清
-> 错误时按权限反核销并留审计
```
F1 建议页面:
1. 应收费用池:查询、编辑、提交、审核、调整、作废;审核通过自动进入结算候选。
2. 客户对账单:生成、明细、内部复核、发送、关闭;平台财务可重开或调整。
3. 应收与收款:应收余额、到期日、收款登记、附件/凭证号、部分核销。
4. 核销记录:每笔收款对应哪些应收、核销金额、剩余余额、反核销历史。
5. 客户侧账单:查看明细、收款与未结余额,并在线确认本人已出账账单;不做在线争议。
以下历史排除清单已被 2026-08-11 的五页范围取代。结算单应付现在属于订单与客户;其余未确认能力继续排除:
- 供应商在线确认和自动付款(应付结算单与人工付款属于订单与客户);
- 客户预充值、余额冻结和自动扣款;
- 发票申请、开票和税务接口;
- 多币种折算与汇兑损益;
- 利润表、利润率和总账;
- 银行流水自动认领;
- 复杂费用分摊和会计凭证。
### 6.4 全量阶段的范围门禁
| 范围 | 开工门禁 |
|---|---| |---|---|
| 客户账户 | 已确认只做派生财务往来总览;禁止充值、冻结/解冻、退款、自动扣款和可写余额 | | 客户资金账户、充值、授信、冻结与业务扣费 | [资金账户规则](财务对账结算P1闭环.md#客户资金账户);请求/响应查[资金账户 OpenAPI](openapi/finance-wallet-v1.yaml) |
| 客户应收应付 | 明确客户作为付款方还是收款方;没有真实业务场景的方向不建菜单和数据 | | 业务费用来源、入池、直接已付与重复扣费隔离 | [费用入池规则](财务费用入池P0闭环.md),按来源字段、覆盖矩阵或幂等条款读取 |
| 供应商应付 | 必须有供应商主数据、成本来源凭证、审批人、付款方式和付款责任主体 | | 客户账单、AR/AP、收付款、作废与金额并发 | [对账结算规则](财务对账结算P1闭环.md),只读相应出单、生命周期或不变量段落 |
| 收付款核销 | 明确人工登记与银行流水的边界;收款、付款、核销、反核销分开授权 | | 客户/平台财务页面口径与导出 | [页面与数据口径](财务对账结算P1闭环.md#5-页面与数据口径) |
| 发票 | 明确开票主体、税率、含税/未税、红冲/作废和外部开票平台;未确认前只保留接口扩展位 | | Firstleg 与 Finance 的费用事件和服务边界 | [跨服务契约](Firstleg-Finance跨服务契约.md);通信方式以[统一通信契约](../统一认证与服务通信契约.md)为准 |
| 费用分析/利润 | 先冻结汇率、收入成本确认日、成本分摊和跨币种折算;报表必须能钻取到原始费用和结算单 | | 海外费用接入阶段 0 专项 | [阶段 0 技术契约](海外仓费用统一接入阶段0技术契约.md),仅该改造任务触发;不能据此推定当前实现已切换 |
## 七、已确认的产品结论(历史问题关闭结果) ## 专题与历史(按需)
下表原为产品问题清单,现按本轮确认结果保留。不得再把这些条目解释为待产品确认;实现仍受真实费用来源链路和专项技术门禁约束。 - [领域模型与数据字典](财务领域模型与数据字典.md)、[服务边界设计](财务服务边界设计.md)用于字段或模型专题核对,不覆盖上表当前业务规则。
- [五页操作与验收用例](财务核心P0操作契约与验收用例.md)、[实现证据矩阵](财务核心P0实现证据矩阵.md)只在对应验收或历史追溯时读取。
| 编号 | 待确认问题 | 建议默认值 | - 原入口的旧范围、开发门禁、历史部署结果与规划已冻结到[历史盘点](归档/财务闭环盘点历史记录.md),不继续同步改写。
|---|---|---| - 当前部署状态与未关闭验收项只查[部署主契约](../测试环境单机部署与配置契约.md)及[认证通信主契约](../统一认证与服务通信契约.md);旧报告不证明当前快照已验证。
| F1 | 订单与客户领导验收范围 | 固定为客户账户、客户应收应付、客户对账单、结算单应收、结算单应付;费用分析和利润表不做 |
| F2 | 账单生成维度 | 客户 + 币种 + 账期;不同币种不合并 |
| F3 | 哪些费用可以进入账单 | `APPROVED + PUBLISHED + AVAILABLE + CNY + amount>0` 且未出账;无人工结算开关 |
| F4 | 当前已发布头程费用是否自动进入待对账池 | 是,但仍由财务选择并生成账单 |
| F5 | 账单生成后上游费用能否直接调整 | 不能;应走补差单/冲销单并保留原账单 |
| F6 | 客户是否需要在线确认和提出争议 | 客户在线确认本人已出账对账单;确认状态独立于主状态,在线争议暂不做 |
| F7 | 是否需要内部复核 | 建议制单与复核权限分离,首期允许同人需业务明确 |
| F8 | 收付款是人工登记还是接银行流水 | F1/F2 先人工登记,F3 再接银行流水;必须保存到账日/付款日、方式、凭证号和附件 |
| F9 | 一笔收款能否核销多张应收,一张应收能否被多次收款 | 两者都允许,禁止累计核销超过余额 |
| F10 | 反核销和作废权限 | 独立高风险权限,必须填写原因并完整审计 |
| F11 | 到期日如何计算 | 由客户结算条款或账单确认日 + 账期天数计算 |
| F12 | 历史已发布费用如何迁移 | 仅迁移满足入池条件且尚未形成线下已结算事实的费用 |
## 八、建议状态模型
状态应按对象拆分,避免把费用、账单和资金状态混为一个字段。
### 8.1 费用明细
```text
DRAFT -> PENDING -> APPROVED -> PUBLISHED -> BILLED
-> REJECTED
PUBLISHED/BILLED -> ADJUSTED(通过补差或冲销,不覆盖原记录)
```
### 8.2 对账单
```text
DRAFT -> REVIEWED -> SENT -> CONFIRMED -> CLOSED
-> DISPUTED -> DRAFT/VOIDED
```
### 8.3 应收与核销
```text
应收:OPEN -> PARTIALLY_SETTLED -> SETTLED
-> OVERDUE
收款:DRAFT -> CONFIRMED -> PARTIALLY_ALLOCATED -> FULLY_ALLOCATED
核销:ACTIVE -> REVERSED
```
“收款已登记”与“应收已核销”必须分开。只有核销完成后,对应应收余额才减少;反核销恢复余额,但不得删除原记录。
## 九、关键数据与约束建议
首期至少需要以下独立对象,不能只在现有费用明细表上继续追加字段:
| 对象 | 核心职责 |
|---|---|
| 财务费用来源 | 引用不可变的业务费用版本,保存来源服务、来源单据、来源版本和来源幂等键 |
| 对账单 | 客户、币种、账期、状态、版本、金额合计和确认信息 |
| 对账单明细 | 关联费用来源并保存出账时快照;一条有效费用只能进入一张有效账单 |
| 应收单 | 应收金额、已核销金额、余额、到期日和状态 |
| 收款单 | 到账金额、币种、日期、方式、凭证号、附件和登记/确认人 |
| 核销记录 | 收款单、应收单、核销金额、操作人、时间和幂等键 |
| 反核销记录 | 原核销记录、原因、审批/操作人和恢复金额 |
| 财务操作日志 | 对账、确认、争议、收款、核销、反核销和作废的完整历史 |
必须具备的约束:
- 金额统一使用定点小数,币种使用 ISO 三位码;不同币种首期禁止合并和直接核销。
- 长整型 ID 按字符串跨前端传输。
- 所有写操作带幂等键和乐观锁版本。
- 同一费用来源版本只能进入一个未作废的账单明细。
- 核销累计金额不得超过收款可用余额或应收未结余额。
- 出账、核销后禁止物理删除;调整、作废和反核销必须保留原记录。
- 客户隔离由服务端登录上下文保证;平台员工操作目标客户时必须显式选择客户并校验权限。
- 客户不可看到供应商成本、内部备注、审核意见和平台凭证附件。
## 十、原型需要修正或裁剪的地方
后续做正式页面时,不建议直接照搬原型:
1. “客户应收应付”把客户应收和供应商应付混在同一概念下,应按交易对手和职责拆分。
2. “客户对账单”和“结算单应收”字段大量重复,首期应定义清晰的一对一或一对多关系,避免两套金额状态并存。
3. 原型中的“支付历史”在应收场景应统一使用“收款/核销记录”,避免收付款术语混用。
4. 原型允许直接登记部分收付款,但没有展示确认、撤销、反核销、超额校验和并发冲突。
5. 客户账户充值与应收结算不是同一个闭环,不能用余额字段代替收款和核销台账。
6. 利润表直接展示结果,但没有收入确认、成本来源、外币折算和分摊规则,当前结果不可审计。
7. 所有正式业务表格的“操作”列应放在第一列;原型部分旧页面需要按仓库统一规则调整。
## 十一、完成标准
只有同时满足以下条件,才可以称为“客户应收财务闭环”:
- 每笔应收都能追溯到已审核、已发布且不可变的费用来源版本;
- 能生成、复核、发送并确认客户对账单;
- 能形成有到期日和余额的应收;
- 支持一次或多次收款及多对多核销;
- 支持部分核销、全额结清、反核销和作废;
- 所有金额变化均可审计,重复提交和并发操作不会多记账;
- Admin 与 Client 对同一账单、应收余额和状态的展示一致;
- 越权、跨客户、不同币种、超额核销、已出账费用调整等异常路径有服务端硬校验;
- 使用真实 API 完成至少一条“费用 -> 对账 -> 应收 -> 收款 -> 核销 -> 结清”回归,并验证反核销恢复余额。
## 十二、下一步文档工作
在写代码前建议依次完成:
1. 由产品/业务填写 F1-F12,冻结首期范围。
2. 形成《客户应收闭环需求确认表》,明确页面、角色、状态和异常处理。
3. 使用《财务管理产品确认表》完成 S1-S8、F0-F4 的产品确认。
4. 服务边界、领域模型、跨服务契约及 F0/F1 基础实现已经形成;当前按《F1人工财务契约审查与门禁》完成专项修复和测试放行,不再等待产品填写 XLSX 或重复讨论是否拆服务。
5. 形成《客户应收接口与权限契约》,包括错误码、幂等、数据范围和审计事件。
6. 形成《历史费用迁移与上线方案》,避免已有线下结算数据被重复出账。
@@ -240,6 +240,7 @@ paths:
get: get:
operationId: listFinanceFeeSources operationId: listFinanceFeeSources
summary: 分页查询客户应收应付费用来源 summary: 分页查询客户应收应付费用来源
description: 默认按 sourceSystem + sourceType + sourceFeeId 只展示最新版本,计数与分页口径一致;同名不同来源费用不合并。显式筛选 SUPERSEDED 时查询被替代的历史版本。
x-permission: platform:finance:customer-arap:list x-permission: platform:finance:customer-arap:list
parameters: parameters:
- name: page - name: page
@@ -256,7 +257,7 @@ paths:
schema: {$ref: '#/components/schemas/FeeDirection'} schema: {$ref: '#/components/schemas/FeeDirection'}
- name: status - name: status
in: query in: query
schema: {type: string, enum: [AVAILABLE, LOCKED, BILLED, VOIDED, SUPERSEDED]} schema: {type: string, enum: [AVAILABLE, LOCKED, BILLED, SETTLED, PAYABLE_BILLED, PARTIALLY_PAID, PAID, VOIDED, SUPERSEDED]}
- name: reviewStatus - name: reviewStatus
in: query in: query
schema: {$ref: '#/components/schemas/ReviewStatus'} schema: {$ref: '#/components/schemas/ReviewStatus'}
@@ -1023,8 +1024,11 @@ components:
amount: {$ref: '#/components/schemas/Money'} amount: {$ref: '#/components/schemas/Money'}
currency: {type: string, enum: [CNY]} currency: {type: string, enum: [CNY]}
reviewStatus: {$ref: '#/components/schemas/ReviewStatus'} reviewStatus: {$ref: '#/components/schemas/ReviewStatus'}
sourceStatus: {type: string, enum: [AVAILABLE, LOCKED, BILLED, VOIDED, SUPERSEDED]} sourceStatus:
statementGenerated: {type: boolean} type: string
enum: [AVAILABLE, LOCKED, BILLED, SETTLED, PAYABLE_BILLED, PARTIALLY_PAID, PAID, VOIDED, SUPERSEDED]
description: 当前来源展示状态。应付按同客户有效结算单显示 PAYABLE_BILLED(已生成应付单)、PARTIALLY_PAID(部分付款)、PAID(已付款);直接已付也显示 PAID,作废单不占用来源。
statementGenerated: {type: boolean, description: 是否关联同客户的有效客户对账单;应付来源不使用该字段判断付款进度}
FeeSourceDetail: FeeSourceDetail:
allOf: allOf:
- $ref: '#/components/schemas/FeeSource' - $ref: '#/components/schemas/FeeSource'
@@ -1034,6 +1038,7 @@ components:
sourceHash: {type: string} sourceHash: {type: string}
operationLogs: operationLogs:
type: array type: array
description: 同客户、同收付方向、同来源费用身份的历次同步及财务审计;保留版本和调整前后金额,系统同步不冒充原业务操作者。历史版本仅返回当时及此前版本记录。
items: {$ref: '#/components/schemas/OperationLog'} items: {$ref: '#/components/schemas/OperationLog'}
FeePoolItemRead: FeePoolItemRead:
type: object type: object
@@ -1384,6 +1389,7 @@ components:
required: [transactionId, transactionType, transactionDate, amount, method, createdBy, createdAt] required: [transactionId, transactionType, transactionDate, amount, method, createdBy, createdAt]
properties: properties:
transactionId: {$ref: '#/components/schemas/Id'} transactionId: {$ref: '#/components/schemas/Id'}
transactionNo: {type: string, nullable: true, pattern: '^PAY[0-9]{12}$', description: 结算付款落库业务号;收款记录未生成PAY号时为空,不使用内部ID或凭证参考号替代}
transactionType: {type: string, enum: [RECEIPT, PAYMENT]} transactionType: {type: string, enum: [RECEIPT, PAYMENT]}
transactionDate: {type: string, format: date} transactionDate: {type: string, format: date}
amount: {$ref: '#/components/schemas/PositiveMoney'} amount: {$ref: '#/components/schemas/PositiveMoney'}
@@ -0,0 +1,392 @@
# 财务闭环盘点历史记录
> 角色:冻结历史。由原财务 README 迁入,用于追溯当时范围、方案和验收证据;下文“当前”“唯一”等称谓均属于记录当时,不是现行开发指令。当前规则从[财务入口](../README.md)进入,资金账户正文已归入[对账结算规则](../财务对账结算P1闭环.md#客户资金账户)。不为追随当前实现继续更新本记录。
当前费用入池 P0 的唯一收口说明见:[财务费用入池 P0 闭环](../财务费用入池P0闭环.md)。费用入池后的对账、应收应付结算、收付款、冻结、隔离和导出闭环见:[财务对账结算 P1 闭环](../财务对账结算P1闭环.md)。两份闭环文档覆盖当前已确认范围;与本文历史范围冲突时,以闭环文档和更新日期更晚的产品确认优先。
## 当前确认:一件代发客户资金账户(2026-09-05)
当前对话已将资金账户作为一件代发的前置节点重新纳入范围,并覆盖本文后续历史章节中“钱包不做”的旧结论。首批固定为 CNY。平台设置授信时必须同时设置晚于今天的到期日,最远日期不设上限;到期日当天仍有效。有效期内消费先扣实际可用资金,不足部分累计为已用授信;次日授信失效时,已用授信自动并入实际余额并允许形成负数,负数实际余额会阻止客户提交新订单。充值先归还已用授信或负余额,剩余金额才形成正数资金。
客户选择固定或自定义金额,查看后台配置的平台统一静态收款码,付款后上传 JPG/PNG 截图形成待审核申请。平台在客户账户明细顶部审核或驳回,也可手工充值、扣款和设置客户限时授信;每次变动写不可变账户流水。新账户默认授信为 `0.00`,只有平台明确设置额度与有效期后才启用。Finance 还提供仅服务令牌可访问、按业务类型和业务单号幂等的冻结、结算和释放接口,供一件代发等模块接入。审核、账户更新、流水、冻结记录和幂等结果在 Finance 单事务内完成,文件内容仍归 File 服务。接口契约见 [客户资金账户 OpenAPI](../openapi/finance-wallet-v1.yaml)。
> 盘点日期:2026-09-09
> 当前状态:费用入池 P0 与对账结算 P1 已完成测试环境部署及真实 HTTP 全链验收;最终报告为 `baiyue-firstleg/reports/admin-test-env-acceptance-20260909103401.json`,1518/1518 通过。领导页面人工截图仍按独立验收规则执行
> 盘点范围:入库计费现状、平台后台财务原型、Admin/Client/Firstleg 当前实现
> 结论口径:本文区分“代码已实现”“原型展示”和“建议范围”;原型功能不自动成为开发范围。
## 费用来源扩展确认(2026-09-02)
- Finance 继续保持独立服务和独立数据库;业务服务只生产费用事实,不能直接写财务单据或余额。
- Firstleg 入库费用继续按客户和入仓码进入 Finance;柜级公共费用必须先按柜内真实客户与业务订单原子分摊,再逐客户进入应收应付。入仓码是可选引用:存在时必须校验真实归属,不存在时保留订单/业务单号,禁止伪造入仓码。
- Lastleg 的海外入仓、海外采购、本土卡车、本土散板和海外仓服务费使用统一版本化来源。审核通过、调整和作废同事务写海外 Outbox,通过 Event Bridge 向国内 Finance 投递完整不可变快照;Finance 不跨海外数据库回查。
- Finance 以 `sourceSystem + sourceType + sourceFeeId + sourceVersion` 唯一入池;重复事件幂等,同版本不同哈希拒绝,已进入有效账单或结算单的来源禁止替换/作废。
- 海外仓服务费只强制客户、海外仓和业务编号;入仓记录/入仓码按真实业务选填,月租、仓租等无入仓码费用仍可入池。
当前实现包含柜级分摊 API/Admin 录入、海外费用来源 API、跨区事件、Finance 通用消费入口及数据库脚本,并已完成测试环境数据库和真实 HTTP 验收。页面人工截图仍按独立验收规则执行。
## 历史测试环境部署状态(2026-08-12,已解除)
当时的 Finance 全链路测试环境实跑报告为 `baiyue-firstleg/reports/finance-full-acceptance-20260812.json`:共 430 项,411 项通过,19 项失败,当时结论为 `DEPLOYMENT_BLOCKED`。这些阻断已在后续版本解除,当前结论以 P0/P1 闭环文档和 2026-09-09 最终报告为准。
当前主要部署阻断:
- Gateway 健康,但 `/finance-service/v3/api-docs` 返回 HTTP 503,测试环境 Finance 服务不可用。
- `baiyue_finance` 当前仅部署旧 F0 schema;`fin_bill`、`fin_fee_source` 等存量表无业务数据,G3/G4 新表未部署。因此对账、应收应付、凭证及结算写链无法完成真实 HTTP 验收。
- 本地脚本和模块契约测试通过只证明验收程序契约成立,不代表测试环境 Finance 服务或数据库迁移已经部署成功。
报告生成后,产品进一步确认现有 ACTIVE 往来单位均可作为应付结算候选,不要求 `SUPPLIER` 类型。曾为诊断临时新增的 `FIN-FULL-SUP-20260812` 及其类型映射已从测试库完整删除;全量脚本和 Admin 页面均已改为复用现有 ACTIVE 往来单位。原报告中的“未找到 ACTIVE SUPPLIER”仅反映当时脚本的旧过滤条件,不能倒推为测试环境已通过。当前仍需完成墨家测量实重同步修复、Finance 服务部署和 G3/G4 schema 迁移,再重跑同一三模块链路形成新报告。
产品/业务逐项确认请使用:[财务管理产品确认表](../财务管理产品确认表.md)。
产品回传后的差异和剩余门禁见:[财务管理产品确认版差异与剩余待确认](../财务管理产品确认版差异与剩余待确认.md)。
技术边界已确认:[财务服务边界设计](../财务服务边界设计.md)。Finance 采用独立服务和独立数据库,Firstleg 仅提供业务费用来源。
开发前总控门禁与 F0/F1 任务清单:[财务开工门禁与F0-F1任务清单](../财务开工门禁与F0-F1任务清单.md)。
订单与客户领导验收唯一范围入口:[财务核心五页产品与接口验收契约](../财务核心五页产品与接口验收契约.md)。
订单与客户 11 个 P0 操作、状态机与验收用例:[财务核心 P0 操作契约与验收用例](../财务核心P0操作契约与验收用例.md)。
订单与客户实现与 Admin 接入证据(不反向修改目标契约):[财务核心 P0 实现证据矩阵](../财务核心P0实现证据矩阵.md)。
文档优先级:五页验收契约和本轮产品确认 > 五页目标 OpenAPI > 既有人工 F1 契约/门禁 > 领域模型、历史全量规划和迁移文档。旧文档用于追溯,不得据此把钱包、充值、发票、费用分析或利润表重新纳入订单与客户。
旧文档降级规则:
| 文档/章节 | 当前用途 | 订单与客户实施约束 |
|---|---|---|
| 本文第六节起的“历史全量规划” | 保存早期盘点和演进背景 | 与五页契约冲突时全部失效,不作为菜单、路由、字段或接口依据 |
| `财务领域模型与跨服务契约.md` | 历史合并稿 | 已被数据字典和跨服务契约替代 |
| `财务服务边界设计.md`、`财务领域模型与数据字典.md` | 服务边界和长期模型参考 | 其中钱包、充值、发票、费用分析、利润模型不属于订单与客户 |
| `财务历史迁移与上线验收方案.md`、`财务F0实施任务拆分.md` | 历史迁移、底座任务追溯 | 不得覆盖五页范围和当前实现状态 |
详细设计材料:
- [海外仓费用统一接入财务评审方案](../海外仓费用统一接入财务评审方案.md)
- [海外仓费用统一接入阶段0技术契约](../海外仓费用统一接入阶段0技术契约.md)
- [财务业务操作流程图](../财务全链路流程图.md)
- [财务业务全流程总览图(PNG)](../财务业务全流程总览图.png)
- [财务来源接入现状](../财务来源接入现状.md)
- [财务领域模型与数据字典](../财务领域模型与数据字典.md)
- [Firstleg-Finance跨服务契约](../Firstleg-Finance跨服务契约.md)
- [F1 人工账单、收款、成本接口契约](../F1人工账单收款成本接口契约.md)
- [F1 人工财务契约审查与门禁](../F1人工财务契约审查与门禁.md)
- [财务核心五页产品与接口验收契约](../财务核心五页产品与接口验收契约.md)
- [财务核心五页 OpenAPI](../openapi/finance-core-five-pages-v1.yaml)
- [财务核心 P0 操作契约与验收用例](../财务核心P0操作契约与验收用例.md)
- [财务核心 P0 实现证据矩阵](../财务核心P0实现证据矩阵.md)
- [财务历史迁移与上线验收方案](../财务历史迁移与上线验收方案.md)
- [财务F0实施任务拆分](../财务F0实施任务拆分.md)
历史合并稿:[财务领域模型与跨服务契约](../财务领域模型与跨服务契约.md) 已由“领域模型与数据字典”和“Firstleg-Finance 跨服务契约”两份文档替代,不作为后续实施依据。
## 一、结论
当前首期采用人工简化方案:平台财务登记收付款并上传凭证;客户可查询并确认本人已出账对账单。首期不做银行自动对账、自动核销任务、复杂审批、客户钱包、发票、供应商在线结算、汇率、月结或总账。
当前已经实现业务计费闭环,并已落地 Finance 独立服务/数据库、人工账单/收款/成本基础接口、平台与客户权限种子、Admin 财务页面和 Client 只读账单页面。当前不是“整体未开发”,而是已进入专项修复和契约收敛阶段。
已具备的基础链路:
```text
测量/称重
-> 测量审核
-> 计费规则匹配
-> 费用试算与快照
-> 发布对客费用
-> 客户查看并确认已出账对账单
-> 完成入库
```
当前 F1 已具备的实现链路:
```text
平台财务创建草稿账单
-> 出账冻结
-> 人工登记收款
-> 一笔收款分配多张账单
-> 部分收款/收清状态更新
-> 客户只读查询
```
此前基础链路已完成 Firstleg 真实柜次体积快照、客户归属、成本凭证校验、revision、双权限上传、费用来源事件/Relay/快照、Finance `fin_fee_source` 消费写入和完整幂等。在此基础上,固定五页所需的 11 个目标 operation、Admin 页面动作与 IAM 权限目录现已闭环,G1-G4 本地门禁均为 `PASS`;最终直接证据包括 Finance 聚合 82/82、G3 16/16、G4 18/18、收款及 AR 同步 12/12、IAM 168/168、Admin 财务专项 60/60、Admin 全量 654/654 及 Admin 构建通过。真实 MySQL 执行、测试环境 HTTP 冒烟和领导页面验收仍需单独完成,未经当前对话明确授权不触发 Jenkins。
订单与客户范围已重新冻结为原型 5 页:客户账户、客户应收应付、客户对账单、结算单应收、结算单应付。费用分析、利润表、发票和钱包不做,也不保留菜单、路由或假按钮。客户账户改为账单、收款和应收应付来源派生的财务往来总览,不做充值/预收。
## 二、事实来源与边界
本次按以下资料核对:
1. 入库测量与计费需求文档明确入库测量与计费只做头程计费,不自动形成应收、应付、对账单、收付款、核销、发票、利润或总账。
2. 平台后台原型提供财务管理全量参考,但其中数据和交互主要由单页 HTML 内的静态数据及前端脚本驱动。
3. 当前代码用于证明“已经实现什么”,不反向扩大产品范围。
主要依据:
- `docs/入库测量与计费/入库测量与计费计费财务需求确认表.md`
- `docs/入库测量与计费/入库测量与计费V2需求确认清单.md`
- `docs/入库测量与计费/入库测量与计费需求优化版-v2-测量计费入库主流程.md`
- `docs/悦/货代SAAS平台后台/货代SaaS平台原型.html`
- `apps/admin-web/src/modules/inbounds/`
- `apps/admin-web/src/modules/fee-items/`
- `apps/admin-web/src/prototype/modules/finance/`
- `apps/client-web/src/modules/first-leg/`
- `apps/client-web/src/modules/finance/`
- `baiyue-firstleg/firstleg/`
## 三、当前已经具备什么
### 3.1 可作为财务上游的业务数据
| 能力 | 当前状态 | 可复用价值 | 不能代表什么 |
|---|---|---|---|
| 实测重量、体积、计费量 | 已实现 | 作为费用计算依据和业务快照 | 不是财务凭证 |
| 客户计费规则、船司价格 | 已实现 | 产生确定的对客头程价格 | 船司价格不等于供应商应付 |
| 费用试算、确认、发布 | 已实现 | 形成版本化对客费用快照 | 不等于应收单或账单 |
| 费用调整 | 已实现 | 已发布费用调整生成新版本并留原因 | 尚未定义已出账或已核销后的调整方式 |
| 客户侧费用与账单查看 | 已实现 | 客户能看到入库及已发布费用结果,并在线确认本人已出账且待确认的对账单 | 客户不能修改金额、在线提出争议或登记收款/核销 |
| 费用项目主数据 | 已实现 | 支持费用编码、分类、国内/国际、提货/仓库应收应付属性 | 费用项目属性不自动生成财务记录 |
| 入库费用明细 | 后端已实现 | 支持人工新增、编辑、删除、审核、自动发布的入库运费明细 | 尚无跨入库单财务台账和结算生命周期 |
| 权限与审计基础 | 部分具备 | 费用明细查看、编辑、删除、审核已有权限和业务审计 | 财务制单、复核、收款、核销、反核销权限尚未定义 |
### 3.2 当前费用明细的真实边界
Firstleg 已有 `fl_inbound_fee_detail`,包含:
- 入库单、费用项目、方向、业务发生日、币种、单价、金额;
- 重量、体积、计费量等业务快照;
- 审核状态、审核人、驳回原因;
- 发布状态、发布时间;审核通过后自动发布并成为结算候选;
- 自动计费来源的费用单号和版本。
但当前仍存在以下断点:
- 自动发布链路只生成 `RECEIVABLE` 对客运费。
- 人工 `PAYABLE` 明细使用 Warehouse `supplierId/supplierName` 快照;费用项目 `supplierCategory` 可空,空表示任意启用供应商,非空严格匹配。
- 人工明细采用编辑、提交、审核、调整、作废闭环;审核通过后自动发布,不再存在“是否结算”开关。
- 已发布应收明细只能按单个入库单查询,未形成按客户、币种、账期聚合的财务台账。
- 没有冻结、出账、核销后的费用变更规则,无法保证历史账单金额稳定。
## 四、原型中有什么
平台后台原型的财务菜单包含以下能力:
| 原型模块 | 原型展示的主要能力 | 当前代码状态 | 是否能直接纳入首期 |
|---|---|---|---|
| 客户账户 | 原型为余额、冻结、可用余额和充值流水 | 未实现 | 订单与客户保留汇总/详情/流水结构,但改为未收、待出账、本期已收等派生指标;删除充值/钱包能力 |
| 客户应收应付 | 费用明细、编辑审核、按截止时间或勾选生成账单 | 已接入真实费用来源和编辑审核闭环 | 作为应收应付费用池 |
| 客户对账单 | 账期、汇率、应收、已收、结清、明细和支付历史 | 未实现 | 可作为应收闭环核心,但汇率和开票先暂缓 |
| 结算单应收 | 应收、已收、余额、到期日、审批、部分收款 | 未实现 | 可合并进账单/应收单,避免首期重复建模 |
| 结算单应付 | 供应商应付、已付、余额、审批、部分付款、利润 | 未实现;上游成本来源不完整 | 订单与客户纳入,但删除利润字段/按钮;必须先补真实供应商应付来源和付款凭证链路 |
| 费用分析 | 内外部费用对比、趋势和明细 | 未实现 | 订单与客户明确不做,不进菜单/路由 |
| 利润表 | 按客户、货柜、单票、月份统计收入、成本、利润率 | 未实现 | 订单与客户明确不做,不进菜单/路由 |
原型还出现了发票抬头、开票日期、汇率、支付方式、收付款凭证号等字段。它们只说明未来可能需要,不代表当前产品已经确认税务、外币折算、资金或发票边界。
当前 Admin 已有正式财务路由、账单详情/草稿修改/出账/调整/作废、人工收款和成本页面及真实凭证上传调用,Client 已有正式只读账单页面。后端已改为根据 `containerId` 调 Firstleg 体积快照并完成成本凭证校验,但 Admin 仍强制人工填写并提交柜内订单体积,且未接客户账期和 revision,因此前端创建闭环尚未与最终契约对齐。
## 五、当前修复中缺口
| 序号 | 断点 | 直接影响 |
|---|---|---|
| 1 | 五页读接口、平台/客户固定 DTO 和追踪响应已实现 | Finance 35/35 BUILD SUCCESS;本轮使用现有 Surefire 报告核对,不重新执行 Maven |
| 2 | 收款和成本均已校验凭证,但 `fileClient == null` 时仍 fail-open | File 客户端缺失时可能绕过凭证校验 |
| 3 | 后端已使用 Firstleg 真实体积快照,Admin 仍要求人工填写并提交体积 | 页面与最终请求契约不一致,产生无效输入和误导 |
| 4 | 幂等已有 SHA-256 与同参重放,但未覆盖完整规范化请求,缺 PROCESSING 恢复测试 | 仍可能误判同参或无法恢复中间态 |
| 5 | 客户账单已过滤可见状态,收款列表仍暴露平台字段且未按可见账单过滤 | 客户只读边界仍不完整 |
| 6 | Admin 已接账单动作,但未接客户账期、revision,整柜仍人工填体积 | 平台财务页面仍非完整闭环 |
| 7 | 业务错误码仍以通用错误和中文消息为主 | 前端无法稳定区分版本、幂等、凭证和归属错误 |
| 8 | revision 后端查询已落地,Admin 尚未接展示 | 调整历史仍不能在产品页面核对 |
## 六、全量财务规划与交付顺序
### 6.1 历史全量规划(不作为订单与客户范围)
以下内容只保留为历史分析。若与《财务核心五页产品与接口验收契约》冲突,以五页契约为准。
| 目标域 | 业务结果 | 主要来源 | 不能提前假定的口径 |
|---|---|---|---|
| 客户账户 | 客户财务往来派生汇总、详情和流水 | 账单、收款和应收应付来源 | 订单与客户不建设钱包、充值、预收或自动扣款 |
| 客户应收 | 客户欠款、到期、逾期、结清 | 已发布对客费用、补差/冲销 | 收入确认节点和账期规则 |
| 客户应付 | 客户代垫或返还类应付款(如确有业务) | 业务费用或人工单据 | 产品是否真的存在“平台向客户付款”的场景 |
| 客户对账单 | 期间内费用汇总、明细、平台出账和客户确认 | 应收/应付费用池 | 一张账单是否允许混合方向、混合币种 |
| 结算单应收 | 可审批、可收款、可核销的应收结算单 | 已确认客户账单 | 与客户对账单是一对一还是一对多 |
| 结算单应付 | 供应商成本、付款、余额和结清 | 供应商费用、运力/仓储/报关成本 | 成本确认、供应商账期、审批和付款方式 |
| 收付款与核销 | 到账/付款凭证,部分结算、反核销 | 银行流水或人工登记 | 是否首期接银行流水,是否允许一笔多单核销 |
| 发票 | 开票申请、开具、红冲、作废和关联 | 已确认应收/收款 | 税率、含税/未税、开票主体、外部平台 |
| 费用分析 | 历史规划,订单与客户不做 | 应收应付台账 | 不进入订单与客户菜单、路由和验收 |
| 利润 | 客户/单票/柜次/月度收入、成本、利润率 | 应收收入 + 应付成本 + 分摊 | 汇率、成本分摊、收入成本确认时间 |
### 6.2 分阶段交付顺序
全量目标建议拆成五个可验收阶段:
| 阶段 | 交付范围 | 关键闭环 | 前置依赖 |
|---|---|---|---|
| F0 财务底座 | 独立 Finance 服务/数据库、财务主体、客户/供应商往来单位、币种、费用科目、期间、权限、审计、幂等、金额精度 | 所有后续对象使用同一基础口径 | 服务边界已技术确认;产品确认主体、币种、权限和编码 |
| F1 应收与客户对账 | 应收费用池、平台出账、客户确认、结算单应收、收款登记、核销、反核销 | 费用 → 账单 → 客户确认 → 应收 → 收款 → 结清 | 当前已发布对客费用来源 |
| F2 应付与供应商结算 | 成本费用池、供应商账单、结算单应付、付款登记、付款核销、应付调整 | 成本 → 供应商账单 → 应付 → 付款 → 结清 | 供应商主数据和真实成本来源 |
| F3 客户账户与发票 | 订单与客户只做派生客户账户总览;发票暂缓 | 账户只读聚合,不维护资金余额 | 发票不属于订单与客户 |
| F4 分析与利润 | 订单与客户不做 | 不建设菜单、路由或假入口 | 后续重新立项 |
阶段之间可以并行做页面原型和契约设计,但生产数据链路必须按 F0 → F1/F2 → F3 → F4 验收。F4 不能用原型静态数字先行替代真实台账。
### 6.3 F1 最小财务闭环
F1 先处理当前已经有可靠来源的对客头程费用:
```text
已审核并发布的应收费用明细
-> 进入待对账费用池
-> 按客户 + 币种 + 账期生成对账单
-> 内部复核
-> 客户在线确认(异议仍线下反馈)
-> 平台财务出账后形成应收
-> 登记实际收款
-> 将收款核销到应收
-> 全额核销后结清
-> 错误时按权限反核销并留审计
```
F1 建议页面:
1. 应收费用池:查询、编辑、提交、审核、调整、作废;审核通过自动进入结算候选。
2. 客户对账单:生成、明细、内部复核、发送、关闭;平台财务可重开或调整。
3. 应收与收款:应收余额、到期日、收款登记、附件/凭证号、部分核销。
4. 核销记录:每笔收款对应哪些应收、核销金额、剩余余额、反核销历史。
5. 客户侧账单:查看明细、收款与未结余额,并在线确认本人已出账账单;不做在线争议。
以下历史排除清单已被 2026-08-11 的五页范围取代。结算单应付现在属于订单与客户;其余未确认能力继续排除:
- 供应商在线确认和自动付款(应付结算单与人工付款属于订单与客户);
- 客户预充值、余额冻结和自动扣款;
- 发票申请、开票和税务接口;
- 多币种折算与汇兑损益;
- 利润表、利润率和总账;
- 银行流水自动认领;
- 复杂费用分摊和会计凭证。
### 6.4 全量阶段的范围门禁
| 范围 | 开工门禁 |
|---|---|
| 客户账户 | 已确认只做派生财务往来总览;禁止充值、冻结/解冻、退款、自动扣款和可写余额 |
| 客户应收应付 | 明确客户作为付款方还是收款方;没有真实业务场景的方向不建菜单和数据 |
| 供应商应付 | 必须有供应商主数据、成本来源凭证、审批人、付款方式和付款责任主体 |
| 收付款核销 | 明确人工登记与银行流水的边界;收款、付款、核销、反核销分开授权 |
| 发票 | 明确开票主体、税率、含税/未税、红冲/作废和外部开票平台;未确认前只保留接口扩展位 |
| 费用分析/利润 | 先冻结汇率、收入成本确认日、成本分摊和跨币种折算;报表必须能钻取到原始费用和结算单 |
## 七、已确认的产品结论(历史问题关闭结果)
下表原为产品问题清单,现按本轮确认结果保留。不得再把这些条目解释为待产品确认;实现仍受真实费用来源链路和专项技术门禁约束。
| 编号 | 待确认问题 | 建议默认值 |
|---|---|---|
| F1 | 订单与客户领导验收范围 | 固定为客户账户、客户应收应付、客户对账单、结算单应收、结算单应付;费用分析和利润表不做 |
| F2 | 账单生成维度 | 客户 + 币种 + 账期;不同币种不合并 |
| F3 | 哪些费用可以进入账单 | `APPROVED + PUBLISHED + AVAILABLE + CNY + amount>0` 且未出账;无人工结算开关 |
| F4 | 当前已发布头程费用是否自动进入待对账池 | 是,但仍由财务选择并生成账单 |
| F5 | 账单生成后上游费用能否直接调整 | 不能;应走补差单/冲销单并保留原账单 |
| F6 | 客户是否需要在线确认和提出争议 | 客户在线确认本人已出账对账单;确认状态独立于主状态,在线争议暂不做 |
| F7 | 是否需要内部复核 | 建议制单与复核权限分离,首期允许同人需业务明确 |
| F8 | 收付款是人工登记还是接银行流水 | F1/F2 先人工登记,F3 再接银行流水;必须保存到账日/付款日、方式、凭证号和附件 |
| F9 | 一笔收款能否核销多张应收,一张应收能否被多次收款 | 两者都允许,禁止累计核销超过余额 |
| F10 | 反核销和作废权限 | 独立高风险权限,必须填写原因并完整审计 |
| F11 | 到期日如何计算 | 由客户结算条款或账单确认日 + 账期天数计算 |
| F12 | 历史已发布费用如何迁移 | 仅迁移满足入池条件且尚未形成线下已结算事实的费用 |
## 八、建议状态模型
状态应按对象拆分,避免把费用、账单和资金状态混为一个字段。
### 8.1 费用明细
```text
DRAFT -> PENDING -> APPROVED -> PUBLISHED -> BILLED
-> REJECTED
PUBLISHED/BILLED -> ADJUSTED(通过补差或冲销,不覆盖原记录)
```
### 8.2 对账单
```text
DRAFT -> REVIEWED -> SENT -> CONFIRMED -> CLOSED
-> DISPUTED -> DRAFT/VOIDED
```
### 8.3 应收与核销
```text
应收:OPEN -> PARTIALLY_SETTLED -> SETTLED
-> OVERDUE
收款:DRAFT -> CONFIRMED -> PARTIALLY_ALLOCATED -> FULLY_ALLOCATED
核销:ACTIVE -> REVERSED
```
“收款已登记”与“应收已核销”必须分开。只有核销完成后,对应应收余额才减少;反核销恢复余额,但不得删除原记录。
## 九、关键数据与约束建议
首期至少需要以下独立对象,不能只在现有费用明细表上继续追加字段:
| 对象 | 核心职责 |
|---|---|
| 财务费用来源 | 引用不可变的业务费用版本,保存来源服务、来源单据、来源版本和来源幂等键 |
| 对账单 | 客户、币种、账期、状态、版本、金额合计和确认信息 |
| 对账单明细 | 关联费用来源并保存出账时快照;一条有效费用只能进入一张有效账单 |
| 应收单 | 应收金额、已核销金额、余额、到期日和状态 |
| 收款单 | 到账金额、币种、日期、方式、凭证号、附件和登记/确认人 |
| 核销记录 | 收款单、应收单、核销金额、操作人、时间和幂等键 |
| 反核销记录 | 原核销记录、原因、审批/操作人和恢复金额 |
| 财务操作日志 | 对账、确认、争议、收款、核销、反核销和作废的完整历史 |
必须具备的约束:
- 金额统一使用定点小数,币种使用 ISO 三位码;不同币种首期禁止合并和直接核销。
- 长整型 ID 按字符串跨前端传输。
- 所有写操作带幂等键和乐观锁版本。
- 同一费用来源版本只能进入一个未作废的账单明细。
- 核销累计金额不得超过收款可用余额或应收未结余额。
- 出账、核销后禁止物理删除;调整、作废和反核销必须保留原记录。
- 客户隔离由服务端登录上下文保证;平台员工操作目标客户时必须显式选择客户并校验权限。
- 客户不可看到供应商成本、内部备注、审核意见和平台凭证附件。
## 十、原型需要修正或裁剪的地方
后续做正式页面时,不建议直接照搬原型:
1. “客户应收应付”把客户应收和供应商应付混在同一概念下,应按交易对手和职责拆分。
2. “客户对账单”和“结算单应收”字段大量重复,首期应定义清晰的一对一或一对多关系,避免两套金额状态并存。
3. 原型中的“支付历史”在应收场景应统一使用“收款/核销记录”,避免收付款术语混用。
4. 原型允许直接登记部分收付款,但没有展示确认、撤销、反核销、超额校验和并发冲突。
5. 客户账户充值与应收结算不是同一个闭环,不能用余额字段代替收款和核销台账。
6. 利润表直接展示结果,但没有收入确认、成本来源、外币折算和分摊规则,当前结果不可审计。
7. 所有正式业务表格的“操作”列应放在第一列;原型部分旧页面需要按仓库统一规则调整。
## 十一、完成标准
只有同时满足以下条件,才可以称为“客户应收财务闭环”:
- 每笔应收都能追溯到已审核、已发布且不可变的费用来源版本;
- 能生成、复核、发送并确认客户对账单;
- 能形成有到期日和余额的应收;
- 支持一次或多次收款及多对多核销;
- 支持部分核销、全额结清、反核销和作废;
- 所有金额变化均可审计,重复提交和并发操作不会多记账;
- Admin 与 Client 对同一账单、应收余额和状态的展示一致;
- 越权、跨客户、不同币种、超额核销、已出账费用调整等异常路径有服务端硬校验;
- 使用真实 API 完成至少一条“费用 -> 对账 -> 应收 -> 收款 -> 核销 -> 结清”回归,并验证反核销恢复余额。
## 十二、下一步文档工作
在写代码前建议依次完成:
1. 由产品/业务填写 F1-F12,冻结首期范围。
2. 形成《客户应收闭环需求确认表》,明确页面、角色、状态和异常处理。
3. 使用《财务管理产品确认表》完成 S1-S8、F0-F4 的产品确认。
4. 服务边界、领域模型、跨服务契约及 F0/F1 基础实现已经形成;当前按《F1人工财务契约审查与门禁》完成专项修复和测试放行,不再等待产品填写 XLSX 或重复讨论是否拆服务。
5. 形成《客户应收接口与权限契约》,包括错误码、幂等、数据范围和审计事件。
6. 形成《历史费用迁移与上线方案》,避免已有线下结算数据被重复出账。
@@ -84,3 +84,11 @@ P1 没有发现 Finance 单据状态机或金额处理缺陷。发现并修正
- 自动费用造数只选择已配置内部编号且被 ACTIVE 价格簿覆盖的 FBA 仓;测试环境 `ABE3` 已通过正式仓库接口补齐内部编号。 - 自动费用造数只选择已配置内部编号且被 ACTIVE 价格簿覆盖的 FBA 仓;测试环境 `ABE3` 已通过正式仓库接口补齐内部编号。
这些修正只增强验收数据和证据,不绕过生产权限、状态机、幂等、服务边界或数据库约束。 这些修正只增强验收数据和证据,不绕过生产权限、状态机、幂等、服务边界或数据库约束。
## 客户资金账户
本节承接原财务 README 的已确认资金账户规则,覆盖历史“五页范围”中排除钱包或充值的旧结论;与对账单派生的往来账户汇总分别维护。
首批固定为 CNY。平台设置授信时必须同时设置晚于今天的到期日,最远日期不设上限;到期日当天仍有效。有效期内消费先扣实际可用资金,不足部分累计为已用授信;次日授信失效时,已用授信自动并入实际余额并允许形成负数,负数实际余额会阻止客户提交新订单。充值先归还已用授信或负余额,剩余金额才形成正数资金。
客户选择固定或自定义金额,查看后台配置的平台统一静态收款码,付款后上传 JPG/PNG 截图形成待审核申请。平台在客户账户明细顶部审核或驳回,也可手工充值、扣款和设置客户限时授信;每次变动写不可变账户流水。新账户默认授信为 `0.00`,只有平台明确设置额度与有效期后才启用。Finance 还提供仅服务令牌可访问、按业务类型和业务单号幂等的冻结、结算和释放接口,供一件代发等模块接入。审核、账户更新、流水、冻结记录和幂等结果在 Finance 单事务内完成,文件内容仍归 File 服务。接口契约见 [客户资金账户 OpenAPI](openapi/finance-wallet-v1.yaml)。
@@ -61,6 +61,8 @@ USD 费用必须命中业务日期所在月份的有效 USD/CNY 汇率。入池
| 调整 | 新版本替换旧版本;Finance 仍按来源费用号和版本幂等消费 | | 调整 | 新版本替换旧版本;Finance 仍按来源费用号和版本幂等消费 |
| 作废 | 仅未冻结来源允许作废;已结算或已出单来源必须走财务调整流程 | | 作废 | 仅未冻结来源允许作废;已结算或已出单来源必须走财务调整流程 |
客户应收应付默认按 `sourceSystem + sourceType + sourceFeeId` 展示同一费用的最新版本,计数、分页和金额均采用该口径;明确筛选“已被调整替代”时才单独查询旧版本。同名费用项目但来源费用号不同的记录不得合并。业务调整重新审核发布后更新该费用的当前展示,旧快照保留用于账单追溯,不能覆盖已出单或已结清事实。费用详情的操作记录串联同客户、同收付方向的历次版本及财务审计,记录版本、调整前后金额;同步记录明确显示系统同步时间,不冒充原业务操作者或审批时间。历史版本详情只展示当时及此前记录。
资金账户事件和费用来源事件可能先后到达。Finance 会在任一事件到达时尝试按客户、业务类型、业务单号和金额互相绑定,保证同一业务不会既自动扣款又再次生成对账单。 资金账户事件和费用来源事件可能先后到达。Finance 会在任一事件到达时尝试按客户、业务类型、业务单号和金额互相绑定,保证同一业务不会既自动扣款又再次生成对账单。
## 6. P0 验收标准 ## 6. P0 验收标准