Compare commits

384 Commits
Author SHA1 Message Date
ouyangxq 8043ceec18 优化 2026-11-06 10:29:23 +08:00
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
ouyangxq 64eeae4b82 优化 2026-10-21 08:03:08 +08:00
ouyangxq 7be5900f0c 优化 2026-10-21 08:00:56 +08:00
ouyangxq 1350ca6508 优化 2026-10-21 07:53:36 +08:00
ouyangxq 7fcf7c2fce 优化 2026-10-21 07:37:26 +08:00
ouyangxq 626f9b19c3 1 2026-10-21 07:10:19 +08:00
ouyangxq 5687eda629 优化 2026-10-20 23:49:58 +08:00
ouyangxq f7599dbcb9 优化 2026-10-20 23:35:46 +08:00
ouyangxq f2fb9ff669 docs: record simulation dialog width TEST release 2026-10-20 18:28:40 +08:00
ouyangxq 9bc3079fc5 docs: record scoped Admin display fixes TEST release 2026-10-20 17:19:26 +08:00
ouyangxq 986450024d 优化 2026-10-20 16:45:06 +08:00
ouyangxq d97aa8d086 优化 2026-10-20 15:48:19 +08:00
ouyangxq 5a198f87a4 优化 2026-10-20 14:25:05 +08:00
ouyangxq 29ad61c2a0 优化优化 2026-10-20 14:24:45 +08:00
ouyangxq e96d256b29 docs(agents): clarify offline index contract exemption scope
静态索引合同免排队仅限直接扫描文件的只读脚本;node --test 形式的合同测试与 pnpm test/typecheck/build、mvn 仍必须经 local-check.ps1。
2026-10-20 13:41:28 +08:00
ouyangxq 6b55816c12 docs(release): verify truck self-delivery default on TEST 2026-10-20 10:58:16 +08:00
ouyangxq a4404c2168 docs(first-leg): specify truck self-delivery as order default 2026-10-20 10:57:07 +08:00
ouyangxq c33ed689d7 优化 2026-10-20 10:35:59 +08:00
ouyangxq 2f8d59c871 docs(admin): include referenced measurement dialog sample 2026-10-20 10:34:00 +08:00
ouyangxq 298b6b5ac4 docs(admin): record dialog rollout and first twenty screenshot paths 2026-10-20 10:32:47 +08:00
ouyangxq ca3f0c01ef docs(fees): record default price release and expanded verification 2026-10-19 21:24:43 +08:00
ouyangxq 94bbdea386 优化 2026-10-19 17:56:33 +08:00
ouyangxq c116bcfe8a docs(release): verify first-leg optional courier tracking over HTTP 2026-10-19 17:54:12 +08:00
ouyangxq 6426c020a1 docs(first-leg): allow optional courier tracking on express drafts 2026-10-19 17:46:01 +08:00
ouyangxq 7ec2f45a10 docs(release): verify unified Admin and Client transport forms 2026-10-19 15:53:52 +08:00
ouyangxq c6a3b9ee0e docs(transport): define identical Admin and Client demand form contract 2026-10-19 15:51:05 +08:00
ouyangxq 78b20e53a5 docs(release): record TEST truck and looseboard verification 2026-10-19 15:29:59 +08:00
ouyangxq afd42e4e6d docs(looseboard): define split route contacts and required local times 2026-10-19 15:11:48 +08:00
ouyangxq cf8cb6dc48 docs(trucking): define standalone truck demand contract 2026-10-19 14:38:48 +08:00
ouyangxq d0fac0118f 优化 2026-10-19 10:40:53 +08:00
ouyangxq aa904e4a2d docs(selfop): define bounded outbound recovery and failure diagnostics 2026-10-16 11:05:59 +08:00
ouyangxq c446410cb2 docs(selfop): record backend Excel export deployment and verification 2026-10-15 15:17:05 +08:00
ouyangxq b778b52166 docs(selfop): record turnover rate header sorting and test release 2026-10-15 14:33:32 +08:00
ouyangxq 54d33faaa4 docs: record TEST inventory history rollout and verified turnover 2026-10-15 14:20:01 +08:00
ouyangxq 265e270e72 docs(selfop): freeze historical reconstruction contract and local verification 2026-10-15 13:31:19 +08:00
ouyangxq 29d8997680 docs: record turnover multi-owner export TEST release 2026-10-15 11:20:57 +08:00
ouyangxq fe23b1d7a8 docs(selfop): record zero stock filter release and verification 2026-10-15 10:34:50 +08:00
ouyangxq d5c0a1e1d6 docs(selfop): record volume sorting and ranking release verification 2026-10-14 18:25:30 +08:00
ouyangxq 6f2577c372 优化 2026-10-14 18:13:16 +08:00
ouyangxq 74abdb8b10 docs(selfop): record volume release and verified customer totals 2026-10-14 18:02:29 +08:00
ouyangxq e81f07053a docs(selfop): define volume metrics and record idle planner release 2026-10-14 17:48:54 +08:00
ouyangxq 51ac4756b6 docs(selfop): record master data release and verified synchronization 2026-10-14 17:13:42 +08:00
ouyangxq 6d557e36c6 docs(selfop): define customer and product directory integration 2026-10-14 16:15:41 +08:00
ouyangxq a4199bdc28 docs: record final turnover and transit TEST release 2026-10-14 14:16:18 +08:00
ouyangxq 7164105623 docs(self-operated): include transit stock and simplify ranking explanations 2026-10-14 14:08:54 +08:00
ouyangxq 34c65c8c7c docs(self-operated): align turnover eligibility and explicit zero stock 2026-10-14 14:00:38 +08:00
ouyangxq 62de8d1407 docs(test): record matched analytics and warehouse release verification 2026-10-14 12:54:09 +08:00
ouyangxq 5510638b4d docs(self-operated): align selected ranges and inventory assessment contracts 2026-10-14 12:39:38 +08:00
ouyangxq f6d329cdb0 docs: verify final Admin batch deployment and collection continuity 2026-10-14 11:27:32 +08:00
ouyangxq 52c2c0b54a docs: record October 14 batch deployment and final frontend gate 2026-10-14 11:24:54 +08:00
ouyangxq 8d6db2787b 优化 2026-10-14 11:02:49 +08:00
ouyangxq b768145b22 优化 2026-10-14 00:06:59 +08:00
ouyangxq b472dadd61 优化 2026-10-09 17:36:27 +08:00
ouyangxq d89e8ec16c 优化 2026-10-09 12:40:00 +08:00
ouyangxq 0a4dd606f8 优化 2026-10-09 11:47:22 +08:00
ouyangxq acafab11d6 优化 2026-10-09 11:43:36 +08:00
ouyangxq d91a28e7ee 优化 2026-10-09 11:10:40 +08:00
ouyangxq c521f50a81 docs: record verified TEST recovery and gray release completion 2026-10-09 10:38:30 +08:00
ouyangxq 1ceaf67718 docs: record current TEST releases and export permission smoke 2026-10-08 20:52:52 +08:00
ouyangxq 8832e9d4ed 优化 2026-10-08 19:09:34 +08:00
ouyangxq c0d1e1a0ba 优化 2026-10-08 18:20:03 +08:00
ouyangxq c825c14ac7 优化 2026-10-08 17:08:00 +08:00
ouyangxq 40224c34a1 优化 2026-09-30 17:13:15 +08:00
ouyangxq f9ba0e17c6 优化 2026-09-30 15:16:42 +08:00
ouyangxq 32677551a7 优化 2026-09-30 14:01:55 +08:00
ouyangxq 407abd634c 优化 2026-09-29 19:55:27 +08:00
ouyangxq 606abeb2c6 优化 2026-09-29 18:47:39 +08:00
ouyangxq 16ecfae84d 优化 2026-09-29 18:06:20 +08:00
ouyangxq 19943112c0 优化 2026-09-29 17:55:58 +08:00
admin e579ca2d3a Merge pull request 'Test' (#1) from test into main
Reviewed-on: #1
2026-09-28 16:01:15 +08:00
ouyangxq df6f434550 docs: align firstleg release contracts and add sailing plans 2026-09-28 15:04:36 +08:00
ouyangxq a4c9ca162a 优化 2026-09-24 17:02:32 +08:00
ouyangxq 5b9f6dc3c1 优化 2026-09-24 14:09:45 +08:00
ouyangxq d8be2ccdef 优化 2026-09-24 13:43:53 +08:00
ouyangxq 6116ad61e1 优化 2026-09-24 09:39:55 +08:00
ouyangxq 005c14a960 优化 2026-09-23 18:26:07 +08:00
ouyangxq 37b143cc2e 优化 2026-09-23 17:47:52 +08:00
ouyangxq 824fa5963e 1 2026-09-21 14:31:46 +08:00
ouyangxq 373e03e9a3 优化 2026-09-21 13:22:46 +08:00
ouyangxq ce8d5c7e87 优化 2026-09-21 11:17:08 +08:00
ouyangxq 952ccbcabc 优化 2026-09-21 07:59:51 +08:00
ouyangxq 72f942ffbc 优化 2026-09-20 21:52:09 +08:00
ouyangxq f7cef5fa25 优化 2026-09-20 18:25:16 +08:00
ouyangxq 7249bff432 优化 2026-09-20 15:03:26 +08:00
ouyangxq ec0d6bc0dc 优化 2026-09-20 14:43:29 +08:00
ouyangxq fa73ba7e1a 优化 2026-09-20 14:26:53 +08:00
ouyangxq 87e1a98859 优化 2026-09-20 14:22:09 +08:00
ouyangxq 19e24f6816 优化 2026-09-20 11:23:31 +08:00
ouyangxq 134e4c96ef 优化 2026-09-20 10:06:19 +08:00
ouyangxq baaa00af3d 优化 2026-09-19 17:30:24 +08:00
ouyangxq 800cbfca8d 优化 2026-09-19 17:02:08 +08:00
ouyangxq 68f8aa3ac4 傣 2026-09-18 18:50:45 +08:00
ouyangxq 0d8a3f86ae 优化 2026-09-18 16:55:23 +08:00
ouyangxq 083c567905 优化 2026-09-18 16:48:32 +08:00
ouyangxq cab9b6d8ba 优化 2026-09-18 09:59:10 +08:00
ouyangxq e7ed791a48 优化 2026-09-17 10:57:21 +08:00
ouyangxq e2e1a98348 优化 2026-09-16 19:32:56 +08:00
ouyangxq d5421524cc 优化 2026-09-16 17:49:22 +08:00
ouyangxq 2244067ff5 优化 2026-09-16 15:57:39 +08:00
ouyangxq 94bed4667f 优化 2026-09-16 15:20:58 +08:00
ouyangxq e6385d371b 优化 2026-09-16 12:02:41 +08:00
ouyangxq 81876baa4c 优化 2026-09-16 11:43:00 +08:00
ouyangxq 7486774c74 优化 2026-09-15 20:51:03 +08:00
ouyangxq 5662620e39 优化 2026-09-15 19:34:54 +08:00
ouyangxq 735673e3ff 优化 2026-09-15 18:17:16 +08:00
ouyangxq ab2234c0e4 优化 2026-09-15 16:11:16 +08:00
ouyangxq d4165bc28d 优化 2026-09-15 15:53:00 +08:00
ouyangxq 28e88ad125 优化 2026-09-15 15:27:16 +08:00
ouyangxq e2d574cabb 优化 2026-09-15 15:00:57 +08:00
ouyangxq cf3eff4651 优化 2026-09-15 14:18:25 +08:00
ouyangxq d7623fed46 优化 2026-09-15 13:37:43 +08:00
ouyangxq 58ac3f57e0 优化 2026-09-15 12:35:49 +08:00
ouyangxq 29a07f65ee 优化 2026-09-15 11:54:17 +08:00
ouyangxq 7d9998e31e 优化 2026-09-15 10:37:37 +08:00
ouyangxq 514aea5ca4 优化 2026-09-15 09:58:12 +08:00
ouyangxq 746573d3f6 优化 2026-09-14 20:58:34 +08:00
ouyangxq 320aad0902 优化 2026-09-14 20:21:00 +08:00
ouyangxq 6e5f7c71eb 优化 2026-09-14 20:03:25 +08:00
ouyangxq ee5e83104c 优化 2026-09-14 18:34:32 +08:00
ouyangxq 7229a1e74c 优化 2026-09-14 17:54:18 +08:00
ouyangxq 6ab9c41af5 优化 2026-09-14 17:06:52 +08:00
ouyangxq 11d3ac6625 优化 2026-09-14 15:51:57 +08:00
ouyangxq 0ec468dfe1 优化 2026-09-14 15:33:33 +08:00
ouyangxq 9a8b154b45 优化 2026-09-14 12:00:51 +08:00
ouyangxq 012d6f4e95 优化 2026-09-12 18:34:24 +08:00
ouyangxq 8185ee6a9b 优化 2026-09-11 16:17:19 +08:00
ouyangxq ab23136748 优化 2026-09-11 10:09:25 +08:00
ouyangxq 3ae093c44c 优化 2026-09-10 23:27:47 +08:00
ouyangxq 64811f1e19 优化 2026-09-10 20:27:14 +08:00
ouyangxq 61335b10e6 优化 2026-09-10 19:27:11 +08:00
ouyangxq 8621368313 优化 2026-09-10 17:13:05 +08:00
ouyangxq 6c50c888ec 优化 2026-09-10 14:14:21 +08:00
ouyangxq f414d804b9 优化 2026-09-10 12:18:35 +08:00
ouyangxq c5a1863d70 优化 2026-09-09 23:46:23 +08:00
ouyangxq ede43b5030 优化 2026-09-09 20:53:27 +08:00
ouyangxq f8e9b5d9ed 优化 2026-09-09 17:58:20 +08:00
ouyangxq 635814a7b5 优化 2026-09-09 17:42:11 +08:00
ouyangxq c22d8b4361 优化 2026-09-09 15:26:38 +08:00
ouyangxq c9f6d1b0e8 优化 2026-09-09 14:32:02 +08:00
ouyangxq bf79132fa5 优化 2026-09-09 13:33:30 +08:00
ouyangxq 9554cc5d0c 优化 2026-09-09 12:50:36 +08:00
ouyangxq a18775b261 优化 2026-09-09 10:18:07 +08:00
ouyangxq d3d1ba88db 优化 2026-09-08 18:17:00 +08:00
ouyangxq b86b4be83a 优化 2026-09-08 14:05:30 +08:00
ouyangxq e8c03290cb 优化 2026-09-08 09:41:03 +08:00
ouyangxq e7e761b34d 优化 2026-09-07 15:07:31 +08:00
ouyangxq c9c05cf61b Merge branch 'test' of http://8.163.30.128:10082/admin/docs into test 2026-09-07 13:39:13 +08:00
ouyangxq 1aa01b996d 优化 2026-09-07 13:39:12 +08:00
ouyangxq c4a5778f02 docs: expand inbound hold acceptance 2026-09-07 12:23:02 +08:00
ouyangxq 7d64260209 docs: define inbound hold gate 2026-09-07 11:23:57 +08:00
ouyangxq 7c14f7039c 优化 2026-09-07 10:35:33 +08:00
ouyangxq 7f391dd9e0 优化 2026-09-07 10:02:48 +08:00
ouyangxq e1ad4e6d2f docs: close overseas wallet and pallet acceptance 2026-09-05 23:48:29 +08:00
ouyangxq 27f3cb3afa docs: register overseas wallet and pallet flow 2026-09-05 22:26:37 +08:00
ouyangxq fbad2e57a1 docs(finance): record expanded wallet tests 2026-09-05 16:47:36 +08:00
ouyangxq 6d7f91d129 docs(finance): record final browser acceptance 2026-09-05 12:53:56 +08:00
ouyangxq 7646ab9990 docs(finance): record credit wallet rollout 2026-09-05 12:23:22 +08:00
ouyangxq 08a80e7b44 docs(finance): define credit and wallet hold contract 2026-09-05 11:54:56 +08:00
ouyangxq d6472c48b0 docs(finance): record wallet development acceptance 2026-09-05 09:19:22 +08:00
ouyangxq 015d8f4b13 docs(finance): register wallet recharge workflow 2026-09-05 08:34:40 +08:00
ouyangxq e5609107f3 docs: record browser acceptance fixes 2026-09-04 17:52:41 +08:00
ouyangxq f9f0a9841e docs: record final development flow acceptance 2026-09-04 17:28:15 +08:00
ouyangxq ac969084fb docs: record development acceptance closure 2026-09-04 16:50:07 +08:00
ouyangxq 40492cdae8 docs: organize contracts by business domain 2026-09-04 16:44:08 +08:00
ouyangxq 703f869841 Merge remote-tracking branch 'origin/test' into dev
# Conflicts:
#	独立任务协作登记.md
2026-09-04 16:35:34 +08:00
ouyangxq f7953e8d96 优化 2026-09-03 13:34:59 +08:00
ouyangxq 4479d3342a 优化 2026-09-03 11:18:57 +08:00
ouyangxq 5146cecb4f docs(finance): document bill line inbound code 2026-09-02 20:26:02 +08:00
ouyangxq af99328447 优化 2026-09-02 19:53:17 +08:00
ouyangxq a9c02b268d 优化 2026-09-02 14:45:37 +08:00
ouyangxq 2ab75f6b8e 优化 2026-09-02 14:39:30 +08:00
ouyangxq c1f1d8c601 优化 2026-09-01 20:41:26 +08:00
ouyangxq 09ef136d71 优化 2026-09-01 14:46:40 +08:00
ouyangxq 88e5e60337 优化 2026-09-01 14:27:19 +08:00
ouyangxq 2ca68b419d 优化 2026-08-31 18:55:05 +08:00
ouyangxq e19f829886 优化 2026-08-31 16:44:34 +08:00
ouyangxq 2d4b8befe2 优化 2026-08-28 13:54:35 +08:00
ouyangxq f21d4d1e5f 优化 2026-08-28 10:03:35 +08:00
ouyangxq a332aeef4d 优化 2026-08-28 09:19:21 +08:00
ouyangxq 082ed4c68e 优化 2026-08-27 17:16:35 +08:00
ouyangxq 79f7b3d5b5 优化 2026-08-27 16:42:31 +08:00
ouyangxq 511183b894 优化 2026-08-27 13:50:35 +08:00
ouyangxq 66379d33dc 优化 2026-08-27 11:38:57 +08:00
ouyangxq 981659f298 优化 2026-08-27 11:08:02 +08:00
ouyangxq f8da974c31 优化 2026-08-26 15:58:58 +08:00
ouyangxq de6725605d 优化 2026-08-26 14:56:36 +08:00
ouyangxq 6b59ed6748 优化 2026-08-26 14:49:32 +08:00
ouyangxq b8f1722d97 优化 2026-08-26 14:48:46 +08:00
ouyangxq 9ab095edec 优化 2026-08-26 14:21:20 +08:00
ouyangxq 6477bdb90b 优化 2026-08-26 14:08:45 +08:00
ouyangxq a73def2bbf 优化 2026-08-26 13:58:36 +08:00
ouyangxq 09efa93baf 傣 2026-08-25 20:25:20 +08:00
ouyangxq f9f6d4bae7 优化 2026-08-25 19:56:40 +08:00
ouyangxq 70585aea00 优化 2026-08-25 16:41:06 +08:00
ouyangxq 0904f411c7 优化 2026-08-25 14:48:07 +08:00
ouyangxq 004beefb17 docs: streamline development Jenkins automation 2026-08-25 14:40:19 +08:00
ouyangxq b163ee172c docs: document Jenkins deployment API workflow 2026-08-25 14:29:58 +08:00
ouyangxq b36d9d2b2f 优化 2026-08-25 11:52:28 +08:00
ouyangxq f88495778c 优化 2026-08-25 10:39:45 +08:00
ouyangxq 8a3b7f54d9 优化 2026-08-25 09:52:52 +08:00
ouyangxq 2c66e4699b 优化 2026-08-24 19:28:48 +08:00
ouyangxq bb2171ac28 优化 2026-08-24 19:10:22 +08:00
ouyangxq b50e46ed43 1 2026-08-24 17:48:11 +08:00
ouyangxq 6f5b4006ac 添加pda 2026-08-24 09:22:54 +08:00
ouyangxq 6cb04dd859 优化 2026-08-22 09:56:29 +08:00
ouyangxq e8cb9e1588 1 2026-08-22 09:50:50 +08:00
ouyangxq 984eb641ff 优化 2026-08-21 17:19:51 +08:00
ouyangxq fe42f97dcd 优化 2026-08-21 16:04:21 +08:00
ouyangxq bd7005a97a 1 2026-08-21 09:23:14 +08:00
ouyangxq d66d805bf2 Merge branch 'test' of http://8.163.30.128:10082/admin/docs into dev 2026-08-21 09:21:53 +08:00
ouyangxq b1a2a9e7bf 1 2026-08-21 09:20:52 +08:00
ouyangxq 49465315e2 1 2026-08-21 09:20:26 +08:00
ouyangxq 632f1e6fdd 优化 2026-08-20 20:54:32 +08:00
ouyangxq 9ab55bc7fb 优化 2026-08-20 19:55:24 +08:00
ouyangxq 8013c294e5 Merge branch 'test' of http://8.163.30.128:10082/admin/docs into dev 2026-08-20 19:14:24 +08:00
ouyangxq c9c6d5a0f9 优化 2026-08-20 18:21:06 +08:00
ouyangxq e5f5b2b9bc 优化 2026-08-20 18:02:48 +08:00
ouyangxq eb106ad383 优化 2026-08-20 18:02:22 +08:00
ouyangxq c96e954097 优化 2026-08-20 09:49:34 +08:00
ouyangxq b26249349b 优化 2026-08-20 09:43:35 +08:00
ouyangxq e0721e2525 优化 2026-08-20 09:10:34 +08:00
ouyangxq e505ce3843 优化 2026-08-19 17:08:44 +08:00
ouyangxq 53def198d3 优化 2026-08-19 16:45:47 +08:00
ouyangxq a3b5c19b88 优化 2026-08-19 14:28:55 +08:00
ouyangxq 6f311deef1 优化 2026-08-19 09:44:22 +08:00
ouyangxq b11d787eda 优化 2026-08-19 09:42:09 +08:00
ouyangxq b1cfae2d0f 优化 2026-08-19 09:14:33 +08:00
ouyangxq e52de2d0f6 优化 2026-08-18 17:40:35 +08:00
ouyangxq 8dd39ff20b 优化 2026-08-18 16:39:42 +08:00
ouyangxq 0b24cc5a98 优化 2026-08-18 15:44:01 +08:00
ouyangxq b69e319274 优化 2026-08-18 09:37:03 +08:00
ouyangxq 21ac1c668d 优化 2026-08-18 09:09:31 +08:00
ouyangxq 0d67d176c9 优化 2026-08-17 20:21:48 +08:00
ouyangxq 139eb1e494 优化 2026-08-17 19:51:58 +08:00
ouyangxq 1b0133f1fb 优化 2026-08-17 19:13:22 +08:00
ouyangxq 77e29ef8b4 优化 2026-08-17 18:00:41 +08:00
ouyangxq cdc41bc843 优化 2026-08-17 17:49:06 +08:00
ouyangxq 50d9d81740 优化 2026-08-17 16:17:22 +08:00
ouyangxq b8343d0298 优化 2026-08-17 16:07:23 +08:00
ouyangxq ab511378a8 优化 2026-08-17 15:55:15 +08:00
ouyangxq 2e77d0f1ce 仙剑奇侠传经 2026-08-17 15:41:47 +08:00
ouyangxq b78b493c9e 优化 2026-08-17 14:46:46 +08:00
ouyangxq 873e1be698 优化 2026-08-17 14:28:06 +08:00
ouyangxq c9637a46a6 优化 2026-08-17 13:24:53 +08:00
ouyangxq 8b4c745916 优化 2026-08-17 09:41:10 +08:00
ouyangxq 9d46a66dc5 优化 2026-08-15 11:06:01 +08:00
ouyangxq 2cf36a3b12 优化 2026-08-15 09:47:19 +08:00
ouyangxq 0171c791bd 优化 2026-08-14 19:59:30 +08:00
ouyangxq 2d19c237e8 优化 2026-08-14 18:50:12 +08:00
ouyangxq 1d3a8b5bf2 优化 2026-08-14 17:38:05 +08:00
ouyangxq 57001cec32 优化 2026-08-14 15:04:42 +08:00
ouyangxq 9679ecf0a8 优化 2026-08-14 14:50:42 +08:00
ouyangxq 272dcff57e 优化 2026-08-14 14:27:00 +08:00
ouyangxq a7390ae340 优化 2026-08-14 12:50:40 +08:00
ouyangxq 16b5ac10da 优化 2026-08-14 10:09:48 +08:00
ouyangxq 1fc66ed43e 优化 2026-08-13 20:00:36 +08:00
ouyangxq db3099e4fb 优化 2026-08-13 17:43:03 +08:00
ouyangxq 1a8783ffc4 优化 2026-08-13 14:55:54 +08:00
ouyangxq 9db4ff9880 优化 2026-08-13 14:37:54 +08:00
ouyangxq cec5344e24 优化 2026-08-13 14:03:57 +08:00
ouyangxq 44999e44b0 优化 2026-08-13 12:22:36 +08:00
ouyangxq 4955f44957 优化 2026-08-13 11:57:37 +08:00
ouyangxq 847eaae268 优化 2026-08-13 09:53:00 +08:00
ouyangxq d5a9149913 优化 2026-08-13 09:51:25 +08:00
ouyangxq 6b5e591cf2 优化 2026-08-13 09:50:04 +08:00
ouyangxq 804e7eed87 优化 2026-08-12 20:36:15 +08:00
ouyangxq 108a1149ba 优化 2026-08-12 19:42:14 +08:00
ouyangxq 81656344cd 优化 2026-08-12 19:11:56 +08:00
ouyangxq a485844b47 优化 2026-08-12 18:49:53 +08:00
ouyangxq ed70ebfc52 优化 2026-08-12 18:24:01 +08:00
ouyangxq e73d407d8c 优化 2026-08-12 18:00:20 +08:00
ouyangxq d8a03ea0fe 优化 2026-08-12 17:29:32 +08:00
ouyangxq b6ee07aac7 优化 2026-08-12 16:40:03 +08:00
ouyangxq aeea4a31bf 优化 2026-08-12 16:31:41 +08:00
ouyangxq fb50de295a 优化 2026-08-12 14:08:32 +08:00
ouyangxq 4daee11358 优化 2026-08-12 10:59:44 +08:00
ouyangxq 3bb1ab950d 优化 2026-08-12 09:25:58 +08:00
ouyangxq ca2c455c8c 优化 2026-08-11 20:39:31 +08:00
ouyangxq 7cddf6c101 优化 2026-08-11 19:59:08 +08:00
ouyangxq 5d39ba70c1 优化 2026-08-11 19:35:21 +08:00
ouyangxq 2efcf8c959 优化 2026-08-11 18:48:13 +08:00
ouyangxq 4521cb5218 优化 2026-08-11 18:43:53 +08:00
ouyangxq 60d2f8e097 优化 2026-08-11 18:17:02 +08:00
ouyangxq 767ffe8544 优化 2026-08-11 18:06:30 +08:00
ouyangxq 863f9ca395 优化 2026-08-11 13:55:19 +08:00
ouyangxq a5b49293ab 优化 2026-08-11 11:41:44 +08:00
ouyangxq 953a3b0ed9 优化 2026-08-11 10:46:15 +08:00
ouyangxq 6041a6d976 优化 2026-08-11 10:45:57 +08:00
ouyangxq f5a0c81286 优化 2026-08-11 09:25:45 +08:00
ouyangxq 87a17e6694 优化 2026-08-10 18:40:46 +08:00
ouyangxq d2441bf327 优化 2026-08-10 18:29:04 +08:00
ouyangxq 5e71b17733 优化 2026-08-10 18:12:20 +08:00
ouyangxq 9689522041 优化 2026-08-10 17:48:45 +08:00
ouyangxq 80f71e57f1 优化 2026-08-10 16:24:50 +08:00
ouyangxq ffe8a0900c 优化 2026-08-10 15:36:50 +08:00
ouyangxq 60f1959bba 优化 2026-08-10 12:46:16 +08:00
ouyangxq 3d5452d267 优化 2026-08-10 12:40:50 +08:00
ouyangxq 848153e348 w百分比 2026-08-10 12:24:02 +08:00
ouyangxq c5ff4d4247 优化 2026-08-10 11:30:46 +08:00
ouyangxq 82c3ef8413 优化 2026-08-10 11:29:00 +08:00
ouyangxq 01496f77ae 优化 2026-08-10 09:11:59 +08:00
ouyangxq 4712b21ace 优化 2026-08-08 21:14:43 +08:00
ouyangxq c6655b6101 优化 2026-08-08 12:01:49 +08:00
ouyangxq ab7188954a 优化 2026-08-08 11:05:43 +08:00
ouyangxq ae38099e79 优化 2026-08-07 18:44:01 +08:00
ouyangxq 2859c82c83 优化 2026-08-07 15:19:24 +08:00
ouyangxq 2ac6f39057 优化 2026-08-07 14:46:59 +08:00
ouyangxq 16273a91a8 优化 2026-08-07 10:45:12 +08:00
ouyangxq 914e2c7d2e 优化 2026-08-06 18:34:55 +08:00
ouyangxq edd3a03d8a 1 2026-08-06 11:49:55 +08:00
ouyangxq a153e5d715 1 2026-08-05 18:02:57 +08:00
ouyangxq ee6e633d9f 1 2026-08-05 15:52:51 +08:00
liuyihe a70377c007 二期优化方案 2026-08-05 11:32:21 +08:00
liuyihe ffa3327521 二期优化方案 2026-08-05 11:32:17 +08:00
ouyangxq 3e62cc1263 1 2026-08-05 09:49:02 +08:00
ouyangxq df63049fd1 Merge branch 'test' of http://8.163.30.128:10082/admin/docs into test 2026-08-05 09:46:54 +08:00
ouyangxq 84598f98eb 1 2026-08-05 09:46:34 +08:00
liuyihe a6fb5ea886 二期内容提交 2026-08-04 17:37:58 +08:00
ouyangxq 94ef079891 优化 2026-08-04 15:41:54 +08:00
ouyangxq 794dc0700a Merge branch 'test' of http://8.163.30.128:10082/admin/docs into test 2026-08-04 14:57:53 +08:00
ouyangxq 79d9652402 1 2026-08-04 14:57:50 +08:00
liuyihe 66b1b42032 二期内容提交 2026-08-04 12:23:47 +08:00
liuyihe 4899c95b75 二期优化方案md 2026-08-01 11:30:42 +08:00
liuyihe d51c79301a 1 2026-07-31 15:25:03 +08:00
liuyihe 413a60acb6 1 2026-07-31 15:23:48 +08:00
liuyihe a701bfb237 暂存提交 2026-07-31 14:57:09 +08:00
1540 changed files with 1957100 additions and 14806 deletions
+4
View File
@@ -1,2 +1,6 @@
.DS_Store
**/.DS_Store
.playwright-cli
.superpowers
output
docs
+8
View File
@@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="temurin-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/docs.iml" filepath="$PROJECT_DIR$/.idea/docs.iml" />
</modules>
</component>
</project>
Generated
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
+96
View File
@@ -0,0 +1,96 @@
# AI 工程执行与协作约束
## 读取条件
- 运行、构建、依赖、临时目录、工作树、部署、数据库、跨模块改动或独立任务协作时读取本文件。
- 普通代码定位仍先按根 `AGENTS.md` 的项目和业务路由进入最近的项目/模块指引;本文件不替代业务索引。
## 根目录、临时目录与依赖复用
- 根目录只保留 `apps/` 前端应用、`baiyue-firstleg/` 后端独立仓库、`docs/` 产品与契约文档三类业务事实来源;新增业务源码或服务不得直接放在根目录。
- `.vscode/`、`.impeccable/`、`.superpowers/` 和根 `.codex-temp/` 属于本地工具或缓存,不作为业务入口;根 `.codex-temp/` 不得存放项目副本。
- `output/`、`outputs/`、`dist/`、`target/`、日志和临时文件属于生成物,不纳入索引;空的临时产物目录应及时清理。
- 启动服务、测试、类型检查和构建默认直接在目标项目目录执行,并复用现有 `node_modules/`、Maven 本地仓库及其他依赖缓存;不得仅为运行或验证创建 `.codex-temp/<task>`、`.codex-tmp/<task>` 或完整项目副本。
- 不得复制、移动或手工链接现有 `node_modules/` 到临时目录。依赖缺失或锁文件变化时,在目标项目执行其声明的安装命令。
- 当前开发阶段不得因小功能、缺陷修复、联调、测试、构建、端口冲突、未提交修改或希望获得“干净目录”而创建 `wk`/Git worktree、临时分支或项目副本;统一直接在当前工作区、当前分支修改和验证,不得自行创建或切换分支。
- 只有用户在当前轮明确要求隔离分支或 worktree 时才可例外。例外时必须先说明原因、精确位置和清理条件,放在目标项目之外;任务结束且无进程占用后立即清理。
- 禁止在 `apps/*/`、`baiyue-firstleg/` 及业务模块内部新增 `.codex-temp/`、`.codex-tmp/`、`worktree/` 或类似项目副本。遗留目录须先确认没有运行进程和唯一证据,再按精确路径清理。
- 端口冲突通过停止已知旧进程或指定其他端口解决,不得复制项目。普通验证应直接覆盖当前未提交修改,不为获得“干净目录”绕开真实变更。
## 本机重型检查与多对话限流
- Windows 本机的测试、类型检查、构建、依赖安装和 Maven 命令统一经 `baiyue-firstleg/scripts/local-check.ps1`(PowerShell 7)执行。两个锁位于当前用户 `%LOCALAPPDATA%/Chongchong/LocalChecks/`,与工作目录和对话无关;同一用户下最多同时执行 2 项,两槽都占用时才排队,每 15 秒提示占用。首槽沿用 `heavy.lock`,在途旧入口继续计入首槽;第二槽为 `heavy-2.lock`。已启动的旧版等待者仍只等待首槽,新调用自动选择可用槽;不终止或接管现有任务。入口不拦截绕过入口的命令。
- 在工作区根使用:`& ./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 进程名清理其他任务。
- 子进程默认设置 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-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` 分别展示两槽及总占用,摘要不是业务/部署事实来源。无需凭据,不访问网络、数据库或部署环境;被包装命令原有的网络/写入能力及授权要求不变。
- 只读检索和互不冲突的编辑可并行;开发服务按应用复用已有实例,不纳入短任务队列,也不通过本入口启动常驻服务。已有运行任务由所属对话收尾;本入口不自动终止它们。
- 免排队范围仅限离线只读的静态合同:`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、测试和脚本;旧实现与本轮目标冲突时,同步修复实际受影响的生产者与消费者并删除被替代实现。
- 禁止为旧代码、旧调用或开发环境存量保留旧接口/旧字段别名、兼容分支、双协议、双写、灰度、回滚版本、降级解析、旧行为回退、临时适配层、迁移脚本、回填脚本、清理补偿或新旧版本并行;不得以“稳妥”“兼容历史数据”或“先保留以后删除”为由延迟收敛。
- 开发环境数据库记录、上传文件、缓存、会话、消息、搜索索引和其他运行状态均可丢弃;正常验证方式是更新最新初始化基线、重新造数或上传,并直接运行受影响回归,不模拟生产迁移。已有历史 SQL 只用于开发追溯,不构成兼容依据。
- 后端位于独立 Git 仓库 `../baiyue-firstleg/`,执行 Git 命令前确认当前工作目录。“无需兼容、直接修复”不授权自动重置数据库、删除数据/文件、执行 SQL、部署或修改环境。测试环境授权只读 `独立任务协作登记.md`,开发全流程授权只读 `开发环境独立任务协作登记.md`;未登记任务和生产环境仍需用户在当前轮明确授权。
## 联调、部署与数据库
- 默认只准备代码、验证结果和人工部署步骤,不触发 Jenkins、不启动本地 Java/Nacos/数据库。开发全流程总控可按 `开发环境独立任务协作登记.md` 的授权操作开发数据库、部署开发环境并执行开发环境真实 HTTP;登记专项可按 `独立任务协作登记.md` 的持续授权查询和修改用户指定的测试数据库。两类授权不得跨环境复用,也不得自动扩大到 Jenkins 或生产环境。
- 只有用户在当前轮明确授权指定环境、服务和提交时,才可部署或执行 HTTP 验收;同一环境和服务的非破坏性写入可复用本轮授权,删除、重置、执行 SQL、部署或发布仍逐项授权。测试数据库的读写例外仅适用于登记表中已持续授权的总控与专项,并遵守其中的职责和破坏性操作门禁。
- 环境地址、凭据和 Token 不写入源码或 `AGENTS.md`。接口不可用或契约不一致时记录路径、状态、错误码、`requestId`/`traceId` 和阻断原因,不回退到模拟成功。
- 测试环境联调、部署和验收命令读取 `测试环境Jenkins部署指南.md`;开发全流程只按 `开发环境独立任务协作登记.md` 的授权与目标项目指引执行,不把测试 Jenkins 流程当作开发部署入口。
## 通用工程与质量门禁
- 对外 API 新增、改名、删除或访问域变化,以“调用端实际路径(含 API Base)→ 对应区域 Gateway → Controller → OpenAPI → 权限”作为一个交付单元;不能只在修改网关文件时才检查注册。已被正确通配路由覆盖时无需重复添加路由,内部服务令牌接口不得为通过检查而公开。
- 仅对外 API 路径/访问域新增、改名、删除或 Gateway 路由配置变化时,运行 `node --test scripts/gateway-route-contract.test.mjs` 及受影响服务/调用端测试;命中的路由合同失败不得声称完成。纯文案、内部逻辑和路径未变的前端消费不触发。该离线合同不代替权限、HTTP 方法、运行时 Nacos 或真实 HTTP 验收。
- 交付列明变更接口、路由是否复用或新增、验证结果及部署单元;Gateway 配置变化必须包含对应网关,Nacos 配置变化单独说明发布项。没有环境授权时只交付代码和待验收说明,不自动部署、发布配置或调用真实 HTTP。
- 修改范围与停止条件遵循[工作区根指引](../AGENTS.md#修改范围与停止条件),保持目标项目现有命名、分层和格式。
- 优先复用现有依赖和公共能力;新增或升级依赖前说明必要性、影响范围和替代方案。
- 不提交依赖目录、构建产物、运行日志、编辑器缓存或本地临时文件;不写入密钥、令牌、真实客户数据或环境特定地址。
- 用户可见文案保持清晰一致;代码标识符使用英文,业务说明和文档可使用中文。
- 仅运行目标项目实际支持的检查命令,按上文选择最小有效范围;“验证受影响项目”不等于运行该项目全部命令。
- 签名、组件 Props、接口/DTO、请求响应结构或影响调用方的行为变化时,用 `rg` 按变更符号核对直接生产调用、测试、Mock、Fixture、契约测试与脚本;只修改实际受影响的引用,必要时沿直接依赖继续追踪。仅内部实现调整且调用契约与对外行为未变时,验证受影响逻辑,不自动修改调用方、Mock、Fixture 或文档。
- 参数或类型签名变化必须运行会编译测试源码的最小检查;无法验证时明确列出未验证范围。
- 行为缺陷优先用已有测试复现,缺失时补必要用例;文案和纯展示不机械新增测试,不为小改动引入框架。
- UI 只检查本轮影响的状态与交互,不机械遍历加载、空态、错误态和权限;布局或承载方式变化再按前端验收规则核对对应视觉证据。
- 需求、技术栈或接口未确认时停在可逆设计阶段,不自行作出高成本平台决策。
## 独立任务与多任务协作
- 跨环境调度必须先核对保存项目 projectId、任务 cwd 与环境登记表三项一致;任一不一致不得下发或执行。禁止把测试环境任务通过绝对路径提示临时改作开发环境任务,反向同样禁止。
- 开发环境全流程任务只使用 `开发环境独立任务协作登记.md`;测试环境任务只使用 `独立任务协作登记.md`。两套任务不互相复用,不在两个目录之间复制未提交文件、生成补丁、自动合并或 cherry-pick。
- 普通任务不读取协作登记。只有用户明确指定当前对话为总控,或要求检索历史任务、独立任务或跨对话通信时,才按当前保存项目与 cwd 读取唯一匹配的登记表:开发全流程读 `开发环境独立任务协作登记.md`,测试环境读 `独立任务协作登记.md`;不得同时加载两表后混合选取任务。
- 总控在接收任务时必须先做时长评估;预计单一执行链超过 15 分钟时,不得继续由一个任务从定位包办到验收,必须立即拆成可并行的“根因/契约核对、实现修复、回归验收”等独立工作包,并明确每包文件写权限和交付物。优先复用登记表中的长期专项;一次性工作使用内部子代理。该规则不自动授权创建新的用户可见任务。
- 实际执行超过 15 分钟仍未形成可验证交付时,总控必须主动重新拆分或缩小范围,向用户报告当前阻断与并行安排,不得静默等待、继续扩展设计或把非必要兼容、迁移、补偿工作并入主修复链。
- 用户按业务流程逐节点进行人工验收时,总控必须以“当前验收节点”为调度和完成单位,而不是以代码模块或单个 Bug 为单位。收到该节点首个问题后,应立即并行检查前端交互、后端状态与契约、数据/权限前置和自动化验收覆盖;同一节点后续问题统一并入该批次,不得连续串行追加给一个长期专项。
- 节点开发批次至少包含一个唯一实现写入者;跨端时分别下发前端、后端工作包,日常不默认下发节点全链验收专项。只有用户当轮明确通知开始验收、准备部署或执行验收时,才启动验收脚本工作包。能够提前发现的问题由各实现专项在自身定向测试中收口,尽量减少“部署一次、人工发现一个、再部署一次”的循环。
- 当前节点只有在代码门禁通过、相关自动化场景补齐、部署清单明确,并由用户完成真实环境人工验收后才关闭;关闭后再进入下一业务节点。总控需持续维护当前节点的阻断项、已修项和待部署项,不把其他节点的优化混入当前发布批次。
- 检索历史任务只使用本机 `~/.codex/session_index.jsonl`、`~/.codex/state_5.sqlite`、`~/.codex/sessions/` 和已知本地任务,不依赖聚合本地、远程主机或云端对话的列表接口。
- 被指定为总控只授权规划、拆解、协调和复用已登记任务,不授权创建新的用户可见独立任务;临时并行默认使用当前对话或内部子代理。
- 创建用户可见独立任务必须由用户在当前轮明确要求,并确认精确数量、稳定职责和所属总控;历史授权以及“继续处理”“拆分”“安排”“并行”等表述不构成创建授权。
- 创建前必须查询登记表并优先复用职责匹配的 `task_id`;一次性缺陷、排障、部署、临时验收和只为提速的并行工作不得登记为长期任务。
- 创建成功后先登记稳定 `task_id`、所属总控和唯一长期职责,再下发工作;不自动创建替代任务或归档、解档、恢复、迁移任务。
- 并行前明确文件归属和共享契约。共享导航、根路由、权限初始化和统一 SQL 由已登记的对应总控统一集成;发生重叠时保留现有改动并跨任务协调。
@@ -0,0 +1,54 @@
# Admin / Client 前端原型还原验收规则
## 目标
本文只维护逐操作核对方法、验收范围和证据要求。Admin 当前样式的唯一依据为 [Admin 界面规范](Admin高密度界面规范.md);Client 新增、新建、下单的通用外观按 [Client 界面样式规范](Client界面样式规范.md) 的“新增页面”章节,其他操作读取该规范的适用条款和已确认原型,不自动采用 Admin 风格。本文不重复定义配色、密度、按钮或弹窗尺寸。
页面业务字段、顺序、分组和操作承载以当前业务契约及逐操作确认为准;已有原型作为直接核对证据。Admin / Client 主规范已经确认替代的外观使用对应现行规则,其余差异逐项记录,不因套用公共组件而改动承载方式。
## 修改门禁
新页面、整体视觉还原、布局重排或页面/弹框/抽屉承载变化,才对受影响操作形成以下矩阵,并给出原型或用户截图依据。文案、单个展示字段增删、局部逻辑及不改变承载方式的小调整,直接核对差异,不要求矩阵、完整原型检索或全页面验收:
| 页面 | 操作 | 原型承载方式 | 原型尺寸/布局 | 当前实现 | 结论 |
|---|---|---|---|---|---|
| 示例 | 详情 | 独立页面 | 页面级头部、返回列表 | 右侧抽屉 | 改为正式路由页面 |
只核对本轮受影响操作,不机械遍历详情、新增、编辑、审核、预览和删除;不得用一个操作的结果推断其他操作已通过。
## 承载方式
- 原型使用独立页面:必须使用正式路由、页面级布局和明确返回入口;不得改成抽屉或弹框。
- 原型使用居中弹框:必须使用居中模态框,核对标题、正文、底部按钮和关闭方式;Admin / Client 外观分别按各自现行样式规范和已确认业务例外,承载尺寸按对应操作确认,不得改成右侧抽屉。
- 原型使用侧滑面板:仅该操作允许使用抽屉,并按原型方向、宽度和内部布局还原。
- 原型未定义:先停在矩阵中标记待确认,不得因为公共组件方便而自行选择。
- 同一列表的详情、新增、编辑、审核可以采用不同承载方式,必须逐操作判断。
## 视觉与排版
- Admin 按 [主规范任务入口](Admin高密度界面规范.md#按任务阅读)选择对应章节核对;Client 按 [样式规范](Client界面样式规范.md) 的适用章节及对应操作原型逐项核对。矩阵标明当前依据及业务例外,不把旧试点和过程记录当成另一套通用规则。
- 核对字段分组、列宽、换行、对齐、控件、表格、按钮及图标;保留原型的业务语义和操作资格。主规范未授权的装饰、功能与交互不得自行添加。
- 长编号、长地址、长文件名、多字段、空值和业务状态使用真实形态的数据核对;不能靠缩小字号、裁切关键值或减少字段通过验收。
## 响应式与可访问性
- Admin、Client 当前只按 `1920×1080`、浏览器缩放 `100%` 验收;不检查或整改 `720px`、`320px` 等窄屏,也不删除已有响应式能力。用户恢复多视口验收后再统一调整。
- 弹框正文超过视口时只滚动正文,标题和操作区保持可见;独立详情页按正常页面滚动。
- 弹窗尺寸和字段列数按当前样式依据及业务例外核对,不在验收阶段另设通用尺寸;核对长正文、校验错误、附件和底栏是否可用。
- 保留键盘操作、焦点、表单标签、图标按钮名称和足够对比度。可访问性调整不得改变原型的主要布局与视觉语义。
## 执行与验收
1. 仅满足上述矩阵触发条件时记录受影响操作;局部小改直接核对差异,不批量替换公共组件。
2. 按当前对话确认的范围修改目标模块,保留其他任务在途改动;存在总控协作时沿已冻结结论执行,不因普通样式任务额外创建总控流程。
3. 需要视觉验收的布局/承载变化,由人工在 `1920×1080`、`100%` 缩放下提供受影响操作截图;缺少时记“待人工截图确认”,AI 不批量取证。文案、小逻辑和局部展示改动不以重新提交整页截图作为代码交付门禁,不据此宣称已通过视觉验收。
4. 按 `AI工程执行与协作约束.md` 的“验证范围选择”执行最小有效检查,不因页面修改自动全量测试、类型检查或构建;需要的重型检查经过 `local-check.ps1`。共享组件核对实际消费者,公共浮层选择器变化覆盖受影响的嵌套、Teleport、工具栏及全屏场景。
5. 不触发 Jenkins、不部署、不提交,除非当前对话另有明确授权。
已改造弹框回看时,复用原固定编号清单,从本轮确定的当前项逐个处理,不另建全量清单、不重排编号。单项流程为“原改造记录与当前代码核对 → 实际截图核对 → 明确保留项和必要局部修正 → 有修改时完成相应代码检查 → 本项人工确认 → 下一项”。缺少截图时只记录源码事实与待核对项,不声称视觉通过;本项未确认前不并行修改后续弹框。复杂窗口的分栏、步骤、树表、预览与已确认尺寸分别核对,不按普通表单模板统一重排。
## 证据记录
逐操作矩阵记录:页面/路由、具体操作及承载方式、原型或用户确认依据、采用的主规范章节/业务例外、自动检查结果和人工截图结论。各模块复用现有记录,不另建一份全端进度副本。示例原型的尺寸不覆盖当前已确认的业务尺寸。
人工核对独立打开/刷新、列表到详情、页签切换、长内容、宽表、空态、部分数据、失败与重试、只读/无权限及浮层普通/全屏/关闭重开。自动检查不能证明浏览器像素布局和实际滚动已通过。
+65
View File
@@ -0,0 +1,65 @@
# Admin 全模块样式核对记录
范围为 `apps/admin-web/src/core/navigation/adminNavigation.ts` 当前可见的 48 个菜单、顶部消息中心的 3 个正式页面,以及它们通过实际路由和组件可达的新增、编辑、详情、审核、文件、删除确认等操作。隐藏原型不恢复;某操作没有正式入口时记录现状,不凭原型补建业务能力。目标不缩减为已改模块。
统一依据为本轮用户确认、国内订单/客户详情样板及 [高密度界面规范](Admin高密度界面规范.md)。操作不超过 3 个时全部显示,超过 3 个才折叠;折叠按钮只显示省略号图标,保留提示和可访问名称。
| 导航组 | 可见菜单数 | 当前记录及下一步 |
|---|---:|---|
| 顶部消息中心(侧栏外) | 3 个页面 | 已补入三个列表、两处详情抽屉、两处编辑弹框及状态确认,见 [消息中心记录](Admin消息中心样式核对记录.md);1981 项全量测试、类型与构建通过,待人工截图 |
| 首页数据看板 | 1 | 四项真实指标、刷新与全屏已接入;代码检查通过,待人工截图,见 [首页与系统记录](Admin首页与系统管理样式核对记录.md) |
| 客户管理 | 2 | 已有 [客户管理记录](Admin客户管理样式核对记录.md),最终按截图复核 |
| 国内仓 | 7 | 已有 [国内仓记录](Admin国内仓样式核对记录.md),最终按截图复核 |
| 货柜管理 | 4 | 已有 [货柜管理记录](Admin货柜管理样式核对记录.md),最终按截图复核 |
| 海外业务 | 3 | 代码已修正,代码门禁通过,待人工截图,见 [海外业务记录](Admin海外业务样式核对记录.md) |
| 海外仓 | 10 | 已有 [海外仓记录](Admin海外仓样式核对记录.md),尾程截图差异及省略号按钮已修正,仍需修正后截图 |
| 客户服务 | 2 | 代码已修正,覆盖异常新增/详情、回访/再次回访及资料,见 [客户服务记录](Admin客户服务样式核对记录.md);代码门禁通过,待人工截图 |
| 财务管理 | 6 | 代码已修正,覆盖 11 路由、7 个页面文件及 11 处弹框声明;1950 项全量测试、类型与构建通过,待人工截图,见 [财务管理记录](Admin财务管理样式核对记录.md) |
| 通用 | 10 | 10 菜单、14 页面代码样式已核对,1957 项全量测试、类型与构建通过,待人工截图,见 [通用资料记录](Admin通用资料样式核对记录.md) |
| 系统管理 | 3 | 三页及新增/编辑/配置/启停/删除已核对;菜单权限恢复 720px 居中框,1961 项全量测试、类型与构建通过,待人工截图,见 [首页与系统记录](Admin首页与系统管理样式核对记录.md) |
“已有记录”不是视觉验收通过。每组必须保留逐操作矩阵、受影响测试/类型/构建证据,以及人工在 1920×1080、100% 缩放下提供的截图结论;缺少截图标记待确认。
## 共享子弹框复核
2026-09-14,已补齐订单费用新增/编辑/调整、费用驳回、订单申报编辑和货品申报编辑四处弹框的显式密度入口。保留原尺寸、表单、权限和提交行为,费用行操作按实际权限计数,不超过三个直接显示,超过三个使用纯省略号图标。
从密度合同声明的 93 个页面/组件入口沿实际 Vue import 检查到 118 个组件,未再发现缺少显式密度入口的弹框;引用检查已纳入维护合同,覆盖静态导入及字面量动态导入。当前左侧生产导航 48 个菜单均对应已登记的页面或组件入口。后续复核发现顶部消息中心未被侧栏清单覆盖,已另行补入三个正式页面及两个组件;原 93 / 118 计数仅为该次补查范围。此项为代码覆盖检查,不代表全部页面的视觉验收。
四处弹框相关 61 项定向测试、1971 项全量测试、类型检查、构建及 git diff --check 通过。本地 Vite 返回的排车列表、尾程订单列表均已采用纯省略号操作按钮。仍待人工在 1920×1080、100% 缩放下核对修正后的页面及弹框截图。
## 应用外层确认框
沿正式路由检查后,顶部消息中心已补齐。登录、首页入口重定向与 403 属于应用外层;不机械套用业务表格密度。应用外层的退出登录、权限变化、关闭页签、离开未保存页面和新版本恢复五处确认均已显式接入公共样式,51 项定向检查通过;取消、权限和草稿保护逻辑未改变。
| 应用外层操作 | 当前承载与依据 | 调整结论 |
|---|---|---|
| 退出登录 | AppLayout 现有消息确认框;原型无具体确认容器 | 保留原提示、取消与登出流程,只接入公共确认框样式 |
| 权限变化 | AppLayout 现有警告框 | 保留未保存条目说明与关闭失权页签逻辑 |
| 关闭页签 | WorkspaceTabs 现有未保存确认框 | 保留继续编辑、放弃并关闭以及后续焦点行为 |
| 离开未保存页面 | router/index.ts 的现有路由守卫确认框 | 保留守卫与版本缓存失效逻辑 |
| 新版本资源恢复 | main.ts 的现有刷新确认框 | 保留确认后刷新与放弃草稿边界,不触发真实刷新 |
以上五处仅统一消息框密度,不改变承载方式或内容。原型未定义的保护行为沿用当前实现,人工截图待确认。
## 人工证据待补
代码与离线测试不能证明最终 CSS 优先级、溢出、遮挡、缩放或长内容效果。人工按 1920×1080、100% 缩放逐项截图:
1. 国内订单与尾程订单详情(同一页签)、排车列表(少于/等于三个与超过三个可用操作的记录),复核此前反馈。
2. 顶部消息中心的三个列表、消息和模板新增/编辑、任务/消息详情抽屉,确认字段换行、滚动及底部按钮。
3. 各模块记录中尚未取得的新增、编辑、审核/确认、文件预览、删除/停用、未保存保护等状态截图,逐操作闭环,不以一张列表图代替详情或弹框。
在上述证据补齐前,全模块视觉目标保持未完成。不得把已登记组件检查与全量测试通过写成已完成所有页面视觉验收。
## 本轮最终代码门禁
最终 253 个文件 / 1982 项全量测试、类型检查、构建和 git diff --check 通过。消息中心 42 项、应用外层 51 项、国内仓确认框 184 项定向检查通过(这些集合存在共享合同重叠,不将其简单相加)。实际引用链覆盖 123 个 Vue 组件的 56 处业务消息框调用,以及应用外层五处确认。原有业务脚本在排除样式导入、customClass 与此前已确认的费用按钮计数函数后保持一致。
未部署,未向真实账号发送消息,未操作数据库或业务记录。不将代码门禁视为全模块视觉验收通过。
## 2026-09-15 浏览器截图验收
用户已明确授权内置浏览器在测试环境截图,后续不再以缺少人工截图授权作为阻塞原因。本批按 1920×1080、100% 缩放取得 10 张截图,见 [测试环境截图验收记录](Admin测试环境截图验收记录-20260915.md)。国内与尾程订单详情基本信息、排车按钮和编辑弹框已取得实际页面证据。
测试首页和消息模板仍未呈现本地最新样式;需获得单独的 Admin 测试部署授权并确认版本,再继续完整验收。其余页面和状态仍待逐项核对,本批不代表全模块通过。
+136
View File
@@ -0,0 +1,136 @@
# Admin 列表样式推广核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 本轮依据与边界
2026-10-21 后续视觉确认:列表页签对齐与灰白斑马纹以[蓝白工作台当前规范](界面参考/蓝白卡片式工作台风格参考.md#视觉基线与维护入口)为准;下文“无斑马纹”为此前批次实现记录,不再作为接入要求。
2026-09-30,用户确认排车列表样式后授权按客户管理、国内仓、货柜管理、海外仓顺序推广;特殊页面保留待人工确认。直接视觉依据为本轮截图 `41fea1ee-f30a-46db-97b0-82ec96846ec7/image-1.png` 与 [排车样板](Admin排车列表样式试点.md)。仅修改测试环境工作区 `apps/admin-web`,不部署或发布。
统一布局:左侧列表名称、右侧原业务按钮与字段设置,搜索和表格位于同一连续卡片。仅列表操作列采用蓝色普通文字、红色危险文字、悬停无下划线;查询、顶部、弹框按钮不变。列显隐、排序和拖动宽度使用公共浏览器偏好存储。保持所有业务字段、状态、权限和事件,不改变详情、新增、编辑、审核、文件预览与删除确认的承载方式。
## 修改前页面与操作矩阵
以下实现路径均相对 `apps/admin-web/src/modules/`。列表变化依据上述截图;其它操作以现有组件和事件为核对入口,保持原样,未定义的新承载方式不在本轮引入。
| 模块 | 页面 / 入口 | 当前实现与操作证据 | 本轮结论 |
|---|---|---|---|
| 客户管理 | 客户列表 `/customers` | `customers/pages/CustomersView.vue`:`customerRowActions`、`handleCustomerRowAction`、`openCreate`,客户详情路由及编辑/审核/重置密码弹框 | 接入连续列表;详情、新增、编辑、审核、资质与确认操作保持 |
| 客户管理 | 海外仓阶梯费用 | `customers/pages/OverseasStorageFeesView.vue`:`openEdit`、`save`,费用编辑 AppDialog | 接入连续列表;费用编辑弹框保持 |
| 国内仓 | 订单列表 | `unified-orders/pages/UnifiedOrdersView.vue`:状态页签、`unifiedOrderRowActions`、详情分支及批量审核、导入、扣货与文件入口 | 仅列表分支接入;详情和各弹框保持 |
| 国内仓 | 订单测量 / 测量数据审核 | `inbounds/components/InboundTaskList.vue`:`taskLabel`、客户查询警告、测量和审核选择事件 | 两个路由共用列表接入;作业弹框和确认保持 |
| 国内仓 | 预装清单 | `loading-lists/components/LoadingListsView.vue`:`mode`、列表权限判断、清单行操作、详情导航 | 接入连续列表;权限错误态和详情保持 |
| 国内仓 | 库位管理 | `warehouse-resources/locations/pages/LocationsView.vue`:仓库加载与列表分别失败、编辑与删除确认 | 接入连续列表;独立错误提示、维护弹框和确认保持 |
| 国内仓 | 托盘管理 | `warehouse-resources/pallets/pages/PalletsView.vue`:仓库加载、新增/编辑/停用/删除行操作 | 接入连续列表;维护弹框和确认保持 |
| 国内仓 | 整柜业务 | `domestic-containers/pages/DomesticContainersView.vue`:入库/出库/库存页签、库存汇总及维护入口 | 三个视图共用连续列表,页签、汇总和原操作保持 |
| 国内仓 | 船期日历 | `sailing-calendar/pages/SailingCalendarView.vue`:日历和渠道/模板/船期管理工作区 | 保留现状;日历布局待人工确认 |
| 货柜管理 | 订舱列表 | `ocean-bookings/pages/OceanBookingsView.vue`:列表查询、行操作和订舱资料入口 | 接入连续列表;新建、编辑、详情、放舱及文件保持 |
| 货柜管理 | 拖车列表 | `trucking/pages/TruckAppointmentsView.vue`:拖车查询和行操作 | 接入连续列表;创建、编辑、详情和确认保持 |
| 货柜管理 | 送柜报关 / 清关提柜 | `container-loading/pages/ContainersView.vue`:`workbench` 双模式、在途/历史页签、行操作、预计到仓维护 | 两个工作台共用列表接入;所有详情、节点、订舱、资料、邮件和确认保持 |
| 海外仓 | 尾程订单 | `overseas-warehouse/pages/LastMileOrdersView.vue`:普通列表与柜子工作台分支、行操作和柜级计划弹框 | 普通列表可接入;柜子工作台保留业务结构并单独核对 |
| 海外仓 | 入库单 | `overseas-warehouse/pages/InboundOrdersView.vue`:预约、行操作及详情 | 接入连续列表;预约和详情保持 |
| 海外仓 | 海外库位 | `overseas-warehouse/pages/LocationsView.vue`:普通/A0/虚拟库位资格和维护操作 | 接入连续列表;受保护资格和确认保持 |
| 海外仓 | 排车列表 | `overseas-warehouse/pages/DispatchesView.vue` 已确认样板 | 保留样板;字段设置和列宽偏好保持 |
| 海外仓 | 出库单 | `overseas-warehouse/pages/OutboundsView.vue`:按类型新建、取消、出库详情和选择作业弹框 | 仅主列表接入;新建候选及各弹框保持 |
| 海外仓 | 派送单 | `overseas-warehouse/pages/DeliveryOrdersView.vue`:行操作、资料汇总和签收入口 | 接入连续列表;签收、详情和资料保持 |
| 海外仓 | 换标单 | `overseas-warehouse/pages/RelabelOrdersView.vue`:新增、详情与编辑入口 | 接入连续列表;表单与详情保持 |
| 海外仓 | 托盘管理 | `overseas-warehouse/pages/PalletsView.vue`:详情、单张打印及原维护入口 | 接入连续列表;打印尺寸和其它操作保持 |
| 海外仓 | 库存管理 | `overseas-warehouse/pages/InventoryView.vue`:库存汇总、导出、详情和行操作 | 接入连续列表;汇总数据、导出及详情保持 |
| 海外仓 | 退货库存 / 退货箱号 | `overseas-warehouse/pages/ReturnInventoryManagementView.vue` 两种 `mode` | 沿实际公共列表组件接入;明细和作业保持 |
| 海外仓 | 进销存记录(关联入口) | `overseas-warehouse/pages/InventoryTransactionsView.vue`:只读边界提示、关系查询、导出 | 接入连续列表;只读边界与关系查询保持 |
## 本轮实现与待确认项
客户管理 2 个、国内仓 7 个、货柜管理 4 个、海外仓 11 个菜单列表已接入;另外接入海外库存关联的进销存记录,共 25 个列表入口(含原排车样板)。包装页面继续复用实际公共列表组件;整柜的三种业务页签、测量与审核双模式、货柜国内/海外双工作台、尾程订单隐藏柜子工作台和退货库存/流水/箱号分支均保留。
船期日历 `/sailing-calendar` 保留原样。日历与渠道/模板/船期管理工作区不等同于标准业务列表;需要人工确认顶部按钮、查询及日历的排列,再决定如何接入。本轮没有隐藏或移除该入口。
尾程订单隐藏柜子工作台仍保留自身卡片与分页,通过公共 `results` 插槽承载。修正了共享表格在自定义工作台或列表加载失败时重置页码的问题;普通列表继续使用原服务端分页。
新增页面的视觉均待人工在 1920×1080、100% 缩放下截图确认;样板截图不代表其余页面视觉已验收。重点核对页签、多字段查询、长编号横向滚动、汇总、危险文字、每页数量、字段显隐及拖动后刷新列宽。
## 验证记录
客户管理相关回归 9 个文件、120 项通过;特殊工作台、公共表格和其它受影响回归 7 个文件、180 项通过。源码审计确认已接入页面的原业务点击事件全部保留;除退货列表增加列配置与公共表格导入外,业务脚本保持不变,API 和权限没有修改。退货库存/流水/箱号增加行为回归,覆盖搜索分页、偏好隔离与详情入口。
2026-09-30 最终完整 `pnpm test`:263 个文件、2131 项全部通过。`pnpm build`(包含 `vue-tsc --noEmit`)通过。仅修改本地测试环境代码;未提交、未部署或发布。
## 第二批修改前页面与操作矩阵(2026-09-30)
用户授权继续客户服务、海外仓、财务管理、通用、系统管理等剩余页面;沿当前菜单扩展海外业务和消息入口。上一批海外仓标准列表复核并保持。隐藏原型菜单不启用,首页数据看板不是列表,保留并记录待人工确认。
本批仍只改变主列表布局和操作列外观。下列实现路径相对 `apps/admin-web/src/modules/`;详情、新建、编辑、审核、文件预览、打印及删除/停用确认仍沿原组件、路由和事件,不引入新承载方式。视觉依据与第一批相同。
| 模块 | 页面 / 路由 | 当前列表实现及操作核对入口 | 结论 |
|---|---|---|---|
| 客户服务 / 通用 | 异常订单 `/overseas-warehouse/exception-orders` | `overseas-warehouse/pages/ExceptionOrdersView.vue`:toolbar-actions、actions、related、handlerName、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 客户服务 / 通用 | 客户回访 `/overseas-warehouse/customer-visits` | `overseas-warehouse/pages/CustomerVisitsView.vue`:actions、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 客户服务 / 通用 | 称重机器 `/general/mojia-sku-sync` | `overseas-warehouse/pages/MojiaSkuSyncView.vue`:toolbar-start、toolbar-actions、actions、sourceCode、kind、image、dimensions、syncStatus、match、measuredAt、failure;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 海外业务 | 海外采购订单 `/overseas-business/purchases` | `overseas-business/pages/PurchaseOrdersView.vue`:actions、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 海外业务 | 本土卡车 `/overseas-business/trucks` | `overseas-business/pages/TransportOrdersView.vue`:toolbar-actions、actions、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 海外业务 | 本土散板 `/overseas-business/looseboards` | `overseas-business/pages/TransportOrdersView.vue`:toolbar-actions、actions、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 财务管理 | 客户账户 `/finance/customer-accounts` | `finance/pages/FinanceCustomerAccountsView.vue`:toolbar-actions、actions、customerName、customerCode、contactName、contactPhone、lastChangedAt、actualBalance、frozenBalance、availableBalance、creditLimit、creditExpiresOn、creditUsed、pendingRechargeCount、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 财务管理 | 客户应收应付 `/finance/customer-arap` | `finance/pages/FinanceCustomerArapView.vue`:toolbar-actions、actions、customerName、direction、businessReference、sourceType、supplierName、sourceStatus、status、generated、businessDate、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 财务管理 | 应收款统计表 `/finance/receivable-statistics` | `finance/pages/FinanceReceivableStatisticsView.vue`:toolbar-actions、customerName、totalReceivable、totalReceived、totalOutstanding、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 财务管理 | 客户对账单 `/finance/customer-statements` | `finance/pages/FinanceCustomerStatementsView.vue`:toolbar-actions、actions、status、customerConfirmationStatus、customerName、lastPaymentAt、settled、createdByName、createdAt、submittedAt、reviewedAt、issuedAt、customerConfirmedByName、customerConfirmedAt、updatedByName、updatedAt、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 财务管理 | 结算单应收 `/finance/settlement-receivables` | `finance/pages/FinanceSettlementReceivablesView.vue`:包装页,实际列表为 FinanceFormalSettlementPage 的 kind 双模式;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 财务管理 | 结算单应付 `/finance/settlement-payables` | `finance/pages/FinanceSettlementPayablesView.vue`:包装页,实际列表为 FinanceFormalSettlementPage 的 kind 双模式;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 供应商列表 `/suppliers` | `suppliers/pages/SuppliersView.vue`:toolbar-actions、actions、name、category、truckingScope、carrierCodes、license、status、settlement;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 快递公司 `/master-data/express-companies` | `master-data/express-companies/pages/ExpressCompaniesView.vue`:toolbar-actions、actions、company、website、status、empty、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 往来单位 `/master-data/counterparties` | `master-data/counterparties/pages/PartnersView.vue`:toolbar-actions、actions、partner、type、address、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 费用项目 `/master-data/fee-items` | `fee-items/pages/FeeItemsView.vue`:toolbar-actions、actions、feeItem、tradeScope、pickup、warehouse、supplierCategory、allocationFee、description、status、empty、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 海外仓报价 `/overseas-master-data/quotes` | `overseas-master-data/pages/OverseasQuotesView.vue`:toolbar-actions、actions、status;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 汇率管理 `/overseas-master-data/exchange-rates` | `overseas-master-data/pages/ExchangeRatesView.vue`:toolbar-actions、actions、conversion、status;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 车辆列表 `/overseas-master-data/vehicles` | `overseas-master-data/pages/VehiclesView.vue`:toolbar-actions、actions、status、region;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 仓库管理 `/warehouses` | `warehouses/pages/WarehousesView.vue`:toolbar-actions、actions、warehouse、warehouseType、countryCode、address、contact、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 船期价格表 `/first-leg-pricing/carrier-rates` | `fba-pricing/carrier-rates/pages/CarrierRatesView.vue`:toolbar-actions、actions、version、scope、status、contents、issues、empty、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 通用 | 下载中心 `/downloads` | `downloads/pages/DownloadCenterView.vue`:pagination-left、actions、type、status、progress、requester、requestedAt、completedAt、expiresAt;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 系统管理 | 用户管理 `/system/users` | `iam/pages/InternalUsersView.vue`:toolbar-actions、actions、roles、status、lastLoginAt、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 系统管理 | 角色权限 `/system/roles` | `iam/pages/RolesView.vue`:toolbar-actions、actions、role、permissionSummary、roleType、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 系统管理 | 菜单权限 `/system/permissions` | `iam/pages/PermissionsView.vue`:toolbar-start、toolbar-actions、actions、name、code、endpoint、status、pagination-left;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 系统管理 | PDA版本 `/system/pda-releases` | `pda-releases/pages/PdaReleasesView.vue`:toolbar-start、toolbar-actions、actions、app、packageType、status、mandatory、sizeBytes、createdAt、publishedAt;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 消息入口 | 我的消息 `/notifications` | `notifications/pages/PlatformNotificationsView.vue`:toolbar-actions、pagination-left、actions、category、sentAt、status;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 消息入口 | 消息管理 `/notifications/messages` | `notifications/pages/MessageManagementView.vue`:toolbar-actions、pagination-left、actions、category、scheduledAt、sentAt、status;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
| 消息入口 | 模板管理 `/notifications/templates` | `notifications/pages/MessageTemplatesView.vue`:toolbar-actions、pagination-left、actions、status;原详情/表单/确认保持 | 接入公共连续列表;业务展示与操作保持 |
应收款统计保留月份、客户筛选、汇总、CNY 边界、打印/导出及原打印媒体规则;权限树保留展开、收起、保护提示和树形参数;PDA 版本保留国内/海外应用切换、当前版本事实和发布/停发确认;称重机器保留现有筛选、连接测试、人工推送和分页。这些页面沿实际结构单独处理,不删功能套标准模板。
第二批新增 29 个列表路由,复用 27 个实际列表组件;两个结算单包装路由继续复用 `FinanceFormalSettlementPage`,应收/应付各自保存字段和列宽偏好,本土卡车/散板继续共用原运输订单列表。菜单核对覆盖当前全部正式可见业务列表,加上三个消息入口与库存流水关联入口,共 54 个接入入口;未发现遗漏。隐藏原型菜单保持隐藏。
称重机器从独立 Element 分页改为公共表格分页,保留原 10/20/30/40/50/100 选项、服务端分页和查询条件。新增行为回归验证查询及每页数量变化回到第一页、每页数量变化仅发送一次查询、字段设置可用、列宽重新挂载恢复和原操作入口。PDA 与称重机器原加载中的 `aria-busy` 状态随列表保留。
源码核对确认第二批全部原点击表达式和业务脚本保留,仅清理已移除的装饰图标导入;未修改 API、权限、计算规则、状态或详情/表单承载方式。旧样式断言同步到连续卡片、通知区、纯文字“更多”和无斑马纹;原业务断言继续保留。
## 第二批异常及待确认清单
| 项目 | 当前处理 | 后续确认 |
|---|---|---|
| 首页数据看板 `/dashboard` | 保留原工作区,未套列表布局 | 人工确认是否需要独立调整看板顶部 |
| 船期日历 `/sailing-calendar` | 已按用户截图制作连续工作台版本,保留日历及渠道/模板/船期工作区 | 待人工确认新版按钮、查询与日历排列;见单页收尾记录 |
| 财务统计/打印、结算汇总、权限树、PDA应用切换、供应商分类及尾程柜子工作台 | 沿原结构接入,保留全部业务控件;自动检查通过 | 人工重点核对汇总、页签、树展开、打印和条件切换 |
| 所有新增页面真实视觉 | 未使用 AI 操作页面或截图替代验收 | 待人工 1920×1080、100% 缩放截图确认 |
| 完整测试中的 Vue 编译提示 | 出现 `v-model` 对 `const reactive query` 的非阻断提示;完整测试及构建通过,本轮未扩展修改 | 后续专项核查对应绑定 |
## 第二批验证结果
2026-09-30 完整 `pnpm test`:264 个文件、2133 项全部通过。`pnpm build`(包含 `vue-tsc --noEmit`)通过,`git diff --check` 通过。菜单/包装组件核对和原操作事件审计通过。所有修改均在本地测试环境工作区;未提交、未部署或发布。视觉验收仍待人工截图确认。
## 船期日历单页收尾(2026-09-30)
用户提供当前页面截图 `codex-clipboard-e64ee273-3108-4711-be25-f63785611e59.png`,授权按上述建议制作一版。仅处理测试环境的船期日历;首页数据看板和其它待确认页面留到后续逐页处理。
| 操作 | 截图/当前代码依据 | 本版结论 |
|---|---|---|
| 页头、筛选、日历与当日船次 | 截图显示独立筛选、日历、当日详情卡片;`SailingCalendarView.vue` 的 `calendar-toolbar`、`calendar-layout` | 共用连续容器;左标题/右业务按钮,下面筛选与日历/当日详情;保留月切换、今天、时区和船期数量 |
| 查询与重置 | 原筛选字段绑定、下拉自动查询、关键字回车及 `resetFilters` | 全部保留,重置仍在筛选区 |
| 单次新增/编辑 | 原 `dialogOpen` 居中 760px 表单及 `openCreate`/`openEdit` | 保留原表单与承载方式;页头保留新增单个船次,当日详情新增仍保留 |
| 渠道与周模板/批量生成 | 原 `openManagement` 居中管理工作区 | 按钮移到页头右侧;内部管理表格、生成步骤及权限保留 |
| 船次详情、货量明细、历史、订柜建议 | 原右侧详情、`openVolumeDetail`/`openHistory`/`openBookingAdvice` | 保留原交互和浮层,只合并外层卡片 |
| 复制、取消及批量生成确认 | 原 `copySelected`、`cancelSelected`、`confirmTemplateGeneration` | 原权限、确认、处理中和提示保留;不改业务状态 |
| 文件预览/审核 | 本页面无此类独立入口 | 不新增 |
公共页头及筛选沿 `DataTable appearance="integrated"` 的 `results` 插槽接入日历工作台;无列表列配置,不展示字段设置或虚构分页。日期格紧凑排列,保留日期、数量、航线和容量提示。修改后的视觉待人工在 1920×1080、100% 缩放下截图确认。
本版验证:公共表格与密度合同 51 项通过;新增船期日历行为回归 2 项通过,覆盖月切换、日期/船次选择、关键字查询、重置、失败重试及只读权限。源码审计确认除公共组件导入外业务脚本未变,全部事件和查询绑定保留。完整测试 265 个文件、2135 项通过,构建(含类型检查)及 `git diff --check` 通过。代码版本已完成,未提交、未部署;新版视觉待用户截图确认。
Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 718 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

File diff suppressed because it is too large Load Diff
+24
View File
@@ -0,0 +1,24 @@
# Admin 客户服务样式核对记录
范围为导航“客户服务”的异常订单、客户回访两页及其实际可达弹框,源码位于 `apps/admin-web/src/modules/overseas-warehouse/pages/`。与海外仓 10 菜单分开记录。
| 页面/操作 | 原型证据 | 当前承载 | 本轮修正 |
|---|---|---|---|
| 异常订单查询/查看 | `prototype-src/modules/04a-customer-service.html` 第 1 行 | `ExceptionOrdersView` 列表与 760px 只读详情框 | 查看采用纯文字描边按钮;详情保留双组描述表与长原因/处理动作,接入弹框密度 |
| 新增异常订单 | `prototype-src/overlays.html` 第 1572 行 `modal-dispatch-exception-create`,620px | 760px 居中框,比历史原型增加箱数和 SKU 字段 | 保留现宽度与双列表单,原因跨行,保留关联解析、冲突提示和保存状态 |
| 异常处理/删除 | 第 1586 行历史处理框 | 当前列表只有查看,未开放处理/删除入口 | 不恢复历史操作,不将不存在的操作记作通过 |
| 客户回访列表与统计 | `04a-customer-service.html` 第 21 行起 | `CustomerVisitsView`,3 个统计卡与单个回访/再次回访按钮 | 统计改紧凑摘要;按权限保留单个纯文字操作,无省略号菜单 |
| 回访/再次回访 | `overlays.html` 第 4 行 `modal-customer-followup`,720px | 920px 居中框,增加实际入仓单选择,允许较长反馈和附件 | 保留现宽度;订单上下文改连续描述表,压缩可选入仓单布局,保留选择状态、反馈、备注、保存校验 |
| 资料上传/移除 | 同上,原型文件选择与文件列表 | 系统文件选择,回访保存前可移除附件 | 使用可聚焦的原生按钮触发文件选择,附件移除使用纯文字危险按钮,保留文件类型/大小限制与客户作用域 |
当前模板未提供独立回访详情路由或文件预览入口,不增加新业务能力。业务返回字段、状态机和权限保持现有契约。
代码修正已完成;修正后所有页面和弹框待人工在 1920×1080、100% 缩放截图确认。
## 本轮检查结果
- 全量 251 个测试文件、1,942 项通过;类型检查、生产构建及差异空白检查通过。
- 密度合同已纳入本组全部页面和真实 Teleport 弹框,覆盖公共样式独立导入、实际祖先、行内按钮、标签与字号规则。
- 本组视觉仍待人工截图确认;代码和组件测试不代表页面视觉验收。
- 回归覆盖异常新建权限、订单关联与冲突、只读详情、处理人 ID 隐藏、回访必填/客户范围、文件选择按钮和附件上传;入仓单选择及附件语义保持原样。
+134
View File
@@ -0,0 +1,134 @@
# Admin 客户管理样式核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 范围与依据
按当前客户管理导航的两个入口:客户列表、海外仓阶梯费用;客户详情及两个入口实际调用的编辑、审核、预览一并收敛。用户要求按钮使用纯文字,避免图标占位;详情页签保留已确认的彩色 Emoji。沿用《Admin 高密度界面规范》,验收视口为 1920×1080、100% 缩放。
本轮开始时客户编辑已有 1120px、三列表单,详情联系信息已有三列调整;保留这些在途改动并在其基础上处理密度,不回退业务逻辑。
## 逐操作矩阵
原型入口:`docs/悦/货代SAAS平台后台/prototype-src/modules/01-customers.html` 的 `page-tenant-list`、`page-warehouse-tier-fee`、`page-tenant-detail`。当前用户确认的密度及按钮要求优先于历史装饰。
| 页面/操作 | 当前承载 | 调整目标 |
|---|---|---|
| 客户列表、筛选、行内操作 | 标准列表 | 13px 正文、36px 基准行高,28px 白底描边纯文字操作,保留直接操作数量与更多菜单 |
| 新增/编辑客户 | 1120px 居中弹框、三列表单 | 保留字段、联络信息说明与资质上传,紧凑分区、正文滚动、底部操作可见 |
| 客户入驻审核 | 1040px 居中弹框 | 企业资料连续描述表、资质表,保留同意/驳回与理由 |
| 创建/审核结果、重置密码、跳转登录、删除 | 各自居中弹框 | 统一密度与纯文字按钮;凭证、复制、确认和失败行为保留 |
| 资质文件预览 | 居中弹框 | 保留原图/PDF 查看面积与加载反馈 |
| 客户详情基本信息 | 独立页面 | 紧凑头部、38px 彩色页签,企业和联络信息用连续键值表,资质和企业成员用紧凑列表 |
| 客户详情计费规则 | 箱规表、权重系数表及编辑弹框 | 收紧标题与行距,保留公式、默认规则、权限与保存语义 |
| 客户详情海外仓费用 | 阶梯表及编辑弹框 | 紧凑分组表,保留币种、档位、单位与未保存确认 |
| 客户详情操作日志 | 标准列表及详情抽屉 | 紧凑表格、描述表,保留既有抽屉承载、快照、错误诊断 |
| 海外仓阶梯费用 | 标准列表及 1120px 编辑弹框 | “天数:单价”连续排列并整组换行、币种单列,两类费用并排编辑,保留原增删档位校验 |
## 验证
### 人工截图反馈:更多入口与阶梯费用
依据本轮用户提供的海外仓阶梯费用单行截图(`codex-clipboard-60f898d1-3c3c-49ba-8eda-b741e40bbd6d.png`)及“请同步”的确认:
| 页面/操作 | 当前截图或实现 | 本轮处理 |
|---|---|---|
| 客户列表更多操作 | 文字“更多”,与订单列表省略号不一致 | 统一 `MoreHorizontal` 三点入口,保留悬停提示和可访问名称;菜单项纯文字 |
| 订单列表更多菜单 | 三点入口,菜单项带图标 | 保留三点入口,菜单项改为纯文字 |
| 海外仓阶梯费用列表 | 档位分成两列白底块,每档重复币种、行高较大 | 改为“天数:单价”连续排列,按原档位顺序整组换行;币种只在独立列出现,计费单位在表头;空档位显示“—” |
| 海外仓阶梯费用编辑 | 原 1120px 双费用分组弹框 | 保留当前承载、字段与增删校验;后续按钮反馈补齐新增/删除白底描边样式 |
本轮修改后的截图待人工确认,原截图只作为问题证据。三点入口与连续阶梯展示完成后重新执行类型检查、全量测试、构建及差异检查,结果如下。
后续按钮反馈补充:源码中列表“编辑”已经接入 `customer-action-button`,本次增强其选择器和 Element Plus 状态变量,明确灰字白底细描边及焦点反馈;阶梯编辑弹框的“新增阶梯、删除”此前仍使用默认按钮,本次补齐蓝/红语义描边,并同步客户详情同类费用编辑。没有将源码检查等同于用户当前环境已经生效,最终外观仍待人工截图确认。
按钮补齐后再次验证:`pnpm typecheck`、`pnpm test`(247 个文件、1901 项)、`pnpm build` 和客户模块差异检查均通过;未部署。
2026-09-14,本轮样式实现及代码验证完成:
- `pnpm typecheck`:通过。
- `pnpm test`:247 个测试文件、1901 项测试全部通过,包含客户模块、客户操作日志及订单列表的直接影响测试。原有图标和弹框类名断言按本轮确认更新,保留 API、权限、保存与错误处理断言。
- `pnpm build`:通过。
- 本轮客户模块、客户操作日志与订单列表的 `git diff --check`:通过。
视觉状态为 **待人工截图确认**。没有用代码检查代替截图验收,没有沿用国内仓截图作证据;未部署、未进行业务写入。测试输出包含已有的其他页面 `query` 常量绑定编译提示,不影响本轮检查通过。
## 实现入口与影响边界
- 页面显式接入 `admin-density customer-density`,相关居中弹框显式接入 `admin-density-dialog customer-density-dialog`,Teleport 后仍应用密度规则。
- 客户专用样式位于 `apps/admin-web/src/modules/customers/customerDensity.css`;基础密度复用 `src/styles/adminDensity.css`。本轮没有修改全局默认样式或共享组件接口。
- `CustomerAuditLogsPanel.vue` 当前由客户详情消费,本轮调整其详情按钮和日志抽屉间距、描述表。保留原抽屉、快照和诊断信息。
- 纯文字规则覆盖业务操作与带文案的查询、重置、复制;分页箭头、列设置、筛选布局、关闭、全屏及加载反馈继续可见,避免出现空按钮。
- 客户列表白底描边按钮按既有操作权限和直接操作数量显示,更多入口统一三点 `…`,不显示“更多”文字;菜单项纯文字。未修改状态、权限、API 或计费口径。
## 样式维护收敛(国内仓、客户管理)
按用户确认,将两模块共用的默认值和通用外观合并到公共层:
| 范围 | 接入内容 | 保留的业务配置 |
|---|---|---|
| 客户列表、阶梯费用列表及编辑弹框 | `density-action` + `data-tone`,按钮交互状态只维护一份 | 操作权限、配色语义、直接操作数量、三点更多 |
| 客户详情、订单详情 | `density-tabs` / `density-tab-icon`;信息表接入 `density-fields` | 页签标签和事件,四列/三列、字段跨列 |
| 客户审核 | 公共弹框框架及 `density-fields` | 1040px 宽度、审核资料分组、96px 标签宽度 |
| 客户规则与费用 | 公共字号/间距/行高变量 | 规则公式、阶梯顺序、两类费用分组与编辑宽度 |
| 客户操作日志 | 公共密度变量、`admin-density-drawer` | 日志详情抽屉、结果与快照布局 |
`customerDensity.css` 中重复的按钮、页签、信息表基础规则已上移;客户 Vue 文件中被模块样式覆盖的旧声明已清除,不再保留旧卡片尺寸后用更强选择器覆盖。此前记录提到的 `customer-action-button` 已由公共 `density-action` 替换,属于样式归属调整。
维护规则见《Admin 高密度界面规范》的“国内仓、客户管理的样式维护边界”。`src/styles/adminDensity.test.ts` 检查 21 个明确消费者及其模块 CSS:禁止业务选择器进入公共层、禁止页面重复实现按钮、禁止在页面重定义密度默认值、检查所有变量引用已定义。此次代码收敛后的视觉状态仍为待人工截图确认。
## 向后续模块复用前的规则核对(2026-09-14)
本次按实际代码核对国内仓和客户管理样板、公共 CSS、变量、维护合同与应用指引,并以货柜管理的真实菜单/路由检查规范能否复用。
| 检查项 | 发现与处理 | 证据范围 |
|---|---|---|
| 客户详情返回 | 原按钮尚未接入公共返回样式,现使用 `link` + `density-back`;保留纯文字及返回客户列表的事件 | 页面代码及返回入口合同;新视觉待截图 |
| 客户日志行内按钮 | 仍使用独立链接按钮,现接入灰色 `density-action`;日志面板自身导入公共 CSS 并显式接入密度根 | 独立组件入口、权限与详情查询测试 |
| 公共颜色变量 | 斑马纹和描述表标签底色绕过了已定义变量,已接回;各语义按钮悬停浅底改由公共变量提供 | 变量定义、消费与状态规则合同 |
| 浮层覆盖 | 国内仓父子订单关联抽屉缺少独立密度类,已补齐;合同新增抽屉检查 | 弹框/抽屉显式入口,不依赖页面祖先 |
| 后续接入说明 | 增加完整页面/弹框示例、共享模式边界、检查清单扩展与代码/视觉证据界限 | 《Admin 高密度界面规范》“新模块接入规则”及 Admin 指引 |
结论:公共基线和接入规则可用于后续 Admin 页面;新增页面仍须逐操作接入和验收,不能只导入 CSS 就称为完成。货柜管理 4 个菜单及 DOMESTIC/OVERSEAS 共享边界已登记在 [货柜管理核对记录](Admin货柜管理样式核对记录.md),尚未实施其页面改造。
本次定向测试 85/85、全量测试 249 个文件与 1915 项测试、类型检查、构建、AGENTS 索引合同 1050 项及文档链接检查通过。未执行部署或业务数据写入;修复后的页面视觉仍待人工截图确认。
## 人工验收步骤
统一采用 1920×1080、浏览器缩放 100%。每项包含空态、长内容、禁用及加载反馈;涉及真实业务提交时按人工验收数据操作。
1. 客户列表:筛选、查询/重置、列设置、分页,以及按钮最多的行;核对按钮间距和颜色、更多菜单、权限变化后的操作列。
2. 新增/编辑客户:三列表单、校验提示、长公司名称、资质上传与有效期;检查滚动、底部按钮、全屏和重开。
3. 客户审核与凭证相关弹框:企业资料、资质预览、审核理由、密码显示/复制、跳转登录理由及删除确认;核对信息完整和处理中锁定。
4. 客户详情:基本信息四组字段、联系信息三组字段、长地址/邮箱/文件名、资质预览及企业成员表;核对彩色页签与返回/编辑按钮。
5. 计费规则及海外仓费用:只读分组、默认规则入口、规则编辑、币种与多档阶梯、取消和未保存提示;核对单位、公式与底部操作。
6. 操作日志:筛选、详情抽屉、成功/失败记录及快照长内容。
7. 海外仓阶梯费用列表:多档位行、横向空间、编辑弹框两类费用并排、档位增删后的表格及校验。
## 2026-10-20 蓝白样式接入
沿用上方逐操作矩阵及现有承载。客户列表、客户详情、海外仓阶梯费用三个路由页面,以及实际调用的计费规则、海外仓费用和审计面板显式接入 `admin-workbench`;列表使用外层 `workbench-table`,资质预览、编辑、审核、密码、凭证及危险确认保留各自尺寸和处理逻辑。详情成员表及阶梯表复用 `density-table` 与 `workbench-evidence`,移除原有重复表格外观;正常规则标题的“箱规计算说明”支持键盘聚焦,长公式从常驻横栏移入说明,初始化、权限与错误提示仍常驻。
不恢复当前已注释的运营指标区;`CustomerOperatingMetricCard` 无活动渲染入口,本批未修改。箱规与权重的数据层 `dimension-config` 保持原样。审计详情继续使用抽屉,业务脚本与绑定未变。定向验证及本批共同限制见下述结果;视觉均为待人工截图确认。
本组自动核对:31 个 Vue 模板及样式编译、业务脚本与模板指令对比通过,37 处表格外层、39 处弹框、7 处抽屉作用域通过。61 个受影响测试文件共 611 项已通过首轮及失败项修正后的定向复验;箱规说明以真实组件聚焦验证可读。随后按总控公共合同补齐七处 `is-drawer` 与独立查询栏 `workbench-query`,对应七文件 95 项复验通过,最终 SFC/绑定核对再次通过。全量测试、类型检查与构建由本批总控统一执行;本记录不宣称已部署或已完成人工验收。
2026-10-20 用户追加修正:整页主列表与详情外壳使用 `is-page-surface` 取消外围整圈边框、圆角与阴影,页面保持连续白底;本组共 22 处主列表和 6 处详情容器,内部子表、指标/图表卡片、独立并列面板及弹框保持原边界。布局、内边距和脚本不因本修正改变;公共规则与全量门禁由总控统一收口。财务相关三文件 41 项定向复验通过,视觉仍待人工截图确认。
## 2026-10-21 弹框可用性回归
确认的问题:新增/编辑客户仍为已确认的 1120px 居中框,但基础资料与联系商务的短字段回退成两列;资质区前的表单因此加长。恢复两个分组每行三个短字段,保持原字段顺序、必填项和绑定;注册资本、地址、备注保留整行。普通标签宽度为 120px,较长的统一社会信用代码标签单独保留 144px。客户计费、资质预览、审核、结果及危险确认的原有承载未改。
实际挂载验证包含三列单元格与整行跨列、客户名称真实 blur 校验后的错误提示、底部保存入口、原编辑与资质预览行为。测试插件按本项目其他 Element 行为测试采用同一 CJS 运行时,避免混用 ES/CJS 表单上下文使校验无法触发。客户 34 项和消息中心 22 项定向回归通过;该结果只证明挂载与交互,不证明真实排版已验收。普通/全屏、长公司名称、信用代码、文件名、多条错误、关闭重开与预览关闭后返回编辑,均待用户 1920×1080、100% 人工截图确认。
## 2026-10-22 客户编辑表单确认
用户提供当前客户编辑弹框截图并确认继续采用这套输入控件外观;通用规则唯一维护在[Admin 界面规范“输入框与字段”](Admin高密度界面规范.md#输入框与字段),本节仅记录本窗口落点。
- 保留 1120px 弹框、三列短字段及注册资本/地址/备注整行;普通标签 120px,“营业执照企业名称”和统一社会信用代码标签单独 144px。
- 输入控件白底、浅灰边框、8px 圆角,悬停加深、聚焦蓝框;注册资本与账期数字左对齐,客户昵称占位文字为“选填,默认自动生成”。通过 `density-form--outlined` 接公共边框,客户模块仅限定本编辑框的圆角与数值对齐。
- 删除底部保存/审核流程说明及已登记信用代码旁的只读说明;信用代码仍按原资格只读,保存、资质上传及提交审核行为不变。“企业认证资料”、帮助入口和现有状态标签同一行。
- 用户截图已核对输入边界和企业名称标签单行;后续数字对齐、占位文字及状态同行调整已获用户确认纳入规范。未据此推定资质区下半部分、错误态、普通/全屏及关闭重开的全部场景均完成视觉验收。相关定向检查已通过,本次写规范仅核对文档差异与引用,不重复执行业务测试。
+139
View File
@@ -0,0 +1,139 @@
# Admin 按钮与订单状态颜色清单
核对日期:2026-09-15。以下为当前工作区源码事实,不代表测试环境已部署。范围为公共按钮样式、公共状态徽标、国内订单列表/详情/审核状态、海外尾程订单列表与详情;不是所有业务模块的完整状态机盘点。清单先按源码盘点;后续已补齐的预装清单颜色映射单列记录。业务状态与状态文案未调整。
## 统一情况与修改入口
| 对象 | 当前统一程度 | 修改入口 |
|---|---|---|
| 接入 `density-action` 的行内按钮 | 色值、边框、悬停/禁用/焦点、尺寸集中;页面通过 `data-tone` 选择语义 | `apps/admin-web/src/styles/adminDensityTokens.css`、`adminDensity.css` |
| 顶部查询/新增/提交等 Element 按钮 | 使用基础主题,与行内按钮是两套色板 | `apps/admin-web/src/styles/foundation.css`,Element 主题 |
| `StatusBadge` 订单状态徽标 | 公共外观已集中;颜色仍直接写在 CSS 中;按中文文案判断类型 | `apps/admin-web/src/shared/components/StatusBadge.vue`、`src/styles/index.css` |
| 国内订单状态文案 | 状态码到文案集中;文案到颜色在另一处 | `apps/admin-web/src/modules/unified-orders/status.ts` |
| 尾程订单详情 | `OverseasDetailShell` 的 `dense` 分支复用 `StatusBadge` | `apps/admin-web/src/modules/overseas-warehouse/components/OverseasDetailShell.vue` |
| 尾程订单列表 | “当前状态”直接输出文本,没有状态徽标插槽 | `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue` |
| 扣货状态等 `el-tag` | 独立走 Element 标签主题,不等同于 `StatusBadge` | 对应页面 `type/effect` + 基础主题 |
结论:有公共入口,但尚未形成全应用唯一色板、唯一状态映射和唯一状态展示组件。修改按钮色不会同步修改订单状态徽标。
## 行内按钮色板
普通背景均为白色 `#fff`;文字与边框分别配置。默认蓝色已经按用户确认改为 `#1777ff`。
| 语义 / `data-tone` | 文字颜色 | 普通边框 | 悬停背景 | 现有用途示例 |
|---|---|---|---|---|
| 默认 / 省略或 `neutral` | `#1777ff` | `#dfe3ee` | `#f8fafc` | 详情、编辑、备注、省略号 |
| 主要 / `primary` | `#1677cf` | `#bfdbfe` | `#eff6ff` | 指定为主要操作的行内按钮 |
| 成功 / `success` | `#15803d` | `#bbf7d0` | `#f0fdf4` | 启用 |
| 警告 / `warning` | `#c76500` | `#fed7aa` | `#fff7ed` | 审核、暂扣等需注意的操作 |
| 危险 / `danger` | `#dc2626` | `#fecaca` | `#fef2f2` | 停用、删除、驳回 |
| 紫色 / `purple` | `#7c3aed` | `#ddd6fe` | `#f5f3ff` | 测量、重置密码 |
`warning`/`danger` 是按钮操作的语义,不会根据“异常”“成功”“失败”等按钮文字自动识别。页面需要显式选择类型。
| 交互状态 | 公共规则 |
|---|---|
| 普通 | 高 28px、圆角 6px、白底、1px 描边,13px / 600 字重,padding 4px 10px |
| 悬停 | 文字保持语义色,边框变为文字同色,背景使用上表悬停色 |
| 按下 | Element active 色变量使用相同语义色和悬停背景 |
| 键盘焦点 | 2px 同语义色轮廓,外偏移 2px |
| 禁用 | 文字 `#a1a1aa`、边框 `#e5e7eb`、白底;文字颜色目前直接写在 `adminDensity.css` |
| 加载中 | 沿用所属按钮的语义色与 Element loading 行为,无独立 loading 色板 |
## 顶部按钮基础主题
| 主题 | 基础色变量 | 当前值 |
|---|---|---|
| 主要 | `--cc-primary` → `--el-color-primary` | `#667eea` |
| 主要悬停 | `--cc-primary-hover` | `#764ba2` |
| 成功 | `--cc-success` → `--el-color-success` | `#067647` |
| 警告 | `--cc-warning` → `--el-color-warning` | `#b54708` |
| 危险 | `--cc-danger` → `--el-color-danger` | `#b42318` |
| 信息 | `--cc-info` → `--el-color-info` | `#175cd3` |
这些是基础语义值;实际按钮的实心/描边、禁用和悬停颜色还取决于 `type`、`plain` 和 Element 主题变量。不能把此表视为每个按钮最终计算样式。修改 `--cc-primary` 还可能影响导航、页签等,不能只为按钮颜色直接整体替换。
## 订单状态徽标色板
统一外观:胶囊形、最小高度 24px、padding 2px 8px、圆点 6px、间距 6px、字重 650,字号读取 `--cc-list-status-font-size`(基础默认 11px)。圆点使用文字色。
| 类型 | 文字 / 圆点 | 背景 | `StatusBadge` 当前精确匹配的中文文案 |
|---|---|---|---|
| 默认 `neutral` | `#475467` | `#f2f4f7` | 所有未匹配下面映射的文案 |
| 成功 `success` | `#067647` | `#ecfdf3` | 正常、启用、已完成、已审核、审核通过、已入库、已出库、装柜完成、派送完成、已确认、已放舱 |
| 警告 `warning` | `#b54708` | `#fffaeb` | 待审核、草稿、待处理、待分配、未提交、未录入、待测量数据、待分柜、待装柜、预装柜中、待出库、已拣货、变更中 |
| 危险 `danger` | `#b42318` | `#fef3f2` | 停用、已取消、已驳回、审核驳回、失败、订舱失败 |
| 信息 `info` | `#3538cd` | `#eff4ff` | 已受理、已订舱、已提交、运输中、处理中、拣货中、装柜中 |
注意:`异常`、`成功` 这两个字面文案本身不在映射中,直接传给 `StatusBadge` 会显示默认灰色;`失败` 在危险映射中。`info` 徽标的颜色与基础主题的 `--cc-info` 不相同。成功/警告/危险虽然当前数值与基础主题一致,但 CSS 直接写死,因此改基础变量不会同步修改徽标。
## 国内订单当前实际映射
由 `unified-orders/status.ts` 翻译后传给 `StatusBadge`,列表主状态和详情沿用这条链路。
| 状态码 | 文案 | 当前徽标类型 |
|---|---|---|
| DRAFT | 草稿 | warning |
| SUBMITTED / PENDING_REVIEW | 待审核 | warning |
| APPROVED | 已审核 | success |
| ACCEPTED | 已受理 | info |
| REJECTED | 已驳回 | danger |
| PROCESSING | 处理中 | info |
| COMPLETED | 已完成 | success |
| CANCELLED | 已取消 | danger |
| WAIT_MEASURE | 待测量数据 | warning |
| WAIT_PALLETIZE | 待一件代发组托 | **neutral:没有专门映射** |
| WAIT_SPLIT | 待分柜 | warning |
| LOADING | 装柜中 | info |
| LOADED | 装柜完成 | success |
| DELIVERED | 派送完成 | success |
审核状态:`NOT_SUBMITTED` 未提交、`UNRECORDED` 未录入、`PENDING` 待审核为 warning;`APPROVED` 审核通过和 `CONFIRMED` 已确认为 success;`REJECTED` 审核驳回为 danger。
## 尾程订单当前实际映射
文案来自 `overseas-warehouse/lastMilePresentation.ts`。下表颜色用于已接入 `dense` 的尾程详情;尾程列表当前状态列仍为普通文本。
| 状态码 | 文案 | 详情当前徽标类型 |
|---|---|---|
| PENDING_ASSIGNMENT | 待分配 | warning |
| DESTINATION_ASSIGNED | 已分配目的仓 | **neutral:没有专门映射** |
| INBOUND_PLANNED | 已生成入库计划 | **neutral:没有专门映射** |
| PENDING_PROCESSING | 待处理 | warning |
| PROCESSING | 处理中 | info |
| COMPLETED | 已完成 | success |
| CANCELLED | 已取消 | danger |
## 预装清单状态
2026-09-15 根据用户截图补齐公共徽标映射;预装列表与使用同一徽标的详情同步生效,不改变业务状态、文案、权限和操作。其他入口传入相同状态文案时也使用公共语义色。
| 状态码 | 文案 | 语义 | 文字色 / 背景色 |
|---|---|---|---|
| WAIT_LOADING | 待装柜 | 等待,warning | `#b54708` / `#fffaeb` |
| EDITING | 预装柜中 | 计划准备,warning | `#b54708` / `#fffaeb` |
| LOADING | 拣货中 | 进行中,info | `#3538cd` / `#eff4ff` |
| COMPLETED | 装柜完成 | 完成,success | `#067647` / `#ecfdf3` |
| 未知状态 / 空值 | 未知状态 / — | neutral | `#475467` / `#f2f4f7` |
当前预装列表主要显示预装柜中和拣货中,需要直接用颜色区分:预装柜中采用橙色文字与浅橙背景,拣货中采用蓝紫文字与浅蓝背景。两者仍复用公共语义色,不新增页面私有色值。
## 出库单状态
列表与详情使用公共状态徽标;已出库从缺失映射的灰色改为完成绿色。列表明确识别待出库,不再将待出库或未知状态统一显示为拣货中。
| 状态码 | 文案 | 语义 | 文字色 / 背景色 |
|---|---|---|---|
| WAIT_OUTBOUND | 待出库 | warning | `#b54708` / `#fffaeb` |
| PICKING | 拣货中 | info | `#3538cd` / `#eff4ff` |
| PICKED | 已拣货 | warning(待完成出库) | `#b54708` / `#fffaeb` |
| OUTBOUNDED | 已出库 | success | `#067647` / `#ecfdf3` |
| CANCELLED | 已取消 | danger | `#b42318` / `#fef3f2` |
## 后续统一时需要确定的范围
1. 默认蓝 `#1777ff` 已确认;是否将行内主要蓝 `#1677cf` 也统一为该值,尚未修改。
2. 按钮、徽标可共享成功/警告/危险等语义,但文字、背景、边框分别使用变量,避免把徽标改成按钮外观。
3. 状态样式统一放在公共徽标中,颜色提取到公共变量;业务模块按状态码显式提供文案和语义,避免改中文文案导致颜色变化。
4. 补齐待组托、已分配目的仓、已生成入库计划及异常等映射,并统一尾程列表与详情的状态呈现。以上为待调整项,本次未改实现。
5. 对未接入 `density-action`、使用 `el-tag` 或非 dense 详情分支的入口另行定向接入,不能宣称改一处已覆盖全应用。
+46
View File
@@ -0,0 +1,46 @@
# Admin 排车列表一体式布局试点
> 文档职责:仅维护历史试点依据与检查记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
初次试点仅接入测试环境代码的 `/overseas-warehouse/dispatches`。依据为用户提供截图及 `新版.html` 的 `page-outbound-vehicle`(4472–4484 行);用户明确保留字段设置、搜索与表格不分离。2026-09-30 用户确认样板后授权推广至客户管理、国内仓、货柜管理和海外仓,并继续客户服务、海外业务、财务管理、通用、系统管理及消息列表。范围及例外见 [推广核对记录](Admin列表样式推广核对记录.md)。
船期日历单页收尾按用户当前截图接入相同的页头、筛选和连续容器,通过 `results` 插槽保留日历与当日船次详情。日历不具备表格列配置,明确关闭字段设置且不添加分页;日历日期格和右侧详情布局由业务页维护。
## 修改前核对
| 页面/操作 | 参考布局或承载方式 | 当前实现 | 本轮结论 |
|---|---|---|---|
| 排车列表 | 同一容器内:左标题/右按钮、搜索、表格、分页 | 路由标题、独立搜索面板、表格面板及列设置工具栏 | 改为一体式容器,标题只出现一次,字段设置放右上角 |
| 查询/重置 | `search-row` 紧接表格 | QueryToolbar,含 FBA 预约号及筛选布局偏好 | 保留全部筛选与偏好,只调整容器外观 |
| 表格字段设置 | 用户明确要求保留 | DataTable 列显隐/排序及持久化 | 继续使用原组件、原 preference-key |
| 新建/导出 | 参考页顶部有示例按钮 | 正式排车列表无这两项操作 | 仅参考排列,不新增业务功能;公共组件保留 toolbar-actions 插槽 |
| 查看 | 当前正式路由详情页 | DispatchDetailView | 不变 |
| 编辑/转派送 | 当前居中表单弹框 | AppDialog | 不变 |
| 打印 BOL/取消 | 当前 PDF 窗口/二次确认 | 服务端 PDF、ElMessageBox | 不变 |
| 审核/停用/文件上传 | 本列表无相应入口 | 无 | 不新增 |
## 公共接入
`DataTable` 使用 `appearance="integrated"` 启用公共样式,`toolbar-start` 放页面标题,`toolbar-actions` 放已有业务按钮,`filters` 放 QueryToolbar,条件 `state` 插槽放加载错误与重试。表格字段偏好、行操作和分页继续由 DataTable 管理。该模式下标题、搜索、表格共用边框与圆角,搜索和表格间没有卡片外间距。
页面自行关闭列表路由 `showPageHeading`,避免重复标题;详情路由保留原配置。样式唯一维护位置为 `src/shared/components/DataTable.vue`,业务页不复制样式。未在本轮范围内的页面继续保持默认外观。
一体式列表的搜索区默认输入框、选择框、日期框和按钮共用 `--el-component-size: 36px`。选择框默认外框的最小高度由公共 DataTable 同步,避免 Element Plus 固定的 `32px` 与输入框产生高度差;显式 small/large 尺寸及多选换行继续按组件自身规则处理。该规则同时覆盖 QueryToolbar 和搜索插槽内直接使用的选择框。
Admin 仍使用 Element Plus。普通 `el-select` 由构建组件解析器统一接入 `src/shared/components/AdminSelect.ts`,仅将 `filterable` 默认值设为 `true`,使用 Element Plus 原有渲染、插槽、事件和公开方法;列表、表单、弹框及分页选择框均可输入关键词筛选当前选项。已有 `remote-method`、`filter-method`、多选、禁用和清空行为保持原有配置;搜索不改变候选业务范围,也不会自动新增远程接口调用。虚拟托盘选择框 `el-select-v2` 已显式启用远程搜索。
已接入列表的表格“操作”列使用纯文字按钮:无描边、填充或装饰图标,字重为普通正文的 `400`,普通操作蓝色,取消等危险操作红色,悬停无下划线;禁用为灰色,保留加载反馈、键盘焦点和危险确认。通过 `RowActions` 的 `text-actions` 接入,更多菜单使用相同配色与普通字重;已有手写按钮组使用 `row-actions density-actions admin-text-actions`,危险语义仍由原来的 `data-tone="danger"` 或 `type="danger"` 显式提供。搜索区、顶部字段设置、分页、列设置面板及弹框按钮保持原样。公共行操作外观维护在 `src/styles/adminTextActions.css`,随 `adminDensity.css` 加载;未接入页面默认不启用。
推广时列设置显式使用 `column-settings-mode="show"`。已有 `preference-key` 保持,新接入的退货库存、流水和箱号各使用独立偏好键。存在非阻断警告时使用 `notices` 插槽,列表失败时通过 `results-visible` 隐藏结果和分页,标题、查询与重试保持可用;`before-results` 保留原统计与汇总。特殊工作台可使用 `results` 插槽承载原内容和自身分页,公共表格不重置它的页码与每页数量。
列宽保存为公共 DataTable 能力,与已有列设置一同启用(提供 `preference-key` 且列设置可用),不依赖试点样式。拖动表头边界松开时,将宽度按稳定列键写入同一份本地偏好;重排、隐藏再显示不会丢失,刷新/重新进入时恢复。账号与表格分别隔离,仅保存到当前浏览器,不跨设备同步。“恢复默认”同时重置列顺序、显隐和宽度,重新采用页面声明的 width/minWidth。未启用列设置的表格不写入列宽偏好。
## 验收
代码检查与真实页面视觉验收分别记录。视觉待人工在 1920×1080、100% 缩放下截图确认,重点核对顶部字段设置、搜索连表格、长编号、横向滚动、分页、加载/空态/失败重试,以及原有操作权限。
2026-09-29 代码验证:定向 78 项通过;完整 `pnpm test` 的 262 个测试文件、2118 项测试通过;`pnpm build`(含 `vue-tsc --noEmit`)通过。未提交、未部署,当前修改不涉及 API、权限或业务状态。
纯文字按钮追加验证:相关 6 个文件、81 项检查通过,类型检查与构建通过。完整测试运行 2118 项通过、1 项失败,失败为原型合同硬编码了 RowActions 属性顺序;改为检查真实动作绑定后,该文件 21 项定向复测通过。视觉仍待人工确认。
列宽保存追加验证:完整 262 个文件、2125 项测试通过;列属性类型调整后公共表格与偏好存储 33 项再次通过;类型检查与构建通过。覆盖拖动保存、重新挂载、排序与显隐保留、恢复默认、独立表格/账号范围、异常宽度与关闭偏好场景。尚未部署,真实表头拖动效果待人工确认。
@@ -0,0 +1,36 @@
# Admin 测试环境截图验收记录(2026-09-15)
用户本轮明确授权使用内置浏览器在测试环境截图验收。本次采用 1920×1080 视口、100% 浏览器缩放。该授权替代此前默认等待人工截图的方式;不包含提交业务表单、发送消息或部署授权。
本批取得 10 张截图。测试页面已呈现国内订单/尾程订单详情和排车省略号的修改,但首页、消息模板仍与当前本地实现不同。因此仅记录已观察到的页面状态,不将全模块视觉验收标记完成。
截图保存在本机目录:`C:/Users/BY-OY/.codex/visualizations/2026/09/14/01a09f47-4fd9-79a2-ab11-907fafb01423/qa-test-20260915/`。以下文件名均相对于该目录。
| 截图 | 页面或操作 | 本批结论 |
|---|---|---|
| 01-dashboard.png | 首页 | 仍为四张独立指标卡;当前本地已改成连续指标信息表,暂不能验收本地修改 |
| 02-domestic-orders.png | 国内订单列表 | 已留首屏证据;不替代全部状态及操作验收 |
| 03-domestic-order-detail.png | 国内订单详情基本信息 | 返回、业务单号、状态同行;摘要、页签、紧凑信息表可见,未再出现此前原生按钮和无布局字段现象 |
| 04-lastmile-orders.png | 尾程订单列表 | 可见查看、入库计划及纯省略号入口;没有可见“更多”文字 |
| 05-lastmile-order-detail.png | 尾程订单详情基本信息 | 与国内订单详情采用一致的标题行、摘要、页签及信息表样式;其余页签仍需复核 |
| 06-dispatches.png | 排车列表 | 已出发样本只有查看、打印 BOL 两个按钮,没有折叠入口;待发车样本为三个直接操作加省略号 |
| 07-dispatch-more.png | 排车省略号菜单 | 待发车样本菜单包含转派送、取消,共五个操作;入口只有省略号图标 |
| 08-dispatch-edit.png | 排车编辑 | 弹框居中、三列表单,底部取消和保存可见,截图中未见遮挡;未修改字段,已取消 |
| 09-message-templates.png | 模板管理列表 | 仍为旧样式,页面缺少本地的 admin-density 入口;长列表及按钮暂不能验收为当前版本 |
| 10-template-create.png | 新增消息模板 | 已记录旧版弹框外观;未填写或保存,已取消,部署后需重新截图 |
## 测试页面与本地实现差异
- 首页本地 `apps/admin-web/src/modules/dashboard/pages/DashboardView.vue` 使用密度入口及连续指标表;实际测试截图仍显示四张卡片。
- 模板管理本地 `apps/admin-web/src/modules/notifications/pages/MessageTemplatesView.vue` 使用 `admin-density` 与 `density-action`;测试 DOM 的页面根未包含该入口,已观察到的禁用按钮仍为 `el-button--primary is-link`,高度约 21px。
- 本地 `TemplateEditorDialog.vue` 已显式接入 `admin-density-dialog`。测试截图不作为这部分新样式的通过证据。
以上证据表明当前测试页面未呈现全部本地修改;本批未核实测试部署的精确提交号,不能将差异归因到某一次部署。
## 后续验收范围
1. 获得单独的 Admin 测试部署授权后,按部署指南发布本次相关修改并确认版本,再复核上述差异。
2. 继续按各模块记录覆盖列表、新增、编辑、详情及各页签、确认框和操作菜单;样本未覆盖的权限、状态、长内容保留待验收。
3. 本批未提交业务表单、未发送消息、未变更业务数据,也未部署。消息详情可能自动标记已读,需在后续操作前纳入授权范围判断。
本地既有门禁为 253 个文件 / 1982 项测试、类型检查、构建及差异检查通过;本批只新增截图记录,不将离线检查替代浏览器视觉验收。
+32
View File
@@ -0,0 +1,32 @@
# Admin 海外业务样式核对记录
## 范围与修改前逐操作核对
当前三菜单映射到 `apps/admin-web/src/modules/overseas-business/routes.ts` 的 9 个路由、5 个页面文件。原型入口为 `悦/货代SAAS平台后台/prototype-src/modules/07-overseas-business.html`。通用样式按本轮国内订单样板,字段/权限/业务承载以已实现契约和当前用户要求为准。
| 页面/操作 | 原型证据 | 当前实现 | 本轮修正 |
|---|---|---|---|
| 采购列表查询、详情、编辑 | `page-overseas-purchase` 第 2 行 | `PurchaseOrdersView`,详情/编辑两个操作 | 公共密度、纯文字描边按钮、左侧操作列,保留查询和分页 |
| 采购新增 | 第 14 行明确历史新增模板不可达 | 后台无新增路由/API | 不补建新增能力 |
| 采购详情 | `page-overseas-purchase-detail` 第 204 行,商品/库存/订单/快递/操作记录 | `PurchaseOrderDetailView` 独立页面,四组信息与四组业务表 | 返回、编号和状态合并;实际事实摘要;按原顺序连续键值表;取消独立字段卡片式排版 |
| 采购审核通过/拒绝 | 原型详情为动态内容;当前已接入服务端审核 | 520px 居中 `reviewDialogOpen`,备注、版本和幂等键 | 保留承载与请求,显式接入弹框密度并展示审核业务对象 |
| 签收文件、凭证上传、登记费用 | 当前详情实际上传入口,原型未完整定义 | 系统文件选择、560px 费用弹框 | 保留现有文件生命周期与冻结说明,统一弹框和表单;无预览/删除入口不虚构操作 |
| 采购编辑、出库明细添加/删除、保存/取消 | `page-overseas-purchase-edit` 第 143 行,独立页面 | `PurchaseOrderEditView` 三列表单、出库明细行、未保存保护 | 同行返回、业务编号;紧凑分组及表单;保留入库资格、全部字段、三态 PATCH 与未保存保护 |
| 本土卡车列表、新增、编辑 | 第 58/83/332 行 | `TransportOrdersView domain=truck`、`TransportOrderFormView` 独立页面;原型 760px,现实现 900px 表单 | 保留新增/编辑承载;同一白底表单区域、统一控件和行内编辑按钮,按字段组保留两/四/五列布局 |
| 本土散板列表、新增、编辑 | 第 222/247/390 行 | 上述共享页的 `domain=looseboard` 模式 | 同上,同时保留散板方式、是否打盘与权限状态差异 |
| 卡车/散板详情、资料、删除 | 卡车原型第 313 行存在详情,当前正式路由与列表只开放新增/编辑 | 无对应只读详情/资料上传/删除入口 | 记录当前可达范围,不恢复历史功能,不将其标记为已验收 |
共同问题:5 页均未显式接入公共密度样式;详情/表单头部返回靠右、重复标题/编号标签,编号缺失时回退路由参数;旧局部字号/大间距与公共规则冲突。本轮按实际字段重排,业务请求与权限不改。
## 验证
代码修正已完成;所有页面及弹框的修正后视觉效果待人工截图确认。
## 本轮检查结果
- 全量 251 个测试文件、1,942 项通过;类型检查、生产构建及差异空白检查通过。
- 密度合同已纳入本组全部页面和真实 Teleport 弹框,覆盖公共样式独立导入、实际祖先、行内按钮、标签与字号规则。
- 本组视觉仍待人工截图确认;代码和组件测试不代表页面视觉验收。
- 采购/卡车/散板编辑区域均限制在 1120px 连续白底区域,标题和表单同宽;采购出库明细保留独立行、完整输入和删除操作。该宽度属于本组业务布局,不改变全局页面宽度。
- 组件回归覆盖采购 23 个信息字段/4 个业务分组/4 个长字段跨列,以及凭证选择、上传、登记费用、审核后按钮隐藏;原有分页、409 输入保留、幂等重试和卡车/散板状态限制全部通过。
+396
View File
@@ -0,0 +1,396 @@
# Admin 海外仓样式核对记录
> 文档职责:仅维护模块范围、业务例外与检查/截图记录。通用样式统一以 [Admin 界面规范](Admin高密度界面规范.md) 为准;下文日期批次中的旧外观不再作为新改造要求。普通样式任务只在涉及本模块范围、例外或验收证据时查阅本文。
## 范围与依据
本轮用户确认继续“海外仓”模块。范围以 `adminNavigation.ts` 的 `overseas-inventory` 分组为准,按当前公开菜单、对应独立详情和实际调用的作业弹框逐项核对;当前分组包含11个菜单,废弃单和海外库位管理均单独登记。客户服务、海外业务、隐藏产品库和旧箱号页面不在范围内。
视觉采用 [Admin 高密度界面规范](Admin高密度界面规范.md),保留当前路由、字段、权限、服务端状态资格及操作承载方式。原型入口为 `悦/货代SAAS平台后台/prototype-src/modules/03-overseas-warehouse.html`;入库、出库、换标、托盘详情分别见 706、714、720、726 行,尾程列表/详情见 894/927 行,库存详情/流水见 974/1022 行。当前真实业务契约优先于历史原型占位。
## 修改前逐操作矩阵
页面文件均相对 `apps/admin-web/src/modules/overseas-warehouse/`。原型未覆盖的新操作保留现有承载方式,不新增业务流程。
| 菜单/入口 | 操作及源码证据 | 当前承载与尺寸 | 本轮结论 |
|---|---|---|---|
| 尾程订单 | `LastMileOrdersView` 查询、导出、查看、更多;`LastMileOrderDetailView` | 独立详情;基本/货物/计划/费用/日志页签 | 纯文字行内按钮、彩色页签、连续信息表、同行返回 |
| 尾程订单 | `transferOpen`、`inboundPlanOpen` | 转仓默认宽度、入库计划 720px 居中框 | 保留确认、候选、版本,接入弹框密度 |
| 尾程订单 | `containerConvertOpen`、`containerDetailOpen`、`receivingWarehouseOpen` | 预览 1240px、柜详情 1120px、接柜仓 600px | 保留逐柜预览/阻断及当前隐藏入口,不恢复隐藏菜单 |
| 尾程订单 | `holdOpen`、`manualNodesOpen` | 暂扣 620px、节点 700px | 保留原因、计费、节点原子提交,紧凑表单 |
| 尾程订单 | `WarehouseTransferReviewDialog` | 转运审核 920px | 保留审核/驳回、货物与打托实测、按钮资格 |
| 尾程详情 | `feeDialogOpen` | 新增费用 720px | 保留金额/币种/保存流程 |
| 入库单 | `InboundOrdersView` 查看、编辑计划、预约;`InboundOrderDetailView` | 独立详情;预约 1080px;计划编辑默认框 | 保留只读费用空态、预约模式,统一按钮与描述表 |
| 入库单 | `SmartDispatchDialog` | 1800px 三栏作业框;车型选择 360px | 保留拖拽、锁定、容量、超重与预排车;只压缩普通控件 |
| 排车列表 | `DispatchesView` 查看、BOL、更多、取消;`DispatchDetailView` | 独立详情;PDF 原打印流程;取消确认框 | 保留返回目标、直接操作及危险确认 |
| 排车列表 | `transferOpen`、`editOpen`、`removePallet` | 转派送 1120px;编辑 900px;移除确认框 | 保留费用/箱唛/托盘事实,描边行内操作 |
| 出库单 | `OutboundsView` 新建、查看、取消;`OutboundDetailView` | 新建 1320px;独立详情;取消原因框 | 保留一件代发/退货两模式、选择表、PDA 提交 |
| 派送单列表 | `DeliveryOrdersView` 查看、编辑状态、标记退货 | 独立详情;状态 520px;退货 720px | 保留原出库明细可退数量与去向;统一按钮 |
| 派送详情 | `DeliveryOrderDetailView` 四页签 | 订单/SKU/费用/操作,内容在页签内 | 彩色页签且所有正文保持可见,去重复正文标题 |
| 派送单资料 | `DeliveryDocumentsDialog` 上传、替换、删除、下载、保存、重新加载确认 | 1040px;关闭放弃未保存修改 | 保留文件生命周期,正文单一滚动区 |
| 换标单 | `RelabelOrdersView` 新增、审核、查看 | 760px 表单;独立详情 | 保留创建与审核模式、状态候选与必填字段 |
| 换标详情 | `RelabelOrderDetailView` 完工证据、总 PDF、明细 PDF 上传/预览 | 连续详情、预览 900px | 保留 PDF 物理预览尺寸与绑定数据,紧凑文件行 |
| 托盘管理 | `PalletsView` 汇总、新增、编辑、查看;`PalletDetailView` | 顶部四张等宽统计卡片,采用公共紧凑卡片及图标样式,不继承186px最小高度;760px 表单;独立详情 | 统计卡片按2026-10-22用户参考截图并依后续反馈压缩高度:白底圆角、浅色图标、蓝色数字和“个”单位;原四项统计与筛选口径、仓库编辑限制保留;压缩后待人工1920×1080、100%缩放截图确认 |
| 库存管理 | `InventoryView` 汇总、查看、导出;`InventoryDetailView` | 独立详情,库位/托盘箱号/流水表 | 连续汇总、信息表;不改变库存口径 |
| 库存流水 | `InventoryTransactionsView` 导出、返回、关联数据 | 列表深链;共享关联框 1060px | 只为本轮调用显式接入共享框,保留分区域只读权限 |
| 退货库存管理 | `ReturnInventoryManagementView mode=inventory` | 库存/流水页签、查询、分页 | 两页签保留各自数据和查询模式 |
| 退货箱号管理 | `ReturnInventoryManagementView mode=cartons` 查看、箱唛打印 | 详情 1080px;现有 HTML 打印 | 统一详情按钮/信息表,不修改打印内容或尺寸 |
## 共享边界和验收
- `OverseasDetailShell`、`OverseasReadOnlyDetail`、`InboundCodeRelationshipDialog` 显式 `dense` 接入;默认调用保持原样。
- 公共字号、间距、按钮、页签和键值表只使用公共密度变量与类;模块仅保留业务布局与作业区尺寸。
- 最终全量 `pnpm test --maxWorkers=4`:1,927 项通过;`pnpm typecheck`、`pnpm build` 通过;索引合同 1,050 项通过。新增合同核对 10 个导航入口、两种退货模式、详情祖先样式、Teleport 接入和共享组件关闭状态。
- 尾程与派送详情的 `density-contained-tabs` 保留所有页签正文;智能排车将原操作按钮移入固定 footer 插槽,保留预排车事件与原三栏作业区。
- 页面事件、请求和状态门禁保持原有业务逻辑;本轮没有部署或修改环境数据。复核修正托盘标题的内部 ID 回退,出库仓库名称仅采用同仓关联派送返回的名称;缺失或关联不一致时显示“—”。托盘 DTO 目前未返回库位编码,详情保留空值,不展示 `locationId`。
- 托盘汇总移除与页面 `gap` 叠加的底部间距;删除已被公共按钮组接管的局部间距及空样式规则。
- 默认高并发全量回归出现分散用例的偶发失败;失败项定向复跑通过,随后在不修改断言或超时的情况下限制为 4 并发,全量通过。托盘加载/失败时不展示内部 ID、出库仓库名称匹配/缺失/不一致均有组件回归证据。
- 本地 5173 端口的 Vite 服务进程指向当前 `chongchong-global/apps/admin-web` 工作区;这只证明服务路径,不代替页面视觉证据。
- 全部 10 个菜单及详情/弹框均 **待人工截图确认**,验收为 1920×1080、浏览器缩放 100%。
## 用户截图复核修正
2026-10-21 接续原“整理页面风格”对话的两张截图:`b93804b4-c276-49bb-bc41-7fc054f889f5` 显示排车顶部执行阶段比下方审核分区多缩进一层;`72efa811-a846-41a4-a074-3dde6d4c2ae0` 为用户指定的销量分析灰白行底色样板。本次仅调整公共对齐与表格斑马纹,修复后仍待人工截图确认。
| 操作 | 截图现状与目标 | 本次修正 |
|---|---|---|
| 排车列表执行阶段切换、审核分区及筛选 | 顶部页签叠加工具栏 12px 缩进,下方分区未叠加 | 主列表首个状态页签由公共样式抵消重复缩进;前置返回按钮、嵌套列表保留自己的间距与布局 |
| 排车及其他标准列表查看、悬停、选中 | 多数列表显式关闭斑马纹;销量分析默认灰白相间 | 清理历史关闭属性,使用 DataTable 默认斑马纹;保留悬停/选中提示和业务行色,行底色不穿透内嵌表 |
| 主列表底部分页 | 用户补充底部 padding 过大;集成列表仍为最小 64px、上下 14px | 公共主列表分页收紧到最小 48px、上下 6px、左右 12px;保持按钮尺寸与换行,内嵌表格不继承该布局;待人工截图 |
用户提供尾程详情与国内订单详情截图后,确认上一轮仅接入密度变量不足以达到样板一致:尾程存在重复页头标签、缺少业务摘要、自定义绿色状态边框、页签首项贴边且选中底色缺失、基本信息被两个标题拆断。截图证据为本轮附件 f76bcf5f(尾程)与 151a1d06(国内样板)。
| 操作 | 样板及现状 | 本次修正 |
|---|---|---|
| 尾程详情页头 | 国内为返回列表、业务编号、状态;尾程额外展示页面标题和编号标签 | 共用页头排版,仅保留业务编号;复制功能缩为轻量图标 |
| 状态 | 国内使用带圆点的 StatusBadge;尾程将全部已接入状态画成绿色 | 使用同一状态徽标,待分配按待办语义展示 |
| 概览 | 国内摘要位于标题和页签之间;尾程没有 | 展示客户、海外仓、箱数、托数、体积和最近更新,均取当前订单事实 |
| 页签 | 原生与 Element 两套样式存在实际差异 | 共用选中底色、字号、内边距、下划线,保留 Element 键盘切换及五页签正文 |
| 基本信息 | 国内连续键值表;尾程两个标题与两个表 | 保留全部字段顺序,合并为连续表;长备注按两组字段宽度展示 |
上述截图证明原版本存在差异,不作为修正后视觉通过的证据。
- 按本轮补充要求复核操作按钮:尾程订单、排车按当前行权限和状态统计实际显示操作,3 个及以下全部直显,超过 3 个才出现“更多”;直接操作优先保留查看、编辑/计划、打印。其余海外仓菜单操作列最多 3 个,继续直接显示。
### 本次截图修正的验证结果
- 新增尾程详情组件回归:单一业务标题、待分配状态语义、紧凑复制、实际摘要(含零箱数)、19 个基本字段、长备注、返回路由与 5 个页签可达。
- 新增尾程/排车权限组合回归:1—3 个操作直接显示,4—5 个操作才显示“更多”,并保留高频操作。公共样式合同校验国内原生与海外 Element 页签共用同一组外观规则。
- 全量执行 251 个测试文件、1,940 项:1,938 项首轮通过;另两项是旧的 230px 列宽及单一标题类名断言,按新规则更新后,其所属两个测试文件定向复跑全部通过。类型检查、生产构建及差异空白检查通过。
- 修正后仍待人工页面截图核对;本次代码与组件验证不作为浏览器视觉验收通过的依据。
### 折叠按钮文字修正
- 用户截图 f21098e6 确认折叠入口只展示省略号图标。尾程订单、排车列表移除可见“更多”文字,保留悬停提示和无障碍名称;超过 3 个操作才折叠的判断保持不变。
- 本次折叠按钮修正:全量 1,940 项测试、类型检查与生产构建通过。
### 新建出库单搜索、批量选择与分页(2026-09-15)
依据用户截图 `codex-clipboard-6a1295e8-ae69-44de-86bd-a0dd22446396.png`,仅调整 `OutboundsView` 的新建弹窗:
| 操作 | 截图现状 | 修正 |
|---|---|---|
| 仓库选择 | 下拉框的搜索能力不明显 | 保留可搜索下拉,提示输入名称/编码;选项同时展示名称与编码,可清空重选 |
| 订单搜索 | 已有关键词查询 | 保留订单号、入库单号、客户、托盘号、SKU、品名查询,增加搜索图标和无障碍名称;输入后查询或回车生效 |
| 批量选择 | 只有逐行复选框 | 表头全选本页;取消本页仅影响本页,翻页保留选择。按用户后续截图要求移除独立“全选筛选结果/清空选择”按钮行,已选总数并入分页左侧 |
| 客户/仓库限制 | 提示仅提及同一仓库,但接口还要求单一客户 | 保留同一客户、同一仓库提交限制;跨客户勾选后明确提示,用户可取消勾选并按客户查询 |
| 分页 | 每页条数文字不可见;内容过长时分页靠近弹窗底部 | 收窄表单全宽选择器范围,分页条数下拉固定 128px;增加每页 50 条、当前/总页数、跳页;条数变化回到第一页 |
| 长列表 | 增加每页条数会拉长整个弹窗 | 候选表格内部滚动,最大高度 360px;分页可换行,退货分支的分页条数宽度同步修正 |
后续截图 `codex-clipboard-1adadeb3-9d55-4c41-81c1-d6dafba87293.png` 确认搜索与批量按钮占行过多:海外仓搜索(280px)和一件代发订单搜索及查询/重置(640px)同排,移除独立批量按钮行,已选数并入分页左侧。普通说明收为单行文字,跨客户警告仍保留,备注默认一行并按输入自动增高至三行。
已增加真实组件回归覆盖分页选择、筛选后跨页勾选、半选状态、每页条数切换、仓库变更清空选择、提交明细数量以及多客户提交门禁。仅使用测试 Mock 验证提交,无真实出库单创建或 PDA 推送。修正后视觉仍待 1920×1080、100% 截图确认。
## 统一弹窗整理:尾程订单主窗口(2026-10-20)
依据当前统一弹窗样板、浅色背景、无左侧色条和连续编辑表;当前入口为尾程订单列表、独立详情及列表调用的WarehouseTransferReviewDialog。截图编号唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),本组为279—309。最近指引与旧样式矩阵中的转运审核尺寸不一致时,按当前实际420px简短确认保留,只提交APPROVE,不恢复旧详细审核或新增驳回功能。
| 操作 / 状态 | 当前承载与尺寸 | 本组处理 | 保留边界 |
|---|---|---|---|
| 转仓 | AppDialog,默认560px | 票数标题、连续FBA/备注、全屏 | 公共ACTIVE FBA仓、空态/错误、原选择与转仓请求 |
| 按柜生成与恢复资源 | AppDialog,1240px | 连续选择、浅绿服务端汇总、浅蓝分组、结果表、全屏 | 托数/阻断/快照及原请求重试、完整结果和原确认门禁 |
| 单票入库计划 | AppDialog,720px | 冻结资料文字、浅黄连续登记、全屏 | 原托数约束、一件代发固定托数、开关/备注、版本与幂等键 |
| 暂扣 / 解除 | AppDialog,620px | 单号标题、连续状态/计费/原因、全屏 | 原开放状态、原因、0版本和原请求 |
| 人工节点 | AppDialog,700px | 单号标题、八行连续时间表、全屏 | 全部8项、0版本、原警告及完整提交 |
| 换标退回重做 | AppDialog,620px | 换标号标题、连续单号/原因、全屏 | 原应用候选、复核任务版本、原因及幂等键 |
| 仓储转运审核 | AppDialog,420px,align-center | 单号标题、浅蓝客户和确认后果 | 原返回/通过、无详情请求、原客户范围及提交锁定 |
| 详情新增费用 | AppDialog,720px | 单号标题、连续费用登记、全屏 | 原应收/应付、USD/CNY、供应商、期间、数量与完整载荷 |
| 合托、废弃/退货/贴标审核及换标确认 | 原ElMessageBox | 业务单号/勾选票数标题 | 原通过/驳回/取消/关闭分支、原因校验、权限与请求 |
原隐藏柜子详情及接柜仓修改窗口保留,不恢复隐藏页签;旧隐藏工作台样式未借本轮扩大处理。原单票/按柜命令与服务端事实、版本、幂等、未知结果及资源恢复逻辑不变。普通来源说明改为InlineHelp;清关后不可更改、固定托数、人工节点覆盖、阻断与资源未确认等提示保留可见。节点表和按柜分组取消内部纵向限高,正文承担主要滚动;横向业务列宽保留。全部写入只以本地Mock验证,不执行真实计划、库存、节点、审核或费用写入。
详情内WarehouseTransferFulfillmentPanel库存分配、WarehouseTransferReceiptPanel签收箱号/增加预报/箱内清点三个子窗口在下节接续;其余海外仓正式菜单尚待整理,本组不视为整个海外仓完成。
自动检查:12个文件、211项定向检查通过;类型检查与构建通过;全量432个文件、3796项测试通过。均通过统一local-check入口串行执行,沿用用户本轮授权的Node 6GB堆上限。冻结的30项源码、测试、共享组件、声明和构建输入前后哈希一致;生成声明与依赖/构建配置未改变,git diff --check通过。主清单1—309号连续且无重复。回归修正了费用标题误传订单对象和计费单位显式disabled覆盖表单保存锁定的问题;原费用载荷不变。
仅完成本地实现与自动检查,未提交、推送、部署或写入测试业务数据;279—309号视觉待人工1920×1080、100%缩放截图确认。
## 统一弹窗整理:转运分配与签收子窗口(2026-10-20)
沿尾程独立详情的实际import进入WarehouseTransferFulfillmentPanel和WarehouseTransferReceiptPanel;同票出库/目标仓实收仍由WarehouseTransferMovementPanel原页面内操作承担,本批不改变承载方式。截图编号310—321唯一维护在[跨模块清单](Admin国内仓样式核对记录.md)。
| 操作 / 状态 | 当前承载与尺寸 | 本组处理 | 保留边界 |
|---|---|---|---|
| 库存来源分配 | AppDialog,1320px | 转运号标题、浅绿数量核对、浅蓝完整候选表、全屏 | 原客户/库存权限、可分配箱数、选择总量、来源阻断、冻结原请求与明确拒绝后重新选择 |
| 签收箱号明细 | AppDialog,1120px | 转运号标题、已清点箱汇总、连续箱号表、全屏 | 只统计COUNTED箱,原托盘/箱唛/SKU/尺寸/重量/体积和箱内入口 |
| 增加预报箱数 | AppDialog,520px | 原箱数与增加后核对、浅黄连续表单、固定底栏、全屏、失败诊断与输入保留 | 原客户/单号、开窗箱数快照、expectedPackageCount及最终packageCount;正整数与既有5000箱上限同时约束按钮和提交入口 |
| 箱内清点明细 | AppDialog,820px | 箱唛标题、只读箱唛/清点时间、浅蓝多SKU实收、直接展示差异原因、全屏 | 原混箱SKU、件数与品名;子窗口关闭后保留箱号父窗口和其全屏状态 |
三个弹窗内DataTable显式以空max-height取消其默认纵向限高,由弹窗正文承担主滚动;长字段仍复用DataTable的默认单行省略与悬停完整文本,横向列宽不变。未将预报箱视为实收,也未改动SKU件数、测量汇总、打印入口或后台请求格式。增加预报的普通说明收进InlineHelp,失败原因及requestId等诊断保留可见。保存时锁定表单、底栏和关闭;切换客户或来源单号时关闭旧窗口,迟到响应不更新新票或展示旧错误;取消后重开恢复新增1箱。
自动检查:12个文件、204项定向检查、类型检查与构建均通过;全量432个文件、3808项测试通过。均经统一local-check入口串行执行,沿用用户本轮授权的Node 6GB堆上限。31项冻结源码、测试、共享组件、声明与构建输入前后哈希一致;业务API文件、生成声明、依赖和构建配置未改变;git diff --check通过。主截图清单1—321号连续且无重复。原库存分配脚本仅增加公共样式导入,分配、原请求重试和明确拒绝后的重新选择逻辑保持原样。
本批只以本地Mock验证分配、重试和增加预报,未执行真实库存/箱唛/预报写入,也未生成真实打印资料;未提交、推送或部署。310—321号视觉待人工1920×1080、100%缩放截图确认。海外入库单的预约、计划编辑和托盘移库弹窗在下节接续,其余海外仓正式菜单仍待整理。
## 统一弹窗整理:海外入库单预约计划编辑与托盘移库(2026-10-20)
实际入口为InboundOrdersView两个AppDialog、显式continuous的FbaAppointmentFields,以及InboundOrderDetailView的移库AppDialog。编号322—336唯一维护在[跨模块截图清单](Admin国内仓样式核对记录.md)。列表及独立详情、智能排车入口、同接仓点/同FBA选择与多批预约跳转保持原样;本批不代表智能排车及其子窗口已整理完成。
| 操作 / 状态 | 原承载与尺寸 | 本组处理 | 保留边界 |
|---|---|---|---|
| 预约 / 编辑 / 只读预约 | AppDialog,1080px | 数量/FBA浅绿核对、系统约号/时区文字、浅黄连续登记、业务号标题和全屏 | 原PENDING/SUCCESS/FAILED/CANCELLED、外部约号、计划与确认起止时间、补充时段、重叠时差清空、必填原因和原完整请求 |
| 原批次已替代或只读权限 | 同预约窗口 | 原替代预约号直接警示、真实表单禁用 | 原列表只读、取消/替代批次不可写;原预约状态和替代关系不变 |
| 预约结果未确认 | 同预约窗口 | 弹窗内诊断、原请求重试和字段冻结 | 原pendingAppointment载荷、版本、幂等键与关闭/路由守卫;明确拒绝后可重新填写的原分支不变 |
| 编辑入库单 | 默认560px AppDialog | 单号/版本文字、连续目的仓选择、全屏、读取/保存锁定和错误诊断 | 原平台候选、客户范围、目的仓ID/编码/名称与版本0完整提交;候选失败仍关闭窗口并保留列表错误 |
| 托盘移库 | AppDialog,560px | 来源单/托盘文字、浅黄连续目标/原因、全屏、候选空态/错误/重试、保存锁定与诊断 | 原仓库范围、普通/A0过滤、当前托盘版本、业务码及移库载荷;原服务端canMove阻断仍留窗,不作为成功刷新 |
共享FbaAppointmentFields只为本列表的continuous调用新增布局,预约工作台等已有消费者保留默认结构;全部原模型字段均保留。本地调整不改变预约确认口径、时区/DST解析、API路径或服务端载荷。移库原先用真假值禁用了合法版本0,现区分版本0和未返回版本;缺失版本或托盘号不可操作。移库保存增加重复提交门禁并锁定原输入,候选读取失败与服务端错误在窗口内保留诊断;每次移库调用原有幂等键生成方式保持不变,本批不另行设计移库命令恢复协议。
自动检查:16个文件、181项定向检查、类型检查与构建通过;全量433个文件、3825项测试通过。均经统一local-check入口串行执行,沿用本轮授权的Node 6GB堆上限。38项冻结源码、共享字段直接消费者、测试、声明与构建输入前后哈希一致;预约/计划/库位API、appointmentForm载荷转换、生成声明、依赖及构建配置未改变;git diff --check通过。连续分支与原字段集合对比为10项且无差异;实际5个预约工作台消费者均保留默认布局并完成定向回归。主截图清单1—336号连续、无重复。
仅进行本地Mock验证,未创建真实预约、修改计划、移动库存、提交、推送或部署。322—336号视觉待人工1920×1080、100%缩放截图确认。入库单实际引用的SmartDispatchDialog新建排车作业窗口及资源字段在下节接续;其余海外仓和Admin模块仍待整理。
## 统一弹窗整理:新建排车与资源登记(2026-10-20)
从入库单及排车列表实际引用的SmartDispatchDialog进入,直接复用的DispatchResourceFields另有DispatchWorkflowDialog消费者;本批仅对新建排车显式启用连续资源登记,不改变后者默认布局。当前1800px AppDialog、先选货/先建空单、候选与装车组双栏、原版本化草稿命令及真实排车核对均保留。
| 当前操作 / 承载 | 本批整理目标 | 保留边界 |
|---|---|---|
| 建单方式、起运仓、分组时间与备注 | 浅黄连续表单、原生标题与全屏、装车组上下文 | 原同仓、按组独立settings、空单与整车分支 |
| 车辆/司机档案及本趟临时资源 | 显式连续资源表、完整字段与禁用反馈 | 档案权限/搜索、实际容量、证照/任务结束、本趟资料不建档案 |
| 草稿恢复、新建/释放、装车组增删 | 浅绿草稿汇总与连续分组 | 原token、版本、容量15/30、来源锁定及未知结果恢复 |
| 货物查询、仓库分类和来源明细 | 浅蓝候选、长文本省略、完整来源组展开、正文主滚动 | 原查询条件、完整候选、整组资格、全部真实来源与加入/移除 |
| 提交/未知结果/明确拒绝/读取失败 | 原固定底栏、可见阻断与诊断、原请求重试 | 原会话内请求、幂等键、响应身份/版本和整车核对,不重造协议 |
实施结果:新建排车启用原生全屏,设置与车辆司机分成浅黄连续表,草稿管理和装车组采用浅绿分区,候选采用浅蓝分区。保留1800px和候选/分组双栏;移除候选表420px纵向限高,由弹窗正文承担主要滚动,明细列宽及横向滚动保留。普通长列使用原生溢出提示,业务引用和托盘号使用LineClampText;完整来源组可展开查看全部来源,选取资格和整组请求不变。外配仅本趟、空单不可核平/装车/发车、未知结果冻结和明确拒绝后的重新核对仍直接显示。
共享DispatchResourceFields新增显式continuous分支,默认消费者DispatchWorkflowDialog布局保持不变;档案和外配的全部原绑定、档案权限、实际容量、任务结束与证照字段保留,未生成假档案或按计划托位推算车辆容量。初次生成组配置时,原逻辑直接返回赋值表达式的原始对象,资源切换后可能出现界面仍有车牌、实际配置已为空的情况。现先存入响应式settings再返回其代理对象;真实组件回归验证车牌、容量、司机及分组切换后的完整载荷,保留原版本、幂等、转换和恢复协议。未选择装车组时,先选货模式的车辆/司机/时间/备注保持禁用,建单方式及起运仓仍可设置;空单模式不受装车组前置限制,避免资料落入未提交的占位组配置。
自动检查:16个文件、242项定向检查、类型检查与构建通过;全量434个文件、3839项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。42项冻结源码、直接消费者、测试、共享组件、API/模型/恢复输入、声明与构建输入前后哈希一致。除已说明的组配置初始化修复及样式导入/显式属性外,两组件脚本与本批修改前一致;资源连续分支包含全部14项原绑定。原有API、模型和恢复协议的工作区修改均保留,本批未改动;生成声明、依赖及构建配置未产生改动。git diff --check通过,主截图清单1—351号连续且无重复。
截图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)
实际操作承载为DispatchWorkflowDialog,直接引用DispatchResourceFields、DispatchArrangeFields和DispatchEvidenceFiles;后者也供DispatchDetailView只读取证使用。保留560/760/1120px动作尺寸及900px图片预览,不改变详情路由、服务器Gate、版本化命令、费用覆盖、文件鉴权或恢复协议。
| 操作 / 原承载 | 本组整理目标 | 保留边界 |
|---|---|---|
| 维护车辆、司机、时间及备注 | 业务号标题、浅黄连续登记、共享资源显式接入、全屏 | 原资源档案/外配、证据引用、完整EDIT载荷 |
| 调度/理货审核及简单确认 | 浅蓝事实、浅黄结果/原因或备注、可见业务警示 | 原两级审核、驳回必填、取消/回退/发车及服务端资格 |
| 添加/移除货物、卸货顺序 | 浅蓝完整明细、来源展开、原生长文本提示、正文主滚动 | 真实来源组、逐项移货Gate、已扫码限制、既有全部站点及调整原因 |
| 装车完成与依据 | 实测连续表、逐托证据表、全屏 | PDA核平、真实实测与参考区分、manifest及卸货顺序 |
| 整车分组派送 | 各组连续安排、完整货物/外接报价/原费覆盖及新增费用 | 原客户/目的地归属、覆盖哈希、未覆盖正数费用及买约卖家必填 |
| 本趟附件与图片预览 | 操作在前的紧凑附件表、只读/上传资格、全屏图片框 | 原字符串文件ID、上传/替换/移除引用、鉴权Blob/PDF、迟到响应及URL释放 |
| 上传、未确认结果与错误 | 固定底栏与关闭锁定、原错误和原请求重试 | 原证据busy、未知结果冻结、明确拒绝后重新核对 |
实施结果:动作窗口标题携带原排车业务号,车辆/司机与计划时间、操作原因、分组派送均采用浅黄连续表;原审核资料、完整货物来源、逐托测量依据及附件采用浅蓝分区,无左色条。1120/760px窗口开放原生全屏,560px简单确认保留紧凑尺寸,底栏与关闭在提交和上传期间锁定。移除货物420px、添加候选380px、派送分组货物240px的表内纵向限高取消,由弹窗正文承担主滚动;列宽与横向滚动保留。原生长列溢出提示和LineClampText承载完整文本;完整来源组可展开全部来源,实测与参考依据直接区分。
DispatchArrangeFields脚本及费用覆盖算法保持原样,派送、原费用、外接报价与新增费用的全部原绑定和业务字段保留;两级审核、真实dispatchItemId、全部既有卸货点、合法版本0及长版本、manifest、费用哈希和原命令恢复协议不变。原服务器资格与前端权限同时决定表单禁用,提交校验继续保留。本地回归发现失败操作关闭重开后,重新读取会用服务端旧资料覆盖当前实例已提交的输入,而重试仍使用原请求;现仅按当前实例记录的幂等键和原业务号保留该请求对应的表单与诊断。新实例恢复仍读取当前事实,明确拒绝后重新核对仍先清除被拒请求再读取,不新增存储或恢复协议。
DispatchEvidenceFiles保留原本车/附件类型鉴权、字符串引用、上传校验、Blob/PDF读取、迟到响应隔离及URL释放;附件表将操作放前,失败诊断可重新读取,原上传与主单引用保存提示直接显示。图片预览保留900px与图片72vh适配上限并增加全屏;此上限只控制图片适配,不建立嵌套滚动。DispatchDetailView只读取证直接消费者一并回归,未添加上传资格。
自动检查:17个文件、251项定向检查、类型检查与构建通过;全量435个文件、3855项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。52项冻结源码、直接消费者、API/模型/恢复输入、测试、共享组件、生成声明与构建输入前后哈希一致;生成声明、依赖与构建配置未改变,git diff --check通过。三个组件脚本扣除已列明的样式/显示组件导入和当前实例请求标记后,与本批修改前哈希一致;派送组件13项原模型绑定无缺失。原有选货分组/API/模型工作区修改保持原样,本批未改动。主截图清单1—375号连续且无重复。
截图352—375唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批仅使用本地Mock,未真实审核、移货、发车、创建派送/费用、上传业务附件或写入测试数据;未提交、推送或部署。其他海外仓及Admin模块仍待继续整理。
## 统一弹窗整理:新建出库三种模式(2026-10-20)
当前实际入口为OutboundsView的1760px上限AppDialog,保留独立出库详情及列表/详情原取消原因提示框;本批不改动派送列表、资料窗口和详情路由。
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 一件代发出库 | 浅黄连续类型/仓库/查询、浅蓝完整候选、正文主滚动、原全屏 | inventoryPositionId+SKU跨页选择、本页全选、同客户同仓、实际可出箱数和三项测量 |
| 退货出库 | 浅黄连续客户/收件/仓库/退货单、浅蓝SKU与实物箱双栏、原分页 | 原整包裹/整箱/整托、原箱内SKU与数量、原退货来源,不引入部分SKU直接出库 |
| 仓储转运目的地绑定 | 浅蓝真实转运单、浅黄FBA/私人仓连续信息 | 按客户+转运单合并托盘、无目的地资格、全部真实绑定对象及原目的地载荷 |
| 候选/资源读取、保存、失败与重开 | 锁定读取/提交期间的编辑和关闭、错误诊断与重读、保留失败输入 | 原读取接口、客户范围、原写请求与幂等键生成方式;新会话重新初始化 |
| 取消出库关联核对 | 保留原ElMessageBox承载与admin-density-confirm | 原取消原因、费用处理警示、关联排车释放及权限,不将取消视为库存自动回滚 |
实施结果:保留当前1760px上限、原生全屏、固定底栏及三种真实模式;类型、仓库与订单查询、收件/退货来源、FBA/私人仓目的地、备注采用浅黄连续表。原一件代发候选及转运单采用浅蓝分区,退货SKU与实物箱保留双栏和各自分页,全部原候选列及18项模型绑定保留。取消360/380/400px表内纵向限高和旧候选列表300px限高,由弹窗正文承担主滚动;保留横向滚动、每页条数128px及原窄屏规则。长客户/品名、业务号、箱内SKU和托盘继续使用原生溢出提示;无客户名称的转运单显示“客户名称待补充”,不回退内部ID。
读取/保存期间,表单、选择框、分页、提交和关闭均锁定;提交方法独立检查当前开窗、权限、读取/保存状态及候选失败,防止重复调用或在来源读取失败时继续提交。基础资料及候选读取失败在弹窗内保留ApiErrorMeta诊断,可按原范围重读;创建失败保留当前输入与选择,由原提交入口重试。重新新建清空上一单备注、收件信息、退货来源和箱托方式,默认一件代发;失败留窗、切换全屏不清空当前输入。一件代发候选重读保留仍有对应键的选择;退货候选重读仍沿用原加载逻辑重新核对整箱选择。
原创建校验与请求正文逐字核对保持一致:按库存位置+SKU出全部可用箱数,同客户同海外仓;退货仍按原物理包裹/箱号或托盘,不引入部分SKU载荷;转运仍按客户+转运单聚合并绑定目的地,不直接创建出库。原接口路径、客户作用域、幂等键生成方式与取消处理协议未改变,本批不新增未知结果恢复协议。列表及详情取消确认仅关联核对,保留原承载、费用警示、原排车释放和权限逻辑。
自动检查:10个文件、135项定向检查、类型检查与最终构建通过;全量436个文件、3865项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。32项冻结源码、测试、共享组件、原API与模型、生成声明及构建输入前后哈希一致;原出库/退货API、独立出库详情、取消确认、依赖与生成声明未改变,git diff --check通过。布局合同改为核对实际消费的公共全宽控件规则,原取消、权限、数量、跨页选择与实际请求断言均保留。主截图清单1—391号连续且无重复。
截图376—391唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认;本批仅本地Mock验证,未创建真实出库/退货、绑定目的地、推送PDA、取消业务单据或部署。下一组接续派送状态、标记退货和资料管理,其他Admin模块仍待整理。
## 统一弹窗整理:派送状态退货与资料(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 编辑派送状态,520px AppDialog | 业务号标题、浅蓝只读事实、浅黄连续状态/备注、读取/保存锁定 | 最新版本0、服务端allowedActions、冲突重读、原取消须经出库提示 |
| 标记退货,720px AppDialog | 业务号标题、连续原因/去向/物流、来源表操作在前、全屏 | 原尾程主单、原出库明细与可退上限、原退货箱整箱、真实来源标识与原幂等请求 |
| 派送资料,1040px AppDialog | 业务号标题、浅绿摘要、连续BOL、三类浅蓝附件表、全屏 | 原只读/管理资格、每类20份/50MiB、上传/替换/删除草稿、保存版本/幂等、签收文件完成派送 |
| 资料重新加载确认 | 保留ElMessageBox与admin-density-confirm | 原未保存资料放弃确认、关闭丢弃草稿、重开读取真实快照 |
实施结果:520px状态窗口保留紧凑承载,标题携带派送业务号,当前状态/关联出库采用浅蓝普通文字,允许状态及备注采用浅黄连续表。读取/保存时锁定表单及关闭;版本冲突保留备注、禁用提交,原重读只保留最新仍允许的状态;最新已无可选状态时直接提示。720px退货窗口增加原生全屏,主单、原因、去向、物流采用连续表;原出库明细改为操作在前的来源/上限/箱数表,LineClampText承载完整业务来源,原箱固定1箱与整箱警示保留。读取失败可在原派送号/客户范围重新读取;提交失败仍由原入口重试同一载荷和幂等键。
1040px资料窗口增加原生全屏、浅绿资料摘要、连续BOL登记与三类浅蓝附件表;文件动作放前,长文件名使用LineClampText,上传时间、已保存/待保存状态仍完整显示。未保存文件继续不可下载,上传/替换/删除仍只改草稿,完整保存后生效;只读BOL采用普通文字,保留已保存文件下载。读取和上传/保存锁定关闭,读取失败摘要显示“资料未返回”,避免误示仍在读取。版本冲突保留草稿,重新加载继续使用原放弃未保存资料确认;关闭/重开继续读取服务端原三类快照。
两个组件的业务脚本扣除长文本显示组件导入后均与修改前逐字一致,原14项和2项模型绑定无缺失;状态版本0、allowedActions、尾程/来源归属、整数可退上限、原箱来源、每类20份/50MiB、文件上传/下载作用域、版本及幂等协议保持原样。原权限/数量/错误/请求断言保留,既有测试仅将弹窗选择器改为匹配携带业务号的标题前缀;未修改服务端契约、API路径或写入载荷。列表及独立详情承载保持原样。
自动检查:12个文件、160项定向检查、类型检查与最终构建通过;全量437个文件、3876项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。37项冻结源码、直接消费者、原API/来源模型、测试、共享组件、生成声明及构建输入前后哈希一致;原API、独立派送详情、依赖与生成声明未改变,git diff --check通过。主截图清单1—409号连续且无重复。
截图392—409唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认;本批仅本地Mock验证,未真实修改状态、生成异常退货、上传业务文件、保存资料、提交、推送或部署。下一组接续换标单及实际引用的作业窗口,其他Admin模块仍待整理。
## 统一弹窗整理:换标新增审核与PDF(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 新增换标单,760px AppDialog | 连续基础/作业表、公共候选、全屏、处理中与失败反馈 | 客户及公共收货仓独立读取、必填、箱数/金额、原幂等键及创建载荷 |
| 审核换标单,同一760px窗口 | 原完整多SKU/数量普通文字、连续动作与备注、业务号标题 | 原审核资格、尾程审核分流、驳回原因及状态请求 |
| 作废、完工确认、退回重新贴标 | 保留ElMessageBox密度确认 | 原权限、状态、复核版本与PDA退回原因 |
| 总/明细PDF预览,900px AppDialog | 业务号、全屏、加载/错误重试、关闭释放URL | 原TOTAL/ITEM及明细标识、鉴权下载、原iframe72vh/760px适配 |
| PDF上传与箱唛映射 | 原PDF入口、权限禁用、操作在前、缺失仓码不显示内部ID | Controller上传使用relabel-order:create,下载使用list;原类型/50MB及请求保持 |
| 贴标文件共享下载表 | 仅将原下载操作列放前 | RelabelOrderDetailView与LastMileOrderDetailView两个直接消费者,原两列及文件分类/归属/下载不变 |
实施结果:新增/审核保留760px并增加原生全屏,新增采用自动编号文字、浅黄连续基础/作业/备注表;审核将原多SKU、新SKU逐项数量、箱数、关联订单、品名、货件号、要求及费用完整显示为浅蓝普通文字,只保留原动作和备注可编辑。19项原模型绑定无缺失,创建与审核的原验证/请求正文逐字一致。客户与公共收货仓继续独立读取,候选失败各自显示诊断与重读;新建/审核在读取或保存期间锁定编辑和关闭,失败留窗保留原字段与原创建幂等键。审核详情读取失败仍按原规则关闭并提示;合箱入口仍跳转原库存来源选择,不恢复旧本地合箱表单或把箱数当SKU数量。
原作废、完工确认和退回重新贴标继续使用密度ElMessageBox,提示携带业务号,真实确认/原因输入仍触发原业务请求;完工确认和退回动作增加互相禁用与处理门禁,避免等待结果时并发发起另一动作,原退回复核版本0及原因保留。详情PDF预览增加原生全屏、业务号/文件名标题、读取中与错误重读;保留900px、iframe的72vh/760px尺寸和PDF内部查看方式。关闭/切换业务号/卸载释放URL并忽略迟到预览响应;TOTAL/ITEM和明细标识保持原样。PDA完工照片仍沿原鉴权读取、浏览器页签及60秒URL释放流程,不改变承载。
上传入口和提交方法按现行Controller的relabel-order:create权限约束,预览下载保留list只读访问;原PDF校验、50MiB及上传接口保持不变,上传处理中防重复,失败在详情保留诊断,旧请求结果不覆盖另一业务号。箱唛映射表将原明细PDF动作放前,长文件名使用LineClampText;缺失FBA仓码显示“—”,不再回退内部仓ID。共享RelabelDocumentsPanel只重排原两列,脚本逐字未变;换标详情及尾程详情两个直接消费者均纳入回归,不增加原来省略的文件名字段或修改分类/下载规则。
自动检查:14个文件、147项定向检查、类型检查、最终构建通过;全量438个文件、3889项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。39项冻结源码、直接消费者、API、权限依据、测试、共享组件、生成声明及构建输入前后哈希一致;服务端Controller、API、依赖与生成声明未修改,git diff --check通过。
截图410—430唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批仅本地Mock验证,未创建/审核/作废真实换标、推进完工、退回PDA、上传业务文件、写入测试数据、提交、推送或部署。下一组接续海外仓托盘管理,其他Admin模块仍待整理。
## 统一弹窗整理:海外仓托盘新增与编辑(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 新增托盘,760px AppDialog | 一张浅黄连续资料表、横排标签、原生全屏 | 原8项字段、默认值、五种类型、三种状态、容积/价格精度、必填校验及创建载荷 |
| 编辑托盘,同一760px窗口 | 托盘编码标题、仓库普通文字、读取/保存锁定 | 原固定仓库、当前服务端版本含0、更新载荷及权限 |
| 编辑详情读取 / 失败 | 留在业务号窗口、诊断与同范围重读 | 原仓库与托盘字符串标识,失败不显示上次编辑资料、不允许提交 |
| 候选读取 / 失败 | 原候选来源、弹窗内错误与重读期间门禁 | 原公共收货仓和ACTIVE FBA仓;不按客户缩小候选、不新增候选协议 |
| 保存 / 失败 / 取消 | 防重复、失败保留、关闭重开默认值 | 原验证、完整请求、更新版本及关闭丢弃规则 |
| 单张打印与独立详情 | 沿用现有PDF下载和只读路由 | 不创建打印预览弹窗、不改模板、原仓库/托盘标识及下载URL释放 |
实施结果:760px弹窗增加原生全屏,原顶部标签/双列栅格改为横排120px标签与连续资料表;只使用共享浅黄录入背景,不增加左侧强调线和嵌套汇总。编码、类型、容积、采购价格、海外仓、FBA仓、状态、备注共8项模型绑定保留;编辑仓库直接展示名称和仓码,其余资料继续可编辑。原容积四位/价格两位、必填规则、备注500字上限保持;备注使用两行并显示字数。
编辑窗口先显示托盘业务号与读取状态,读取成功后才显示表单;失败保留本次对象并提供诊断和原仓库/托盘范围重读。候选来源与读取逻辑保持原样,原上下文失败同时出现在弹窗并阻止保存,重新读取时锁定关闭。读取、保存和候选重读过程中锁定编辑、关闭及再次打开;创建/编辑入口和保存方法核对原独立权限。保存失败留窗保留原输入,版本冲突不静默覆盖或改写旧请求版本。
原8项绑定、必填验证、payload构造与创建/更新请求、候选/列表读取、标签打印函数经修改前后逐字比对均保持;不修改API、权限码、模型、独立只读详情或服务端模板。单张打印继续使用现有鉴权PDF下载,不新增预览承载。
自动检查:8个文件、109项定向检查、类型检查、最终构建通过;全量439个文件、3898项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限;29项冻结源码、直接依赖、原API/模型/权限、测试、生成声明及构建输入前后哈希一致,git diff --check通过。主截图清单1—440号连续、无重复。
截图431—440唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批只使用本地Mock,未创建或修改真实托盘、下载业务标签、写入测试数据、提交、推送或部署。下一组接续海外库位管理,其他Admin模块仍待整理。
## 统一弹窗整理:海外库位维护(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 新增 / 编辑,560px AppDialog | 连续录入、横排标签、原生全屏、固定仓库普通文字 | 公共收货仓、普通库位、原仓库及库位标识、原创建/更新接口 |
| 候选加载 / 保存 / 失败 | 明确加载和诊断、防重复、失败保留原输入 | 原候选与查询、关闭规则、原权限;不新增服务端接口 |
| 启用 / 停用,ElMessageBox | 原业务编码确认、统一密度与操作锁定 | 原NORMAL资格、A0/共享溢出与虚拟库位保护、原状态请求 |
| 删除,ElMessageBox | 停用且无托盘的普通库位确认、处理中和失败反馈 | 服务端禁止A0/虚拟库位和绑定托盘删除,前端不扩大为其他类型 |
实现前契约核对:现行LocationRequests.SaveRequest只接收locationCode、locationType、maxLoadKg、status、remark,没有库位名称;最大承重必须大于0。WarehouseResourceService的状态包含INACTIVE,不包含DISABLED,且禁止删除虚拟库位。原页面存在无保存字段的名称输入、INACTIVE编辑默认成ACTIVE及删除入口只判断DISABLED的问题;本组在弹窗收敛时按现行契约修正,不增加名称接口或修改服务端。托盘全量检查通过并核对冻结输入后才写入库位改动。
实施结果:560px新增/编辑增加原生全屏,统一浅黄连续单列表与110px横排标签,不再使用顶部标签及本地editor-grid外观。海外仓、库位编码、承重及备注4项实际可保存资料保留;移除没有保存接口的库位名称输入。编辑固定海外仓采用名称和仓码普通文字;标题携带原库位编码。取消后新建恢复原默认仓库、空编码/承重与备注,全屏不清空输入。
编辑INACTIVE库位保留停用状态,已停用筛选直接提交INACTIVE;最大承重增加有限正数校验、最小0.001,保留三位精度及kg单位。删除资格收敛为NORMAL、INACTIVE且无托盘,保留A0编码、共享溢出类型/标记和虚拟库位保护。启用/停用与删除仍采用原ElMessageBox,统一密度、业务编码及危险语义,原创建/更新/状态/删除API、完整业务载荷与原版本参数保持;不宣称服务端额外校验未实现的版本参数。
候选和列表错误采用原读取范围重试并显示诊断;候选失败在弹窗同时明确阻断保存。读取/保存锁定编辑及关闭,操作确认与命令执行期间锁定其他维护动作;失败保留表单或列表上下文、显示诊断,取消不发写请求。保存方法再次核对独立权限。页面不复制公共外观、无新增本地CSS,不改API、DTO、权限码、数据库或服务端。
自动检查:7个文件、113项定向检查、类型检查、最终构建通过;全量440个文件、3911项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。36项冻结源码、直接依赖、原API/模型/权限、测试、生成声明、构建输入及只读服务端契约依据前后哈希一致,git diff --check通过。主截图清单1—453号连续、无重复。
截图441—453唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批只使用本地Mock,未新增/编辑/启停/删除真实库位、写入测试数据、提交、推送或部署。下一组接续已注册的废弃单详情与审核窗口,其他Admin模块仍待整理。
## 统一弹窗整理:废弃单详情与审核(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 废弃单详情,920px AppDialog | 业务号标题、普通文字摘要、完整明细、原生全屏 | 原6项详情摘要、5列废弃明细及实际箱唛、只读资格 |
| 审核并推送PDA,ElMessageBox | 业务编码、统一密度、危险提示与处理中锁定 | 原PENDING_REVIEW与discardApprove权限、APPROVE请求及客户范围,不增加驳回/取消入口 |
| 现场照片缩略图 / 大图 | 原150px图片与原生大图查看、逐图加载/失败重试 | 原鉴权文件与客户范围、关闭/切换/卸载释放URL、迟到响应隔离 |
| 详情读取 / 失败 | 先显示本次业务号、明确加载和原范围重读 | 原详情接口及客户参数,失败不显示上次单据资料 |
| 客户候选 / 列表读取 | 候选及列表独立错误、原范围重读 | 原ACTIVE客户第1页200条与原筛选/分页请求,不新增候选协议 |
实现前已核对CargoDiscardController:照片下载要求discard:list及显式customerId,审核由服务端核对审批权限。详情cartonMarks来自各来源的真实所选箱唛;缺失时不得据此推断“全部库存”。本组保留原审核及PDA流程、API和原生图片查看,不新增业务动作或改库存扣减。
实施结果:原920px只读详情增加原生全屏与废弃单号标题,6项原摘要采用浅绿普通文字表,原5列废弃明细采用浅蓝分区;入仓码、SKU、品名和箱唛通过LineClampText单行省略并保留完整悬停及键盘内容。缺失箱唛显示“—”,不再推断全部库存;原状态流转记录以时间、状态、备注连续表承载,顺序及原展示内容保留,空照片和空流转分别明确提示。页面只维护摘要列宽、照片排列与150px业务图片面积,不复制公共外观或添加左侧强调条。
详情先显示本次业务号与读取状态,失败保留本次单据及客户范围重试,不复用上次资料。图片仍经原鉴权接口读取Blob、原生ElImage大图查看,保留源照片顺序、当前索引及150px缩略图;逐图失败显示诊断和同文件重试,缺少客户范围直接阻断,不向接口传undefined字符串。关闭/切换/卸载释放URL、清除状态并隔离迟到详情及照片响应;图片读取期间仍允许正常关闭,不新增独立图片弹窗。
审核仍使用原ElMessageBox和原APPROVE请求,原权限及PENDING_REVIEW双重资格在入口及确认后核对,确认正文包含废弃单号与推送PDA后果。确认和请求期间锁定其他操作及重复提交;失败保留列表并显示诊断,取消/关闭不发写请求。原6项摘要、列表请求构造和审批调用逐字核对保持;不增加驳回/取消业务动作、审批载荷、API、权限码或服务端变更。
客户候选和列表各自加载、错误诊断及原范围重读,客户读取失败不阻断其他列表条件;候选仍为原ACTIVE第1页200条。查询采用原字段/分页参数,旧查询响应不会覆盖新结果。列表操作显式采用公共文字操作样式,操作列保留首列固定并扩为180px容纳原两项动作;状态缺失显示“—”。
自动检查:8个文件、121项定向检查、类型检查、最终构建通过;全量441个文件、3925项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。45项冻结源码、直接依赖、原API/模型/权限、测试、生成声明、构建输入及只读服务端契约依据前后哈希一致,git diff --check通过。主截图清单1—469号连续、无重复。
截图454—469唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批只使用本地Mock,未审核真实废弃申请、推送PDA作业、下载真实业务照片、扣减库存、写入测试数据、提交、推送或部署。下一组接续退货库存/箱号及原合箱作业窗口,其他Admin模块仍待整理。
## 统一弹窗整理:退货库存合箱与箱号(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 创建合箱计划,1380px AppDialog | 连续基础/来源/备注表、原生全屏、正文单一滚动 | BOX整箱和SKU部分两模式、原物理箱唛+SKU数量绑定、原来源分页/过滤/上限与创建请求 |
| 合箱计划详情,1400px AppDialog | 普通文字摘要、来源/流向/完成时快照、原生全屏 | 仍读取原本页计划快照,不新增详情接口;原预计取出/剩余和实际完成数量、当前箱唛打印资格 |
| 退货箱号详情,1080px AppDialog | 业务箱唛标题、只读资料与合箱流水、全屏及读取失败重试 | 原11项箱号资料、换标实际/占用数量、箱内SKU、来源/目标和流向 |
| 计划审核 / 取消 | 原直接审核与ElMessageBox取消确认、处理中互锁 | 原状态资格、原请求与释放库存语义;不新增业务确认步骤 |
| 箱唛打印 | 保留现有浏览器HTML打印入口 | 原鉴权标签、opener隔离、服务端printableHtml及打印内容/尺寸,不生成第二套模板 |
实现前已核对PlatformReturnPackingPlanController和PlatformReturnInventoryController:创建/审核/取消要求退货库存列表权限和lastleg:inventory:manage;来源选择另要求退货箱号列表权限;箱号详情/标签要求退货箱号列表权限。本组补齐对应前端资格与只读状态,不改变服务端权限或库存流程。退货客户候选原有全分页、公共收货仓、来源分页与旧查询隔离继续保留。
实施结果:原1380px创建、1400px计划详情、1080px箱号详情均增加原生全屏,保留两个详情原无底栏承载。创建采用110px横排标签、浅黄基础/备注和浅蓝来源连续表,8项原模型绑定集合无缺失;BOX与SKU来源分别采用原选择方式,保留箱唛、来源退货单、载体、完整混箱SKU和逐物理箱+SKU数量。移除原260px内部纵向滚动与窗口resize覆盖,来源表头继续粘性定位,正文使用AppDialog单一滚动。两行备注保留1000字上限及原锁源/新箱/PDA箱规说明。
原来源分页、去重筛选、BOX包含任一SKU、SKU精确匹配、模式切换清空及数量归集函数逐字保持;增加正整数/可用上限校验和整数控件,不改原提交计算及API。原幂等键生成从每次提交移至本次打开或深链打开,失败重试保留原键和输入,关闭/成功后结束本次键;不新增HTTP协议或恢复流程。读取失败显示同范围诊断/重读,候选失败不误示空库存;客户与仓库仍由原allSettled入口加载,客户全分页和公共仓来源保留。来源关闭/切换/卸载隔离迟到结果并停止继续分页;提交期间锁定编辑与关闭,阻止重复提交。
计划详情保留原本页快照,不新增服务端详情接口。6项摘要改为浅绿普通文字,来源、流向和完成/计划明细采用同级连续分区;原计划来源/取出/剩余与完成箱计算函数逐字保持,完成时快照和当前可打印箱资格分开显示,原说明及箱规/重量/时间/操作员保留。打印当前箱唛操作列前置,已MERGED或清空的当前箱仍不可打印;无箱号列表权限时隐藏打印操作列。
箱号详情保留11项原资料、换标实际完成/占用数量、箱内SKU和合箱流水;摘要改为普通文字,业务号/中文品名使用LineClampText保留完整悬停与键盘内容,缺失合箱计划号显示“—”,不推断现场或历史流程。读取先显示本次箱唛,失败在原范围重试,不显示上次资料;关闭/卸载隔离迟到响应。原标签读取及popup.opener=null、原服务端HTML写入、focus/print正文逐字保持,不改变打印尺寸或模板;增加重复打印门禁和失败诊断。
原直接审核不增加确认步骤;取消仍使用原密度ElMessageBox,确认中携带计划号与释放来源库存后果。创建/审核/取消/来源/箱号及标签分别按当前Controller权限核对,管理动作互锁,失败保留表单或列表,取消不发写请求。四种主列表仍采用原查询/分页和独立偏好键,补充错误诊断及原范围重读,旧查询响应不覆盖新结果。原14项列表/业务测试全部保留,只为明确授权场景补入权限Mock,并将一处点到表格隐藏测量行的详情选择器改为真实箱唛行,增加业务箱唛请求断言。
自动检查:8个文件、127项最终定向检查、类型检查、最终构建通过;全量442个文件、3939项测试通过。均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。56项冻结源码、直接依赖、原API/模型/权限、测试、生成声明、构建输入及只读服务端契约依据前后哈希一致,git diff --check通过。主截图清单1—496号连续、无重复;另已只读核对ReturnInventoryService对同幂等键请求内容的hash校验,本组不改服务端协议。
截图470—496唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批只使用本地Mock,未创建/审核/取消真实合箱计划、打印真实箱唛、占用/释放库存、写入测试数据、提交、推送或部署。下一组补齐库存流水与国内入库共用的入仓码关联数据窗口,其他Admin模块仍待整理。
## 统一弹窗整理:库存与入库关联数据(2026-10-20)
| 操作 / 当前承载 | 本组目标 | 保留边界 |
|---|---|---|
| 国内入库单 / 海外库存流水 → 入仓码关联数据,1060px AppDialog | 两个实际入口显式dense、原生全屏、只读分区与长文本 | 原三个独立权限、原三个读取API与业务号,默认非dense样式保持 |
| 订单基础 / 装柜PDA / 海外库存 | 公共背景、连续普通文字、完整业务标识及库存数 | 原6项基础、6项装柜、客户/仓库、尾程单/计划/托盘和SKU库存,不显示内部ID |
| 空码 / 无权限 / 未找到 / 局部失败 | 原警示、局部空态与各分区诊断/重读 | 仍只查当前允许的读模型,原重试重读全部允许分区,不新增接口或权限 |
| 关闭 / 切换 / 卸载 | 原可在读取中关闭、迟到响应隔离、清理读取状态 | 不改readonly承载及请求作用域,修正空码/无权限提前返回时旧loading未清理的问题 |
实际直接调用方仅InboundOrdersView与InventoryTransactionsView,另有共享组件合同测试;不会把原关联框重新引入统一订单或InboundTaskList。dense外观通过现有显式参数启用,默认模式不启用新背景或全屏;原API、显示字段、合法业务编号回退和权限过滤保持。
实施结果:原1060px框架通过现有dense参数增加原生全屏,国内入库单实际入口同步显式启用dense,海外库存流水入口继续保持显式启用。基础/装柜采用公共只读来源背景,海外入仓与库存采用汇总背景;标题与状态仍同行,保留无底栏、destroy-on-close和读取中可关闭的原承载。旧边框、背景、15px标题、正文高度/内边距仅限制在默认非dense模式,删除原dense零边框/零内边距及通用字体覆盖,避免抵消公共背景;新模式只配置两列、宽行、表头及内容约束。
原6项基础、6项装柜、海外客户与仓库、完整尾程单/入库计划/托盘、SKU/产品和库存箱数全部保留。dense长值使用LineClampText,尾程单/计划/托盘采用同一连续资料表的宽行及两行省略;原状态组合文本、顺序及柜号/柜次业务号回退保持,数量0仍显示。非dense保留原标题属性、旧列表和布局,不启用新背景/全屏/长文本组件。真实未找到与已找到但无SKU库存分别提示;原仓库未分配和名称未返回语义不变。
三个权限过滤和API任务段经前后逐字对比未改,继续只读当前允许的服务端读模型,各分区错误保留诊断及原重试读取全部允许分区规则。修正空码/无权限提前返回及关闭时旧loading未复位;卸载增加serial失效,切码/关闭/权限变化后的迟到结果不覆盖当前数据。不改请求路径/参数/访问域或后端契约,不新增业务动作。
自动检查:10个文件、139项最终定向检查、类型检查、最终构建通过;全量443个文件、3951项测试通过。包含共享默认/密度两模式、真实Element过渡关闭、国内直接页面及海外真实API Mock挂载,均经统一local-check入口串行执行,沿用用户授权的Node 6GB堆上限。66项冻结源码、直接调用方及其测试、原API/模型/权限、共享组件、生成声明与构建输入前后哈希一致,git diff --check通过。主截图清单1—510号连续、无重复。
截图497—510唯一维护在[跨模块清单](Admin国内仓样式核对记录.md),视觉待人工1920×1080、100%缩放截图确认。本批仅本地Mock,未读取真实关联数据、写入测试环境、提交、推送或部署。下一组接续预约管理当前日历入口的新增FBA与计划到仓窗口,其余原业务办理分支继续逐操作整理。
+35
View File
@@ -0,0 +1,35 @@
# Admin 消息中心样式核对记录
范围为顶部消息中心实际注册的三个页面及其现有操作。入口由 `apps/admin-web/src/app/layouts/AppLayout.vue:181` 和 `src/modules/notifications/routes.ts` 证明,不计入左侧 48 个菜单。采用当前用户确认的国内订单样板与公共密度规范。
| 页面 | 操作 | 原型依据 / 承载 | 当前实现与调整结论 |
|---|---|---|---|
| 我的消息 | 查询、查看、标为已读、全部已读 | `prototype-src/modules/11-system-messages.html:283` 的 `page-msg-my`;详情容器未定义 | 保留正式列表及 680px 详情抽屉;列表按钮、抽屉字号和正文间距接入公共密度,不改变打开未读消息时的标记逻辑 |
| 消息管理 | 列表、查看 | 同文件 260 行 `page-msg-manage`;原型仅给详情按钮 | 保留正式列表及现有 820px 任务详情抽屉;六项摘要改连续两列键值表,保留收件人表和失败原因 |
| 消息管理 | 新建、立即/定时发送 | `prototype-src/overlays.html:354` 的 `modal-msg-create`,680px 居中弹框 | 保留宽度、两列表单、整行模板变量及定时选项;独立浮层显式接入密度 |
| 消息管理 | 取消、重试 | 原型未定义;现有确认框及权限、状态限定 | 保留确认和 API;取消为危险色、重试为普通描边,不增加操作入口 |
| 模板管理 | 列表、激活、禁用 | `prototype-src/modules/11-system-messages.html:272` 的 `page-msg-template`;状态确认原型未定义 | 保留现有状态门禁及确认;激活为成功色、禁用为危险色 |
| 模板管理 | 新增、编辑、变量插入、预览 | `prototype-src/overlays.html:367` 的 `modal-msg-template-create`,760px 居中弹框;编辑复用现有容器 | 保留两列基本字段和整行正文、变量、预览;统一表单间距与浮层密度 |
现有 `notifications/PROTOTYPE_MATRIX.md` 中“我的消息未注册”和“无任务详情”与当前正式路由、顶部入口及 `getTask` 实现不符。本次按实际入口核对样式,不移除已存在功能,不新增发送渠道、草稿或导出能力。各行最多两个可用操作,全部直接展示,不引入更多菜单。
本次只调整样式,消息发送、标记已读、模板写入、取消与重试均仅使用离线 Mock 验证,不向真实账号发送消息。42 项定向检查、253 个文件 / 1981 项全量测试、类型检查、构建和 git diff --check 均通过;本地 Vite 五个组件资源均返回 200。三个列表、两处抽屉、两处编辑弹框及状态确认均待人工在 1920×1080、100% 缩放下截图确认。
对五个组件的脚本 AST 与修改前比较,排除样式导入和确认框 customClass 后相同。新增原生 Element Plus 挂载用例核对了按权限查看/已读、任务与模板状态操作、两处详情抽屉、模板不可变编码/变量预览/版本及定时发送表单。实际字段校验、消息发送及服务端结果仍由人工业务验收补充。
## 2026-10-20 蓝白样式接入
沿用上方六行逐操作矩阵。三个正式列表及新建消息/模板编辑两个弹框显式接入主题;列表使用外层 `workbench-table`,两个弹框自身带 `admin-workbench is-dialog`,我的消息和任务详情仍分别为 680px/820px 抽屉并声明 `admin-workbench is-drawer` 独立主题作用域。取消/重试、激活/禁用确认同样显式接入;正文、模板变量、接收范围、失败原因和投递明细保持原语义。
消息中心定向回归通过;全量门禁由总控统一执行,所有修改后的状态及浮层均待人工截图确认。未新增渠道、草稿、导出或业务写入,未部署。
2026-10-20 用户追加修正:整页主列表与详情外壳使用 `is-page-surface` 取消外围整圈边框、圆角与阴影,页面保持连续白底;本组共 22 处主列表和 6 处详情容器,内部子表、指标/图表卡片、独立并列面板及弹框保持原边界。布局、内边距和脚本不因本修正改变;公共规则与全量门禁由总控统一收口。财务相关三文件 41 项定向复验通过,视觉仍待人工截图确认。
## 2026-10-21 弹框可用性回归
新建消息的模板变量名称来自服务端白名单,原来与普通字段共用固定 100px 左侧标签;长英文变量名没有换行约束。仅将变量字段标签上置,使用自动宽度及允许单词内换行,其他发送设置、定时选择、权限和请求数据保持。真实组件挂载新增长变量名与发送载荷回归,和原全屏、失败保留草稿、关闭/重开及详情抽屉用例共 22 项通过。
仍待用户截图核对长变量标签、输入区、定时发送、长正文和错误状态;不以挂载测试替代排版与正文/页脚滚动验收。公共 CSS 与 AppDialog/AppDrawer 修复由唯一公共写者集成,本域不覆盖公共规则;未打开浏览器、未截图、未部署。
+56
View File
@@ -0,0 +1,56 @@
# Admin 财务管理样式核对记录
范围为当前财务导航 6 个菜单、11 个正式路由及其实际可达操作。入口为 `apps/admin-web/src/modules/finance/routes.ts`,5 个主体页面与应收/应付两个路由封装。依据本轮全模块统一样式要求、国内订单样板和财务最近指引;历史原型的旧钱包/台账边界不覆盖当前已接入业务。
## 修改前逐操作矩阵
原型目录为 `docs/悦/货代SAAS平台后台/prototype-src/`;页面在 `modules/08-finance.html`,浮层在 `overlays.html`。尺寸列记录当前实现;本轮保留业务弹框宽度及版本、权限、幂等和金额口径。
| 页面/操作 | 原型或当前事实 | 当前承载/本轮调整 |
|---|---|---|
| 客户账户列表、详情、账期 | `page-customer-account` 637 行、详情 645 行;`FinanceCustomerAccountsView` | 列表/独立详情/详情内账期编辑;返回与客户同行,账户实际余额、冻结、授信等全部口径保留为紧凑摘要 |
| 手工充值、手工扣款 | 当前 `adjustmentOpen`,与最近 Finance 指引一致 | 720px 弹框;保留类型、金额、付款方式、流水号、原因、账户版本及幂等键 |
| 授信维护 | 当前 `creditLimitOpen` | 560px 弹框;保留到期日、额度下限与校验 |
| 充值申请审核/驳回 | `modal-customer-recharge-review` 1807 行,当前 `reviewOpen` | 620px 弹框;保留申请描述表、凭证和审核原因 |
| 充值凭证预览 | 当前 `voucherPreviewOpen` | 920px 图片预览,保留图片尺寸和清理,不压成普通表单 |
| 账户流水查询/导出 | 当前详情 `ledger-query` 和 `exportLedger` | 独立筛选与服务端流水表保留,统一行高和工具栏 |
| 客户应收应付列表/费用详情 | `page-customer-arap` 661 行、详情 798 行;`FinanceCustomerArapView` | 独立详情、来源金额摘要、单据与结算信息;统一标题、描述表和日志 |
| 来源编辑、提交、审核/驳回、调整、作废 | 当前 `mutationOpen` 与 `reviewOpen` | 默认居中框;上游来源只读、整组分摊、状态及权限条件不变,按实际可见操作数量折叠 |
| 应收款统计查询/打印/导出 | `page-finance-ar-detail-report` 761 行;`FinanceReceivableStatisticsView` | 真实按月 CNY 汇总;摘要压缩,打印保持既有规则和异步 Excel 导出 |
| 对账单列表/详情 | `page-customer-recon-stmt` 822 行;`FinanceCustomerStatementsView` | 独立详情;去重复页头,保留客户/期间与 20 项概要、两个页签及全部版本记录 |
| 生成对账单 | 当前 `createOpen` | 680px 弹框,保留费用候选、已选总额与账期 |
| 提交、通过、驳回、出账、作废、重开 | 当前 `performAction` | 保留权限/状态条件和原因确认,操作不超过 3 个全部直显;超过 3 个才显示省略号 |
| 对账单调整 | 当前 `adjustOpen` | 900px 弹框,保留来源明细及金额计算 |
| 应收/应付列表与详情 | `page-settlement-ar` 940 行、`page-settlement-ap` 995 行、详情 1073 行;`FinanceFormalSettlementPage` 两模式 | 返回、结算单号和状态同行,删除路由 ID 文案回退;四项金额/日期摘要与描述表保留全部字段 |
| 生成应收/应付结算单 | 当前 `createOpen` | 600px 弹框,保留各自候选和方向约束 |
| 部分收款、部分付款 | 当前 `receiptOpen`/`paymentOpen` | 各 760px 弹框;保留部分核销摘要、凭证上传、剩余金额预览及保存限制 |
| 结算单作废/重开、导出 | 当前 `performAction`/`exportDetail` | 原因确认与导出沿用原流程,接入公共确认框样式 |
`CustomerStatementsPanel` 虽作为 Finance 公开组件存在,但当前六菜单路由没有引用;不能凭文件存在恢复旧抽屉入口。若后续模块沿实际引用命中,另行纳入其操作范围。
## 检查
本轮代码核对覆盖上述 6 菜单 / 11 路由。5 个主体页面显式接入公共密度样式,财务局部布局位于 `src/modules/finance/financeDensity.css`;应收/应付两个路由封装移除旧的 `tbody` 网格覆盖,由共享详情描述表统一排版。
- 客户账户、费用来源、对账单、应收/应付详情统一返回、业务标题与状态;金额摘要使用公共紧凑布局,对账单保留 20 个概要字段与两个页签。
- 11 处弹框声明及各自版本、权限、金额、凭证处理保留;操作原因框和导出提示框显式接入样式。导出公共辅助函数增加可选 `dense` 参数,未接入消费者保持原样。
- 账户仅有详情/账期时直接显示两个按钮;有充扣及授信权限时才折叠。费用来源草稿有 4 个动作时折叠作废,3 个及以下全部显示;通过真实组件测试验证省略号无文字且菜单里的作废仍能打开原确认流程。
- 收款/付款由结算方向与权限互斥,最多 3 个行内操作;应收款统计打印/导出归入表格工具栏,打印时隐藏工具栏。
- 清除页面内重复密度外观及空 CSS 选择器;公共维护合同纳入财务 5 个页面和模块 CSS,并增加空选择器检查。
2026-09-14 检查结果:财务、公共密度和导出提示定向测试 183 项通过;全量 `pnpm test --maxWorkers=4` 为 251 个文件、1950 项通过;`pnpm typecheck`、`pnpm build`、`git diff --check` 通过。新增/编辑、审核、上传、部分核销、金额守恒及导出行为沿用原有财务测试,未删除这些业务断言。
代码检查与财务行为测试不等同于视觉验收;所有本轮修改后的页面和弹框仍待人工在 1920×1080、100% 缩放下截图确认。
## 2026-10-20 蓝白样式接入
保留上方六菜单、11 路由和逐操作矩阵。五个主体页面显式接入蓝白主题,两个应收/应付路由封装继续复用同一主体;列表、流水、充值申请和对账单明细通过外层 `workbench-table` 接入,独立结算/对账单详情使用 `workbench-panel is-flush`,表单与凭证弹框分别声明主题作用域。保留行密度、宽表横向滚动、原有权限、幂等、金额和危险状态;未恢复没有当前路由消费者的 `CustomerStatementsPanel`。
应收款统计打印继续隐藏查询、工具栏与分页,并在打印媒体中取消新增页面内边距、卡片阴影,沿用原打印尺寸。直接 `el-table` 的主题支持由总控公共样式统一集成,不在财务模块复制配色规则。财务相关定向回归通过;本组共同 SFC/绑定核对及 61 文件 611 项定向结果见客户管理核对记录的同日结果。全量门禁由总控统一完成;11 路由及弹框仍待 1920×1080、100% 人工截图确认,未发布。
2026-10-20 用户追加修正:整页主列表与详情外壳使用 `is-page-surface` 取消外围整圈边框、圆角与阴影,页面保持连续白底;本组共 22 处主列表和 6 处详情容器,内部子表、指标/图表卡片、独立并列面板及弹框保持原边界。布局、内边距和脚本不因本修正改变;公共规则与全量门禁由总控统一收口。财务相关三文件 41 项定向复验通过,视觉仍待人工截图确认。
2026-10-21 浮层回归抽查:实际挂载检查客户账户充扣/授信/充值审核与凭证、费用来源和对账单生成/调整、应收应付创建与部分核销。沿用当前表单、宽表、错误和草稿逻辑,本批未发现需改写财务展示文件的新问题。相关选定行为回归通过;公共浮层修复合并后,普通/全屏、错误长文、凭证二级预览和正文/底部操作仍待人工截图确认。
+430
View File
@@ -0,0 +1,430 @@
# 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)
本轮由用户反馈“推广后弹框混乱、不好用”触发,保留原承载与业务规则;不因定向测试通过关闭人工验收。
| 入口 / 操作 | 代码定位与问题 | 已修范围 | 人工待验 |
|---|---|---|---|
| 船期详情 → 人工补录节点 | `CarrierScheduleQueryPanel` 的子 AppDialog 原留在父框 DOM 内 | 子框显式挂到 body,保留原宽度、权限和提交 | 普通/全屏、长内容、错误重试、取消重开和父框独立状态 |
| 拖车预约 → 附件 | `TruckAttachmentDialog` 文件选择区无收缩边界 | 文件区可收缩、长文件名换行,上传/删除按钮不被挤压 | 长文件名、上传失败、全屏与重开 |
| 货柜/预装清单 → 新增模拟柜 | `ContainerSimulationCreate` 位于 DataTable 工具栏插槽,子框仍是工具栏 DOM 后代 | 显式挂到 body;工具栏公共样式另由公共唯一写者限制作用域 | 两入口普通/全屏、底部按钮尺寸、取消重开与创建失败 |
首两项定向9文件92项通过。模拟柜问题先经真实 DataTable + Element 挂载复现,第二轮4文件75项通过,保留校验、创建、取消与重开行为;公共浮层及工具栏第二轮10文件148项通过,覆盖嵌套表格和子表单密度。总控最终在 `db3b5f7157c900b885ade2626014f70c61cb0849` 输入上完成全量466文件4255项全部通过、应用类型检查与生产构建通过,1127份源码及配置快照前后一致;证据为 Admin `.logs/admin-style-audit-20261021/verification.json` 和 `full.json`。公共框架、独立主题根及工具栏选择器隔离规则统一见[风格参考](界面参考/蓝白卡片式工作台风格参考.md#弹框与抽屉的布局边界)。以上为本地代码验证,人工截图仍待确认,本轮总控未触发发布。
## 智能装柜跨客户加入与箱数对齐(2026-10-20)
### 智能装柜嵌套弹框回归(2026-10-21)
| 入口 / 操作 | 当前承载及源码依据 | 本次问题与修复范围 | 人工待验 |
|---|---|---|---|
| 订单 → 智能装柜 → 加入当前柜次 | `SmartLoadingDialog → GlobalSmartLoadingView → AppDialog`,外层默认全屏且body裁切,内层920px并可全屏 | 二级弹框未声明 `append-to-body`,实际DOM留在外层裁切/主题范围内;仅二级加入独立挂载,保留失败信息和原输入 | 父子普通/全屏、长成员表、失败保留输入、取消重开、父框状态与滚动 |
| 单柜智能装柜 → 按入仓码分配箱数 | `SmartLoadingWorkbenchView.vue`,780px确认弹框 | 四列表格右半行又套140px表单标签,标签与资料列错位并压缩输入;改用同一表格标签列并保留必填、上下限和提交 | 普通数量、整组/整托、输入及底部操作 |
本轮不继续修改跨客户装柜后端或权限,保留上一轮修复及错误诊断展示。`SmartLoadingCandidateInbounds` 的展开内容与主工作台三栏暂未发现新的局部裁切规则;公共AppDialog/主题部位选择器由公共唯一写者处理。当前没有新增真实页面截图,全部视觉项待人工1920×1080、100%确认。
本轮与国内测量、上传直接消费者合并运行定向6文件123项复验通过;装柜部分覆盖 `GlobalSmartLoadingView`、`SmartLoadingWorkbenchView`、`SmartLoadingDialog`。新增实际DOM断言证明二级加入位于外层工作台之外,取消不关闭父框,父子全屏独立,重开恢复原输入初始化;原待审核/普通/整托/同柜组提交、失败保留输入与诊断断言保留。仅两份装柜展示文件有变化,业务脚本一致;普通/全屏高度、滚动、分页及底部按钮实际视觉仍待人工截图,不因自动检查通过宣称验收完成。
用户截图 `codex-clipboard-708cec4f-a0c5-4f76-a2f5-8bfceeb998ca.png` 反馈确认加入后提示无权限、箱数输入未对齐;原始响应为 `A0403 / 客户归属不匹配`。源码确认是 `SmartLoadingService` 将柜次关联订舱的客户快照误作候选/加入/调整的客户白名单,并被前端统一403提示掩盖;不是本次管理员缺少操作权限。
后端移除该旧限制,候选、普通入仓、待审核占位、整托、调整及推荐允许跨客户,仍保留每票权威客户身份、显式筛选、权限、版本、占用、容量及作业门禁。正式语义见[阶段三4.3](头程到尾程分阶段流程/阶段三-国内货柜履约与出仓.md#43-智能推荐和人工加入)。未改IAM、网关或账号权限,也不修改测试存量数据。
“本次分配箱数”改用与上方相同的原生表格标签列,输入位于其余三列,保留必填语义、原上下限及提交逻辑。加入失败及诊断标识在当前分配弹框内呈现,保留箱数输入;主工作区不重复同一错误。真实缺权限仍按原403拒绝,不自动重试或放宽授权。
经 `local-check.ps1` 完成前端定向2文件50项测试及类型检查,均通过。后端定向 `SmartLoadingServiceTest` 的 Maven 检查已完成生产源码编译,但测试编译被工作区另一处 `FirstlegDocumentNumberGeneratorTest` 的3处旧 `JdbcTemplate` 构造参数阻断,尚不能认定服务回归通过;未改写该编号重构的在途文件。跨客户候选、普通加入和待审核加入的回归断言已同步。未部署,真实接口与1920×1080、100%缩放下的对齐效果待更新服务后人工确认。
## 货柜详情截图反馈(2026-10-20)
依据用户截图 `codex-clipboard-3e6e27f8-10fe-4b74-93a3-0bcd5ead5a11.png`,本次只调整共享货柜详情及其实际消费的异常、履约轨迹展示;当前工作区的其他在途改动保留。
| 页面 / 操作 | 截图依据与当前承载 | 本次结论 |
|---|---|---|
| 国内 / 海外货柜详情、页签切换 | `ContainerDetailView.vue` 独立页面,摘要后有较大间距;Element 页签混用原生按钮组布局类 | 采用现有 compact 页面间距,页签只用 Element 密度原语;保留路由、返回、页签及其权限 |
| 货柜信息与异常只读 | 六项字段以四列排布,最后半行空白;无异常记录仍显示表头 | 六项按两行三列展示;空异常只保留提示,有记录时保留原表头与完整历史 |
| 船期维护与历史 | 船名航次标题、按钮、资料各占一行;长船名航次换行较多 | 维护入口移至标题同行,船名航次列加宽;原船期弹框、读写权限与保存流程不变 |
| 履约轨迹与人工补录入口 | 五列无表头列表,操作人字号偏小,说明与来源区域难区分 | 高密度模式复用公共资料表,增加时间、类型、事件、说明、操作人 / 来源表头;完整换行,保留记录与排序;非高密度消费者继续沿用原列表,人工节点仍使用原弹框 |
首次定向10文件195项及类型检查通过。随后其他任务更新公共密度样式,定向复验10文件196项中193项通过;3项公共合同失败指向本次未修改的 `UnifiedOrdersView.vue`、`DispatchesView.vue`、报废页面的缺失闭合标签。本次货柜布局合同、全部9个直接业务测试文件继续通过。构建已执行,在类型检查阶段被海外仓换标订单 `RelabelOrdersView.vue` 的缺失变量错误阻断;不改写其他任务在途页面以消除失败。
全量检查完成:455个文件通过、9个文件失败;4099项通过、5项失败,另7个测试套件加载失败。失败证据包括其他页面未解决的合并标记、缺失闭合标签、重复插槽、测试文件加载失败,以及模拟柜表单字段数与其测试断言不一致。检查期间公共 `adminDensity.css`、`adminWorkbench.css` 及公共合同继续发生变化,此结果不作为全工作区冻结验收;本次三个业务组件及轨迹测试的散列保持一致,差异空白检查通过。未部署,视觉待人工在1920×1080、100%缩放下截图确认。
## 智能装柜弹框截图优化(2026-10-20)
依据用户截图 `codex-clipboard-79bcfb9c-3433-4b62-af9c-d3e6a4bbce19.png`,保留 `SmartLoadingDialog → GlobalSmartLoadingView` 的默认全屏、普通尺寸、三栏作业和二级分配弹框。
| 操作/区域 | 截图与现有实现 | 本次结论 |
|---|---|---|
| 主工作区 | 中间柜次栏占20%,候选客户列70px,左右关键数量/重量/体积排在较后位置 | 中间改240px,左右共享剩余空间;客户、数量与重量/体积优先,托盘和规则等字段保留横向查看;不缩小行高、字号 |
| 柜次选择 | 卡片重复标题与柜次号;无集装箱号显示“空柜” | 柜次号作主标题,保留柜号、渠道、仓库/柜型和选择态;缺柜号显示“模拟柜次/待补录”,不推断货物为空 |
| 查询 | 两个日期框均只显示“开始日期/结束日期” | 明确创建和预计到货起止含义,保留查询参数、布局偏好和原查询/重置事件 |
| 普通/全屏与滚动 | 外层边缘贴紧;表格撑满高度后分页仍占用额外空间 | 正文保留紧凑边距,普通模式加宽;三栏各自滚动,表格与分页共享列高;保留原关闭/重开和全屏状态行为 |
本次只改上述组件的展示配置、模板和局部布局;API、权限、计划状态、数量/金额计算与提交逻辑保持。顶部去掉与右侧容量条重复的重量/体积,分配箱数明确归属当前柜次。视觉结论待人工1920×1080、100%截图确认。
已落实为:柜次栏240px,左右按1.05:1分配剩余空间;客户列120px、入仓码180px,数量及重量/体积前移,其他字段和固定操作列保留。普通弹框加宽至最多1840px,正文保留公共12px紧凑边距;主弹框正文样式限定在直接子元素,不串入二级弹框。表格和分页改为同列伸缩,柜次卡片压缩重复标题并保留长编号换行与键盘焦点。
经 `local-check.ps1` 完成定向3文件51项覆盖,首轮一项旧“柜子数量”文案断言失败,更新后工作台47项复验通过;主弹框作用域最后2项复验通过,类型检查及差异空白检查通过。业务脚本核对仅查询展示参数和列配置有变化。未部署,未自行打开浏览器;普通/全屏、长编号、空态、宽表和分页的实际布局待用户截图确认。
## 蓝白工作台接入矩阵(2026-10-20)
本批按[蓝白样板](界面参考/蓝白卡片式工作台风格参考.md)接入,复用本记录及国内仓固定编号,不另建进度表。保留原独立详情、弹框、嵌入工作台、打印和表格尺寸;本批未部署,人工视觉均待 1920×1080、100% 截图确认。
用户随后要求移除包住整页主要内容的整圈边框:货柜、预装/装柜清单、订舱、拖车、报关、国内出仓和船期信息的主列表外壳,以及清单非内嵌独立详情增加 `is-page-surface`。公共去边框规则和页面边距由总控维护;嵌入清单、智能装柜三栏弹框/子表格、详情内部独立分区和各业务弹框保留原边框。本批仅修改14个源码中的15处模板类名并补记原矩阵,不改 padding、脚本、打印或业务承载,不重复全量检查;待人工截图确认。
用户继续指出详情主面板重复 padding:`LoadingListDetailDrawer` 的 `workbench-panel is-compact is-page-surface` 在独立清单详情叠加页面12px,在货柜清单页签叠加外层业务卡14px。本次由公共屏幕样式将显式主面板 padding 设为0;页根、货柜独立业务卡及原打印内距保留,组件参数、业务脚本和操作承载不变。独立预装、正式装柜清单和国内/海外货柜清单页签均为直接回归范围,视觉待人工新截图确认。
顶部排列收口:共享 `ContainersView` 的“未完结/已完结”页签移至 `DataTable #toolbar-start`,替代重复列表标题,保留原状态类并加入 `workbench-list-tabs`。查询仍在 `filters`,新增模拟柜与其他操作位置、权限和事件不变;`ContainerWorkbenchView` 的国内装柜/海外清关提柜属于业务阶段切换,保留外层独立导航,不与列表状态页签合并。预装/装柜、订舱、拖车等无同级业务页签的列表仅沿公共工具栏紧凑规则,不删标题。视觉待人工截图确认。
| 页面与代码证据(相对 Admin `src/modules/`) | 操作与现有承载 | 本批结论 |
|---|---|---|
| `container-loading/pages/ContainerWorkbenchView.vue`、`ContainersView.vue`:国内/海外模式 | 两个正式列表;45—51号编辑、模拟柜、订舱关联、还柜、邮件与拖车记录浮层 | 共用列表外框和阶段页签接入;现有模拟柜加宽及其他在途逻辑保留 |
| `container-loading/pages/ContainerDetailView.vue` 及实际 Overview/Customs/Fees 子组件 | 国内/海外独立详情,52—82号还柜、DO、异常、清关、卸货、拖车、柜费、托盘打印与船节点 | 连续详情、资料/历史表及浮层主题接入,未知、失败和危险语义保留 |
| `container-loading/pages/SmartLoadingWorkbenchView.vue`:分配表、候选表;`SmartLoadingDialog → GlobalSmartLoadingView` | 柜次智能装柜独立路由;订单列表及预装清单的全局三栏弹框和二级弹框 | 保留分配与候选布局、各栏滚动及模型面积,接入表格、面板及独立浮层主题 |
| `loading-lists/components/LoadingListsView.vue`、`PreloadPlanDetailView.vue`、`ConfirmedLoadingListDetailView.vue`、`LoadingListDetailDrawer.vue` | 预装/装柜两类列表及独立详情;运输、备注、确认、托盘/PDF打印与柜次费用弹框 | 列表及详情接入;名含 Drawer 的内嵌详情保持原承载;打印纸张规则保留 |
| `ocean-bookings/pages/OceanBookingsView.vue`、`OceanBookingDetailView.vue`、Documents/Print 子组件 | 订舱列表、新增/详情独立页、36—41号打印选择/PDF预览、放舱、文件替换/作废及删除确认 | 列表、资料分组与浮层接入;PDF版面、原放舱资格和不可逆警告保留 |
| `trucking/pages/TruckAppointmentsView.vue`、Create/Detail、Form/Attachment 子组件 | 预约列表、新增/详情独立页、42—44号附件与状态确认 | 紧凑表单及详情面板接入;不改订舱快照、承运商与状态 |
| `customs/pages/CustomsCasesView.vue`、`outbound-dispatch/pages/OutboundDispatchesView.vue` | 历史报关、国内出仓列表及原详情弹框、提交/确认操作 | 查询/表格及浮层显式接入;门禁和原操作保留 |
| `port-schedules/pages/PortSchedulesView.vue`、Carrier/Container 面板 | 船期列表、维护/历史弹框、货柜详情履约轨迹及人工节点浮层 | 保留两类节点含义与详情滚动,统一外框及证据表 |
公共组件和全量门禁由总控统一维护;本组仅做必要定向检查。接口、权限、状态、金额及业务脚本不在本批改造范围。
本批实际源码清单(均相对 `apps/admin-web/src/modules/`):
| 模块 | 修改文件 |
|---|---|
| `container-loading` | `pages/ContainerWorkbenchView.vue`、`ContainersView.vue`、`ContainerDetailView.vue`、`GlobalSmartLoadingView.vue`、`SmartLoadingWorkbenchView.vue`;`components/ContainerCustomsPanel.vue`、`ContainerLastLegFeesPanel.vue`、`ContainerOverviewPanel.vue`、`ContainerSimulationCreate.vue`、`OceanBookingLinkDialog.vue`、`SmartLoadingDialog.vue` |
| `loading-lists` | `components/LoadingListsView.vue`、`LoadingListDetailDrawer.vue`、`ContainerFeesPanel.vue`、`PalletLabelPrintDialog.vue`;`pages/ConfirmedLoadingListDetailView.vue`、`PreloadPlanDetailView.vue` |
| `ocean-bookings` | `pages/OceanBookingsView.vue`、`OceanBookingDetailView.vue`;`components/OceanBookingDocumentsPanel.vue`、`OceanBookingPrintDialog.vue` |
| `trucking` | `pages/TruckAppointmentsView.vue`、`TruckAppointmentCreateView.vue`、`TruckAppointmentDetailView.vue`;`components/TruckAppointmentForm.vue`、`TruckAttachmentDialog.vue` |
| `customs` | `pages/CustomsCasesView.vue` |
| `outbound-dispatch` | `pages/OutboundDispatchesView.vue` |
| `port-schedules` | `pages/PortSchedulesView.vue`;`components/CarrierScheduleQueryPanel.vue`、`ContainerPortSchedulePanel.vue` |
已完成列表真实外壳、详情卡片、资料/证据表与浮层主题接入;旧报关、出仓及船期详情的广域 `:has` 弹框覆盖和重复正文滚动已移除,使用原 AppDialog 公共框架。三栏智能装柜的表格外层保留伸缩和独立滚动;清单独立详情采用卡片,货柜页签内保持平铺;打印保留原紧凑正文内边距并去掉屏幕卡片阴影。缺失查询任务编号显示“—”。已有客户选择器、放舱修正与模拟柜1000px宽度改动均保留,未发现活动写入冲突。
总控集成时需把本批49个真实消费者纳入公共合同,并补原生 `el-table` 的中性色覆盖(订单详情、测量/审核、价格版本、柜级尾程费用、清单历史、托盘打印、船期日历与出仓门禁)。这些表格保留原几何和状态色,本组未复制一套公共表格默认规则。独立查询已使用 `workbench-query`,关联抽屉已使用 `is-drawer`。
本批定向65文件807项的分段检查、失败复验及最终模板编译结果统一记录于[国内仓本批检查结果](Admin国内仓样式核对记录.md#蓝白工作台接入矩阵2026-10-20)。业务脚本与本批起点的散列核对无漂移(仅排除样式及帮助组件导入);API、类型、权限和路由未修改。全量集成检查及人工1920×1080、100%截图待总控和用户完成。
新增模拟柜加宽的当前发布状态见[模拟柜宽度 TEST 发布记录](测试环境单机部署与配置契约.md#admin-simulation-width-test-20261020),下方尚未部署为修改当时的检查记录。
货柜搜索区修正的当前发布状态见[Admin 展示修正 TEST 发布记录](测试环境单机部署与配置契约.md#admin-display-fixes-test-20261020)。下方未部署说明为修改当时的记录,当前状态以主契约为准。
## 新增模拟柜宽度反馈(2026-10-20)
| 页面 | 操作 | 截图依据及当前实现 | 本次结论 |
|---|---|---|---|
| `/container-loading/domestic` | 新增模拟柜 | 用户截图 `codex-clipboard-fe50c8ba-755f-43c0-9c20-385564d80d06.png`;560px弹窗、两组横排,仓库和渠道占位文字被截断、规格说明多次换行 | 已接入高密度的货柜入口宽度改为1000px,并保留视口减28px上限;未接入高密度的其他消费者仍为560px。字段、标签、两组排列、默认柜型、规格、仓库渠道联动及创建请求不变 |
定向3文件114项、类型检查、构建通过;组件测试同时验证高密度入口1000px、其他入口560px及原创建请求。全量454文件4105项中4103项通过,2项导航/海外主数据路由断言失败,分别为 `adminNavigation.test.ts` 的菜单清单及 `overseas-master-data/routes.test.ts` 的路径与权限清单;本次未修改这两处实现或断言。组件脚本未变,组件及直接测试在检查前后散列一致。本次宽度调整尚未部署,待人工1920×1080、100%缩放截图确认。
## 货柜列表搜索区截图反馈(2026-10-20)
| 页面 | 操作 | 截图依据及当前实现 | 本次结论 |
|---|---|---|---|
| `/container-loading/domestic` | 客户、关键词、柜型、状态及预计开船日期筛选 | 用户截图 `codex-clipboard-d6d00778-4a50-4222-a75e-841261550182.png`;页面将公共搜索栏最后一组设为 `width:100%; flex:0 0 100%`,日期和按钮被强制另起一行 | 删除页面的强制整行覆盖,沿用 QueryToolbar 按可用宽度自然换行;最后一个筛选与查询、重置、布局按钮继续成组。筛选字段、顺序偏好、字段宽度、查询及重置行为不变 |
仅删除共享货柜列表的一行局部布局声明,不修改公共组件或筛选业务;同源海外工作台沿用同一排布。未部署;1920×1080、100% 缩放的新布局待人工截图确认。
检查结果:初次定向 3 文件 / 118 项、类型检查、构建通过;全量执行 448 文件 / 4056 项通过,但期间其他任务修改了 16 项源码输入,该结果不作为最新工作区冻结快照的完整验收。补查本页、模拟柜直接依赖、公共搜索栏及密度合同共 120 项,119 项通过,1 项失败:另一处修改删除了模拟柜说明中的“创建后自动生成柜次号”,`ContainersView.test.ts:632` 的旧文案断言尚未同步。本次未改写该组件或该断言;搜索布局合同与公共搜索栏检查通过,最终类型检查及构建重新通过。搜索页面、公共搜索栏和本次密度合同在检查前后散列一致。
## 统一弹窗整理:预装清单与全局智能装柜(2026-10-20)
本批沿预装清单的正式详情路由,以及订单列表实际调用的`SmartLoadingDialog → GlobalSmartLoadingView`进入,依据已确认的[测量样板](界面参考/Admin弹窗样板-测量.png)和[高密度规范](Admin高密度界面规范.md)。全局智能装柜实际为候选、柜次、方案三栏数据工作台,本批保留三栏尺寸、筛选、独立滚动及默认全屏。截图编号从91接续。
| 操作 | 当前承载 | 本批实施结论 |
|---|---|---|
| 补录/纠正集装箱号及航次 | `PreloadPlanDetailView`,620px AppDialog | 原3项字段改浅黄连续表,标题带预装单号;保留大写规范化、纠错原因、PDA状态门禁和版本 |
| 编辑预装明细备注 | 680px AppDialog,客户备注为禁用输入 | 800px连续表,客户备注显示只读文字、原3项备注可编辑,支持全屏;保留两层版本、操作号及冲突后保留输入 |
| 确认预装并推送PDA | 520px AppDialog,分散描述块 | 浅绿连续资料表、业务编号标题及原警告,保留外部作业员选择、可确认条件与原请求 |
| 全局智能装柜工作台 | 默认全屏AppDialog,普通模式1600px/94vh | 接入统一标题/底栏和显式密度根,保留三栏几何、各自滚动和返回普通尺寸;行内操作接入现有公共样式 |
| 普通/待审核候选加入 | 全局工作台`assignOpen` | 920px来源浅蓝、填写浅黄连续表、业务编号标题及全屏;保留普通与待审核各自API、平均毛重/体积、数量上下限及跨渠道警告 |
| 同柜组/封托整托加入 | 同一窗口的两种分支 | 保留完整组成及不可拆提示,无部分箱数控件,继续走原子分配接口 |
| 普通/同柜组/整托移除、移除全部未拣 | 现有ElMessageBox | 接入公共确认样式及柜次标题;原拣货保护、联动范围、数量、版本和请求顺序不变 |
本批不新增PDA分配入口、装柜方式或权限,不修改三栏工作台的业务筛选和容量统计。
代码已落实为91—103号,唯一截图入口继续维护在[固定编号清单](Admin国内仓样式核对记录.md#当前修改的截图核对清单)。客户备注保留换行并显示为只读文字;运输、其余备注、预装确认的原字段、权限、规范化、版本和操作号均保留。全局工作台新增显式密度根及公共行操作样式,原固定字号改为公共变量;选中柜次使用背景、边框和`aria-pressed`,去掉左侧色条。
外层工作台保留默认全屏、普通模式1600px/94vh及各栏独立滚动。业务专属零内边距和隐藏外层滚动使用更明确的几何选择器,避免公共弹窗样式覆盖后引入第二层滚动。分配窗口保留目标、集装箱号、发货仓、双方渠道、未知测量值及跨渠道警告;同柜组和整托保持完整组成,无部分分配控件。移除确认只补业务标题和公共样式,原请求顺序、范围、拣货保护和版本不变。
三个组件的脚本在排除标题格式化、确认框样式及密度导入后与本批起点一致。初次定向检查识别出旧固定字号和描述块标签断言;已按公共变量及同一确认表格的资料项收敛,未放宽样式所有权检查。新增真实表单验证沿用仓库现有CJS入口,避免测试导入方式影响校验器;覆盖补录/纠错、客户备注只读、全屏保留输入、双版本冲突后重试及PDA作业员必选。全局补查普通与整托精确载荷、待审核未知测量/跨渠道提示、整组和整托原子接口及批量移除。
本批最终验证(2026-10-20):
- 定向8文件151项通过;类型检查、构建及Admin完整419文件3551项测试全部通过,最终四项退出码均为0。
- 重型检查经统一入口串行执行,临时沿用用户已授权的6GB Node堆上限;项目配置、统一入口和worker并发保持原值。
- 本批25个直接源码、测试、API、类型、公共框架、样式和依赖输入在最终完整检查前后散列一致;差异空白检查通过,生成声明、依赖清单和锁文件没有改动。
- 当前仍在`release/test`;本批未提交或部署,91—103号继续等待人工1920×1080、100%缩放截图确认。
- 持续目标未完成。下一组从104号整理客户管理的新增/编辑/查看、资质预览、入驻审核、账号结果及受限操作窗口;已从`CustomersView`的实际调用定位,尚未改写其原权限、资质、账号或凭据流程。当前货柜和预装清单通过不能替代客户管理及其余Admin模块验收。
## 统一弹窗整理:原柜船期与智能装柜(2026-10-19)
本批依据用户确认的[测量样板](界面参考/Admin弹窗样板-测量.png)及[统一高密度规范](Admin高密度界面规范.md),沿`container-loading/routes.ts`的实际货柜列表、详情和智能装柜子路由核对。截图从83号接续;以下为修改前实施矩阵。
| 操作 | 当前承载 | 实施结论 |
|---|---|---|
| 登记原柜船期 | `ContainerPortSchedulePanel`,1120px AppDialog,12项字段 | 原归属资料浅蓝只读表、填写区浅黄连续表、历史浅蓝,标题带柜次,支持全屏;来源、有效期与截止校验保留 |
| 原柜船期维护及历史 | 同一窗口,1000px;4项船运资料及修改原因 | 连续表与原历史记录,去掉内部65vh二次滚动;保留原客户/订舱/货柜归属、版本、冻结请求与关闭后忽略迟到响应 |
| 仅列表权限查看 | 同一窗口,禁用输入框 | 当前四项船运事实直接显示文字,历史保持可见;不新增写权限,不将修改原因输入当作当前事实 |
| 普通入仓码分配箱数 | 智能装柜工作台`assignOpen`,默认AppDialog | 780px浅黄连续表,原货物、可用箱数与本次箱数紧凑横排;保留整数、上下限及原接口 |
| 同柜组/封托托盘加入 | 同一窗口两种分支 | 原来源组成浅蓝、整组/整托事实及不可拆提示保留,无部分箱数输入;支持全屏、原子分配接口不变 |
| 移除普通明细/同柜整组 | 两种原ElMessageBox确认 | 仅标题补柜次业务编号,保留风险提示、联动移除及原版本链 |
实际列表路由经过`ContainerWorkbenchView`复用此前已整理的`ContainersView`;详情的其余直接子面板及打印/费用窗口见前批固定编号。`ContainerOverviewPanel`无额外业务弹框,智能装柜本页只发现上述分配窗口与两种移除确认;不以这一条路由审计推定所有Admin模块已完成。
代码已落实为83—90号,唯一截图入口见[跨模块固定编号](Admin国内仓样式核对记录.md#当前修改的截图核对清单)。原柜归属、当前四项船运事实及历史快照均保留;只读账号不再显示不可编辑的灰色表单,也不将本次修改原因输入当作当前事实。写入账号保留12项首次登记、5项维护字段,以及处理中/待重试时的冻结控件和原请求。
智能装柜仍为独立页面。仅重排居中分配窗口:普通入仓码保留可用箱数、本次数量、摘要及核验说明;同柜组保留全部订单和入仓片段;封托托盘继续使用原入仓组成展开组件。窗口标题显示入仓码、同柜组号或托盘号,移除确认显示柜次。未重写已存在的页头帮助改动、表内箱数编辑或原分配/移除接口。
两份业务脚本在排除本批标题/样式导入,并保留本批之前已存在的`InlineHelp`导入后,与本批起点一致。初次定向6文件102项通过,覆盖原归属校验、首次来源必填、无变化不保存、冲突/失败重试、迟到响应、只读历史、全屏保留值,以及三种分配的精确请求;已将新接入的原柜船期组件纳入公共样式所有权清单。
本组最终验证:
- 补查托盘组成组件后,定向7文件104项通过;类型检查、构建和Admin完整418文件3545项测试全部通过,最终四项退出码均为0。
- 检查经统一入口串行执行,临时沿用用户已授权的6GB Node堆上限;没有修改入口、项目配置或worker并发。
- 本组22个源码、测试、类型、公共框架、样式和依赖输入在最终完整检查前后散列一致;差异空白检查通过,生成声明、依赖清单和锁文件无改动。
- 当前仍在`release/test`,本组未提交或部署;83—90号等待人工1920×1080、100%缩放截图确认。
- 持续目标未全部完成。下一组从91号整理预装清单详情的运输信息、备注、确认推送,以及订单列表实际调用的`SmartLoadingDialog → GlobalSmartLoadingView`及其子窗口。全局工作台通过弹窗嵌入,并非本次已处理的货柜智能装柜子路由;不以同名业务或当前路由通过推定其完成。
## 统一弹窗整理:柜次费用、托盘打印与船节点(2026-10-19)
本组沿货柜详情的实际调用继续,依据用户确认的[测量样板](界面参考/Admin弹窗样板-测量.png)和[高密度规范](Admin高密度界面规范.md)。修改前实施矩阵如下,截图编号从77接续。
| 操作 | 当前承载与直接消费者 | 本组实施结论 |
|---|---|---|
| 新增/调整柜次费用 | `ContainerFeesPanel`的AppDialog,货柜详情唯一调用 | 1080px浅黄连续表,调整资料只读文字与日期/金额同表,支持全屏;保留付款校验、单票和分摊组请求及版本 |
| 多票费用分摊 | 同一费用窗口的逐条卡片 | 同一表单内连续明细表,客户/订单/入仓码只读,金额编辑及合计末行;原分摊限制不变 |
| 驳回/作废柜次费用 | 原AppDialog/ElMessageBox | 原白底原因/确认框,标题带业务编号;保留整组审核、原因必填和版本 |
| 散货托盘码打印选择 | `PalletLabelPrintDialog`的760px AppDialog,货柜详情及清单详情调用 | 仅dense模式改920px,接入浅黄打印选择、浅蓝服务器清单和全屏,标题使用服务端柜号;默认模式和PDF标签格式保留 |
| 人工补录船节点 | `CarrierScheduleQueryPanel`的620px AppDialog | dense模式改780px浅黄连续填写表和全屏,父货柜传业务编号供标题展示;默认消费者保留原排列,窗口观测时间、幂等键及原失败重试不变 |
| 清单详情/清单打印 | 现有页内详情和`window.print()` | 保留既有承载与纸张样式;详情组件本身无额外业务弹框,不因名称含Drawer改造承载 |
本组不会改写其他任务已移除的页面说明,也不将业务编号展示属性写入费用或船节点请求。
代码已落实为77—82号,完整截图入口维护在[固定编号清单](Admin国内仓样式核对记录.md#当前修改的截图核对清单)。新增费用的条件付款字段及备注保留;调整资料不再使用另一套描述组件,方向、项目、供应商、结算和既有备注为只读文字,日期与金额使用原控件。多客户分摊使用同一表单内的连续明细表及合计末行,原分摊范围、正数/合计限制、整组审核和版本不变。
凭证选择提示改为文件格式及最多20个,不展示内部用途枚举。托盘码仅改变选择窗口,不改服务端编号、PDF格式、按仓张数或下载文件名;未开启dense模式的消费者保留原尺寸和排列。船节点同样仅在dense模式接入新布局,默认消费者保留旧排列,业务编号只作标题展示。
三个组件的业务脚本在排除展示标题及柜次上下文后与本组修改前相同。定向覆盖费用权限、候选异步过期、单票及跨客户分摊、调整载荷、已付凭证、托盘码两种密度模式的按仓打印、船节点两种布局下的冲突重试、关闭/全屏和直接货柜详情消费者。后续原柜船期窗口仍待整理,本组不代表全部货柜入口已完成。
首轮定向7文件123项、类型和构建通过;完整检查发现货柜详情的一条旧源码断言将标题、计划及货柜属性拼接为固定相邻顺序,新增展示属性后失败,其余417文件3544项通过。已将该断言改为在同一个`ContainerFeesPanel`标签内逐项核对原标题、计划、真实货柜、客户及业务归属,并核对新增展示属性;没有降低原关联要求或改动运行代码。最终门禁按修正后的测试输入重新执行。
本组最终验证:
- 补齐直接消费者后的定向8文件134项通过;类型检查、构建及完整418文件3545项测试全部通过,最终四项退出码均为0。
- 检查统一经`local-check.ps1`串行执行,沿用本轮已授权的6GB临时Node堆上限,未修改配置或worker并发。
- 本组22个源码、测试、公共框架、样式及依赖输入在最终完整检查前后散列一致;差异空白检查通过,生成声明、依赖清单及锁文件无改动。
- 当前仍在`release/test`;本组未提交或部署,77—82号等待人工1920×1080、100%缩放截图确认。
- 持续目标仍未完成。下一组从83号进入`ContainerPortSchedulePanel`的登记原柜船期、维护/只读及修改历史,随后继续核对货柜剩余入口;不能以本组通过推定所有Admin弹窗已完成。
## 统一弹窗整理:报关与尾程费用(2026-10-19)
本批沿货柜详情的实际共享组件进入,不改变报关与财务流程。视觉依据为本轮用户确认的[测量弹窗样板](界面参考/Admin弹窗样板-测量.png)及[高密度界面规范](Admin高密度界面规范.md),沿用无左色条、浅色背景和紧凑连续表。修改前实施矩阵如下;固定截图编号从62接续,人工视觉结果与自动检查分别记录。
| 操作 | 当前承载 | 本批实施结论 |
|---|---|---|
| 标记海关异常/结果 | 460px原生弹框 | 同尺寸AppDialog、白底短表单、固定底栏;标题带申报批次,保留其他原因必填和原关闭规则 |
| 七种报关确认/说明 | ElMessageBox | 仅补柜次号或申报批次标题,保留确认文本、原因校验、版本和资格 |
| 新增/调整尾程费用 | 620px AppDialog | 920px浅黄连续编辑表、原条件字段与固定底栏、支持全屏;调整时所属客户显示只读文字 |
| 付款凭证预览 | 900px AppDialog | 浅蓝预览区、业务编号标题、完整文件名;图片支持全屏,保留下载、错误和Blob释放 |
| 四种费用确认/原因 | ElMessageBox | 标题带柜次或真实柜号,保留审核、驳回、作废及版本/幂等语义 |
柜次号仅用于窗口标识,真实集装箱号仍独立作为费用写入门禁和请求字段。没有新增权限、状态、业务字段或接口。
本组代码已落实为62—76号,唯一截图入口维护于[跨模块固定编号清单](Admin国内仓样式核对记录.md#当前修改的截图核对清单)。两个共享组件的脚本在排除标题格式化及新增柜次上下文后,与本组修改前完全相同;保存请求、版本、原因校验、上传异步隔离和资源释放没有变化。货柜详情只新增柜次号展示属性,费用业务编号与真实柜号请求仍使用原字段。
新增交互覆盖其他原因必填及原批次版本、取消开始报关、条件付款字段、全屏保留输入、实际费用载荷、调整客户只读和真实柜号缺失门禁。已有凭证替换/移除、客户切换忽略旧上传、只读预览释放资源和报关只读/下载测试保留。样式所有权检查仅将显式`density-table--editable`内的表单按钮与列表行操作区分,普通数据表的行操作检查继续生效。
本组最终验证:
- 定向4文件86项通过;`pnpm typecheck`、`pnpm build`及Admin完整418文件3541项测试全部通过,最终三项退出码均为0。
- 所有重型检查经统一入口串行执行,临时沿用用户已授权的6GB Node堆上限;没有修改项目配置、统一入口或worker并发。
- 本组15个直接源码、测试、样式、框架及依赖输入在最终检查前后散列一致,差异空白检查通过;生成声明、依赖清单和锁文件没有改动。
- 当前仍在`release/test`分支,本组未提交或部署。62—76号等待人工1920×1080、100%缩放截图确认,不以自动检查替代视觉验收。
- 持续目标仍未全部完成。下一组从77号接续共享柜次费用、清单/打印及船节点窗口;本组没有将这些未整理入口计为完成。
## 统一弹窗整理:货柜列表与详情(2026-10-19)
本批从当前`ContainersView`、`ContainerDetailView`的12个实际居中窗口及5个ElMessageBox确认进入,沿用用户已确认的紧凑信息表、浅色背景、无左色条和固定底栏。以下为修改前实施矩阵,正式详情路由保留;不以旧版密度验收或单个消费者推定整组完成。
| 操作 | 当前承载/尺寸 | 本批实施结论 |
|---|---|---|
| 列表 → 编辑基础资料 | `editorOpen`,820px | 17项字段改为1080px三组横排的连续编辑表;只读柜号、柜次、容量、限重直接显示文字;保持仓库/柜型等校验和原保存载荷 |
| 列表 → 新增模拟柜 | `ContainerSimulationCreate`,560px,另由预装入口消费 | 仅dense模式接入紧凑连续表与浅黄填写区;默认消费者保留原样,仓库渠道联动和固定规格不变 |
| 列表/详情 → 关联订舱 | `OceanBookingLinkDialog`,680px | 同一连续表展示柜次号、候选与可选真实柜号;柜次只读,业务编号标题、支持全屏;原筛选/版本/规范化不变 |
| 列表 → 还柜登记 | `drayageActionOpen`,520px | 原短白底时间/备注表单,标题带柜次或集装箱号,原资格与版本保留 |
| 列表 → 邮件记录/重试确认 | `emailHistoryOpen`,1100px;ElMessageBox | 只读浅蓝表格、全屏、业务编号标题;保留最近100封、正文展开、发送风险说明和重试门禁 |
| 列表 → 码头拖车记录 | `drayageHistoryOpen`,980px | 浅绿状态汇总、浅蓝历史表格,编号标题和全屏;错误重试、列与排序保留 |
| 详情 → 确认还柜 | `emptyReturnOpen`,520px | 原白底时间/备注表单及警告、业务编号标题;保留冻结载荷、幂等键重试与关闭保护 |
| 详情 → DO资料 | `documentOpen`,520px | 浅黄上传区和编号标题;当前上传控件重置、替换历史及错误反馈保留 |
| 详情 → 标记/取消异常 | `exceptionOpen`,520px | 白底原因表单及原危险/警告语义,标题带业务编号,必填原因与历史保留 |
| 详情 → 目的港清关资料 | `clearanceOpen`,520px | 浅黄上传区、完成状态沿用原提示;上传与完成动作放入固定底栏,保留加载/提交锁定及原资格 |
| 详情 → 直送卸货登记 | `directOpen`,1080px | 来源浅蓝表格、当前票浅黄连续表;只读票/无写权限显示文本,编辑使用原字段;支持全屏,保持冻结重试和退出保护 |
| 详情 → 提柜安排与执行 | `terminalOpen`,780px | 当前事实与填写内容在同一连续表中;三项原业务动作移到固定底栏,支持全屏,保持权限/待重试载荷/未保存保护 |
| 详情 → 国内出仓/三种未保存确认 | 现有ElMessageBox | 仅补业务编号标题,保留确认文本、动作、阻断和路由保护 |
标题统一使用本模块的柜次号优先、真实集装箱号其次;两个业务标识均缺失时只显示操作名,不使用内部ID补位。本批未新增业务操作或字段,后续固定截图编号从45接续。
本组代码已落实,固定截图编号为45—61,入口唯一清单见[跨模块截图编号](Admin国内仓样式核对记录.md#当前修改的截图核对清单)。四个业务组件的script在排除标题导入/格式化调整后与基线一致,未改动请求、校验、权限、版本、幂等键或关闭保护。直送只读内容显示实际来源记录,不把填写区的默认时间当作已签收事实。
模拟柜仅在显式dense模式使用连续表;默认模式保留原表单。两个模式均通过真实表单必填校验和相同固定规格载荷检查,预装入口的创建消费者同步回归。简短说明、定制固定底栏分别使用公共`density-dialog-note`和`density-actions--footer`;页面只维护字段排列、尺寸与表格列数,不复制公共配色/字号。
本组定向8文件137项通过,类型检查通过。覆盖列表与详情、国内/海外资格、版本0、还柜/提柜/签收冻结重试、关闭保护、全屏保留输入、只读签收凭据、关联订舱规范化与模拟柜两种密度模式。旧的820px双列和无业务编号标题断言已按本次矩阵更新,原业务请求与阻断断言保留。视觉仍待人工1920×1080、100%截图确认,未提交或部署。
初次完整检查418文件3535项及类型/构建通过后,代码复核发现提柜事实表的空值展示还需收敛:真实柜号不能回退为柜次号或窗口标题;已绑定车队但名称缺失时显示“—”,不误称尚未安排。已修正并新增来源响应空值用例,详情交互单文件35项通过,最终完整门禁按修正后的输入重新执行。
本组最终验证:
- `pnpm typecheck`、`pnpm build`均通过;Admin全量418个测试文件、3536项全部通过,三项退出码均为0。
- 所有检查经统一入口串行执行,临时沿用已授权的6GB Node堆上限;统一入口、并发限制与项目配置未修改。
- 本组18个相关源码、测试及共享框架/样式输入在最终完整检查前后散列一致,差异空白检查通过;生成声明、依赖清单和锁文件无本组改动。
- 本组未提交或部署。45—61号继续等待人工1920×1080、100%缩放截图确认,不以自动检查替代视觉验收。
- 持续目标尚未完成。下一组沿实际调用处理`ContainerCustomsPanel`的海关结果与报关确认、`ContainerLastLegFeesPanel`的费用编辑/凭证预览及确认,再接续共享头程费用、清单/打印和船节点窗口;新增截图编号从62开始。没有把这些尚未整理的子窗口记为本组完成。
## 统一弹窗整理:订舱与拖车(2026-10-19)
本批依据《Admin高密度界面规范》的统一弹窗目标和本轮用户对紧凑布局、无左色条的确认,沿实际组件实施以下矩阵。固定截图编号接续《Admin国内仓样式核对记录》的1—35,不另行重排;代码检查与人工截图分别记录,不以旧版密度检查推定新版已通过。
| 页面 → 操作 | 当前承载/直接消费者 | 本批结论 |
|---|---|---|
| 订舱列表/订舱详情 → 选择打印类型 | `OceanBookingPrintDialog`,1120px AppDialog;列表、详情两处调用 | 原两种PDF保留,选择区浅蓝,单选与说明紧凑排列;标题和当前订舱仅用订舱号,缺失不展示内部ID |
| 上一窗口 → PDF预览、返回选择、下载 | 同一1120px窗口和iframe | 保留PDF载体与正常预览高度,PDF阶段增加全屏,固定原底栏;核对返回、关闭、重新选择时的选择值和Blob释放;文件名不以内部ID回退 |
| 订舱详情 → 确认放舱 | `OceanBookingDetailView.releaseDialogOpen`,560px AppDialog | 标题带订舱号,浅绿只读资料表和原警告;去掉面向用户的数据库处理说明,保留不可修改/删除语义及原保存后放舱版本链 |
| 订舱资料 → 替换文件/作废文件 | `OceanBookingDocumentsPanel`,现有ElMessageBox | 沿用已接入的公共确认框样式,标题带订舱号;保留文件名、二次确认、上传限制、作废历史和版本链,操作人缺失不展示数据库ID |
| 订舱详情 → 删除草稿确认 | `OceanBookingDetailView.removeDraft`,现有ElMessageBox | 标题带订舱号,保留原不可恢复说明、删除权限、版本和成功后的列表跳转 |
| 订舱新建/详情、资料主面板 | 正式路由与详情页内组件 | 保留现有承载;不将新建或资料面板改为弹窗 |
订舱详情向共享船期组件仅传`oceanBookingId`,本页不能打开其要求`containerBookingId`的人工补录窗口;该窗口归后续货柜实际消费者整理,不将其列为订舱弹窗完成项。
同批接续下一个实际菜单“拖车列表”,新增与编辑仍沿独立页面执行,仅整理以下浮层:
| 页面 → 操作 | 当前承载/直接消费者 | 本批结论 |
|---|---|---|
| 拖车详情 → 预约附件 | `TruckAttachmentDialog`,640px原生居中弹框;详情唯一直接调用 | 收敛为同尺寸AppDialog,保留原关闭/遮罩规则和固定关闭底栏;预约号标题,上传区浅黄、现有附件浅蓝,长文件名完整换行,支持全屏 |
| 预约附件 → 删除附件 | 原ElMessageBox确认 | 保留删除权限与忙碌门禁,标题带预约号,确认中明确文件名,不展示内部ID |
| 拖车详情 → 状态变更确认 | `TruckAppointmentDetailView.changeStatus`的现有ElMessageBox | 原目标状态、权限及接口保留,仅标题补充预约号;改期沿用页面已有装货时间来源,未新增状态表单 |
固定截图编号为36—44,完整入口继续维护于[截图核对清单](Admin国内仓样式核对记录.md#当前修改的截图核对清单)。打印选择与资料确认属于订舱列表/详情直接消费者;附件窗口由拖车详情唯一调用,正式新增、编辑和详情路由未改动。
按两模块当前Vue文件中的AppDialog/原生弹框和ElMessageBox调用复核,本批覆盖3个居中窗口和5个确认框;打印窗口的选择/预览两种状态分开编号,共9个截图入口。订舱引用的共享船期人工补录窗口不在本页开放,未据此声称共享货柜窗口已完成。
除业务编号标题、缺失值文案及打印资源生命周期外,订舱资料、放舱、拖车附件和状态变更的业务script经差异还原核对与基线一致;保持全部请求字段、权限、版本及文件限制。打印窗口关闭/重开后,迟到的旧请求不会创建或覆盖新的Blob预览;返回选择、退出全屏及下载仍使用当前单据与原打印类型。预览只增加本组件显式全屏布局,不修改AppDialog、公共颜色/字号默认值或PDF输出内容。
本组关键交互与公共密度定向5文件63项通过,覆盖打印类型/全屏/返回/缺失编号/旧请求隔离、资料替换与作废版本链、放舱当前编辑值及附件只读/上传/删除。扩大到订舱、拖车及密度的首次定向检查发现两处新用例的挂载与Blob断言问题,已修正后复验;最终回归还覆盖全屏后保留已选附件和类型。
本组最终验证:
- `pnpm typecheck`、`pnpm build`均通过;Admin全量416个测试文件、3530项全部通过,三项退出码均为0。
- 检查均经统一入口串行执行,临时沿用已授权的6GB Node堆上限;未修改统一入口、并发限制或项目配置。
- 本组14个相关源码、测试及共享样式/框架输入在完整检查前后散列一致,差异空白检查通过;生成声明、依赖清单和锁文件无本组改动。
- 人工视觉仍待1920×1080、100%缩放下按36—44号截图确认,本轮未提交或部署。
- 持续目标尚未完成。下一组从货柜列表的`container-loading/pages/ContainersView.vue`开始,核对当前4个列表窗口及模拟柜、关联订舱直接消费者,再接续`ContainerDetailView.vue`当前6个窗口和其共享子窗口;国内/海外实际消费者分别核对,正式详情路由继续保留。新增截图编号从45开始,不以本组通过推定整个Admin弹窗完成。
## 本次范围与状态
用户确认继续优化货柜管理的 4 个菜单。本轮按下表实现列表、独立新建/详情页、智能装柜工作台及关联弹框的密度统一。代码检查结果在文末记录;未进行本轮浏览器视觉验收,所有修改后效果均待人工截图确认。
统一使用 [Admin 高密度界面规范](Admin高密度界面规范.md),以国内仓与客户管理为样板。普通列表、行内描边按钮、详情返回与页签、连续信息表、表单和浮层框架复用公共能力;业务状态、权限、接口、字段顺序、独立页面/弹框/抽屉承载方式保持现有契约。
## 4 个菜单与实际入口
范围依据:[Admin 导航](../apps/admin-web/src/core/navigation/adminNavigation.ts) 的 `container-management` 分组。下表源码路径相对 `apps/admin-web/src/modules/`。
| 菜单 | 页面与路由 | 新建、详情及相关组件 | 改造前继续核对 |
|---|---|---|---|
| 订舱列表 | `ocean-bookings/pages/OceanBookingsView.vue`,`/ocean-bookings` | `/ocean-bookings/new` 与 `/:bookingId` 共用 `OceanBookingDetailView.vue`;`OceanBookingDocumentsPanel`、`OceanBookingPrintDialog`、`CarrierScheduleQueryPanel` 和确认放舱弹框 | 新建与详情分别核对;资料、打印、船期、放舱资格及处理中状态不能丢失 |
| 拖车列表 | `trucking/pages/TruckAppointmentsView.vue`,`/trucking` | `TruckAppointmentCreateView.vue`(`/trucking/new`)、`TruckAppointmentDetailView.vue`(`/trucking/:id`);共用 `TruckAppointmentForm`、`TruckAttachmentDialog` | 新建是独立页面,编辑经详情页 `edit=1`;表单、附件、返回目标和状态资格分别核对 |
| 送柜报关 | `container-loading/pages/DomesticContainersView.vue`,`/container-loading/domestic` | 列表共用 `ContainersView.vue`;详情经 `DomesticContainerDetailView.vue` 到 `ContainerDetailView.vue`,均传 `workbench="DOMESTIC"`;另有 `SmartLoadingWorkbenchView.vue` 深链 | 模拟柜、关联订舱、装柜/预装关联、报关、费用、出仓及智能装柜入口按实际权限展开 |
| 清关提柜 | `container-loading/pages/OverseasContainersView.vue`,`/container-loading/overseas` | 列表共用 `ContainersView.vue`;详情经 `OverseasContainerDetailView.vue` 到 `ContainerDetailView.vue`,均传 `workbench="OVERSEAS"` | 船节点、清关资料、码头车队、提柜/还柜、异常、文件和尾程费用按实际权限展开 |
路由事实:[订舱](../apps/admin-web/src/modules/ocean-bookings/routes.ts)、[拖车](../apps/admin-web/src/modules/trucking/routes.ts)、[货柜工作台](../apps/admin-web/src/modules/container-loading/routes.ts)。不将“国内仓”的整柜业务 `/domestic-containers` 当作这里的送柜报关页面。
## 共享边界与例外
1. `ContainersView.vue` 和 `ContainerDetailView.vue` 同时服务国内、海外。可以复用样式,但两个模式分别保留字段、操作权限和业务资格;不能只验国内模式就声称覆盖清关提柜。
2. `ContainerSimulationCreate.vue`、`PalletLabelPrintDialog.vue` 已被国内仓预装入口以 `dense` 接入。货柜管理接入时优先沿用该参数,并回归原国内仓调用;不复制组件或撤销已有密度。
3. 货柜详情实际引用 `ContainerOverviewPanel`、`CarrierScheduleQueryPanel`、`ContainerCustomsPanel`、`LoadingListDetailDrawer`、`ContainerFeesPanel`、`ContainerLastLegFeesPanel` 和 `OceanBookingLinkDialog`。沿这些组件继续盘点实际页签、弹框与消息确认;不要因为父详情接入了公共类就把全部子页面记为完成。
4. `LoadingListDetailDrawer` 当前是嵌入内容组件,名称不决定承载方式。它同时服务预装和已确认清单;为货柜详情的已确认模式接入密度时,要同步修改原“未接入模式保持默认”的合同与两个实际消费者用例,不能只放开样式后删检查。
5. 智能装柜的模型/画布、船期轨迹、打印标签与 PDF 保留必要面积;只压缩周边表单、说明和装饰留白。航运业务编号、实际柜号、长文件名应有完整展示方式。
## 原型与逐操作矩阵
原型先读 [局部指引](悦/货代SAAS平台后台/AGENTS.md),目标模块为 `prototype-src/modules/06-containers.html`:订舱 `page-booking-list` / `page-booking-detail`,拖车 `page-truck-list` / `page-truck-add` / `page-truck-edit`,历史货柜与装柜入口 `page-ct-list` / `page-ct-manifest` / `page-ct-board`。
当前菜单以用户提供的新版.html为准,恢复订舱、拖车、货柜、装柜清单、预装清单五个入口;货柜入口提供国内/海外阶段切换,沿用各自服务端权限与动作。本轮以用户确认的密度规则和当前实际组件、事件为依据,保留如下承载方式:
| 页面/模式 | 操作与承载方式 | 当前组件与依据 | 采用公共规则/业务例外 | 验证与截图 |
|---|---|---|---|---|
| 订舱 | 列表查看/编辑,跳转独立页面 | `page-booking-list`;`OceanBookingsView.open` | 灰色纯文字描边;草稿编辑、已放舱查看资格保留 | 待人工截图确认 |
| 订舱 | 新建草稿、保存及详情 | `page-booking-detail`;`OceanBookingDetailView` 的 `booking-groups` | 轻量返回与标题同区;原业务分组与字段顺序保留,去除内层卡片;柜型操作列保留在首列 | 待人工截图确认 |
| 订舱 | 删除草稿、确认放舱 | `removeDraft` / `releaseDialogOpen` 与 `submitRelease` | 删除消息独立接入;放舱保留 560px 居中确认与只读、处理中门禁 | 待人工截图确认 |
| 订舱 | 上传/替换、下载、作废资料与作废历史 | `OceanBookingDocumentsPanel.selectFile/download/remove` | 类型分组改连续资料行,长文件名换行;替换与作废仍需原消息确认 | 待人工截图确认 |
| 订舱 | 选择打印类型、PDF 预览/下载 | `OceanBookingPrintDialog.preview/backToSelection/download` | 保留 1120px 弹框、预览视口及 PDF 输出尺寸;选择项减小留白 | 待人工截图确认 |
| 订舱 | 船期与状态历史 | `CarrierScheduleQueryPanel`;`OceanBookingDetailView` 的 `detail.histories` | 船期显式 `dense`;状态历史表保留时间、状态变化、操作人、原因与原排序 | 待人工截图确认 |
| 拖车 | 列表详情/编辑,独立新建页 | `page-truck-list` / `page-truck-add`;`TruckAppointmentsView.openDetail`、`TruckAppointmentCreateView` | 行内纯文字描边;新建页返回和标题同区,不再放进表单说明末尾 | 待人工截图确认 |
| 拖车 | 编辑、只读详情及保存 | `page-truck-edit`;`TruckAppointmentDetailView`、`TruckAppointmentForm` | 返回/编号/状态同区;桌面四列表单、关联与长地址跨列保留,公共表单字号间距 | 待人工截图确认 |
| 拖车 | 状态变更确认与历史 | `changeStatus`、`history` | 原资格和确认消息;历史连续表格保留全部记录及操作人/原因 | 待人工截图确认 |
| 拖车 | 附件查看、上传/关联、删除 | `TruckAttachmentDialog` | 保留 640px 居中弹框;连续附件行,删除红色描边,消息独立接入 | 待人工截图确认 |
| 送柜报关 DOMESTIC | 列表、编辑基础资料 | `DomesticContainersView → ContainersView`;`openEdit/save` | 未完结/已完结页签 38px;查看、编辑、装柜、清单保持原排列;820px 双列表单使用公共弹框 | 待人工截图确认 |
| 送柜报关 DOMESTIC | 新增模拟柜、关联订舱 | `ContainerSimulationCreate`;`OceanBookingLinkDialog.save` | 模拟柜沿用 `dense`;关联保留 680px 弹框和候选资格 | 待人工截图确认 |
| 送柜报关 DOMESTIC | 智能装柜、分配/移除、调整箱数 | `SmartLoadingWorkbenchView.recommend/openAssign/assign/remove/startQuantityEdit` | 独立深链;保留容量进度、同柜组与封托说明、列表和分配弹框;普通行内操作接入描边 | 待人工截图确认 |
| 双工作台详情 | 返回、概要、业务页签 | `ContainerDetailView` 的 `workbench-tabs` | Element 页签保留键盘行为,改 38px 彩色图标;概要为紧凑摘要,字段为四组连续描述表 | 待人工截图确认 |
| 送柜报关 DOMESTIC | 异常标记/取消与历史 | `ContainerOverviewPanel` 的 `exception`;`ContainerDetailView.exceptionOpen` | 历史原因自然换行;520px 原因弹框独立接入 | 待人工截图确认 |
| 送柜报关 DOMESTIC | PDA 进度与照片、国内出仓门禁 | `ContainerOverviewPanel` 的 `pda`;`confirmDeparture` | 去除内层卡片、数字改小摘要;保留进度、照片原图入口、全部门禁展开及离仓确认 | 待人工截图确认 |
| 送柜报关 DOMESTIC | 报关资料、下载、上传完成文件、开始/完成报关 | `ContainerCustomsPanel` | 连续原生资料表,操作首列;纯文字描边,不改变全买单/退税分流或完成条件 | 待人工截图确认 |
| 送柜报关 DOMESTIC | 装柜清单页签、打印清单/托盘码 | `LoadingListDetailDrawer`;`printLoadingList`;`PalletLabelPrintDialog` | 预装/已确认模式均由调用者显式接入;保持嵌入内容及打印载体,PDF 尺寸不变 | 待人工截图确认 |
| 清关提柜 OVERSEAS | 列表、车队选择、发送/重试邮件与记录 | `ContainersView.selectRowFleet/sendPickupEmail/retryEmail/openEmailHistory` | 原列表控件与业务资格;邮件记录 1100px 弹框、重试确认独立接入,邮件正文保留换行 | 待人工截图确认 |
| 清关提柜 OVERSEAS | 预约/实际提柜、还柜及拖车历史 | `drayageActionOpen`、`drayageHistoryOpen`;详情 `emptyReturnOpen` | 520px 时间与原因表单、980px 历史;超时状态和服务端时间事实原样保留 | 待人工截图确认 |
| 清关提柜 OVERSEAS | 清关/DO 文件上传下载、PU 保存、完成清关 | `ContainerOverviewPanel` 的 `documents`;`documentOpen/clearanceOpen` | 操作首列描边;文件与 PU 保持不同流程,520px 弹框;无资料/只读/失败状态保留 | 待人工截图确认 |
| 订舱/双工作台 | 履约轨迹、任务历史、人工船节点补录 | `CarrierScheduleQueryPanel` | 原轨迹分组和时间顺序保留;长摘要换行,展开查询事实为连续信息表;620px 补录弹框仅在 `dense` 模式接入 | 待人工截图确认 |
| 双工作台费用页签 | 头程新增、调整、通过/驳回/作废、凭证、财务分摊 | `ContainerFeesPanel` | 行内纯文字描边,页内工具栏复用公共尺寸;编辑/驳回弹框和消息独立接入,客户归属与金额口径不变 | 待人工截图确认 |
| 双工作台费用页签 | 尾程新增/调整、提交/审核/作废、付款凭证预览 | `ContainerLastLegFeesPanel` | 620px 双列表单、900px 预览及消息独立接入;保留图片 65vh 与全部权限条件 | 待人工截图确认 |
交付按菜单逐个覆盖完整工作区;两种货柜模式共享代码时同时回归。代码检查和人工截图分别记录,不将入口盘点或公共规范可复用等同于本模块已优化。
## 公共实现与范围控制
- `adminDensity.css` 增补 `density-element-tabs`、`density-table` 和 `density-form`,分别供现有 Element 页签、原生资料/历史表和分组表单显式使用;样式仍限定在密度入口内。原生表保留业务列宽和固定操作列。
- `LoadingListDetailDrawer` 增加可选 `dense`;预装默认接入规则保留,货柜已确认清单显式开启,其他未开启消费者仍保持原布局。其局部密度类统一命名为 `loading-density`。
- `CarrierScheduleQueryPanel` 增加可选 `dense`;订舱和货柜详情开启,独立船期入口未开启;原有无密度模式用原尺寸兜底。
- 修改仅涉及样式、布局、图标及可选密度参数;不修改 API、业务权限、字段、提交资格或状态推导。图片原图、标签和 PDF 输出保持原功能。
- 密度合同显式登记 4 个菜单、独立新建/详情和实际子组件,分别检查 DOMESTIC/OVERSEAS 入口、共享组件开启/关闭及预装/已确认模式。原有国内仓与客户管理清单保留。
## 2026-09-14 代码验证结果
- 货柜、订舱、拖车、船期、清单与公共密度定向回归:53 个文件、485 项通过;补充的原生表、共享入口检查及智能装柜/双工作台回归 50 项通过。
- 最终全量 `pnpm test`:249 个文件、1918 项全部通过。首次全量运行中仅跨模块状态合同仍锁定拖车旧图标,更新外观断言后完整复跑通过;原权限、状态、路由和业务提交断言保留。
- `pnpm typecheck`、`pnpm build` 与 `git diff --check` 通过;AGENTS 索引合同 1050 项通过。
- 本轮业务脚本与修改前版本对比,仅增加样式导入、确认浮层类和可选密度参数,没有修改业务处理逻辑。实际浏览器加载、长数据布局、浮层普通/全屏/重开及各权限状态仍待 1920×1080、100% 缩放人工截图确认。
- 本轮未部署、未启动后端或修改业务数据。代码验证不替代实际业务写入及视觉验收。
## 新版菜单回归矩阵(2026-10-08)
依据:用户提供 `新版.html`,货柜菜单 1480–1487 行、货柜列表 `page-ct-list`(8133、8162 行)、装柜清单 `page-ct-manifest`(8202 行)、尾程计划 `modal-lmo-inbound-plan`(9647 行)。本轮用户确认恢复五菜单并承接海外操作,不回退现行整柜预计到仓规则。
| 页面 | 操作 | 原型承载与布局 | 本轮处理 |
|---|---|---|---|
| 货柜列表 | 国内、海外操作 | 同一货柜入口,宽表含清关/DO/PU/车队/到港/还柜 | 同一菜单内阶段切换,保留现有独立详情与原操作弹框;两阶段分别鉴权 |
| 装柜清单 | 查询、查看 | 独立列表,明细在列表下方展开;宽表水平滚动 | 恢复正式列表路由,复用真实清单查询与嵌入明细 |
| 装柜清单 | 打印 | 行内打印动作 | 读取所选清单成功后打印明细,不打印失败或过期响应 |
| 装柜清单 | 备注、删除 | 原型备注弹框,删除为提示占位 | 当前正式已确认清单只读,不增加未经服务端支持的修改/删除 |
| 尾程计划 | 到仓日期 | 居中计划弹框中日期输入 | 服从现行整柜统一规则,保留只读并补充带柜号跳转维护、计划生成后锁定说明 |
| 其他既有操作 | 新增、编辑、确认、文件 | 见上方逐操作矩阵 | 保留原组件、业务权限与状态门禁,不改变提交契约 |
人工视觉:待用户在1920×1080、100%缩放下截图确认。自动测试与部署结果分别记入主契约,不以源码核对代替真实页面验收。
+85
View File
@@ -0,0 +1,85 @@
# Admin 通用资料样式核对记录
范围为 `adminNavigation.ts` 的通用组 10 个可见菜单,沿正式路由定位到 14 个页面。10 个菜单的 14 个页面已完成代码样式核对;全部修改后页面尚待人工截图确认。隐藏产品信息、税率和旧库位页面不恢复。
原型目录为 `docs/悦/货代SAAS平台后台/prototype-src/`。列表操作依据当前用户确认:不超过 3 个全部显示,超过 3 个才折叠,折叠入口只显示省略号。新增、编辑、详情、文件和确认逐项检查,不能从某一弹框推断其他操作。
| 菜单 | 正式页面入口(`apps/admin-web/src/modules/` 下) | 原型入口 | 已定位操作 / 下一步 |
|---|---|---|---|
| 供应商列表 | `suppliers/pages/SuppliersView.vue`、`SupplierDetailView.vue`、`SupplierFormView.vue` | `05-suppliers.html`:列表 34 行、编辑 108 行 | 独立新增/编辑/详情;实际引用 `components/SupplierLicenseDialog.vue` 560px;核对返回、资质信息与操作权限 |
| 快递公司 | `master-data/express-companies/pages/ExpressCompaniesView.vue` | `05-suppliers.html`:2 行 | 批量导入、580px 编辑抽屉;原型静态列表仅列出新增/导入/导出,具体表单原型未定义,保留当前承载 |
| 往来单位 | `master-data/counterparties/pages/PartnersView.vue` | `05-suppliers.html`:8 行 | 680px 编辑/详情抽屉、批量导入;详情、编辑、启停均已显式接入,保留真实权限 |
| 费用项目 | `fee-items/pages/FeeItemsView.vue` | `10-general.html`:8 行 | 620px 编辑抽屉;启停与删除分别使用确认框;核对表单分组和危险操作 |
| 汇率管理 | `overseas-master-data/pages/ExchangeRatesView.vue` | `10-general.html`:21 行 | 560px 月度汇率新增/编辑框,保留月份和汇率校验 |
| 仓库管理 | `warehouses/pages/WarehousesView.vue` | `10-general.html`:44、51、58、65 行 | 多类仓库列表;650px 新增/编辑框、760px 导入框,无独立详情入口;保留仓库类型、版本、导入文件和状态操作 |
| 海外仓报价 | `overseas-master-data/pages/OverseasQuotesView.vue` | `10-general.html`:167 行 | 980px 详情、1180px 新增/编辑框;保留报价与计费字段 |
| 船期价格表 | `fba-pricing/carrier-rates/pages/CarrierRatesView.vue`、`CarrierRateDetailView.vue` | `10-general.html`:273 行;当前价格簿接口与应用指引优先 | 560px 上传框、独立版本详情、仓库映射/确认;价格行只读,不恢复旧原型手工计价能力 |
| 车辆列表 | `overseas-master-data/pages/VehiclesView.vue`、`VehicleDetailView.vue` | `10-general.html`:314、442 行 | 760px 新增/编辑、480px 状态变更、独立详情;核对关联派送及更换记录 |
| 下载中心 | `downloads/pages/DownloadCenterView.vue` | `10-general.html`:228 行 | 720px 任务详情框、下载与重试;保留任务状态/退避/文件权限 |
共享批量导入组件与供应商资质组件须沿实际调用逐项检查是否能显式接入密度样式。不能仅在父页面增加类名就声称 Teleport 弹框已覆盖。
本轮先实施供应商、汇率、海外仓报价、车辆四个菜单(7 个页面及供应商资质组件)。供应商新增/编辑/详情继续独立路由;资质 560px、汇率 560px、报价详情 980px/编辑 1180px、车辆编辑 760px/状态 480px 保留承载和宽度,车辆详情继续独立页面。海外资料操作证据补充见应用内 `overseas-master-data/PROTOTYPE_MATRIX.md`:`modal-gen-overseas-quote-detail`、`modal-gen-overseas-quote`、`modal-exchange-rate-edit`、`modal-vehicle-edit`。供应商资质来自 `overlays.html:660`,保留其证照版式。供应商分类数量合并到同一组彩色页签,保留四类数量与筛选事件;连续详情使用公共页头与字段网格,列表行内操作均不超过三个,全部直显。状态和停用确认只接入外观,保留原权限、版本与请求。
所有修改后页面仍需人工在 1920×1080、100% 缩放下提供截图核对。
## 其余六菜单逐操作核对
- 快递公司:编辑、启停最多两项直显;580px 编辑抽屉和共享批量导入 720px。原型未定义的具体编辑承载按当前实现保留,不擅自改为独立页。
- 往来单位:详情、编辑、启停最多三项直显;680px 详情/编辑抽屉和共享批量导入 720px。
- 费用项目:编辑、启停、删除最多三项直显;620px 编辑抽屉,启停和删除各有确认框。
- 仓库管理:编辑、启停最多两项直显;650px 编辑和 760px 导入框。不要把 `AppDialog` 内表单误认为独立页面。
- 船期价格表:列表详情、原文件、待确认版本作废最多三项直显;560px 上传框;独立详情页头保留下载与确认生效操作,不按列表行内按钮压缩。
- 下载中心:详情、成功后下载、符合条件时重试;详情 720px 弹框,按状态保留后端重试资格。
共享 `BatchImportDialog.vue` 保持单一 `el-dialog` 为根;挂载测试已验证父传 class 实际到达 Teleport 根。组件直接引用密度变量并保留未接入时的默认值,无需新增参数。
## 已实施四菜单的检查结果
2026-09-14:7 个页面和供应商资质组件显式接入公共密度。供应商分类数量并入彩色页签;汇率四项摘要保留为紧凑一行;三个独立详情/表单页使用公共 `density-detail-layout`、同行返回与业务标题,供应商路由关闭重复页头。报价详情采用两组连续键值表,供应商及车辆长字段跨列;车辆标题不再回退内部 ID,筛选、列表、表单与详情统一使用原中文状态名称。
- 原字段及作业入口保留:供应商表单 14 项、报价表单 8 项及两组 10 个表格列、车辆表单 10 项、汇率表单 3 项;供应商详情 12 项、车辆详情 11 项。已有资质版式和六个弹框的宽度、关闭与提交逻辑保留。
- 定向测试 60 项通过,包含长供应商名称/地址、返回目标、车辆详情失败不展示内部 ID、最多三个操作直接显示;原有版本冲突、长 ID、汇率精度和失败保留表单测试继续通过。
- 全量测试 251 个文件、1956 项通过。随后仅统一车辆状态中文名称,再次运行上述 60 项定向检查和 `pnpm build`(含类型检查),均通过;`git diff --check` 通过。
- 本地 5173 开发服务返回这 7 个页面的已编译密度代码,HTTP 均为 200。该检查证明正在提供新代码,不代替真实页面视觉验收。
四菜单均待人工在 1920×1080、100% 缩放下核对修改后截图。
## 其余六菜单的检查结果
2026-09-14:七个页面和共享批量导入组件完成显式密度接入。列表操作使用白底描边纯文字,最多三项全部直显;抽屉根同时接入页面密度和抽屉密度,弹框根显式接入对话框密度。公共 FormSection 样式覆盖独立浮层,修正只依赖父页面造成的样式遗漏。仓库新增菜单的浮层间距限定在自身,不再覆盖其他菜单。
- 维持前表逐操作承载与尺寸。往来单位详情和下载详情采用两组连续键值网格,长地址、备注与文件跨列;船期价格详情使用同行返回、版本号、状态及主要操作,摘要保留报价范围和上传时间,正文为连续白底。渠道页签使用公共彩色图标,预览表保留在页签正文外,价格行继续只读。
- 七页脚本语法树比对(排除样式导入、已移除装饰图标与确认框外观参数)及所有表单绑定比对均一致,原业务处理、权限、版本、仓库映射、导入预检与下载重试逻辑保留。
- 定向检查 94 项通过,包含排车六组权限下的操作数量、往来单位详情浮层、下载详情 11 个字段、批量导入普通/密度模式及成功提交;类型检查通过。
- 全量测试 251 个文件、1957 项通过;构建(含类型检查)和差异空白检查通过。
- 本地 5173 返回这七页及排车列表的新密度代码,HTTP 均为 200。排车列表已是纯省略号入口;代码与开发服务验证不能代替页面截图。
通用 10 菜单代码检查完成,全部待人工在 1920×1080、100% 缩放下核对修改后截图。首页、系统管理另行继续。
## 2026-10-20 客户财务基础组蓝白接入
本组覆盖供应商列表/独立新增/编辑/详情及资质弹框、快递公司列表/580px 编辑抽屉/批量导入、往来单位列表/680px 详情与编辑抽屉/批量导入、费用项目列表/620px 编辑抽屉/各自确认、仓库列表/650px 编辑/760px 导入、下载中心列表/720px 任务详情。另按实际入口覆盖 `warehouse-resources` 的库位与托盘列表及原居中编辑弹框;不扩展当前页面没有的业务操作。
各页面保留现有密度类并显式接入 `admin-workbench`;DataTable 的外层接入 `workbench-table`,Teleport 弹框及批量导入自身带 `admin-workbench is-dialog`,抽屉自身带 `admin-workbench is-drawer`。局部普通配色使用公共主题变量,危险色、状态、下载/重试资格和打印流程保持。当前公共批量导入消费者通过父传 class 显式接入,不修改共享组件。
上述本组页面、弹框及抽屉的定向回归通过,仍待人工截图确认。全量门禁由总控统一执行;没有部署、推送或真实业务写入。海外资料和国内价格簿属于另组,其结论以对应任务为准。
2026-10-20 用户追加修正:整页主列表与详情外壳使用 `is-page-surface` 取消外围整圈边框、圆角与阴影,页面保持连续白底;本组共 22 处主列表和 6 处详情容器,内部子表、指标/图表卡片、独立并列面板及弹框保持原边界。布局、内边距和脚本不因本修正改变;公共规则与全量门禁由总控统一收口。财务相关三文件 41 项定向复验通过,视觉仍待人工截图确认。
### 列表顶部紧凑化
依据 2026-10-20 用户整柜截图的最新要求,减少列表标题、操作和页签叠层;本组按实际结构核对如下,视觉待人工截图确认。
| 页面或范围 | 当前结构与操作证据 | 本轮收敛 |
|---|---|---|
| 供应商列表 `suppliers/pages/SuppliersView.vue` | 标题与新增在工具栏;分类、统计数量和筛选另占下方区域,分类通过 `switchCategory` 切换 | 原分类导航整块移入 `toolbar-start`,保留 `supplier-tabs density-status-tabs` 并加 `workbench-list-tabs`;新增仍在 `toolbar-actions`,`QueryToolbar` 仍在 `filters`。分类图标、数量、ARIA 和事件保持 |
| PDA 版本 `pda-releases/pages/PdaReleasesView.vue` | 国内/海外 radio 与当前 APK/WGT 信息在单独上下文行;刷新、上传在工具栏 | 原应用切换与版本事实整块移入 `toolbar-start` 并加 `workbench-list-tabs`,保留原类、radio 键盘语义、绑定、当前版本与未发布状态;刷新、上传及发布/停发确认保持 |
| 客户、财务及本组其余标准列表 | 已有标题、操作同处工具栏,没有独立列表分类页签 | 复用总控维护的公共紧凑尺寸,不批量删除标题,不改客户费用特殊入口、汇总、状态或警告;客户详情内审计面板不参与此次列表合并 |
只调整上述两页列表模板及对应既有结构断言,不改脚本、API、权限、详情或弹框。通过 `local-check.ps1` 运行 `SuppliersView.test.ts`、`SupplierRouteReuse.behavior.test.ts`、`PdaReleasesView.test.ts`,3 个文件、17 项测试通过;公共尺寸和全量门禁由总控统一维护。
2026-10-21 浮层回归抽查:供应商资质、仓库创建/导入、快递公司编辑/导入、费用项目编辑、下载任务详情与审计详情的选定组件回归通过;本批不因静态检查未见问题就批量改写这些页面。与财务/IAM/客户费用一起,选定 12 文件 200 项回归通过;另客户与消息局部修复 56 项通过。长内容、校验、关闭重开、全屏与页脚的真实排版仍待截图,不能由挂载结果推定视觉通过。
@@ -0,0 +1,41 @@
# Admin 首页与系统管理样式核对记录
范围为导航首页 1 个菜单及系统管理 3 个菜单,沿正式路由进入四个页面。依据当前确认的高密度样板,保留权限、状态、请求和真实字段。四页代码样式及直接交互检查已完成;全部页面待人工在 1920×1080、100% 缩放下提供修改后截图。
原型目录:`docs/悦/货代SAAS平台后台/prototype-src/`。页面入口相对 `apps/admin-web/src/modules/`。
| 页面 | 操作 | 原型证据 | 当前实现与结论 |
|---|---|---|---|
| `dashboard/pages/DashboardView.vue` | 指标、刷新、全屏 | `modules/00-dashboard.html:2`,全屏按钮 7 行、指标 10 行起 | 保留当前四项真实指标、统计口径、部分失败和更新时间;合并为连续信息区,保留原生全屏。无新增、编辑、详情、删除入口,不恢复静态图表、营收和待办演示。 |
| `iam/pages/InternalUsersView.vue` | 新增、编辑、密码重置 | `modules/11-system-messages.html:2`;`overlays.html:545` 新增 650px,682 行编辑 650px | 保留 650px 居中框及两列表单;密码重置仍在编辑框内,保留独立权限、校验、受保护账号和海外 PDA 仓库绑定。 |
| 用户管理 | 启停 | 当前列表 `toggleStatus` | 两项以内全部直显;保留独立确认框、当前登录用户及系统管理员禁用限制。无独立详情或文件入口。 |
| `iam/pages/RolesView.vue` | 新增、配置角色及权限 | `modules/11-system-messages.html:7`;`app.js:5035` 的 `showRoleEdit` 打开模态框 | 保留当前 860px 居中框及左右基础信息/权限树;半选、恢复已选、菜单分组和授予权限独立控制。原型旧数据范围和字段授权不恢复。 |
| 角色权限 | 启停、删除 | 当前 `toggleStatus`、`removeRole` | 三项以内全部直显;启停和删除分别保留确认,内置角色、已关联用户及加载门禁不变。无独立详情、文件入口。 |
| `iam/pages/PermissionsView.vue` | 新增、添加下级、编辑 | `modules/11-system-messages.html:62` 的 `modal-sys-menu-permission`,720px 居中框;`app.js:5235` | 已由 600px 非模态抽屉修正为 720px 居中框,保留当前资源字段与可编辑性、上级候选、保存和未保存登记。 |
| 菜单权限 | 启停、删除、展开/收起 | 原型同文件 54 行树操作;当前 `permissionActionCount` / `showDeleteMore` | 保留树展开/收起与层级;按实际权限超过三项才折叠,省略号图标独显、下拉项纯文字;受保护资源不可修改,删除资格和确认保留。无独立详情或文件入口。 |
公共密度样式通过四页显式导入,所有模态框及消息确认框在自身浮层根接入;不向未声明页面扩散。此处矩阵记录实现范围,不代表视觉验收通过。
## 代码检查结果
2026-09-14:四个页面及 IAM 局部布局样式完成接入,列表按钮沿用公共纯文字描边与语义色;菜单权限最多三项直显、第四项进纯省略号菜单,保留原权限及内置资源门禁。角色权限树保持半选与已保存授权恢复,长名称及权限编码可换行,无授权配置权限时基础表单使用完整宽度。首页四项指标使用连续键值信息区,刷新及全屏使用普通工具栏按钮;不增加未接通的演示数据。
- 93 项定向检查通过,覆盖用户/PDA 仓库绑定、角色权限树、菜单权限数量及保护、居中框真实挂载、新增/编辑保存失败保留表单、首页部分失败刷新和进出全屏。菜单权限弹框测试明确模拟表单校验成功/失败结果,避免 Vitest 外部加载 Element Plus 时的 CJS 校验库互操作差异;不声称该测试替代真实浏览器校验。
- 四页脚本语法树及表单绑定与修改前一致(排除样式/组件导入、确认框外观参数及已移除的首页装饰色字段),权限、保存、校验规则和统计口径未变。
- 全量测试 252 个文件、1961 项通过;类型检查、构建与差异空白检查通过。
- 本地 5173 的四页源码编译请求均为 200,并返回密度样式入口;该证据只证明开发服务提供了当前代码。
此批无剩余代码检查失败;修改后视觉仍待人工截图。全模块沿组件引用继续复核,不能由四页通过推断其他共享子弹框全部通过。
## 2026-10-20 平台用户与权限蓝白接入
本组只覆盖 IAM 三个正式页面:平台用户、角色权限、菜单权限及原有 650px/860px/720px 居中编辑框、启停/删除确认。页面和浮层显式接入蓝白主题,DataTable 采用外层 `workbench-table`;保留权限树、半选、受保护账号/资源、海外 PDA 仓库绑定和未保存逻辑。活动客户远程选择器 `useActiveCustomerOptions`、公开导出及其既有在途修改均未接管。首页由本批总控负责,本节不推断首页完成状态。
IAM 相关定向回归通过;全量门禁由总控统一完成,三页及其操作待人工在 1920×1080、100% 缩放下截图确认。未部署。
2026-10-20 用户追加修正:整页主列表与详情外壳使用 `is-page-surface` 取消外围整圈边框、圆角与阴影,页面保持连续白底;本组共 22 处主列表和 6 处详情容器,内部子表、指标/图表卡片、独立并列面板及弹框保持原边界。布局、内边距和脚本不因本修正改变;公共规则与全量门禁由总控统一收口。财务相关三文件 41 项定向复验通过,视觉仍待人工截图确认。
2026-10-21 浮层回归抽查:平台用户与角色权限实际挂载回归通过,含海外 PDA 仓绑定、权限树初始化与半选、错误后保留草稿、确认和关闭行为。本批未修改 IAM 展示文件或在途客户选择器。长权限名称、展开后的树、普通/全屏和底部保存的实际排版仍待用户截图确认;首页不属于本组回归结论。
+460
View File
@@ -0,0 +1,460 @@
# Admin 界面规范
本文件是 **Admin 样式的唯一主规范**,统一维护蓝白风格、业务密度、列表、详情、弹窗、提示文字与公共样式接入。沿用原文件路径,已有引用无需迁移。验收视口为 **1920×1080,浏览器缩放 100%**。
## 按任务阅读
先看本节和“基本原则”,再只读任务对应章节,不要求每次通读全文。
| 当前任务 | 本文入口 |
|---|---|
| 调整列表、搜索、页签、行操作 | [列表](#列表)、[尺寸与颜色](#尺寸与颜色) |
| 调整详情、费用、历史或测量 | [详情与基本信息](#详情与基本信息)、[费用、汇总与测量](#费用汇总与测量)、[历史、备注与空态](#历史备注与空态) |
| 新增、编辑、审核、上传、预览或确认弹窗 | [弹框与表单](#弹框与表单) |
| 提示小字、加载反馈、点击后页面跳动 | [提示文字与加载布局](#提示文字与加载布局) |
| 配色、工作台、指标卡或图表 | [蓝白主题与图表](#蓝白主题与图表);需要查看样板时再打开[样板目录](界面参考/蓝白卡片式工作台风格参考.md#其他页面该参考哪个样板) |
| 公共样式维护或新页面接入 | [公共样式维护边界](#公共样式维护边界)、[新模块接入规则](#新模块接入规则) |
| 确认验收方法与证据 | [前端验收规则](Admin-Client前端原型还原验收规则.md);其中不再另定 Admin 样式 |
## 适用范围与文档职责
- 本规范是后续 Admin 改版基线:订单与客户管理样板确立业务密度,测量样板仅供参考弹窗基础框架,其分区配色与作业布局属于局部例外;蓝白自营样板确立配色、工作台和少提示文字风格。已确认的样式优先于历史原型中的对应外观;业务字段、分组、权限、状态、API、计算口径及页面/弹窗/抽屉承载方式仍按当前业务契约和逐操作确认保留。
- 规范适用于 Admin;Client、PDA 不自动套用。按用户确定的模块和操作范围逐批实施,规范统一不代表全端已改造或验收,也不授权批量替换公共默认值或发布。
- 登录页 `/login` 保留 2026-11-05 用户确认的深蓝品牌区与右侧白色登录卡:白色品牌标志和 40px 品牌标题位于左区,右区保留账号、密码、登录操作及原有错误反馈。该品牌入口是业务页密度与工作台外观的局部例外,品牌底色由 `LoginView.vue` 的 `--login-brand-background` 独立维护,不跟随公共 `--cc-navy`;公共主题仅复用控件与错误提示,不通过 `workbench-title`、`workbench-panel` 或品牌徽标类替换登录页的字号、卡片和品牌区。认证、权限初始化和安全跳转继续沿用现有逻辑。
- 本文只维护当前有效规则,不并列保留已被替代的通用样式。新增确认直接修改对应条款,不在文末继续追加另一套规则。代码令牌是数值的唯一实现入口,变更须同步本文对应条款。
- [蓝白样板目录](界面参考/蓝白卡片式工作台风格参考.md)只保存页面参考和原图;[排车列表试点](Admin排车列表样式试点.md)只保存历史依据。二者不再定义通用样式。
- 模块记录只维护本模块改造范围、业务例外、检查结果与截图证据,不覆盖本文通用规则: [国内仓](Admin国内仓样式核对记录.md)、[客户管理](Admin客户管理样式核对记录.md)、[货柜管理](Admin货柜管理样式核对记录.md)、[海外仓](Admin海外仓样式核对记录.md)、[列表推广](Admin列表样式推广核对记录.md)、[自营](../apps/admin-web/src/modules/self-operated/operation-matrix.md)。只读本轮实际涉及的记录,不要求全部加载。
## 基本原则
表格顶部操作栏的基础桌面尺寸由 `DataTable.vue` 维护:`padding: 6px 12px`、`min-height: 44px`;显式接入蓝白主题的主列表使用本文“蓝白主题与图表”的 48px 最小高度。普通栏与 `.is-compact` 只改变对齐,不按 1920px 断点切换尺寸;页面不得重复声明公共 padding / height,已有移动端排列规则保留。
1. 普通业务内容采用连续白底、细边框、描述表与数据表格。短字段以“标签 + 值”连续排列,不制作独立指标卡片。
2. 先压缩重复标题、重复汇总、容器层数和无意义留白,再调整列宽与行高。正文保持可读,不通过缩小整页、浏览器缩放或截断关键值提高密度。
3. 长编号、地址、邮箱、文件名与备注允许跨列、换行或按已确认方式查看完整值。空值显示“—”或明确的未关联状态,不显示内部数据库 ID。
4. 业务状态使用现有语义色和文字。只有真实阻断、错误、风险才使用明显的警示区域。
5. 密度改造不改变计算口径、API、保存触发方式、权限资格、状态机或字段含义。遇到功能问题单独记录,不能用样式隐藏。
## 尺寸与颜色
下表是普通桌面业务布局基线;图片、长内容、错误反馈和可编辑表格可以自然增高,不能强制裁切。
| 项目 | 基线 |
|---|---|
| 正文、表格、输入文字 | 13px |
| 标签、辅助说明 | 12px;不进一步缩小 |
| 分区标题 | 14px,适度加粗 |
| 页面业务编号、弹框标题 | 16px |
| 普通页签 | 高 38px,左右内边距 16px,图文间距 6px |
| 页签图标 | 17px,固定 18px 占位,独立彩色显示 |
| 普通表格行 | 基准 36px,单元格上下内边距 4px;按内容自然增高 |
| 普通输入框与工具栏按钮 | 通常 32px |
| 表格内操作按钮 | 基准 28px;已接入标准列表使用纯文字行操作,保留焦点、禁用与处理中状态 |
| 区块间距 | 通常 12px;标准列表遵守现有 ListPageLayout 的单一间距,不叠加页级空白 |
| 普通内容内边距 | 12px;弹框正文 12px 16px |
| 容器圆角 | 普通业务数据区 0–4px;独立搜索区 5px、作业分区 8px、蓝白指标卡 16px 按各自规则,不叠加整页外框 |
| 内容底色 | 白色 |
| 表格表头 | 浅蓝底 `#edf4ff`、深蓝文字 `#284b78`,标准列表、工作台、弹框/抽屉内 Element 表格及 `density-table` 共用 |
| 描述表标签底色 | 浅灰,参考 #f8fafc / #f9fafb,不跟随表格表头变蓝 |
| 边框 | 现有 `--cc-border`;表格参考 #e5e7eb |
| 悬停、斑马纹 | 轻量区分,参考 #f3f7fb / #fcfcfd |
表头颜色由 `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`,搜索/筛选区与下方表格分成独立区块,搜索区圆角统一 5px。`foundation.css` 的 `--cc-list-query-radius` 与 `--cc-list-query-gap` 维护尺寸;DataTable 筛选容器提供边框、底色及下方 16px 间距,内部 QueryToolbar 不重复套卡片。独立 QueryToolbar 使用相同圆角及列表已有区块间距。
- 同级状态/分类页签与顶部业务按钮共用工具栏:页签放 `toolbar-start`,操作放 `toolbar-actions`/`toolbar-end`,查询放 `filters`;蓝白页签加 `workbench-list-tabs`。不叠加重复路由标题、页签行、按钮行;保留真实业务子分区、统计数量、失败重试与当前范围。
- “操作”列在第一列,需要固定时固定在左侧。默认最多三个高频操作直接显示,其余用更多菜单;保留已确认的直接操作数量、权限和危险确认。更多入口为 `…`(`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 不再绘制第二层边框或阴影。优先复用这些公共入口,不在页面追加隐藏边框的覆盖规则。
#### 公共列表能力
Admin 仍使用 Element Plus。普通 `el-select` 由构建组件解析器统一接入 `src/shared/components/AdminSelect.ts`,仅将 `filterable` 默认值设为 `true`,使用 Element Plus 原有渲染、插槽、事件和公开方法;列表、表单、弹框及分页选择框均可输入关键词筛选当前选项。已有 `remote-method`、`filter-method`、多选、禁用和清空行为保持原有配置;搜索不改变候选业务范围,也不会自动新增远程接口调用。虚拟托盘选择框 `el-select-v2` 已显式启用远程搜索。
推广时列设置显式使用 `column-settings-mode="show"`。已有 `preference-key` 保持,新接入的退货库存、流水和箱号各使用独立偏好键。存在非阻断警告时使用 `notices` 插槽,列表失败时通过 `results-visible` 隐藏结果和分页,标题、查询与重试保持可用;`before-results` 保留原统计与汇总。特殊工作台可使用 `results` 插槽承载原内容和自身分页,公共表格不重置它的页码与每页数量。
列宽保存为公共 DataTable 能力,与已有列设置一同启用(提供 `preference-key` 且列设置可用),不依赖试点样式。拖动表头边界松开时,将宽度按稳定列键写入同一份本地偏好;重排、隐藏再显示不会丢失,刷新/重新进入时恢复。账号与表格分别隔离,仅保存到当前浏览器,不跨设备同步。“恢复默认”同时重置列顺序、显隐和宽度,重新采用页面声明的 width/minWidth。未启用列设置的表格不写入列宽偏好。
#### 客户管理按钮与详情
- 客户列表、海外仓阶梯费用及关联详情、编辑、审核、预览的业务操作按钮采用纯文字;查询、重置、复制也去掉装饰图标。分页箭头、列设置、筛选布局、关闭与全屏等独立图标控件保留,处理中旋转图标保留。
- 客户列表行操作采用上文统一纯文字规则;保留原权限、操作分配、更多入口和危险确认。
- 海外仓阶梯费用列表按原档位顺序显示“天数:单价”,在费用单元格中连续排列、整组自然换行;不制作每档独立白块,不强制左右两列,不隐藏后续档位。币种只在独立列展示,计费单位保留在表头;零单价照常显示 `0`,没有档位显示“—”。列表编辑按钮沿用统一纯文字行操作。
- 阶梯费用编辑弹框中的“新增阶梯”为蓝字浅蓝边、“删除”为红字浅红边,均使用 28px 高、6px 圆角的白底纯文字按钮;客户详情的海外仓费用编辑同步执行。底部保存/取消沿用 32px 主次按钮。按钮规则同时覆盖页面与 Teleport 弹框,并显式设置普通、悬停、焦点及禁用状态,避免默认主题色覆盖。
- 客户详情保留彩色页签;企业信息用连续四组键值表,联系与合作信息保留三组键值表,长地址整行。资质文件采用连续行,企业成员使用表格。
- 客户新增/编辑保留 1120px 三列表单,入驻审核保留 1040px,箱规规则编辑保留 1200px,海外仓阶梯编辑保留 1120px。宽度属于当前内容的适配值,不推广为全局默认。
### 详情与基本信息
- 第一行集中放返回、业务编号、核心状态及主要操作。下一行用可换行摘要展示关键上下文,不使用大数字概览卡。
- 返回使用 `density-back` 轻量导航,与业务编号和状态排在同一行,保留箭头、文字、键盘焦点及原返回目标。该行并入连续白底详情区域,不为返回单独增加卡片或空白行;整柜库存的标题行与基本信息共用一个信息区。
- 页签紧接摘要。页签已表达的标题不再在正文重复占用一大行;数量、更新时间与相关操作可放紧凑工具栏。
- 短字段通常每行 4–6 组,按内容和业务分组调整,长内容跨列或整行。描述表标签浅灰、数值白底,边线连续;标签宽度以 112px 为样板参考,按字段实际长度调整。
- 保留字段顺序和业务分组,不使用会改变阅读顺序的自动密集填空布局。
- 同一个订单或实体内部的内容连续分区,不再层层套卡片。
### 费用、汇总与测量
- 汇总使用单行摘要或紧凑描述表。自动费用与其他费用保持各自业务口径,金额、单价、计费量、附加费和版本完整展示。
- 客户资金账户详情采用已确认的六项紧凑金额卡片,复用公共 `workbench-metric is-compact` 外观;保留授信有效期、到期和负余额状态。导出流水与充值、扣款、授信操作集中在详情页头,流水区不再单独设置导出工具栏。结算单应收/应付详情同样使用三项紧凑金额卡片展示应收/应付、已收/已付、未结余额,到期日保留在基本信息中。以上为已确认的详情页例外,不推广到其他详情。
- 保留公式、计费依据和价格来源入口,不能为了减少行数合并不同口径的金额或重量。
- 测量各来源保留独立分组;展开时在表尾显示合计,折叠时在标题显示摘要,同一口径不在上下重复占位。
- 测量作业弹框采用用户于 2026-11-05 重新确认的目标截图分区配色:申报与实测对比浅绿(`#f4fbf8`)、客户申报明细浅蓝(`#f7f9ff`)、平台实测箱规浅黄(`#fffbf4`),分别保留绿色、蓝色、黄色的 4px 左侧色条、细边框和 8px 圆角,作为连续白底规则的局部例外。区块不得使用负外边距伸出正文;左右内边距由 `measurementDensity.css` 统一维护,通用密度规则不得将其清零。保持 1560px、92vh 居中作业弹框及原有业务分组,后续通用样式调整不得将本窗口的配色、色条或已确认字段统一移除。三个分区同级排列,客户申报不得嵌套在实测大框内。箱数、毛重、体积集中在“指标/客户申报/平台实测/差异(实测 − 申报)”表中,不在下方重复总数;未采集显示“未测量/待测量”,申报缺失显示“—”,相等显示“一致”。净重、材积重单独显示平台事实,不与申报毛重混比。客户申报区保持只读;测量弹框不显示“原单据号码”,默认隐藏“实际品名”,保存其他测量数据时保留已有品名值。仅当服务端返回的实际品名超过255字且具有测量维护权限时,显示品名精简输入;校验为非空且最多255字,失败保留输入,成功重读后收起修正入口。一件代发的预计托数仍放在“平台实测箱规”区,沿用原保存与权限规则。未采集时只保留主状态,有箱规和来源后显示采集来源;平台补充数据的口径说明通过提示展示。提交按钮旁显示当前订单状态、缺少测量或称重等实际阻断原因。桌面布局中,对比区标题与客户、渠道、状态同排;申报区保留标题与明细表;实测箱规标题、预计托数及录入操作共享一行。长内容自然换行,不截断编号或缩小字号。提交阻断原因集中在固定底栏,正文不重复显示同一提示,业务状态、偏差和冲突提醒保留。
- 同一计算策略只保留一个明确操作入口,保存中、无权限、冻结与失败信息照常显示。
- 测量称重图片可用缩略图加紧凑事实行;审核称重图片使用表格承载,保留查看原图、托盘/库位信息和人工修正入口。可视化、图纸、标签预览、库位示意等按业务用途保留合适尺寸。
### 历史、备注与空态
- 大量状态历史与操作日志优先使用表格:时间、事件、状态、操作人、备注。保留全部记录和原有排序,不合并或删除相似事件。
- 长备注自然换行;简短备注也可使用连续列表。空态使用简短文字,不用大型插画或为无数据区设置大最小高度。
- 真实流程进度图可以保留,不能因日志样板是表格就删除业务需要的阶段关系。
### 弹框与表单
本节是 **Admin 弹窗基础规范** 的唯一维护入口。通用统一范围限于白底框架、基础字号与控件、标题与操作区的可用性、间距和滚动边界;不统一业务正文结构、分区数量、字段排列、固定尺寸或装饰底色。普通表单与复杂作业弹框默认白底,按各自业务组织内容。测量样板的分区配色仅适用于已明确确认的具体窗口,不自动推广到其他新增、编辑、审核、上传、预览或确认弹窗。
参考图:[测量弹窗原始截图](界面参考/Admin弹窗样板-测量.png)(原附件 `codex-clipboard-3eeb665f-6eee-437e-886b-75d3cc0dc78e.png`)。仅参考基础框架及该测量场景,不据此复制其他窗口的配色、分区、表格结构或尺寸;验收仍为 1920×1080、浏览器 100%,不按图片像素反推控件尺寸。
![Admin 弹窗样板:测量作业](界面参考/Admin弹窗样板-测量.png)
#### 外框、标题与滚动
- 使用白色外框、细边线和紧凑标题栏;标题为“操作名称 · 业务编号”,没有业务编号时仅显示操作名称,缺失值不以数据库 ID 补位。复用现有标题字号、字重和分隔线。
- 标题栏与底部操作区固定可见,长内容只滚动正文;同一内容区保持一个主要纵向滚动容器。明细表保留业务所需的横向滚动。
- 优先使用 `AppDialog` 的原生标题栏和已有全屏能力;关闭、全屏/退出全屏位于右上角,保留可访问名称。大型表格和作业弹窗按需启用全屏,小型确认弹窗无需强行加入全屏。
- 普通弹窗按内容自然增高,上边距参考 6vh、最大高度 88vh;测量等大型作业弹窗按已确认作业高度使用上边距 4vh、最大高度 92vh。全屏采用组件的完整视口规则。小表单不设置无业务依据的固定大高度或大块空白。
- 各操作已确认的独立页面、居中弹框或抽屉承载方式继续保留。此次统一弹窗外观不改变正式详情路由,也不将抽屉自动改成弹框。
#### 按内容选择尺寸
| 用途 | 桌面宽度参考 | 内容排列 |
|---|---|---|
| 简单确认、备注、原因填写 | 560–600px | 紧凑单列,按内容增高 |
| 普通新增、编辑 | 680–920px | 通常双列;长地址、备注、附件跨列 |
| 多字段表单、资料审核 | 1040–1200px | 短字段通常三列,按业务分组,长内容整行 |
| 批量预览、对照与选择 | 约 1100px,随实际列宽调整 | 表格为主,保留数量、逐条明细和不可操作原因 |
| 测量等大型作业 | 样板 1560px、92vh | 业务分区、作业表格和固定操作底栏 |
以上只用于没有已确认尺寸的新窗口,不作为重排现有弹框的模板,也不覆盖已有逐操作确认的业务尺寸,例如客户重置密码 520px、客户新增/编辑 1120px。复杂工作台按真实信息量保留宽高、分栏与独立工作区;宽度受视口边距约束,不靠缩小字号、隐藏字段或截断关键编号容纳内容。
#### 正文分区、配色与密度
- 默认使用白底,通过原有业务标题、间距与必要分隔线组织内容;不得因存在录入、只读、汇总或多分区就套黄、蓝、绿背景,也不为套样板新增标题、卡片或分区。
- 保留已有表单、左右分栏、主从表、步骤、树表、筛选候选、图文对照及预览区域。字段多或交互复杂不构成改成连续信息表、三列表单或同级彩色区块的理由;确有布局问题时先记录具体问题,再单独调整该窗口。
- 只读值清楚展示,可编辑控件保留可辨识的边框、焦点、标签和校验;不为了连续表外观隐藏输入特征。仅在该窗口的信息关系适合且逐项确认后使用连续编辑表,不把只读与录入强制合并、不机械横排或并入汇总末行。
- 下表只记录测量作业的已确认配色例外,不是按信息用途自动映射颜色的通用规则。其他具体窗口需要彩色分区时,在本窗口核对记录中说明业务用途与确认依据;旧批次记录中的“黄色录入区”不等于本轮已确认保留。
| 适用窗口 | 已确认分区 | 浅底色与色条 |
|---|---|---|
| 测量作业主弹框 | 申报与实测对比 | `#f4fbf8`,4px 绿色左侧色条 `#20a477` |
| 测量作业主弹框 | 客户申报明细 | `#f7f9ff`,4px 蓝色左侧色条 `#647fec` |
| 测量作业主弹框 | 平台实测箱规 | `#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),后者当前限定客户编辑框的圆角和数字对齐。后续在明确修改范围内接入,通用外观维护在公共入口,不逐页复制颜色与控件规则,也不自动批量改造其他弹框。
#### 底部操作与交互
- 底部以细分隔线与正文区分,右侧排列原有取消、保存、提交等操作;一个阶段突出一个主操作,其他操作保持次级样式。按钮职责、顺序和保存触发方式按当前业务确认保留,不新增原本没有的“暂存”或“保存并提交”。
- 自定义底栏可显式使用`density-actions density-actions--footer`,由公共样式维护右对齐、换行和按钮间距,不在业务页复制底栏通用布局。
- 左侧可显示当前状态、选中数量或实际提交阻断原因,同一阻断说明集中显示;只读、预览和小型确认弹窗按其实际动作提供关闭/取消/确认。
- 审核、确认清楚展示业务对象;批量操作保留逐票预览、选中数量和不可操作原因。加载中、无数据、接口失败、无权限、禁用与处理中均应有明确反馈。
- 保留提交锁定、原有遮罩/Esc/关闭规则、未保存保护及失败上下文;全屏切换、关闭和重开不丢失应保留的输入,不允许重复提交。关闭、全屏等功能图标保留,不为统一风格给标题、字段或按钮添加装饰 Emoji。
#### 作用域与嵌套
新增、编辑先参考公共 `AppDialog`/`AppDrawer`,表单字段排列仍参考本业务已确认的样板。客户新增/编辑使用三列短字段,地址、备注和长内容跨列;小型确认框保留原宽度。智能装柜等工作台保留原有宽版和 92vh 高度,不把所有浮层压成同一尺寸。
- 标题、正文和页脚样式只匹配当前浮层的直接子节点;业务页的 `:deep` 规则也必须限定自身,不能通过任意后代选择器影响子弹框。
- 不假设 `AppDialog` 默认一定挂到 body。嵌在另一个弹框、工具栏或有裁切的容器中的独立浮层,应明确设置 `append-to-body`,并把主题类放到实际浮层根。核对关闭、重开、全屏和取消仅影响对应窗口。
- 标题与底部操作不随长正文滚走,正文使用单一纵向滚动区;真实宽表可在自己的区域横向滚动。不要通过整框 `overflow: hidden`、固定短高度或隐藏按钮解决溢出。
- 底部多按钮可换行且保持间距;已有复合底栏(统计、分页、提交等)保留自身布局,不强制改成一排普通按钮。工具栏的紧凑按钮尺寸不得传入浮层。
- 工具栏只控制自身操作按钮及已核实的包装层,遇到浮层、弹出菜单或内嵌 DataTable 就结束作用范围;保留按钮组与下拉按钮,不能为隔离而使已有操作失去样式。
- 长校验错误应占据正常布局空间,不能遮住下一行;长文件名允许换行,文件选择、上传和删除按钮保持可用宽度。必填标识、字段标签、错误和提交反馈不为清爽而删除。
#### 公共维护与分模块落地
- 框架能力维护在 `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--detail`/`admin-density-drawer--editor` 等边界,不因此改成连续编辑表或复制测量分区。共用 `--admin-dialog-*` 令牌只统一基础能力。
- 确有必要且已确认的弹窗说明使用 `density-dialog-note`,由公共样式维护外观;是否展示遵循“提示文字与加载布局”,不因存在说明类就新增小字。
- JSON及原文快照显式使用 `density-code-block`,由公共样式维护代码字号、底色和边框;长内容完整换行,沿用外框正文滚动,不另设固定高度、内容截断或纵向滚动。快照属于诊断证据,不据此将数据库ID展示为业务编号。
- 连续信息表需要单元格编辑时,在 `density-table` 上显式添加 `density-table--editable`;数值与单位使用 `density-table-editor` 横排。输入的普通边框融入表格,保留悬停、键盘焦点及禁用反馈;页面只配置标签列宽和字段排列,不复制输入框外观。
- 小表单继续使用 `density-form`;末项已有明确紧凑尾距约定时显式添加 `density-form--flush-end`,不改变其他表单末项为校验错误保留的空间。
- Teleport 弹框自身显式使用 `admin-density-dialog`,原有 `ElMessageBox` 使用 `admin-density-confirm`;原生 `el-dialog` 的外观按同一规范接入,是否收敛到 `AppDialog` 按实际能力和消费者核对,避免一次替换全部弹窗。抽屉继续使用既有 `admin-density-drawer` 边界。
- 已改造弹框按原固定编号清单逐项复核,方法见 [前端验收规则](Admin-Client前端原型还原验收规则.md#执行与验收)。每项先核对改造记录、当前实现及实际截图,再决定保留或局部修正;一个样板通过不授权批量推广其业务布局和配色。共享弹框记录全部直接调用方,已有代码检查与历史截图不能替代本次视觉确认。
- 后续每个大模块按同一流程开展,进度和截图结论写入对应模块核对记录;本规范只维护稳定规则。页面字段、状态、权限、接口、计算口径、校验和提交逻辑继续按当前业务契约执行。
- 代码检查与人工视觉结论分别报告,逐项核对普通/全屏/关闭重开、长内容、空态、错误和权限状态;缺少截图时标记“待人工截图确认”。按模块汇总发布范围,部署继续沿用对应环境授权规则。
## 彩色图标
导航性质的详情页签采用与客户管理一致的彩色 Emoji,同一语义尽量复用同一图标:
| 语义 | 图标 |
|---|---|
| 基本信息 | 📋 |
| 货品、货物明细 | 📦 |
| 费用 | 💰 |
| 历史、日志 | 📝 |
| 测量、尺寸 | 📐 |
| 其他资料 | 🗂️ |
| 拆分履约 | 🧩 |
| 计费规则(客户管理已有) | ⚖️ |
图标只作辅助,保留文字标签;装饰图标设置 `aria-hidden="true"`。选中态通过文字色和底部横线表示,不把 Emoji 强制染成单色。采用系统彩色 Emoji 字体,不引入图片生成或外部图标下载依赖。
彩色图标用于详情页签。国内仓 7 个菜单的行内按钮与客户管理业务操作使用纯文字;返回箭头、顶部与弹框的既有功能图标可保留。不要给操作按钮、表头或字段添加 Emoji。
## 实现与验收
逐操作矩阵、人工截图与自动检查的证据要求统一见 [前端验收规则](Admin-Client前端原型还原验收规则.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` 主题内的对应元素;业务表格、控件与表单继续沿用上文密度值。代码以对应令牌为准,修改数值只改唯一实现入口并同步本表,不在页面重新声明默认值。
| 项目 | 样板基线 |
|---|---|
| 主操作与链接 | `--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 |
| 辅助色 | 青、绿、紫、黄、红用于图标、分区与真实状态,不能代替状态文字 |
白色和细边框负责分层,不反复套大卡片;标题与数值形成重点,单位和补充说明降低权重。蓝色强调重点数据,不要求所有数字着色。红、黄继续表示风险、失败或警告;趋势是否改善由业务决定,不能仅凭上涨或下降设绿色。
原有 `--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 或打印内距。
财务详情通过 `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 等普通字号 |
| 表格行高、输入高度、操作按钮高度、页签高度 | `--admin-row-height`、`--admin-control-height`、`--admin-action-height`、`--admin-tab-height` | 使用已有公共组件和公共类 |
| 常用间距、圆角、普通数据区底色 | `--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-status-tabs` | 原生按钮使用 `is-active`,Element 页签同时保留 `density-element-tabs`;保留业务分类、图标、数量、查询与切换,不在页面复制页签样式;详情页签继续使用原有详情规则 |
| 详情返回导航 | `.density-back` | 使用 `link`,保留返回事件和可访问名称;客户管理按纯文字约定保留返回文字 |
| 详情页头与业务摘要 | `.density-detail-header` / `.density-detail-heading` / `.density-detail-title` / `.density-detail-overview` | 与国内订单样板共用排版;页面提供实际业务编号、状态及摘要,不复制标题字号和摘要间距 |
| 连续白底独立详情容器 | `DetailPageLayout` 上的 `.density-detail-layout` | 显式接入统一页头分隔线、正文间距与零区块间隙;正文去掉重复面板,业务仅保留列数和长字段跨列 |
| 详情页签及彩色图标 | `.density-tabs`、`.density-tab-icon` | 保留标签、键盘事件和激活态;只配置业务内容 |
| 现有 Element 详情页签 | `.density-element-tabs` | 保留 `el-tabs` 的键盘处理、权限条件与切换事件,标签复用彩色图标 |
| 现有原生资料表、状态历史表 | `.density-table` | 保留字段、记录排序、业务列宽和固定操作列;不另写行高、边线和表头底色 |
| 分组页面与弹框表单 | `.density-form` | 显式接入统一标签字号和字段间距,模块只维护列数、跨列及字段顺序 |
| 既有 FormSection 分组 | `.density-form-section` | 在 `FormSection` 上显式添加,复用公共标题字号和分组间距,保留业务标题与分组顺序 |
| Element 描述表 | `.density-descriptions` | 页面显式接入统一标签/内容字号与行高;保留原字段及列数 |
| 连续信息表边框、标签底色、文字与内边距 | `.density-fields` | 只配置列数、跨列、字段顺序;特殊标签宽度使用局部 `--admin-field-label-width` |
| 弹框/抽屉标题、正文滚动、底部间距 | `.admin-density-dialog` / `.admin-density-drawer` | 容器显式接入,保留该业务已确认宽度与作业高度 |
| 客户资质列、测量对照列、预装信息布局 | 对应模块 CSS 或页面 `scoped` | 只保留业务列宽、列数、图片尺寸、定位与排列 |
### 使用约定
下列 `density-action` 是非列表行操作的描边按钮原语;标准列表行操作使用上文 `text-actions`/`admin-text-actions`,不照搬此描边示例。
```html
<!-- 业务按钮只选择语义,不复制尺寸、颜色及交互状态规则 -->
<el-button class="density-action" @click="edit">编辑</el-button>
<el-button class="density-action" data-tone="warning" @click="review">审核</el-button>
<el-button class="density-action" data-tone="danger" @click="remove">删除</el-button>
<!-- 更多入口仍是三点,必须保留可访问名称与悬停提示 -->
<el-button class="density-action" aria-label="更多操作" title="更多操作">
<MoreHorizontal :size="17" aria-hidden="true" />
</el-button>
```
`data-tone` 可用 `neutral`(默认)、`warning`、`purple`、`primary`、`success`、`danger`。每个页面仍按已确认的动作配色表选择;纯文字与图标策略不由 CSS 猜测。按钮组使用 `density-actions` 统一间距,业务布局可决定是否换行。
`density-actions` 使用 `gap` 管理间距,并将 `--cc-list-action-sibling-margin` 设为 0;`DataTable` 通过该变量保留未接入按钮的默认 8px 左边距。不得将两份间距叠加,也不以更强选择器在页面逐个覆盖。
纯文字行操作由 `adminTextActions.css` 统一将按钮横向内边距和组间距减半:每侧 5px、组间距 3px(随公共间距变量缩放),相邻文字间留白由 26px 收紧为 13px。描边操作继续使用原间距;页面不单独覆盖文字操作间距。
### 防止维护退化
1. **同一通用外观只有一个实现。** 已由公共类接管的按钮配色、页签高度、信息表边框或弹框内边距,删除原页面声明,不能保留两套后再增加优先级或 `!important`。
2. **新增通用尺寸先改变量。** 模块与页面只引用 `--admin-*`;禁止在页面重定义公共默认值。局部标签宽度是明确的业务参数,不改变全局标签宽度。
3. **不要把代码搬到模块 CSS 就称为公共化。** 多个业务共用的按钮、页签、信息表与弹框规则留在公共层;模块 CSS 不能依赖另一个业务模块的类名,也不引入第二套按钮颜色变量。
4. **保留显式接入边界。** 公共样式不能使用无范围的 `.el-button`、`.el-table`、`.el-dialog` 选择器。Teleport 的弹框、抽屉必须自己携带密度类;不能仅依赖页面父级。
5. **共用组件保留未接入消费者。** CSS 变量的兜底值用于独立渲染和未接入入口;已接入消费者始终由公共变量决定实际值,兜底值不是第二份密度配置。打印标签、PDF 尺寸、原图、画布和既有窄屏规则不能机械替换。
6. **公共调整按消费者回归。** `adminDensity.test.ts` 维护明确的页面/组件清单,不扫描全部后台。检查模板中公共按钮、页签和信息表的真实祖先是否带有密度入口,不能仅断言文件导入了 CSS 或出现过密度类;页面弹框带有 `admin-density-dialog` 不代表列表与详情已接入。新增接入时同步清单及逐操作矩阵,运行合同、受影响测试、类型检查、全量测试和构建。
7. **视觉与代码分开记录。** 本轮默认人工截图;代码通过不等于视觉验收通过。已确认业务宽度和工作区高度可以保留为例外,例外写入核对记录。
## 新模块接入规则
### 先确定范围,再选择公共能力
1. 用导航与实际路由列出全部菜单入口,以及新建、详情、编辑和深链页面;不能把文件夹数量当作页面覆盖数。为每个页面沿实际组件引用列出弹框、抽屉、消息确认、预览与打印入口,按逐操作矩阵记录承载方式。
2. 默认复用普通表格 36px 行高、正文 13px、辅助文字 12px、行内操作基准 28px、页签 38px、轻量返回和连续信息表。新模块的行内业务操作默认纯文字;顶部/提交保留 32px 主次按钮。动作语义色沿用本规范,不通过按钮文字自动猜测。
3. 模块只保留业务列宽、字段跨列、布局与图纸尺寸等参数。`density-fields` 的四列是默认值,不是固定业务要求;返回位置与大弹框尺寸也不能从订单整页复制。
4. 编辑表格、流程图、装柜模型、数据看板、图片、标签和 PDF 保留业务所需面积;指标卡和图表不得套用 `.density-fields`或其他详情表格样式,模型画布和打印尺寸不套普通行高。空态、错误、长内容、处理中、只读和无权限仍要可用。
5. 获准采用蓝白外观的页面按 [蓝白样板接入入口](界面参考/蓝白卡片式工作台风格参考.md#其他页面该参考哪个样板) 选择对应页面类型;列表参考销量分析,复杂分析参考库存分析,运行看板参考数据采集,不一律复制经营总览的大指标卡。保留现有密度根,显式接入主题根和公共类,浮层自行声明作用域;具体覆盖与截图结论回到目标模块现有矩阵。
### 密度类与浮层接入
页面直接导入 `@/styles/adminDensity.css`,实际根使用 `admin-density`;蓝白主题的组合示例见本文“蓝白主题与图表”。
样式接入不授权新增业务动作。详情复用页面根节点的 `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 的嵌入组件当作实际抽屉,承载方式以模板和调用端为准。
### 共享组件与检查的扩展
- 对每个共享组件列出真实调用方及模式。现有 `dense` 参数由调用入口显式传递;`mode` / `workbench` 属于业务范围,不能为了样式变更其含义。新增消费者后,对开启和关闭密度、国内和海外等实际模式分别回归。
- `adminDensity.test.ts` 中菜单清单、`densityPages`、`consumers`、`moduleCss` 分别覆盖导航、独立入口、子组件和模块 CSS。接入时补充受影响清单,不移除国内仓和客户管理基线,也不通过递归扫描全后台推导范围。
- 动态类检查显式执行预装/已确认、`dense` 开/关,以及 DOMESTIC/OVERSEAS 入口;货柜已确认清单与船期浮层有独立开关断言。接入其他条件时补充真实上下文和对应开关用例,不能一律传 `preload`、强行把所有条件置真,或只断言出现过类名。
- 检查必须同时覆盖 CSS 独立导入、公共原语的实际祖先、Teleport 容器自己的类、变量定义与消费、按钮间距、普通/悬停/焦点/禁用,以及原有业务行为。源码合同只防止已知结构退化,不能证明最终 CSS 优先级或布局视觉正确。
- 发布前的代码门禁为密度合同、受影响业务测试、类型检查、全量测试和构建;维护指引后运行 AGENTS 索引合同。人工按 1920×1080、100% 缩放检查独立打开/刷新、列表到详情、浮层普通/全屏/重开、长数据和权限状态。缺少对应截图时保留“待人工截图确认”。
+241
View File
@@ -0,0 +1,241 @@
# Client 界面样式规范
## 范围与验收状态
- 本文是客户端样式的现行维护正文,按新增页面和列表分别定义规则。后续客户端的新增、新建、下单操作统一采用下文“新增页面”的风格;列表沿用列表章节,不把两者的控件尺寸和间距混用。
- 新增页以“海外采购下单”和“美国本土卡车下单”在当前对话确认的外观与布局为样板:满宽、无阴影、精简说明、12px 模块间距、浅色 placeholder 和字段右上角校验提示。两页的不同字段排列见下文,不按整页截图机械复制。规范确定不等于所有新增页已改造或通过视觉验收。列表首个验收样板为“头程物流 → 订单列表”(`/orders/first-leg`),其验收状态见文末。
- 只维护 `apps/client-web/` 内的样式和公共组件,不与 Admin 跨应用链接依赖。
- 左侧菜单背景保持现状,不修改 `shell.css` 中的导航背景,也不通过全局品牌变量间接改变导航。
- 标准通过正文容器 `.client-ui` 接入;新增页在本页或新增表单容器内覆盖对应令牌,不将新增页尺寸写入全局默认值。创建、详情与其他模块需分别核对承载方式和字段,不以某个样板通过代替整模块验收。
- 按 1920×1080、浏览器缩放 100% 验收,保留现有窄屏能力。
## 公共入口与职责
按任务阅读:新增、新建、下单读“新增页面”;列表读“尺寸与布局”“颜色与按钮”及适用的列表样板条款。视觉核对方法只维护在 [Admin / Client 前端原型还原验收规则](Admin-Client前端原型还原验收规则.md)。
| 入口(相对 apps/client-web) | 职责 |
|---|---|
| `src/styles/client-ui.css` | `--client-*` 颜色、尺寸、间距;正文按钮和状态外观 |
| `src/components/common/QueryToolbar.vue` | 搜索栏;`layout="grid"` 为四列筛选布局 |
| `src/components/common/DataTable.vue` | 表格、工具栏、行操作、分页;工具栏内容用插槽提供 |
| `src/components/common/tableActions.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。
## 新增页面
### 适用范围与设计依据
- 后续客户端新增、新建、下单操作按本章实施。既有页面在对应任务触及时按授权范围调整,不因规范更新批量改造其他页面。
- 本章替代最初海外采购 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 |
| 次要说明、状态字号 | 12px |
| 普通按钮、输入框 | 高 32px |
| 表格行操作按钮 | 高 28px,左右 padding 8px |
| 按钮间距 | 8px |
| 搜索栏 | padding 16px;四列;字段间距纵向 12px、横向 16px |
| 搜索操作区 | 顶部 margin 12px、padding 12px,分隔线与字段区区分 |
| 表格工具栏 | 最小高 48px;padding 8px 16px;实际高度随操作换行增长 |
| 表头 | 高 44px,浅灰底,600 字重 |
| 数据行 | 高 48px;白底与浅灰交替,悬停浅蓝 |
| 单元格 | 左右 padding 12px,行高 20px |
| 分页 | 最小高 58px;padding 12px 16px;页码按钮 32px |
| 内容分区间距、圆角 | 16px、6px |
长编号保持可辨认,普通长文本省略并提供完整内容提示;金额右对齐,状态居中。操作列在业务列最左侧并固定,批量选择框在其前方。列设置、排序与选择行为保持原有业务逻辑。
## 颜色与按钮
本节用于列表操作和状态语义;新增表单按钮的外观使用上文“新增页面”,业务危险语义和权限要求仍须保留。
| 用途 | 文字色 | 背景色 |
|---|---|---|
| 默认操作 | `#1777ff` | 白色 |
| 主要操作 | 白色 | `#1777ff` |
| 处理中 | `#175cd3` | `#eff8ff` |
| 成功 | `#067647` | `#ecfdf3` |
| 待处理、提醒 | `#b54708` | `#fffaeb` |
| 失败、危险 | `#b42318` | `#fef3f2` |
| 草稿、中性 | `#475467` | `#f2f4f7` |
| 禁用按钮 | `#98a2b3` | `#f9fafb` |
- 查询、创建等主要操作使用实心蓝色;行内详情、编辑等使用白底描边蓝字,统一使用纯文字,不显示装饰图标。加载中的进度指示保留。
- 行操作先按权限及业务条件过滤,再计算数量;1–3 个全部展示,4 个及以上显示前两个和 `…`。入口保留“更多操作”的可访问名称。
- 禁用操作不被隐藏,不因禁用改变位置;加载中不可重复执行。
- 表格顶部批量操作不套用行操作的三个阈值,保留明确的批量入口和创建入口。
- 危险操作仍需原有业务确认;样式不改变权限和提交条件。
## 头程状态映射
| 状态码 | 文案 | 语义色 |
|---|---|---|
| DRAFT | 草稿 | 中性灰 |
| PENDING_REVIEW | 待审核 | 提醒橙 |
| WAIT_MEASURE | 待测量数据 | 处理中蓝 |
| WAIT_PALLETIZE | 待组托 | 处理中蓝 |
| WAIT_SPLIT | 待分柜 | 处理中蓝 |
| LOADING | 装柜中 | 处理中蓝 |
| LOADED | 装柜完成 | 成功绿 |
| DELIVERED | 派送完成 | 成功绿 |
| COMPLETED | 已完成 | 成功绿 |
测试环境复验补充:服务端统一订单已正式返回 `COMPLETED`,列表、筛选和详情沿用该状态,不能再显示英文或映射成“装柜完成”。订单号列宽 240px,入仓码列宽 230px,状态默认紧随入仓码,保证首屏可识别。
标签包含状态文字,颜色为辅助识别。其他模块需按业务阶段单独列出状态映射,不以中文模糊匹配统一推断;未知状态不得伪装为处理中或完成。
## 样板逐操作验收矩阵
| 检查对象 | 首版目标 | 验收方式 |
|---|---|---|
| 左侧菜单 | 背景与修改前一致 | 同视口截图对照 |
| 列表首屏 | 筛选、工具栏、表格、分页层次一致 | 有数据的完整页面截图 |
| 搜索 | 查询和重置有效;输入框不遮挡、字段标签完整 | 查询前后、重置后 |
| 工具栏 | 列设置、下载、导出、批量提交、批量导入、创建入口保留 | 未选择/已选择/无写权限 |
| 行操作 | 1、2、3 个不折叠;4 个时前两个加省略入口 | 按权限与业务条件验证,不修改真实订单来凑状态 |
| 状态 | 草稿、待审核、处理中、装柜完成的语义颜色不同 | 对照多状态列表 |
| 表格 | 横向滚动时选择、操作、订单号可用;完整值可查看 | 长编号、长渠道、空值、列重排 |
| 分页 | 条数和页码完整;更换条数回到第 1 页 | 10/20/50 条、首尾页 |
| 加载/失败/空态 | 失败保留重试和工具栏;不把失败显示为无订单 | 加载、失败重试、空结果 |
| 关联操作 | 详情、费用、编辑、报关入口保持原有行为 | 只读打开核对;写入另按授权执行 |
自动化检查不代替真实页面截图。列表样板确认前,不将其他 21 个菜单标记为已统一或已验收。
2026-09-15 经用户明确授权完成内置浏览器验收:测试部署 `client-web-test #282`、提交 `7068f49` 成功;1920×1080、100% 缩放下检查首屏、筛选重置、全选、列设置、10/20/50 分页、横向固定列、详情入口以及灰/橙/蓝/绿状态。实测工具栏 padding 为 8px 16px,分页为 12px 16px,表头/行高为 44px/48px,行按钮 28px、#1777ff;菜单背景与部署前一致。四操作折叠分支仅自动化覆盖,缺少真实四操作数据;用户对视觉标准的最终确认待完成。
+43 -14
View File
@@ -1,21 +1,50 @@
# 虫虫出海文档索引
# 虫虫出海文档入口
项目交付文档按阶段归档,跨阶段原型、调研和过程设计保留在原专题目录。
本文件只负责选入口,不保存业务规则或部署进度。已知页面、文件、API 或当前正文时跳过本文件;未知代码入口查[业务索引](业务快速索引.md)的命中行,不沿所有 README 逐层读取。
## 阶段文档
## 按任务选一种入口
- [一期文档](一期/README.md):一期范围、开发进度和头程订单最小闭环。
- [二期文档](二期/README.md):预约取货、到仓收货、实测差异和指定库位闭环。
- [三期文档](三期/README.md):智能排柜、订舱、拖车、PDA 拣货、报关协同和国内出仓闭环。
| 任务 | 从哪里开始 |
|---|---|
| 改代码、文案或局部逻辑 | 已知目标文件及适用 `AGENTS.md`;业务语义不明才补一段正文 |
| 只有中文业务词或多义词 | [业务索引](业务快速索引.md),代码入口与规则正文分开选择 |
| 跨阶段流程、节点关系或上下游交接 | [全流程维护入口](头程到尾程/README.md),只查受影响阶段 |
| 已知某个业务域,需要找规则 | 下表选择该域;找到正文后停止扩展 |
| 运行、验证、部署或数据库操作 | 下方工程专题,按操作类型只选对应章节 |
## 跨阶段参考
## 业务域入口
- `悦/`:产品原型、流程图、历史架构资料和调研数据,仅作为需求参考,不直接等同于已确认范围。
- `superpowers/`:具体功能的设计与实施记录,按日期和主题维护。
| 业务域 | 入口 |
|---|---|
| 客户、企业、权限与头程订单 | [订单与客户](订单与客户/README.md) |
| 到仓、测量、箱码、计价与入库费用 | [入库测量与计费](入库测量与计费/README.md) |
| 分柜、装柜、订舱、拖车、报关与国内出仓 | [国内货柜履约](国内货柜履约/README.md) |
| 接柜、库存、库内服务、排车、预约与海外本土业务 | [海外仓业务](海外仓业务/README.md) |
| 费用入池、账单、资金账户与收付款 | [财务管理](财务管理/README.md) |
| 自营经营、库存周转与领星采集 | [自营业务](自营业务/README.md) |
| 箱唛、托盘标、HOLD 与 BOL | [打印标签维护](打印标签维护/README.md) |
## 维护规则
## 公共契约与工程专题(命中才读)
- 只影响单个阶段的范围、进度和验收文档放入对应阶段目录。
- 公共架构、跨阶段契约和长期产品资料保留在 `docs/` 根目录或独立专题目录。
- 阶段范围变化时同步更新该阶段的规划、进度表及受影响的公共契约。
- 原型中出现的功能不自动进入开发范围,必须在阶段规划中明确优先级、依赖和验收标准。
| 主题 | 当前入口 |
|---|---|
| 服务拓扑、环境配置、部署状态与验收项 | [部署主契约](测试环境单机部署与配置契约.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) |
## 方案、证据与历史(按需)
- 独立主题设计只在该任务触发:[数据库发布方案](数据库版本迁移与Jenkins自动发布方案.md)、[生产发布方案](生产服务监控告警与无停机发布方案.md)、[生产环境方案](阿里云生产环境选型压测与上线手册.md)、[OSS 设计](阿里云OSS文件中心接入设计与评审.md)、[看板规划](首页数据看板真实化与统计策略规划.md)。方案不证明已实现或已部署。
- 原型与截图按应用指引定向查找;样板、样式核对记录、进度表和验收报告不作为日常开发入口。
- [历史流程](归档/头程到尾程/README.md)、[货柜历史](国内货柜履约/归档/README.md)、[财务历史](财务管理/归档/财务闭环盘点历史记录.md)仅用于追溯;旧双区域架构不覆盖当前主契约。
- 只有独立任务协作才查[开发环境独立任务协作登记](开发环境独立任务协作登记.md)或[测试环境独立任务协作登记](独立任务协作登记.md),不同时读取两表。
## 维护边界
同一主题优先更新现行正文,不为每轮对话新增方案、总结、进度或交接文件。只有独立主题且现有正文无法承载时才新增,并在所属域登记角色、触发条件和替代关系。已完成的过程材料冻结归档;索引只同步路径或职责变化,不复制阶段数量、字段、状态、测试结果或完成进度。事实优先级及修改范围遵循工作区根指引。
@@ -59,7 +59,7 @@
- 退出操作先调用权限预览 Store 的重置动作,清除内存状态与持久化演示角色 ID,再调用 `auth.logout()`;认证 Store 不承担预览状态职责。
- 登录成功后由登录流程调用权限预览 Store 的初始化动作,默认选择启用的超级管理员;超级管理员不可用时选择第一个启用角色。未登录阶段不自动初始化或重新持久化默认角色。
- 顶栏固定区分两个来源:`登录身份:{auth.user.name}({auth.user.account})` 与 `权限预览:{previewRole.name}`。认证角色 `auth.user.roles` 不作为无标签副标题展示,也不被预览状态读取或改写。
- `localStorage` 在同源标签页之间共享,但本期不监听 `storage` 事件做实时跨标签同步;其他标签页刷新后读取最新持久化角色。
- `localStorage` 在同源标签页之间共享,但当前不监听 `storage` 事件做实时跨标签同步;其他标签页刷新后读取最新持久化角色。
### 权限数据流
-23
View File
@@ -1,23 +0,0 @@
# 一期文档
一期目标是完成平台后台与企业客户端的真实业务基础,以及头程订单最小闭环。
## 文档
- [一期开发进度表](一期开发进度表.md)
- [一期头程订单闭环设计](一期头程订单闭环设计.md)
- `虫虫出海一期开发进度表.xlsx`:面向团队日常维护的 Excel 进度表。
## 原型来源
- 产品原型统一位于 `docs/悦/`。
- 企业登录与注册分别参考 `docs/悦/合并/login.html`、`docs/悦/合并/register.html`;一期只默认包含中文账号密码登录和基础企业注册闭环。
- 快递公司和往来单位参考 `docs/悦/货代SAAS平台后台/货代SaaS平台原型.html` 中“通用”菜单下的对应页面。
- 原型用于确认信息架构、字段和视觉方向;是否已进入当前 Vue 应用、是否具备完整交互与数据持久化,以一期开发进度表为准。
## 当前边界
- 平台后台:内部账号登录、客户及企业资料审核、内部用户、角色权限、平台收货仓、快递公司、往来单位和头程订单;工作台不作为一期交付项。
- 企业客户端:中文邮箱/手机号加密码登录、免审核企业注册、企业资料、成员角色权限、头程下单、订单列表和详情;企业资料经平台人工审核通过后才允许提交订单,一期不接短信/邮箱验证码及微信、企业微信登录。
- 服务端:认证、租户隔离、权限、文件、基础资料、订单状态机、幂等和审计。
- 不包含工作台、部门/组织架构、完整 WMS、FBA/海外目的仓服务、在线报价、财务结算、完整报关清关、外部物流接口、多语言及微信/企业微信登录;快递公司和往来单位一期支持批量导入,不提供导出。
Binary file not shown.
-16
View File
@@ -1,16 +0,0 @@
# 三期文档
三期以头程物流“03 出仓”为范围,完成从排柜、订舱、拖车和仓内拣货,到封柜、报关、国内出仓并等待装船的业务闭环。
## 文档
- [三期开发规划:国内出仓](三期开发规划.md)
- [三期开发进度表](三期开发进度表.md):参考一期采用“大任务 → 详细任务 → 里程碑 → 未确认事项 → 开工准入 → 验收”结构维护。
- [虫虫出海三期开发进度表(Excel)](虫虫出海三期开发进度表.xlsx):可筛选、可下拉维护并使用公式汇总的项目进度工作簿。
- [三期需求确认表](三期需求确认表.md):集中跟踪 P3-Q1~P3-Q13、负责人和最终结论。
- [三期页面与原型清单](三期页面与原型清单.md):按管理后台、企业客户端和 PDA 维护页面范围及原型状态。
- `参考资料/出仓流程.png`:本期 9 个核心动作及业务终点的原始参考图。
## 当前状态
三期处于范围规划阶段,当前开工结论为 `NO-GO`。当前以原型图片中的“完成国内出仓,等待装船”为阶段终点。动作依赖与并行关系、排柜规则、PDA 设备、拖车协作、柜封照片清单、报关回执及放行门禁、港务/船期信息范围和来源仍需在启动前确认。产品和业务完成确认后先进入契约与任务准备,六项开工准入全部通过后再进入全面功能开发。
-310
View File
@@ -1,310 +0,0 @@
# 虫虫出海三期开发规划:国内出仓
> 创建日期:2026-07-28
> 状态:范围规划中
> 流程依据:[出仓流程](参考资料/出仓流程.png)中的头程物流“03 出仓”;当前以图片中的“完成国内出仓,等待装船”为阶段终点
> 前置阶段:[一期文档](../一期/README.md) · [二期文档](../二期/README.md)
## 一、三期目标
三期承接二期“货物完成到仓、实测、差异处理和指定库位”的结果,将已受理货物转化为可执行、可追踪、可审计的国内出仓任务。
流程覆盖九个动作:
```text
智能排柜 → 订舱 → 预约拖车
↓
PDA 拣货 → 装柜并上传货柜/铅封照片
↓
客户上传报关资料 → 平台整理提交报关代理 → 上传回执供客户下载
↓
查询或维护预计开船、到港等港务/船期信息
↓
完成国内出仓,等待装船
```
三期完成标准不是“订单改成已出仓”,而是每个柜次能够回答:装了哪些订单和货物、依据什么方案排柜、订了什么舱、谁承运拖车、仓库实际拣装了什么、柜号与铅封是什么、报关资料和回执在哪里、实际何时出仓、当前等待哪一班船。
### 原型动作覆盖
| 原型动作 | 规划模块 | 开发任务 | 覆盖结果 |
|---|---|---|---|
| 1. 智能排柜 | 智能排柜 | P3-PLAN-01、P3-PLAN-02 | 已覆盖,规则待 P3-Q1 确认 |
| 2. 订舱 | 订舱与港务/船期信息 | P3-BOOK-01 | 已覆盖 |
| 3. 预约托车 | 预约拖车 | P3-TRUCK-01 | 已覆盖,用词待 P3-Q3 确认 |
| 4. PDA 拣货 | PDA 拣货与复核 | P3-PICK-01、P3-PDA-01、P3-PDA-02 | 已覆盖 |
| 5. 拍货柜及铅封照上传 | 装柜及柜封证据 | P3-LOAD-01、P3-LOAD-02 | 已补充现场拍照上传任务,清单待 P3-Q6 确认 |
| 6. 客户上传报关资料 | 报关资料协同 | P3-CUS-01 | 已覆盖 |
| 7. 整理给到报关代理报关 | 报关资料协同 | P3-CLEAR-01 | 已覆盖 |
| 8. 回执上传到系统供客户下载 | 报关回执与客户下载 | P3-CLEAR-01、P3-CUS-02 | 已覆盖,回执类型待 P3-Q12 确认 |
| 9. 查港务信息(预计开船、到港等) | 订舱与港务/船期信息 | P3-PORT-01、P3-CUS-02 | 已补充独立查询任务,范围和数据源待 P3-Q9 确认 |
## 二、阶段边界
### 纳入三期
- 出仓单、柜次、智能排柜建议、人工调整和版本确认。
- 订舱申请、舱位结果,以及原型所述预计开船、到港等港务/船期信息;具体字段和数据源待确认。
- 预约拖车、车辆司机、到仓装柜和离仓记录。
- PDA 任务领取、扫码拣货、部分拣货、异常、复核和幂等提交。
- 装柜、柜号、铅封号及货柜/铅封照片证据。
- 客户上传报关资料、平台审核补件、整理并提交报关代理。
- 报关回执上传、版本、客户可见范围和授权下载。
- 国内出仓门禁、确认、冲正、时间线和站内通知。
### 明确不纳入三期
- 入库、上架、实时库存、移库、盘点、冻结、补货和完整 WMS。
- 港区闸口、车队、船公司、海关单一窗口的正式自动化接口。
- GPS 实时跟车、电子铅封、称重设备、摄像头 OCR 和 IoT 自动采集。
- 自动报关、关税计算、退税、完整清关业务和自动单证识别。
- 海上运输、海外清关、目的港提柜、海外仓入库和末端派送。
- 无人工确认的全自动排柜、自动订舱和不可逆业务操作。
## 三、参与角色与数据边界
| 角色 | 数据范围 | 主要操作 |
|---|---|---|
| 企业订单操作员 | 当前企业订单与出仓单 | 上传/补充报关资料、查看出仓和港务/船期进度、下载回执 |
| 平台运营 | 授权客户、订单和出仓单 | 创建出仓单、确认排柜、订舱、维护港务/船期信息和协调异常 |
| 仓库主管 | 被授权的平台收货仓 | 分配拣货任务、复核差异、确认装柜和出仓条件 |
| 仓库作业员 | 分配给本人或本仓的任务 | PDA 扫码、数量确认、异常上报和任务提交 |
| 拖车调度员 | 授权出仓单与车辆范围 | 预约车辆、维护司机/车牌、到仓和离仓节点 |
| 报关专员 | 授权客户、订单和报关批次 | 审核、退回、整理、提交资料并上传回执 |
| 平台管理员 | 平台授权范围 | 维护权限、规则、服务商和高风险冲正 |
服务端必须依据登录身份确定企业、仓库、客户和数据范围。前端传入的订单 ID、出仓单 ID、仓库 ID、客户 ID、作业员 ID 或报关批次 ID 不能单独作为授权依据。
## 四、流程与状态设计
原型以 1 至 9 编号表达动作顺序,但尚未说明哪些是强制前置、哪些允许并行。当前按原型顺序规划业务节点,同时使用主状态和子流程状态保留后续调整空间;在 P3-Q11 确认前,不把并行关系写成固定业务规则。
### 1. 出仓单主状态
| 稳定编码 | 中文名称 | 含义 |
|---|---|---|
| `DRAFT` | 草稿 | 出仓单已创建,排柜方案尚未确认 |
| `PLANNING` | 排柜中 | 系统生成建议或人工调整方案 |
| `PREPARING` | 出仓准备中 | 按已确认的依赖关系处理订舱、拖车、拣货和报关 |
| `READY_TO_DISPATCH` | 待出仓 | 必要子流程和证据已满足 |
| `DISPATCHED` | 已出仓 | 货柜已离开国内仓库 |
| `WAITING_FOR_LOADING` | 等待装船 | 国内出仓已完成,等待对应船班装船 |
| `CANCELLED` | 已取消 | 按规则取消并保留原因与历史 |
| `BLOCKED` | 已阻塞 | 存在必须人工解除的关键异常 |
### 2. 子流程状态
- 订舱:待订舱、订舱中、已订舱、订舱失败、已取消。
- 拖车:待预约、已预约、车辆已到仓、装柜中、已离仓、改约、已取消。
- 拣货:待分配、待拣货、拣货中、待复核、已完成、异常挂起、已取消。
- 报关:资料待上传、资料待审核、待补件、待提交、已提交代理、回执待上传、回执已上传、已退回、已取消。海关放行如需管理,作为待确认的回执类型或后续状态,不默认作为三期出仓门禁。
- 港务/船期:待维护、已确认、信息变更、已开船;“已开船”属于三期之后的运输阶段,不是当前三期完成条件。
主状态由服务端根据已确认的必要子流程推进。客户端不得通过传任意目标状态跳过拣货复核、柜封证据或已配置的出仓门禁。
## 五、业务模块
### 1. 出仓单
- 从已上架且允许出仓的头程订单创建一张或多张出仓单。
- 支持一张订单分多个柜次,也支持多个订单拼柜,具体开放范围由产品确认。
- 保存订单、客户、仓库、货物、往来单位和计量数据快照。
- 维护计划出仓时间、优先级、负责人、异常和整体时间线。
- 重复创建和确认使用幂等键,并通过版本字段防止并发覆盖。
### 2. 智能排柜
- 原型仅明确“智能排柜”,具体硬约束、软偏好、输入数据和输出结果以 P3-Q1 的业务规则表为准。
- 柜型容量、重量、体积、箱数、同票/混票、不可混装、装载顺序和利用率暂列为候选能力,不作为未经确认的固定验收项。
- 当前建议首版采用“系统建议、人工确认”;是否允许调整、是否强制填写原因由排柜规则确认。
- 建议排柜方案保留版本、规则版本、输入快照、操作者和前后差异,以支持追溯。
- 未确认方案不得生成正式拣货任务或执行不可逆状态变化。
### 3. 订舱与港务/船期信息
- 原型明确需要查询预计开船、到港等港务信息;“港务信息”的准确业务含义、字段范围和归属以 P3-Q9 为准。
- 船公司/订舱代理、航线、订舱号、船名航次、起运港、目的港、截单、截关、截港、ETD 和 ETA 暂列为候选字段。
- 订舱失败、改船、甩柜、船期延误和取消暂列为候选异常场景,按业务确认结果实现。
- 港务信息查询与人工维护分开设计:三期至少支持查询系统内已维护的信息,并记录查询条件、数据来源和更新时间;如后续确认可靠外部数据源,再通过预留适配边界接入,不在三期默认承诺正式接口。
- 客户查看预计开船、到港等信息时展示数据来源和最近更新时间,避免把过期结果显示为实时信息。
- 当前建议首版由平台人工维护,外部港务或船期接口只预留适配边界。
- 建议关键信息变更保留旧值、新值、原因,并向授权用户发送站内提醒。
### 4. 预约拖车
- 从往来单位选择已启用拖车服务商,维护车牌、司机、电话和预约时间窗。
- 记录提柜、到仓、装柜、离仓、还柜节点和交接说明。
- 支持改约、取消、迟到、未到、车辆更换和柜号变更。
- 司机手机号等个人信息按最小权限展示,不进入不必要的客户响应。
- 图片原文“预约托车”建议统一为行业常用的“预约拖车”,需产品最终确认。
### 5. PDA 拣货与复核
- 按已确认排柜方案生成仓库、柜次、订单和货物明细级任务。
- PDA 支持登录、领取、箱号选择、扫码、数量确认、部分拣货、跳拣、撤销和异常上报。
- 服务端校验任务归属、状态、重复扫码、超量、错货和重复提交。
- 拣货完成后必须复核;差异未处理前不得进入待出仓。
- 扫描器、声音、震动、网络和缓存通过设备适配层实现,不直接绑定单一厂商 SDK。
### 6. 装柜及柜封证据
- 维护柜号、铅封号、装柜开始/完成时间、操作人和异常说明。
- 支持按可配置清单上传货柜及铅封照片;柜体、开门空柜、装柜过程、满柜、关门和铅封照仅为候选类型,必传类型、角度和数量以 P3-Q6 为准。
- 现场执行端支持直接拍照或从相册选择后上传,上传前显示柜次、柜号、铅封号和照片类型,防止证据关联错误。
- 支持上传进度、失败重试、重复照片提示和提交前预览;弱网下不得因重复点击产生多份有效证据。
- 照片记录文件哈希、上传人、上传时间、关联柜次和客户可见范围。
- 铅封号重复、已确认的必传照片缺失或复核未通过时禁止确认出仓。
- 修改柜号或铅封号需要二次确认、原因和完整审计。
### 7. 报关资料协同
- 客户按资料清单上传发票、箱单、合同、委托书和申报要素等文件。
- 资料清单可按国家/地区、渠道和货物类型配置,并保存订单使用的清单版本。
- 平台报关专员审核完整性,可退回具体文件并记录补件原因和时限。
- 提交报关代理时生成提交批次,冻结该批次关联的文件版本。
- 首版采用系统内整理加线下提交,不直接对接海关单一窗口。
### 8. 报关回执与客户下载
- 上传代理回传的报关回执并关联提交批次;回执类型可区分接收、申报、退单、查验或放行等,实际类型及出仓门禁以 P3-Q12 为准。
- 替换文件产生新版本,不覆盖原记录;退单或补件形成明确任务。
- 客户只能下载本企业且标记为客户可见的回执。
- 文件下载使用授权地址并记录审计,不暴露内部存储路径。
### 9. 国内出仓确认
- 服务端校验排柜已确认、拣货复核完成、已确认的柜封证据齐全、车辆已离仓,以及已配置的报关回执和港务/船期信息门禁。
- 当前不默认要求“海关已放行”后才能确认国内出仓;是否需要放行或其他特定回执作为门禁,以 P3-Q12 的业务结论为准。
- 授权人员执行确认出仓,记录实际出仓时间、车辆、柜号、铅封号和说明。
- 确认操作具备幂等、权限、版本和并发校验,重复请求只产生一次有效事件。
- 完成后进入“等待装船”,企业客户可查看允许公开的节点、港务/船期信息和回执。
- 出仓后发现错误不得直接回退数据库状态,必须使用授权冲正动作和反向审计事件。
## 六、核心数据对象
| 数据对象 | 关键内容 |
|---|---|
| 出仓单 | 订单、企业、仓库、计划/实际时间、主状态、负责人和版本 |
| 排柜方案 | 经确认的规则版本、输入快照、柜次、货物分配、规则计算结果和确认记录 |
| 柜次 | 柜型、柜号、铅封号、装载顺序、重量、体积和关联订单 |
| 订舱记录 | 船公司/代理、订舱号、船名航次、港口、舱位和异常 |
| 港务/船期节点 | 经确认的信息字段、变更历史和来源;候选字段包括截单、截关、截港、ETD 和 ETA |
| 拖车预约 | 服务商、车辆、司机、预约时间窗、到离仓节点和异常 |
| 拣货任务 | 柜次、货物明细、分配人、作业员、扫描、数量、差异和复核 |
| 装柜证据 | 柜号、铅封号、照片类型、文件、上传人、时间和可见范围 |
| 报关批次 | 资料清单版本、文件版本、补件、提交代理和回执 |
| 出仓时间线 | 事件、前后状态、操作者、发生时间、说明和请求关联 ID |
基础资料引用必须同时保存稳定 ID 和必要快照。订单、客户、仓库、往来单位、港务/船期信息或文件后续修改时,不得改变历史出仓记录。
## 七、应用范围
### 管理后台 `apps/admin-web`
- 出仓单列表、筛选、详情、异常和状态操作。
- 按已确认的排柜规则提供建议、冲突展示、人工调整、版本对比和确认。
- 订舱、船期、拖车预约、装柜、柜号、铅封和照片。
- 报关资料审核、补件、提交批次、回执上传和客户可见控制。
- 权限至少拆分为查看、排柜、订舱、拖车、仓内复核、报关、确认出仓和冲正。
### 企业客户端 `apps/client-web`
- 查看本企业出仓单、柜次和允许公开的进度时间线。
- 上传、补充和查看报关资料及处理结果。
- 下载客户可见的报关回执。
- 查看预计开船、到港和船期变更,不暴露内部成本、供应商敏感信息和内部备注。
### PDA `apps/pda-uniapp`
- 仓库人员登录、任务领取、箱号选择、扫码拣货和数量确认。
- 部分拣货、跳拣、撤销、异常上报、待复核和完成提交。
- 按授权柜次拍摄或选择货柜、铅封照片,确认关联信息后上传,并处理进度、失败重试和重复提交。
- 弱网、断网、前后台切换、重复提交和换班清理。
- 真实设备、扫描头和发布方式确认前,不绑定厂商 SDK。
### 服务端 `services/api`
- 最终保证身份、租户、仓库数据范围、权限、状态、门禁、幂等、并发和审计。
- 管理出仓、排柜、订舱、拖车、拣货、装柜、报关和时间线的事务边界。
- 文件上传校验类型、大小、内容和权限;使用不可预测标识和授权下载。
- 为船期、车队、海关等外部接口预留适配层,但三期不承诺正式对接。
## 八、建议里程碑
| 里程碑 | 交付目标 | 进入条件 |
|---|---|---|
| P3-M0 规则与设备锁定 | 流程、角色、状态、排柜规则、PDA、文件和验收确认 | 二期到仓契约稳定 |
| P3-M1 出仓单与排柜 | 出仓单可创建,并按确认范围提供排柜建议、人工确认与追溯 | 排柜规则确认 |
| P3-M2 订舱与拖车 | 订舱、船期、拖车预约和异常处理可用 | 服务商与权限可用 |
| P3-M3 PDA 拣货 | 任务生成、扫码、差异、复核和幂等提交可用 | 目标设备与仓库流程确认 |
| P3-M4 装柜封柜 | 柜号、铅封和照片证据完整,门禁生效 | 文件能力与必传清单确认 |
| P3-M5 报关协同 | 客户上传、平台审核、补件、提交和回执下载闭环 | 报关资料清单确认 |
| P3-M6 国内出仓 | 必要子流程满足后可确认出仓并进入等待装船 | 出仓门禁和冲正规则确认 |
| P3-M7 联调验收 | 跨端、设备、安全、弱网、性能、迁移和发布完成 | P3-M1 至 P3-M6 验收通过 |
## 九、建议开发任务
| ID | 端 | 模块 | 交付内容 | 优先级 | 依赖 |
|---|---|---|---|---|---|
| P3-BASE-01 | 公共 | 出仓契约 | 主/子状态、权限、事件、错误码、门禁和快照模型 | P0 | 二期到仓契约 |
| P3-BASE-02 | 公共 | 数据模型 | 出仓单、排柜、柜次、订舱、拖车、拣货、装柜、报关和时间线 | P0 | P3-BASE-01 |
| P3-DSP-01 | 后台 | 出仓单 | 列表、筛选、创建、详情、异常和取消 | P0 | P3-BASE-02 |
| P3-PLAN-01 | 公共 | 排柜规则 | 按已确认规则实现输入、约束、偏好和冲突判断 | P0 | P3-BASE-02、P3-Q1 |
| P3-PLAN-02 | 后台 | 智能排柜 | 按已确认范围实现建议、人工确认和追溯 | P0 | P3-PLAN-01 |
| P3-BOOK-01 | 后台 | 订舱 | 订舱和经确认的船名航次、港口、变更及异常 | P0 | P3-DSP-01、P3-Q9 |
| P3-PORT-01 | 后台/服务端 | 港务信息查询 | 查询系统内预计开船、到港等信息,记录来源和更新时间,并提供授权人工维护兜底 | P0 | P3-BOOK-01、P3-Q9 |
| P3-TRUCK-01 | 后台 | 拖车预约 | 服务商、车辆司机、时间窗、到离仓和异常 | P0 | P3-DSP-01 |
| P3-PICK-01 | 公共 | 拣货任务 | 按排柜方案生成任务、明细、差异和复核规则 | P0 | P3-PLAN-02 |
| P3-PDA-01 | PDA | 扫码拣货 | 领取、扫描、部分拣货、跳拣、撤销和异常 | P0 | P3-PICK-01 |
| P3-PDA-02 | PDA/服务端 | 弱网幂等 | 重试、去重、冲突、换班和设备缓存清理 | P0 | P3-PDA-01 |
| P3-LOAD-01 | 后台 | 装柜封柜 | 柜号、铅封号、装柜节点、可配置照片清单和复核 | P0 | P3-PICK-01、P3-Q6 |
| P3-LOAD-02 | PDA/服务端 | 柜封拍照上传 | 现场拍照/相册选择、关联确认、进度、预览、失败重试、去重和提交 | P0 | P3-LOAD-01、文件能力可用 |
| P3-CUS-01 | 客户端 | 报关资料 | 清单、上传、补件、版本和进度查看 | P0 | 文件能力可用 |
| P3-CLEAR-01 | 后台 | 报关协同 | 审核、退回、提交代理、批次、回执和可见范围 | P0 | P3-CUS-01 |
| P3-CUS-02 | 客户端 | 回执及港务信息 | 回执下载、预计开船/到港信息、数据来源、更新时间和变更时间线 | P0 | P3-PORT-01、P3-CLEAR-01 |
| P3-GATE-01 | 服务端 | 出仓门禁 | 按确认规则校验必要子流程、确认出仓、等待装船和冲正 | P0 | P3-PORT-01、P3-TRUCK-01、P3-LOAD-01、P3-LOAD-02、P3-CLEAR-01、P3-Q11、P3-Q12 |
| P3-NOTIFY-01 | 公共 | 通知异常 | 站内通知、阻塞、责任人、时限和失败补偿 | P1 | 核心流程完成 |
| P3-TEST-01 | 公共 | 自动化测试 | 权限、排柜、幂等、并发、文件、门禁和状态测试 | P0 | 所有 P0 模块 |
| P3-DEVICE-01 | PDA | 真机验收 | 扫描头、弱网、性能、电量、前后台和发布验证 | P0 | 目标设备确认 |
| P3-REL-01 | 公共 | 发布验收 | 初始化规则、迁移、联调、演练、灰度和生产发布 | P0 | P3-TEST-01、P3-DEVICE-01 |
## 十、测试与验收重点
- 系统排柜符合已确认的业务规则;如启用建议解释、人工调整、版本或原因记录,对应结果可追溯。
- 多订单拼柜和一单多柜的件数、重量、体积能与二期实测版本对账。
- PDA 重复扫码、超量、错货、断网重试和重复提交不产生重复扣减或完成事件。
- 柜封照片能够在现场完成拍摄、关联确认和上传;失败重试或重复提交不产生多份有效证据。
- 未完成复核、缺少已确认的必传柜封证据或存在关键阻塞时不能确认出仓。
- 企业 A 无法查看、上传或下载企业 B 的报关资料和回执。
- 报关资料替换、退回、补件、提交和回执均能追溯到明确版本。
- 港务/船期查询结果展示来源和更新时间;变更保留历史并通知授权用户,旧信息不被无痕覆盖。
- 确认出仓的并发请求只产生一次状态变化和一次有效审计事件。
- 管理后台覆盖加载、空态、失败、无权限和数据冲突;PDA 覆盖弱网、前后台切换和硬件扫描。
- 当前三期验收基线为“完成国内出仓,等待装船”,不以海上运输或海外签收作为完成条件;最终以 P3-Q13 确认结果为准。
## 十一、启动前待确认事项
| 编号 | 待确认问题 | 当前建议 |
|---|---|---|
| P3-Q1 | 智能排柜需考虑哪些硬约束和软偏好? | 业务先提供可执行规则表;建议必须可解释且人工确认 |
| P3-Q2 | 是否存在拼柜、一单多柜和拆批出仓? | 数据模型全部支持,页面按实际高频场景逐步开放 |
| P3-Q3 | “预约托车”是否统一为“预约拖车”? | 建议统一使用行业常用的“拖车”,并确认业务实际含义 |
| P3-Q4 | 目标 PDA 型号、系统和扫描头接入方式是什么? | 设备确认前保持适配层,不绑定厂商 SDK |
| P3-Q5 | 拣货是否依赖实时库存和库位可用量? | 若需要,完整 WMS 前置范围会显著扩大,必须单独评估 |
| P3-Q6 | 柜封照片有哪些必传角度和留存期限? | 启动前由仓库、业务和合规共同锁定 |
| P3-Q7 | 报关资料清单是否按国家、渠道和货物类型变化? | 建议配置化,并保留下单使用的清单版本 |
| P3-Q8 | 报关代理如何接收资料和返回回执? | 首版系统内整理加线下提交,正式接口后续评估 |
| P3-Q9 | 原型中的“港务信息”具体指船期、港口作业状态还是两者,包含哪些字段,由谁维护? | 先确认业务词义和字段;首版建议平台人工维护并审计,外部接口仅预留适配层 |
| P3-Q10 | 确认出仓后发现错误如何处理? | 不直接回退状态,使用授权冲正动作和反向审计事件 |
| P3-Q11 | 九个动作中哪些是强制前置,哪些允许并行? | 确认前按原型编号顺序规划,不承诺固定并行关系 |
| P3-Q12 | “报关回执”具体包含哪些类型,海关放行是否为国内出仓硬门禁? | 当前不默认以放行为门禁;由业务明确接收、申报、退单、查验和放行的含义及门禁 |
| P3-Q13 | 三期终点以“等待装船”还是“装船发运”为准? | 当前以本期出仓图片的“完成国内出仓,等待装船”为基线,完整流程 SVG 的不同表述待产品确认 |
## 十二、建议实施顺序
1. 锁定待确认事项、业务规则、目标设备和协作责任人。
2. 统一出仓单、柜次、订舱、拖车、拣货、报关和港务/船期信息的稳定编码。
3. 先实现服务端权限、状态、门禁、幂等、并发和审计,再接各端页面。
4. 完成管理后台的出仓编排,再接 PDA 现场执行和客户资料协同。
5. 使用脱敏数据演练拼柜、一单多柜、错拣、补件、改船和冲正。
6. 在真实 PDA 和代表性仓库网络环境中完成联调、验收和灰度发布。
-152
View File
@@ -1,152 +0,0 @@
# 虫虫出海三期开发进度表
> 创建日期:2026-07-28
> 当前阶段:范围规划与大任务拆分
> 总体状态:待确认
> 规划依据:`三期开发规划.md`
> 维护方式:参考一期进度表,采用“总体大任务 → 详细任务 → 里程碑 → 未确认事项 → 开工准入 → 验收”的结构。
## 一、三期目标
三期承接二期到仓、实测、差异处理、处理单元编码和当前位置记录,完成智能排柜、订舱、拖车预约、PDA 拣货、柜封拍照、报关协同、港务信息查询和国内出仓闭环。
当前验收基线为“完成国内出仓,等待装船”。在 P3-Q13 最终确认前,不把装船发运纳入三期完成条件。
## 二、总体进度(大任务)
| 大任务 ID | 大任务 | 范围 | 状态 | 进度 | 计划开始 | 计划完成 | 负责人 | 关键依赖/备注 |
|---|---|---|---|---:|---|---|---|---|
| T01 | 需求确认与原型 | 锁定阶段边界、流程依赖、排柜规则、设备、文件、报关和港务信息;完成页面原型 | 进行中 | 40% | 2026-07-28 | 待排期 | 待分配 | 已盘点 `docs/悦` 三期相关原型;后台有较完整参考,客户端三期页面和 PDA 柜封拍照仍待补 |
| T02 | 公共契约与数据模型 | 主/子状态、权限、事件、错误码、出仓单、柜次、任务、证据、报关和审计模型 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T01、二期输出契约 |
| T03 | 出仓单与柜次 | 出仓单创建、列表、详情、订单拆分/拼柜、柜次和时间线 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T02、P3-Q2、P3-Q11 |
| T04 | 智能排柜 | 排柜规则、系统建议、冲突、人工确认和追溯 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T03、P3-Q1、P3-Q2 |
| T05 | 订舱与港务信息 | 订舱、变更异常、预计开船/到港信息、来源和更新时间 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T03、P3-Q9、P3-Q11 |
| T06 | 拖车预约 | 服务商、车辆司机、预约时间窗、到离仓节点和异常 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T03、一期往来单位、P3-Q3 |
| T07 | PDA 拣货与复核 | 任务生成、领取、扫码、部分拣货、异常、弱网幂等和后台复核 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T04、二期处理单元/位置、P3-Q4、P3-Q5 |
| T08 | 装柜及柜封证据 | 装柜节点、柜号、铅封号、PDA 拍照上传、照片清单和复核 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T07、文件能力、P3-Q6 |
| T09 | 报关资料与回执 | 客户上传、后台审核补件、提交代理、回执上传和客户下载 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖文件能力、P3-Q7、P3-Q8、P3-Q12 |
| T10 | 国内出仓门禁 | 必要条件校验、确认出仓、阻塞、通知、冲正和审计 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T05~T09、P3-Q10~P3-Q13 |
| T11 | 客户端出仓协同 | 出仓进度、柜次、回执、预计开船/到港和变更时间线 | 待确认 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T05、T09、T10;客户可见范围 |
| T12 | 联调测试与发布 | 跨端联调、自动化测试、PDA 真机、安全、弱网、迁移、验收和发布 | 待开始 | 0% | 待排期 | 待排期 | 待分配 | 依赖 T02~T11 完成 |
## 三、详细任务表
详细任务按大任务逐项拆分。当前先建立任务骨架;每次拆分一个大任务,确认交付内容、优先级和依赖后再进入开发。
| ID | 大任务 | 端 | 模块 | 功能/交付内容 | 优先级 | 状态 | 进度 | 依赖 | 负责人 | 备注 |
|---|---|---|---|---|---|---|---:|---|---|---|
| P3-T01-00 | T01 | 公共 | 需求确认与原型 | 完成需求确认表、页面清单和原型评审,锁定开工阻断项 | P0 | 进行中 | 40% | - | 待分配 | 已建立文档骨架并完成 `docs/悦` 原型初审,后续逐项确认和裁剪 |
| P3-T02-00 | T02 | 公共 | 公共契约与数据模型 | 待 T01 确认后拆分 | P0 | 待确认 | 0% | P3-T01-00 | 待分配 | 下一层将拆状态、权限、数据模型、接口和审计 |
| P3-T03-00 | T03 | 后台/服务端 | 出仓单与柜次 | 待 T02 契约明确后拆分 | P0 | 待确认 | 0% | P3-T02-00 | 待分配 | - |
| P3-T04-00 | T04 | 后台/服务端 | 智能排柜 | 待排柜规则确认后拆分 | P0 | 待确认 | 0% | P3-T03-00、P3-Q1 | 待分配 | - |
| P3-T05-00 | T05 | 后台/服务端 | 订舱与港务信息 | 待港务范围和字段确认后拆分 | P0 | 待确认 | 0% | P3-T03-00、P3-Q9 | 待分配 | - |
| P3-T06-00 | T06 | 后台/服务端 | 拖车预约 | 待流程依赖确认后拆分 | P0 | 待确认 | 0% | P3-T03-00、P3-Q11 | 待分配 | - |
| P3-T07-00 | T07 | PDA/后台/服务端 | PDA 拣货与复核 | 待拣货输入和设备确认后拆分 | P0 | 待确认 | 0% | P3-T04-00、P3-Q4、P3-Q5 | 待分配 | 已有静态 PDA 原型可复用 |
| P3-T08-00 | T08 | PDA/后台/服务端 | 装柜及柜封证据 | 待照片清单确认后拆分 | P0 | 待确认 | 0% | P3-T07-00、P3-Q6 | 待分配 | 需新增柜封拍照原型 |
| P3-T09-00 | T09 | 客户端/后台/服务端 | 报关资料与回执 | 待资料和回执规则确认后拆分 | P0 | 待确认 | 0% | P3-Q7、P3-Q8、P3-Q12 | 待分配 | - |
| P3-T10-00 | T10 | 后台/服务端 | 国内出仓门禁 | 待流程、回执和终点确认后拆分 | P0 | 待确认 | 0% | P3-T05-00~P3-T09-00 | 待分配 | 高风险状态操作 |
| P3-T11-00 | T11 | 客户端/服务端 | 客户端出仓协同 | 待客户可见字段确认后拆分 | P0 | 待确认 | 0% | P3-T05-00、P3-T09-00、P3-T10-00 | 待分配 | - |
| P3-T12-00 | T12 | 公共 | 联调测试与发布 | 待各模块拆分完成后细化测试与发布任务 | P0 | 待开始 | 0% | P3-T02-00~P3-T11-00 | 待分配 | - |
| P3-T01-PROTO-01 | T01 | 公共 | 原型盘点 | 盘点流程图、后台、企业客户端和 PDA 中与三期相关的页面及交互 | P0 | 已完成 | 100% | - | 待分配 | 2026-07-28 已完成首次盘点,来源为 `docs/悦` |
| P3-T03-PROTO-01 | T03 | 后台 | 出仓单原型核验 | 对照通用 WMS 出库单、货柜和装柜清单,确定三期出仓单可复用字段与需重做部分 | P0 | 进行中 | 50% | P3-T01-PROTO-01、P3-Q11 | 待分配 | 通用“出库”不能直接等同三期“国内出仓” |
| P3-T04-PROTO-01 | T04 | 后台 | 智能排柜原型核验 | 映射智能装柜的线路页签、筛选、智能锁定、订单分柜、拖放调整和集装箱详情 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 原型叫“智能装柜”,与“智能排柜”的业务边界待 P3-Q1 确认 |
| P3-T05-PROTO-01 | T05 | 后台 | 订舱港务原型核验 | 映射订舱列表、新增/详情、放舱、船名航次、港口和 ETD/ATD/ETA/ATA 字段 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 港务信息是否独立模块仍待 P3-Q9 确认 |
| P3-T06-PROTO-01 | T06 | 后台 | 拖车原型核验 | 映射拖车列表、新增表单、运输公司、司机、车头号、装箱日期、费用和附件 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 预约时间窗和到离仓节点仍需按三期流程补充 |
| P3-T07-PROTO-01 | T07 | 后台/PDA | 拣货原型核验 | 对照通用 WMS 出库拣货和现有 PDA 集装箱拣货,锁定可复用交互与真实接口缺口 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | PDA 静态交互已有,任务、鉴权、持久化和弱网仍待开发 |
| P3-T08-PROTO-01 | T08 | 后台 | 装柜证据原型核验 | 映射货柜列表、预装清单、装柜清单、柜号、单证、船期和装柜明细 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 后台参考较完整,但现场拍照上传原型缺失 |
| P3-T08-PROTO-02 | T08 | PDA | 柜封拍照原型 | 新增柜次确认、货柜/铅封拍照、照片类型、预览、重试和提交页面原型 | P0 | 待开始 | 0% | P3-Q4、P3-Q6 | 待分配 | `docs/悦` 暂无对应原型 |
| P3-T09-PROTO-01 | T09 | 后台 | 报关单证原型核验 | 映射报关单列表、单证管理、报关/清关/放行资料及装柜清单附件 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 客户上传和回执下载页面仍需新建 |
| P3-T10-PROTO-01 | T10 | 后台 | 出仓门禁原型 | 设计统一门禁检查、阻塞原因、确认出仓和冲正页面 | P0 | 进行中 | 30% | P3-Q10~P3-Q13 | 待分配 | 现有原型只有分散状态和放行字段,无统一出仓门禁页 |
| P3-T11-PROTO-01 | T11 | 客户端 | 客户端三期原型 | 新增出仓进度、报关资料上传/补件、回执下载和港务/船期页面原型 | P0 | 待开始 | 0% | P3-Q7~P3-Q9、P3-Q12、P3-Q13 | 待分配 | 现有客户端原型未覆盖三期专用页面 |
## 四、原型对照与开发影响
| 大任务 | `docs/悦` 现有原型 | 覆盖判断 | 开发处理 |
|---|---|---|---|
| T03 出仓单与柜次 | 通用 WMS 出库单、货柜列表、装柜清单 | 部分参考 | 保留列表、状态和明细交互,按国内出仓业务重新定义对象和门禁 |
| T04 智能排柜 | 入库单列表中的“智能装柜”弹窗 | 已有参考 | 复用线路、筛选、锁定、分柜和拖放交互,按 P3-Q1 裁剪规则 |
| T05 订舱与港务信息 | 订舱列表、新增/详情、放舱、货柜船期字段 | 已有参考 | 复用订舱字段和页面结构,确认港务信息范围及来源后裁剪 |
| T06 拖车预约 | 拖车列表、新增拖车 | 已有参考 | 复用车辆司机和费用字段,补预约时间窗、到仓及离仓节点 |
| T07 PDA 拣货与复核 | 通用 WMS 出库、PDA 集装箱拣货 | 已有参考 | 保留 PDA 交互,重做真实任务、权限、幂等、弱网和后台复核 |
| T08 装柜及柜封证据 | 货柜列表、预装清单、装柜清单 | 部分参考 | 后台页面裁剪复用;PDA 货柜/铅封拍照页面新建 |
| T09 报关资料与回执 | 报关单列表、单证管理、装柜清单附件 | 部分参考 | 后台裁剪复用;客户上传、补件和回执下载页面新建 |
| T10 国内出仓门禁 | 分散的出库状态、国内报关成功和放行资料 | 部分参考 | 新建统一门禁检查和确认出仓页面,避免直接照搬“已放行”规则 |
| T11 客户端出仓协同 | 头程下单客户端只有船期字段和出仓时间展示 | 覆盖不足 | 新建三期客户端出仓进度、报关和港务信息页面 |
> `货代SaaS平台原型.html` 是全量平台参考原型,其中海外仓、完整 WMS、费用和清关能力不自动纳入三期;所有复用项仍需经过三期范围裁剪。
## 五、建议拆分模板
每个大任务按照同一顺序拆成可开发、可验收的小任务:
1. `RULE`:业务规则、状态、权限和异常。
2. `DATA`:数据表、字段、快照、版本和审计。
3. `API`:接口、鉴权、幂等、并发和错误码。
4. `ADM` / `CLI` / `PDA`:各端页面与交互。
5. `TEST`:单元、接口、端到端、权限和边界测试。
6. `ACCEPT`:业务验收、证据和遗留问题。
例如 T04 智能排柜后续可使用 `P3-T04-RULE-01`、`P3-T04-DATA-01`、`P3-T04-API-01`、`P3-T04-ADM-01`、`P3-T04-TEST-01` 编号。
## 六、建议里程碑
| 里程碑 | 交付目标 | 状态 | 计划完成 |
|---|---|---|---|
| P3-M0 需求与原型锁定 | 阶段边界、流程、规则、设备、文件和页面原型确认 | 待确认 | 待排期 |
| P3-M1 公共契约 | 二三期输入、状态、权限、数据模型和接口契约稳定 | 待排期 | 待排期 |
| P3-M2 出仓编排 | 出仓单、排柜、订舱、港务和拖车可用 | 待排期 | 待排期 |
| P3-M3 仓内出仓 | PDA 拣货、复核、装柜和柜封证据闭环 | 待排期 | 待排期 |
| P3-M4 报关协同 | 客户资料、后台审核、提交代理、回执上传下载闭环 | 待排期 | 待排期 |
| P3-M5 国内出仓 | 门禁满足后可确认出仓并进入当前约定终点 | 待排期 | 待排期 |
| P3-M6 三期上线 | 联调、真机、安全、测试、验收和生产发布完成 | 待排期 | 待排期 |
## 七、未确认事项(需求确认进度)
当前共 13 项待确认事项,其中 7 项为开工阻断、5 项为模块阻断、1 项为非阻断。完整建议、负责人、计划确认日期和最终结论统一维护在 [三期需求确认表](三期需求确认表.md);开工阻断项未确认前,受影响的大任务保持“待确认”。
| 编号 | 阻断级别 | 待确认事项 | 状态 | 主要影响 |
|---|---|---|---|---|
| P3-Q1 | 开工阻断 | 智能排柜的硬约束和软偏好 | 待确认 | T04 智能排柜、T07 拣货任务 |
| P3-Q2 | 开工阻断 | 是否支持拼柜、一单多柜和拆批出仓 | 待确认 | T03 出仓单与柜次、T04 智能排柜 |
| P3-Q3 | 非阻断 | “预约托车”是否统一为“预约拖车” | 待确认 | T06 拖车预约、页面与接口文案 |
| P3-Q4 | 模块阻断 | PDA 型号、系统和扫描头接入方式 | 待确认 | T07 PDA 拣货、T08 柜封拍照、真机验收 |
| P3-Q5 | 开工阻断 | 拣货是否依赖实时库存和库位可用量 | 待确认 | T02 二三期契约、T07 PDA 拣货 |
| P3-Q6 | 模块阻断 | 柜封照片必传类型、角度、数量和留存期限 | 待确认 | T08 装柜证据、T10 出仓门禁 |
| P3-Q7 | 模块阻断 | 报关资料清单是否按国家、渠道和货物类型变化 | 待确认 | T09 报关资料、文件版本 |
| P3-Q8 | 模块阻断 | 报关代理接收资料和返回回执的方式 | 待确认 | T09 报关协同、回执上传 |
| P3-Q9 | 开工阻断 | 港务信息的业务含义、字段和维护方 | 待确认 | T05 订舱港务、T11 客户端展示 |
| P3-Q10 | 模块阻断 | 确认出仓后的错误处理和冲正方式 | 待确认 | T10 出仓门禁、权限和审计 |
| P3-Q11 | 开工阻断 | 九个动作的强制前置和并行关系 | 待确认 | T03~T10 全流程和状态机 |
| P3-Q12 | 开工阻断 | 报关回执类型及海关放行是否为出仓硬门禁 | 待确认 | T09 报关状态、T10 出仓门禁 |
| P3-Q13 | 开工阻断 | 三期终点是等待装船还是装船发运 | 待确认 | 阶段边界、状态、里程碑和验收 |
## 八、开工准入清单
产品和业务完成需求确认后,先进入“开工准备”;以下准入项全部通过后,三期才能从范围规划正式切换到全面开发。
| 准入编号 | 准入条件 | 当前状态 | 责任方 | 完成证据 |
|---|---|---|---|---|
| P3-GO-01 | P3-Q1~P3-Q13 均形成明确结论,7 项开工阻断全部解除 | 进行中 | 产品、业务 | `三期需求确认表.md` 状态均为已确认并填写最终结论 |
| P3-GO-02 | 确认结论已同步开发规划、进度表、页面清单和验收范围 | 待开始 | 产品、项目负责人 | 四份文档口径一致,无未标注的候选规则 |
| P3-GO-03 | 关键缺失原型已补齐并评审,包括出仓门禁、客户端三期页面和 PDA 柜封拍照 | 进行中 | 产品、设计、业务 | 页面清单中的关键页面达到已确认状态 |
| P3-GO-04 | T02 公共契约完成,二期输入、状态机、权限、数据模型、接口、错误码和审计口径稳定 | 待开始 | 前后端、架构/技术负责人 | 契约评审记录及稳定的数据/API 定义 |
| P3-GO-05 | T03~T12 已拆成 RULE、DATA、API、ADM/CLI/PDA、TEST、ACCEPT 任务,并填写负责人和计划 | 待开始 | 项目负责人、研发、测试 | 详细任务可独立开发、联调和验收 |
| P3-GO-06 | 产品、业务、研发和测试完成开工评审,确认范围、依赖、风险和首批任务 | 待开始 | 项目负责人 | 开工评审纪要及明确的 GO 结论 |
准入口径:`P3-GO-01` 完成后可以进入 T02 契约设计和详细任务拆分;`P3-GO-01~P3-GO-06` 全部通过后,才进入全面功能开发。
## 九、状态维护规则
- 状态统一使用:待确认、待开始、进行中、联调中、测试中、已完成、已阻塞。
- 进度填写 `0%~100%`;只有开发、测试和业务验收均完成后才能填写 `100%`。
- 开始开发时填写负责人、计划开始和计划完成日期。
- 出现阻塞时在备注中填写阻塞原因、责任人和预计解除时间。
- 大任务进度应由其详细任务加权汇总;当前骨架阶段先人工维护,拆分完成后再确定权重。
## 十、下一步拆分顺序
1. 先处理 T01,逐项确认 P3-Q1~P3-Q13,并补齐关键页面原型。
2. 拆 T02 公共契约与数据模型,固定二期输入和三期核心对象。
3. 按业务顺序拆 T03~T10,每个模块补齐规则、数据、接口、页面和测试。
4. 拆 T11 客户端可视范围和交互。
5. 最后拆 T12 联调、真机、验收和发布任务。
-69
View File
@@ -1,69 +0,0 @@
# 虫虫出海三期需求确认表
> 创建日期:2026-07-28
> 当前状态:确认中
> 用途:记录会影响三期范围、流程、数据模型、页面和验收的产品决策。
## 一、维护规则
- 状态统一使用:待确认、确认中、已确认、已取消。
- 阻断级别统一使用:开工阻断、模块阻断、非阻断。
- 结论确认后同步更新 `三期开发规划.md`、`三期开发进度表.md` 和受影响的页面原型。
- 未确认事项只能作为候选方案,不能直接写成固定开发或验收承诺。
## 二、确认事项
| 编号 | 决策/问题 | 当前建议 | 阻断级别 | 状态 | 负责人 | 计划确认 | 最终结论 | 影响模块 |
|---|---|---|---|---|---|---|---|---|
| P3-Q1 | 智能排柜需考虑哪些硬约束和软偏好? | 业务提供可执行规则表,建议可解释并由人工确认 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 智能排柜、拣货任务 |
| P3-Q2 | 是否存在拼柜、一单多柜和拆批出仓? | 数据模型预留能力,页面按高频场景逐步开放 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 出仓单、柜次、排柜、拣货 |
| P3-Q3 | 原型“预约托车”是否统一为“预约拖车”? | 建议使用行业常用的“拖车”,同时确认业务实际含义 | 非阻断 | 待确认 | 待分配 | 待排期 | - | 页面文案、接口字段说明 |
| P3-Q4 | 目标 PDA 型号、系统和扫描头接入方式是什么? | 确认前保持设备适配层,不绑定厂商 SDK | 模块阻断 | 待确认 | 待分配 | 待排期 | - | PDA 拣货、真机验收 |
| P3-Q5 | 拣货是否依赖实时库存和库位可用量? | 默认使用二期处理单元和当前位置;如需完整库存,单独评估 WMS 范围 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 二三期契约、拣货、库存边界 |
| P3-Q6 | 柜封照片有哪些必传类型、角度、数量和留存期限? | 使用可配置清单,由仓库、业务和合规共同确认 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 装柜、PDA 拍照、文件存储、出仓门禁 |
| P3-Q7 | 报关资料清单是否按国家、渠道和货物类型变化? | 清单配置化,并保存业务使用的清单版本 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 客户资料、报关审核、文件版本 |
| P3-Q8 | 报关代理如何接收资料并返回回执? | 首版系统内整理、线下提交,正式接口后续评估 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 报关协同、回执上传 |
| P3-Q9 | “港务信息”指船期、港口作业状态还是两者,包含哪些字段,由谁维护? | 先确认词义和字段;首版平台人工维护并审计 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 订舱、港务查询、客户展示 |
| P3-Q10 | 确认出仓后发现错误如何处理? | 不直接回退状态,使用授权冲正和反向审计事件 | 模块阻断 | 待确认 | 待分配 | 待排期 | - | 出仓门禁、权限、审计 |
| P3-Q11 | 九个动作中哪些是强制前置,哪些允许并行? | 确认前按原型编号顺序规划 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 全流程、状态机、页面进度 |
| P3-Q12 | 报关回执包含哪些类型,海关放行是否为国内出仓硬门禁? | 当前不默认以放行为门禁,业务明确各类回执含义 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 报关状态、出仓门禁、客户回执 |
| P3-Q13 | 三期终点以“等待装船”还是“装船发运”为准? | 当前以“完成国内出仓,等待装船”为基线 | 开工阻断 | 待确认 | 待分配 | 待排期 | - | 阶段边界、状态、里程碑、验收 |
## 三、建议确认顺序
1. 先确认 P3-Q13、P3-Q11,锁定阶段终点和流程依赖。
2. 再确认 P3-Q1、P3-Q2、P3-Q5,锁定排柜、柜次和拣货输入。
3. 然后确认 P3-Q12、P3-Q7、P3-Q8,锁定报关和出仓门禁。
4. 最后确认设备、照片、港务信息、冲正和文案事项。
## 四、产品与业务确认会议
### 4.1 参会角色
- 产品负责人:逐项说明问题、候选方案和影响范围,维护最终结论。
- 业务负责人:确认流程、规则、例外、责任边界和客户可见范围。
- 仓库/运营代表:确认现场作业、PDA、照片、拖车、装柜和冲正可执行性。
- 研发与测试代表:识别数据、接口、设备、权限和验收风险,不代替业务作决定。
### 4.2 会议输入
- 本确认表中的 P3-Q1~P3-Q13。
- `三期开发规划.md` 的流程、状态、里程碑和任务骨架。
- `三期页面与原型清单.md` 中已有参考原型和待补页面。
- 二期输出契约、目标 PDA 信息、文件存储能力及报关/港务协作现状。
### 4.3 每项确认要求
1. 必须填写负责人、计划确认日期和可执行的最终结论,不能只记录“按建议处理”。
2. 最终结论需明确正常流程、异常/冲正、权限责任和验收口径。
3. 暂缓事项必须写明本期是否排除、临时方案、影响模块和再次确认日期。
4. 开工阻断项未解除时,不得将受影响模块标记为可开发。
5. 会议结束后,将结论同步到开发规划、开发进度表、页面原型和后续验收任务。
### 4.4 会议输出
- 13 项确认事项的状态和最终结论。
- 需要新增或调整的原型清单。
- 三期范围内/范围外清单及跨期依赖。
- 仍有风险的事项、责任人和完成日期。
- 是否允许进入 T02 契约设计与任务拆分的明确结论。
-55
View File
@@ -1,55 +0,0 @@
# 虫虫出海三期页面与原型清单
> 创建日期:2026-07-28
> 当前状态:页面盘点中
> 原型依据:`参考资料/出仓流程.png`、现有 PDA 拣货原型
## 一、维护规则
- 页面状态统一使用:待确认、待原型、原型中、待评审、已确认、开发中、已完成。
- 页面只有在业务流程、角色权限和关键字段确认后才能标记“已确认”。
- 页面原型至少覆盖正常态、空态、加载态、失败态、无权限态和关键冲突态。
- 当前先列页面级大项,后续按开发进度表的大任务逐项拆交互、字段和验收。
## 二、管理后台
| 页面 ID | 页面/入口 | 主要能力 | 对应大任务 | 原型状态 | 依赖确认项 | 备注 |
|---|---|---|---|---|---|---|
| P3-ADM-01 | 出仓单列表 | 查询、筛选、创建、异常和状态展示 | T03 出仓单与柜次 | 部分参考原型 | P3-Q2、P3-Q11 | 可参考通用 WMS 出库单,但需重定义国内出仓对象 |
| P3-ADM-02 | 出仓单详情 | 柜次、任务、证据、报关和时间线 | T03 出仓单与柜次 | 部分参考原型 | P3-Q11、P3-Q13 | 可组合参考货柜列表和装柜清单,缺统一详情页 |
| P3-ADM-03 | 智能排柜 | 生成建议、冲突、调整和确认 | T04 智能排柜 | 已有参考原型 | P3-Q1、P3-Q2 | 参考“智能装柜”弹窗,需确认名称和规则边界 |
| P3-ADM-04 | 订舱管理 | 订舱申请、结果、变更和异常 | T05 订舱与港务信息 | 已有参考原型 | P3-Q9、P3-Q11 | 已有订舱列表、新增和详情 |
| P3-ADM-05 | 港务/船期信息 | 查询系统信息、人工维护、来源和更新时间 | T05 订舱与港务信息 | 部分参考原型 | P3-Q9 | 订舱详情和货柜列表已有船期字段,缺独立查询口径 |
| P3-ADM-06 | 拖车预约 | 服务商、车辆司机、时间窗和节点 | T06 拖车预约 | 已有参考原型 | P3-Q3、P3-Q11 | 已有拖车列表和新增表单,需补预约及到离仓节点 |
| P3-ADM-07 | 拣货任务与复核 | 分配、进度、差异、复核和异常 | T07 PDA 拣货与复核 | 部分参考原型 | P3-Q4、P3-Q5 | 可参考通用 WMS 出库和 PDA 原型,缺三期真实任务页 |
| P3-ADM-08 | 装柜封柜 | 柜号、铅封号、照片清单和复核 | T08 装柜及柜封证据 | 部分参考原型 | P3-Q6 | 已有货柜/预装/装柜清单,缺现场照片复核闭环 |
| P3-ADM-09 | 报关协同 | 资料审核、补件、提交批次和回执上传 | T09 报关资料与回执 | 部分参考原型 | P3-Q7、P3-Q8、P3-Q12 | 已有报关单和单证管理,缺客户补件协同闭环 |
| P3-ADM-10 | 国内出仓确认 | 门禁检查、确认、阻塞和冲正 | T10 国内出仓门禁 | 待原型 | P3-Q10、P3-Q11、P3-Q12、P3-Q13 | 现有状态分散,无统一门禁确认页 |
## 三、企业客户端
| 页面 ID | 页面/入口 | 主要能力 | 对应大任务 | 原型状态 | 依赖确认项 | 备注 |
|---|---|---|---|---|---|---|
| P3-CLI-01 | 出仓进度列表 | 查看本企业出仓单、柜次和当前节点 | T11 客户端出仓协同 | 待原型 | P3-Q11、P3-Q13 | 现有客户端未覆盖三期专用页面 |
| P3-CLI-02 | 出仓进度详情 | 时间线、柜号、船期和允许公开的证据 | T11 客户端出仓协同 | 待原型 | P3-Q6、P3-Q9 | 现有客户端只有零散船期/出仓时间字段,需新建详情页 |
| P3-CLI-03 | 报关资料上传 | 清单、上传、补件、版本和处理进度 | T09 报关资料与回执 | 待原型 | P3-Q7 | 文件规则确认后细化 |
| P3-CLI-04 | 报关回执下载 | 回执列表、类型、版本和授权下载 | T09 报关资料与回执 | 待原型 | P3-Q8、P3-Q12 | 区分客户可见回执 |
| P3-CLI-05 | 港务/船期信息 | 预计开船、到港、来源、更新时间和变更 | T11 客户端出仓协同 | 待原型 | P3-Q9 | 不将过期信息展示为实时信息 |
## 四、PDA
| 页面 ID | 页面/入口 | 主要能力 | 对应大任务 | 原型状态 | 依赖确认项 | 备注 |
|---|---|---|---|---|---|---|
| P3-PDA-01 | 登录 | 人员登录和快捷登录 | T07 PDA 拣货与复核 | 已有静态原型 | P3-Q4 | 真实鉴权待服务端接入 |
| P3-PDA-02 | 箱号与任务选择 | 领取任务、选择箱号和查看进度 | T07 PDA 拣货与复核 | 已有静态原型 | P3-Q4、P3-Q5 | 需对接真实任务和处理单元 |
| P3-PDA-03 | 扫码拣货 | 扫码、整拣、部分拣货、跳拣和撤销 | T07 PDA 拣货与复核 | 已有静态原型 | P3-Q4、P3-Q5 | 已有本地交互,缺服务端 |
| P3-PDA-04 | 拣货提交 | 汇总、异常、提交和完成统计 | T07 PDA 拣货与复核 | 已有静态原型 | P3-Q5 | 需补幂等和冲突处理 |
| P3-PDA-05 | 柜封拍照上传 | 柜次确认、拍照/相册、类型、预览和重试 | T08 装柜及柜封证据 | 待原型 | P3-Q4、P3-Q6 | `docs/悦` 中暂无对应页面,属于明确原型缺口 |
## 五、下一步拆分顺序
1. 先补 P3-ADM-01、P3-ADM-02,确定三期后台信息架构。
2. 根据 P3-Q1 结论补 P3-ADM-03 智能排柜原型。
3. 根据 P3-Q5 复核现有 PDA 拣货原型并补真实状态。
4. 根据 P3-Q6 优先补 P3-PDA-05 柜封拍照上传原型。
5. 报关和港务规则确认后,再补客户端及对应后台页面。
Binary file not shown.
+48
View File
@@ -0,0 +1,48 @@
# 业务单据编号契约
## 格式与分配
纳入本契约的新建业务单据采用 `前缀 + yyyyMMdd + 四位流水`,无分隔符。前缀为 2~4 位大写英文字母,总长度为 14~16 位,例如 `FL202610200001`。
- 业务日期统一按 `Asia/Shanghai` 计算;每个前缀每天独立分配 `0001` 至 `9999`。
- 同一前缀不按客户或仓库分段;服务内所有创建入口共用同一个序列。前缀按下表归属,禁止在不同服务重复分配同一前缀。
- 单号由服务端生成并保持不变。编辑、审核、作废、重复提交不换号;幂等重放返回原业务记录及原号,不重新取号。
- 序列在所属服务数据库内以原子更新和独立短事务分配;外层业务回滚允许断号,已分配号不回收。不以最大业务编号加一、时间戳、随机串、实体 ID 或其截断值生成。
- 单日四位流水用尽时明确失败,不改为五位、不循环或随机回退。日期在取号前确定,不能在格式化时重新读取日期。
- 本契约不授权对已有测试数据改号、回填、重置或执行 SQL;数据库与部署操作须独立授权。
## 前缀登记
| 服务 | 前缀与单据 |
|---|---|
| Order | `FL` 头程主订单 |
| Warehouse | `ZGRK` 国内整柜入库、`ZGCK` 国内整柜出库 |
| Firstleg | `OB` 订舱、`TA` 国内拖车派车、`LP` 预装/正式装柜计划、`DECL` 报关申报批次、`BR` 报关行批次、`PS` 船节点船期、`SL` 船期日历航次、`ST` 船期周模板、`CLG` 同柜组 |
| Lastleg 入出库 | `WC` 头程来源尾程订单、`IP` 入仓计划、`CK` 普通出库、`DFCK` 一件代发出库、`HBCK` 换标出库、`THCK` 退货出库、`PDA` 出库作业任务、`DL` 派送、`EX` 异常、`CD` 废弃 |
| Lastleg 库内服务 | `TB` 换标、`ZY` 转运、`TH` 退货、`THHB` 退货换标、`RR` 退货收货、`RB` 收货批次、`HX` 合箱计划、`YY` 送仓预约 |
| Lastleg 商业业务 | `TR` 本土卡车、`LB` 散板、`CG` 采购订单、`PR` 采购实收、`PJ` 采购交寄、`PF` 采购费用(含更正与退款费用)、`PN` 采购说明、`PX` 采购关闭、`PG` 采购更正记录 |
| Lastleg 车队 | `PC` 海外排车(原规则已符合)、`CT` 车次、`FB` 车队预订、`FO` 运力发布、`VR` 车辆运维记录 |
| Finance | `REC` 对账单、`AR` 应收结算、`AP` 应付结算、`RC` 充值申请、`AC` 账户流水、`VC` 车辆成本、`VP` 车辆付款、`PAY` 结算付款流水 |
同柜组按入仓码查询的公开摘要返回 `groupNo`;结算详情的付款流水返回 `transactionNo`,均取已生成的业务号。应收结算引用的收款凭证不生成 PAY 号,其 `transactionNo` 为空,不以内部 ID 或银行参考号替代。
同一类型的所有创建入口共用序列:例如普通卡车下单与车队商业池创建均使用 `TR`;正常车次与取货车次均使用 `CT`。预装和正式装柜清单继续使用同一个 `LP` 计划编号。
海外出库作业任务统一使用 `PDA + yyyyMMdd + 四位流水`,例如 `PDA202610230001`;一件代发、退货、转运和换标出库共用该序列,不拼接内部实体 ID。PDA 出库列表及详情以出库单号为主标识,任务号标明“任务号”作为辅助信息;扫描出库单号或任务号均可定位当前任务。入仓任务编号不在此规则范围内。
头程来源尾程订单采用 `WC + yyyyMMdd + 四位流水`,共14位,例如 `WC202610210001`,按来源柜 `sourceContainerBookingId` 复用:该来源柜首次创建尾程订单时在柜级行锁内取号,后续同柜的入仓单、不同客户或跨日交接事件复用原号;事件重放不重新取号。真实集装箱号 `containerNo` 不作为复用身份,不同来源柜即使使用相同集装箱号也不能共用尾程编号。
## 明确保留的规则
- 入仓码、拆分子订单号和子入仓码不变。子订单继续使用主订单号加拆分后缀;新主订单改号后子单自然继承主号,但不改拆分算法或重新分配独立流水。
- 柜次号继续使用全局连续的 `D0001`,不按日期重置,超过四位自然增长。
- 实物箱码、散货托盘码、退货/转运箱码及一件代发 `DP-yyMMdd-####` 托盘标签不纳入本次改号。
- 换标、转运、退货来源尾程订单继续沿用对应业务单号,不增加第二套业务身份。
- 自营采集任务号、主数据编码及未列入登记表的其他编号不在本次范围。
- 外部提单号、真实集装箱号、运单号、FBA 货件号、银行流水号等保留外部原号。
## 实现与验收
通用格式由 `baiyue-firstleg/common-core/.../number/DailyDocumentNumber.java` 提供;各服务通过自己的 `DocumentSequenceRepository → DocumentSequenceMapper` 访问本库编号表。海外排车继续复用原 `DispatchNumberSequence`。
验证覆盖北京时间跨日、前缀独立、并发唯一、外层回滚不复用、缓存绕过、9999 上限、业务重放及保留编号规则。数据库变更同步模块空库基线和 `deploy/sql/` 统一空库入口;本地测试不代表已执行数据库变更或已部署。
+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 标签与一件代发实装托盘分别取各自冻结事实。
+110
View File
@@ -0,0 +1,110 @@
# 业务快速索引
本文件只负责消除歧义与定位,不是启动必读清单。已知文件、组件或 API 时跳过本文件;先按终端选应用,再用 `rg -n -F '组合词' docs/业务快速索引.md` 读取命中行。
代码问题直接进入列出的模块并读适用指引;只有业务边界不清时才读“边界正文”的命中章节,不串读各层 README、其他应用索引或整个正文文件。表内代码入口相对工作区根,前端仍按任务终端分流;服务端入口不要求纯展示任务先读后端。
## 常用说法与歧义分流
取“终端+对象+动作”组合词;只读命中行。不同解释会改变范围且仍无法判断时再询问。
| 常用说法 | 区分依据 | 首个定位范围 |
|---|---|---|
| 没有报价、价格未命中、人工定价、手工报价、私人地址报价 | 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`,客户范围取认证身份 |
| 退货审核、退货驳回、换标审核 | 先区分退货预报准入与换标申请审核,均不是仓储转运审核 | 退货预报 `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` |
| 收货、入库、测量、称重 | 国内到仓称重或测量弹框 | `apps/admin-web/src/modules/inbounds/`;业务路由查“到仓测量” |
| 仓储转运测量、转运打托、转运托盘标签 | 海外 PDA 逐托实测、生成新托盘号与扫码绑定,不是 Admin 转运审核或排车转派送 | `apps/pda-overseas-uniapp/src/pages/warehouse-transfer/warehouse-transfer.vue` → `apps/pda-overseas-uniapp/src/api/warehouse-transfers.js`;约束与回归见该应用 `AGENTS.md` |
| 接柜、卸柜、收货、签收 | 海外 PDA 柜号认领、照片、实收 | `apps/pda-overseas-uniapp/src/pages/operation/operation.vue`;后端查 `ReceivingContainerService` |
| 入仓计划、生成计划、按柜生成 | 平台尾程订单预览与确认,不是现场实收 | `apps/admin-web/src/modules/overseas-warehouse/pages/LastMileOrdersView.vue`;后端查 `ContainerInboundPlanConversionCoordinator` |
| 审核、审单、批量审核 | 客户头程订单待审核 | `apps/admin-web/src/modules/unified-orders/`;后端查 `BatchOrderReviewPreviewService` |
| 订单审核、头程订单审核、批量审单 | 平台审核客户头程订单,状态以 Order `SUBMITTED` 和服务端 `canApprove/blockReason` 为准;不要按仓储转运审核定位 | Admin `apps/admin-web/src/modules/unified-orders/`;Client 只读订单状态查 `apps/client-web/src/modules/first-leg/`;Backend `baiyue-firstleg/order/` 的 `BatchOrderReviewPreviewService`、`PlatformFirstLegOrderController` |
| 审核、测量审核、实测审核 | 仓库测量结果审核 | `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` |
| 柜费、公共费用、分摊 | 国内柜费来源归 Firstleg;海外柜费来源归 Lastleg;账单与结算结果归 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 |
| 自动生成托盘、托盘码没生成、计划齐全、重试生成托盘码 | 海外入库计划保存后资源生成,不是国内托盘标签打印 | 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`,详见各应用/模块指引 |
| 箱码、箱唛、箱标、单箱扫码 | 单箱身份与测量,不是托盘或库位 | 业务路由查“箱唛、箱码与单箱测量”;后端查 `InboundCartonLabelService` |
| 库位、托盘、占位、释放 | 国内资源归 Warehouse;海外资源归 Warehouse Overseas;海外库存业务归 Lastleg | 业务路由查“称重确认”或“海外库位”;仓库名称/地址查“海外仓库主档” |
| 拖车、派车、提柜、还柜 | 国内订舱拖车与目的港码头车队是不同业务;海外配送排车另属 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` |
| 退货、退货预报、退货换标、退货签收、退货合箱 | 客户退货预报及签收库存,区别于派送异常退回 | 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/` |
| 异常、退回、退仓、异常回仓、回访 | 派送异常回仓归 `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`;界面能力查最近指引 |
## 业务快速路由表
| 业务 | 首个代码入口 | 边界正文(仅需要规则时读) |
|---|---|---|
| 登录认证 | [模块指引](../apps/admin-web/src/modules/auth/AGENTS.md) | [对应章节](业务实现边界.md#登录认证) |
| 客户与企业 | [模块指引](../apps/admin-web/src/modules/customers/AGENTS.md) | [对应章节](业务实现边界.md#客户与企业) |
| 供应商与国内整柜 | [模块指引](../apps/admin-web/src/modules/suppliers/AGENTS.md) | [对应章节](业务实现边界.md#供应商与国内整柜) |
| 平台收货仓 | [模块指引](../apps/admin-web/src/modules/warehouses/AGENTS.md) | [对应章节](业务实现边界.md#平台收货仓) |
| 头程订单、批量审核预览与入仓码关系 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#头程订单批量审核预览与入仓码关系) |
| 客户头程订单批量导入 | [模块指引](../apps/client-web/src/modules/first-leg/AGENTS.md) | [对应章节](业务实现边界.md#客户头程订单批量导入) |
| 平台旧系统订单导入 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#平台旧系统订单导入) |
| 平台修改客户原始申报与履约渠道 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#平台修改客户原始申报与履约渠道) |
| 脚本管理、全量验证与测试造数 | [模块指引](../baiyue-firstleg/scripts/AGENTS.md) | [对应章节](业务实现边界.md#脚本管理全量验证与测试造数) |
| 平台/企业 RBAC | [模块指引](../apps/admin-web/src/modules/iam/AGENTS.md) | [对应章节](业务实现边界.md#平台企业-rbac) |
| 消息中心与站内通知 | [模块指引](../apps/admin-web/src/modules/notifications/AGENTS.md) | [对应章节](业务实现边界.md#消息中心与站内通知) |
| PDA 拣货与柜级装柜证据 | [模块指引](../apps/pda-uniapp/AGENTS.md) | [对应章节](业务实现边界.md#pda-拣货与柜级装柜证据) |
| 到仓测量、测量库位、箱规策略与头程计费 | [模块指引](../apps/admin-web/src/modules/inbounds/AGENTS.md) | [对应章节](业务实现边界.md#到仓测量测量库位箱规策略与头程计费) |
| 客户专属报价、柜级阶梯运费与费用调整 | [模块指引](../apps/admin-web/src/modules/fba-pricing/AGENTS.md) | [对应章节](业务实现边界.md#客户专属报价柜级阶梯运费与费用调整) |
| 箱唛、箱码与单箱测量 | [模块指引](../baiyue-firstleg/firstleg/AGENTS.md) | [对应章节](业务实现边界.md#箱唛箱码与单箱测量) |
| 称重确认、整票库位块与部分拣货资源结算 | [模块指引](../baiyue-firstleg/warehouse/AGENTS.md) | [对应章节](业务实现边界.md#称重确认整票库位块与部分拣货资源结算) |
| 入库扣货、解除与凭证 | [模块指引](../apps/admin-web/src/modules/unified-orders/AGENTS.md) | [对应章节](业务实现边界.md#入库扣货解除与凭证) |
| 财务管理与柜级公共费用分摊 | [模块指引](../apps/admin-web/src/modules/finance/AGENTS.md) | [对应章节](业务实现边界.md#财务管理与柜级公共费用分摊) |
| 平台资金账户、充值审核、手工充扣与授信 | [Admin 财务](../apps/admin-web/src/modules/finance/AGENTS.md) | [资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户) |
| 客户资金账户、余额、授信与充值申请 | [Client 财务](../apps/client-web/src/modules/finance/AGENTS.md) | [资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户) |
| 服务端资金账户、授信、冻结、结算与业务扣费 | [Finance](../baiyue-firstleg/finance/AGENTS.md) | [资金账户规则](财务管理/财务对账结算P1闭环.md#客户资金账户) |
| 订单编排、分柜、同柜不可拆组与柜次 | [模块指引](../apps/admin-web/src/modules/container-loading/AGENTS.md) | [对应章节](业务实现边界.md#订单编排分柜同柜不可拆组与柜次) |
| 全局智能排柜、预装与真实集装箱号后补 | [模块指引](../apps/admin-web/src/modules/container-loading/AGENTS.md) | [对应章节](业务实现边界.md#全局智能排柜预装与真实集装箱号后补) |
| 客户入库结果与头程费用确认 | [模块指引](../apps/client-web/src/modules/first-leg/AGENTS.md) | [对应章节](业务实现边界.md#客户入库结果与头程费用确认) |
| 订舱资料、放舱、出仓前船期与订舱级拖车 | [模块指引](../apps/admin-web/src/modules/ocean-bookings/AGENTS.md) | [对应章节](业务实现边界.md#订舱资料放舱出仓前船期与订舱级拖车) |
| 目的港码头拖车与还空预警 | [模块指引](../baiyue-firstleg/firstleg/AGENTS.md) | [对应章节](业务实现边界.md#目的港码头拖车与还空预警) |
| 整柜报关资料与完成文件 | [模块指引](../apps/admin-web/src/modules/container-loading/AGENTS.md) | [对应章节](业务实现边界.md#整柜报关资料与完成文件) |
| 国内出仓确认 | [模块指引](../apps/admin-web/src/modules/outbound-dispatch/AGENTS.md) | [对应章节](业务实现边界.md#国内出仓确认) |
| 客户统计与运营指标 | [客户模块](../apps/admin-web/src/modules/customers/AGENTS.md) | [统计与日志边界](业务实现边界.md#客户统计与平台日志) |
| 平台日志、操作日志、审计日志与操作人缺失 | [审计模块](../apps/admin-web/src/modules/audit/AGENTS.md) | [统计与日志边界](业务实现边界.md#客户统计与平台日志) |
| 客户工作台账户与设置 | [模块指引](../apps/client-web/AGENTS.md) | [对应章节](业务实现边界.md#客户工作台账户与设置) |
| 企业订单与跨境业务 | [模块指引](../apps/client-web/AGENTS.md) | [对应章节](业务实现边界.md#企业订单与跨境业务) |
| 海外接柜、入库与库内库存 | [模块指引](../apps/admin-web/src/modules/overseas-warehouse/AGENTS.md) | [对应章节](业务实现边界.md#海外接柜入库与库内库存) |
| 尾程订单控制与柜级入仓计划转换 | [模块指引](../apps/admin-web/src/modules/overseas-warehouse/AGENTS.md) | [对应章节](业务实现边界.md#尾程订单控制与柜级入仓计划转换) |
| 海外仓 PDA | [模块指引](../apps/pda-overseas-uniapp/AGENTS.md) | [对应章节](业务实现边界.md#海外仓-pda) |
| 海外采购、本土卡车与散板 | [模块指引](../apps/admin-web/src/modules/overseas-business/AGENTS.md) | [对应章节](业务实现边界.md#海外采购本土卡车与散板) |
| 采购样品、货款、装箱清单、面单、预估快递费、国内收货寄客户 | [模块指引](../apps/admin-web/src/modules/overseas-business/AGENTS.md) | [对应章节](业务实现边界.md#采购样品货款装箱清单面单预估快递费国内收货寄客户) |
| 海外仓库主档、名称、地址与能力 | 前端 [Admin](../apps/admin-web/src/modules/warehouses/AGENTS.md);后端 [Warehouse](../baiyue-firstleg/warehouse/AGENTS.md) | [资源归属](业务实现边界.md#海外仓库与通用资料) |
| 海外库位、托盘与资源锁 | [Warehouse Overseas](../baiyue-firstleg/warehouse-overseas-service/AGENTS.md) | [资源归属](业务实现边界.md#海外仓库与通用资料) |
| 车辆管理、司机证照、保养加油、车辆维修/故障/救援/异常、外接货与车次 | [模块指引](../apps/admin-web/src/modules/overseas-master-data/AGENTS.md) | [对应章节](业务实现边界.md#车辆管理司机证照保养加油车辆维修故障救援异常外接货与车次) |
| 拼车需求池、车次余位、销售拼车意向、散板加货 | [模块指引](../apps/admin-web/src/modules/overseas-master-data/AGENTS.md) | [对应章节](业务实现边界.md#拼车需求池车次余位销售拼车意向) |
| 国内出仓后船节点 | [模块指引](../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#散货托盘码生成打印与跨区传递) |
## 原型入口索引
仅在根指引的原型触发条件满足时读取。路径从工作区根起算;按终端只查命中行,不把原型当作当前部署或验收事实。
| 范围 | 首选入口 |
|---|---|
| 平台管理后台 | `docs/悦/货代SAAS平台后台/AGENTS.md`,按其中模块索引读取拆分原型;完整入口 `docs/悦/货代SAAS平台后台/index.html` |
| 企业客户端栏目与业务架构 | `docs/悦/柏悦物流客户端/柏悦物流客户端-栏目架构图.html` |
| 企业工作台与头程下单 | `docs/悦/官网头程下单/workbench.html` |
| 官网与企业入口 | `docs/悦/官网头程下单/index.html`、`docs/悦/官网头程下单/login.html`、`docs/悦/官网头程下单/register.html` |
| 微信小程序 | `docs/悦/虫虫出海小程序/index.html` |
| PDA 拣货 | `docs/悦/PDA拣货/pda-picking.html` |
| WMS 字段补充 | `docs/悦/货代SAAS平台后台/wms_full_data.json`、`docs/悦/货代SAAS平台后台/柏悦WMS系统文档.md` |
| 国内货柜履约原型盘点 | `docs/国内货柜履约/国内货柜履约页面与原型清单.md` |
| 海外仓全流程 | [海外仓页面 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` 与[海外仓页面 ID](海外仓业务/业务规则.md#原型页面定向索引) |
| Admin/Client 验收 | `docs/Admin-Client前端原型还原验收规则.md` |
-20
View File
@@ -1,20 +0,0 @@
# 二期文档
二期以头程物流“02 到仓”为作业主线,完成预约取货、送货上门、入库测量、差异记录和指定库位闭环,并增加头程费用项目、计费规则、费用试算和费用明细。产品已确认二期不建设应收应付、对账、收付款、核销、发票和利润模块。
## 文档
- [二期开发规划:头程到仓](二期开发规划.md)
- [二期头程计费模块规划](二期计费财务模块规划.md)
- [二期头程计费需求确认表](二期计费财务需求确认表.md)
- [二期头程计费需求确认表(Excel,保留历史文件名)](二期计费财务需求确认表.xlsx)
- [二期产品待确认事项(发产品填写)](二期产品待确认事项.md)
- [二期开发进度表](二期开发进度表.md)
- [二期开发进度表(Excel)](虫虫出海二期开发进度表.xlsx)
- [二期需求确认清单:产品与业务确认](二期需求确认清单.md)
- [二期需求确认清单(会议填写 Excel)](二期需求确认清单.xlsx)
- [规划依据:头程物流流程图](参考资料/头程物流流程图.svg)
## 当前状态
二期已经启动,采用“需求确认与开发并行”的推进方式。2026-07-31 已合并产品确认结果:到仓作业结论已补齐,二期财务范围收缩为“仅头程计费”。当前只剩 P2-Q14、P2-Q15、P2-Q16 三项计费细节待确认;应收应付、对账、收付款、核销、发票、汇率结算和利润不纳入二期。具体任务状态和实际进度由开发负责人回填,当前文档不代表已承诺完成日期。
Binary file not shown.
Binary file not shown.
Binary file not shown.
+88
View File
@@ -0,0 +1,88 @@
# 入库测量与计费文档
入库测量与计费当前范围止于头程下单、商户提交、平台审核、到仓测量与称重、费用试算和费用确认。测量审核后主状态停在 `WAIT_SPLIT`,费用可独立维护且不得回退主流程状态;分柜、托盘/库位、预装、PDA 拣货、装柜和派送统一归入国内货柜履约。入库测量与计费不建设应收应付、对账、收付款、核销、发票和利润模块。
## 当前主体模型
- 入库测量与计费继续按“平台—客户”两级开发。`tenant_id > 0` / `tenantId` 当前表示客户 ID,用于客户隔离;`tenant_id=0` 是平台技术作用域。
- 不新增真实租户、租户选择器或租户级 RBAC,也不把兼容字段重定义为上级租户。历史路径、字段与配置名继续保留。
- 平台公共仓库、快递公司、托盘、库位和费用项目统一归属平台技术作用域 `tenant_id=0`,不绑定客户;客户往来单位、订单、文件和费用明细仍按所属客户 `tenant_id>0` 严格隔离,费用明细引用公共 `fee_item_id`。`10001` 是客户 ID,不得用于公共资源归属。
## 文档
费用项目默认价格规则(2026-10-19):平台公共项目可配置可空的 `defaultPrice`(CNY、非负、两位小数),不填表示人工录入,`0` 表示明确的零元默认价。入库与柜次费用仅在用户主动选择项目时带入;入库同时带入单价与金额,柜次带入金额,均允许人工修改。切换到无默认价格的项目时清除前项带价并回到零值待填;打开已有费用、切换供应商或保存业务费用不重新套用默认价。修改或清空项目默认价不追改已有费用,也不改变审核、发布与结算流程;本次不增加计费数量或条件报价。
- [入库测量与计费 V2 需求确认清单(当前会议填写)](入库测量与计费V2需求确认清单.md)
- [入库测量与计费需求优化版 V2:测量、计费、托盘入库主流程](入库测量与计费需求优化版-v2-测量计费入库主流程.md)
- [入库测量与计费需求优化版:原型对照(上一版优化稿)](入库测量与计费需求优化版-原型对照.md)
- [入库测量与计费开发规划:头程到仓](入库测量与计费开发规划.md)
- [入库测量与计费头程计费模块规划](入库测量与计费计费财务模块规划.md)
- [入库测量与计费头程计费需求确认表](入库测量与计费计费财务需求确认表.md)
- [入库测量与计费费用项目数据归属决策记录](入库测量与计费费用项目数据归属决策记录.md)
- [入库测量与计费头程计费需求确认表(Excel,保留历史文件名)](入库测量与计费计费财务需求确认表.xlsx)
- [入库测量与计费产品待确认事项(发产品填写)](入库测量与计费产品待确认事项.md)
- [入库测量与计费开发进度表](入库测量与计费开发进度表.md)
- [入库测量与计费开发进度表(Excel)](虫虫出海入库测量与计费开发进度表.xlsx)
- [入库测量与计费前端页面清单与多对话并行任务表](入库测量与计费前端页面清单与多对话并行任务表.md)
- [海外仓阶梯费用前端联调说明(2026-08-05)](海外仓阶梯费用前端联调说明-2026-08-05.md)
- [入库测量与计费需求确认清单:产品与业务确认](入库测量与计费需求确认清单.md)
- [入库测量与计费需求确认清单(会议填写 Excel)](入库测量与计费需求确认清单.xlsx)
- [规划依据:头程物流流程图](参考资料/头程物流流程图.svg)
## 当前状态
截至 2026-08-06,当前阶段边界已重新确认为 `WAIT_SPLIT + APPROVED + CONFIRMED`:`WAIT_SPLIT` 只表示入库测量与计费已完成、等待未来国内货柜履约分柜,不代表国内货柜履约已启动。2026-08-04 的 `INBOUNDED + APPROVED + SENT` 是旧范围下的历史回归结果,不再作为当前入库测量与计费验收终点。
- 订单:`2084549604719718402`
- 入库单:`2084549769916538881`
- 入仓码:`RK-2084549604719718402`
- 测量批次:`2084556854154715137`
- 费用单:`FBAF-2084549769916538881-1`
- 计费结果:实重 `20kg`,体积 `0.24m³`,计费量 `40.08kg`,费用 `440.68 CNY`
- 自动化测试:Firstleg 77 项、Warehouse 68 项、公共仓储技术归属专项(历史测试名含“资源租户”)3 项全部通过
- 在线验证:7 个隔离服务健康状态均为 `UP`
本地 OCR 未配置真实供应商凭证,因此本轮验证的是“图片上传成功、OCR 返回失败、人工修正并确认、继续完成计费入库”的可用降级链路。真实 OCR 识别准确率仍需在测试环境使用现场秤图验证。
产品确认与技术验收是两类状态。V2 的 C1-C8 产品结论仍由产品/业务负责人填写;已经实现和测试通过的技术能力记录在验收报告及确认清单的技术状态章节中。
## 核心文档
- [入库测量与计费前端联调报告(2026-08-04)](入库测量与计费前端联调报告-2026-08-04.md)
- [第三方入仓测量接口联调说明](第三方入仓测量接口联调说明-2026-08-04.md)
- [入库测量与计费需求优化版 V2:测量、计费、托盘入库主流程](入库测量与计费需求优化版-v2-测量计费入库主流程.md)
- [入库测量与计费 V2 需求确认清单](入库测量与计费V2需求确认清单.md)
## 规划与历史文档
- [入库测量与计费需求优化版:原型对照](入库测量与计费需求优化版-原型对照.md)
- [入库测量与计费开发规划:头程到仓](入库测量与计费开发规划.md)
- [入库测量与计费开发进度表](入库测量与计费开发进度表.md)
- [入库测量与计费头程计费模块规划](入库测量与计费计费财务模块规划.md)
- [入库测量与计费头程计费需求确认表](入库测量与计费计费财务需求确认表.md)
- [入库测量与计费费用项目数据归属决策记录](入库测量与计费费用项目数据归属决策记录.md)
- [入库测量与计费产品待确认事项](入库测量与计费产品待确认事项.md)
- [入库测量与计费需求确认清单:产品与业务确认](入库测量与计费需求确认清单.md)
## 数据库增量
可重复执行的测试库增量脚本位于:
```text
D:\baiyue-firstleg\deploy\sql\头程数据库统一增量-MySQL8.sql
```
该文件是头程数据库唯一增量入口,后续数据库变更只追加到此文件。当前已包含订单与客户、入库测量与计费以及海外仓阶梯费用基础资料所需结构、索引和权限。历史日期脚本不再作为部署入口。
其中海外仓阶梯费用新增:
- `wh_overseas_storage_fee_rule`
- `wh_overseas_storage_fee_tier`
- 5 个查询、唯一性和关联索引
- 4 项平台端按钮权限及平台系统管理员默认授权
原入库测量与计费回归字段仍包含:
- `fl_inbound_weight_result.created_by`
- `fl_inbound_weight_result.updated_by`
- `fl_inbound_pallet_allocation.warehouse_resource_tenant_id`
@@ -1,11 +1,11 @@
# 2026-07-28 二期产品确认回传审核记录
# 2026-07-28 入库测量与计费产品确认回传审核记录
> 回传原件:[2026-07-28-二期需求确认-产品回传.xlsx](2026-07-28-二期需求确认-产品回传.xlsx)
> 回传原件:[2026-07-28-入库测量与计费需求确认-产品回传.xlsx](2026-07-28-入库测量与计费需求确认-产品回传.xlsx)
> 审核结论:暂不直接合并为正式需求基线
## 一、确认口径
二期由单一产品负责人统一确认,不要求填写产品跟进人、业务确认人和确认日期。回传文件中状态为“已确认”且已填写最终结论,即视为产品确认结果;状态为“暂缓”的项目需要明确二期临时处理方式。
入库测量与计费由单一产品负责人统一确认,不要求填写产品跟进人、业务确认人和确认日期。回传文件中状态为“已确认”且已填写最终结论,即视为产品确认结果;状态为“暂缓”的项目需要明确入库测量与计费临时处理方式。
## 二、需要产品补充澄清
@@ -17,17 +17,17 @@
| P2-Q4 | 重量体积(毛重/363);总材积重(长×宽×高/6000)×箱数 | 单位、公式中 `/363` 的业务含义、计费重是否取毛重和材积重较大值、精度和舍入规则 |
| P2-Q5 | 差异需客户确认 | 是否所有差异都确认;客户拒绝、超时未确认以及确认前货物能否上架/计费 |
| P2-Q6 | 没有隔离单独的区域 | 差异未关闭时货物放哪里、系统是否使用“业务暂停”而不使用隔离库位、谁可以解除暂停 |
| P2-Q7 | 当前没有库位容量 | 二期是否完全不做容量校验;库位停用、占用和货物类型不匹配是否仍需拦截 |
| P2-Q7 | 当前没有库位容量 | 入库测量与计费是否完全不做容量校验;库位停用、占用和货物类型不匹配是否仍需拦截 |
| P2-Q8 | 称重照片、测量照片上传 | 是否必传、每个箱件还是每个收货批次上传、允许的文件数量/大小和补传规则 |
| P2-Q9 | 暂缓 | 明确二期不接 PDA,并确定使用后台网页或响应式作业页 |
| P2-Q9 | 暂缓 | 明确入库测量与计费不接 PDA,并确定使用后台网页或响应式作业页 |
| P2-Q10 | 暂缓 | 暂缓期间无预报货物是否拒收;如允许收货,需要临时认领和超期规则 |
| P2-Q11 | 保存 12 个月 | 从哪个时间点起算、到期删除还是归档、各类照片/联系方式/凭证是否采用同一期限 |
| P2-Q11 | 保存 12 个月 | 从哪个时间点起算、到期删除还是归档、各类照片/联系方式/凭证是否采用同订单与客户限 |
## 三、当前可保留的结论
- `P2-Q12`:标签打印设备为佳博 1324D 热敏标签打印机;标签纸、连接、驱动和指令协议仍需实机核验。
- `P2-Q8` 已明确需要称重照片和测量照片,可作为规则方向保留,必传粒度和附件限制补齐后再锁定。
- `P2-Q9、P2-Q10` 可以保持“暂缓”,但必须给出二期临时处理规则,否则仍会阻塞对应开发任务。
- `P2-Q9、P2-Q10` 可以保持“暂缓”,但必须给出入库测量与计费临时处理规则,否则仍会阻塞对应开发任务。
## 四、下一步
@@ -1,26 +1,26 @@
# 2026-07-31 二期产品确认合并记录
# 2026-07-31 入库测量与计费产品确认合并记录
> 原始回传:[2026-07-31-二期需求确认-产品回传-v1.xlsx](2026-07-31-二期需求确认-产品回传-v1.xlsx)
> 回传来源:WXWork 文件 `二期需求确认清单.xlsx`
> 原始回传:[2026-07-31-入库测量与计费需求确认-产品回传-v1.xlsx](2026-07-31-入库测量与计费需求确认-产品回传-v1.xlsx)
> 回传来源:WXWork 文件 `入库测量与计费需求确认清单.xlsx`
> 原始文件 SHA-256:`841F976133F772BD52E085785C57D8BA90687CA07CC57B8009C71138F78C8563`
## 一、已合并到二期到仓基线
## 一、已合并到入库测量与计费到仓基线
| 编号 | 产品结论 | 合并后的开发口径 |
|---|---|---|
| P2-Q1 | 以实际货物重量、体积为准 | 收货实测结果作为后续作业和头程计费输入;少货关闭规则按现有临时基线保留 |
| P2-Q4 | 小数点三位向上取整 | 测量和计费中间结果保留原始值,展示/业务结果按三位向上取整;公式版本可追溯 |
| P2-Q5 | 差异同步给客户,无需客户确认,只做记录 | 差异不再阻塞后续作业,不建设客户确认动作;保留差异记录、通知和审计 |
| P2-Q6 | 不考虑 | 二期不建设独立隔离区和隔离释放流程 |
| P2-Q6 | 不考虑 | 入库测量与计费不建设独立隔离区和隔离释放流程 |
| P2-Q8 | 照片必传,大小不限制 | 称重照片、测量照片必传;产品未设置业务大小上限,系统仍保留可配置的技术安全上限和文件类型校验 |
| P2-Q10 | 不考虑,无此场景 | 二期不建设无预报货物认领流程;不预留正式订单绑定和计费入口 |
| P2-Q10 | 不考虑,无此场景 | 入库测量与计费不建设无预报货物认领流程;不预留正式订单绑定和计费入口 |
| P2-Q11 | 永久保存 | 业务上不自动删除照片、凭证和测量记录;具体存储成本、合规删除和备份策略由运维另行制定 |
## 二、财务范围合并结论
产品在本轮确认中明确:二期财务只做“头程计费”,不做后续财务闭环。
产品在本轮确认中明确:入库测量与计费财务只做“头程计费”,不做后续财务闭环。
### 二期纳入
### 入库测量与计费纳入
- 头程费用项目维护。
- 头程计费规则、计费单位、价格版本和生效区间。
@@ -28,7 +28,7 @@
- 费用结果的人工补录、调整、审核、作废和审计留痕。
- 头程费用明细查询、订单关联、计算过程和规则快照。
### 二期明确不纳入
### 入库测量与计费明确不纳入
- 应收应付台账。
- 客户或供应商对账单、结算周期和账单确认。
@@ -37,7 +37,7 @@
- 汇率结算、利润、利润率和财务报表。
- 总账、会计凭证、在线支付和银企直连。
这些模块的原型页面只作为后续阶段参考,不再进入二期开发任务、验收标准或进度统计。
这些模块的原型页面只作为后续阶段参考,不再进入入库测量与计费开发任务、验收标准或进度统计。
## 三、未合并内容
@@ -49,7 +49,7 @@
## 四、合并后处理
- 更新二期开发规划、计费规划、需求确认清单和开发进度表。
- 从二期财务任务中移除应收应付、对账、付款、核销、发票和利润任务。
- 更新入库测量与计费开发规划、计费规划、需求确认清单和开发进度表。
- 从入库测量与计费财务任务中移除应收应付、对账、付款、核销、发票和利润任务。
- 将 P2-Q13 标记为“已确认:仅头程计费”,P2-Q14 至 P2-Q16 保持待确认。
- 产品原始回传只读归档,不覆盖;后续回传使用新版本文件名。
@@ -1,11 +1,11 @@
# 二期产品确认回传管理
# 入库测量与计费产品确认回传管理
本目录只保存产品原始回传文件,不直接作为正式开发进度表使用,也不覆盖 `docs/二期/虫虫出海二期开发进度表.xlsx`。
本目录只保存产品原始回传文件,不直接作为正式开发进度表使用,也不覆盖 `docs/入库测量与计费/虫虫出海入库测量与计费开发进度表.xlsx`。
## 文件命名
```text
YYYY-MM-DD-二期需求确认-产品回传-vN.xlsx
YYYY-MM-DD-入库测量与计费需求确认-产品回传-vN.xlsx
```
## 合并条件
@@ -16,13 +16,13 @@ YYYY-MM-DD-二期需求确认-产品回传-vN.xlsx
- 例外情况、暂缓范围和临时处理规则明确。
- 与其他确认项不存在冲突。
二期由单一产品负责人统一确认,不要求填写确认人、产品跟进人和确认日期。产品将状态设置为“已确认”即代表结论生效。
入库测量与计费由单一产品负责人统一确认,不要求填写确认人、产品跟进人和确认日期。产品将状态设置为“已确认”即代表结论生效。
## 合并流程
1. 原样保存产品回传文件,不在原件上二次修改。
2. 对比正式确认清单,形成回传审核记录。
3. 产品补充不完整或冲突的结论,并将状态设置为“已确认”或“暂缓”。
4. 按 `P2-Qxx` 合并到 `二期需求确认清单.md`。
4. 按 `P2-Qxx` 合并到 `入库测量与计费需求确认清单.md`。
5. 同步更新开发规划、开发任务、依赖、验收标准和 Excel 进度表。
6. 合并前后的正式版本分别保存到 `docs/二期/版本归档/`。
6. 合并前后的正式版本分别保存到 `docs/入库测量与计费/版本归档/`。
@@ -0,0 +1,143 @@
# 虫虫出海入库测量与计费 V2 需求确认清单
> 创建日期:2026-08-03
> 当前状态:待产品与业务确认
> 确认对象:[入库测量与计费需求优化版 V2:测量、计费、托盘入库闭环](入库测量与计费需求优化版-v2-测量计费入库主流程.md)
> 适用范围:头程订单审核通过后的测量、计费、托盘分配、库位占用和入库闭环
> 技术状态(2026-08-04):任务 `019fc6f9-8dcf-74e1-bc68-d42f15d7802a` 已完成核心正常主链路开发和真实 API 回归。以下“产品确认状态”仍由产品/业务负责人填写,技术完成不自动等同于产品确认。
> 订单衔接规则更新(2026-09-09,当前对话确认):客户草稿不生成入仓码;客户提交进入待审核时立即生成并固定唯一入仓码,同时准备同号预入库单。货物已到国内仓时可在订单审核前先收货、称重、保存箱规并提交测量数据,但订单仍保持待审核,测量审核通过、计费、分柜和装柜必须等待订单审核通过;审核后沿用同一入仓单和已采集数据。承运商可在后续履约或计费前补充。
> 主体模型:入库测量与计费只实现“平台—客户”两级;业务数据的 `tenant_id>0` 是客户隔离兼容字段,平台公共仓储资源归属 `tenant_id=0`。下表历史“资源租户”均指公共主数据技术归属,不代表真实租户。
## 一、使用说明
- 本清单是入库测量与计费 V2 的唯一会议确认入口。
- 产品只有一人,不填写确认人和确认时间,只填写“最终结论”和“状态”。
- 状态统一使用:`待确认`、`已确认`、`暂缓`。
- 认可当前建议时,可将当前建议直接复制为最终结论,并把状态改为“已确认”。
- 修改当前建议时,必须写清可直接转成页面、接口、状态、计算或验收规则的最终结论。
- 暂时无法确定时,状态改为“暂缓”,同时填写入库测量与计费临时处理方式。
- C1 至 C8 全部形成可开发结论后,V2 才能替换现有 24 项开发计划。
## 二、产品与业务必须确认的 8 项
| 编号 | 需要确认的事项 | 当前建议 | 最终结论 | 状态 |
|---|---|---|---|---|
| C1 | 是否正式采用 V2 作为入库测量与计费唯一开发基线 | 采用“测量数据采集 → 测量审核 → 自动试算 → 人工确认 → 发送费用 → 托盘与库位占用 → 入库成功”主流程;确认后旧 24 项计划和第一份优化稿停止作为开发依据 | 待填写 | 待确认 |
| C2 | 长宽高和重量分别从哪里取得 | 长宽高由第三方测量设备按入仓码回传;重量由称重图片 OCR 识别,允许人工校正并保留 OCR 原值、修正值和修正原因 | 待填写 | 待确认 |
| C3 | 测量审核失败是否允许继续计费和入库 | 默认禁止;仅在 Nacos 异常放行开关开启、操作人有专属权限且填写放行原因时允许继续;作废单、缺少费用快照或无可用库位始终禁止放行 | 待填写 | 待确认 |
| C4 | 入库测量与计费计费结果的业务边界 | 入库测量与计费只生成发送给客户的头程费用;船司价格只作为计价基础,不生成船司应付、成本、对账、收付款、核销、发票或利润数据 | 待填写 | 待确认 |
| C5 | KG/CBM 计费公式、换算系数和价格匹配维度 | 包税按 `体积 × 167` 转换为 KG 后与实重取大;不包税按 `重量 ÷ 363` 转换为 CBM 后与实测体积取大;`167`、`363` 按客户规则版本配置,不硬编码;价格按起运仓、渠道/计费类型、船司、FBA 目的仓和有效期唯一匹配 | 待填写 | 待确认 |
| C6 | 入库测量与计费首批头程费用项目白名单 | 只纳入实际使用的基础运费和明确附加费;每项费用必须确认编码、名称、计费单位、币种、自动/人工、触发条件及是否允许人工调整 | 待填写 | 待确认 |
| C7 | 发送费用、入库成功及复核节点 | “发送费用给客户”作为入库测量与计费完成节点:锁定费用快照、生成托盘分配、占用库位并将入库单改为已入库;默认不再增加独立接收审核或第二人复核 | 待填写 | 待确认 |
| C8 | 托盘拆分和库位占用规则 | 按实际总体积除以单托盘可用容积向上取整;入库测量与计费默认一托一库位;托盘只分配体积和箱数汇总,不拆到 SKU;入库后换位作为 P1 独立功能 | 待填写 | 待确认 |
## 三、C6 首批费用项目填写表
没有实际业务的费用不要为了匹配原型而纳入入库测量与计费。白名单之外的费用默认不能自动生成。
| 费用编码 | 费用名称 | 计费单位 | 默认币种 | 自动/人工 | 单价来源 | 触发条件 | 是否允许调整 | 备注 |
|---|---|---|---|---|---|---|---|---|
| 待填写 | 待填写 | KG/CBM/票/固定金额 | CNY/USD/待确认 | 待填写 | 客户规则/船司价格/人工 | 待填写 | 待填写 | 待填写 |
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
| 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 | 待填写 |
## 四、技术、仓库与供应商确认的 3 项
以下事项不要求产品单独决定,但必须在对应任务开工前形成书面技术结论。
| 编号 | 需要确认的事项 | 当前建议 | 最终结论 | 状态 |
|---|---|---|---|---|
| T1 | 第三方长宽高设备接入参数 | 确认供应商、测试环境、入仓码格式、设备编码、事件号、HMAC 签名、时间戳容差、幂等期限、超时和重试规则;第三方不得直接传内部数据库主键 | 待填写 | 待确认 |
| T2 | OCR 接入参数 | 确认 OCR 服务商、图片格式、单图技术上限、单批数量、识别时限、置信度阈值、公斤/磅识别、失败重试和人工校正规则;业务服务通过 `fileId` 调用,不传服务器目录 | 待填写 | 待确认 |
| T3 | 托盘和库位基础资料 | 确认托盘编码规则、标准可用容积、仓库现有托盘数量、库位编码、可用状态及初始化数据;并发占位由数据库唯一约束或乐观锁保证 | 待填写 | 待确认 |
## 五、确认后形成的入库测量与计费主流程
```text
订单与客户头程订单提交待审核
→ 生成并固定唯一入仓码
→ 平台审核通过(承运商不是审核前置条件)
→ 创建正式入库单并沿用该入仓码
→ 第三方回传长宽高
→ 上传称重图片并进行 OCR
→ 人工校正和确认重量
→ 测量审核
→ 客户规则与船司 FBA 价格自动试算
→ 人工确认费用
→ 发送费用给客户
→ 拆分托盘并分配库位
→ 占用库位并完成入库
→ 客户只读查看费用和入库结果
→ 异步发送客户通知
```
## 六、明确不纳入入库测量与计费
- 船司应付、供应商应付和应付审核。
- 客户或供应商对账单、结算周期和账单争议。
- 收款、付款、退款、核销、反核销和银行流水。
- 发票、开票接口、会计凭证和总账。
- 单票利润、利润率和完整财务报表。
- 头程/FBA 阶梯计费、组合优惠和通用计费表达式平台。
- 完整 SKU 库存、盘点、拣货、复核和出库。
- 入库后的常规移库、拆托、并托和库存成本。
- PDA 作业端。
### 6.1 海外仓阶梯费用的范围例外
- 已纳入“海外仓客户级天数阶梯仓储费”的基础资料 CRUD,归属 Warehouse 服务,不新增独立服务或数据库。
- 一名客户只允许一份有效配置,维护币种及连续的天数区间、仓储费单价。
- 该配置当前只供平台端维护和查询,暂不接入本期头程/FBA 自动计费、费用发送、账单或结算流程。
- 后续接入海外仓实际计费时,需要另行确认计费单位、入库/出库日边界、免租期、尾段处理、币种换算和规则生效版本。
## 七、与原确认问题的对应关系
| 原编号 | 原问题 | V2 对应项 | 处理方式 |
|---|---|---|---|
| P2-Q14 | 首批费用项目 | C6 | 由 C6 费用白名单替代 |
| P2-Q15 | 计费规则复杂度 | C4、C5 | 由计费边界、公式和匹配维度替代 |
| P2-Q16 | 费用生成节点 | C7 | 由费用确认、发送和入库成功节点替代 |
C1 至 C8 确认后,原 P2-Q14 至 P2-Q16 不再单独维护,避免形成两套需求编号。
## 八、确认完成后的文档处理
1. 将本文件状态改为“已确认”。
2. 将 [入库测量与计费需求优化版 V2](入库测量与计费需求优化版-v2-测量计费入库主流程.md) 标记为正式开发基线。
3. 将 [入库测量与计费需求优化版:原型对照](入库测量与计费需求优化版-原型对照.md) 标记为历史版本,不再用于开发。
4. 用 V2 的 13 项任务替换现有 24 项开发计划,并同步 Markdown 和 Excel 进度表。
5. 将 C1 至 C8 的结论转换为状态、接口、数据表、权限、异常和验收规则。
6. 将 T1 至 T3 分配给技术、仓库和供应商负责人,在对应开发任务开始前补齐。
7. 后续新增应收应付、对账、收付款、发票或利润时,必须另行立项,不得直接扩入入库测量与计费。
## 九、进入开发排期的完成标准
- C1 至 C8 均为“已确认”,或“暂缓”但已写明入库测量与计费可执行的临时处理方式。
- C6 至少形成一版可初始化的费用项目白名单。
- 计费公式、换算系数、唯一匹配维度和费用发送节点可以转为自动化测试。
- 托盘数量、库位占用和并发冲突规则可以转为数据库约束和接口验收。
- T1 至 T3 已明确责任方和最晚完成节点。
- V2 的 13 项任务已经同步到正式开发进度表,旧任务不再继续认领。
## 十、技术实现状态(2026-08-04)
| 对应项 | 技术状态 | 验证说明 |
|---|---|---|
| C1 主链路 | 已完成正常链路 | 下单、审核、测量、称重、计费、费用发送、托盘库位、入库已通过真实 API |
| C2 测量与重量来源 | 已实现 | 第三方/平台箱规明细、图片证据、OCR 失败人工修正与确认已验证 |
| C3 审核失败放行 | 已实现配置和权限边界 | Nacos 开关默认关闭;正常审核通过链路已验证 |
| C4 计费边界 | 已按入库测量与计费范围实现 | 仅生成客户头程费用,不扩展应付、对账、核销、发票和利润 |
| C5 KG/CBM 规则 | 已实现并验证样本 | 实重 `20kg`、体积重 `40.08kg`,取 `40.08kg` 计费 |
| C6 费用项目白名单 | 技术能力已具备,业务内容待确认 | 本轮使用测试价格 `11 CNY/kg`,不能代替正式费用白名单 |
| C7 费用发送与入库节点 | 已实现 | 审核通过后自动生成费用 `440.68 CNY`,最终 `SENT + INBOUNDED` |
| C8 托盘与库位 | 已实现 | 托盘、库位、预占、确认占用及公共主数据技术归属快照已验证 |
| T1 第三方测量参数 | 接口能力已实现,供应商参数待定 | 正式签名密钥、设备编码和供应商联调环境仍需确认 |
| T2 OCR 参数 | 降级链路已验证,真实供应商待接入 | 本地 OCR 未配置,已验证失败后人工修正继续入库 |
| T3 托盘库位基础资料 | 已实现并通过 API 创建 | 当前公共主数据技术归属规则为 `tenant_id=0`,分配状态 `CONFIRMED`;`10001` 不再作为公共资源归属 |
完整接口与回归证据见 [入库测量与计费前端联调报告(2026-08-04)](入库测量与计费前端联调报告-2026-08-04.md)。
@@ -1,15 +1,15 @@
# 虫虫出海二期产品待确认事项
# 虫虫出海入库测量与计费产品待确认事项
> 更新日期:2026-07-31
> 适用范围:头程物流“02 到仓”及头程计费
> 正式状态以 [二期需求确认清单](二期需求确认清单.md) 为准。
> 更新日期:2026-07-31
> 适用范围:头程物流“02 到仓”及头程计费
> 正式状态以 [入库测量与计费需求确认清单](入库测量与计费需求确认清单.md) 为准。
> 产品只有一人,不需要填写确认人和确认时间;会议只填写最终结论和状态。
## 一、会议结论摘要
- 产品已确认到仓作业规则及二期“只做头程计费”的范围。
- 产品已确认到仓作业规则及入库测量与计费“只做头程计费”的范围。
- 当前只需确认 P2-Q14、P2-Q15、P2-Q16,共 3 项。
- P2-Q17 至 P2-Q24 对应应收应付、对账、收付款、核销、发票、汇率结算和利润能力,均不纳入二期。
- P2-Q17 至 P2-Q24 对应应收应付、对账、收付款、核销、发票、汇率结算和利润能力,均不纳入入库测量与计费。
- 产品回传中 Q14 至 Q16 的“63”没有业务含义,本次会议需要重新填写。
## 二、本次会议需要确认的 3 项
@@ -22,7 +22,7 @@
## 三、P2-Q14 首批费用项目填写模板
没有实际业务的费用不要为了匹配原型而纳入二期。
没有实际业务的费用不要为了匹配原型而纳入入库测量与计费。
| 费用编码 | 费用名称 | 费用性质 | 计费对象 | 计费单位 | 默认币种 | 默认税率 | 自动/人工 | 触发节点 |
|---|---|---|---|---|---|---|---|---|
@@ -30,7 +30,7 @@
## 四、已确认,无需再次询问
| 编号 | 产品结论 | 二期开发口径 |
| 编号 | 产品结论 | 入库测量与计费开发口径 |
|---|---|---|
| P2-Q1 | 以实际货物重量、体积为准 | 实测结果作为后续作业和头程计费输入 |
| P2-Q2 | 不做系统服务商调度 | 线下安排取货,系统记录结果 |
@@ -43,14 +43,14 @@
| P2-Q10 | 不考虑无预报货物 | 不建设无预报认领和正式订单绑定流程 |
| P2-Q11 | 永久保存 | 业务记录不自动删除;运维补充备份和合规策略 |
| P2-Q12 | 使用佳博 1324D 热敏标签打印机 | 开发前核验纸张、连接、驱动和指令协议 |
| P2-Q13 | 二期只做头程计费 | 不生成应收、应付、账单、付款、核销、发票或利润数据 |
| P2-Q13 | 入库测量与计费只做头程计费 | 不生成应收、应付、账单、付款、核销、发票或利润数据 |
P2-Q9 暂缓:二期不接 PDA,使用后台或响应式作业页。
P2-Q9 暂缓:入库测量与计费不接 PDA,使用后台或响应式作业页。
## 五、确认后的处理
1. 将 Q14 至 Q16 的最终结论和状态回写正式需求确认清单。
2. 技术审核结论是否足以转为字段、状态、计算、权限、异常和验收规则。
3. 同步更新二期开发规划、头程计费规划、开发进度表和 Excel。
3. 同步更新入库测量与计费开发规划、头程计费规划、开发进度表和 Excel。
4. 保留产品原始回传和本次会议版本;后续修改用新版本,不覆盖历史文件。
@@ -0,0 +1,627 @@
# 入库测量、计费与入库前端联调报告
> 版本日期:2026-08-04
> 后端仓库:`D:\baiyue-firstleg`
> 代码基线:`test-01` 分支,提交 `25d2a13`
> 使用对象:平台后台前端、商户端前端、第三方测量系统联调人员
> 术语与现行规则校正:当前产品只有“平台—客户”两级。客户业务中的 `tenantId` / `tenant_id` 表示客户 ID 兼容字段;“资源租户”历史术语表示公共主数据技术归属。平台公共仓库、快递公司、托盘和库位现归属 `tenant_id=0`,客户往来单位、订单、文件和费用归属客户 `tenant_id>0`;报告中的 `10001` 是已失效的历史联调样本,不得继续作为公共资源归属。
## 一、联调结论
入库测量与计费后端主流程、平台测量、OCR 重量、客服审核、FBA 计费、费用发布、入库完成、库位和托盘维护、客户只读查询、第三方测量回传接口均已形成代码闭环。
最终正常业务流程是:
```text
订单生成入库单
→ 第三方或平台录入长宽高、箱规和件数
→ 上传称重图片并执行 OCR
→ 人工修正并确认 OCR 重量
→ 保存测量草稿
→ 提交测量
→ 系统按托盘容量拆分托盘并立即占用库位
→ 客服审核测量数据
→ 审核通过后自动按 FBA 规则计费
→ 自动发布费用给客户
→ 自动完成入库
→ 客户只读查看费用和入库结果
```
联调时必须遵守以下口径:
- 客户不确认费用,前端不得设计或调用“客户确认费用”操作。
- 测量提交后必须由客服审核;第三方回传测量数据不能直接审核、计费或完成入库。
- 提交测量时已经完成托盘拆分和库位占用。客服驳回只退回测量修改,已占库位不释放。
- 客服审核通过后,后端自动完成计费、内部确认、费用发布和入库,不需要前端依次点击计费、确认、发送。
- 已发布费用可以调整;调整会生成新费用版本,但不会回退 `INBOUNDED` 入库状态。
- 测量审核失败默认不允许异常放行。Nacos 配置 `firstleg.workflow.allow-rejected-measurement=false`,仅开启配置且有专门权限时才能放行。
- 当前只实现 FBA 目的仓计费,不包含应收应付、对账、核销、发票、利润、PDA 和完整 WMS。
## 二、服务依赖、入口与文档
### 2.1 前端统一入口
本地默认网关:
```text
http://127.0.0.1:9000
```
聚合 Swagger:
```text
http://127.0.0.1:9000/webjars/swagger-ui/index.html
```
Swagger 分组:
- `firstleg-platform`:平台入库、测量、审核、计费及客户只读接口。
- `firstleg-measurement-openapi`:第三方测量回传接口。
- `warehouse-platform`:库位、托盘等仓储基础资料。
- `file-platform`:测量图片上传、识别和读取。
- `integration`:OCR 内部能力,前端一般不直接调用。
### 2.2 联调相关服务及默认端口
| 顺序 | 服务 | 默认端口 | 用途 |
|---:|---|---:|---|
| 1 | Nacos、MySQL、Redis | 环境配置 | 注册配置、数据和会话 |
| 2 | `iam-service` | 9201 | 用户、角色、按钮权限 |
| 3 | `auth-service` | 9100 | 登录、Token 刷新和退出 |
| 4 | `warehouse-service` | 9205 | 仓库、库位、托盘及占用 |
| 5 | `integration-service` | 9210 | OCR 识别能力 |
| 6 | `file-service` | 9206 | 图片上传、持久化和 OCR 聚合 |
| 7 | `firstleg-service` | 9202 | 入库、测量、审核和计费主流程 |
| 8 | `gateway` | 9000 | 前端统一入口和聚合文档 |
若登录或订单前置流程依赖其他订单与客户服务,应在 Firstleg 前启动。前端业务请求统一走网关,不要将各服务端口写死到页面。
## 三、全局请求与响应约定
### 3.1 平台和商户请求头
```http
Authorization: Bearer <accessToken>
Content-Type: application/json
```
平台代目标企业操作的接口还必须传代表目标客户的 `tenantId` 查询参数。后端同时校验登录应用类型、操作者数据范围、目标客户、仓库和资源归属;不能只依靠前端隐藏按钮实现隔离。
所有有副作用且要求幂等的接口必须传:
```http
Idempotency-Key: <每次业务操作唯一且重试保持不变的字符串>
```
网络超时重试时复用原键;用户重新发起一笔新操作时生成新键。
### 3.2 统一响应
```json
{
"code": "00000",
"message": "成功",
"data": {},
"requestId": "...",
"traceId": "...",
"timestamp": "2026-08-04T02:38:31Z"
}
```
- 前端必须以业务 `code` 判断成功,不能只判断 HTTP 200。
- 分页数据结构为 `data.records`、`data.page`、`data.size`、`data.total`、`data.pages`。
- Long 类型 ID 已统一序列化为 JSON 字符串,前端必须按字符串保存和传递,不要转换成 JavaScript `Number`。
- 401 统一跳转登录或触发刷新 Token;403 显示无权限;409 通常表示重复、状态冲突、乐观锁过期或资源已被占用,页面应刷新详情后再操作。
- 提交按钮在请求完成前禁用,配合 `Idempotency-Key` 防止重复提交。
## 四、状态、页签和按钮规则
### 4.1 入库流程状态 `processStatus`
| 状态 | 中文含义 | 页面主要操作 |
|---|---|---|
| `WAIT_MEASURE` | 待测量 | 进入测量、录入草稿 |
| `MEASURING` | 测量中 | 编辑草稿、OCR、人工修正、提交 |
| `MEASURE_PENDING` | 待客服审核 | 客服审核通过或驳回 |
| `MEASURE_REJECTED` | 测量驳回 | 修改并重新提交;特殊情况下异常放行 |
| `WAIT_PRICING` | 待计费 | 正常流程由后台自动推进 |
| `FEE_CONFIRMING` | 费用处理中 | 正常流程由后台自动推进 |
| `INBOUNDING` | 入库处理中 | 正常流程由后台自动推进 |
| `INBOUNDED` | 已入库 | 查看费用、库位、文件;有权限时调整费用 |
| `VOIDED` | 已作废 | 只读 |
页面不要根据中文文案判断状态,必须使用状态码。
### 4.2 列表页签 `tab`
| 页签参数 | 后端包含状态 |
|---|---|
| `WAIT_MEASURE` | `WAIT_MEASURE`、`MEASURING`、`MEASURE_REJECTED` |
| `WAIT_REVIEW` | `MEASURE_PENDING` |
| `WAIT_FEE_SEND` | `WAIT_PRICING`、`FEE_CONFIRMING`、`INBOUNDING` |
| `INBOUNDED` | `INBOUNDED` |
### 4.3 主流程状态变化
| 业务动作 | 结果状态 | 库位事实 |
|---|---|---|
| 保存测量草稿 | `MEASURING` | 未占用 |
| 提交测量 | `MEASURE_PENDING` | 已拆托并确认 `OCCUPIED` |
| 客服驳回 | `MEASURE_REJECTED` | 保持占用 |
| 客服通过 | 自动经过计费和入库中间态 | 保持占用 |
| 自动闭环完成 | `INBOUNDED`,费用 `SENT` | 保持占用 |
| 调整已发布费用 | 仍为 `INBOUNDED`;新费用 `SENT`,旧费用 `SUPERSEDED` | 保持占用 |
## 五、平台入库单列表与详情
| 方法 | 路径 | 权限 |
|---|---|---|
| GET | `/api/platform/inbounds` | `platform:firstleg:inbound:list` |
| GET | `/api/platform/inbounds/{inboundId}` | `platform:firstleg:inbound:view` |
共同参数:`tenantId`。列表支持:
```text
inboundCode, orderNo, processStatus, orderStatus, measureReviewStatus,
feeStatus, feeReviewStatus, tab, expectedArrivalFrom, expectedArrivalTo,
customerId, customerName, companyId, warehouseId, deliveryWarehouseId,
destinationCode, holdFlag, page, size
```
列表已覆盖前端主要展示字段:入仓码、订单号、订单/流程/测量审核/费用状态、客户、公司、仓库、交货仓、FBA 目的仓、扣货、箱数、实重、净重、实测体积、材积重、计费重量、计费体积、托盘数、`locationCodes`、测量和入库完成时间、快递公司和快递单号、配载、集装箱、柜号、船名、航次、开船和到港时间、创建和更新时间。
详情在此基础上还返回:`publicRemark`、`palletLocations`、`files`、`internalNotes`、`statusHistory`。
## 六、平台测量与 OCR
接口前缀:
```text
/api/platform/v1/first-leg/inbounds/{inboundId}
```
| 方法 | 子路径 | 权限 | 说明 |
|---|---|---|---|
| GET | `/measurement` | `platform:firstleg:inbound:measure:view` | 获取测量、明细和 OCR 结果 |
| PUT | `/measurement/draft` | `platform:firstleg:inbound:measure:edit` | 保存或更新草稿 |
| POST | `/measurement/submit` | `platform:firstleg:inbound:measure:submit` | 提交并拆托、占库位 |
| POST | `/weight-results` | `platform:firstleg:inbound:weight:edit` | 新增 OCR 结果 |
| PUT | `/weight-results/{resultId}` | `platform:firstleg:inbound:weight:edit` | 人工修正重量 |
| POST | `/weight-results/{resultId}/confirm` | `platform:firstleg:inbound:weight:confirm` | 确认最终重量 |
以上接口均带 `tenantId`;写接口按 Swagger 要求携带 `Idempotency-Key`。
### 6.1 保存测量草稿
```json
{
"measurementId": "已有草稿时传,首次可为空",
"version": 0,
"originalDocumentNo": "原单据号",
"originalGrossWeightKg": 100.000,
"originalVolumeCbm": 2.5000,
"actualGoodsName": "实际品名",
"items": [
{
"itemNo": "ITEM-001",
"boxSpecification": "60*40*50cm",
"packageCount": 10,
"lengthCm": 60.000,
"widthCm": 40.000,
"heightCm": 50.000,
"unitWeightKg": 12.500,
"intelligentImageFileId": "图片文件ID",
"overLimitWarning": "",
"outerLengthCm": 61.000,
"outerWidthCm": 41.000,
"outerHeightCm": 51.000,
"remark": ""
}
]
}
```
注意:汇总体积、材积重等计算字段由后端计算,前端不要传入或自行覆盖。`items` 至少一条,尺寸和单件重量必须大于 0,`boxSpecification` 必填。
提交测量请求:
```json
{
"measurementId": "190000000000000001",
"version": 1
}
```
`version` 是乐观锁版本。每次保存、修正或确认成功后都应使用响应中的新版本;409 后重新拉取详情,不能用旧版本强行重试。
### 6.2 OCR 重量
图片接口:
| 方法 | 路径 | 权限 |
|---|---|---|
| POST | `/api/platform/v1/files/measurements/{tenantId}/{inboundId}` | `platform:firstleg:inbound:weight:edit` |
| POST | `/api/platform/v1/files/measurements/{tenantId}/{inboundId}/{fileId}/recognize` | `platform:firstleg:inbound:weight:edit` |
| GET | `/api/platform/v1/files/measurements/{tenantId}/{inboundId}/{fileId}` | `platform:firstleg:inbound:measure:view` |
支持 JPG、PNG、BMP,单文件最大 5 MB。建议交互顺序:上传图片 → 调用识别 → 展示 OCR 原值、单位、置信度 → 用户按需修正 → 确认重量。
人工修正请求:
```json
{
"version": 0,
"adjustedWeightValue": 12.500,
"adjustedWeightUnit": "KG",
"adjustmentReason": "OCR 小数点识别错误"
}
```
确认请求:
```json
{
"version": 1
}
```
测量详情会返回 OCR 原文、原重量和单位、置信度、人工修正值和原因、最终 KG、识别状态、修正/确认人员与时间、版本。多张秤图的最终重量由业务服务汇总,前端只负责展示和人工确认,不自行写汇总重量。
## 七、客服测量审核
| 方法 | 路径 | 权限 |
|---|---|---|
| POST | `/api/platform/v1/inbounds/{inboundId}/measurements/approve` | `firstleg:inbound:measurement-review` |
| POST | `/api/platform/v1/inbounds/{inboundId}/measurements/reject` | `firstleg:inbound:measurement-review` |
| POST | `/api/platform/v1/inbounds/{inboundId}/measurements/exception-release` | `firstleg:inbound:exception-release` |
| GET | `/api/platform/v1/inbounds/{inboundId}/measurement-review-history` | `firstleg:inbound:measurement-review-history` |
写接口必须传 `tenantId` 和 `Idempotency-Key`。通过/驳回请求:
```json
{
"measurementId": "190000000000000001",
"expectedVersion": 2,
"reason": "审核意见,通过时可为空,驳回时按业务填写"
}
```
异常放行请求的 `reason` 必填:
```json
{
"measurementId": "190000000000000001",
"expectedVersion": 3,
"reason": "负责人审批后的异常放行原因"
}
```
审核通过请求成功即表示后端自动闭环已执行完成或可幂等续跑。前端应重新查询入库详情和最新费用,不要再自动串行调用 `/calculate`、`/confirm`、`/send`。
## 八、FBA 计费与费用调整
接口前缀:
```text
/api/platform/v1/inbounds/{inboundId}/fees
```
| 方法 | 子路径 | 权限 | 前端用途 |
|---|---|---|---|
| GET | `/latest` | `firstleg:fba-pricing:view` | 查询最新费用快照 |
| PUT | `/published` | `firstleg:fba-pricing:adjust` | 调整已发布费用 |
| POST | `/calculate` | `firstleg:fba-pricing:calculate` | 异常恢复/人工补偿,不是正常主流程按钮 |
| POST | `/confirm` | `firstleg:fba-pricing:confirm` | 异常恢复/人工补偿 |
| POST | `/send` | `firstleg:inbound:send-fee` | 异常恢复/人工补偿 |
调整已发布费用:
```json
{
"subtotalAmount": 1000.00,
"additionalAmount": 50.00,
"reason": "经审批调整附加费"
}
```
计费规则:
- 包税、按 KG:`计费数量 = max(实重, 实测 CBM × 换算系数)`。
- 不包税、按 CBM:`计费数量 = max(实测 CBM, 实重 ÷ 换算系数)`。
- 换算系数、精度、舍入方式、币种和价格均来自客户规则及船司费率版本,前端不能写死。
FBA 基础资料:
```text
GET /api/platform/v1/fba-pricing/customer-rules
GET /api/platform/v1/fba-pricing/customer-rules/{id}
POST /api/platform/v1/fba-pricing/customer-rules/versions
DELETE /api/platform/v1/fba-pricing/customer-rules/{id}
GET /api/platform/v1/fba-pricing/carrier-rates
GET /api/platform/v1/fba-pricing/carrier-rates/{id}
POST /api/platform/v1/fba-pricing/carrier-rates/versions
DELETE /api/platform/v1/fba-pricing/carrier-rates/{id}
```
规则采用版本化新增,历史订单费用使用当时快照,不应被新版本覆盖。
## 九、库位管理
| 方法 | 路径 | 权限 |
|---|---|---|
| GET | `/api/platform/v1/locations` | `platform:location:list` |
| GET | `/api/platform/v1/locations/{id}` | `platform:location:list` |
| GET | `/api/platform/v1/locations/available` | `platform:location:list` |
| POST | `/api/platform/v1/locations` | `platform:location:create` |
| PUT | `/api/platform/v1/locations/{id}` | `platform:location:edit` |
| PATCH | `/api/platform/v1/locations/{id}/status` | `platform:location:status` |
| DELETE | `/api/platform/v1/locations/{id}` | `platform:location:delete` |
分页条件:`tenantId`、`warehouseId`(必填)、`zoneCode`、`locationCode`、`locationType`、`status`、`page`、`size`。
库位类型:`SHELF`、`PALLET`、`FLOOR`、`FLOW_RACK`。查询状态:`AVAILABLE`、`RESERVED`、`OCCUPIED`、`DISABLED`。
新增/编辑请求:
```json
{
"warehouseId": "190000000000000002",
"zoneCode": "A",
"zoneName": "A库区",
"locationCode": "A-001",
"locationName": "A区001库位",
"locationType": "PALLET",
"maxWeightKg": 1000.000,
"status": "AVAILABLE",
"remark": "",
"version": 0
}
```
启停仅允许 `AVAILABLE` 或 `DISABLED`,请求为:
```json
{
"status": "DISABLED",
"version": 1
}
```
活动预占或已占用库位不能停用;删除要求库位已停用、无活动预占/占用,并在查询参数传 `warehouseId`、`version`。无普通空闲库位时,系统可使用本租户、本仓库的共享溢出位 `A0`,前端只展示后端结果。
## 十、托盘管理
| 方法 | 路径 | 权限 |
|---|---|---|
| GET | `/api/platform/v1/pallets` | `platform:pallet:list` |
| GET | `/api/platform/v1/pallets/{id}` | `platform:pallet:list` |
| POST | `/api/platform/v1/pallets` | `platform:pallet:create` |
| PUT | `/api/platform/v1/pallets/{id}` | `platform:pallet:edit` |
| DELETE | `/api/platform/v1/pallets/{id}` | `platform:pallet:delete` |
分页条件:`tenantId`、`warehouseId`、`palletCode`、`palletType`、`page`、`size`。新增/编辑请求:
```json
{
"warehouseId": "190000000000000002",
"palletCode": "TP-001",
"palletType": "木托盘",
"capacityCbm": 2.000000,
"remark": "标准托盘"
}
```
当前平台托盘 DTO 只返回主数据,不暴露内部 `AVAILABLE / RESERVED / OCCUPIED` 状态;也没有单独的托盘启停或状态筛选 API。页面当前只实现查询、新增、编辑、删除。已预占或占用托盘删除会被后端拒绝。这是当前明确的接口边界,不要自行猜测状态路径。
## 十一、商户端只读接口
```http
GET /api/merchant/v1/first-leg/orders/{orderId}/inbound-billing
```
权限:`merchant:order:view`。
返回 `inbound` 和 `latestFee`。仅允许商户身份查询本租户订单,且只有客服审核通过并已发布的费用可见。商户端只展示:入库结果、测量汇总、托盘/库位结果和最新费用,不提供费用确认、测量审核、费用修改操作。
## 十二、第三方测量开放接口
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | `/openapi/v1/inbound-measurements` | 一次提交一条箱规明细和一张对应图片 |
| GET | `/openapi/v1/inbound-measurements/events/{eventNo}` | 查询事件处理结果 |
请求头:
```http
X-App-Key: <调用方应用键>
X-Timestamp: <时间戳>
X-Nonce: <随机串>
X-Signature: <签名>
Idempotency-Key: <幂等键>
```
POST 使用 `multipart/form-data`,包含:
```text
data:原始 UTF-8 JSON 文本
image:该条箱规唯一对应的 JPG/PNG/BMP 图片,最大 5 MB
```
`data` 示例:
```json
{
"eventNo": "M202608010001",
"externalDetailNo": "BOX-20260801-0001",
"warehouseCode": "CN-YW-01",
"inboundCode": "RK202608010001",
"inboundDetailId": "190000000000000001",
"deviceCode": "DEVICE-01",
"measuredAt": "2026-08-01T10:30:00+08:00",
"boxSpecification": "60*40*50cm",
"packageCount": 10,
"lengthCm": 60.000,
"widthCm": 40.000,
"heightCm": 50.000,
"unitWeightKg": 12.500,
"remark": ""
}
```
绑定和签名规则:
- 后端先按 `inboundCode` 匹配入库单,再使用 `inboundDetailId` 通过 Order 内部接口校验该货物明细确实属于入库单关联订单;第三方不能自由创建来源不明的明细。
- 一次请求只生成一个测量批次、一条测量明细和一个文件中心图片引用。
- `externalDetailNo` 标识第三方物理测量明细;同一订单明细和相同第三方明细号不能重复绑定。
- `eventNo` 在同一 `appKey` 下唯一;相同事件号或幂等键重试时,测量 JSON 和图片内容必须完全一致。
- 签名 body 为:`data原文 + LF + image文件内容SHA-256小写十六进制`;再按既有六行 HMAC 规则计算 `X-Signature`。
- `measuredAt` 必须带时区;长宽高大于 0;`packageCount` 为 1 至 1,000,000;`boxSpecification` 必填。
- 图片由 File 服务验证真实格式并持久化;尺寸测量图片不触发重量 OCR。测量落库失败时会调用文件中心补偿清理。
- 接口只接收测量数据,不推进客服审核、计费、库位或入库状态。
成功响应的 `data` 返回:`eventNo`、`inboundCode`、`inboundDetailId`、`measurementId`、`measurementItemId`、`imageFileId`、`accepted`、`status`、`receivedAt`。所有 ID 按字符串处理。
## 十三、推荐前端联调顺序
1. 验证平台登录、刷新 Token、退出、过期会话、401 和 403。
2. 给测试角色同步入库测量与计费权限,确认按钮显示与后端权限码一致。
3. 初始化启用仓库、至少一个托盘、足量可用库位、客户计费规则和船司 FBA 费率。
4. 创建或准备一条已进入待测量状态的真实入库单。
5. 调用入库列表和详情,核对 Long ID 均按字符串处理。
6. 上传秤图、调用 OCR、人工修正和确认重量。
7. 保存测量草稿,刷新页面后核对草稿和版本回显。
8. 提交测量,验证状态变为 `MEASURE_PENDING`,托盘和库位结果已生成。
9. 先走一次驳回 → 修改 → 重新提交,验证旧页面版本提交被拒绝。
10. 客服审核通过,随后重新查询详情和 `/fees/latest`,验证自动变为 `INBOUNDED / SENT`。
11. 商户账号查询 `inbound-billing`,验证只读数据、跨客户 403/404 和未发布费用不可见。
12. 调整一次已发布费用,验证新版本可见、旧版本被替代且入库状态不回退。
13. 验证重复点击使用同一幂等键不会重复计费、重复托盘或重复占位。
14. 验证无权限按钮、直接构造越权请求、空态、加载态、异常提示和移动端展示。
## 十四、测试数据准备清单
- 平台管理员账号:具备入库查看、测量、OCR、审核、计费查看/调整、库位和托盘权限。
- 客服账号:具备测量审核权限,但不授予异常放行权限,用于验证按钮隔离。
- 商户账号:绑定独立租户,只具备本企业订单查看权限。
- 两个不同租户及各自仓库,用于跨企业越权验证。
- 一个启用仓库、至少 2 个容量明确的托盘、至少 2 个 `AVAILABLE` 库位。
- 一套生效中的客户 FBA 计费规则和匹配的船司费率,币种、渠道、目的仓、有效期完整。
- 一条待测量入库单、一条已发布费用入库单。
- JPG/PNG/BMP 各一张有效秤图,以及超 5 MB、伪造扩展名和无法识别图片各一张。
- 第三方测量应用的 AppKey、签名密钥、绑定租户和仓库编码。
## 十五、本次回归测试结果
2026-08-04 11:42(Asia/Shanghai)在最终代码上重新执行:
```powershell
D:\apache-maven-3.8.8\bin\mvn.cmd clean test -pl order,firstleg,warehouse,file,integration-service,gateway,iam -am
```
结果:13 个 Reactor 模块全部 `SUCCESS`,`BUILD SUCCESS`,耗时约 1 分 5 秒。
| 模块 | 测试数 | Failures | Errors | Skipped |
|---|---:|---:|---:|---:|
| common-core | 3 | 0 | 0 | 0 |
| common-web | 10 | 0 | 0 | 0 |
| common-security | 6 | 0 | 0 | 0 |
| common-openapi | 1 | 0 | 0 | 0 |
| common-audit | 0 | 0 | 0 | 0 |
| gateway | 10 | 0 | 0 | 0 |
| iam | 79 | 0 | 0 | 0 |
| order | 30 | 0 | 0 | 0 |
| firstleg | 74 | 0 | 0 | 0 |
| warehouse | 68 | 0 | 0 | 0 |
| file | 23 | 0 | 0 | 0 |
| integration-service | 8 | 0 | 0 | 0 |
| **合计** | **312** | **0** | **0** | **0** |
重点自动化覆盖:
- 统一响应、异常映射、Long ID 字符串序列化和权限认证。
- 测量草稿、OCR 修正/确认、提交及乐观锁。
- 测量提交时托盘拆分、库位预占/确认、失败回滚、幂等重试。
- 客服驳回、通过后自动计费/发布/入库、中断续跑。
- FBA 计费规则选择、已发布费用调整和状态不回退。
- 客户只见本客户已发布费用,平台/商户身份及跨客户隔离。
- 第三方签名、防重放、事件幂等、仓库范围及不越权推进状态。
- 第三方一条箱规对应一条订单货物明细和一张图片、重复绑定拦截、图片补偿清理。
- 库位/托盘主数据约束、A0 共享溢出及活动占用唯一性契约。
- 图片上传类型、大小、真实图片校验、下载三字段隔离和 OCR 聚合。
- Gateway 路由以及 OpenAPI、Application、Nacos YAML 解析。
测试日志中的模拟数据库不可用、文件写入失败等异常堆栈,是异常映射测试主动构造的场景;对应测试均通过,不是构建失败。
## 十六、尚需在线环境验证与当前遗留
本次回归没有启动服务、没有占用 `9000/9100/920x` 默认端口,也没有连接或修改 MySQL。以下内容必须在测试环境由后端与前端共同验证后,才能判定上线验收通过:
1. 入库测量与计费 SQL 在真实 MySQL 的建表/迁移执行,以及历史数据与唯一约束冲突检查。
2. Gateway、Nacos、Redis、MySQL、服务间令牌和各微服务的真实 HTTP 联通。
3. OCR 引擎对现场秤图的识别准确率、超时和失败重试。
4. 并发提交、并发抢托盘/库位、A0 多托盘共享在真实数据库事务下的压力验证。
5. 浏览器端完整登录、刷新 Token、权限按钮、403、跨客户拒绝、空态、加载态和重复提交体验。
6. 当前托盘管理没有独立启停和状态筛选接口;页面只做查询、新增、编辑、删除。
上述内容是本报告初版时的阶段结论。2026-08-04 已继续完成真实数据库迁移和隔离端口在线 HTTP 回归,最终结论以第十七章为准。
## 十七、最终在线回归结果(任务 019fc6f9)
### 17.1 验收结论
2026-08-04 已连接本地测试 MySQL,并使用独立 Nacos 分组和隔离端口完成真实 API 全链路回归。下单、订单审核生成入库单、测量草稿、图片绑定、称重图片、OCR 失败人工修正、重量确认、托盘库位占用、测量审核、FBA 自动计费、费用发送和入库完成全部通过。
最终状态:
| 项目 | 结果 |
|---|---|
| 订单 ID | `2084549604719718402` |
| 入库单 ID | `2084549769916538881` |
| 入仓码 | `RK-2084549604719718402` |
| 测量批次 | `2084556854154715137` |
| 入库状态 | `INBOUNDED` |
| 测量审核状态 | `APPROVED` |
| 费用状态 | `SENT` |
| 费用单号 | `FBAF-2084549769916538881-1` |
| 实重 / 体积 | `20kg` / `0.24m³` |
| 体积重 / 计费量 | `40.08kg` / `40.08kg` |
| 最终费用 | `440.68 CNY` |
| 托盘 | `2084561214309851137` |
| 库位 | `2084561214452457473` |
| 库位预占单 | `LR2084562525306675202` |
| 分配状态 | `CONFIRMED` |
### 17.2 环境与自动化结果
- Nacos 隔离组:`BAIYUE_PHASE2_E2E_20260804`。
- 隔离端口:`19100`、`19201`、`19202`、`19204`、`19205`、`19206`、`19207`,未占用默认 `9000/9100/920x` 端口。
- 7 个隔离服务健康检查均为 `UP`。
- Firstleg 自动化测试 77 项通过。
- Warehouse 自动化测试 68 项通过。
- 公共仓储技术归属专项(历史测试名含“资源租户”)3 项通过。
### 17.3 前端需要采用的最终契约
- 入库详情已经返回 `version`,测量审核、驳回等乐观锁请求必须使用服务端最新版本。
- Long 类型 ID 继续按字符串处理。
- 客服审核通过后由后端自动完成计费、费用发送和入库,前端成功后刷新详情与最新费用,不串行调用补偿接口。
- 平台操作公共收货仓时,订单客户归属与公共主数据技术归属由后端分别校验,前端不自行改写技术归属字段。
- OCR 未配置时会返回明确失败状态,页面必须允许人工修正识别重量并确认,不能把 OCR 失败等同于整条业务失败。
### 17.4 本轮修复
1. 补齐 `fl_inbound_weight_result.created_by`、`updated_by`,修复称重结果登记 SQL 失败。
2. 增加历史兼容配置 `firstleg.inbound.warehouse-resource-tenant-id`,支持商户订单使用公共主数据技术归属下的仓库、托盘和库位;2026-08-04 本轮曾使用 `10001` 验证,但该样本已失效,现行公共资源归属必须为平台技术作用域 `0`。
3. 仓储确认结果回传并保留 `reservationNo`,避免分配快照写入空预占单号。
4. 入库详情 `InboundOrderSummary` 增加 `version`。
5. `fl_inbound_pallet_allocation` 增加 `warehouse_resource_tenant_id`,保留历史资源归属快照。
### 17.5 当前边界
- 本轮已验证 OCR 不可用时的人工修正降级闭环;未验证真实 OCR 供应商对现场秤图的准确率、时延和失败重试。
- 浏览器端视觉、移动端适配和真实用户操作体验仍由前端按本报告接口完成联调验收。
- 数据库唯一增量入口:`D:\baiyue-firstleg\deploy\sql\头程数据库统一增量-MySQL8.sql`。后续变更只追加到该文件,历史日期脚本不再作为部署入口。
最终结论:**入库测量与计费核心正常主链路已经完成真实 MySQL、真实 HTTP 和自动化回归,后端达到前端联调条件;真实 OCR 供应商识别和浏览器端体验属于后续环境验收项。**
@@ -0,0 +1,237 @@
# 入库测量与计费前端页面清单与多对话并行任务表
> 盘点日期:2026-08-05
> 适用项目:`apps/admin-web/`、`apps/client-web/`
> 后端范围:只读核对 `baiyue-firstleg/`,本任务不修改后端
> 当前基线:以后端现有 Controller、DTO、权限和状态机为可联调事实;V2 待确认项不擅自补成前端规则
> 主体模型:前端只呈现“平台—客户”两级;接口 `tenantId` 当前表示客户 ID。任务中的“租户切换”统一理解为客户切换,不新增租户选择器或租户级权限。
本轮不存在“等待后端提供接口文档”的前置任务。每个前端对话直接只读当前工作区 `baiyue-firstleg/` 中的 Controller、DTO、Service、Repository、OpenAPI 和权限 SQL;发现契约问题只登记,不修改后端。
## 一、结论
入库测量与计费前端应围绕已经落地的“入库测量、OCR、测量审核、FBA 计费、托盘库位、客户只读结果”建设,不继续沿用旧 24 项计划直接开工。
- Admin 新增 6 个正式菜单页面:入库单、客户计费规则、船司 FBA 价格、库位管理、托盘管理、海外仓阶梯费用。
- 入库详情承载测量/OCR、审核、费用快照、托盘库位结果和历史,不再新增独立“接收审核”页面。
- 正常流程在“测量审核通过”后直接进入 `WAIT_SPLIT`;后端可尽力生成初算费用,但价格缺失或初算失败不得阻塞主流程。平台人员可独立修改计费量、单价和附加费,金额由服务端重算。
- Client 不新增独立入库菜单或列表,只在现有头程订单详情中增加“入库与费用”只读区。
- 到仓预报、预约、签到、分批收货、标签、冲正、差异通知、上架任务、位置历史和通用费用项目当前没有匹配的公开后端接口,暂不拆前端实现任务。
## 二、事实来源和冲突处理
当前 V2 确认清单的 C1-C8、T1-T3 仍是待确认状态,但后端已经形成一套更收敛的可联调实现。因此本轮按以下顺序执行:
1. 用户本轮要求:只整理和开发前端,不修改后端,可以直接只读后端代码。
2. 后端真实 Controller、DTO、权限 SQL、状态枚举和服务编排。
3. `入库测量与计费需求优化版-v2-测量计费入库主流程.md` 的范围边界。
4. Admin 原型仅用于布局、字段和交互参考,不补造后端没有的业务能力。
已确认的实现差异:
| 主题 | 旧规划或 V2 描述 | 当前后端事实 | 前端处理 |
|---|---|---|---|
| 正常入库动作 | 人工试算、确认、发送费用后入库 | 测量审核通过后直接进入待分柜,费用仅作独立初算和人工维护 | 审核成功后刷新详情;初算失败展示非阻断提示,不影响待分柜操作 |
| 托盘库位 | 操作员选择托盘和候选库位 | 测量提交/审核编排自动准备和占用,平台无人工分配公开接口 | 详情只读展示分配结果 |
| 接收审核 | 独立页面 | 无独立节点 | 不建设;相关结果并入详情和审核区 |
| Client 到仓预报 | 规划中存在 | 无商户公开接口 | 不建设 |
| 通用费用项目 | V2 C6 白名单待确认 | 无独立费用项目 Controller | 不建设费用项目页 |
| 入库列表路径 | V2 示例使用 `/api/platform/inbounds` | Controller 确实无 `v1`,其他入库接口多为 `/api/platform/v1/...` | API 封装保留真实多前缀,不自行统一 |
| 海外仓阶梯费用 | 旧文档排除全部阶梯价 | Warehouse 已提供客户级天数阶梯费用基础资料 CRUD | 新增平台端维护页;当前不接入自动计费 |
## 三、Admin 页面和变更清单
### 3.1 正式菜单页面
| 页面 | 建议路由 | 主要内容 | 主要权限 | 优先级 |
|---|---|---|---|---|
| 入库单 | `/inbounds` | 企业选择、四个后端页签、多条件筛选、服务端分页、详情入口 | `platform:firstleg:inbound:list` | P0 |
| 入库详情 | `/inbounds/:inboundId` | 概览、运输快照、内部备注、文件、状态历史、测量、审核、费用、托盘库位 | `platform:firstleg:inbound:view` 及各操作权限 | P0 |
| 客户计费规则 | `/first-leg-pricing/customer-rules` | 规则查询、详情、新版本、停用;KG/CBM、换算系数、舍入和有效期 | `firstleg:fba-pricing:rule:view/edit` | P0 |
| 船司 FBA 价格 | `/first-leg-pricing/carrier-rates` | 价格查询、详情、新版本、停用;起运仓、渠道、船司、FBA 仓、单价和附加费 | `firstleg:fba-pricing:rate:view/edit` | P0 |
| 库位管理 | `/master-data/locations` | 企业和仓库联动、筛选、分页、新增、编辑、启停、删除、可用库位状态 | `platform:location:*` | P0 |
| 托盘管理 | `/master-data/pallets` | 企业和仓库联动、筛选、分页、新增、编辑、删除 | `platform:pallet:*` | P0 |
| 海外仓阶梯费用 | `/customers/overseas-storage-fees` | 按客户分页查询,维护币种、连续天数区间和仓储费单价,支持乐观锁编辑与删除 | `platform:overseas-storage-fee:*` | P1 |
所有业务表格的“操作”列放在第一列,并检查窄屏退化。
### 3.2 入库详情内部功能
入库详情建议作为一个路由页,以页签或分区承载以下能力,不为每一步增加侧边栏菜单:
| 分区 | 能力 | 交互边界 |
|---|---|---|
| 概览与历史 | 入仓码、订单/客户/仓库快照、申报与实测汇总、文件、内部备注、状态历史 | 切换企业后清空全部上下文 |
| 测量与 OCR | 第三方箱规、测量草稿、称重图片上传/预览/OCR 重试、OCR 原值、置信度、人工修正、确认、提交审核 | 汇总重量和体积以服务端结果为准;不覆盖 OCR 原值 |
| 测量审核 | 原单、第三方测量、OCR 三组数据对比;通过、驳回、审核历史、异常放行 | 通过/驳回/放行携带幂等键;放行必须有专属权限和原因 |
| 费用快照 | 最新费用、规则版本、价格版本、实际量、折算量、计费量、单价、附加费、总额、发送状态 | 正常流程只读;已发布费用可按权限调整且必须填写原因 |
| 托盘库位 | 托盘号、分配体积/箱数、库位编码和占用结果 | 只读,不让前端拼托盘号、选择或占用库位 |
### 3.3 全局装配变更
- `src/app/router/index.ts`:装配入库测量与计费模块路由。
- `src/core/navigation/adminNavigation.ts`:在“国内仓”下增加入库单、库位、托盘;新增“头程计费”分组;在客户或海外仓基础资料分组增加“海外仓阶梯费用”。
- 路由和导航测试同步更新。
- IAM 权限页面无需业务改造;后端返回入库测量与计费权限资源后沿用现有展示和授权能力。
- 不恢复“接收审核”“费用项目”“完整财务管理”等原型菜单。
## 四、Client 页面变更清单
Client 只修改现有 `FirstLegOrdersView.vue` 的订单详情抽屉,新增“入库与费用”只读区,不改路由、导航或模块注册。
展示内容:
- 入库结果:入仓码、入库状态、完成时间、平台收货仓。
- 实测汇总:实际箱数、实重、净重、实测体积、材积重、计费重量/体积。
- 托盘库位:托盘数、托盘号、分配体积、箱数和库位编码。
- 费用结果:计费模式、换算系数、实际量、折算量、最终计费量、单价、小计、附加费、总额、币种、规则/价格版本和发送时间。
- 只展示公开备注;不展示内部备注、原始操作历史、内部原因和操作人 ID。
状态处理:
- 草稿订单不请求入库费用接口,显示“订单提交后可查看入库结果”。
- 后端业务码 `A0404` 作为中性待处理态,显示“入库及费用结果尚未发布”。
- 其他失败只影响此区块,保留订单详情并提供区块级重试。
- 快速切换订单时使用请求序号或 `orderId` 校验,旧响应不得覆盖新订单。
- 不增加客户确认、调整、审核、发送费用或照片下载动作。
## 五、真实接口域
前端实现直接读取相邻 Controller/DTO,不需要另行准备后端接口文档。首批任务按以下接口域联调:
| 接口域 | Controller 入口 | 前端用途 |
|---|---|---|
| 入库查询 | `firstleg/.../PlatformInboundOrderController.java` | Admin 入库列表和聚合详情 |
| 测量/OCR | `firstleg/.../PlatformInboundMeasurementController.java` | 测量草稿、提交、OCR 登记/修正/确认 |
| 测量审核 | `firstleg/.../PlatformInboundMeasurementReviewController.java` | 通过、驳回、异常放行、审核历史 |
| FBA 基础资料 | `firstleg/.../PlatformFbaMasterDataController.java` | 客户规则和船司价格版本维护 |
| FBA 费用 | `firstleg/.../PlatformFbaPricingController.java` | 最新费用、异常恢复接口、已发布费用调整 |
| 称重图片 | `file/.../PlatformMeasurementImageController.java` | 上传、OCR 重试和鉴权查看 |
| 托盘 | `warehouse/.../PlatformPalletController.java` | 托盘 CRUD |
| 库位 | `warehouse/.../PlatformLocationController.java` | 库位 CRUD、状态和可用库位查询 |
| 海外仓阶梯费用 | `warehouse/.../PlatformOverseasStorageFeeController.java` | 平台端客户级天数阶梯仓储费 CRUD |
| 商户结果 | `firstleg/.../MerchantInboundBillingController.java` | Client 订单入库与费用只读展示 |
共同约定:
- 浏览器代码使用现有 `/api` 基地址,不硬编码 Gateway 地址。
- 普通业务 HTTP 200 后仍需判断响应体 `code === "200"`。
- Java Long 在 JSON 中按字符串处理,前端不得转为 `Number`。
- Admin 当前接口显式需要代表目标客户的 `tenantId`;切换企业必须清空仓库、详情、编辑、上传和幂等上下文。
- 409 表示版本或并发冲突,页面应刷新最新详情,不静默覆盖。
- 审核通过、驳回、异常放行和费用写操作按 Controller 要求携带 `Idempotency-Key`。
## 六、多对话并行任务表
### 6.0 实施状态(2026-08-04)
- `P2-ADM-01` 至 `P2-ADM-11`、`P2-CLI-01`、`P2-QA-01`、`P2-QA-02` 均已完成。
- 新增 `P2-ADM-12` 海外仓阶梯费用前端任务:后端接口、权限和 SQL 已完成,前端页面待实现与联调。
- Admin 已通过 `pnpm test`(58 个文件、262 个测试)、`pnpm typecheck` 和 `pnpm build`。
- Client 已通过 `pnpm test`(135 个测试)、`pnpm typecheck` 和 `pnpm build`。
- Admin 入库测量与计费新增模块的 Impeccable detector 结果为 `[]`,模块依赖边界测试已通过。
- Admin 入库测量与计费页面已再次按平台后台原型校正搜索条件、表格字段、字段顺序和详情分区;视觉组件统一复用现有 `QueryToolbar`、`DataTable`、`AppDrawer` 及状态组件。
- 原型字段只在当前后端 Controller/DTO 支持时落地;未恢复接收审核、客户确认、报关、智能装柜、托盘状态/启停、尺寸/承重及无接口的导入导出。
- Client 入库费用区沿用既有订单详情视觉,补充换算系数、舍入精度和规则/价格版本,保持只读并继续使用“入仓码”业务术语。
- 本轮未修改 `baiyue-firstleg/`;8.1 节的 Client 服务端响应数据暴露风险仍是上线阻断,不影响本轮前端任务完成状态。
### 6.1 任务定义
下表中未写应用前缀的 Admin 路径均相对 `apps/admin-web/src/`。
| ID | 对话任务 | 负责范围和文件所有权 | 交付与验收 | 依赖 | 波次 |
|---|---|---|---|---|---|
| `P2-ADM-01` | 入库列表与聚合查询 | 独占 `modules/inbounds/core/**`、`pages/InboundOrdersView.vue` 及测试 | 本域 types/API;企业选择、四页签、筛选、分页、操作列第一列、概览/历史只读组件、加载/空/错/权限态 | 只读入库查询 Controller/DTO | W1 |
| `P2-ADM-02` | 测量草稿与箱规 | 独占 `modules/inbounds/measurement/**` 及测试 | 本域 types/API/组件;第三方箱规、测量草稿、保存、提交审核、版本冲突和未保存保护 | 只读测量 Controller/DTO | W1 |
| `P2-ADM-03` | 称重图片与 OCR | 独占 `modules/inbounds/weight/**` 及测试 | 本域 types/API/组件;上传、预览、OCR 重试、原值/置信度、人工修正和确认 | 只读 File、测量 Controller/DTO | W1 |
| `P2-ADM-04` | 测量审核 | 独占 `modules/inbounds/review/**` 及测试 | 本域 types/API/组件;三组数据对比、历史、通过、驳回、异常放行、幂等和权限 | 只读审核 Controller/DTO/Service | W1 |
| `P2-ADM-05` | 入库费用快照 | 独占 `modules/inbounds/fee/**` 及测试 | 本域 types/API/组件;最新费用、完整计价过程、状态和已发布费用调整;不串常规 calculate/confirm/send | 只读 FBA 费用 Controller/DTO/Service | W1 |
| `P2-ADM-06` | 客户计费规则 | 独占 `modules/fba-pricing/customer-rules/**` 及测试 | 查询、详情、新版本、停用、权限和未保存保护 | 只读 `PlatformFbaMasterDataController` 客户规则契约 | W1 |
| `P2-ADM-07` | 船司 FBA 价格 | 独占 `modules/fba-pricing/carrier-rates/**` 及测试 | 查询、详情、新版本、停用、起运仓/渠道/船司/FBA 仓/价格和有效期 | 只读 `PlatformFbaMasterDataController` 价格契约 | W1 |
| `P2-ADM-08` | 库位管理 | 独占 `modules/warehouse-resources/locations/**` 及测试 | 企业/仓库级联、筛选分页、CRUD、启停、乐观锁、状态限制、响应式 | 现有企业选择器和仓库 API | W1 |
| `P2-ADM-09` | 托盘管理 | 独占 `modules/warehouse-resources/pallets/**` 及测试 | 企业/仓库级联、筛选分页、CRUD;不虚构状态或启停 | 现有企业选择器和仓库 API | W1 |
| `P2-ADM-10` | 入库详情工作台组装 | 独占 `modules/inbounds/pages/InboundOrderDetailView.vue`、`components/InboundWorkflowWorkspace.vue` 及测试 | 将 ADM-01 至 ADM-05 组件组装为详情页;统一刷新、客户切换清理、操作成功回读和托盘库位只读结果 | ADM-01 至 ADM-05 | W2 |
| `P2-ADM-11` | Admin 全局装配 | 独占各模块 `routes.ts`、`app/router/index.ts`、`core/navigation/adminNavigation.ts` 及对应测试 | 接入全部 Admin 页面、菜单和权限;首个可访问路由正确;不恢复接收审核/费用项目原型菜单 | ADM-06 至 ADM-10 | W3 |
| `P2-ADM-12` | 海外仓阶梯费用 | 建议独占 `modules/overseas-storage-fees/**` 及测试;路由和菜单在集成时统一修改 | 分页、详情、新增、编辑、删除;客户唯一性、连续阶梯校验、乐观锁冲突、权限态和未保存保护 | `PlatformOverseasStorageFeeController` | W1 |
| `P2-CLI-01` | 商户订单入库费用只读展示 | `apps/client-web/src/modules/first-leg/api/inboundBilling.ts`、`types/inboundBilling.ts`、`components/InboundBillingPanel.vue`、`views/FirstLegOrdersView.vue` 及测试 | 成功/待发布/失败/重试、快速切单、320/720/桌面;无写动作,不消费内部字段 | 只读 `MerchantInboundBillingController` 及 DTO/Service | W1 |
| `P2-QA-01` | Admin 跨模块回归 | 以新增集成测试和联调记录为主,不重构业务实现 | 客户切换、401/403、业务码、409、幂等、重复提交、图片异常、空/加载/失败、权限按钮、窄屏;运行 test/typecheck/build | `P2-ADM-11` | W4 |
| `P2-QA-02` | Client 安全与展示验收 | 只读审查和补测试,避免与 CLI-01 同时改订单页 | 不展示内部备注/历史;A0404 中性态;响应隔离;test/typecheck/build | `P2-CLI-01` | W2 |
### 6.2 推荐并行波次
```text
W1(新增任务可独立开发):
ADM-01 + ADM-02 + ADM-03 + ADM-04 + ADM-05
ADM-06 + ADM-07 + ADM-08 + ADM-09 + ADM-12 + CLI-01
↓
W2(2 个并行对话): ADM-10 + QA-02
↓
W3(1 个集成对话): ADM-11
↓
W4: QA-01 跨模块联调、构建和回归
```
`ADM-12` 没有入库主链路依赖,可独立实现;完成后需要把其路由、菜单和权限态纳入 Admin 集成回归。原关键路径仍是 `ADM-01 至 ADM-05 → ADM-10 → ADM-11 → QA-01`。
### 6.3 多对话协作规则
- 每个对话只修改任务表声明的文件边界;发现需要改公共文件时留给 `P2-ADM-11`。
- `router/index.ts`、`adminNavigation.ts` 和对应测试只能由集成任务修改。
- 库位和托盘任务不得各自创建或修改同一个 `warehouse-resources/routes.ts`。
- 入库各业务域分别维护本域 `types.ts` 和 API,不创建共享巨型 DTO 文件;跨域只传 `tenantId: string`、`inboundId: string`、`readonly` 数据和 `changed` 事件。
- `ADM-01` 至 `ADM-05` 不创建或修改 `InboundOrderDetailView.vue`;详情页面只由 `ADM-10` 组装。
- `ADM-06`、`ADM-07` 不创建共同的 `fba-pricing/routes.ts`;路由只由 `ADM-11` 创建。
- `ADM-12` 不修改入库或 FBA 自动计费模块;海外仓阶梯配置当前仅作为基础资料 CRUD。
- Client 任务保持单对话实现,因为现有订单页超过一千行,拆成多个写任务会集中冲突。
- 每个任务完成后运行直接相关的测试和 typecheck;最终集成任务再运行全项目测试和构建。
- 后端契约疑问直接只读 Controller、DTO、Service、Repository/OpenAPI;本轮不得修改 `baiyue-firstleg/`。
## 七、当前后端源码未落地、暂不开发的范围
| 能力 | 本轮处理 | 原因 |
|---|---|---|
| 到仓预报和线下预约结果 | 暂不开发 | 无商户/平台公开接口 |
| 签到、分批收货、处理单元 | 暂不开发 | 无匹配 Controller |
| 标签打印和换标 | 暂不开发 | Print 服务仍是骨架,无业务公开接口 |
| 收货冲正 | 暂不开发 | 无匹配 Controller |
| 申报实测差异通知 | 暂不开发 | 无匹配 Controller |
| 上架任务和位置历史 | 暂不开发 | 当前只有托盘/库位和自动占用,无平台作业接口 |
| 通用费用项目白名单 | 暂不开发 | C6 未确认且无独立 Controller |
| 通知失败人工重试 | P1 候选 | 当前无明确平台公开接口 |
| 入库后换位 | P1 候选 | 当前无平台公开接口 |
| 测量视频、单票导出 | P1 候选 | 当前无明确契约 |
| 客户照片查看 | 暂不开发 | 当前无商户文件下载接口 |
## 八、上线阻断和风险
### 8.1 Client 数据暴露风险(上线阻断)
当前 `MerchantInboundBillingService` 直接返回平台侧 `InboundOrderDetail`,其中可能包含全部 `internalNotes` 和未按商户可见性过滤的 `files`。即使 Client 页面不渲染,这些字段仍会下发到浏览器。
前端必须做到:
- 商户 DTO 不声明、不读取、不渲染内部备注和原始内部历史。
- 不记录或展示原始响应对象。
但前端无法消除网络响应中的数据暴露,因此正式上线前仍需后端改为商户专用 DTO 或服务端字段过滤。该项不在本轮后端修改授权范围内,只登记为上线阻断。
### 8.2 需求和实现风险
- V2 C1-C8 尚未正式确认;若产品推翻当前自动计费入库流程,需要重新评估页面动作和任务边界。
- Admin 多个接口仍要求前端显式传目标 `tenantId`,与 V2“不相信前端 tenantId”的文字描述不同;前端按现有 Controller 调用,最终数据范围仍由服务端校验。
- 正常审核通过会自动完成后续动作,属于高影响写操作;页面确认文案必须明确结果,并防止重复点击。
- 计费规则和船司价格接口当前返回列表而非分页对象;页面不要先假设服务端分页。
- 托盘接口没有状态和启停能力;库位才有 `AVAILABLE/RESERVED/OCCUPIED/DISABLED` 状态。
- 海外仓阶梯费用当前没有启停、计费单位和生效日期字段;前端不得自行补造,也不得将该配置接入现有 FBA 自动计费。
## 九、每个任务的统一完成标准
- 严格按真实权限控制路由、菜单和按钮;前端权限只控制展示,服务端继续最终授权。
- 覆盖加载、空态、失败、无权限、业务冲突、重复操作和数据过期。
- 所有业务表格操作列在第一列,桌面端可固定左侧;窄屏不依赖表格末端操作。
- 所有 ID 保持字符串,金额、体积、重量和换算系数不硬编码、不自行推导为业务事实。
- 写操作成功后刷新服务端状态;409 或版本冲突提示用户并重载,不静默覆盖。
- Admin 运行 `pnpm test`、`pnpm typecheck`、`pnpm build`。
- Client 运行 `pnpm test`、`pnpm typecheck`、`pnpm build`。
- 不修改后端、不启动本地 Java/Nacos/数据库;联调默认通过测试 Gateway 的 `/api` 代理。
@@ -1,15 +1,17 @@
# 虫虫出海二期开发规划:头程到仓与头程计费
# 虫虫出海入库测量与计费开发规划:头程到仓与头程计费
> 创建日期:2026-07-28
> 更新日期:2026-07-31
> 状态:开发已启动,3 项计费细节确认中
> 流程依据:[头程物流流程图](参考资料/头程物流流程图.svg)中的头程物流“02 到仓”
> 产品确认:[2026-07-31 产品确认合并记录](产品回传/2026-07-31-产品确认合并记录.md)
> 前置阶段:[一期文档](../一期/README.md)
> 前置阶段:[订单与客户文档](../订单与客户/README.md)
## 一、二期目标
> 主体模型:入库测量与计费只实现“平台—客户”两级。`tenant_id > 0` / `tenantId` 是客户 ID 兼容字段,`tenant_id=0` 是平台技术作用域;不得新增真实租户、租户选择器、租户级 RBAC 或重定义现有隔离字段。
二期承接一期“客户下单并选择平台收货仓”的结果,完成货物从待到仓、实际收货、测量、差异记录到指定库位的作业闭环,并在实测数据之上完成头程费用计算。
## 一、入库测量与计费目标
入库测量与计费承接订单与客户“客户下单并选择平台收货仓”的结果,完成货物从待到仓、实际收货、测量、差异记录到指定库位的作业闭环,并在实测数据之上完成头程费用计算。
```text
线下预约 / 送货预报
@@ -25,11 +27,11 @@
头程费用试算与费用明细确认
```
二期不建设应收应付、对账、收付款、核销、发票、利润或总账。完成标准是每票货能够回答:何时到仓、实际收到什么、实测结果是什么、与申报差多少、差异是否已通知、最终放在哪个库位,以及产生了哪些头程费用和计算依据。
入库测量与计费不建设应收应付、对账、收付款、核销、发票、利润或总账。完成标准是每票货能够回答:何时到仓、实际收到什么、实测结果是什么、与申报差多少、差异是否已通知、最终放在哪个库位,以及产生了哪些头程费用和计算依据。
## 二、阶段边界
### 纳入二期
### 纳入入库测量与计费
- 客户取货或送货预报,以及线下预约结果、改期和取消记录。
- 平台收货仓到仓签到、分批收货、处理单元标签和收货冲正。
@@ -37,9 +39,9 @@
- 申报数据与实测数据对比、差异记录、客户通知和审计。
- 最小库位档案、上架任务、指定库位和位置历史。
- 头程费用项目、计费规则版本、费用试算、人工费用、调整、确认和费用明细。
- 服务端权限、租户隔离、状态、幂等、并发、文件鉴权、审计和历史快照。
- 服务端权限、基于兼容字段 `tenant_id` 的客户隔离、状态、幂等、并发、文件鉴权、审计和历史快照。
### 明确不纳入二期
### 明确不纳入入库测量与计费
- 应收应付台账、客户/供应商对账、账单确认和争议。
- 收款、付款、退款、核销、反核销、银行流水和在线支付。
@@ -47,7 +49,7 @@
- 会计科目、会计凭证和总账。
- 流程图头程“03 出仓”:智能排柜、订舱、拖车、PDA 拣货、装柜、报关和港务信息。
- 完整 WMS:可用库存、库存成本、常规移库、盘点、冻结、拣货、复核和出库。
- PDA 硬件或厂商 SDK;二期使用后台或响应式作业页。
- PDA 硬件或厂商 SDK;入库测量与计费使用后台或响应式作业页。
- 独立隔离区、差异等待客户确认、无预报货物认领和待认领区。
- 时间窗容量调度、自动服务商分配、地图、GPS 和外部承运商接口。
- FBA/海外目的仓及尾程到港、到仓、出仓和签收流程。
@@ -64,11 +66,11 @@
| P2-Q6 | 不考虑隔离区 | 不建设隔离库位、隔离上架和释放流程 |
| P2-Q7 | 不做库位容量校验 | 仅校验库位启停、仓库归属和权限合法性 |
| P2-Q8 | 称重、测量照片必传,大小不限制 | 产品不设业务大小上限;系统保留文件类型校验和可配置技术安全上限 |
| P2-Q9 | PDA 暂缓 | 二期使用后台或响应式作业页 |
| P2-Q9 | PDA 暂缓 | 入库测量与计费使用后台或响应式作业页 |
| P2-Q10 | 不考虑无预报货物 | 不建设无预报认领和正式订单绑定流程 |
| P2-Q11 | 永久保存 | 业务记录不自动删除;访问审计、备份和合规策略由运维补充 |
| P2-Q12 | 佳博 1324D 热敏标签打印机 | 开发前实机核验纸张、连接、驱动和指令协议 |
| P2-Q13 | 二期只做头程计费 | 费用结果不自动形成应收、应付、账单或收付款数据 |
| P2-Q13 | 入库测量与计费只做头程计费 | 费用结果不自动形成应收、应付、账单或收付款数据 |
## 四、角色与数据边界
@@ -123,7 +125,7 @@
### 6. 库位与上架
- 维护仓库、库区、库位编码、名称、状态和权限范围。
- 二期不做承重、箱数或体积容量校验,也不建设隔离区和待认领区。
- 入库测量与计费不做承重、箱数或体积容量校验,也不建设隔离区和待认领区。
- 上架任务关联收货批次、目标库位、执行人、状态和完成时间。
- 上架完成后写入处理单元当前位置和历史位置,为后续出仓提供输入。
@@ -134,7 +136,7 @@
- 头程订单、到仓实测或已确认业务事件触发费用试算,重复事件不得重复计费。
- 支持自动费用、人工补录、调整、确认、作废、查询和导出。
- 已确认费用不直接覆盖,变更通过调整记录留痕。
- 详细规则见 [二期头程计费模块规划](二期计费财务模块规划.md)。
- 详细规则见 [入库测量与计费头程计费模块规划](入库测量与计费计费财务模块规划.md)。
## 六、状态模型
@@ -201,11 +203,11 @@
- 创建取货或送货预报。
- 查看预约结果、到仓时间线、实测、公开照片、差异通知和上架结果。
- 如二期客户端展示头程费用,只显示本企业公开费用,不显示内部备注和其他企业数据。
- 如入库测量与计费客户端展示头程费用,只显示本企业公开费用,不显示内部备注和其他企业数据。
### 国内头程后端 `baiyue-firstleg/`
- 最终保证身份、租户、仓库数据范围、状态转换、幂等、并发和审计。
- 最终保证身份、客户归属、仓库数据范围、状态转换、幂等、并发和审计。
- 管理到仓单、收货批次、处理单元、标签、测量、差异通知、库位、上架、位置和冲正事务边界。
- 管理计费规则版本、费用生成幂等、三位向上取整、费用调整和历史复算。
- 文件访问使用不可预测标识和授权下载,不信任客户端文件名与 MIME 类型。
@@ -214,7 +216,7 @@
| 里程碑 | 交付目标 | 进入条件 |
|---|---|---|
| P2-M0 规则锁定 | 到仓契约、测量口径、头程计费边界和权限基线确认 | 一期订单及基础资料契约稳定 |
| P2-M0 规则锁定 | 到仓契约、测量口径、头程计费边界和权限基线确认 | 客户订单及基础资料契约稳定 |
| P2-M1 到仓预报 | 取货/送货预报及线下预约结果可记录 | 收货仓 API 可用 |
| P2-M2 到仓收货 | 签到、分批收货、标签、照片和冲正可追溯 | 文件服务和仓库权限可用 |
| P2-M3 测量差异 | 原始测量、三位向上取整、差异记录和通知可用 | 测量公式可用 |
@@ -226,7 +228,7 @@
| ID | 端 | 模块 | 交付内容 | 优先级 | 依赖 |
|---|---|---|---|---|---|
| P2-BASE-01 | 公共 | 到仓契约 | 状态、枚举、权限、事件、错误码和快照模型 | P0 | 一期订单契约 |
| P2-BASE-01 | 公共 | 到仓契约 | 状态、枚举、权限、事件、错误码和快照模型 | P0 | 客户订单契约 |
| P2-BASE-02 | 公共 | 数据模型 | 到仓单、批次、处理单元、标签、测量、差异、库位、位置、费用和审计 | P0 | P2-BASE-01 |
| P2-ADM-01 | 后台 | 到仓列表 | 查询、筛选、分页、详情、空态和异常态 | P0 | P2-BASE-01 |
| P2-ADM-02 | 后台 | 预约结果 | 记录、调整和取消线下预约结果 | P0 | P2-ADM-01 |
@@ -251,7 +253,7 @@
| P2-TEST-01 | 公共 | 自动化测试 | 越权、幂等、测量舍入、计费复算、标签、差异、位置、文件和审计 | P0 | 所有 P0 模块 |
| P2-REL-01 | 公共 | 发布验收 | 初始化仓库、库位、测量规则、标签和费用基础数据,联调、验收和发布 | P0 | P2-TEST-01 |
二期开发任务共 24 项。应收应付、对账、账单中心、收付款核销、发票和利润六项任务已根据产品确认从二期移除。
入库测量与计费开发任务共 24 项。应收应付、对账、账单中心、收付款核销、发票和利润六项任务已根据产品确认从入库测量与计费移除。
## 十一、测试与验收重点
@@ -276,7 +278,7 @@
| P2-Q15 | 计费维度、阶梯价、最低收费、封顶、组合价和优先级 | 先支持客户、往来单位、仓库、服务和生效区间 |
| P2-Q16 | 费用试算、生成、确认、调整和作废节点 | 实测完成试算,其他费用按已确认业务事件生成 |
回传中的“63”不作为业务结论。P2-Q13 已确认仅做头程计费;P2-Q17 至 P2-Q24 不纳入二期。
回传中的“63”不作为业务结论。P2-Q13 已确认仅做头程计费;P2-Q17 至 P2-Q24 不纳入入库测量与计费。
## 十三、建议实施顺序
@@ -287,5 +289,5 @@
5. 实现库位、上架任务和位置历史,不建设隔离和容量校验。
6. 确认 P2-Q14 至 Q16,建立头程费用项目和计费规则版本。
7. 接入实测和业务事件,完成费用试算、人工补录、调整和费用明细。
8. 完成租户隔离、幂等、计费复算、文件安全、审计和回归测试。
8. 完成跨客户隔离、幂等、计费复算、文件安全、审计和回归测试。
9. 使用脱敏初始化数据联调、验收和发布。
@@ -1,25 +1,34 @@
# 虫虫出海二期开发进度表:到仓与头程计费
# 虫虫出海入库测量与计费开发进度表:到仓与头程计费
> 创建日期:2026-07-28
> 更新日期:2026-07-31
> 当前阶段:开发已启动,需求确认并行
> 总体状态:到仓规则和范围已确认,3 项计费细节待补充;实际开发进度待负责人回填
二期严格以头程物流“02 到仓”和头程计费为范围。范围依据见 [二期开发规划](二期开发规划.md),确认结论见 [二期需求确认清单](二期需求确认清单.md)。原型只用于页面、字段和流程参考,不自动扩大二期范围。
入库测量与计费严格以头程物流“02 到仓”和头程计费为范围。范围依据见 [入库测量与计费开发规划](入库测量与计费开发规划.md),确认结论见 [入库测量与计费需求确认清单](入库测量与计费需求确认清单.md)。原型只用于页面、字段和流程参考,不自动扩大入库测量与计费范围。
## 零、2026-08-05 增量状态
| 任务 | 范围 | 后端 | 前端 | 验证 | 备注 |
|---|---|---|---|---|---|
| `P2-WH-OSF-01` | 海外仓客户级天数阶梯仓储费基础资料 CRUD | 已完成 | 不适用 | Warehouse 全量 91 项、CRUD 定向 6 项通过 | 复用 Warehouse 服务和数据库,不参与当前自动计费 |
| `P2-ADM-12` | 海外仓阶梯费用平台端页面 | 接口、权限和 Gateway 路由已完成 | 待实现与联调 | 待前端 test、typecheck、build 和浏览器验收 | 契约见《海外仓阶梯费用前端联调说明-2026-08-05》 |
数据库变更只追加到 `D:\baiyue-firstleg\deploy\sql\头程数据库统一增量-MySQL8.sql`,不再创建日期增量脚本。
## 一、进度口径
- 开发任务共 24 项;未收到具体完成量、负责人和日期前,不虚填开发进度。
- 需求问题共 24 项:已确认 12 项、暂缓 1 项、待确认 3 项、不纳入二期 8 项。
- 需求问题共 24 项:已确认 12 项、暂缓 1 项、待确认 3 项、不纳入入库测量与计费 8 项。
- 当前会议只需处理 P2-Q14、P2-Q15、P2-Q16。
- P2-Q9 暂缓,二期不接 PDA;P2-Q17 至 P2-Q24 不纳入二期。
- P2-Q9 暂缓,入库测量与计费不接 PDA;P2-Q17 至 P2-Q24 不纳入入库测量与计费。
- 应收应付、对账、收付款、核销、发票、汇率结算、利润和总账不进入任务、排期和验收。
## 二、总体进度
| 工作流 | 范围 | 状态 | 开发进度 | 需求状态 | 负责人 | 备注 |
|---|---|---|---:|---|---|---|
| 规则与数据 | 到仓契约、数据模型、权限、文件和审计 | 待开始 | 0% | 到仓规则已确认 | 待分配 | 一期订单及基础资料契约是前置依赖 |
| 规则与数据 | 到仓契约、数据模型、权限、文件和审计 | 待开始 | 0% | 到仓规则已确认 | 待分配 | 客户订单及基础资料契约是前置依赖 |
| 到仓预报 | 取货/送货预报和线下预约结果记录 | 待开始 | 0% | Q2、Q3 已确认 | 待分配 | 不做容量调度和系统服务商分配 |
| 到仓收货 | 签到、分批收货、标签、照片、异常和冲正 | 待开始 | 0% | Q1、Q8、Q10、Q12 已确认 | 待分配 | 不建设无预报认领流程 |
| 测量差异 | 实测、三位向上取整、差异记录和客户通知 | 待开始 | 0% | Q4、Q5、Q6 已确认 | 待分配 | 差异无需客户确认,不阻塞上架或计费 |
@@ -31,7 +40,7 @@
| ID | 里程碑 | 端 | 模块 | 功能/交付内容 | 优先级 | 状态 | 进度 | 原型覆盖 | 需求阻塞 | 依赖 | 负责人 | 计划开始 | 计划完成 | 备注 |
|---|---|---|---|---|---|---|---:|---|---|---|---|---|---|---|
| P2-BASE-01 | P2-M0 | 公共 | 到仓契约 | 状态、枚举、权限、事件、错误码和快照模型 | P0 | 待开始 | 0% | 部分 | - | 一期订单契约 | 待分配 | 待排期 | 待排期 | 按已确认到仓规则建设 |
| P2-BASE-01 | P2-M0 | 公共 | 到仓契约 | 状态、枚举、权限、事件、错误码和快照模型 | P0 | 待开始 | 0% | 部分 | - | 客户订单契约 | 待分配 | 待排期 | 待排期 | 按已确认到仓规则建设 |
| P2-BASE-02 | P2-M0 | 公共 | 数据模型 | 到仓单、批次、处理单元、标签、测量、差异、库位、位置、费用和审计 | P0 | 待开始 | 0% | 部分 | - | P2-BASE-01 | 待分配 | 待排期 | 待排期 | 不包含后续财务对象 |
| P2-ADM-01 | P2-M1 | 后台 | 到仓列表 | 查询、筛选、分页、详情、空态和异常态 | P0 | 待开始 | 0% | 较完整 | - | P2-BASE-01 | 待分配 | 待排期 | 待排期 | 后台原型可参考 |
| P2-ADM-02 | P2-M1 | 后台 | 预约结果 | 记录、调整和取消线下预约结果 | P0 | 待开始 | 0% | 部分 | - | P2-ADM-01 | 待分配 | 待排期 | 待排期 | 不建设容量调度和自动分配 |
@@ -46,7 +55,7 @@
| P2-HOLD-01 | P2-M3 | 公共 | 异常记录 | 非差异类异常、责任人、证据、处理结果和审计 | P1 | 待开始 | 0% | 部分 | - | P2-BASE-02 | 待分配 | 待排期 | 待排期 | 不建设隔离区或差异暂停 |
| P2-LOC-01 | P2-M4 | 后台 | 库位维护 | 库区、库位编码、状态和权限范围 | P0 | 待开始 | 0% | 较完整 | - | P2-BASE-02 | 待分配 | 待排期 | 待排期 | 不做容量校验 |
| P2-PUT-01 | P2-M4 | 后台 | 上架任务 | 创建、分配、拆分、异常和完成 | P0 | 待开始 | 0% | 较完整 | - | P2-LOC-01、P2-WH-02 | 待分配 | 待排期 | 待排期 | 不做隔离上架 |
| P2-POS-01 | P2-M4 | 公共 | 位置记录 | 处理单元当前位置和进入/移出历史 | P0 | 待开始 | 0% | 部分 | - | P2-PUT-01 | 待分配 | 待排期 | 待排期 | 二期不建设完整库存系统 |
| P2-POS-01 | P2-M4 | 公共 | 位置记录 | 处理单元当前位置和进入/移出历史 | P0 | 待开始 | 0% | 部分 | - | P2-PUT-01 | 待分配 | 待排期 | 待排期 | 入库测量与计费不建设完整库存系统 |
| P2-SEC-01 | P2-M0 | 公共 | 文件与保留 | 文件鉴权、类型/安全校验、访问审计、永久保存和备份边界 | P0 | 待开始 | 0% | 无 | - | P2-WH-01 | 待分配 | 待排期 | 待排期 | 产品不设业务大小上限 |
| P2-TIME-01 | P2-M6 | 公共 | 时间线通知 | 对客事件、差异通知和失败补偿记录 | P1 | 待开始 | 0% | 部分 | - | 核心流程完成 | 待分配 | 待排期 | 待排期 | 外部通知渠道另行配置 |
| P2-FEE-01 | P2-M5 | 后台 | 费用项目 | 头程费用项目、单位、币种、税务属性和启停 | P0 | 需求确认中 | 0% | 较完整 | Q14 | P2-BASE-01 | 待分配 | 待排期 | 待排期 | 仅头程费用白名单 |
@@ -60,7 +69,7 @@
| 里程碑 | 交付目标 | 状态 | 开发进度 | 进入条件 | 计划完成 |
|---|---|---|---:|---|---|
| P2-M0 规则锁定 | 到仓契约、数据关系、权限和文件基线 | 待开始 | 0% | 一期订单及基础资料契约稳定 | 待排期 |
| P2-M0 规则锁定 | 到仓契约、数据关系、权限和文件基线 | 待开始 | 0% | 客户订单及基础资料契约稳定 | 待排期 |
| P2-M1 到仓预报 | 取货/送货预报和线下预约结果可记录 | 待开始 | 0% | 收货仓 API 可用 | 待排期 |
| P2-M2 到仓收货 | 签到、分批收货、标签、照片和冲正可追溯 | 待开始 | 0% | 文件服务、仓库权限及标签设备可用 | 待排期 |
| P2-M3 测量差异 | 原始测量、三位向上取整、差异记录和通知可用 | 待开始 | 0% | 测量规则可用 | 待排期 |
@@ -70,7 +79,7 @@
## 五、原型映射与范围边界
| 流程/能力 | 原型覆盖 | 二期任务 | 二期处理 |
| 流程/能力 | 原型覆盖 | 入库测量与计费任务 | 入库测量与计费处理 |
|---|---|---|---|
| 取货/送货预报 | 部分 | P2-ADM-02、P2-CLI-01 | 记录线下预约结果,不做容量调度 |
| 到仓收货 | 部分 | P2-WH-01、P2-REV-01 | 分批收货和冲正;不建设无预报认领 |
@@ -79,19 +88,19 @@
| 指定库位 | 较完整 | P2-LOC-01、P2-PUT-01、P2-POS-01 | 不做容量校验和隔离区 |
| 标签打印 | 部分 | P2-LABEL-01 | 使用佳博 1324D 实机适配 |
| 头程费用 | 部分 | P2-FEE-01、P2-RATE-01、P2-CALC-01、P2-FEE-02 | 只做费用项目、规则、试算、调整和明细 |
| 应收应付、对账、收付款、核销 | 原型存在 | - | 不纳入二期 |
| 发票、汇率结算、利润和财务报表 | 原型存在 | - | 不纳入二期 |
| PDA | 有“03 出仓”原型 | - | Q9 暂缓,二期不接 PDA |
| 完整库存/WMS | 原型存在 | - | 二期只维护处理单元位置记录 |
| 应收应付、对账、收付款、核销 | 原型存在 | - | 不纳入入库测量与计费 |
| 发票、汇率结算、利润和财务报表 | 原型存在 | - | 不纳入入库测量与计费 |
| PDA | 有“03 出仓”原型 | - | Q9 暂缓,入库测量与计费不接 PDA |
| 完整库存/WMS | 原型存在 | - | 入库测量与计费只维护处理单元位置记录 |
## 六、需求确认进度
| 状态 | 数量 | 编号 | 说明 |
|---|---:|---|---|
| 已确认 | 12 | Q1-Q8、Q10-Q13 | 到仓规则和“仅头程计费”已进入基线 |
| 暂缓 | 1 | Q9 | 二期不接 PDA |
| 暂缓 | 1 | Q9 | 入库测量与计费不接 PDA |
| 待确认 | 3 | Q14-Q16 | 费用白名单、计费复杂度、费用生成节点 |
| 不纳入二期 | 8 | Q17-Q24 | 后续财务与结算能力 |
| 不纳入入库测量与计费 | 8 | Q17-Q24 | 后续财务与结算能力 |
## 七、测试与验收重点
@@ -112,4 +121,4 @@
- 原型覆盖统一使用:较完整、部分、无、不适用;原型覆盖不得换算为开发进度。
- 负责人、计划开始和计划完成由排期会议填写;未获得实际数据时保持“待分配/待排期”。
- 开始编码后才能填写大于 0% 的开发进度;开发、测试和验收完成后才能标记“已完成”。
- 需求结论先回写 [二期需求确认清单](二期需求确认清单.md),再同步本表、开发规划、任务依赖和验收标准。
- 需求结论先回写 [入库测量与计费需求确认清单](入库测量与计费需求确认清单.md),再同步本表、开发规划、任务依赖和验收标准。
@@ -1,15 +1,15 @@
# 虫虫出海二期头程计费模块规划
# 虫虫出海入库测量与计费头程计费模块规划
> 创建日期:2026-07-28
> 更新日期:2026-07-31
> 状态:产品已确认范围,计费规则细节确认中
> 历史文件名保留:`二期计费财务模块规划.md`
> 关联规划:[二期开发规划](二期开发规划.md)
> 产品确认记录:[2026-07-31 二期产品确认合并记录](产品回传/2026-07-31-产品确认合并记录.md)
> 创建日期:2026-07-28
> 更新日期:2026-07-31
> 状态:产品已确认范围,计费规则细节确认中
> 历史文件名保留:`入库测量与计费计费财务模块规划.md`
> 关联规划:[入库测量与计费开发规划](入库测量与计费开发规划.md)
> 产品确认记录:[2026-07-31 入库测量与计费产品确认合并记录](产品回传/2026-07-31-产品确认合并记录.md)
## 一、产品确认的范围结论
二期只做头程业务的费用计算,不建设后续财务闭环。计费结果是头程订单的业务费用明细,不自动形成应收、应付、账单、付款、核销、发票或利润数据。
入库测量与计费只做头程业务的费用计算,不建设后续财务闭环。计费结果是头程订单的业务费用明细,不自动形成应收、应付、账单、付款、核销、发票或利润数据。
```text
头程订单 / 到仓实测 / 业务事件
@@ -23,7 +23,7 @@
头程费用明细确认
```
## 二、二期纳入范围
## 二、入库测量与计费纳入范围
### 1. 头程费用项目
@@ -63,7 +63,7 @@
费用项目、规则发布、试算、人工补录、调整、确认、作废和导出均需记录审计日志。
## 三、二期明确不纳入
## 三、入库测量与计费明确不纳入
- 应收、应付台账及账龄。
- 客户或供应商对账单、结算周期、账单确认和争议处理。
@@ -73,7 +73,7 @@
- 在线支付、银企直连、银行流水自动认领。
- 会计科目、会计凭证、总账和法定财务报表。
原型中的上述页面仅作为后续阶段参考,不进入二期任务、排期或验收。
原型中的上述页面仅作为后续阶段参考,不进入入库测量与计费任务、排期或验收。
## 四、核心数据对象
@@ -104,7 +104,7 @@
| P2-Q15 | 计费规则维度,以及是否支持阶梯价、最低收费、封顶、组合价和冲突优先级 | 回传中的“63”无业务含义,未合并 |
| P2-Q16 | 各类费用在哪个节点试算、生成、确认和作废,人工费用何时生效 | 回传中的“63”无业务含义,未合并 |
P2-Q13 已确认:二期只做到头程费用计算。P2-Q17 至 P2-Q24 对应的应收应付、对账、收付款、发票、汇率结算和利润能力不适用于二期。
P2-Q13 已确认:入库测量与计费只做到头程费用计算。P2-Q17 至 P2-Q24 对应的应收应付、对账、收付款、发票、汇率结算和利润能力不适用于入库测量与计费。
## 七、验收重点
@@ -1,15 +1,15 @@
# 二期头程计费需求确认表
# 入库测量与计费头程计费需求确认表
> 更新日期:2026-07-31
> 状态:产品已确认二期只做头程计费,当前仅剩 3 项计费细节待确认
> 历史文件名保留:`二期计费财务需求确认表.md`
> 关联文档:[二期头程计费模块规划](二期计费财务模块规划.md)、[产品确认合并记录](产品回传/2026-07-31-产品确认合并记录.md)
> 更新日期:2026-07-31
> 状态:产品已确认入库测量与计费只做头程计费,当前仅剩 3 项计费细节待确认
> 历史文件名保留:`入库测量与计费计费财务需求确认表.md`
> 关联文档:[入库测量与计费头程计费模块规划](入库测量与计费计费财务模块规划.md)、[产品确认合并记录](产品回传/2026-07-31-产品确认合并记录.md)
## 一、已确认的范围
| 编号 | 产品结论 | 二期开发口径 | 状态 |
| 编号 | 产品结论 | 入库测量与计费开发口径 | 状态 |
|---|---|---|---|
| P2-Q13 | 二期只做头程计费 | 建设头程费用项目、计费规则、费用试算、人工补录、调整、确认、作废和费用明细 | 已确认 |
| P2-Q13 | 入库测量与计费只做头程计费 | 建设头程费用项目、计费规则、费用试算、人工补录、调整、确认、作废和费用明细 | 已确认 |
头程费用结果不自动形成应收、应付、对账单、收付款、核销、发票、利润或总账数据。
@@ -29,24 +29,24 @@
|---|---|---|---|---|---|---|---|---|
| 待填写 | 待填写 | 待填写 | 待填写 | CNY | 待填写 | 待填写 | 待填写 | 待填写 |
## 三、明确不纳入二期
## 三、明确不纳入入库测量与计费
| 编号 | 主题 | 二期处理 |
| 编号 | 主题 | 入库测量与计费处理 |
|---|---|---|
| P2-Q17 | 汇率结算和本位币折算 | 不纳入二期 |
| P2-Q18 | 财务税务结算口径 | 不纳入二期;费用项目如需税率字段,按 Q14 配置 |
| P2-Q19 | 财务费用审批、应收应付审批 | 不纳入二期;仅保留头程费用调整审计 |
| P2-Q20 | 客户/供应商对账和结算周期 | 不纳入二期 |
| P2-Q21 | 账单确认、争议和关闭 | 不纳入二期 |
| P2-Q22 | 收付款、核销、反核销和银行流水 | 不纳入二期 |
| P2-Q23 | 发票登记和外部开票平台 | 不纳入二期 |
| P2-Q24 | 利润、利润率和财务报表 | 不纳入二期 |
| P2-Q17 | 汇率结算和本位币折算 | 不纳入入库测量与计费 |
| P2-Q18 | 财务税务结算口径 | 不纳入入库测量与计费;费用项目如需税率字段,按 Q14 配置 |
| P2-Q19 | 财务费用审批、应收应付审批 | 不纳入入库测量与计费;仅保留头程费用调整审计 |
| P2-Q20 | 客户/供应商对账和结算周期 | 不纳入入库测量与计费 |
| P2-Q21 | 账单确认、争议和关闭 | 不纳入入库测量与计费 |
| P2-Q22 | 收付款、核销、反核销和银行流水 | 不纳入入库测量与计费 |
| P2-Q23 | 发票登记和外部开票平台 | 不纳入入库测量与计费 |
| P2-Q24 | 利润、利润率和财务报表 | 不纳入入库测量与计费 |
## 四、会议填写规则
- 认可当前建议:将建议复制到“最终结论”,状态改为“已确认”。
- 修改当前建议:填写会议确定的可开发口径,状态改为“已确认”。
- 暂时无法确定:状态改为“暂缓”,并写清二期临时处理方式。
- 暂时无法确定:状态改为“暂缓”,并写清入库测量与计费临时处理方式。
- 不需要填写确认人和确认时间。
- 确认后保留本次会议文件,不覆盖产品原始回传;新一轮确认使用新版本文件名。
@@ -0,0 +1,122 @@
# 入库测量与计费费用项目数据归属决策记录
> 形成日期:2026-08-10
> 状态:已确认
> 决策范围:`费用类型.xls` 中 110 条费用类型的数据归属、初始化和存量迁移
> 关联确认项:[入库测量与计费 V2 需求确认清单](入库测量与计费V2需求确认清单.md) C6、[入库测量与计费头程计费需求确认表](入库测量与计费计费财务需求确认表.md) P2-Q14
## 一、最终结论
- 费用项目是平台公共主数据,`fl_fee_item.tenant_id` 固定为 `0`,全平台使用同一套费用编码和项目定义。
- 客户费用明细仍是客户隔离数据,`fl_inbound_fee_detail.tenant_id > 0`;其 `fee_item_id` 直接引用 `tenant_id = 0` 的公共费用项目。
- 不再按客户复制费用项目,不建立“客户 ID + 模板版本”的初始化副本,也不允许用客户级费用项目承接公共定义。
- `tenant_id = 0` 只是平台技术作用域,不增加用户可见的租户层级、租户选择器或租户级运营流程。
- 本结论只确定费用项目主数据归属。计费单位、币种、税率、自动/人工、触发节点、价格规则和结算范围仍按 C6/P2-Q14 单独确认;110 条公共项目处于 `ACTIVE` 不等于 110 条都自动参与入库测量与计费计费。
## 二、源文件核对
受控源文件:`费用类型.xls`。
| 核对项 | 结果 |
|---|---|
| SHA-256 | `395C9CA71816E79C7745E224E63CF79A4AB782140364F63C8374B396DF38CDB4` |
| 工作表 | `费用类型` |
| 数据范围 | 1 行表头 + 110 条数据,共 111 行、13 列 |
| 国内/国际 | 国内 84 条、国际 26 条 |
| 真实表头 | 分类、国内国际、费用类型名称、货柜应付、货柜应收、仓储应付、仓储应收、平摊费用、说明、创建人、创建日期、更新人、更新日期 |
| 源编码 | 源表没有费用编码列 |
| 语义重复 | `国内国际 + 费用类型名称` 无重复 |
源表不包含计费单位、币种、税率、价格、公式或触发节点,不能从费用名称推断这些配置。
## 三、初始化口径
### 3.1 稳定标识
- 按受控源表数据行序生成固定编码 `FEE_TYPE_001` 至 `FEE_TYPE_110`。编码一经发布不得因排序、展示名称或分类调整重新生成。
- 固定主键为 `193000000001000001` 至 `193000000001000110`,编码序号与主键末三位一一对应。
- 110 条记录全部写入 `tenant_id = 0`、`status = ACTIVE`、`deleted = 0`。
- `fee_code` 使用平台全局唯一索引,不再使用 `(tenant_id, fee_code)` 客户内唯一索引。
- 财务自动计费另使用固定系统项目 `FBA_HEAD_FREIGHT`(`INTERNATIONAL`、仓储应收),它不属于 Excel 110 条受控种子;完整正式目录因此为 111 条。该系统项目由初始化 SQL 创建,业务请求不得运行期补建。
### 3.2 字段映射
| Excel 字段 | 数据库字段 | 规则 |
|---|---|---|
| 分类 | `category` | 去除首尾空白,保留源值 |
| 国内国际 | `trade_scope` | 国内映射 `DOMESTIC`,国际映射 `INTERNATIONAL` |
| 费用类型名称 | `fee_type_name` | 去除首尾空白,保留业务名称 |
| 货柜应付/货柜应收 | `pickup_payable` / `pickup_receivable` | “参与”映射 `1`,其他值映射 `0` |
| 仓储应付/仓储应收 | `warehouse_payable` / `warehouse_receivable` | “参与”映射 `1`,其他值映射 `0` |
| 平摊费用 | `allocation_fee` | “参与”映射 `1`,其他值映射 `0` |
| 说明 | `description` | 空值写 `NULL`,非空保留源值 |
| 创建人/创建日期 | `created_by`、`created_by_name`、`created_at` | 纯数字创建人可写入 ID;原文本始终保存在名称字段;日期按源日期零时刻写入 |
| 更新人/更新日期 | `updated_by`、`updated_by_name`、`updated_at` | 有源值时保留;缺失时沿用创建信息,避免用迁移执行时间覆盖历史 |
若目标固定主键或固定编码已有完全一致的公共记录,重复执行保持原记录及其历史字段不变;若已有记录状态、删除标记或业务语义不同,按冲突处理,不自动覆盖。
## 四、存量迁移
迁移采用“先预检、后写入”的安全顺序,不对客户级费用项目直接执行批量 `UPDATE tenant_id = 0`。
1. 建立 110 条临时种子并校验总数、国内/国际数量、固定编码和语义键唯一性。
2. 预检固定主键占用、平台同码异义、平台同义异码、平台空编码和客户存量映射完整性。
3. 客户级项目只在完整业务语义一致时允许映射。空编码和历史兼容编码 `MANUAL_<原ID>` 可按 `trade_scope + fee_type_name` 映射;其他异码、字段差异或无法匹配项均中止。
4. 预检费用明细归属:明细必须属于客户;迁移前若明细引用客户级项目,该项目必须属于同一客户。任何跨客户引用均中止。
5. 幂等插入缺失的公共费用项目,建立“旧客户项目 ID -> 固定公共项目 ID”临时映射。
6. 先更新 `fl_inbound_fee_detail.fee_item_id`,再删除已完成映射的客户级主数据,保持外键始终有效。
7. 将 `uk_fee_item_code` 重建为全局单列唯一索引,并将 `fee_code` 收紧为非空。
冲突时脚本先返回冲突行再 `SIGNAL SQLSTATE '45000'`。结果集使用以下 `conflict_type`:
- `FIXED_ID_CONFLICT`
- `PUBLIC_CODE_CONFLICT`
- `PUBLIC_SEMANTIC_CONFLICT`
- `PUBLIC_EMPTY_CODE`
- `UNMAPPED_CUSTOMER_ITEM`
- `CUSTOMER_CODE_CONFLICT`
- `CUSTOMER_SEMANTIC_CONFLICT`
- `CROSS_CUSTOMER_DETAIL_REFERENCE`
不得绕过冲突预检继续执行,也不得通过名称模糊匹配、临时改码或忽略历史引用来强行合并。冲突应先导出、由业务确认唯一映射,再调整受控迁移脚本。
## 五、幂等与强校验
同一版本脚本重复执行必须满足:
- 110 条固定 ID 和固定编码已存在时不重复插入,不覆盖可保留的创建、更新历史。
- 不再存在 `tenant_id > 0` 的 `fl_fee_item`。
- 110 条固定公共项目全部为 `tenant_id = 0`、`ACTIVE`、`deleted = 0`。
- 系统项目 `FBA_HEAD_FREIGHT` 唯一存在且为 `tenant_id = 0`、`ACTIVE`、`deleted = 0`,正式目录合计 111 条(国内 84、国际 27)。
- `uk_fee_item_code` 恰好是 `fee_code` 单列全局唯一索引,`fee_code` 非空。
- 所有费用明细 `tenant_id > 0`,且引用的费用项目 `tenant_id = 0`。
- 固定编码、固定主键、国内 84 条、国际 26 条和合计 110 条保持一致。
模块迁移位于 `firstleg/src/main/resources/db/phase2-published-freight-detail-migration.sql`;测试和存量环境仍只通过 `deploy/sql/头程数据库统一增量-MySQL8.sql` 执行。两个入口必须保持相同种子和迁移断言。
## 六、范围边界
本决策不扩展以下能力:
- 应收应付、账龄、授信、账单、对账、收付款、核销、发票和税务申报。
- 汇率结算、本位币折算、会计科目、凭证、总账、利润和法定财务报表。
- 仅为覆盖 110 条费用而建设的通用计费表达式、复杂审批或客户自定义费用平台。
- 在初始化脚本中补造计费单位、默认币种、税率、价格、公式、触发节点或自动计费规则。
## 七、验证记录
- 已只读核对受控 Excel 的工作表、13 个表头、110 条记录、84/26 范围和 SHA-256。
- 已对模块迁移和统一增量做静态 SQL 审查,并核对两处 110 条种子完全一致。
- 本地未启动 Java、Nacos 或 MySQL,也未连接测试环境执行数据库变更;因此尚无真实存量数据冲突结果、外键重映射结果或重复执行数据库证据。
- 上线前先用只读查询核对存量规模并完成备份;实际冲突预检由统一增量在任何费用数据改写前执行。出现冲突结果和 `SIGNAL` 时必须停止,预检无冲突后脚本才进入外键重映射与初始化,最终以末尾强校验和唯一 `PASS` 为准。
## 八、确认记录
| 决策项 | 最终结论 | 状态 |
|---|---|---|
| 数据归属 | `fl_fee_item.tenant_id = 0`,平台公共主数据 | 已确认 |
| 客户费用明细 | `tenant_id > 0`,引用公共 `fee_item_id` | 已确认 |
| 初始化范围 | Excel 110 条全部初始化为 `ACTIVE` 公共项目 | 已确认 |
| 编码策略 | `FEE_TYPE_001` 至 `FEE_TYPE_110`,固定主键一一对应 | 已确认 |
| 客户级存量处理 | 完整预检、外键重映射、删除已映射副本;冲突中止 | 已确认 |
| 计费字段与规则 | 继续由 C6/P2-Q14 单独确认,不从 Excel 推断 | 未被本决策扩大 |
@@ -0,0 +1,446 @@
# 虫虫出海入库测量与计费需求优化版 V2:测量、计费、托盘入库闭环
> 形成日期:2026-08-01
> 文档状态:待业务审核
> 依据:入库测量与计费原型、现有入库测量与计费需求优化稿及 2026-08-01 新增流程说明
> 本文只定义入库测量与计费范围和业务契约,不代表功能已经开发完成。
> 主体模型:本文业务数据中的“租户”历史术语与 `tenantId` / `tenant_id` 字段,当前均按客户归属兼容语义理解;产品只有“平台—客户”两级。`tenant_id=0` 是平台身份、RBAC 和平台公共仓储资源技术作用域,客户往来单位、订单、文件和费用使用所属客户 `tenant_id>0`。入库测量与计费不引入真实租户层。
> 技术实现状态更新(2026-08-04):任务 `019fc6f9-8dcf-74e1-bc68-d42f15d7802a` 已完成核心正常主链路开发,并通过本地测试 MySQL 和隔离端口真实 API 回归。产品/业务待确认项仍以第九章和《入库测量与计费 V2 需求确认清单》为准。
> 订单衔接规则更新(2026-08-07,已确认):草稿不生成入仓码;订单提交进入待审核时立即生成并固定唯一入仓码。平台审核无需先选择承运商;审核通过后才创建正式入库单并沿用该码,承运商可在后续履约或计费前补充。
## 一、结论
入库测量与计费主流程应从原来的“人工测量—测量审核—接收审核—人工计费—填写一个库位”调整为:
```text
订单与客户头程订单提交待审核
→ 生成并固定唯一入仓码
→ 平台审核通过(承运商不是审核前置条件)
→ 创建正式入库单并沿用该入仓码
→ 第三方测量设备按入仓码回传长宽高
→ 上传称重图片并由 OCR 识别重量
→ 人工校正 OCR 结果并汇总实际重量
→ 测量数据审核
→ 按客户规则、船司和 FBA 目的仓自动试算
→ 人工确认费用
→ 点击“发送费用给客户”
→ 拆分托盘并分配库位
→ 占用库位、入库成功、费用对客户可见
→ 异步通知客户
```
“发送费用给客户”是入库测量与计费业务完成节点,也是入库成功节点。原方案中的独立“接收审核”不再作为入库前置节点;如页面需要保留,可改名为“入库确认”,其核心动作就是确认费用并完成托盘、库位占用。
入库测量与计费不新增微服务:
- 入库单、测量数据、审核、计费试算和费用快照放在头程服务。
- 托盘基础资料、库位及库位占用放在仓库服务。
- 测量图、称重图继续使用文件服务。
- 客户通知通过现有事件桥接服务发送,不在入库事务中同步调用外部消息渠道。
- 权限继续复用 IAM,所有后台按钮做到客户归属、企业、仓库数据范围校验。
## 二、核心业务规则
### 2.1 测量审核失败是否允许入库
保留 Nacos 动态开关,默认关闭:
```yaml
firstleg:
inbound:
allow-rejected-measurement: false
```
建议配置归属:
- Data ID:`firstleg-${spring.profiles.active}.yaml`
- Group:`BAIYUE`
- 默认值:代码和 Nacos 均为 `false`,避免 Nacos 配置缺失时意外放行。
开关语义:
| 配置值 | 规则 |
|---|---|
| `false` | 只有测量审核通过,才能确认费用、发送费用和入库;审核失败必须修正后重新提交。 |
| `true` | 测量审核失败的入库单允许由有“异常放行”权限的人员继续;必须填写放行原因。 |
即使开关开启,也不能让所有失败单自动入库。后端还必须同时校验按钮权限 `firstleg:inbound:exception-release`,记录操作人、原因、审核失败原因、开关当时值和时间。作废单、缺少费用快照或没有可用库位的单据始终不得放行。
### 2.2 第三方长宽高测量
第三方设备只通过入仓码绑定入库单,不接受第三方直接传内部数据库主键。一个入仓码可回传多条箱规测量明细,每条回传必须带第三方事件号以保证幂等。
建议开放接口:
```http
POST /openapi/v1/inbound-measurements
```
请求头:
```text
X-App-Key: 分配给测量服务商的应用标识
X-Timestamp: Unix 毫秒时间戳
X-Nonce: 随机串
X-Signature: HMAC-SHA256 签名
Idempotency-Key: 第三方事件号
```
请求示例:
```json
{
"eventNo": "M202608010001",
"warehouseCode": "CN-YW-01",
"inboundCode": "RK202608010001",
"deviceCode": "DEVICE-01",
"measuredAt": "2026-08-01T10:30:00+08:00",
"items": [
{
"itemNo": "001",
"lengthCm": 50.20,
"widthCm": 40.10,
"heightCm": 30.00,
"quantity": 5,
"sourceImageUrl": null
}
]
}
```
统一响应示例:
```json
{
"code": "0",
"message": "成功",
"data": {
"eventNo": "M202608010001",
"inboundCode": "RK202608010001",
"accepted": true
},
"requestId": "...",
"timestamp": 1785541800000
}
```
接口校验:
- 入仓码必须存在,且属于请求中的仓库和客户归属关系。
- 入库单必须处于待测量或测量被驳回状态;已入库、已作废、费用已发送的数据不得覆盖。
- 长宽高必须大于 0,单位统一为厘米;数量必须为正整数。
- 同一个 `appKey + eventNo` 重复请求返回第一次结果,不重复新增明细。
- 第三方原始报文、签名主体、处理结果和请求时间单独留档,业务表保存标准化后的数据。
- 回调接口只接收测量结果,不直接审核、计费、占用库位或改变入库状态。
建议同时提供查询接口,供设备确认处理结果:
```http
GET /openapi/v1/inbound-measurements/events/{eventNo}
```
### 2.3 OCR 重量识别与人工校正
重量数据来自称重图片,而不是长宽高设备。前端先把图片上传文件中心,再把 `fileId` 提交给头程服务识别,避免业务服务接收和长期保存大文件。
建议接口:
```http
POST /api/platform/inbounds/{inboundId}/weight-images/recognize
PUT /api/platform/inbounds/{inboundId}/weight-results/{resultId}
POST /api/platform/inbounds/{inboundId}/weight-results/confirm
```
识别请求只传文件标识:
```json
{
"fileIds": ["file-001", "file-002"]
}
```
每张图片形成一条结果,至少保存:图片、OCR 原始文本、OCR 原始重量、置信度、修正后重量、修正人、修正原因、确认状态。总实际重量由所有“已确认且有效”的修正后重量累加,禁止前端直接传一个不可追溯的总重量。
规则:
- OCR 结果允许人工修改,但不得覆盖原始识别值。
- 无法识别、置信度过低或单位不明时标记为“待人工确认”。
- 支持公斤和磅,服务端统一换算成 KG,原单位和原值必须保留。
- 同一图片不得重复计重;替换、删除图片必须留下操作记录。
- 测量提交审核前,至少上传并确认一张称重图片;即使整票只有一箱也不得免称重。所有称重图片必须已确认,且总重量大于 0。
### 2.4 FBA 计费范围
入库测量与计费只支持 FBA 目的仓计费,不做完整财务、账单、收付款、核销和利润模块。
计费匹配顺序:
1. 根据客户归属、业务客户和生效时间选择客户计费规则版本;两类客户含义必须按字段契约区分。
2. 根据起运仓、渠道/计费类型、船司、FBA 目的仓和生效时间匹配船司价格。
3. 计算实测体积、实重和折算量。
4. 按客户规则确定 KG 或 CBM 计费口径,并取实际量与折算量中的较大值。
5. 生成费用试算明细,人工确认后形成不可变费用快照。
包税、按 KG 计费:
```text
体积重(kg) = 实测体积(CBM) × 167
计费重量(kg) = max(实际重量(kg), 体积重(kg))
基础费用 = 计费重量 × KG 单价
```
不包税、按 CBM 计费:
```text
重量折算体积(CBM) = 实际重量(kg) ÷ 363
计费体积(CBM) = max(实测体积(CBM), 重量折算体积(CBM))
基础费用 = 计费体积 × CBM 单价
```
其中 `167`、`363` 只是当前业务给出的默认示例,必须配置在客户规则版本中,不得硬编码。金额还可叠加船司价格表中明确配置的附加费;入库测量与计费头程/FBA 计费不支持阶梯价、组合优惠和复杂表达式。Warehouse 服务中的海外仓客户级天数阶梯仓储费仅为基础资料 CRUD,当前不参与本流程自动计费。
费用单必须保存以下快照,避免基础资料后续修改影响历史订单:
- 客户规则 ID、版本、计费类型、换算系数和舍入规则。
- 船司价格 ID、版本、船司、起运仓、FBA 目的仓、有效期和币种。
- 实测体积、实际重量、折算量、最终计费量、单价、附加费和总金额。
- 试算人、确认人、确认时间,以及是否异常放行。
无法唯一匹配客户规则或船司价格时,不允许发送费用和入库;返回明确错误,交由运营补充配置。
### 2.5 发送费用与入库成功
后台按钮:`发送费用给客户`。建议权限码:`firstleg:inbound:send-fee`。
点击前必须满足:
- 入库单未作废、未入库、费用未发送。
- 长宽高测量数据完整,重量图片均已确认。
- 测量审核通过;或异常放行开关开启、操作人有权限且填写原因。
- 费用已按当前有效规则重新试算并由操作人确认。
- 已选择足够数量的可用托盘和库位。
成功后一次业务操作应产生以下结果:
1. 锁定费用快照,不再允许原地覆盖。
2. 生成托盘分配明细。
3. 在仓库服务预占并确认库位占用。
4. 入库单状态变为 `INBOUNDED`,记录入库人和入库时间。
5. 费用状态变为 `SENT`,客户侧可只读查看。
6. 写入“费用已发送”领域事件,由事件桥接服务异步通知客户。
客户消息发送失败不能回滚已经完成的实物入库和库位占用。事件通过 Outbox 重试,并在后台显示“通知失败/待重试”;禁止因用户重复点击产生重复费用、重复托盘或重复占位。
### 2.6 托盘拆分与库位占用
托盘数量按总体积和选定托盘可用容积向上取整:
```text
托盘数量 = ceil(入库单实际总体积 ÷ 单托盘可用容积)
```
示例:总体积 `20 CBM`,托盘可用容积 `2 CBM`,需要 `10` 个托盘;默认一个托盘绑定一个库位,因此需要占用 `10` 个库位。若总体积为 `20.1 CBM`,则需要 `11` 个托盘,最后一个托盘保存剩余分配体积。
注意:业务含义应是“10 个托盘分别绑定 10 个库位”,不是“一个托盘同时绑定 10 个库位”。如果实际仓库允许同一库位存多个托盘,后续再增加库位容量模型;入库测量与计费默认一托一位,以避免占用口径不清。
拆分规则:
- 托盘容积取托盘基础资料快照,历史分配不随托盘资料修改。
- 托盘编号由仓库服务生成,禁止前端自行拼接。
- 后端校验库位属于当前仓库、启用且未占用。
- 多人同时选同一库位时,以数据库唯一约束或乐观锁保证只有一个请求成功。
- 已入库后的换位、释放和重新上架不属于本次主流程;如确有需要,应作为 P1 的库位调整功能单独验收。
## 三、状态模型
建议把“流程状态”“审核状态”“费用状态”“通知状态”分开保存,避免一个状态字段组合爆炸。
### 3.1 入库单流程状态
| 状态 | 说明 |
|---|---|
| `WAIT_MEASURE` | 等待第三方长宽高和称重图片。 |
| `MEASURING` | 已接收部分测量或 OCR 数据,尚未确认完整。 |
| `MEASURE_PENDING` | 测量已提交,等待审核。 |
| `MEASURE_REJECTED` | 审核失败,等待修正;默认不能继续入库。 |
| `WAIT_PRICING` | 测量审核通过,等待计费试算。 |
| `FEE_CONFIRMING` | 已试算,等待人工确认并发送。 |
| `INBOUNDING` | 正在预占托盘和库位,防止重复操作。 |
| `INBOUNDED` | 费用已确认并发送,托盘和库位已占用,入库成功。 |
| `VOIDED` | 已作废。 |
### 3.2 子状态
- 测量审核:`PENDING / APPROVED / REJECTED`。
- 费用:`UNPRICED / CALCULATED / CONFIRMED / SENT / VOIDED`。
- 客户通知:`NOT_CREATED / PENDING / SUCCESS / FAILED`。
## 四、服务与数据边界
| 服务 | 入库测量与计费职责 | 主要新增数据 |
|---|---|---|
| 头程服务 | 入库单、第三方测量接入、OCR 结果业务管理、测量审核、计费匹配、费用快照、入库编排 | 入库单、测量批次/明细、OCR 重量结果、审核记录、客户规则、船司价格、费用快照、托盘分配引用 |
| 仓库服务 | 托盘资料、库位资料、可用库位查询、预占/确认/释放 | 托盘、库位、库位占用、预占记录 |
| 文件服务 | 称重图片、测量图片和附件 | 文件元数据和对象存储引用 |
| 事件桥接服务 | 客户通知的可靠投递 | Outbox 消费记录、通知结果 |
| IAM | 客户归属、企业、仓库范围和按钮权限 | 新增入库测量与计费权限资源,不新增业务数据 |
头程与仓库分库,不能依赖跨库事务。采用“仓库库位预占 → 头程确认入库 → 仓库确认占用”的幂等 Saga;补偿只释放仍处于预占状态的库位,已经完成实物入库的记录不得被通知失败反向释放。
## 五、建议新增的核心接口
### 5.1 平台后台接口
```text
GET /api/platform/inbounds
GET /api/platform/inbounds/{id}
POST /api/platform/inbounds/{id}/measurements/submit
POST /api/platform/inbounds/{id}/measurements/approve
POST /api/platform/inbounds/{id}/measurements/reject
POST /api/platform/inbounds/{id}/weight-images/recognize
PUT /api/platform/inbounds/{id}/weight-results/{resultId}
POST /api/platform/inbounds/{id}/weight-results/confirm
POST /api/platform/inbounds/{id}/fees/calculate
POST /api/platform/inbounds/{id}/fees/confirm
POST /api/platform/inbounds/{id}/send-fee-and-inbound
GET /api/platform/inbounds/{id}/pallet-allocations
GET /api/platform/inbounds/{id}/operation-logs
```
### 5.2 仓库内部接口
```text
GET /internal/warehouses/{warehouseId}/locations/available
POST /internal/location-reservations
POST /internal/location-reservations/{reservationNo}/confirm
POST /internal/location-reservations/{reservationNo}/release
```
所有写接口必须支持幂等键;所有查询由后端基于登录上下文注入客户归属和企业范围,禁止单独相信前端传入的 `tenantId`;该参数当前表示目标客户 ID。
## 六、页面范围
### P0 页面
- 入库单列表和详情。
- 入库单测量:第三方数据展示、称重图片、OCR 原值/修正值和总重量。
- 测量数据审核:客户下单、第三方长宽高、OCR 重量三组信息和驳回原因。
- 费用试算与确认:客户规则、船司价格、FBA 目的仓、计费过程和费用快照预览。
- 托盘/库位分配:托盘数量、每托盘体积、候选库位、占用结果。
- 客户订单详情:只读显示已发送费用和入库结果。
- 客户计费规则、船司价格表、托盘管理和库位管理。
### P1 页面/功能
- 通知失败人工重试。
- 入库后库位调整。
- 测量视频。
- 单票导出。
## 七、入库测量与计费开发任务重排
| ID | 模块 | 交付内容 | 优先级 |
|---|---|---|---|
| P2-01 | 契约、状态与权限 | 状态机、错误码、按钮权限、客户/企业/仓库数据范围 | P0 |
| P2-02 | 入库单 | 列表、详情、入仓码和操作历史 | P0 |
| P2-03 | 第三方测量 | 签名、幂等、长宽高回传、原始报文留档和查询 | P0 |
| P2-04 | OCR 称重 | 图片关联、OCR、人工校正、单位换算、确认和重量汇总 | P0 |
| P2-05 | 测量审核 | 原单/设备/OCR 对比、通过、驳回和异常放行开关 | P0 |
| P2-06 | 客户计费规则 | KG/CBM 类型、换算系数、舍入、生效期和版本 | P0 |
| P2-07 | 船司 FBA 价格 | 起运仓、船司、FBA 目的仓、单价、币种、附加费和有效期 | P0 |
| P2-08 | 自动试算与费用快照 | 规则匹配、取大计算、人工确认、费用发送和历史快照 | P0 |
| P2-09 | 托盘与库位 | 托盘资料、向上拆分、库位可用查询、预占和确认占用 | P0 |
| P2-10 | 入库编排 | 发送费用、入库成功、跨服务 Saga、幂等和失败补偿 | P0 |
| P2-11 | 客户通知与展示 | Outbox 通知、失败重试、客户侧费用和入库结果只读展示 | P0 |
| P2-12 | 文件与审计 | 称重/测量图片鉴权、第三方调用日志和全操作审计 | P0 |
| P2-13 | 回归与发布 | 正常、驳回、放行、并发占位、重复提交、越权和异常恢复 | P0 |
## 八、验收主流程
### 8.1 正常流程
1. 客户订单提交待审核时生成唯一入仓码,审核通过后创建正式入库单并沿用该码。
2. 第三方用入仓码回传多条长宽高,同一事件重复回传不产生重复数据。
3. 操作员上传多张称重图片,OCR 识别后可逐条修正,系统正确累加 KG。
4. 审核员通过测量,系统按客户规则、船司、FBA 目的仓匹配唯一有效价格。
5. 系统按 KG 或 CBM 口径取大计算,页面展示完整计算过程。
6. 操作员确认后点击发送费用,系统生成正确托盘数并占用相同数量的可用库位。
7. 入库单变为已入库,客户能看到已发送费用;通知异步成功。
### 8.2 必须覆盖的异常流程
- 默认开关关闭时,测量审核失败不能计费发送和入库。
- 开关开启但无异常放行权限,仍不能入库;有权限且填写原因时才可放行。
- 无客户规则、无船司价格、价格过期或匹配多条时禁止发送费用。
- OCR 图片重复、单位不明、未确认或总重为零时禁止提交审核。
- 库位数量不足、被并发抢占或已停用时,入库失败且不能留下半完成费用/占用。
- 重复点击发送费用只产生一份费用快照、一组托盘和一次入库结果。
- 客户通知失败时入库状态不回滚,系统自动重试并可查失败原因。
- 跨客户、跨企业、跨仓库查询和操作全部拒绝,并记录安全审计;具体使用 HTTP 状态还是业务码以接口统一响应契约为准。
## 九、仍需业务最终确认的事项
1. 包税是否固定采用 `CBM × 167` 转 KG,不包税是否固定采用 `KG ÷ 363` 转 CBM;不同客户能否配置不同系数。
2. “根据客户规则然后根据船司计算”是只生成客户应收费用,还是同时保存船司成本。本文默认入库测量与计费只向客户发送应收费用,船司价格作为计价基础,不进入应付和利润闭环。
3. 船司价格唯一匹配所需维度是否就是:起运仓、渠道/类型、船司、FBA 目的仓和有效期。
4. 托盘是否始终一托一库位。本文按一托一位设计;若一个库位可放多个托盘,需要补充库位容积、承重和剩余容量规则。
5. 托盘分配是只按体积平均拆分,还是还要拆到具体 SKU/箱数。本文入库测量与计费只分配体积和箱数汇总,不做完整 SKU 库存。
6. 点击发送费用前是否还需要第二人复核。本文默认测量审核完成后由有发送权限的操作员确认,不再增加独立接收审核。
7. OCR 服务商、图片格式、单图大小、识别时限和失败重试次数需要在技术接入前确定。
## 十、本次相对上一版的变更
- 第三方长宽高测量从“不纳入”改为入库测量与计费 P0,并定义按入仓码接入的开放接口。
- OCR 称重从“不纳入”改为入库测量与计费 P0,支持多图累加和人工修正。
- 人工简单计费改为客户规则加船司 FBA 目的仓自动试算。
- 新增 KG/CBM 换算取大和费用规则/价格快照。
- 新增 Nacos 审核失败异常放行开关,默认关闭。
- 原“接收审核通过即入库”改为“发送费用给客户即入库成功”。
- 原“只填一个库位”改为按托盘容积向上拆分,并一托一位占用库位。
- 托盘管理从“不纳入”改为入库测量与计费必要基础能力,但不扩展为完整 WMS。
## 十一、实现与验收状态(2026-08-04)
### 11.1 已实现并通过真实 API 验证
- 订单提交待审核时生成唯一入仓码;审核通过后创建正式入库单并沿用该码,审核不强制选择承运商。
- 平台测量草稿、箱规明细、尺寸证据图片绑定。
- 称重图片上传、OCR 失败状态、人工修正、重量确认和多重量汇总。
- 测量提交、托盘拆分、库位预占及确认占用。
- 客服测量审核通过后自动计费、发送费用并完成入库。
- FBA 目的仓计费按实重和体积重取大,本轮 `20kg` 与 `40.08kg` 取 `40.08kg`。
- 入库详情、费用快照、托盘和库位分配结果查询。
- 公共收货仓的公共主数据技术归属与商户订单的客户归属分别校验;这只是当前兼容实现,不形成真实租户层。
### 11.2 最终验证数据
| 项目 | 结果 |
|---|---|
| 入库单 | `2084549769916538881` |
| 入仓码 | `RK-2084549604719718402` |
| 测量批次 | `2084556854154715137` |
| 最终状态 | `INBOUNDED / APPROVED / SENT` |
| 计费 | `40.08kg × 11 CNY/kg = 440.68 CNY` |
| 托盘 / 库位 | `2084561214309851137` / `2084561214452457473` |
| 预占单 | `LR2084562525306675202`,状态 `CONFIRMED` |
### 11.3 已落地配置与数据快照
公共仓主数据技术归属配置(配置名保留历史 `tenant` 命名):
```yaml
firstleg:
inbound:
warehouse-resource-tenant-id: ${WAREHOUSE_RESOURCE_TENANT_ID:0}
```
公共仓库、快递公司、托盘和库位当前统一使用平台技术作用域 `tenant_id=0`,不得绑定客户 `10001` 或其他客户 ID。客户往来单位、订单、文件和费用仍使用所属客户 `tenant_id>0`。托盘分配快照继续保存历史字段 `warehouse_resource_tenant_id` 和 `reservation_no`,其中公共资源归属值应为 `0`,避免配置变化后无法追溯历史资源归属。
### 11.4 尚未关闭的环境验收项
- 接入真实 OCR 供应商凭证后,以现场秤图验证识别准确率、超时和重试。
- 前端浏览器完成登录、权限按钮、403、跨客户拒绝、重复提交、空态和移动端体验验收。
- C1-C8 产品结论仍需产品/业务负责人正式填写,技术实现通过不等于代替产品确认。
@@ -0,0 +1,182 @@
# 虫虫出海入库测量与计费需求优化版:头程入库测量闭环
> 形成日期:2026-08-01
> 需求依据:`D:\docs\悦` 原型、WMS 文档、头程物流流程图及现有入库测量与计费文档
> 优化原则:以实际原型可见流程为主,优先复用客户订单与现有微服务,不建设当前业务不需要的完整 WMS 和计费平台。
## 一、优化结论
入库测量与计费主目标收缩为:订单与客户头程订单提交后,后台能够完成入库单查看、实际测量、测量审核、接收审核,并记录简单库位和头程费用。
```text
订单与客户头程订单
→ 入库单列表/详情
→ 录入实际测量数据与图片
→ 测量审核
→ 接收审核
→ 填写库位
→ 人工录入并审核头程费用
```
不再单独建设到仓预约单、分批收货、处理单元、上架任务、位置历史和自动计费引擎。
## 二、入库测量与计费纳入范围
### 1. 入库单列表和详情
- 直接复用订单与客户头程订单生成或展示入库单,不新增“订单—到仓单 1:N”模型。
- 支持按入仓码、订单状态、测量审核状态、费用审核状态、客户、仓库和预计到达时间查询。
- 详情展示基本信息、货物明细、测量数据、费用信息、状态历史和其他信息。
- 其他信息包括快递公司、快递单号、关联文件、备注和客服内部备注。
- 支持作废操作,作废必须填写原因并保留操作记录。
### 2. 入库测量
- 录入实际箱数、总毛重、总体积和实际品名。
- 按箱规录入长、宽、高、箱数、每箱重量、体积、周长和备注。
- 保存客户下单数据、外箱规数据和实际测量数据,便于审核对比。
- 体积、材积重和汇总值由服务端计算,小数点三位向上取整。
- 测量图片必传;测量视频作为 P1 可选附件,不作为提交必填项。
- 修改已提交测量数据需要退回后重新提交,不建设多版本复测系统。
### 3. 测量审核
- 独立的待审核列表和审核详情。
- 对比原单总箱数、毛重、体积、材积与实测结果。
- 审核结果:审核通过、审核不通过。
- 审核不通过必须填写原因,并退回测量人员修改。
- 审核通过后进入接收审核。
### 4. 接收审核
- 独立的待接收审核列表。
- 展示入仓码、仓库、客户、业务类型、渠道、箱数、重量和测量审核结果。
- 只有测量审核通过的数据才能接收。
- 接收结果:接收通过、接收不通过。
- 接收不通过必须填写原因;接收通过后入库单状态变为已入库。
### 5. 差异展示
- 差异不再建设独立差异单、客户确认、通知补偿和关闭流程。
- 在测量审核页面直接展示原单与实测箱数、重量、体积和材积差值。
- 差异仅用于审核参考和历史记录,不阻塞审核人员主动通过。
- 原型中的“待客户确认”页签不纳入入库测量与计费,应删除或改为“测量待审核”。
### 6. 库位
- 复用仓库服务中的库位基础资料。
- 入库接收时人工选择或填写一个库位。
- 只校验库位属于当前仓库且未停用。
- 不建设库区容量、承重校验、上架任务、任务分配、拆分和位置流水。
### 7. 头程费用
- 只维护入库测量与计费实际使用的头程费用项目白名单。
- 在入库单详情人工新增费用项目、数量、单价、币种、金额和备注。
- 金额由服务端按“数量 × 单价”计算,也允许固定金额。
- 费用状态:草稿、待审核、审核通过、审核不通过、作废。
- 审核通过的费用不能直接覆盖,只能作废后重新录入。
- 不建设头程/FBA 计费维度匹配、阶梯价、最低收费、封顶、组合价、规则版本和事件计费引擎。
- 不生成应收、应付、对账单、收付款、核销、发票和利润数据。
### 8. 文件、打印和导出
- 测量图片和关联文件使用现有文件服务,下载时校验租户和订单权限。
- 打印唛头复用现有打印服务;入库测量与计费只要求按入库单打印,不建设处理单元标签生命周期。
- 单票入库清单导出列为 P1;FBA 流转单、批量 ZIP 和自定义列暂不纳入。
## 三、状态模型
| 状态 | 说明 |
|---|---|
| `WAIT_MEASURE` | 等待录入测量数据 |
| `MEASURE_PENDING` | 测量数据已提交,等待审核 |
| `MEASURE_REJECTED` | 测量审核不通过,等待修改 |
| `RECEIVE_PENDING` | 测量审核通过,等待接收审核 |
| `RECEIVE_REJECTED` | 接收审核不通过 |
| `RECEIVED` | 接收审核通过,完成入库 |
| `VOIDED` | 入库单已作废 |
不使用“待客户确认、差异关闭、上架中、上架完成”等入库测量与计费无实际操作页面的状态。
## 四、角色与按钮权限
| 角色 | 主要按钮 |
|---|---|
| 仓库测量员 | 查看入库单、录入/修改测量、上传图片、提交审核 |
| 仓库审核员 | 测量审核通过/不通过、接收审核通过/不通过 |
| 运营/客服 | 查看详情、维护快递信息、关联文件、备注、作废 |
| 计费操作员 | 新增、编辑、提交头程费用 |
| 计费审核员 | 费用审核、驳回和作废 |
| 平台管理员 | 费用项目、库位及权限配置 |
所有查询和操作必须按租户、企业和仓库进行服务端数据隔离。
## 五、精简后的开发任务
| ID | 模块 | 交付内容 | 优先级 |
|---|---|---|---|
| P2-01 | 契约与权限 | 状态、错误码、按钮权限、租户/仓库数据范围 | P0 |
| P2-02 | 入库单列表 | 查询、分页、筛选和状态页签 | P0 |
| P2-03 | 入库单详情 | 基本信息、货物、测量、费用、历史和其他信息 | P0 |
| P2-04 | 入库测量 | 箱规明细、汇总计算、图片上传和提交 | P0 |
| P2-05 | 测量审核 | 原单实测对比、通过、驳回和原因 | P0 |
| P2-06 | 接收审核 | 待接收列表、通过、驳回和完成入库 | P0 |
| P2-07 | 库位记录 | 库位查询、选择、停用校验和入库单库位字段 | P0 |
| P2-08 | 费用项目 | 头程费用项目白名单和启停 | P0 |
| P2-09 | 入库费用 | 人工录入、计算、提交、审核、驳回和作废 | P0 |
| P2-10 | 文件与打印 | 测量图片、关联文件、鉴权下载和打印唛头 | P0 |
| P2-11 | 客户端展示 | 在客户订单详情只读展示实测、入库状态和公开费用 | P1 |
| P2-12 | 测试发布 | 权限、越权、状态、重复提交、金额计算、文件和回归测试 | P0 |
原 24 项任务收缩为 12 项,不新增微服务:入库和审核放在头程服务,库位/快递公司继续使用仓库服务,文件与打印复用现有服务。
## 六、从原型发现但原入库测量与计费文档覆盖不足
| 原型内容 | 当前覆盖情况 | 优化处理 |
|---|---|---|
| 测量数据审核独立页面 | 有提及,但任务粒度不清 | 明确为独立 P0 功能 |
| 接收审核独立页面 | 原计划被分批收货、上架流程稀释 | 明确为完成入库的最后审核节点 |
| 客户下单/外箱规/实际测量三组对比 | 未完整描述 | 纳入测量详情和审核页 |
| 审核不通过及失败原因 | 未完整描述 | 测量和接收审核均必须支持驳回原因 |
| 测量视频 | 原文只写照片 | 改为 P1 可选附件 |
| 快递公司、快递单号 | 有订单与客户字段,但未进入入库详情 | 纳入“其他信息” |
| 关联文件、备注、客服内部备注 | 覆盖不足 | 纳入详情,内部备注不对客户展示 |
| 作废、打印唛头、单票导出 | 覆盖不完整 | 作废和打印 P0,单票导出 P1 |
| 费用审核状态 | 计费方案过度复杂 | 改为人工费用提交与审核 |
| 状态历史 | 有数据对象但没有明确页面 | 详情页只读展示操作时间线 |
## 七、原型存在但入库测量与计费不纳入
- 智能装柜、合关报关、配载、船期和 FIST 推送。
- 到仓预约容量、自动服务商分配和多批次收货。
- 托盘管理、处理单元、标签换标/补打/作废生命周期。
- 独立差异单、客户确认、隔离区、上架任务和位置历史。
- OCR 智能识别和自动测量设备接入。
- 海外仓库存、退货、换标、派送、PDA 和完整 WMS;仅纳入客户级天数阶梯仓储费基础资料 CRUD。
- 头程/FBA 阶梯计费、规则引擎、应收应付、对账和完整财务模块。
- 批量导入导出、自定义列、批量 ZIP 和复杂报表。
### 7.1 海外仓阶梯费用补充边界(2026-08-05)
Warehouse 服务已提供海外仓客户级天数阶梯仓储费的分页、详情、新增、编辑和删除接口。该功能属于基础资料配置,不代表海外仓 WMS 或自动计费已经纳入入库测量与计费。当前配置不参与入库/FBA 费用计算、费用发送、账单或结算。
## 八、仍需产品确认的最少事项
1. 测量审核和接收审核是否必须由不同账号完成。
2. 接收审核不通过后退回到测量环节,还是直接作废入库单。
3. 入库测量与计费首批费用项目清单,以及哪些费用允许人工录入。
4. 客户端是否展示费用;如果展示,只展示审核通过的费用。
5. “是否扣货/扣货理由”只作为备注字段,还是需要真实业务状态。
6. 测量视频是否保留;建议非必填并放入 P1。
## 九、验收主流程
1. 订单与客户审核通过的头程订单出现在后台入库单列表。
2. 测量员录入箱规、重量和体积,上传测量图片并提交。
3. 审核员查看原单与实测对比,驳回时必须填写原因。
4. 测量通过后进入接收审核,接收通过后状态变为已入库。
5. 入库单能够保存库位、快递信息、关联文件和备注。
6. 计费人员录入头程费用并提交审核,审核通过后客户按权限只读查看。
7. 重复提交不产生重复记录,跨企业和跨仓库访问被拒绝。
8. 作废、驳回、审核、文件访问和费用操作均有审计记录。
@@ -1,18 +1,18 @@
# 虫虫出海二期需求确认清单:头程到仓与头程计费
# 虫虫出海入库测量与计费需求确认清单:头程到仓与头程计费
> 创建日期:2026-07-28
> 更新日期:2026-07-31
> 当前状态:产品已确认二期只做头程计费,3 项计费细节待补充
> 确认范围:头程物流“02 到仓”及头程费用计算
> 关联规划:[二期开发规划](二期开发规划.md)
> 原型依据:[头程物流流程图](参考资料/头程物流流程图.svg)
> 创建日期:2026-07-28
> 更新日期:2026-07-31
> 当前状态:产品已确认入库测量与计费只做头程计费,3 项计费细节待补充
> 确认范围:头程物流“02 到仓”及头程费用计算
> 关联规划:[入库测量与计费开发规划](入库测量与计费开发规划.md)
> 原型依据:[头程物流流程图](参考资料/头程物流流程图.svg)
> 产品回传:[2026-07-31 产品确认合并记录](产品回传/2026-07-31-产品确认合并记录.md)
## 一、文档用途
本清单记录二期产品确认结果和仍需补齐的开发规则。产品已确认的结论直接进入基线;仍待确认的事项不得写成不可变的业务默认值,应保持配置化或可替换。二期由单一产品负责人统一确认,不记录确认人和确认时间;项目负责人组织业务、仓库、计费和技术共同补齐可开发结论。
本清单记录入库测量与计费产品确认结果和仍需补齐的开发规则。产品已确认的结论直接进入基线;仍待确认的事项不得写成不可变的业务默认值,应保持配置化或可替换。入库测量与计费由单一产品负责人统一确认,不记录确认人和确认时间;项目负责人组织业务、仓库、计费和技术共同补齐可开发结论。
二期财务边界已经确定:只做头程费用项目、计费规则、费用试算和头程费用明细,不做应收应付、对账、付款、核销、发票、汇率结算、利润或总账。
入库测量与计费财务边界已经确定:只做头程费用项目、计费规则、费用试算和头程费用明细,不做应收应付、对账、付款、核销、发票、汇率结算、利润或总账。
## 二、确认参与人
@@ -29,7 +29,7 @@
| 编号 | 原型/回传情况 | 本次需要确定 | 当前建议 | 临时结论 | 状态 |
|---|---|---|---|---|---|
| P2-Q14 | 费用白名单位置出现“63”占位值,不能作为业务结论 | “02 到仓”首批费用项目、计费单位、币种、税率/税务属性和触发节点 | 只纳入二期实际使用的头程费用;白名单外允许人工补录但必须留痕 | 待填写 | 待确认 |
| P2-Q14 | 费用白名单位置出现“63”占位值,不能作为业务结论 | “02 到仓”首批费用项目、计费单位、币种、税率/税务属性和触发节点 | 只纳入入库测量与计费实际使用的头程费用;白名单外允许人工补录但必须留痕 | 待填写 | 待确认 |
| P2-Q15 | 计费规则复杂度位置出现“63”占位值,不能作为业务结论 | 计费维度,以及是否支持阶梯价、最低收费、封顶、组合价和冲突优先级 | 先支持客户、往来单位、仓库、服务类型和生效区间;复杂结构按业务需要裁剪 | 待填写 | 待确认 |
| P2-Q16 | 费用生成节点位置出现“63”占位值,不能作为业务结论 | 实测、差异、上架和人工费用分别在哪个节点试算、生成、确认和作废 | 实测完成生成试算;其他费用按已确认头程业务事件生成;来源键保证幂等 | 待填写 | 待确认 |
@@ -41,7 +41,7 @@
## 四、已确认的到仓作业结论
| 编号 | 产品结论 | 二期开发口径 | 状态 |
| 编号 | 产品结论 | 入库测量与计费开发口径 | 状态 |
|---|---|---|---|
| P2-Q1 | 以实际货物重量、体积为准 | 收货实测结果作为后续作业和头程计费输入 | 已确认 |
| P2-Q2 | 不走系统服务商调度,取货安排线下完成 | 系统记录到仓结果,不建设服务商调度闭环 | 已确认 |
@@ -51,26 +51,26 @@
| P2-Q6 | 不考虑隔离区 | 不建设独立隔离区和隔离释放流程 | 已确认 |
| P2-Q7 | 当前不做库位容量校验 | 不做容量强校验,但校验库位停用和状态合法性 | 已确认 |
| P2-Q8 | 称重、测量照片必传,大小不限制 | 必传照片;保留可配置技术安全上限、类型校验和访问审计 | 已确认 |
| P2-Q9 | 暂缓 PDA | 二期使用后台或响应式作业页,不接 PDA | 暂缓 |
| P2-Q9 | 暂缓 PDA | 入库测量与计费使用后台或响应式作业页,不接 PDA | 暂缓 |
| P2-Q10 | 不考虑无预报货物场景 | 不建设无预报货物认领和正式订单绑定流程 | 已确认 |
| P2-Q11 | 永久保存 | 业务记录不自动删除;运维另行制定存储、备份和合规处理策略 | 已确认 |
| P2-Q12 | 使用佳博 1324D 热敏标签打印机 | 纸张、连接、驱动和指令协议在开发前实机核验 | 已确认 |
## 五、已确认的头程计费范围
| 编号 | 产品结论 | 二期处理 |
| 编号 | 产品结论 | 入库测量与计费处理 |
|---|---|---|
| P2-Q13 | 二期只做头程计费 | 只建设费用项目、计费规则、费用试算、调整、确认和头程费用明细 |
| P2-Q17 | 不进入二期 | 不建设汇率结算和本位币折算 |
| P2-Q18 | 不进入二期 | 不建设财务税务结算口径;费用项目如需税率字段,按 Q14 配置即可 |
| P2-Q19 | 不进入二期 | 不建设财务费用审核、应收应付审核或会计审计链;保留头程费用调整审计 |
| P2-Q20 | 不进入二期 | 不建设客户/供应商对账和结算周期 |
| P2-Q21 | 不进入二期 | 不建设账单确认、争议和关闭流程 |
| P2-Q22 | 不进入二期 | 不建设收付款、核销、反核销和银行自动认领 |
| P2-Q23 | 不进入二期 | 不建设发票登记和外部开票平台 |
| P2-Q24 | 不进入二期 | 不建设利润、利润率和财务报表 |
| P2-Q13 | 入库测量与计费只做头程计费 | 只建设费用项目、计费规则、费用试算、调整、确认和头程费用明细 |
| P2-Q17 | 不进入入库测量与计费 | 不建设汇率结算和本位币折算 |
| P2-Q18 | 不进入入库测量与计费 | 不建设财务税务结算口径;费用项目如需税率字段,按 Q14 配置即可 |
| P2-Q19 | 不进入入库测量与计费 | 不建设财务费用审核、应收应付审核或会计审计链;保留头程费用调整审计 |
| P2-Q20 | 不进入入库测量与计费 | 不建设客户/供应商对账和结算周期 |
| P2-Q21 | 不进入入库测量与计费 | 不建设账单确认、争议和关闭流程 |
| P2-Q22 | 不进入入库测量与计费 | 不建设收付款、核销、反核销和银行自动认领 |
| P2-Q23 | 不进入入库测量与计费 | 不建设发票登记和外部开票平台 |
| P2-Q24 | 不进入入库测量与计费 | 不建设利润、利润率和财务报表 |
原型中对应的完整财务页面不自动进入二期,后续阶段如需建设,另行立项确认。
原型中对应的完整财务页面不自动进入入库测量与计费,后续阶段如需建设,另行立项确认。
## 六、全量状态跟踪
@@ -88,26 +88,26 @@
| P2-Q10 | P0 | 无预报货物 | 已确认 |
| P2-Q11 | P0 | 数据保存 | 已确认 |
| P2-Q12 | P0 | 标签设备 | 已确认 |
| P2-Q13 | P0 | 二期财务范围 | 已确认 |
| P2-Q13 | P0 | 入库测量与计费财务范围 | 已确认 |
| P2-Q14 | P0 | 首批费用项目 | 待确认 |
| P2-Q15 | P0 | 计费规则复杂度 | 待确认 |
| P2-Q16 | P0 | 费用生成节点 | 待确认 |
| P2-Q17 | P0 | 汇率结算 | 不纳入二期 |
| P2-Q18 | P0 | 财务税务结算 | 不纳入二期 |
| P2-Q19 | P0 | 财务费用审批 | 不纳入二期 |
| P2-Q20 | P0 | 对账周期 | 不纳入二期 |
| P2-Q21 | P0 | 账单确认争议 | 不纳入二期 |
| P2-Q22 | P0 | 收付款核销 | 不纳入二期 |
| P2-Q23 | P1 | 发票管理 | 不纳入二期 |
| P2-Q24 | P1 | 利润报表 | 不纳入二期 |
| P2-Q17 | P0 | 汇率结算 | 不纳入入库测量与计费 |
| P2-Q18 | P0 | 财务税务结算 | 不纳入入库测量与计费 |
| P2-Q19 | P0 | 财务费用审批 | 不纳入入库测量与计费 |
| P2-Q20 | P0 | 对账周期 | 不纳入入库测量与计费 |
| P2-Q21 | P0 | 账单确认争议 | 不纳入入库测量与计费 |
| P2-Q22 | P0 | 收付款核销 | 不纳入入库测量与计费 |
| P2-Q23 | P1 | 发票管理 | 不纳入入库测量与计费 |
| P2-Q24 | P1 | 利润报表 | 不纳入入库测量与计费 |
## 七、确认完成标准
P2-Q14 至 P2-Q16 形成可开发结论后,头程计费模块可以进入正式任务拆分和开发验收。后续需求变化按变更流程处理,不得将应收应付、对账、付款、核销、发票或利润功能默认带入二期。
P2-Q14 至 P2-Q16 形成可开发结论后,头程计费模块可以进入正式任务拆分和开发验收。后续需求变化按变更流程处理,不得将应收应付、对账、付款、核销、发票或利润功能默认带入入库测量与计费。
确认完成后需要同步:
- 二期头程计费模块规划。
- 二期开发规划和开发进度表。
- 入库测量与计费头程计费模块规划。
- 入库测量与计费开发规划和开发进度表。
- 头程计费任务依赖、数据对象和验收标准。
- 二期会议确认 Excel 及产品回传归档记录。
- 入库测量与计费会议确认 Excel 及产品回传归档记录。
@@ -47,6 +47,8 @@
</style>
</defs>
<rect width="1600" height="1100" fill="url(#pageBg)"/>
<circle cx="1490" cy="50" r="180" fill="#D9F1ED" opacity=".42"/>
<circle cx="90" cy="1080" r="220" fill="#DFEBFF" opacity=".48"/>

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1,171 @@
# 海外仓阶梯费用前端联调说明
> 更新日期:2026-08-05
> 后端服务:Warehouse Service
> 当前状态:后端 CRUD、Gateway 路由、权限、数据库增量和自动化测试已完成;前端待实现与联调
## 一、业务边界
本功能用于平台端按客户维护海外仓仓储费的天数阶梯基础资料。一名客户只能存在一份有效配置,配置包含客户、币种和 1 至 100 组连续的天数阶梯。
当前只提供基础资料维护,不参与本期入库、FBA 自动计费、费用发送、账单、对账或结算。当前也没有启停、计费单位、生效日期、免租期和版本发布能力,前端不得自行补造这些字段或业务动作。
## 二、建议页面
- 页面名称:海外仓阶梯费用
- 建议路由:`/customers/overseas-storage-fees`
- 列表筛选:客户 ID、客户公司名称关键字
- 列表字段:客户、币种、阶梯摘要、版本、创建时间、更新时间
- 详情与编辑字段:客户 ID、客户公司名称、币种、阶梯起始天、阶梯结束天、仓储费单价
- 操作:查看、新增、编辑、删除
编辑和删除必须使用详情返回的最新 `version`。发生 409 冲突时应提示“数据已被修改,请刷新后重试”,重新读取详情,不能静默覆盖。
## 三、接口清单
统一前缀:`/api/platform/v1/overseas-storage-fees`
| 方法 | 路径 | 用途 | 权限 |
|---|---|---|---|
| GET | `/api/platform/v1/overseas-storage-fees` | 分页查询 | `platform:overseas-storage-fee:list` |
| GET | `/api/platform/v1/overseas-storage-fees/{id}` | 查询详情 | `platform:overseas-storage-fee:list` |
| POST | `/api/platform/v1/overseas-storage-fees` | 新增 | `platform:overseas-storage-fee:create` |
| PUT | `/api/platform/v1/overseas-storage-fees/{id}` | 编辑 | `platform:overseas-storage-fee:edit` |
| DELETE | `/api/platform/v1/overseas-storage-fees/{id}?version={version}` | 删除 | `platform:overseas-storage-fee:delete` |
仅允许平台端令牌调用。列表查询参数如下:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `page` | long | 否 | 默认 1,最小 1 |
| `size` | long | 否 | 默认 20,范围 1 至 200 |
| `customerId` | long | 否 | 客户 ID 精确查询 |
| `customerName` | string | 否 | 客户公司名称模糊查询,最多 128 字符 |
## 四、请求示例
新增:
```json
{
"customerId": "10001",
"customerName": "示例客户有限公司",
"currency": "USD",
"tiers": [
{"startDay": 1, "endDay": 7, "unitPrice": 0.5},
{"startDay": 8, "endDay": 30, "unitPrice": 0.8},
{"startDay": 31, "endDay": 60, "unitPrice": 0.6}
]
}
```
编辑请求结构与新增一致,并增加详情返回的版本号:
```json
{
"customerId": "10001",
"customerName": "示例客户有限公司",
"currency": "USD",
"tiers": [
{"startDay": 1, "endDay": 10, "unitPrice": 0.55},
{"startDay": 11, "endDay": 30, "unitPrice": 0.8}
],
"version": 1
}
```
说明:Java Long 类型的 ID 在浏览器中统一按字符串保存和传递,避免精度丢失。
## 五、响应结构
详情的 `data` 结构:
```json
{
"id": "2100000000000000001",
"customerId": "10001",
"customerName": "示例客户有限公司",
"currency": "USD",
"tiers": [
{
"id": "2100000000000000002",
"startDay": 1,
"endDay": 7,
"unitPrice": 0.5,
"sortNo": 1
}
],
"version": 0,
"createdAt": "2026-08-05T10:00:00",
"updatedAt": "2026-08-05T10:00:00"
}
```
分页接口的 `data` 包含 `records`、`page`、`size`、`total`、`pages`。新增成功时 `data` 为新增配置 ID;编辑和删除成功时 `data` 为 `null`。
## 六、校验规则
- 一个客户只能有一份有效配置。
- `customerId` 必须为正数,`customerName` 必填且最多 128 字符。
- 币种必须是三位大写字母,例如 `CNY`、`USD`。
- 阶梯必须为 1 至 100 组。
- 第一组必须从第 1 天开始。
- 后一组 `startDay` 必须等于前一组 `endDay + 1`。
- 区间不能间断、重叠或倒置。
- 起止天数范围为 1 至 36500。
- 单价必须大于 0,最多 12 位整数和 6 位小数。
## 七、错误处理
| 业务码 | 场景 | 前端处理 |
|---|---|---|
| `A0403` | 非平台端访问或缺少按钮权限 | 显示无权限,隐藏无权限操作 |
| `A0404` | 配置不存在或已删除 | 提示数据不存在并返回列表 |
| `A0409` | 客户重复配置、阶梯区间冲突、版本过期或并发修改 | 保留用户提示,刷新列表或详情 |
| `A0422` | 参数、币种、阶梯连续性或单价校验失败 | 显示服务端错误信息并定位表单 |
| `S0503` | Warehouse 服务不可用或未就绪 | 显示服务暂不可用并允许重试 |
普通成功响应仍需判断统一响应体 `code === "200"`。
## 八、数据库与部署
本功能复用 Warehouse 数据库,未新增微服务或独立数据库。新增表:
- `wh_overseas_storage_fee_rule`
- `wh_overseas_storage_fee_tier`
同时新增 5 个索引及 4 项按钮权限,平台系统管理员默认获得上述权限。唯一数据库增量入口:
```text
D:\baiyue-firstleg\deploy\sql\头程数据库统一增量-MySQL8.sql
```
当前已完成 SQL 静态契约校验,但本次功能增量尚未在真实数据库执行。部署或联调前需先在目标库执行统一增量脚本并确认脚本最终输出 `PASS`。
## 九、Swagger
- Gateway 聚合文档:`http://127.0.0.1:9000/webjars/swagger-ui/index.html`,选择 Warehouse 平台端分组。
- Warehouse 直连文档:`http://127.0.0.1:9204/swagger-ui/index.html`。
- Gateway OpenAPI:`/warehouse-service/v3/api-docs/platform`。
## 十、后端验证结果
- Warehouse 全量测试:91 项通过。
- 海外仓阶梯费用 CRUD 定向测试:6 项通过。
- SQL 契约测试:1 项通过。
- Gateway 路由契约测试:2 项通过。
- Maven 构建:`BUILD SUCCESS`。
- SQL 静态校验:存储过程分隔符、预处理语句配对、唯一最终 `PASS` 和危险语句检查均通过。
## 十一、前端验收清单
- 有列表权限时可进入页面,无权限时路由、菜单和按钮状态正确。
- 客户 ID 和客户名称筛选、分页及空态正确。
- 新增后回读详情,ID 全程不转为 JavaScript `Number`。
- 同一客户重复新增时正确处理 `A0409`。
- 阶梯间断、重叠、倒置、非第 1 天开始和非正单价均不能提交成功。
- 编辑使用最新 `version`,过期版本收到 409 后刷新详情。
- 删除前二次确认,并携带最新 `version`。
- 请求失败、服务不可用、加载态、空态和重复提交均有明确反馈。
- 页面不出现启停、生效日期、计费单位、免租期或自动计费开关等未定义字段。
- 不将本配置接入当前头程/FBA 自动计费流程。
@@ -0,0 +1,193 @@
# 第三方入仓测量接口联调说明
> 版本:2026-08-04
> 网关基地址:`http://127.0.0.1:9000`(测试环境替换为实际网关域名)
## 一、接口用途
第三方测量设备每次回传一条箱规测量数据和一张对应图片。后端按入仓码匹配入库单,并校验指定货物明细属于该入库单关联订单,然后形成一条测量明细。
接口只保存测量结果,不执行客服审核、计费、托盘拆分、库位占用或完成入库。
## 二、提交接口
```http
POST /openapi/v1/inbound-measurements
Content-Type: multipart/form-data
```
请求头:
```http
X-App-Key: <第三方应用Key>
X-Timestamp: <Unix毫秒时间戳>
X-Nonce: <本次请求唯一随机串>
X-Signature: <HMAC-SHA256签名>
Idempotency-Key: <本次业务操作幂等键>
```
multipart 内容:
| part 名称 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `data` | UTF-8 JSON 文本 | 是 | 一条箱规测量数据,服务端使用原文验签 |
| `image` | 二进制文件 | 是 | 该条明细唯一对应图片;JPG、PNG、BMP,最大 5 MB |
`data` 示例:
```json
{
"eventNo": "M202608040001",
"externalDetailNo": "BOX-20260804-0001",
"warehouseCode": "CN-YW-01",
"inboundCode": "ZBYHK2604100412",
"inboundDetailId": "190000000000000001",
"deviceCode": "DEVICE-01",
"measuredAt": "2026-08-04T10:30:00+08:00",
"boxSpecification": "40*30*47cm",
"packageCount": 50,
"lengthCm": 40.000,
"widthCm": 30.000,
"heightCm": 47.000,
"unitWeightKg": 20.000,
"remark": ""
}
```
字段说明:
| 字段 | 必填 | 规则 |
|---|---|---|
| `eventNo` | 是 | 同一 AppKey 下唯一;1~128 位字母、数字、点、下划线、冒号或横线 |
| `externalDetailNo` | 是 | 第三方物理测量明细唯一号;重复绑定会被拒绝 |
| `warehouseCode` | 是 | 必须属于该 AppKey 预先绑定的仓库 |
| `inboundCode` | 是 | 柏悦入仓码,后端据此匹配入库单 |
| `inboundDetailId` | 是 | 柏悦提供的订单货物明细 ID;必须属于该入库单关联订单 |
| `deviceCode` | 是 | 测量设备编码,最长 64 位 |
| `measuredAt` | 是 | ISO 8601 时间且必须包含时区 |
| `boxSpecification` | 是 | 箱规显示文本,最长 64 位 |
| `packageCount` | 是 | 本箱规箱数,1~1,000,000 |
| `lengthCm` | 是 | 单箱长度,单位厘米且大于 0 |
| `widthCm` | 是 | 单箱宽度,单位厘米且大于 0 |
| `heightCm` | 是 | 单箱高度,单位厘米且大于 0 |
| `unitWeightKg` | 否 | 单箱重量,单位 KG且大于 0;重量 OCR 流程可另行确认 |
| `remark` | 否 | 最长 500 字符 |
## 三、签名算法
先计算图片内容摘要:
```text
imageSha256 = SHA256(image原始字节).lowerHex
```
构造签名 body,`LF` 是单个换行符 `\n`:
```text
signatureBody = data原始UTF-8文本 + LF + imageSha256
bodySha256 = SHA256(signatureBody的UTF-8字节).lowerHex
```
构造六行 canonical string,末尾不追加换行:
```text
POST
/openapi/v1/inbound-measurements
<X-Timestamp>
<X-Nonce>
<Idempotency-Key>
<bodySha256>
```
最终签名:
```text
X-Signature = HMAC-SHA256(appSecret, canonicalString).lowerHex
```
`data` 中任何空格、换行或字段顺序变化都会改变签名。计算签名后必须发送完全相同的 `data` 原文和图片字节。
## 四、成功响应
```json
{
"code": "200",
"message": "success",
"data": {
"eventNo": "M202608040001",
"inboundCode": "ZBYHK2604100412",
"inboundDetailId": "190000000000000001",
"measurementId": "190000000000000010",
"measurementItemId": "190000000000000020",
"imageFileId": "190000000000000030",
"accepted": true,
"status": "RECEIVED",
"receivedAt": "2026-08-04T02:30:00Z"
},
"requestId": "...",
"traceId": "...",
"timestamp": "2026-08-04T02:30:01Z"
}
```
所有 ID 都是字符串,调用方不得转换为 JavaScript Number。
## 五、事件查询
```http
GET /openapi/v1/inbound-measurements/events/{eventNo}
```
GET 同样需要 `X-App-Key`、`X-Timestamp`、`X-Nonce` 和 `X-Signature`,不需要 `Idempotency-Key`。canonical string 中幂等键行为空字符串,body 摘要使用空字节 SHA-256。
## 六、幂等与重复规则
- `X-Nonce`:短时间防重放,使用后不能再次使用。
- `Idempotency-Key`:一次 HTTP 写操作标识;网络重试必须复用原值。
- `appKey + eventNo`:第三方业务事件唯一标识。
- `tenantId + inboundDetailId + externalDetailNo`:测量明细绑定唯一约束。
- 相同事件号或幂等键重试时,`data` 原文及图片内容必须与首次完全一致,否则返回冲突。
## 七、主要失败场景
| 业务码 | 场景 |
|---|---|
| `A0400` | data 不是有效 JSON、图片为空或无法读取 |
| `A0401` | AppKey、时间戳或签名无效 |
| `A0403` | AppKey 未绑定请求仓库,或内部凭证无效 |
| `A0404` | 入仓码不存在,或货物明细不属于入库单关联订单 |
| `A0409` | 入库状态不允许测量、Nonce 重放、事件/幂等内容不一致、明细重复绑定 |
| `A0422` | 字段缺失、格式或数值范围不符合要求 |
| `S0503` | Order 或 File 服务暂不可用 |
普通业务失败应以响应体 `code` 判断,不能只判断 HTTP 状态。
## 八、后台处理过程
```text
验签和防重放
→ 按入仓码及绑定仓库查入库单
→ 调用 Order 校验货物明细归属
→ 检查第三方明细号是否已经绑定
→ 调用 File 保存并校验真实图片
→ 写入一条测量批次和一条测量明细
→ 返回测量、明细和图片ID
```
如果图片已保存但测量数据落库失败,Firstleg 会调用 File 执行补偿清理。
## 九、上线前置
部署新版 Firstleg 前,先执行:
```text
firstleg/src/main/resources/db/phase2-third-party-single-measurement-migration.sql
```
或执行已内联该增量的入库测量与计费统一脚本:
```text
deploy/sql/2026-08-04-入库新增表字段-MySQL8一键执行.sql
```
同时确认 Firstleg、Order、File 使用一致的 `INTERNAL_SERVICE_TOKEN`,并配置 `ORDER_SERVICE_URL`、`FILE_SERVICE_URL` 或启用 Nacos 服务发现。
+5
View File
@@ -0,0 +1,5 @@
# 双区域部署与 Nacos 规划(已替代)
自 2026-09-29 起,不再规划开发/测试/生产与 CN/OVERSEAS 双区域。当前唯一目标为单一测试环境、所有服务同机部署。唯一部署主契约见[测试环境单机部署与配置契约](测试环境单机部署与配置契约.md),认证通信见[统一认证与服务通信契约](统一认证与服务通信契约.md)。
此文件仅保留旧链接入口,不再定义有效规则。运行配置切换仍待实施与验证。
+41
View File
@@ -0,0 +1,41 @@
# 国内货柜履约
本目录负责国内分柜、订舱、拖车、拣货、装柜、装柜后的报关协同、送港、进港和甩柜事实。本入口只维护流程路由;代码、部署和验收状态以环境主契约及实际证据为准,不在此重复记录。
## 当前流程入口
- [头程到尾程流程节点梳理](../头程到尾程流程节点梳理.md):三大业务块总览和 F01-F40 节点总表。
- [阶段三:国内货柜履约与出仓](../头程到尾程分阶段流程/阶段三-国内货柜履约与出仓.md):分柜、订舱、拖车、拣货、装柜、报关和国内出仓的详细操作。
- [阶段四:海运、目的港与尾程计划](../头程到尾程分阶段流程/阶段四-海运目的港与尾程计划.md):实际开船后的海运、目的港和尾程计划衔接。
- [报关资料与船期价格接入梳理](报关资料与船期价格接入梳理.md):报关资料、报关行回执、客户确认/打回、正式申报、海关结果和船期价格专题。
- [船期日历功能规划](船期日历功能规划.md):渠道、周模板、单次船期、收货截止时间和按渠道货量统计的独立日历规划。
- [报关代码开发交接清单](../头程到尾程/报关代码开发交接清单.md):报关专项的实现范围与验收线索,任务确实涉及时读取,不代表当前完成状态。
## 货柜关键节点
货柜对外统一使用 `cabinetNo` 柜次号(`D0001` 起,全局连续、不按日期重置),创建时只生成一次;日历、提柜、智能装柜、货柜详情及出仓均读取该值。`containerBookingId` 仅用于技术关联,`containerNo` 为真实集装箱号。货柜不再维护独立的 CB 格式 `bookingNo`;海运订舱和外接货登记各自的 `bookingNo` 不属于货柜编号,保留各自业务语义。
```text
分柜/订舱/拖车 → 拣货 → 装柜完成(LOADED)
├─ 报关协同:资料 → 报关行回执 → 客户确认/打回重做
│ → 全部客户确认 → 整柜提交 → 正式申报 → 海关结果
↓ 报关完成
进入待发区
↓
送港运输:离仓 → 送港 → 进港 → 甩柜/改配(如发生)
↓
船舶实际开航后进入海运节点
```
报关完成是进入待发区的门槛。进入待发区后再推进离仓、送港、进港和船期;甩柜/改配只改变运输船次,不影响已完成的报关资料、回执和客户确认。报关行回执、客户确认、正式申报、海关放行、进港、甩柜和实际开船分别记录,不能用其中一个节点代替另一个节点。
费用确认属于头程下单块的并行事项,不阻断排柜、拣货或装柜;装柜完成时仍未确认的当前有效费用按系统默认确认并保留来源。这个默认确认只适用于费用,不适用于报关资料的客户确认。
## 当前变更相关文档
- [国内货柜履约需求确认表](国内货柜履约需求确认表.md):需要核对已确认的业务口径时使用。
- [国内货柜履约页面与原型清单](国内货柜履约页面与原型清单.md):需要核对页面范围或原型入口时使用。
## 冻结记录(只用于追溯)
开发规划、进度、门禁、验收矩阵、审计、产品确认和旧任务卡已移入[国内货柜履约历史记录](归档/README.md)。这些文件不删除、不回写;若要调整当前流程,修改总览、对应阶段或报关专题,并同步实际接口/权限契约。

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

@@ -0,0 +1,100 @@
# 虫虫出海国内货柜履约需求确认表
> 创建日期:2026-07-28
> 当前状态:已进入开发规划(已确认结论按本表执行;技术实现项仍需契约评审)
> 用途:记录会影响国内货柜履约范围、流程、数据模型、页面和验收的产品决策。
## 一、维护规则
- 状态统一使用:待确认、确认中、已确认、已取消。
- 阻断级别统一使用:开工阻断、模块阻断、非阻断。
- 结论确认后同步更新 `归档/国内货柜履约开发规划.md`、`归档/国内货柜履约开发进度表.md` 和受影响的页面原型。
- 未确认事项只能作为候选方案,不能直接写成固定开发或验收承诺。
## 二、确认事项
| 编号 | 决策/问题 | 当前建议 | 阻断级别 | 状态 | 负责人 | 计划确认 | 最终结论 | 影响模块 |
|---|---|---|---|---|---|---|---|---|
| P3-Q1 | 智能排柜需考虑哪些硬约束和软偏好? | 业务提供可执行规则表,建议可解释并由人工确认 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10 | 装载率上限 110%;税率高排前暂作为可配置排序,不作为不可变硬编码;系统给出可解释建议,人工确认后生成任务 | 智能排柜、拣货任务 |
| P3-Q2 | 是否存在拼柜、一单多柜和拆批出仓? | 通过订单-柜次关系预留能力,页面按高频场景逐步开放 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10 | 支持一单多柜、一个柜拼多个订单;采用“父订单→子订单→柜次”关系。已装载数量形成子订单,未装载数量自动生成待后续处理的子订单;不新建独立出仓单 | 订单、柜次、排柜、拣货 |
| P3-Q3 | 原型“预约托车”是否统一为“预约拖车”? | 建议使用行业常用的“拖车”,同时确认业务实际含义 | 非阻断 | 已确认 | 产品/业务 | 2026-08-10 | 页面、接口和文档统一使用“预约拖车” | 页面文案、接口字段说明 |
| P3-Q4 | PDA 开发、扫描与发布方式是什么? | 保持设备适配层,不绑定厂商 SDK | 非阻断 | 已确认 | 用户当前对话确认 | 2026-08-10 | 采用 uni-app 开发并支持在线更新;Android 广播方式已接入:Action=`android.intent.action.SCANRESULT`、字符串 Extra=`value`。设备型号不构成开发、发布或验收门禁,扫描适配保持厂商无关 | PDA 拣货、在线更新、真机验收 |
| P3-Q5 | 拣货是否依赖实时库存和库位可用量? | 默认使用入库测量与计费处理单元和当前位置;如需完整库存,单独评估 WMS 范围 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10 | PDA 拣货必须依赖实时库存和库位可用量;首版复用入库测量与计费处理单元、当前位置和可用量接口,超量、库存不足和库位不可用由服务端拒绝;不扩展完整 WMS | 入库测量与计费及国内货柜履约契约、拣货、库存边界 |
| P3-Q6 | 柜封照片有哪些必传类型、数量、采集方式、处理规则和留存期限? | 五类证据、角色和留存按确认版直接进入契约 | 模块阻断 | 已确认 | 产品/业务 | 2026-08-10 | 空仓、半仓、满仓、锁仓、带锁码照五类各至少 1 张有效照片,同类型可无限追加;PDA 只能现场拍照;后台操作员和理货员可人工上传;拣货员只负责 PDA 现场采集,不开放后台人工上传;错图不硬删除,按原因、操作人、时间作废;带锁码照必须填写锁码文本;照片无限期保留,客户不可见照片和锁码 | 装柜、PDA 拍照、Admin 上传、文件存储、订单后程门禁 |
| P3-Q7 | 报关资料清单是否按国家、渠道和货物类型变化? | 清单配置化,并保存业务使用的清单版本 | 模块阻断 | 已确认 | 产品/业务 | 2026-08-10 | 首版不对接海关或代理系统;按人工维护资料清单、收集/补件并保存版本,具体清单可配置 | 客户资料、报关审核、文件版本 |
| P3-Q8 | 报关代理如何接收资料并返回回执? | 首版系统内整理、线下提交,正式接口后续评估 | 模块阻断 | 已确认 | 产品/业务 | 2026-08-10;2026-09-24 更正 | `LOADED` 后平台按客户/入仓码收集资料并线下发给报关行;授权人员上传每轮报关行回执,发给对应客户确认。客户打回后重新上传、重新发报关行并生成新回执,直到该客户确认;记录资料版本、回执版本、roundNo、发送时间和确认/打回审计 | 报关协同、客户确认、回执上传 |
| P3-Q9 | “港务信息”指船期、港口作业状态还是两者,包含哪些字段,由谁维护? | 国内货柜履约只维护订舱与出仓前船期资料 | 已重新归期 | 已确认 | 产品/业务 | 2026-08-19 | 柜子确认离开国内仓库后的船公司/货物跟踪查询、每 3 天最多 3 次、来源、更新时间和过期标识整体归海外仓业务;国内货柜履约不建设或验收该查询 | 国内货柜履约订舱资料、海外仓业务船节点查询 |
| P3-Q10 | 订单进入“装柜完成”后发现错误如何处理? | 仅保留线下人工处理和审计,不建设在线冲正 | 模块阻断 | 已确认 | 产品/业务 | 2026-08-10 | `LOADED` 后不提供在线冲正/回退入口,统一线下人工处理;系统保留原状态和审计记录,不由国内 Admin/PDA 推进 `DELIVERED` | 装柜完成门禁、权限、审计 |
| P3-Q11 | 九个动作中哪些是强制前置,哪些允许并行? | 统一门禁按已确认前置执行;PDA 单柜次单人作业 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10;2026-09-24 更正 | 费用确认不阻断排柜、预装、PDA 或装柜。进入 `LOADED` 只校验物理装柜、PDA、数量、真实柜号和五类证据;`LOADED` 后先完成退税报关,报关完成后进入待发区,再推进送港和船期;甩柜/改配只改变船次,不重做已完成报关;PDA 单柜次单人作业 | 全流程、状态机、PDA、报关、送港、页面进度 |
| P3-Q12 | 报关回执包含哪些类型,客户确认和海关放行如何衔接? | 首版人工上传回执并保留版本 | 开工阻断 | 已确认 | 产品/业务 | 2026-08-10;2026-09-24 更正 | `LOADED` 后按客户/入仓码收集资料并发送报关行;报关行回执发对应客户确认,客户打回则重新上传、重新发送并生成新回执;所有客户确认后才向报关行提交整柜资料并正式申报;之后分别记录查验、不查验放行、补件/退回等海关结果。回执上传不等于客户确认,客户确认也不等于海关放行 | 报关状态、客户回执、整柜申报、海关结果 |
| P3-Q13 | 国内货柜履约终点以什么状态为准? | 国内系统以能掌控的最后环节为终点 | 开工阻断 | 已确认 | 用户当前对话确认 | 2026-08-08 | 国内货柜履约终点为 `LOADED`/装柜完成;`DELIVERED`/派送完成只能在到达海外仓后由海外仓可信回传推进,不属于国内国内货柜履约操作和验收范围 | 阶段边界、状态、里程碑、验收、海外仓回传 |
| P3-Q14 | 订舱、渠道柜次、放舱与智能排柜的先后关系是什么? | 线下已订妥的订舱在创建时完整登记五项真实运输快照并直接确认;放舱不覆盖首次快照 | 开工阻断 | 已确认 | 用户当前对话确认 | 2026-08-12 | 订舱创建请求必须携带提单号、船名、航次、预计开船时间、预计到港时间五项真实运输数据,并直接进入 `CONFIRMED`;渠道、箱型和数量同时确定,系统按箱型需求数量生成绑定渠道的稳定内部柜次。未放舱不影响候选查询、智能推荐、人工调整和保存装柜计划;同一柜次只能装同渠道入库单,服务端禁止跨渠道混装。`RELEASED` 仅作为后续放舱/PDA 门禁,不补录、不覆盖首次五项运输快照;真实集装箱号可在放舱时或之后录入 | 订舱、柜次、智能排柜、预装、PDA、运输信息 |
| P3-Q15 | 客户未确认费用是否阻断排柜、装柜?装柜完成后如何处理? | 费用作为并行事实,装柜完成时对当前有效版本做系统默认确认 | 模块阻断 | 已确认 | 用户当前对话确认 | 2026-09-24 | 客户费用确认不阻断排柜、预装、PDA 或装柜。装柜完成后,针对本次已装范围的当前有效且已发布费用版本,若客户未确认则记录“系统默认确认(装柜完成)”;保留客户确认与 `SYSTEM_AUTO_AT_LOADED` 来源、版本、柜次/入仓码、时间和幂等标识。没有有效费用版本不得伪造确认;部分装载不确认余量或整张未完成订单 | 费用版本、装柜完成、客户进度、审计、部分装载 |
| P3-Q16 | 报关资料何时收集、何时正式报送? | 装柜后通知报关,按客户确认轮次完成后正式提交 | 模块阻断 | 已确认 | 用户当前对话确认 | 2026-09-24 | `LOADED` 后以最终实装清单通知报关行,按客户/入仓码收集资料并发送报关行;回执发客户确认,打回则重新上传、重新发送并产生新回执,循环至所有客户通过;全部客户确认后再提交整柜资料给报关行确认,由报关行正式申报;海关查验/不查验放行等结果单独记录;报关完成后进入待发区 | 客户资料、回执轮次、客户确认、整柜申报、待发区 |
| P3-Q17 | 送港和报关是否互相等待?甩柜何时发生? | 报关完成后进入待发区,实际开船才进入海运 | 开工阻断 | 已确认 | 用户当前对话确认 | 2026-09-24 | `LOADED` 后先完成报关;报关完成后进入待发区,再安排拖车、送港和进港。船舱不足记录 `ROLLED_OVER`,保存原船次、改配船次、滚动次数和通知;甩柜/改配不影响已完成报关资料、回执和客户确认;只有承运船舶真实开航才写 `VESSEL_DEPARTED`/海运节点 | 送港、船次、甩柜、海运节点 |
### 2.1 PDA 已确认子决策
| 编号 | 确认日期 | 已确认结论 | 实现/验收含义 |
|---|---|---|---|
| P3-PDA-D01 | 2026-08-09 | PDA 正式作业必须联网;断网时不能开始正式拣货、提交、完成任务或推进 `LOADED` | 不建设离线业务提交队列;网络恢复后由员工刷新并重试 |
| P3-PDA-D02 | 2026-08-09 | 进入任务即标记“拣货中” | 进入动作需调用后端开始接口,不能只改本地页面状态 |
| P3-PDA-D03 | 2026-08-09 | 扫描结果先保存在本地草稿,点击“提交”时才批量写入后端,不逐码提交 | 批量请求需携带本次草稿全部明细;提交成功后再清理草稿 |
| P3-PDA-D04 | 2026-08-09 | 未提交草稿需持久化,并绑定作业员、任务和柜次;其他账号不能继承 | 应用退出、前后台切换或设备重启后仍可恢复;成功提交或明确放弃后清理 |
| P3-PDA-D05 | 2026-08-09 | 允许部分拣货和跳拣;每个未完成项必须填写异常原因 | 存在未解决异常时任务进入异常挂起/待处理,不能完成或推进 `LOADED` |
| P3-PDA-D06 | 2026-08-09 | 使用轻量、对员工不可见的幂等与版本控制 | 重复提交返回原结果;版本冲突提示员工刷新后重试,不静默覆盖 |
| P3-PDA-D07 | 2026-08-09 | PDA 只能现场拍照;Admin 可人工上传 | PDA 不提供相册选择;Admin 上传必须受权限、归属和审计约束 |
| P3-PDA-D08 | 2026-08-09 | 同类型证据允许多张并采用追加记录;错误/重复照片不硬删除,只作废 | 每条照片独立保存;作废记录原因、操作人和时间,历史可追溯 |
| P3-PDA-D09 | 2026-08-09 | 空仓、半仓、满仓、锁仓、带锁码照五类证据各至少 1 张有效且未作废的照片,可多张;带锁码照同时要求锁码文本 | 服务端完整性门禁按“每类至少一张有效记录”校验,不能按单槽位替换模型实现 |
> 验收映射:当前自动化已真实覆盖五类证据上传、同类型多图追加、跨类型/伪造 `fileId` 拒绝、锁码文本门禁和错图作废审计;设备在线、持久化草稿批量提交仍按[验收任务拆分与待确认清单](归档/国内货柜履约验收任务拆分与待确认清单.md)保留 coverageGap。
## 三、已确认架构决策
| 编号 | 确认日期 | 最终结论 | 影响 |
|---|---|---|---|
| P3-D1 | 2026-08-08 | 国内货柜履约不新建独立出仓单,现有订单列表承载全部主状态;柜次、订舱、拖车、拣货、证据和报关作为订单关联子对象 | 取消出仓单页面和数据模型规划,改为增强现有订单列表/详情及服务端统一编排 |
| P3-D2 | 2026-08-10 | 订单拆分采用“父订单→子订单→柜次”;已装载数量形成子订单,未装载数量自动生成后续子订单;支持一单多柜和多订单拼柜 | 后端必须保留父子订单、柜次、数量分摊和整体时间线;不得把未装载部分静默丢弃 |
| P3-D3 | 2026-08-10;2026-09-24 更正 | `LOADED` 只表示物理装柜完成,门禁包含真实柜号、PDA 拣货、数量守恒和五类证据;报关完成后进入待发区,再推进送港/进港;甩柜只影响船期,不影响已完成报关;`LOADED` 后错误线下人工处理 | 统一门禁服务分别维护物理装柜、报关案例、待发区、送港/进港、甩柜和实际开船事实;国内页面不提供在线冲正或 `DELIVERED` 操作 |
| P3-D4 | 2026-08-10;2026-08-19 更正归期 | 船公司官网查询:每 3 天一次、最多 3 次,保存来源、更新时间和过期标识 | 该能力及首批六家来源整体归海外仓业务,国内货柜履约只保留订舱与出仓前船期资料 |
| P3-D5 | 2026-08-10 | 初始化仓库常用角色:操作员、拣货员、理货员;按最小权限授予拣货、证据上传和查看能力 | 角色初始化由 IAM/统一 SQL 任务实现,具体权限矩阵在技术契约评审中落表 |
| P3-D6 | 2026-09-24 | 费用确认不阻断排柜和装柜;装柜完成后对已装范围的当前有效已发布版本执行系统默认确认,来源与客户主动确认分开审计;`LOADED` 后报关采用“报关行回执→客户确认/打回重做→所有客户通过→整柜正式申报→查验/放行”,报关完成后进入待发区,送港/船次单独记录甩柜和实际开船 | 同步费用版本、部分装载、客户报关案例、回执轮次、整柜申报、待发区、送港/船次和客户/后台节点 |
## 四、建议确认顺序
1. 已完成 P3-Q1~P3-Q3、P3-Q5~P3-Q14 的产品确认,可直接进入契约和实现拆分。
2. P3-Q4 已确认采用 uni-app、在线更新与 Android 广播扫描;后续按既定发布安排完成常规真机验收。
3. P3-Q5 已确认复用入库测量与计费实时库存、当前位置和可用量接口,完整 WMS 不纳入国内货柜履约。
## 五、产品与业务确认会议
### 5.1 参会角色
- 产品负责人:逐项说明问题、候选方案和影响范围,维护最终结论。
- 业务负责人:确认流程、规则、例外、责任边界和客户可见范围。
- 仓库/运营代表:确认现场作业、PDA、照片、拖车、装柜和冲正可执行性。
- 研发与测试代表:识别数据、接口、设备、权限和验收风险,不代替业务作决定。
### 5.2 会议输入
- 本确认表中的 P3-Q1~P3-Q17。
- `归档/国内货柜履约开发规划.md` 的流程、状态、里程碑和任务骨架。
- `国内货柜履约页面与原型清单.md` 中已有参考原型和待补页面。
- 入库测量与计费输出契约、目标 PDA 信息、文件存储能力及报关/港务协作现状。
### 5.3 每项确认要求
1. 必须填写负责人、计划确认日期和可执行的最终结论,不能只记录“按建议处理”。
2. 最终结论需明确正常流程、异常/冲正、权限责任和验收口径。
3. 暂缓事项必须写明当前范围是否排除、临时方案、影响模块和再次确认日期。
4. 开工阻断项未解除时,不得将受影响模块标记为可开发。
5. 会议结束后,将结论同步到开发规划、开发进度表、页面原型和后续验收任务。
### 5.4 会议输出(确认版)
- 14 项确认事项的状态和最终结论已同步;P3-Q4 已确认采用 uni-app、在线更新与 Android 广播扫描。
- 需要新增或调整的原型清单。
- 国内货柜履约范围内/范围外清单及跨期依赖。
- 仍有风险的事项、责任人和完成日期。
- 已允许进入 T02 契约设计与任务拆分;未决技术项只阻断其对应实现,不反向阻断整期已确认范围。
@@ -0,0 +1,56 @@
# 虫虫出海国内货柜履约页面与原型清单
> 创建日期:2026-07-28
> 当前状态:核心 Admin 装柜页面已部署联调;PDA 提交契约和客户端国内货柜履约页面仍未完成
> 原型依据:`参考资料/出仓流程.png`、现有订单列表/详情、现有 PDA 拣货原型
> 已确认边界:不新增独立出仓单;国内国内货柜履约终点为 `LOADED`/装柜完成
## 一、维护规则
- 页面状态统一使用:待确认、待原型、原型中、待评审、已确认、开发中、联调中、已阻塞、已完成;“已有/部分参考原型”仅表示原型覆盖程度,不表示功能完成。
- 页面只有在业务流程、角色权限和关键字段确认后才能标记“已确认”。
- 页面原型至少覆盖正常态、空态、加载态、失败态、无权限态和关键冲突态。
- 当前先列页面级大项,后续按开发进度表的大任务逐项拆交互、字段和验收。
## 二、管理后台
| 页面 ID | 页面/入口 | 主要能力 | 对应大任务 | 原型状态 | 依赖确认项 | 备注 |
|---|---|---|---|---|---|---|
| P3-ADM-01 | 现有订单列表国内货柜履约增强 | 查询、筛选、国内货柜履约主状态、异常和阻塞摘要 | T03 订单国内货柜履约编排与柜次 | 待原型 | P3-Q2、P3-Q11 | 复用现有订单列表,不新增出仓单列表和创建入口 |
| P3-ADM-02 | 现有订单详情国内货柜履约增强 | 柜次、任务、五类装柜照片、锁码、报关和时间线 | T03 订单国内货柜履约编排与柜次 | 待原型 | P3-Q11 | 组合现有货柜和装柜清单能力,补统一编排区 |
| P3-ADM-03 | 智能排柜 | 生成建议、冲突、调整和确认 | T04 智能排柜 | 开发中 | P3-Q1、P3-Q2 | Admin `/container-loading/smart-loading` 已部署;真实完成态受 PDA 门禁阻断 |
| P3-ADM-04 | 订舱管理 | 订舱申请、结果、变更和异常 | T05 订舱与港务信息 | 已有参考原型 | P3-Q9、P3-Q11 | 已有订舱列表、新增和详情 |
| P3-ADM-05 | 订舱与出仓前船期资料 | 人工维护船名航次、港口及预计时间快照 | T05 订舱资料 | 部分参考原型 | P3-Q9 | 出仓后的来源、更新时间和节点查询页面整体归海外仓业务 |
| P3-ADM-06 | 拖车预约 | 服务商、车辆司机、时间窗和节点 | T06 拖车预约 | 已有参考原型 | P3-Q3、P3-Q11 | 已有拖车列表和新增表单,需补预约及到离仓节点 |
| P3-ADM-07 | 拣货任务与复核 | 分配、进度、差异、复核和异常 | T07 PDA 拣货与复核 | 已阻塞 | P3-Q5 | 真实任务领取可用;PDA `pick` 仍返回 S0500,批量提交契约未实现 |
| P3-ADM-08 | 装柜证据复核 | 柜号、锁码文本、五类多图、Admin 上传、作废和复核 | T08 装柜及柜封证据 | 开发中 | P3-Q6 | 五类多图追加、作废和 Admin 上传已通过真实接口;终态复核受 PDA 阻断 |
| P3-ADM-09 | 报关协同 | 资料审核、补件、提交批次和回执上传 | T09 报关资料与回执 | 部分参考原型 | P3-Q7、P3-Q8、P3-Q12 | 已有报关单和单证管理,缺客户补件协同闭环 |
| P3-ADM-10 | 订单装柜完成操作区 | 门禁检查、确认装柜完成、阻塞原因和冲正 | T10 装柜完成门禁 | 开发中 | P3-Q10、P3-Q11、P3-Q12 | 门禁读取和阻塞原因已有真实接口;置于现有订单详情,不提供在线冲正 |
## 三、企业客户端
| 页面 ID | 页面/入口 | 主要能力 | 对应大任务 | 原型状态 | 依赖确认项 | 备注 |
|---|---|---|---|---|---|---|
| P3-CLI-01 | 现有订单列表国内货柜履约增强 | 查看本企业订单的装柜阶段、柜次和当前节点 | T11 客户端国内货柜履约协同 | 待原型 | P3-Q11 | 复用现有订单列表,不新增出仓单列表 |
| P3-CLI-02 | 现有订单详情国内货柜履约增强 | 时间线、柜号、船期和允许公开的证据 | T11 客户端国内货柜履约协同 | 待原型 | P3-Q6、P3-Q9 | 在现有订单详情补国内货柜履约区块,不新建重复详情对象 |
| P3-CLI-03 | 报关资料上传 | 清单、上传、补件、版本和处理进度 | T09 报关资料与回执 | 待原型 | P3-Q7 | 文件规则确认后细化 |
| P3-CLI-04 | 报关回执下载 | 回执列表、类型、版本和授权下载 | T09 报关资料与回执 | 待原型 | P3-Q8、P3-Q12 | 区分客户可见回执 |
| P3-CLI-05 | 出仓前船期资料 | 订舱预计开船、到港快照和变更 | T11 客户端国内货柜履约协同 | 待原型 | P3-Q9 | 出仓后的实时节点、来源、更新时间和过期展示归海外仓业务 |
## 四、PDA
| 页面 ID | 页面/入口 | 主要能力 | 对应大任务 | 原型状态 | 依赖确认项 | 备注 |
|---|---|---|---|---|---|---|
| P3-PDA-01 | 登录 | 人员登录和快捷登录 | T07 PDA 拣货与复核 | 已有静态原型 | - | 真实鉴权待服务端接入 |
| P3-PDA-02 | 箱号与任务选择 | 领取任务、进入即标记拣货中、选择箱号和查看进度 | T07 PDA 拣货与复核 | 已有静态原型 | P3-Q5、P3-Q11 | 需对接真实任务;单柜次单作业员,不支持换班接管 |
| P3-PDA-03 | 扫码拣货 | 广播扫码、持久化草稿、整拣、部分拣货、跳拣和撤销 | T07 PDA 拣货与复核 | 开发中 | P3-Q5、P3-Q11 | 广播 Action/Extra 已接入;真实单明细 pick 当前仍有 S0500,断网禁止正式提交 |
| P3-PDA-04 | 拣货提交 | 批量汇总、异常原因、幂等提交、版本冲突和完成统计 | T07 PDA 拣货与复核 | 已阻塞 | P3-Q5、P3-Q11 | 产品已确认点击提交时批量写后端;真正 batch endpoint、整批事务、幂等与回滚尚未实现 |
| P3-PDA-05 | 装柜拍照上传 | PDA 现场拍摄五类证据、多图追加、锁码文本、预览、失败重试、作废和提交 | T08 装柜及柜封证据 | 原型中 | P3-Q6 | 每类至少一张有效照片;PDA 不开放相册,Admin 人工上传另设入口 |
## 五、下一步收口顺序
1. 先修复 PDA `pick` 第二处 `S0500`,恢复领取、拣货、复核、装柜完成和报关终态真实链路。
2. 单独实现 P3-PDA-04 原子批量提交契约,覆盖整批事务、幂等、版本/库存快照和失败回滚。
3. 完成 P3-PDA-05 真机拍照、多图追加、失败重试与作废验收。
4. 补齐 P3-ADM-01、P3-ADM-02、P3-ADM-10 和企业客户端国内货柜履约页面的最终交互验收。
5. 复跑国内货柜履约定向和默认全量 HTTP 验收,只有所有硬门禁真实通过后才把页面和整期标记为完成。
+18
View File
@@ -0,0 +1,18 @@
# 国内货柜履约历史记录
本目录保存国内货柜履约的开发规划、进度、开工门禁、验收、审计和旧确认材料。内容不删除,也不作为当前流程入口;当前规则以[国内货柜履约 README](../README.md)、[头程到尾程流程节点梳理](../../头程到尾程流程节点梳理.md)和[报关资料与船期价格接入梳理](../报关资料与船期价格接入梳理.md)为准。
## 文件
- [开发规划](国内货柜履约开发规划.md)
- [开发进度表](国内货柜履约开发进度表.md)
- [开发进度表(Excel)](虫虫出海国内货柜履约开发进度表.xlsx)
- [需求确认表之外的开工门禁与验收记录](国内货柜履约开工门禁.md)
- [验收任务拆分与待确认清单](国内货柜履约验收任务拆分与待确认清单.md)
- [货柜管理全链验收矩阵](货柜管理全链验收矩阵-2026-08-13.md)
- [货柜履约原型字段验收矩阵](货柜履约原型字段验收矩阵-2026-08-17.md)
- [闭环审计报告](国内货柜履约闭环审计报告-2026-08-08.md)
- [装柜闭环产品确认表](国内货柜履约装柜闭环产品确认表-2026-08-08.md)
- [装柜闭环开发前确认单](国内货柜履约装柜闭环开发前确认单-2026-08-08.md)
- [Wave1 开发任务卡](国内货柜履约Wave1开发任务卡-2026-08-09.md)
@@ -0,0 +1,58 @@
# 国内货柜履约 Wave 1 开发任务卡
> **历史版本声明(2026-09-24)**:本文是旧版低风险任务拆分,不能直接作为当前开发排期或门禁依据。当前流程改为“柜前资料预收集 → 物理装柜 `LOADED` → 按最终实装清单正式报关 → 有效放行回执后 `DEPARTED_WAREHOUSE`”,费用确认不阻断装柜,装柜完成时按已装范围对当前有效已发布费用版本执行系统默认确认。当前开发范围以 [头程到尾程流程节点梳理(重构版)](../../头程到尾程流程节点梳理.md)、[报关资料与船期价格接入梳理](../报关资料与船期价格接入梳理.md) 和最新需求确认表为准。
整理日期:2026-08-09
用途:产品确认后用于研发排期和任务分派。
当前范围:只做低风险基础能力;不提前实现未确认的主状态机规则。
## 一、统一范围口径
- 不新增独立出仓单主对象、列表或详情页面。
- 现有订单是国内货柜履约唯一主对象;柜次是执行对象。
- 订单与柜次通过履约分片/分配关系表达一单多柜、一柜多单和部分履约。
- 国内国内货柜履约终点是 `LOADED`/装柜完成;国内端不能手工推进 `DELIVERED`。
- 五类装柜照片为:空仓、半仓、满仓、锁仓、带锁码照;锁码文本单独保存。
## 二、第一批可立即开发
| 编号 | 端/模块 | 任务 | 目标文件或范围 | 验收标准 | 依赖 |
|---|---|---|---|---|---|
| W1-BE-01-R | 后端 | 订单-柜次-履约分片契约设计 | 现有 order/firstleg/loading DTO、关系表和 OpenAPI;不得创建 `fl_outbound_order` | 支持多对多关系、快照、版本和客户隔离;形成评审稿 | 产品确认 Q2/Q11 后冻结实现 |
| W1-BE-06 | 后端 | 拖车幂等与实际节点修复 | TruckAppointmentService、Controller、Mapper、测试 | 缺少幂等键时拒绝;同键重放返回原结果;冲突返回 409;到仓/离仓时间可追溯 | 无 |
| W1-BE-08 | 后端 | OpenAPI 盘点与集成测试骨架 | 订舱、拖车、排柜、PDA、文件、门禁接口文档和契约测试 | 文档路径与 Controller 一致;建立入库测量与计费终点到装柜完成的测试骨架 | 仅依赖现有接口 |
| A-01 | Admin | 订舱 DTO、版本和动作权限对齐 | `apps/admin-web/src/modules/ocean-bookings/` | 创建、编辑、提交、确认、放舱、变更、取消均使用真实字段、版本和权限 | 后端现有契约 |
| A-02 | Admin | 订单详情挂载国内货柜履约作业组件 | `apps/admin-web/src/modules/unified-orders/` | 从订单详情可进入分柜、预装、拣货、装柜;刷新可恢复;错误和无权限有明确提示 | 订单与入库关联字段确认 |
| PDA-01 | PDA | 五证据槽位和上传队列基础 | `apps/pda-uniapp/pages/` 及文件上传适配 | 五类槽位固定;临时路径不作为业务证据;失败可重试;重复提交不产生重复有效记录 | File 上传接口 |
| CLI-01 | Client | 内部证据字段脱敏 | `apps/client-web/src/modules/first-leg/` | Client 不返回、不展示照片、锁码和 `sealNo`;订单状态仍可正常展示 | 后端响应兼容 |
## 三、必须等产品确认
| 编号 | 决策 | 未确认前的处理 |
|---|---|---|
| Q1 | 排柜硬约束、软偏好和人工确认 | 不升级算法、不生成正式拣货任务 |
| Q2 | 拼柜、一单多柜、部分拣货是否开放 | 只做关系查询,不冻结聚合规则 |
| Q3 | `LOADING` 触发时点 | 保留现状,暂不改状态触发代码 |
| Q4 | PDA 设备、扫描头和仓库权限 | 先做接口适配,不做真机上线承诺 |
| Q5 | 是否实时校验库存/库位 | 不新增库存扣减逻辑 |
| Q7/Q8/Q12 | 报关资料、代理批次、回执及门禁关系 | 只做范围设计,不建正式业务状态机 |
| Q9 | 港务字段、来源、更新时间 | 不新增客户实时承诺 |
| Q10 | `LOADED` 后冲正和证据修正 | 不实现直接覆盖或冲正接口 |
| Q11 | 订舱、拖车、报关等强制前置 | 不把并行子状态写成硬门禁 |
| Q13 | 国内终点及海外仓回传映射 | 国内端移除人工 `DELIVERED` 操作 |
## 四、后续波次
1. Wave 0:完成 Q1~Q13 契约冻结和订单详情低保真确认。
2. Wave 1:完成本表第一批基础能力。
3. Wave 2:实现柜次级证据包、PDA 真实上传和服务端 `LOADED` 门禁。
4. Wave 3:实现报关协同、Client 只读展示和海外仓可信回传接口。
5. Wave 4:用同一真实订单完成正向、负向、权限、并发、幂等和弱网验收。
## 五、禁止误开工项
- 新建独立出仓单或独立出仓菜单。
- 允许无拣货、缺照片或缺锁码进入 `LOADED`。
- 国内 Admin/PDA 手工推进 `DELIVERED`。
- 在产品未确认前固化部分拣货拆单和一单多柜聚合规则。
@@ -0,0 +1,327 @@
# 虫虫出海国内货柜履约开发规划:国内出仓
> 创建日期:2026-07-28
> 状态:已进入分模块开发规划
> 流程依据:[出仓流程](../参考资料/出仓流程.png)中的头程物流“03 出仓”;当前以 `LOADED` 作为物理装柜节点,报关线和送港线在装柜后并行,实际开船后进入海运节点。
> 前置阶段:[订单与客户文档](../../订单与客户/README.md) · [入库测量与计费文档](../../入库测量与计费/README.md)
> 2026-08-10 产品确认版;2026-09-24 按最新流程更正:国内货柜履约不新建独立出仓单;支持一单多柜、一个柜拼多个订单,采用“父订单→子订单→柜次”关系,已装载数量形成子订单,未装载数量自动生成后续子订单。`LOADED` 仅校验真实柜号、PDA 拣货、数量守恒和五类证据;装柜后报关线按“客户资料→报关行回执→客户确认/打回重做→所有客户通过→整柜正式申报→查验/放行”推进,送港线独立记录离仓、进港、甩柜和改配,实际开船才进入海运。费用确认不阻断排柜和装柜;装柜完成后对已装范围的当前有效已发布费用版本执行系统默认确认,保留客户/系统来源。`LOADED` 后错误线下人工处理。五类证据各至少 1 张有效照片,同类型多张追加,PDA 仅现场拍照,后台操作员和理货员可人工上传,照片无限期保留且客户不可见。
> 当前范围更正:国内货柜履约保留 `DEPARTED_WAREHOUSE`、`PORT_RECEIVED`、`ROLLED_OVER` 和实际开船前的船次/港口事实;承运船舶真实 `VESSEL_DEPARTED` 后的六家船公司官网查询、`CarrierScheduleQuery` 和定时节点查询归入海外仓业务。国内侧不以预计 ETD 提前展示海运中。
> 主体模型与硬约束:国内货柜履约只实现“平台—客户”两级,业务 `tenant_id > 0` / `tenantId` 当前表示客户 ID;`tenant_id=0` 是平台身份、平台 RBAC 和平台公共仓储资源技术作用域,客户往来单位、订单、文件和费用归属客户 `tenant_id>0`。禁止新增租户主表、租户选择器、客户所属租户配置、租户切换、租户级 RBAC 或租户级配置,禁止把现有 `tenant_id` 改义为上级租户 ID;历史类名、路径和字段继续兼容。
## 一、国内货柜履约目标
国内货柜履约承接入库测量与计费“货物完成到仓、实测、差异处理和指定库位”的结果,将已受理货物转化为可执行、可追踪、可审计的国内出仓任务。
流程覆盖九个动作:
```text
智能排柜 → 订舱 → 预约拖车
↓
PDA 拣货 → 装柜并上传五类证据
↓
`LOADED`/装柜完成
├─ 报关:通知报关行 → 客户资料 → 报关行回执 → 客户确认/打回重做
│ → 所有客户通过 → 整柜正式申报 → 查验/放行
└─ 送港:拖车 → 离仓 → 送港/进港 → 甩柜/改配(如发生)→ 实际开船
```
国内货柜履约的装柜完成标准是同一订单/柜次已完成排柜和 PDA 拣货,空仓、半仓、满仓、锁仓、带锁码照五类证据各至少 1 张有效照片已真实上传,锁码文本已保存,数量守恒且服务端门禁通过后推进为 `LOADED`/装柜完成。`LOADED` 后报关线和送港线同时启动;客户确认不阻断送港,进港不代表报关完成,容量不足记录甩柜;只有承运船舶实际开航后才进入海运节点。`DELIVERED`/派送完成必须等货物到达海外仓后由海外仓可信回传推进,不是国内国内货柜履约人工操作。
### 原型动作覆盖
| 原型动作 | 规划模块 | 开发任务 | 覆盖结果 |
|---|---|---|---|
| 1. 智能排柜 | 智能排柜 | P3-PLAN-01、P3-PLAN-02 | 已覆盖,按 110% 装载率上限和可配置税率排序实现 |
| 2. 订舱 | 订舱与出仓前船期资料 | P3-BOOK-01 | 已覆盖 |
| 3. 预约托车 | 预约拖车 | P3-TRUCK-01 | 已覆盖,统一使用“预约拖车” |
| 4. PDA 拣货 | PDA 拣货与复核 | P3-PICK-01、P3-PDA-01、P3-PDA-02 | 已覆盖 |
| 5. 拍货柜及铅封照上传 | 装柜及柜封证据 | P3-LOAD-01、P3-LOAD-02 | 已确认五类证据各至少 1 张有效照片、同类型可多张,锁码文本必填 |
| 6. 客户上传报关资料 | 报关资料协同 | P3-CUS-01 | 已覆盖 |
| 7. 整理给到报关代理报关 | 报关资料协同 | P3-CLEAR-01 | 已覆盖 |
| 8. 回执上传并由客户确认 | 报关行回执与客户确认 | P3-CLEAR-01、P3-CUS-02 | 待补齐多轮回执、客户确认/打回和整柜正式提交 |
| 9. 送港、甩柜与实际开船 | 送港/船次事实 | P3-TRUCK-01、P3-CUS-02 | 装柜后与报关线并行;实际开船后进入海运节点 |
## 二、阶段边界
### 纳入国内货柜履约
- 现有订单国内货柜履约状态、订单-柜次关联、智能排柜建议、人工调整和版本确认。
- 订舱申请、舱位结果,以及出仓前人工确认或业务录入的船名航次、港口、ETD/ETA 等资料快照。
- 预约拖车、车辆司机、到仓装柜和离仓记录。
- PDA 任务领取、扫码拣货、部分拣货、异常、复核和幂等提交。
- 装柜、柜号、铅封号及货柜/铅封照片证据。
- `LOADED` 后通知报关行,客户上传报关资料、平台审核补件、线下发送报关行。
- 报关行回执上传、版本、客户确认/打回重做、客户可见范围和授权下载;所有客户确认后才提交整柜资料正式申报。
- 装柜后送港、进港、甩柜/改配和实际开船事实。
- 装柜完成门禁、确认、时间线和站内通知;`LOADED` 后纠错走线下人工流程。
### 明确不纳入国内货柜履约
- 入库、上架、移库、盘点、冻结、补货和完整 WMS;拣货仅复用入库测量与计费实时库存、当前位置和可用量接口。
- 港区闸口、车队、船公司、海关单一窗口的正式自动化接口。
- GPS 实时跟车、电子铅封、称重设备、摄像头 OCR 和 IoT 自动采集。
- 自动报关、关税计算、退税、完整清关业务和自动单证识别。
- 海上运输、海外清关、目的港提柜、海外仓入库和末端派送。
- 承运船舶真实 `VESSEL_DEPARTED` 后的 `CarrierScheduleQuery`、船公司查询、定时船节点和海上到港跟踪;整体归海外仓业务。国内侧保留送港、进港和甩柜事实。
- 无人工确认的全自动排柜、自动订舱和不可逆业务操作。
## 三、参与角色与数据边界
| 角色 | 数据范围 | 主要操作 |
|---|---|---|
| 企业订单操作员 | 当前企业订单及关联柜次 | 上传/补充报关资料、查看订舱与出仓前资料、下载回执 |
| 平台运营 | 授权客户、订单和柜次 | 确认排柜、订舱、维护出仓前船期资料和协调异常 |
| 仓库主管 | 被授权的平台收货仓 | 分配拣货任务、复核差异、确认装柜和出仓条件 |
| 仓库作业员 | 分配给本人或本仓的任务 | PDA 扫码、数量确认、异常上报和任务提交 |
| 操作员 | 授权仓库/订单/柜次 | 查看作业进度、人工上传装柜证据、协助处理异常 |
| 拣货员 | 分配给本人的单柜次任务 | PDA 扫码、数量确认、异常上报和批量提交;不开放后台人工证据上传 |
| 理货员 | 授权仓库/柜次 | 人工上传/补充/作废装柜证据、核对柜号和锁码、记录异常 |
| 拖车调度员 | 授权订单/柜次与车辆范围 | 预约车辆、维护司机/车牌、到仓和离仓节点 |
| 报关专员 | 授权客户、订单和报关批次 | 审核、退回、整理、提交资料并上传回执 |
| 平台管理员 | 平台授权范围 | 维护权限、规则和服务商;`LOADED` 后问题按线下流程处理,不提供在线冲正 |
服务端必须依据登录身份确定企业、仓库、客户和数据范围。前端传入的订单 ID、柜次 ID、仓库 ID、客户 ID、作业员 ID 或报关批次 ID 不能单独作为授权依据。
## 四、流程与状态设计
原图以 1 至 9 编号表达展示动作顺序。按本轮确认,费用确认不阻断排柜或装柜;`LOADED` 只校验物理装柜事实,装柜后报关线和送港线并行,客户确认不阻断送港,进港不代表报关完成,实际开船才进入海运。PDA 单柜次单作业员,不实现多人并行或任务接管。
### 1. 现有订单的国内货柜履约主状态
| 稳定编码 | 中文名称 | 含义 |
|---|---|---|
| `WAIT_SPLIT` | 待分柜 | 入库测量与计费已完成,等待排柜/预装 |
| `LOADING` | 装柜中 | 预装已确认,PDA 执行拣货和装柜证据上传 |
| `LOADED` | 装柜完成 | 真实柜号、PDA 拣货与数量守恒、五类证据各至少 1 张有效照片和锁码文本已通过服务端门禁;装柜后同时启动报关线和送港线 |
| `DELIVERED` | 派送完成 | 货物到达海外仓后由海外仓可信回传推进;属于国内货柜履约之后的只读状态 |
### 2. 子流程状态
- 订舱:待订舱、订舱中、已订舱、订舱失败、已取消。
- 拖车:待预约、已预约、车辆已到仓、装柜中、已离仓、改约、已取消。
- 拣货:待分配、待拣货、拣货中、待复核、已完成、异常挂起、已取消。
- 报关:`LOADED` 后待通知报关、客户资料待上传/审核、已发报关行、回执待客户确认、客户已确认、客户打回待重做、所有客户已确认、整柜正式申报、查验、放行/退回;回执上传不等于客户确认,客户确认不等于海关放行。
- 送港/船期:待送港、已离仓、送港中、已进港、甩柜/改配、待开船;只有实际 `VESSEL_DEPARTED` 后进入海运节点。
主状态由服务端根据已确认的必要子流程推进。客户端不得通过传任意目标状态跳过拣货复核、装柜证据或已配置的装柜完成门禁。
## 五、业务模块
### 1. 现有订单与柜次
- 不创建独立出仓单,现有订单从 `WAIT_SPLIT` 继续推进国内货柜履约状态。
- 通过“父订单→子订单→柜次”表达一张订单分多柜、多张订单拼柜和拆批;已装载数量形成子订单,未装载数量自动生成后续子订单,子订单必须保留来源订单和数量分摊快照。
- 订单保持用户当前看到的主状态;柜次承载多订单共享的订舱、拖车、装柜证据和船期信息。
- 订单详情展示关联柜次、子流程状态、异常和整体时间线。
- 所有主状态推进使用服务端门禁、幂等键和版本字段防止绕过与并发覆盖。
### 2. 智能排柜
- 原型仅明确“智能排柜”;已确认装载率上限为 110%,税率高排前仅作为可配置排序规则。柜型容量、重量、体积、箱数、同票/混票、不可混装和装载顺序由规则表配置并保留版本。
- 当前建议首版采用“系统建议、人工确认”;是否允许调整、是否强制填写原因由排柜规则确认。
- 建议排柜方案保留版本、规则版本、输入快照、操作者和前后差异,以支持追溯。
- 未确认方案不得生成正式拣货任务或执行不可逆状态变化。
### 3. 订舱与出仓前船期资料
- 国内货柜履约维护订舱、送港、进港、甩柜/改配和实际开船前的状态;承运船舶实际开航后由海外仓业务执行船公司和船节点查询。
- 船公司/订舱代理、航线、订舱号、船名航次、起运港、目的港、截单、截关、截港、ETD 和 ETA 暂列为候选字段。
- 订舱失败、改船、甩柜、船期延误和取消暂列为候选异常场景,按业务确认结果实现。
- 六家船公司来源、每 3 天/最多 3 次、最近有效结果和过期标识,以及对应适配层在 `VESSEL_DEPARTED` 后由海外仓业务船节点查询维护。
- 国内货柜履约页面展示的 ETD/ETA 必须明确为订舱或人工确认快照,不得伪装成出仓后的实时查询结果。
- 建议关键信息变更保留旧值、新值、原因,并向授权用户发送站内提醒。
### 4. 预约拖车
- 从往来单位选择已启用拖车服务商,维护车牌、司机、电话和预约时间窗。
- 记录提柜、到仓、装柜、离仓、还柜节点和交接说明。
- 支持改约、取消、迟到、未到、车辆更换和柜号变更。
- 司机手机号等个人信息按最小权限展示,不进入不必要的客户响应。
- 图片原文“预约托车”建议统一为行业常用的“预约拖车”,需产品最终确认。
### 5. PDA 拣货与复核
- 按已确认排柜方案生成仓库、柜次、订单和货物明细级任务。
- PDA 支持登录、领取、箱号选择、扫码、数量确认、部分拣货、跳拣、撤销和异常上报;进入任务即标记“拣货中”。
- 正式作业必须联网;断网不能开始正式拣货、提交、完成任务或推进 `LOADED`,不建设离线业务提交队列。
- 扫描只更新绑定作业员、任务和柜次的设备持久化草稿;员工点击提交时才将全部明细批量写入后端,成功或明确放弃后清理,其他账号不得继承。
- 服务端校验任务归属、状态、重复扫码、超量、错货和批量提交;重复提交返回原结果,版本冲突提示刷新后重试。
- 允许部分拣货和跳拣,但每个未完成项必须填写异常原因;存在未解决差异时任务挂起,不能完成或进入 `LOADED`。
- 单柜次只允许一名作业员;不实现多人并行、退出接管或换班释放。进入任务即标记拣货中,点击确认完成后由服务端批量落库并参与统一门禁,无需后台二次审核。
- 扫描器、声音、震动、网络和缓存通过设备适配层实现,不直接绑定单一厂商 SDK。
### 6. 装柜及柜封证据
- 维护柜号、铅封号、装柜开始/完成时间、操作人和异常说明。
- 空仓、半仓、满仓、锁仓、带锁码照五类证据各至少上传 1 张有效照片,可同类型多张追加;带锁码照同时要求锁码文本。
- PDA 只能现场拍照;Admin 可通过独立受权入口人工上传。上传前展示柜次、柜号、铅封号和照片类型,防止证据关联错误。
- 每张照片作为独立记录,支持上传进度、失败重试和提交前预览;错误或重复照片不硬删除,标记作废并记录原因、操作人和时间。
- 照片记录文件哈希、上传人、上传时间、关联柜次、有效/作废状态和作废审计;照片无限期保留,客户不可见照片和锁码。后台操作员和理货员按权限人工上传,拣货员仅通过 PDA 现场拍照。
- 锁码重复、已确认的必传照片缺失或复核未通过时禁止确认装柜完成。
- 修改柜号或铅封号需要二次确认、原因和完整审计。
### 7. 报关资料协同
- `LOADED` 后按最终实装清单建立每个客户/入仓码的报关案例;客户按资料清单上传发票、箱单、合同、委托书和申报要素等文件。
- 资料清单可按国家/地区、渠道和货物类型配置,并保存订单使用的清单版本。
- 平台报关专员审核完整性,可退回具体文件并记录补件原因和时限。
- 资料发送报关行时记录 roundNo 和发送时间,报关行回执上传后发对应客户确认;客户打回则重新上传、重新发送并生成新回执版本。
- 柜内所有客户确认后才生成整柜正式提交批次,冻结该批次关联的文件版本并交报关行正式申报。
- 首版采用系统内整理加线下提交,不直接对接海关单一窗口。
### 8. 报关回执与客户下载
- 授权人员人工上传报关行回传的每轮回执并关联客户报关案例;回执类型、版本、roundNo、操作者和客户确认/打回结果可追溯。
- 替换文件产生新版本,不覆盖原记录;退单或补件形成明确任务。
- 客户只能下载本企业且标记为客户可见的回执。
- 文件下载使用授权地址并记录审计,不暴露内部存储路径。
- 所有客户确认后,平台向报关行提交整柜资料;报关行正式申报后另行记录查验、不查验放行、补件/退回等海关结果。
### 9. 装柜完成确认与海外回传边界
- 服务端校验排柜已确认、PDA 拣货已完成、五类证据各至少 1 张有效且未作废的图片已取得真实 `fileId`、锁码文本已保存。
- 门禁通过后仅将订单推进为 `LOADED`/装柜完成,记录柜次、柜号、锁码、操作人、时间和证据版本。
- 该操作必须幂等、乐观锁、完整审计和失败回复,禁止从前端跳过门禁。
- 装柜完成后发现错误统一线下人工处理;当前不提供在线冲正/回退接口,系统保留原状态、证据和审计记录。
- `DELIVERED`/派送完成只接受海外仓可信回传,必须有来源身份、签名/防重放、幂等键、请求摘要和审计;国内 Admin/PDA 不提供手工“确认派送完成”操作。
## 六、核心数据对象
| 数据对象 | 关键内容 |
|---|---|
| 现有订单国内货柜履约投影 | 订单、客户、仓库、国内货柜履约主状态、关联柜次、子流程摘要和版本 |
| 父/子订单关系 | 父订单、子订单、来源柜次、已装载数量、未装载数量和自动生成原因 |
| 排柜方案 | 经确认的规则版本、输入快照、柜次、货物分配、规则计算结果和确认记录 |
| 柜次 | 柜型、柜号、铅封号、装载顺序、重量、体积和关联订单 |
| 订舱记录 | 船公司/代理、订舱号、船名航次、港口、舱位和异常 |
| 出仓前船期资料快照 | 经确认的订舱字段和变更历史;候选字段包括截单、截关、截港、ETD 和 ETA,不包含出仓后节点查询 |
| 拖车预约 | 服务商、车辆、司机、预约时间窗、到离仓节点和异常 |
| 拣货任务 | 柜次、货物明细、分配人、作业员、扫描、数量、差异和复核 |
| 装柜证据 | 柜号、铅封号、照片类型、文件、上传人、时间和可见范围 |
| 报关批次 | 资料清单版本、文件版本、补件、提交代理和回执 |
| 出仓时间线 | 事件、前后状态、操作者、发生时间、说明和请求关联 ID |
基础资料引用必须同时保存稳定 ID 和必要快照。订单、客户、仓库、往来单位、港务/船期信息或文件后续修改时,不得改变历史出仓记录。
## 七、应用范围
### 管理后台 `apps/admin-web`
- 增强现有订单列表/详情,展示柜次、各子流程、异常和状态操作。
- 按已确认的排柜规则提供建议、冲突展示、人工调整、版本对比和确认。
- 订舱、船期、拖车预约、装柜、柜号、铅封和照片。
- 报关资料审核、补件、提交批次、回执上传和客户可见控制。
- 权限至少拆分为查看、排柜、订舱、拖车、仓内复核、报关、确认装柜完成;仓库初始化操作员、拣货员、理货员角色,国内端不提供在线冲正或确认派送完成权限。
### 企业客户端 `apps/client-web`
- 在现有订单中查看关联柜次和允许公开的进度时间线。
- 上传、补充和查看报关资料及处理结果。
- 下载客户可见的报关回执。
- 查看预计开船、到港和船期变更,不暴露内部成本、供应商敏感信息和内部备注。
### PDA `apps/pda-uniapp`
- 仓库人员登录、任务领取、箱号选择、扫码拣货和数量确认。
- 进入任务即标记“拣货中”;允许部分拣货、跳拣和异常上报,未完成项原因必填并阻断完成。
- 扫描保存在设备持久化草稿,点击提交时批量写后端;草稿绑定作业员、任务和柜次。
- PDA 仅现场拍摄五类装柜照片,同类型可多张追加;确认关联信息后上传,并处理进度、失败重试和作废。
- 在线作业、前后台切换、重复提交、版本冲突和异常退出清理;不支持换班接管,断网不允许正式作业或提交。
- PDA 采用 uni-app 开发并支持在线更新;Android 广播扫描已按 Action=`android.intent.action.SCANRESULT`、Extra=`value` 接入,扫描适配保持厂商无关。
### 服务端 `baiyue-firstleg`
- 最终保证身份、客户归属、仓库数据范围、权限、状态、门禁、幂等、并发和审计。
- 管理出仓、排柜、订舱、拖车、拣货、装柜、报关和时间线的事务边界。
- 文件上传校验类型、大小、内容和权限;使用不可预测标识和授权下载。
- 国内货柜履约服务端保存订舱与出仓前船期资料;六家船公司和定时船节点查询由海外仓业务负责。车队、海关仍只预留适配层,报关首版全部人工处理,不承诺正式系统对接。
## 八、建议里程碑
| 里程碑 | 交付目标 | 进入条件 |
|---|---|---|
| P3-M0 规则与设备锁定 | 流程、角色、状态、排柜规则、PDA、文件和验收确认 | 入库测量与计费到仓契约稳定 |
| P3-M1 订单与排柜 | 现有订单可进入待分柜,并按确认范围提供柜次建议、人工确认与追溯 | 排柜规则确认 |
| P3-M2 订舱与拖车 | 订舱、出仓前船期资料、拖车预约和异常处理可用 | 服务商与权限可用 |
| P3-M3 PDA 拣货 | 在线任务、持久化草稿、批量提交、差异、复核和幂等可用 | 服务端任务与库存契约可用 |
| P3-M4 装柜封柜 | 柜号、铅封和照片证据完整,门禁生效 | 文件能力与必传清单确认 |
| P3-M5 报关协同 | `LOADED` 后客户资料、报关行回执、客户确认/打回重做、所有客户通过、整柜正式申报和查验/放行闭环 | 报关资料清单确认 |
| P3-M6 装柜完成及并行送港 | 真实柜号、PDA 拣货、数量守恒、五类证据和锁码文本满足门禁后进入 `LOADED`;随后并行推进送港/进港/甩柜和报关线,实际开船才进入海运 | 装柜完成、报关线和送港线分开 |
| P3-M7 联调验收 | 跨端、设备、安全、弱网、性能、迁移和发布完成 | P3-M1 至 P3-M6 验收通过 |
## 九、建议开发任务
| ID | 端 | 模块 | 交付内容 | 优先级 | 依赖 |
|---|---|---|---|---|---|
| P3-BASE-01 | 公共 | 出仓契约 | 主/子状态、权限、事件、错误码、门禁和快照模型 | P0 | 入库测量与计费到仓契约 |
| P3-BASE-02 | 公共 | 数据模型 | 现有订单国内货柜履约投影、订单-柜次、排柜、订舱、拖车、拣货、装柜、报关和时间线 | P0 | P3-BASE-01 |
| P3-DSP-01 | 后台 | 订单国内货柜履约编排 | 在现有订单列表/详情中接入柜次、子流程、异常、时间线和门禁操作 | P0 | P3-BASE-02 |
| P3-PLAN-01 | 公共 | 排柜规则 | 按已确认规则实现输入、约束、偏好和冲突判断 | P0 | P3-BASE-02、P3-Q1 |
| P3-PLAN-02 | 后台 | 智能排柜 | 按已确认范围实现建议、人工确认和追溯 | P0 | P3-PLAN-01 |
| P3-BOOK-01 | 后台 | 订舱 | 订舱和经确认的船名航次、港口、变更及异常;订舱/拖车服务送港线,不作为 `LOADED` 的报关前置 | P0 | P3-DSP-01 |
| P3-PORT-01 | 后台/服务端 | 送港、进港与甩柜 | 记录 `DEPARTED_WAREHOUSE`、`PORT_RECEIVED`、`ROLLED_OVER`、改配船次和客户通知;不以预计 ETD 推进海运 | P0 | P3-BOOK-01、P3-TRUCK-01 |
| P3-TRUCK-01 | 后台 | 拖车预约 | 服务商、车辆司机、时间窗、到离仓、进港和异常 | P0 | P3-DSP-01 |
| P3-PICK-01 | 公共 | 拣货任务 | 按排柜方案生成任务、明细、差异和复核规则 | P0 | P3-PLAN-02 |
| P3-PDA-01 | PDA | 在线扫码拣货 | 进入任务标记拣货中、扫描草稿、部分/跳拣异常原因和批量提交 | P0 | P3-PICK-01 |
| P3-PDA-02 | PDA/服务端 | 草稿与提交安全 | 作业员+任务+柜次持久化草稿、幂等重试、版本冲突、成功/放弃清理 | P0 | P3-PDA-01 |
| P3-LOAD-01 | 后台 | 装柜封柜 | 柜号、锁码文本、装柜节点、五类多图证据和门禁复核 | P0 | P3-PICK-01 |
| P3-LOAD-02 | PDA/Admin/服务端 | 柜封拍照上传 | PDA 现场拍摄、Admin 人工上传、五类证据多图追加、真实文件上传、预览、失败重试、作废和提交 | P0 | P3-LOAD-01、文件能力可用 |
| P3-CUS-01 | 客户端 | 报关资料与客户确认 | `LOADED` 后清单、上传、补件、回执查看、确认/打回和轮次进度 | P0 | 文件能力可用 |
| P3-CLEAR-01 | 后台 | 报关协同 | 通知报关行、人工审核、回执轮次、客户确认汇总、所有客户通过后整柜正式提交、查验/放行记录 | P0 | P3-CUS-01 |
| P3-CUS-02 | 客户端 | 回执及送港/船期资料 | 回执确认、打回重做、送港/进港/甩柜和实际开船前状态展示 | P0 | P3-BOOK-01、P3-CLEAR-01 |
| P3-GATE-01 | 服务端 | 装柜完成与并行分支门禁 | 校验真实柜号、PDA 拣货、数量守恒、五类证据和锁码文本,幂等推进 `LOADED`;随后分别创建报关案例和送港任务,实际开船才推进海运 | P0 | P3-PICK-01、P3-LOAD-01、P3-LOAD-02 |
| P3-OVERSEAS-01 | 服务端 | 海外仓派送完成回传 | 只接受海外仓可信回传,校验身份、签名、时间窗、防重放和幂等,推进 `DELIVERED` | P1/后续阶段 | 海外仓契约 |
| P3-NOTIFY-01 | 公共 | 通知异常 | 站内通知、阻塞、责任人、时限和失败补偿 | P1 | 核心流程完成 |
| P3-TEST-01 | 公共 | 自动化测试 | 权限、排柜、幂等、并发、文件、门禁和状态测试 | P0 | 所有 P0 模块 |
| P3-DEVICE-01 | PDA | 发布与真机验收 | 扫描头、弱网、性能、电量、前后台和在线更新验证 | P0 | 已确定的 uni-app 发布安排 |
| P3-REL-01 | 公共 | 发布验收 | 初始化规则、迁移、联调、演练、灰度和生产发布 | P0 | P3-TEST-01、P3-DEVICE-01 |
## 十、测试与验收重点
- 系统排柜符合已确认的业务规则;如启用建议解释、人工调整、版本或原因记录,对应结果可追溯。
- 多订单拼柜和一单多柜的件数、重量、体积能与入库测量与计费实测版本对账。
- PDA 重复扫码、超量、错货和重复提交不产生重复扣减或完成事件;断网时禁止正式作业和提交。
- 本地草稿在应用重启后可由同一作业员、任务和柜次恢复,不能被其他账号继承;批量提交成功后清理。
- 柜封照片能够在 PDA 现场拍摄或由 Admin 受权上传;同类型可多张追加,失败重试不重复创建同一记录,错图只作废不硬删除。
- 未完成 PDA 拣货、缺少任意一张必传照片或锁码文本时不能进入 `LOADED`/装柜完成。
- 企业 A 无法查看、上传或下载企业 B 的报关资料和回执。
- 报关资料替换、退回、补件、提交和回执均能追溯到明确版本。
- 订舱与出仓前船期资料变更保留历史;出仓后船节点查询结果的来源、更新时间和过期验收归海外仓业务。
- 确认装柜完成的并发请求只产生一次状态变化和一次有效审计事件。
- 管理后台覆盖加载、空态、失败、无权限和数据冲突;PDA 覆盖弱网、前后台切换和硬件扫描。
- 国内货柜履约验收基线为 `LOADED`/装柜完成;`DELIVERED`/派送完成只由海外仓回传推进,不属于国内国内货柜履约验收条件。
## 十一、启动前技术澄清事项
验收任务拆分、真实 HTTP 覆盖和未确认项解除条件统一见[国内货柜履约验收任务拆分与待确认清单](国内货柜履约验收任务拆分与待确认清单.md)。当前已确认的 PDA/证据规则已进入 `phase3-container-loading.mjs`、`phase3-loading.mjs`;未确认规则不得标记为国内货柜履约完成。
| 编号 | 待确认问题 | 当前建议 |
|---|---|---|
| P3-Q1 | 智能排柜需考虑哪些硬约束和软偏好? | 已确认:装载率上限 110%;税率高排前做可配置排序,规则版本化 |
| P3-Q2 | 是否存在拼柜、一单多柜和拆批出仓? | 已确认:父订单→子订单→柜次;已装载/未装载数量自动形成子订单 |
| P3-Q3 | “预约托车”是否统一为“预约拖车”? | 已确认统一使用“预约拖车” |
| P3-Q4 | PDA 开发、扫描与发布方式是什么? | 已确认采用 uni-app 开发并支持在线更新;Android 广播接入已完成,设备型号不构成门禁 |
| P3-Q5 | 拣货是否依赖实时库存和库位可用量? | 已确认依赖入库测量与计费实时库存、当前位置和可用量接口;不扩展完整 WMS |
| P3-Q6 | 柜封照片有哪些必传角度和留存期限? | 已确认:五类各至少 1 张、同类型可多张追加、后台操作员/理货员可上传、拣货员仅 PDA 现场采集、错图作废、无限期保留、客户不可见 |
| P3-Q7 | 报关资料清单是否按国家、渠道和货物类型变化? | 已确认首版人工维护清单和版本,不接自动报关 |
| P3-Q8 | 报关代理如何接收资料和返回回执? | 已确认 `LOADED` 后线下提交;授权人员人工上传每轮回执,客户确认/打回,所有客户通过后再提交整柜资料 |
| P3-Q9 | 原型中的“港务信息”具体指船期、港口作业状态还是两者,包含哪些字段,由谁维护? | 当前更正:国内货柜履约维护送港、进港、甩柜/改配和实际开船前状态;只有实际开船后进入海运节点查询 |
| P3-Q10 | 进入装柜完成后发现错误如何处理? | 已确认线下人工处理,当前不提供在线冲正 |
| P3-Q11 | 九个动作中哪些是强制前置,哪些允许并行? | 费用确认不阻断排柜/装柜;`LOADED` 只校验物理装柜、PDA、数量和证据;报关线和送港线并行,客户确认不阻断送港,进港不代表报关完成;单柜次单作业员 |
| P3-Q12 | “报关回执”具体包含哪些类型,海关放行如何与客户确认衔接? | 已确认:回执人工上传并发客户确认;客户打回则重做并生成新回执;所有客户通过后才整柜正式申报,查验/放行单独记录 |
| P3-Q17 | 送港和报关是否互相等待?甩柜何时发生? | 已确认:`LOADED` 后两条线同时启动;送港可先到港,报关可先完成客户确认;船舱不足记录甩柜/改配,实际开船才进入海运 |
| P3-Q13 | 国内货柜履约终点以什么状态为准? | 已确认为 `LOADED`/装柜完成;`DELIVERED`/派送完成由海外仓回传,不属于国内国内货柜履约 |
## 十二、建议实施顺序
1. 固化已确认业务规则,按 uni-app 在线更新安排推进 PDA 开发、发布和真机验收。
2. 统一订单、柜次、订舱、拖车、拣货、报关和出仓前船期资料的稳定编码与关联契约;出仓后查询按海外仓业务衔接。
3. 先实现服务端权限、状态、门禁、幂等、并发和审计,再接各端页面。
4. 完成管理后台的出仓编排,再接 PDA 现场执行和客户资料协同。
5. 使用脱敏数据演练拼柜、一单多柜、未装数量生成子订单、错拣、补件和改船;`LOADED` 后不演练在线冲正。
6. 在真实 PDA 和代表性仓库网络环境中完成联调、验收和灰度发布。
@@ -0,0 +1,155 @@
# 虫虫出海国内货柜履约开发进度表
> 创建日期:2026-07-28
> 当前阶段:已确认口径下的分模块部署、联调与缺口收口
> 总体状态:分模块已部署联调;PDA 主链仍阻断,尚未达到国内货柜履约闭环验收
> 规划依据:`国内货柜履约开发规划.md`
> 维护方式:参考订单与客户进度表,采用“总体大任务 → 详细任务 → 里程碑 → 未确认事项 → 开工准入 → 验收”的结构。
## 一、国内货柜履约目标
国内货柜履约承接入库测量与计费到仓、实测、差异处理、处理单元编码和当前位置记录,完成智能排柜、订舱、拖车预约、PDA 拣货、装柜拍照,并在 `LOADED` 后分别推进报关客户确认闭环和送港/进港/甩柜;只有承运船舶实际开航才进入海运节点。
当前验收基线已确认为 `LOADED`/装柜完成。`DELIVERED`/派送完成只能在货物到达海外仓后由海外仓可信回传推进,不属于国内国内货柜履约操作和验收范围。
## 二、总体进度(大任务)
| 大任务 ID | 大任务 | 范围 | 状态 | 进度 | 计划开始 | 计划完成 | 负责人 | 关键依赖/备注 |
|---|---|---|---|---:|---|---|---|---|
| T01 | 需求确认与原型 | 锁定阶段边界、流程依赖、排柜规则、设备、文件、报关和港务信息;完成页面原型 | 已完成 | 100% | 2026-07-28 | 2026-08-10 | 总控 | 产品确认版已同步;PDA 采用 uni-app、在线更新和 Android 广播扫描 |
| T02 | 公共契约与数据模型 | 主/子状态、权限、事件、错误码、订单国内货柜履约投影、柜次、任务、证据、报关和审计模型 | 进行中 | 60% | 2026-08-10 | 待排期 | 总控 | 父子单、硬门禁、仓库角色、证据和费用契约已有真实接口;PDA batch 契约未完成 |
| T03 | 订单国内货柜履约编排与柜次 | 增强现有订单列表/详情,建立父子订单-柜次关系、拆分/拼柜和时间线 | 联调中 | 80% | 2026-08-10 | 待排期 | 总控 | 父子履约树和柜次分片已通过真实验收,最终 LOADED 仍受 PDA 阻断 |
| T04 | 智能排柜 | 排柜规则、系统建议、冲突、人工确认和追溯 | 联调中 | 80% | 2026-08-10 | 待排期 | Admin/Firstleg | 智能装柜工作台与真实候选、计划、分配、推送接口已部署;最终完成依赖 PDA |
| T05 | 订舱与港务信息 | 订舱、变更异常、船公司官网查询、更新时间和过期标识 | 联调中 | 80% | 2026-08-10 | 待排期 | Firstleg/Admin | 订舱、港务船期生命周期已通过;ZIM/COSCO 保留人工兜底 |
| T06 | 拖车预约 | 服务商、车辆司机、预约时间窗、到离仓节点和异常 | 联调中 | 80% | 2026-08-10 | 待排期 | Firstleg/Admin | 预约生命周期和服务中心串联已通过,最终 LOADED 门禁待 PDA |
| T07 | PDA 拣货与复核 | 在线进入任务、持久化扫描草稿、批量提交、部分拣货、异常、幂等和单人作业 | 已阻塞 | 45% | 2026-08-10 | 待排期 | Firstleg/PDA | `pick` 第二处真实 S0500 未收口;原子 batch、库存快照、失败整批回滚未实现 |
| T08 | 装柜及柜封证据 | 装柜节点、柜号、铅封号、PDA 现场拍照、后台角色上传、多图追加、作废和复核 | 联调中 | 80% | 2026-08-10 | 待排期 | Firstleg/Admin/PDA | 五类证据、多图追加、作废和硬门禁已通过;终态仍依赖 PDA |
| T09 | 装柜后报关资料与客户确认 | `LOADED` 后通知报关行;客户资料→报关行回执→客户确认/打回重做→所有客户通过→整柜正式申报→查验/放行 | 联调中 | 70% | 2026-09-24 | 待排期 | Firstleg/Admin | 多轮回执、客户确认和整柜提交仍待实现 |
| T10 | 装柜完成与送港/开船门禁 | `LOADED` 校验物理装柜;送港线独立校验订舱/拖车、离仓、进港和甩柜;实际开船才进入海运 | 已阻塞 | 70% | 2026-09-24 | 待排期 | Firstleg | 报关线和送港线并行口径已确认,真实推进与 PDA 修复仍待完成 |
| T11 | 客户端国内货柜履约协同 | 装柜进度、柜次、回执、预计开船/到港和变更时间线 | 待开始 | 0% | 待排期 | 待排期 | 待分配 | 客户不查看装柜照片和锁码;依赖 T05、T09、T10 |
| T12 | 联调测试与发布 | 跨端联调、自动化测试、PDA 真机、安全、弱网、迁移、验收和发布 | 联调中 | 70% | 2026-08-10 | 待排期 | 总控/测试 | Admin、Firstleg 已分模块部署并持续真实 HTTP 验收;PDA S0500、batch 契约和真机验收未收口 |
## 三、详细任务表
详细任务按大任务逐项拆分。当前先建立任务骨架;每次拆分一个大任务,确认交付内容、优先级和依赖后再进入开发。
| ID | 大任务 | 端 | 模块 | 功能/交付内容 | 优先级 | 状态 | 进度 | 依赖 | 负责人 | 备注 |
|---|---|---|---|---|---|---|---:|---|---|---|
| P3-T01-00 | T01 | 公共 | 需求确认与原型 | 完成需求确认表、页面清单和原型评审,锁定开工阻断项 | P0 | 已完成 | 100% | - | 总控 | 已同步产品确认版;PDA 技术路线已确认 |
| P3-T02-00 | T02 | 公共 | 公共契约与数据模型 | 拆状态、权限、数据模型、接口和审计;初始化操作员/拣货员/理货员角色 | P0 | 进行中 | 60% | P3-T01-00 | 总控 | 主体契约已进入真实联调;PDA 原子 batch 仍缺 |
| P3-T03-00 | T03 | 后台/服务端 | 订单国内货柜履约编排与柜次 | 实现父订单→子订单→柜次、一单多柜、拼柜、未装数量自动子订单和时间线 | P0 | 联调中 | 80% | P3-T02-00 | Order/Firstleg/Admin | 父子履约树、柜次分片与整体时间线已通过真实接口 |
| P3-T04-00 | T04 | 后台/服务端 | 智能排柜 | 实现 110% 装载率上限、可配置税率排序、人工确认和版本追溯 | P0 | 联调中 | 80% | P3-T03-00 | Firstleg/Admin | 候选、计划、分配、调整与推送已部署;最终完成依赖 PDA |
| P3-T05-00 | T05 | 后台/服务端 | 订舱与港务信息 | 订舱状态及六家船公司查询、三日周期、三次上限、过期标识 | P0 | 联调中 | 80% | P3-T03-00 | Firstleg/Admin | 港务生命周期已通过;ZIM/COSCO 为人工兜底,不算自动查询通过 |
| P3-T06-00 | T06 | 后台/服务端 | 拖车预约 | 服务商、车辆司机、时间窗、到离仓和异常;完成状态供门禁校验 | P0 | 联调中 | 80% | P3-T03-00 | Firstleg/Admin | 预约、附件、历史及服务中心链路已通过真实接口 |
| P3-T07-00 | T07 | PDA/后台/服务端 | PDA 拣货与复核 | 按单柜次单作业员实现在线草稿、批量提交、异常、幂等和实时库存校验 | P0 | 已阻塞 | 45% | P3-T04-00 | Firstleg/PDA | 广播扫描已接入;真实 pick S0500 与原子 batch 契约仍待收口 |
| P3-T08-00 | T08 | PDA/后台/服务端 | 装柜及柜封证据 | 实现五类多图追加、角色上传、作废和无限期留存,客户不可见 | P0 | 联调中 | 80% | P3-T07-00 | Firstleg/Admin/PDA | 五类证据与安全边界已通过,真机拍照和终态待验收 |
| P3-T09-00 | T09 | 客户端/后台/服务端 | 报关资料与客户确认闭环 | 实现客户案例、报关行回执轮次、确认/打回重做、所有客户通过后整柜正式提交、查验/放行记录 | P0 | 联调中 | 70% | P3-T02-00 | Firstleg/Admin | 人工协同接口已部署,客户确认闭环仍待实现 |
| P3-T10-00 | T10 | 后台/服务端 | 装柜完成与送港/开船事实 | 实现物理 `LOADED`、送港/进港、甩柜/改配和实际开船分层事实,不以报关确认阻断送港 | P0 | 已阻塞 | 70% | P3-T07-00、P3-T08-00、P3-T09-00 | Firstleg | 门禁读取已通过;推进 LOADED 受 PDA 主链阻断 |
| P3-T11-00 | T11 | 客户端/服务端 | 客户端国内货柜履约协同 | 展示柜次、装柜进度、客户可见回执和船期;不返回照片与锁码 | P0 | 待开始 | 0% | P3-T05-00、P3-T09-00、P3-T10-00 | 待分配 | - |
| P3-T12-00 | T12 | 公共 | 联调测试与发布 | 维护定向/全量真实 HTTP、PDA 真机、安全和发布回归 | P0 | 联调中 | 70% | P3-T02-00~P3-T11-00 | 总控/测试 | 已进入分模块部署验收;不得用 mock、历史资源或 coverage gap 伪装通过 |
| P3-T01-PROTO-01 | T01 | 公共 | 原型盘点 | 盘点流程图、后台、企业客户端和 PDA 中与国内货柜履约相关的页面及交互 | P0 | 已完成 | 100% | - | 待分配 | 2026-07-28 已完成首次盘点,来源为 `docs/悦` |
| P3-T03-PROTO-01 | T03 | 后台 | 订单国内货柜履约编排原型 | 在现有订单列表/详情中设计柜次、子流程摘要、阻塞原因、时间线和操作入口 | P0 | 进行中 | 50% | P3-T01-PROTO-01、P3-Q11 | 待分配 | 不新建出仓单页面 |
| P3-T04-PROTO-01 | T04 | 后台 | 智能排柜原型核验 | 映射智能装柜的线路页签、筛选、智能锁定、订单分柜、拖放调整和集装箱详情 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 按 110% 装载率上限和可配置税率排序实现 |
| P3-T05-PROTO-01 | T05 | 后台 | 订舱与出仓前船期资料原型核验 | 映射订舱列表、新增/详情、放舱、船名航次、港口和 ETD/ATD/ETA/ATA 字段 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 出仓后的六家船公司及节点查询已重新归入海外仓业务 |
| P3-T06-PROTO-01 | T06 | 后台 | 拖车原型核验 | 映射拖车列表、新增表单、运输公司、司机、车头号、装箱日期、费用和附件 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 预约时间窗和到离仓节点仍需按国内货柜履约流程补充 |
| P3-T07-PROTO-01 | T07 | 后台/PDA | 拣货原型核验 | 对照通用 WMS 出库拣货和现有 PDA 集装箱拣货,锁定可复用交互与真实接口缺口 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 已确认在线作业、进入即开始、持久化草稿和批量提交;真实任务、鉴权与契约仍需完成 |
| P3-T08-PROTO-01 | T08 | 后台 | 装柜证据原型核验 | 映射货柜列表、预装清单、装柜清单、柜号、单证、船期和装柜明细 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 后台参考较完整,但现场拍照上传原型缺失 |
| P3-T08-PROTO-02 | T08 | PDA | 装柜拍照原型 | 新增柜次确认、五类证据多图追加、锁码文本、预览、重试、作废和提交页面原型 | P0 | 待开始 | 0% | P3-Q6 | 待分配 | PDA 仅拍照、Admin 可上传、每类至少一张和错图作废已确认 |
| P3-T09-PROTO-01 | T09 | 后台 | 报关单证原型核验 | 映射报关单列表、单证管理、报关/清关/放行资料及装柜清单附件 | P0 | 已完成 | 100% | P3-T01-PROTO-01 | 待分配 | 客户上传和回执下载页面仍需新建 |
| P3-T10-PROTO-01 | T10 | 后台 | 装柜完成门禁原型 | 在现有订单详情设计门禁检查、阻塞原因和确认装柜完成交互 | P0 | 进行中 | 30% | P3-Q10~P3-Q12 | 待分配 | 不提供在线冲正,不需要独立门禁页面 |
| P3-T11-PROTO-01 | T11 | 客户端 | 客户端国内货柜履约原型 | 新增装柜进度、报关资料上传/补件、回执下载和出仓前船期资料展示 | P0 | 待开始 | 0% | P3-Q7~P3-Q9、P3-Q12 | 待分配 | 出仓后船节点页面归海外仓业务 |
## 四、原型对照与开发影响
| 大任务 | `docs/悦` 现有原型 | 覆盖判断 | 开发处理 |
|---|---|---|---|
| T03 订单国内货柜履约编排与柜次 | 现有订单列表/详情、货柜列表、装柜清单 | 部分参考 | 增强现有订单页并建立订单-柜次关联,不新增出仓单页面 |
| T04 智能排柜 | 入库单列表中的“智能装柜”弹窗 | 已有参考 | 复用线路、筛选、锁定、分柜和拖放交互,按 P3-Q1 裁剪规则 |
| T05 订舱与港务信息 | 订舱列表、新增/详情、放舱、货柜船期字段 | 已有参考 | 复用订舱字段和页面结构,确认港务信息范围及来源后裁剪 |
| T06 拖车预约 | 拖车列表、新增拖车 | 已有参考 | 复用车辆司机和费用字段,补预约时间窗、到仓及离仓节点 |
| T07 PDA 拣货与复核 | 通用 WMS 出库、PDA 集装箱拣货 | 已有参考 | 保留扫描交互,按在线作业、持久化草稿、批量提交、异常阻断和轻量冲突提示重做真实契约 |
| T08 装柜及柜封证据 | 货柜列表、预装清单、装柜清单 | 部分参考 | 后台页面裁剪复用;PDA 只拍照,Admin 可上传,同类型多张追加,错图作废 |
| T09 报关资料与回执 | 报关单列表、单证管理、装柜清单附件 | 部分参考 | 后台裁剪复用;客户上传、补件和回执下载页面新建 |
| T10 装柜完成门禁 | 现有订单状态操作和分散证据字段 | 部分参考 | 在订单详情补门禁检查和确认装柜完成;不提供在线冲正或国内确认派送 |
| T11 客户端国内货柜履约协同 | 头程下单客户端只有船期字段和少量装柜摘要 | 覆盖不足 | 新建国内货柜履约客户端装柜进度、报关和港务信息页面 |
> `货代SaaS平台原型.html` 是全量平台参考原型,其中海外仓、完整 WMS、费用和清关能力不自动纳入国内货柜履约;所有复用项仍需经过国内货柜履约范围裁剪。
## 五、建议拆分模板
每个大任务按照同一顺序拆成可开发、可验收的小任务:
1. `RULE`:业务规则、状态、权限和异常。
2. `DATA`:数据表、字段、快照、版本和审计。
3. `API`:接口、鉴权、幂等、并发和错误码。
4. `ADM` / `CLI` / `PDA`:各端页面与交互。
5. `TEST`:单元、接口、端到端、权限和边界测试。
6. `ACCEPT`:业务验收、证据和遗留问题。
例如 T04 智能排柜后续可使用 `P3-T04-RULE-01`、`P3-T04-DATA-01`、`P3-T04-API-01`、`P3-T04-ADM-01`、`P3-T04-TEST-01` 编号。
## 六、建议里程碑
| 里程碑 | 交付目标 | 状态 | 计划完成 |
|---|---|---|---|
| P3-M0 需求与原型锁定 | 阶段边界、流程、规则、设备、文件和页面原型确认 | 已完成 | 2026-08-10 |
| P3-M1 公共契约 | 入库测量与计费及国内货柜履约输入、状态、权限、数据模型和接口契约稳定 | 进行中 | 待排期 |
| P3-M2 订单国内货柜履约编排 | 现有订单、柜次、排柜、订舱、港务和拖车可关联追溯 | 联调中 | 待排期 |
| P3-M3 仓内出仓 | PDA 拣货、复核、装柜和柜封证据闭环 | 已阻塞 | 待排期 |
| P3-M4 报关协同 | 客户资料、后台审核、提交代理、回执上传下载闭环 | 联调中 | 待排期 |
| P3-M5 装柜完成及并行分支 | 真实柜号、PDA、数量守恒和五类证据门禁满足后进入 `LOADED`;随后并行推进报关客户确认闭环和送港/进港/甩柜,实际开船才进入海运 | 已阻塞 | 待排期 |
| P3-M6 国内货柜履约上线 | 联调、真机、安全、测试、验收和生产发布完成 | 进行中 | 待排期 |
## 七、未确认事项(需求确认进度)
当前 13 项主确认事项均已有产品最终结论;P3-Q4 已确认采用 uni-app、在线更新与 Android 广播扫描。完整结论统一维护在 [国内货柜履约需求确认表](../国内货柜履约需求确认表.md)。
验收拆分已建立:PDA 进入任务、拣货幂等/版本冲突、五类证据真实上传、多图追加和锁码门禁进入自动化;真机在线、设备草稿批量提交、证据作废、设备与权限留存等仍保留 coverageGap,详见[国内货柜履约验收任务拆分与待确认清单](国内货柜履约验收任务拆分与待确认清单.md)。
| 编号 | 阻断级别 | 待确认事项 | 状态 | 主要影响 |
|---|---|---|---|---|
| P3-Q1 | 开工阻断 | 智能排柜的硬约束和软偏好 | 已确认 | T04 智能排柜、T07 拣货任务 |
| P3-Q2 | 开工阻断 | 是否支持拼柜、一单多柜和拆批装柜 | 已确认 | T03 订单国内货柜履约编排与柜次、T04 智能排柜 |
| P3-Q3 | 非阻断 | “预约托车”是否统一为“预约拖车” | 已确认 | T06 拖车预约、页面与接口文案 |
| P3-Q4 | 非阻断 | PDA 开发、扫描与发布方式 | 已确认 | 采用 uni-app 开发并支持在线更新;Android 广播模式已接入,设备型号不构成门禁 |
| P3-Q5 | 开工阻断 | 拣货是否依赖实时库存和库位可用量 | 已确认 | 复用入库测量与计费实时库存、当前位置和可用量接口;不扩展完整 WMS |
| P3-Q6 | 模块阻断 | 装柜照片和锁码规则 | 已确认 | 五类多图、角色上传、无限期保留、客户不可见 |
| P3-Q7 | 模块阻断 | 报关资料清单是否按国家、渠道和货物类型变化 | 已确认 | T09 报关资料、文件版本 |
| P3-Q8 | 模块阻断 | 报关代理接收资料和返回回执的方式 | 已确认 | 线下提交、人工上传回执 |
| P3-Q9 | 开工阻断 | 港务信息的业务含义、字段和维护方 | 已确认 | 六家船公司查询、三日周期、三次上限、过期标识 |
| P3-Q10 | 模块阻断 | 装柜完成后的错误处理和冲正方式 | 已确认 | 线下人工处理,不提供在线冲正 |
| P3-Q11 | 开工阻断 | 九个动作的强制前置和并行关系 | 已确认 | `LOADED` 后报关线和送港线并行;客户确认不阻断送港,进港不代表报关完成;单柜次单人 |
| P3-Q12 | 开工阻断 | 报关行回执、客户确认、正式申报和海关结果 | 已确认 | 回执必须发客户确认,打回则重做;所有客户通过后才整柜正式申报,查验/放行单独记录 |
| P3-Q13 | 开工阻断 | 国内货柜履约终点 | 已确认 | `LOADED`/装柜完成;`DELIVERED` 由海外仓回传,移出国内货柜履约验收 |
## 八、开工准入记录
国内货柜履约已进入分模块部署联调。下表保留开工条件及当前补齐状态,用于检查契约、原型和任务拆分是否仍有缺口,不再作为“尚未开始开发”的结论。
| 准入编号 | 准入条件 | 当前状态 | 责任方 | 完成证据 |
|---|---|---|---|---|
| P3-GO-01 | P3-Q1~P3-Q17 均形成产品结论 | 已完成 | 产品、业务 | `国内货柜履约需求确认表.md` 已同步最终结论 |
| P3-GO-02 | 确认结论已同步开发规划、进度表、页面清单和验收范围 | 已完成 | 产品、项目负责人 | README、进度表、页面清单和验收口径已按确认版同步 |
| P3-GO-03 | 关键缺失原型已补齐并评审,包括订单装柜完成门禁、客户端国内货柜履约页面和 PDA 五类多图拍照 | 进行中 | 产品、设计、业务 | 页面清单中的关键页面达到已确认状态 |
| P3-GO-04 | T02 公共契约完成,入库测量与计费输入、状态机、权限、数据模型、接口、错误码和审计口径稳定 | 进行中 | 前后端、架构/技术负责人 | 主体契约已部署;PDA 原子 batch 契约仍缺 |
| P3-GO-05 | T03~T12 已拆成 RULE、DATA、API、ADM/CLI/PDA、TEST、ACCEPT 任务,并填写负责人和计划 | 进行中 | 项目负责人、研发、测试 | 已按独立任务推进;客户端、PDA batch 和真机验收任务仍需收口 |
| P3-GO-06 | 产品、业务、研发和测试完成开工评审,确认范围、依赖、风险和首批任务 | 进行中 | 项目负责人 | 产品范围已确认并开工,正式评审证据仍需归档 |
当前口径:未完成的准入项作为收口风险继续跟踪,不回退已经开始的开发和联调;只有契约、真机和真实 HTTP 验收全部完成后,才能标记国内货柜履约完成。
## 九、状态维护规则
- 状态统一使用:待确认、待开始、进行中、联调中、测试中、已完成、已阻塞。
- 进度填写 `0%~100%`;只有开发、测试和业务验收均完成后才能填写 `100%`。
- 开始开发时填写负责人、计划开始和计划完成日期。
- 出现阻塞时在备注中填写阻塞原因、责任人和预计解除时间。
- 大任务进度应由其详细任务加权汇总;当前骨架阶段先人工维护,拆分完成后再确定权重。
## 十、下一步收口顺序
1. 修复 PDA `pick` 第二处 `S0500`,复跑领取、拣货、复核、报关关联和装柜完成链路。
2. 独立实现 PDA 原子 batch 契约及测试,覆盖整批事务、幂等、服务端库存快照和失败回滚。
3. 完成 PDA 真机广播扫码、在线草稿、五类证据拍照、多图追加和作废验收。
4. 收口 T11 客户端国内货柜履约页面及客户可见性、安全边界。
5. 复跑国内货柜履约定向和默认全量真实 HTTP 验收,完成发布记录后再评估国内货柜履约完成状态。
@@ -0,0 +1,31 @@
# 国内货柜履约开工门禁
> 本文维护国内货柜履约跨端开发的稳定门禁。实时任务进度见 `国内货柜履约开发进度表.md`;产品决策以 `国内货柜履约需求确认表.md` 为准。
## 可直接开展的范围
- 已确认规则可进入契约、数据、接口、页面和测试拆分,不需要等待整期所有模块完成。
- 订单继续承载国内货柜履约主状态,不新建独立出仓单;支持父订单、子订单与柜次关系,以及一单多柜和多订单拼柜。
- 智能排柜、订舱与船期、拖车预约、PDA 在线拣货、五类装柜证据、`LOADED` 后客户报关确认闭环、送港/甩柜和实际开船按本轮确认流程执行。
- 国内货柜履约的国内终点为 `LOADED`;`DELIVERED` 只由海外仓可信回传推进。
## 跨端硬边界
- `LOADED` 前必须由服务端校验真实柜号、PDA 拣货与数量守恒、五类有效证据和未解决异常。`LOADED` 后报关线和送港线分别校验:报关线按客户资料、报关行回执、客户确认/打回、所有客户通过、整柜正式申报和海关结果推进;送港线按订舱/拖车、离仓、进港、甩柜和实际开船推进。客户确认不阻断送港,进港不代表报关完成。国内 Admin/PDA 不提供在线冲正或手工推进 `DELIVERED`。
- PDA 正式作业仅在线;单柜次只允许一名作业员,不支持多人并行、任务接管或换班释放。进入任务即由服务端标记拣货中,扫描草稿按作业员、任务和柜次隔离,提交时批量写入。
- 每类证据至少一张有效照片,允许同类型追加;错误照片只能作废并保留审计。客户不可见照片与锁码。
- 报关在 `LOADED` 后正式启动:每个客户经历资料上传、报关行回执、客户确认或打回重做,所有客户通过后才提交整柜资料给报关行正式申报;送港线独立记录拖车、进港、甩柜和实际开船。费用确认不阻断排柜/装柜,装柜完成后对已装范围的当前有效已发布费用版本记录系统默认确认,来源和客户主动确认必须分开审计。
- 前端页面、菜单和路由只能在对应服务端契约、权限和数据模型稳定后发布;原型中的完整 WMS、海外仓及未确认能力不属于国内货柜履约默认范围。
## 局部阻断项
- PDA 采用 uni-app 开发并支持在线更新;Android 广播扫描已接入。设备型号不构成开发、发布或验收门禁;扫描适配保持厂商无关,按既定发布安排完成常规真机验收。
- 未冻结的字段、权限码、错误码、迁移方案或跨服务调用,只阻断依赖它们的模块;不得以模拟成功或前端猜测替代服务端契约。
- 修改任一跨服务契约时,必须同步检查生产者、调用方、OpenAPI、权限、迁移脚本和实际前端消费者。
## 使用方式
1. 先读 `README.md`、`国内货柜履约需求确认表.md` 和本文件,确认任务属于已确认范围。
2. 再进入目标应用或服务的 `AGENTS.md`,按本地模块入口实现。
3. 发现新的产品决策或门禁变化时,先更新确认表与本文,再更新受影响模块指引;不要将短期进度、联调故障或环境地址写回模块规则。

Some files were not shown because too many files have changed in this diff Show More