# Admin 订舱模块指引 ## 路径基准与读取顺序 - 本文件适用于 `src/modules/ocean-bookings/`,代码路径相对本目录;应用公共规则见 `../../../AGENTS.md`,订舱与船期细则见 `../../../docs/business-index.md`。 - 订舱(本模块)与预装/装柜清单(`../loading-lists/`)、船节点(`../port-schedules/`)是三条链路;本模块只管订舱资料、放舱状态与订舱级船期。 - 后端只查 `firstleg/` 的 `oceanbooking/`、`portschedule/` 与 `print/`(订舱单据)、`file/`(附件)。 ## 页面与入口 | 目标 | 页面/路由 | API 与后端 | |---|---|---| | 订舱列表、放舱状态与关联候选 | `pages/OceanBookingsView.vue`;`ocean-bookings` | `api/platformOceanBookings.ts`;`firstleg/oceanbooking/` | | 新增订舱(登记线下已确认订舱) | `pages/OceanBookingDetailView.vue`;`ocean-bookings/new` | `api/platformOceanBookings.ts` | | 订舱详情、资料维护与版本 | `pages/OceanBookingDetailView.vue`;`ocean-bookings/:bookingId` | `api/platformOceanBookings.ts` | | 订舱资料面板与字段边界 | `components/OceanBookingDocumentsPanel.vue` | `firstleg/oceanbooking/`;附件归 `file/` | | 订舱资料打印 | `components/OceanBookingPrintDialog.vue` | `print/` 单据模板 | | 柜型需求与数量换算 | `containerRequirements.ts` | `containerCount` 为柜型需求 `quantity` 总和 | | 订舱代理候选 | `bookingAgents.ts` | 公共供应商列表,仅 `ACTIVE` 且类别/范围匹配 | ## 关键边界 - 订舱草稿按当前版本维护资料;放舱后资料与表单只读,不允许绕过版本直接改字段。 - 打印对草稿与已放舱订舱均开放,按当前**已保存**资料生成,未填写字段显示“—”,不用未保存的表单值。 - 关联候选只消费服务端 `/link-candidates` 分页结果,不在浏览器重排或本地拼接候选。 - 订舱是拖车预约的唯一归属:拖车由 `../trucking/` 创建,本模块不直接建拖车单。 - 出仓前船期只展示订舱级计划,实际节点归 `../port-schedules/` 与海外回写,本模块不写实际时间。 ## 验证 - 定向:`pnpm test src/modules/ocean-bookings/<目标测试>`;资料字段或打印变更同时核对 `print/` 模板与 `file/` 附件契约。 - 本文件或索引变更后,从后端根运行 `./scripts/agents-index-contract.ps1`。