# 运单管理需求卡

## 目录

- [REQ-WAYB-001 菜单入口](#req-wayb-001-菜单入口)
- [REQ-WAYB-002 列表与分页](#req-wayb-002-列表与分页)
- [REQ-WAYB-003 条件查询与重置](#req-wayb-003-条件查询与重置)
- [REQ-WAYB-004 状态展示与操作列](#req-wayb-004-状态展示与操作列)
- [REQ-WAYB-005 新建运单](#req-wayb-005-新建运单)
- [REQ-WAYB-006 编辑运单](#req-wayb-006-编辑运单)
- [REQ-WAYB-007 查看运单](#req-wayb-007-查看运单)
- [REQ-WAYB-008 运单编号与关联字段规则](#req-wayb-008-运单编号与关联字段规则)
- [REQ-WAYB-009 基本信息规则](#req-wayb-009-基本信息规则)
- [REQ-WAYB-010 货物信息规则](#req-wayb-010-货物信息规则)
- [REQ-WAYB-011 承运信息规则](#req-wayb-011-承运信息规则)
- [REQ-WAYB-012 过程节点配置规则](#req-wayb-012-过程节点配置规则)
- [REQ-WAYB-013 当前过程节点规则](#req-wayb-013-当前过程节点规则)
- [REQ-WAYB-014 过程节点完成与记录](#req-wayb-014-过程节点完成与记录)
- [REQ-WAYB-015 运单状态流转](#req-wayb-015-运单状态流转)
- [REQ-WAYB-016 取消运单](#req-wayb-016-取消运单)
- [REQ-WAYB-017 重新派单](#req-wayb-017-重新派单)
- [REQ-WAYB-018 完成运单](#req-wayb-018-完成运单)
- [REQ-WAYB-019 批量完成](#req-wayb-019-批量完成)
- [REQ-WAYB-020 公路配载](#req-wayb-020-公路配载)
- [REQ-WAYB-021 导入运单](#req-wayb-021-导入运单)
- [REQ-WAYB-022 批量导出](#req-wayb-022-批量导出)
- [REQ-WAYB-023 单条删除](#req-wayb-023-单条删除)
- [REQ-WAYB-024 复制运单](#req-wayb-024-复制运单)
- [REQ-WAYB-025 权限与审计](#req-wayb-025-权限与审计)
- [REQ-WAYB-026 新增编辑页面布局](#req-wayb-026-新增编辑页面布局)
- [REQ-WAYB-027 精简录入与完整录入](#req-wayb-027-精简录入与完整录入)
- [REQ-WAYB-028 收发货信息规则](#req-wayb-028-收发货信息规则)
- [REQ-WAYB-029 公路运输任务信息](#req-wayb-029-公路运输任务信息)
- [REQ-WAYB-030 铁水空运输任务信息](#req-wayb-030-铁水空运输任务信息)
- [REQ-WAYB-031 运费信息与币种规则](#req-wayb-031-运费信息与币种规则)
- [REQ-WAYB-032 新增编辑底部按钮](#req-wayb-032-新增编辑底部按钮)
- [REQ-WAYB-033 导入批次列表与分页](#req-wayb-033-导入批次列表与分页)
- [REQ-WAYB-034 导入批次查询与重置](#req-wayb-034-导入批次查询与重置)
- [REQ-WAYB-035 导入批次状态与操作](#req-wayb-035-导入批次状态与操作)
- [REQ-WAYB-036 新建导入批次](#req-wayb-036-新建导入批次)
- [REQ-WAYB-037 导入批次详情](#req-wayb-037-导入批次详情)
- [REQ-WAYB-038 导入明细查询与列表](#req-wayb-038-导入明细查询与列表)
- [REQ-WAYB-039 编辑导入批次](#req-wayb-039-编辑导入批次)
- [REQ-WAYB-040 删除导入批次](#req-wayb-040-删除导入批次)
- [REQ-WAYB-041 新建导入页面布局](#req-wayb-041-新建导入页面布局)
- [REQ-WAYB-042 新建导入信息填写](#req-wayb-042-新建导入信息填写)
- [REQ-WAYB-043 导入模板字段](#req-wayb-043-导入模板字段)
- [REQ-WAYB-044 导入模板校验规则](#req-wayb-044-导入模板校验规则)
- [REQ-WAYB-045 导入失败报告](#req-wayb-045-导入失败报告)
- [REQ-WAYB-046 导入数据明细](#req-wayb-046-导入数据明细)
- [REQ-WAYB-047 疑似重复处理](#req-wayb-047-疑似重复处理)
- [REQ-WAYB-048 确认导入](#req-wayb-048-确认导入)
- [REQ-WAYB-049 配载与多货物导入](#req-wayb-049-配载与多货物导入)
- [REQ-WAYB-050 导入地址解析](#req-wayb-050-导入地址解析)
- [REQ-WAYB-051 新建导入操作](#req-wayb-051-新建导入操作)
- [通用规则](#通用规则)

---

### REQ-WAYB-001 菜单入口

- 功能点：
  - 运单管理模块归属于“业务管理”主菜单。
  - 在“业务管理”菜单下提供“运单管理”入口。
  - 用户进入运单管理页面后，可进行查询、新建运单、导入运单、导出、编辑、复制、取消、重新派单、完成、公路配载、删除等操作。

- 异常与边界：
  - 无菜单权限时不展示“业务管理”或“运单管理”入口。
  - 有菜单权限但无按钮权限时，仅展示允许访问的页面和操作。
  - 菜单加载失败时提示失败原因，不影响其他菜单访问。

- 反例：
  - 不允许把运单管理挂到非业务管理主菜单下。
  - 不允许无权限用户通过 URL 直接进入模块。
  - 不允许菜单入口存在但页面无法访问。

---

### REQ-WAYB-002 列表与分页

- 功能点：
  - 默认展示当前组织全部运单数据，列表按创建时间降序排列。
  - 列表展示字段与编辑表单字段保持一致，并额外展示创建时间、更新时间。
  - 列表至少展示运单号、项目名称、客户名称、运输类型、货物名称、货物类型、发货地址、收货地址、承运商名称、司机姓名、车/船/航班/班列号、原始单号、状态、数据来源、开始日期、结束日期、计划名称、多联总单、配载单号、运单批次号、关联单号、当前过程节点、操作等信息。
  - 状态列和操作按钮列固定在右侧，不随横向滚动条滑动。
  - 支持勾选多行用于批量完成和批量导出。
  - 分页默认10条/页，支持20/50/100条/页。

- 异常与边界：
  - 查询无数据时展示空状态。
  - 横向字段较多时允许表格横向滚动，但状态列和操作列必须保持固定。
  - 当前页数据因删除、取消、完成、导入等操作发生变化后，应刷新列表并保持分页逻辑正确。
  - 列表加载失败时保留当前查询条件和分页条件，提示用户重新查询。

- 反例：
  - 不允许状态列或操作列被横向滚动隐藏。
  - 不允许列表字段与编辑表单长期不一致。
  - 不允许分页后丢失当前查询条件。

---

### REQ-WAYB-003 条件查询与重置

- 功能点：
  - 支持按运单号、项目名称、客户名称、运输类型、货物名称、货物类型、发货地址、收货地址、承运商名称、司机姓名、车/船/航班/班列号、原始单号、状态、数据来源、开始日期、结束日期、计划名称、多联总单、配载单号、运单批次号、关联单号等条件组合查询。
  - 运单号、货物名称、发货地址、收货地址、原始单号、多联总单、配载单号、运单批次号、关联单号使用输入框。
  - 项目名称、客户名称、货物类型、承运商名称、司机姓名使用输入搜索下拉框。
  - 运输类型、状态、数据来源使用下拉单选控件。
  - 开始日期、结束日期使用日期选择器。
  - 点击查询后按当前条件筛选列表。
  - 点击重置后清空所有查询条件，恢复默认列表。
  - 查询条件过多时支持展开/收起，默认折叠展示。

- 异常与边界：
  - 查询条件为空时点击查询，按默认规则展示全部数据。
  - 查询结果为空时展示空状态，不清空用户已输入条件。
  - 重置后页码恢复第一页，并重新加载列表。
  - 日期格式不合法或开始日期晚于结束日期时阻止查询并提示。

- 反例：
  - 不允许重置后仍保留隐藏查询条件。
  - 不允许只按单个条件查询而忽略其他已选择条件。
  - 不允许日期范围错误时继续请求列表数据。

---

### REQ-WAYB-004 状态展示与操作列

- 功能点：
  - 运单状态包含草稿、待执行、进行中、已完成、已取消。
  - 草稿状态可执行编辑、删除、复制。
  - 待执行状态在司机未接单时可执行详情、编辑、复制、取消。
  - 待执行状态在司机拒绝接单时可执行详情、重新派单、复制、取消。
  - 进行中状态可执行详情、复制、完成。
  - 已完成状态可执行详情、复制。
  - 已取消状态可执行详情、复制。
  - 操作按钮列固定在右侧，按钮展示受状态和权限共同控制。

- 异常与边界：
  - 状态为空或状态值未知时，列表应展示兜底文案，并限制高风险操作。
  - 操作执行前需重新校验最新状态，避免列表状态过期导致误操作。
  - 状态变更成功后刷新列表，展示最新状态和可执行操作。

- 反例：
  - 不允许草稿状态执行完成或取消。
  - 不允许已完成或已取消状态继续编辑、删除、完成。
  - 不允许仅根据前端显示状态跳过后端状态校验。

---

### REQ-WAYB-005 新建运单

- 功能点：
  - 点击“新建运单”按钮后进入新建运单页面。
  - 新建页面包含基本信息、收发货信息、任务信息或货物信息、承运信息、费用信息、附件等区域。
  - 新建页面默认展示精简录入，支持切换完整录入。
  - 精简录入下货物信息以简写字段展示；完整录入下货物信息以列表方式维护。
  - 新建页面底部展示运费合计、查看过程配置、返回、暂存、确认等操作。
  - 新建页面支持暂存为草稿或提交创建。
  - 新建保存后按项目过程配置自动决定初始状态。
  - 保存成功后刷新列表。

- 异常与边界：
  - 运单号生成失败时阻止保存并提示。
  - 项目、客户、客户合同、运输类型、货物信息、承运信息等必填项为空时阻止提交并提示。
  - 运单货物名称、数量、计量单位为空时阻止提交并提示。
  - 字段长度、日期、数值、枚举、附件格式不符合规则时阻止提交并提示。
  - 切换精简录入和完整录入时，应保留两种录入方式共用字段。
  - 提交失败时保留用户已填写内容，方便修正后重新提交。

- 反例：
  - 不允许用户手工填写或修改运单号。
  - 不允许确认保存缺少项目、合同、运输类型、货物名称、数量、计量单位的运单。
  - 不允许保存后不刷新列表。

---

### REQ-WAYB-006 编辑运单

- 功能点：
  - 草稿、待执行状态支持点击编辑，跳转至编辑页面。
  - 编辑页面回显运单完整信息。
  - 运单号在编辑状态下只读不可编辑。
  - 项目、客户、客户合同、发货计划、运输类型、收发货信息、货物信息、承运信息、费用信息、附件、备注等字段按规则编辑。
  - 编辑页面支持精简录入和完整录入切换，校验规则同新建。
  - 编辑保存成功后刷新列表，并展示最新更新时间。

- 异常与边界：
  - 编辑前需校验当前运单状态，非草稿、非待执行状态不允许进入可编辑提交流程。
  - 修改项目时，客户和客户合同应按新项目重新带出或重新选择。
  - 修改运输类型时，车/船/航班/班列号字段、过程节点和校验规则应按新运输类型重新匹配。
  - 修改运输类型后，收发货地址、任务信息和费用币种应按新运输类型重新校验。
  - 编辑的数据已不存在时提示数据不存在，并刷新列表。
  - 提交失败时保留用户修改内容。

- 反例：
  - 不允许编辑时修改运单号。
  - 不允许进行中、已完成、已取消状态继续提交编辑。
  - 不允许修改运输类型后继续沿用旧类型不适用的信息。

---

### REQ-WAYB-007 查看运单

- 功能点：
  - 支持点击详情查看运单完整信息。
  - 详情页展示基本信息、货物信息、承运信息、过程节点、当前过程节点、附件、状态、创建时间、更新时间等内容。
  - 详情页字段仅供查看，不允许编辑。
  - 详情页可查看过程节点时间线和节点记录。

- 异常与边界：
  - 数据已删除或不存在时提示数据不存在，并刷新列表。
  - 详情加载失败时提示失败原因，不改变列表数据。
  - 附件加载失败时不影响其他字段展示。

- 反例：
  - 不允许在详情状态下保存修改。
  - 不允许详情页出现删除货物、上传附件等编辑操作。
  - 不允许查看时自动切换为编辑状态。

---

### REQ-WAYB-008 运单编号与关联字段规则

- 功能点：
  - 运单号由系统自动生成，且全局唯一，只读不可编辑。
  - 原始单号用于承接业务侧自有单号，不要求与系统运单号一致。
  - 多联总单用于标记同一批次拆分成多条明细的总单。
  - 配载单号用于关联公路配载业务。
  - 运单批次号用于批量导入或批量生成场景的批次关联。
  - 关联单号用于把当前运单和其他业务单据建立追溯关系。

- 异常与边界：
  - 运单号生成冲突时阻止保存并重新生成。
  - 关联字段为空时可按业务规则允许，但不影响运单号唯一性。
  - 同一业务标识字段被重复使用时应按业务规则提示重复风险。

- 反例：
  - 不允许手工编辑系统运单号。
  - 不允许把原始单号当作系统运单号使用。
  - 不允许多联总单、配载单号、运单批次号混用后仍无法追溯。

---

### REQ-WAYB-009 基本信息规则

- 功能点：
  - 基本信息包含项目、客户合同、发货计划、原始单号、运输类型、配载单号、多联总单号、关联单号、备注、数据来源等字段。
  - 项目使用模糊搜索选择框，必填。
  - 客户合同选择项目后联动带出；若项目下存在多个客户合同，则以下拉方式供用户选择。
  - 发货计划使用选择框，支持按发货计划搜索选择，非必填。
  - 原始单号使用输入框，非必填。
  - 运输类型使用下拉单选控件，枚举包含公路整车、公路配载/零担、铁路运输、水路运输、跨境海运、航空运输。
  - 配载单号、多联总单号、关联单号使用输入框，非必填，最多30个字符。
  - 备注使用输入框或文本域，非必填，最多500字。
  - 数据来源用于标记运单创建渠道，创建后只读展示。

- 异常与边界：
  - 项目为空时阻止提交并提示。
  - 客户合同未能根据项目带出时阻止提交，并提示用户重新选择项目。
  - 运输类型为空或不在允许枚举内时阻止提交。
  - 配载单号、多联总单号、关联单号超过30个字符时阻止提交。
  - 备注超过500字时阻止提交。

- 反例：
  - 不允许未选项目时选择客户合同。
  - 不允许客户合同脱离项目单独维护。
  - 不允许使用非枚举运输类型。

---

### REQ-WAYB-010 货物信息规则

- 功能点：
  - 货物信息支持单行或多行维护。
  - 运单货物信息中货物名称、货物类型、数量、计量单位均为必填。
  - 包装、规格、型号、物料编码等字段可按业务需要填写。
  - 货物名称和货物类型可用于列表查询和详情展示。
  - 精简录入字段来源于完整录入，字段说明和校验规则与完整录入保持一致。
  - 完整录入下货物信息列表与发货模板的新建运单模板货物信息保持一致。
  - 支持导入货物和选择常用货物。
  - 多货物运单支持通过多联总单或同一运单批次号进行关联。

- 异常与边界：
  - 货物名称为空时阻止提交并提示。
  - 货物类型为空或不属于系统维护货物类型时阻止提交并提示。
  - 数量为空、为0、为负数或格式错误时阻止提交。
  - 计量单位为空或不是系统枚举值时阻止提交并提示。
  - 删除最后一行货物明细时应保留一条空行或提示至少保留一行。
  - 从精简录入切换为完整录入时，应将已填写的货物名称、货物类型、数量、计量单位带入货物列表。
  - 从完整录入切换为精简录入时，如存在多行货物，需按系统规则提示用户确认是否保留完整录入方式。

- 反例：
  - 不允许无货物明细的运单进入提交流程。
  - 不允许货物名称、数量、计量单位为空的明细行参与保存。
  - 不允许多货物运单不做关联标记而无法追溯。

---

### REQ-WAYB-011 承运信息规则

- 功能点：
  - 承运信息根据运输类型和承运类型展示不同字段。
  - 运输类型为公路时，承运类型默认显示承运商模式，可切换为自运模式。
  - 承运类型为承运商时，承运商为必填，使用输入搜索选择框，从已维护的承运商档案中选择。
  - 承运类型为自运时，不展示承运商字段，也不要求填写承运商。
  - 运输类型为公路时，车牌号为必填，挂车车牌号、押运人、押运人手机号、里程、预计发货日期、预计完成日期、备注按规则填写。
  - 运输类型为铁路、水路、跨境海运、航空时，载具字段按船/航班/班列号展示并必填；船长、联系电话、箱号、舱位等字段按运输类型展示。
  - 司机姓名、船长等人员字段支持输入或搜索选择。
  - 承运商、司机信息可用于导入、批量赋值和重新派单。

- 异常与边界：
  - 承运商模式下承运商为空时阻止提交并提示。
  - 自运模式下司机姓名、司机手机号、车牌号为空时阻止提交并提示。
  - 运输类型为公路整车或公路配载/零担时，车牌号需满足首位汉字、次位大写字母、总长度7位或8位。
  - 司机手机号有值时需校验11位数字格式。
  - 船/航班/班列号为空或超过30个字符时阻止提交。
  - 船长超过20个字符、舱位或箱号超过30个字符时阻止提交。
  - 里程有值时必须为正整数且最多10个字符。
  - 预计完成日期早于预计发货日期时阻止提交。

- 反例：
  - 不允许公路运单缺失车牌号。
  - 不允许承运商模式下不填写承运商。
  - 不允许自运模式下仍要求填写承运商。
  - 不允许非公路运输继续沿用公路车牌号字段口径。

---

### REQ-WAYB-012 过程节点配置规则

- 功能点：
  - 过程节点顺序固定，不可拖拽排序，依次为接单、到场、装货、发货、在途、到货、卸货、签收、回单。
  - 节点配置由项目对应的过程配置决定是否启用。
  - 接单节点支持“无需确认接单”。
  - 回单节点支持“无需确认完成”。
  - 仅启用的节点参与运单过程展示和状态流转。

- 异常与边界：
  - 节点顺序被篡改时阻止保存。
  - 未启用节点不应参与当前过程节点展示。
  - 接单或回单节点的特殊确认项为空时应按默认规则处理或阻止提交。

- 反例：
  - 不允许拖拽调整节点顺序。
  - 不允许把在途节点移到最后一个节点。
  - 不允许未启用节点仍进入过程展示。

---

### REQ-WAYB-013 当前过程节点规则

- 功能点：
  - 当前过程节点用于展示运单当前所处的流程节点。
  - 未配置过程或当前还没有完成的节点时，当前过程节点显示“/”。
  - 已完成一个节点后，当前过程节点更新为最新完成节点。
  - 当前过程节点在列表、详情页中均可展示。

- 异常与边界：
  - 运单未配置过程节点时显示“/”。
  - 运单尚未完成任何节点时显示“/”。
  - 当前过程节点与后台记录不一致时，以后台最新记录为准并刷新展示。

- 反例：
  - 不允许未完成节点时显示错误节点名称。
  - 不允许将未配置过程的运单强行显示为某个节点。
  - 不允许前端缓存旧节点而不刷新。

---

### REQ-WAYB-014 过程节点完成与记录

- 功能点：
  - 每完成一个节点，后台记录完成时间。
  - 节点完成后在过程节点上标记为“已XX”，在途节点除外。
  - 接单、到场、装货、发货、到货、卸货、签收、回单等节点按固定顺序逐步完成。
  - 过程节点记录可用于详情页展示和状态流转判断。

- 异常与边界：
  - 节点未完成前不记录完成时间。
  - 已完成节点重复完成时应阻止或按幂等规则处理。
  - 节点完成时间写入失败时不应造成状态展示错误。

- 反例：
  - 不允许节点未完成却先写入完成时间。
  - 不允许把在途节点标记成“已在途”。
  - 不允许过程节点完成后不刷新当前节点展示。

---

### REQ-WAYB-015 运单状态流转

- 功能点：
  - 如果运单对应项目未配置过程节点、未配置接单节点或接单节点配置为无需确认接单，则运单创建后状态默认为进行中。
  - 如果运单对应项目配置了需司机确认接单，则运单创建后默认待执行，司机接单后变为进行中。
  - 如果项目配置了需司机确认接单，则运单创建后在待执行阶段等待司机接单或拒绝。
  - 当最后一个节点是到货、卸货、签收任意一个，且回单配置为无需确认完成时，司机打卡完成最后一个节点后，运单状态自动流转为已完成。
  - 非上述自动完成条件下，运单不会自动流转为已完成，需内部人员手工完成。

- 异常与边界：
  - 状态流转前需重新校验过程配置和节点完成情况。
  - 状态已变化时，列表和详情应同步刷新。
  - 司机接单、司机拒绝、节点完成等事件应以后台最新状态为准。

- 反例：
  - 不允许未配置接单却进入待执行。
  - 不允许未完成最后节点却自动变成已完成。
  - 不允许跳过过程节点完成状态直接完成运单。

---

### REQ-WAYB-016 取消运单

- 功能点：
  - 草稿、待执行和进行中且未发货前的运单支持取消。
  - 点击取消后弹出确认弹窗。
  - 确认后运单状态变更为已取消。
  - 取消后刷新列表，当前过程节点按取消前状态保留追溯信息。

- 异常与边界：
  - 已完成或已取消状态不允许取消。
  - 取消前如运单已发货，则阻止取消并提示。
  - 用户取消弹窗时不改变运单状态。

- 反例：
  - 不允许已发货后的运单继续取消。
  - 不允许跳过二次确认直接取消。
  - 不允许取消成功后仍显示原状态。

---

### REQ-WAYB-017 重新派单

- 功能点：
  - 当待执行状态下司机拒绝接单时，列表操作列展示重新派单。
  - 点击重新派单后跳转至编辑页面底部定位区域，允许重新修改司机和司机手机号等信息。
  - 重新派单后运单继续保持待执行状态，等待新的司机接单。

- 异常与边界：
  - 仅司机拒绝接单场景展示重新派单。
  - 重新派单前需校验运单当前状态仍为待执行。
  - 司机和手机号修改后需重新校验必填与格式。

- 反例：
  - 不允许普通待执行状态无拒绝记录时重新派单。
  - 不允许重新派单后直接进入进行中。
  - 不允许跳转编辑后不允许修改司机信息。

---

### REQ-WAYB-018 完成运单

- 功能点：
  - 进行中状态支持内部人员手动点击完成。
  - 点击完成后，系统依据当前过程节点和业务完成情况将运单状态变更为已完成。
  - 当最后一个节点满足无需确认完成时，也可由司机打卡触发自动完成。
  - 完成后刷新列表和详情。

- 异常与边界：
  - 待执行、已完成、已取消状态不允许手动完成。
  - 完成前需重新校验当前过程节点和最后节点状态。
  - 完成失败时提示失败原因，运单保持原状态。

- 反例：
  - 不允许未进入进行中就完成运单。
  - 不允许已取消运单被手工完成。
  - 不允许完成后不刷新列表。

---

### REQ-WAYB-019 批量完成

- 功能点：
  - 支持勾选多条运单后批量完成。
  - 系统逐条校验所选运单是否处于可完成状态。
  - 校验通过的运单批量完成，完成后刷新列表。

- 异常与边界：
  - 未勾选数据时点击批量完成，应提示先选择运单。
  - 非进行中状态的记录不参与批量完成。
  - 部分记录不可完成时，应单独提示并保留可完成记录的处理结果。

- 反例：
  - 不允许未选中任何运单直接批量完成。
  - 不允许已完成或已取消运单参与批量完成。
  - 不允许批量完成后不刷新列表。

---

### REQ-WAYB-020 公路配载

- 功能点：
  - 列表顶部提供公路配载按钮。
  - 点击公路配载后跳转至“配载管理-新建编辑”页面。
  - 公路配载用于处理公路配载或零担场景的运单拆分与配载。

- 异常与边界：
  - 非公路运输类型不应展示公路配载入口。
  - 运单状态不允许参与配载时，应提示并禁止跳转。
  - 跳转失败时不改变当前运单数据。

- 反例：
  - 不允许水运、铁路、航空运单执行公路配载。
  - 不允许跳转到错误的业务页面。
  - 不允许配载失败后提示成功。

---

### REQ-WAYB-021 导入运单

- 功能点：
  - 支持点击“导入运单”进入导入页面。
  - 导入运单入口进入导入批次管理页面，用户可新建导入批次、查询导入批次、查看导入详情、编辑草稿批次、删除草稿批次。
  - 支持下载导入模板并上传 Excel 文件。
  - 导入后系统自动校验字段格式、运单状态、过程节点、运单号、配载关系、承运信息、货物信息、时间和费用等规则。
  - 校验通过的数据进入待导入明细或直接生成运单，按页面导入规则处理。
  - 存在失败数据时自动生成错误报告并下载。

- 异常与边界：
  - 上传文件格式不支持时阻止导入并提示。
  - 必填字段为空、枚举错误、日期错误、费用错误时对应行导入失败。
  - 校验失败行不应直接进入正式运单。
  - 导入完成后刷新列表。

- 反例：
  - 不允许错误数据静默入库。
  - 不允许导入模板与导入校验字段不一致。
  - 不允许失败后不下载错误报告。

---

### REQ-WAYB-022 批量导出

- 功能点：
  - 支持勾选多行后批量导出运单 Excel 文件。
  - 未勾选数据时点击批量导出，默认导出当前查询条件下的全部数据。
  - 导出字段与列表显示字段一致。

- 异常与边界：
  - 当前查询条件下无数据时允许导出空文件或提示无可导出数据。
  - 导出失败时提示失败原因，不改变当前勾选状态。

- 反例：
  - 不允许只导出当前页数据。
  - 不允许导出字段与列表字段不一致。
  - 不允许导出失败后提示成功。

---

### REQ-WAYB-023 单条删除

- 功能点：
  - 草稿状态支持通过行操作删除单条运单。
  - 点击删除后弹出二次确认弹窗。
  - 确认后删除成功并刷新列表。

- 异常与边界：
  - 非草稿状态不允许删除。
  - 删除前状态已变化为非草稿时阻止删除，并刷新列表。
  - 数据不存在时提示数据不存在，并刷新列表。

- 反例：
  - 不允许跳过二次确认直接删除。
  - 不允许删除待执行、进行中、已完成、已取消运单。
  - 不允许删除失败后仍提示成功。

---

### REQ-WAYB-024 复制运单

- 功能点：
  - 任意状态的运单均支持复制。
  - 复制后生成新的草稿运单，运单号重新生成。
  - 复制时保留运单基础信息、货物信息、承运信息和过程配置相关信息，状态与过程记录重新初始化。
  - 复制成功后跳转编辑页面。

- 异常与边界：
  - 原运单不存在时提示数据不存在。
  - 复制后名称、编号或关联字段触发唯一性校验时应重新处理。
  - 复制失败时不影响原运单数据。

- 反例：
  - 不允许复制后沿用原运单号。
  - 不允许复制后直接生成进行中或已完成状态。
  - 不允许复制后保留原过程节点完成记录。

---

### REQ-WAYB-025 权限与审计

- 功能点：
  - 根据用户权限控制查询、新建运单、导入、导出、编辑、复制、删除、取消、重新派单、完成、公路配载等操作入口。
  - 创建时间、更新时间由系统自动记录。
  - 若列表或详情展示创建人、更新人等审计字段，应优先展示姓名，不直接展示用户 ID。

- 异常与边界：
  - 无权限访问时提示权限不足。
  - 无按钮权限时不展示对应按钮，并阻止绕过页面发起操作。
  - 操作失败时不记录为成功日志。

- 反例：
  - 不允许无权限用户执行新增、编辑、删除、取消、完成等操作。
  - 不允许用户手动维护创建时间、更新时间。
  - 不允许直接向用户展示 createUser、updateUser 等用户 ID 字段。

---

### REQ-WAYB-026 新增编辑页面布局

- 功能点：
  - 新增和编辑页面采用分区布局，包含基本信息、收发货信息、任务信息或货物信息、承运信息、费用信息、附件等区域。
  - 基本信息区展示项目、客户合同、发货计划、原始单号、运输类型、配载单号、多联总单号、关联单号、备注等字段。
  - 收发货信息区展示发货地址、收货地址、发货联系人、发货联系方式、收货联系人、收货联系方式、计划发货日期、计划完成日期等字段。
  - 页面默认展示精简录入模式，用户可点击“精简录入/完整录入”切换。
  - 精简录入下任务信息将货物和承运关键字段集中展示。
  - 完整录入下拆分展示货物信息列表、承运信息、费用信息、附件等区域。
  - 页面底部固定展示运费合计、查看过程配置、返回、暂存、确认等操作。

- 异常与边界：
  - 编辑页面加载失败时提示失败原因，不展示空白可编辑表单。
  - 从模板、计划、配载或导入入口带入的数据应按当前页面字段完整回填。
  - 字段因运输类型切换而不适用时，应清空或置灰不适用字段并重新校验。
  - 页面存在未保存内容时点击返回，应按系统统一规则提示用户确认。

- 反例：
  - 不允许新增编辑页面缺少基本信息、收发货信息或货物信息区域。
  - 不允许从完整录入切回精简录入时静默丢失用户已填字段。
  - 不允许底部确认按钮被页面滚动内容遮挡。

---

### REQ-WAYB-027 精简录入与完整录入

- 功能点：
  - 新增和编辑运单默认展示精简录入。
  - 精简录入用于快速填写单票运单核心字段，主要展示货物类型、货物名称、数量、计量单位、承运商或司机、车牌号或载具号、预计发货日期、预计完成日期、单价、备注等字段。
  - 完整录入用于填写完整运单信息，货物信息以列表方式展示，包含导入货物、常用货物、新增、删除等能力。
  - 精简录入字段来源于完整录入字段，字段说明和校验规则与完整录入保持一致。
  - 点击“精简录入/完整录入”可切换两种填写模式。
  - 完整录入表单与发货模板的新建运单模板保持一致。

- 异常与边界：
  - 精简录入切换至完整录入时，应将精简录入已填的货物名称、货物类型、数量、计量单位、承运信息、费用信息等字段带入完整录入。
  - 完整录入存在多行货物时，切换回精简录入应提示用户确认或保留完整录入模式。
  - 两种模式切换后，应重新计算运费合计。
  - 切换模式不得绕过必填、格式、金额、日期等校验规则。

- 反例：
  - 不允许精简录入与完整录入字段校验不一致。
  - 不允许切换录入模式后丢失已填写的货物数量或承运信息。
  - 不允许完整录入多货物被无提示压缩为单货物精简录入。

---

### REQ-WAYB-028 收发货信息规则

- 功能点：
  - 收发货信息字段与发货模板的新建运单模板保持一致。
  - 发货地址、收货地址为必填。
  - 公路运输时，发货地址和收货地址可从常用地址选择、从常用线路回填，或按地址选择逻辑填写。
  - 运输类型为铁路、水路、跨境海运、航空等非公路类型时，收发地址只能从对应基础数据中选择。
  - 铁路运输选择站点，水路或跨境海运选择港口，航空运输选择空港。
  - 选择常用地址或常用线路后，系统自动回填地址名称、详细地址、联系人、联系方式等信息。
  - 非公路运输选择基础数据后，自动带出港口、空港或站点的名称和详细地址。

- 异常与边界：
  - 发货地址或收货地址为空时阻止提交并提示。
  - 当运输类型为非公路时，如果常用地址或选择路线带出的地址不是对应运输类型的港口、空港或站点，则 toast 提示“请选择港口/空港/车站地址”。
  - 切换运输类型后，应清空不适用的收发货地址，并要求重新选择。
  - 联系方式有值时需校验手机号或固定电话格式。
  - 计划完成日期早于计划发货日期时阻止提交并提示。

- 反例：
  - 不允许非公路运输使用公路地址自由输入逻辑。
  - 不允许水运选择空港、空运选择港口、铁路选择港口作为收发地址。
  - 不允许保存缺失发货地址或收货地址的运单。

---

### REQ-WAYB-029 公路运输任务信息

- 功能点：
  - 运输类型为公路时，任务信息默认显示承运商模式。
  - 承运类型使用单选标签，选项为承运商、自运。
  - 承运商模式下，承运商为必填，使用输入搜索选择框，从承运商档案中选择。
  - 自运模式下，不展示承运商字段，承运商不需要填写。
  - 自运模式下，司机、司机手机号、车牌号为必填。
  - 司机支持输入或搜索选择；从司机档案选择时自动带出手机号，也支持手工录入非系统维护司机。
  - 公路任务字段包含车牌号、挂车车牌号、押运人、押运人手机号、里程、预计发货日期、预计完成日期、备注。
  - 车牌号最多30个字符，挂车车牌号最多30个字符，司机、押运人最多20个字符，手机号最多20个字符。
  - 里程为正整数，最多10个字符。

- 异常与边界：
  - 承运商模式下未选择承运商时阻止提交。
  - 自运模式下司机、司机手机号或车牌号为空时阻止提交。
  - 车牌号格式不符合公路车辆规则时阻止提交。
  - 司机手机号、押运人手机号格式不合法时阻止提交。
  - 预计完成日期早于预计发货日期时阻止提交。
  - 备注超过500字时阻止提交。

- 反例：
  - 不允许承运商模式下缺少承运商。
  - 不允许自运模式下仍强制填写承运商。
  - 不允许公路运单缺失车牌号。

---

### REQ-WAYB-030 铁水空运输任务信息

- 功能点：
  - 运输类型为铁路、水路、跨境海运、航空时，任务信息展示非公路特殊字段，其余规则与公路运单一致。
  - 非公路运输的载具字段显示为船/航班/班列号，必填，最多30个字符。
  - 水路或跨境海运可填写船长、舱位、箱号等字段。
  - 船长最多20个字符，舱位最多30个字符，箱号最多30个字符。
  - 非公路运输可填写联系电话、预计发货日期、预计完成日期、备注等信息。
  - 运输类型切换为铁路、水路、跨境海运、航空后，应按对应类型刷新载具字段名称和收发地址选择规则。

- 异常与边界：
  - 船/航班/班列号为空时阻止提交并提示。
  - 船/航班/班列号超过30个字符时阻止提交。
  - 船长、舱位、箱号超过长度限制时阻止提交。
  - 联系电话有值时需校验手机号或固定电话格式。
  - 非公路运输仍填写公路车牌号字段时，应按当前运输类型忽略或清空不适用字段。

- 反例：
  - 不允许铁、水、空运单缺失船/航班/班列号。
  - 不允许非公路运输继续展示主车车牌号作为必填字段。
  - 不允许运输类型切换后沿用旧运输类型的载具字段名称。

---

### REQ-WAYB-031 运费信息与币种规则

- 功能点：
  - 运费信息包含单价、计价单位、数量合计、运费、其他运费合计、运费合计、币种等字段。
  - 运费合计等于运费加其他运费合计，由系统自动计算并只读展示。
  - 运费由系统根据货物数量或货物列表中数量求和乘以单价自动计算。
  - 运费允许用户修改。
  - 数量合计由货物信息中的数量自动汇总。
  - 公路类型默认币种为 CNY。
  - 铁路、水路、跨境海运、航空类型支持选择币种 CNY 或 USD。
  - 完整录入下支持录入应收费用。

- 异常与边界：
  - 货物数量、计量单位或单价缺少任一项时，不自动计算运费。
  - 不同计量单位的货物数量应按单位分别汇总或提示无法合并，不得无提示合并。
  - 单价、运费、其他运费合计不能小于0，金额最多保留2位小数。
  - 运费合计计算失败时提示计算异常，并阻止确认提交。
  - 币种不在 CNY、USD 等允许枚举内时阻止提交。

- 反例：
  - 不允许运费合计被手工修改。
  - 不允许数量或单价缺失时强制自动计算运费。
  - 不允许公路运单默认币种展示为 USD。

---

### REQ-WAYB-032 新增编辑底部按钮

- 功能点：
  - 新增和编辑页面底部操作按钮与发货模板的新建运单模板保持一致。
  - 底部左侧展示运费合计和查看过程配置入口。
  - 若当前项目未配置过程配置，则不展示查看过程配置入口。
  - 点击查看过程配置后弹出过程配置查看弹窗，只读展示当前项目的过程节点配置。
  - 底部右侧展示返回、暂存、确认按钮。
  - 点击返回时返回运单列表，不保存当前数据。
  - 点击暂存时保存草稿。
  - 点击确认时执行完整校验并按状态规则创建或更新运单。

- 异常与边界：
  - 确认校验失败时停留在当前页面，并提示需要修改的字段。
  - 暂存失败时保留用户已填写内容。
  - 重复点击暂存或确认时应防止重复提交。
  - 查看过程配置加载失败时提示失败原因，不影响当前表单内容。

- 反例：
  - 不允许点击返回后悄悄保存数据。
  - 不允许未配置过程配置时仍展示查看过程配置入口。
  - 不允许确认时绕过货物名称、数量、计量单位等运单必填校验。

---

### REQ-WAYB-033 导入批次列表与分页

- 功能点：
  - 导入运单页面默认展示导入批次列表。
  - 页面顶部展示导入批次查询区域，查询区域下方展示操作按钮区和导入批次列表。
  - 操作按钮区固定展示“新建导入”“批量删除”按钮，按钮展示受权限控制。
  - 列表展示序号、运单批次号、项目名称、承运商、承运类型、运单数、导入方式、创建时间、更新时间、状态、操作等字段。
  - 列表首列支持复选框勾选，用于批量删除草稿导入批次。
  - 序号为列表行序号，按当前分页自增，从1开始。
  - 运单批次号为导入批次的唯一编号，示例格式为 PC202606010001，支持点击查看导入批次详情。
  - 项目名称取自项目档案。
  - 承运商在自运或承运商模式下按导入数据解析展示。
  - 承运类型枚举为承运商、自运。
  - 运单数展示本次导入批次包含的运单数量，为校验成功并导入的运单总数。
  - 导入方式枚举为 API 对接、手工导入。
  - 创建时间、更新时间精确到分钟，格式为 yyyy-MM-dd HH:mm。
  - 状态展示为标签样式，不同状态使用不同颜色区分。
  - 状态列和操作按钮列固定在右侧，不随横向滚动条滑动。
  - 支持分页展示，默认10条/页，支持20/50/100条/页。

- 异常与边界：
  - 查询无数据时展示空状态。
  - 横向字段较多时允许列表横向滚动，但状态列和操作列必须保持固定。
  - 批次列表加载失败时保留当前查询条件和分页条件。
  - 运单批次号为空或重复时应阻止入库并提示。
  - 更新时间为空时展示“/”，不得展示空白或后端原始空值。

- 反例：
  - 不允许状态列或操作列被横向滚动隐藏。
  - 不允许运单批次号重复。
  - 不允许把导入失败的数据计入运单数。
  - 不允许列表批量删除入口删除导入完成状态批次。

---

### REQ-WAYB-034 导入批次查询与重置

- 功能点：
  - 支持按运单批次号、承运商、创建时间、创建人、状态等条件查询导入批次。
  - 运单批次号使用输入框，支持模糊查询。
  - 承运商使用输入搜索选择框。
  - 创建时间使用日期选择器或日期范围选择器。
  - 创建人使用输入框。
  - 状态使用下拉单选控件。
  - 状态查询枚举包含草稿、导入完成。
  - 点击查询后，根据查询条件刷新批次列表。
  - 点击重置后清空所有查询条件，恢复默认列表。

- 异常与边界：
  - 查询条件为空时点击查询，按默认规则展示全部导入批次。
  - 查询结果为空时展示空状态，不清空用户已输入条件。
  - 创建时间格式不合法或开始时间晚于结束时间时阻止查询并提示。
  - 重置后页码恢复第一页。

- 反例：
  - 不允许重置后仍保留隐藏查询条件。
  - 不允许创建时间范围错误时继续查询。
  - 不允许只按单个条件查询而忽略其他已选择条件。

---

### REQ-WAYB-035 导入批次状态与操作

- 功能点：
  - 导入批次状态包含草稿、导入完成。
  - 草稿表示导入数据尚未最终确认导入。
  - 导入完成表示批次内所有运单已成功导入。
  - 草稿状态行操作展示编辑、删除。
  - 导入完成状态行操作仅展示查看。
  - 操作列根据批次状态和用户权限展示对应按钮。
  - 点击运单批次号默认进入导入批次详情，与点击查看入口保持一致。

- 异常与边界：
  - 执行编辑、删除、查看前需重新校验批次最新状态。
  - 状态为空或未知时限制编辑和删除，仅允许按权限查看或提示异常。
  - 批次状态变更后刷新列表，展示最新操作按钮。
  - 用户无编辑、删除、查看按钮权限时，不展示对应操作入口。

- 反例：
  - 不允许导入完成状态继续编辑或删除。
  - 不允许草稿状态展示查看完成结果而不允许编辑。
  - 不允许仅根据前端状态跳过后端校验。

---

### REQ-WAYB-036 新建导入批次

- 功能点：
  - 点击“新建导入”按钮后跳转至新建导入运单页面，开始新的导入流程。
  - 新建导入用于上传或录入待导入运单数据，生成新的运单批次号。
  - 新建导入成功但未最终确认导入时，批次状态为草稿。
  - 新建导入最终确认成功后，批次状态变更为导入完成。

- 异常与边界：
  - 新建导入页面打开失败时提示失败原因，不改变列表数据。
  - 运单批次号生成失败时阻止保存并提示。
  - 新建导入过程中校验失败的数据不得进入导入完成状态。
  - 用户离开新建导入页面前若存在未确认数据，应提示用户确认是否离开。
  - 重复点击新建或确认导入时应防止重复生成批次或运单。

- 反例：
  - 不允许未确认导入的数据直接进入导入完成状态。
  - 不允许多个导入批次共用同一个运单批次号。
  - 不允许导入失败后仍提示导入完成。

---

### REQ-WAYB-037 导入批次详情

- 功能点：
  - 支持点击运单批次号或导入完成状态行的查看按钮打开导入运单详情。
  - 导入运单详情标题展示为“导入运单详情”。
  - 导入运单详情以弹窗或详情页展示当前批次下的导入运单明细，默认只读。
  - 详情顶部支持按车牌号/船号和货物名称筛选明细。
  - 详情列表展示序号、运单批次号、原始单号、车牌号/航班号/船号/班列号、司机/船长、运输类型、货物名称、货物类型等字段。
  - 车牌号/航班号/船号/班列号按运输类型展示实际导入载具字段。
  - 司机/船长按运输类型展示司机姓名或船长姓名。
  - 运输类型展示导入数据解析后的系统枚举值。
  - 明细列表支持分页展示，默认10条/页。
  - 详情弹窗支持关闭。

- 异常与边界：
  - 批次不存在或无权限查看时提示无法查看。
  - 详情列表加载失败时提示失败原因，不影响批次列表。
  - 查询条件为空时默认展示当前批次全部明细。
  - 明细字段较多时支持横向滚动。
  - 导入批次下无明细时展示空状态。

- 反例：
  - 不允许导入详情展示其他批次的运单。
  - 不允许在导入完成详情中编辑运单明细。
  - 不允许关闭详情弹窗时改变批次状态。

---

### REQ-WAYB-038 导入明细查询与列表

- 功能点：
  - 导入运单详情内支持按车牌号/船号、货物名称查询。
  - 车牌号/船号使用输入框，支持模糊查询。
  - 货物名称使用输入框，支持模糊查询。
  - 点击查询后刷新当前批次明细列表。
  - 点击重置后清空详情查询条件，恢复当前批次全部明细。
  - 明细列表的运输类型展示导入数据解析后的运输类型。
  - 明细列表分页切换、页容量切换时，应保留详情页当前查询条件。
  - 关闭详情后再次打开同一批次时，默认清空上一次详情内查询条件。

- 异常与边界：
  - 查询无数据时展示空状态。
  - 重置后保留当前批次上下文，不返回批次列表。
  - 车牌号/船号或货物名称超长时阻止查询并提示。

- 反例：
  - 不允许详情查询跨批次检索。
  - 不允许重置后丢失当前批次号。
  - 不允许查询后改变明细列表字段范围。

---

### REQ-WAYB-039 编辑导入批次

- 功能点：
  - 草稿状态导入批次支持点击编辑。
  - 点击编辑后跳转至导入编辑页，允许修改未导入完成的批次数据。
  - 编辑保存后批次仍保持草稿状态，直到用户最终确认导入。
  - 编辑导入批次时应回显该批次已上传、已校验通过但未确认导入的数据。
  - 编辑页面的字段校验、重复校验、错误报告下载规则与新建导入保持一致。
  - 编辑完成后刷新导入批次列表。

- 异常与边界：
  - 仅草稿状态允许编辑。
  - 编辑前需校验当前批次状态仍为草稿。
  - 编辑保存时需重新执行导入字段校验。
  - 导入完成状态点击编辑或通过地址绕过编辑时，应提示不可编辑。

- 反例：
  - 不允许导入完成批次继续编辑。
  - 不允许编辑后绕过导入校验。
  - 不允许编辑失败后清空用户已修改内容。

---

### REQ-WAYB-040 删除导入批次

- 功能点：
  - 草稿状态导入批次支持单条删除。
  - 点击删除后弹出二次确认弹窗。
  - 确认后删除当前草稿批次，删除成功刷新列表。
  - 支持勾选多条导入批次后批量删除。
  - 批量删除仅允许删除草稿状态记录。
  - 若选中非草稿状态记录，系统应给出不可删除提示并跳过执行。
  - 删除成功后提示删除成功；批量删除存在跳过记录时提示成功删除数量和跳过数量。

- 异常与边界：
  - 未勾选数据时点击批量删除，应提示先选择数据。
  - 批量删除时应逐条校验批次状态，草稿可删除，导入完成不可删除。
  - 所选记录全部不可删除时，不执行删除并提示原因。
  - 部分删除成功时，应提示成功数量和跳过数量，并刷新列表。
  - 删除失败时提示失败原因，不改变其他数据。

- 反例：
  - 不允许删除导入完成状态批次。
  - 不允许因为选中了导入完成记录而阻塞其他草稿记录删除。
  - 不允许跳过二次确认直接删除。

---

### REQ-WAYB-041 新建导入页面布局

- 功能点：
  - 点击导入批次列表的“新建导入”后进入新建导入页面。
  - 页面上半部分为“新建导入”信息填写区域，下半部分为“导入数据明细”区域。
  - 信息填写区域展示项目、客户、客户合同、承运类型、承运商、导入状态、导入类型、发货计划、运单明细表等字段。
  - 运单明细表支持添加附件上传 Excel，旁边展示“请上传运单明细表，仅支持 excel 格式”提示文案。
  - 运单明细表区域支持下载模板。
  - 信息填写区域底部展示“提交”“返回”按钮。
  - 待导入数据明细区域展示批量删除按钮、运单数页签、疑似重复页签、明细表格和分页。
  - 页面底部固定展示已选数量、返回、确认导入按钮。

- 异常与边界：
  - 页面初始化失败时提示失败原因，并允许返回导入批次列表。
  - 未上传 Excel 前，导入数据明细区域可为空状态或不展示明细数据。
  - 上传 Excel 校验未完成前，不允许点击确认导入。
  - 信息填写区域与导入数据明细区域的数据应归属于同一个运单批次号。

- 反例：
  - 不允许未选择项目直接上传生成有效导入明细。
  - 不允许上传非 Excel 文件后进入导入明细。
  - 不允许一个页面混入多个导入批次的数据。

---

### REQ-WAYB-042 新建导入信息填写

- 功能点：
  - 项目为必填字段，使用选择框或模糊查询选择框，选择项目档案。
  - 选择项目后系统自动带出客户；客户字段为只读文本，不允许手工编辑。
  - 选择项目后系统自动带出客户合同；客户合同字段为只读文本，若存在多个合同则支持下拉选择。
  - 承运类型为必填字段，使用下拉单选控件，枚举为承运商、自运，默认承运商。
  - 承运商根据承运类型和项目、合同关系自动带出；承运类型为承运商时，若存在多个承运商需支持多选选择。
  - 顶部承运商为批量赋值字段，选择后所有导入运单的承运商统一赋值为该值。
  - 承运类型为自运时，承运商可为空，导入数据按自运模式处理。
  - 导入状态为必填字段，使用下拉单选控件，枚举为完成、进行中，默认完成。
  - 导入类型为必填字段，使用下拉单选控件，枚举为运单、结算单，默认导入运单。
  - 发货计划为非必填字段，使用选择框，关联发货计划档案。

- 异常与边界：
  - 项目为空时阻止提交并提示。
  - 项目变更后，应清空并重新带出客户、客户合同、承运商、发货计划和已解析导入上下文。
  - 客户或客户合同无法根据项目带出时，应提示用户检查项目档案配置。
  - 承运类型从承运商切换为自运时，应清空承运商批量赋值字段。
  - 导入状态为进行中时，实际发货时间和实际完成时间在模板中不强制必填。
  - 导入状态为完成时，导入成功后的运单状态为已完成；导入状态为进行中时，导入成功后的运单状态为进行中。

- 反例：
  - 不允许客户字段由用户手工输入。
  - 不允许项目切换后继续沿用旧项目的客户、合同或发货计划。
  - 不允许导入状态不明确时生成正式运单。

---

### REQ-WAYB-043 导入模板字段

- 功能点：
  - 点击“下载模板”下载 Excel 导入模板。
  - 模板字段包含序号、原始单号、配载标识号、车牌号/航班号/船号/班列号、运输类型、司机/船长姓名、司机/船长手机号、发货地址、发货联系人、发货联系人电话、到货地址、收货联系人、收货联系人电话、货物名称、货物类型、包装、数量、计量单位、规格、型号、里程(km)、单价、计价单位、运费、其他费用合计、运费合计、实际发货时间、实际完成时间、备注、同一运单标识号。
  - 模板中必填字段需使用“*”标识，包含车牌号/航班号/船号/班列号、运输类型、发货地址、到货地址、货物名称、数量、计量单位、单价、计价单位、运费。
  - 原始单号用于填写业务侧自有单号，无需与系统运单号一致。
  - 配载标识号适用于公路配载场景，推荐填写方式为“车牌后四位-发车日期”，例如 2345-20260601，要求在当前导入批次内唯一。
  - 发货地址和到货地址需精确到具体地址，否则轨迹回放可能受影响。
  - 货物类型用于指定系统内维护的一级或二级货物类型；为空时系统可按货物名称尝试匹配补全。
  - 计量单位需填写系统中的枚举值。
  - 计价单位枚举为元/吨、元/方、元/件、元/吨/公里。
  - 其他费用合计用于填写装卸费、过路费等费用总额。
  - 运费合计表示本运单的运输费用合计。
  - 实际发货时间、实际完成时间需填写日期时间格式。
  - 备注为文本，最多200字。
  - 同一运单标识号用于标记多行货物归属于同一运单，多货物运单需拆分多行并填写相同标识。

- 异常与边界：
  - 模板字段顺序不得与系统校验规则不一致。
  - 必填字段在模板中必须明确标识，避免用户漏填。
  - 用户使用旧模板上传时，应按当前模板字段进行兼容校验；无法兼容时提示下载最新模板。

- 反例：
  - 不允许导入模板缺少必填标识。
  - 不允许模板字段与错误报告字段顺序不一致。
  - 不允许把同一运单标识号当作系统运单号使用。

---

### REQ-WAYB-044 导入模板校验规则

- 功能点：
  - 上传 Excel 后系统逐行校验字段必填、枚举、格式、数值、金额、日期、配载关系、多货物关系和重复数据。
  - 同一配载标识号下车牌号不一致时，行校验失败，错误文案为“配载单车牌号不一致”。
  - 运输类型为公路整车或公路配载/零担时，车牌号需满足首位汉字、次位大写字母、总长度7位或8位；不满足时错误文案为“车牌号校验不通过”。
  - 运输类型为铁路运输、水路运输、跨境海运、航空运输时，车牌号/航班号/船号/班列号不执行公路车牌格式校验。
  - 运输类型必须为系统枚举值之一，否则错误文案为“运输类型需系统枚举值”。
  - 司机/船长手机号、发货联系人电话、收货联系人电话有值时需校验11位数字格式；不满足时错误文案为“手机号格式校验不通过”。
  - 发货地址和到货地址未匹配到地址库时给出警告，文案为“地址未匹配到地址库，轨迹回放将受影响”，警告不阻止导入。
  - 货物名称为空时错误文案为“货物名称必填”。
  - 货物类型有值时需匹配系统内一级或二级货物类型；货物类型为空时，系统按货物名称尝试匹配补全，无法匹配时错误文案为“未匹配到货物类型”。
  - 包装、规格、型号为非必填字段。
  - 数量有值时必须为正数；数量为空时按必填字段校验失败。
  - 计量单位必须为系统枚举值，不存在时错误文案为“计量单位不存在”。
  - 里程(km)有值时必须为正数。
  - 单价为必填字段，且需为非负数。
  - 计价单位为必填字段，且必须为允许枚举值。
  - 运费为必填字段，且需为非负数。
  - 其他费用合计有值时需为非负数，空值按0处理。
  - 运费合计有值时，必须等于运费加其他费用合计；不一致时错误文案为“运费合计不等于运费与其他运费合计之和，请调整”。
  - 实际发货时间有值时必须为日期时间格式；若实际完成时间有值，则实际发货时间不能晚于实际完成时间，否则错误文案为“实际发货时间不能晚于实际完成时间”。
  - 实际完成时间有值时必须为日期时间格式；若实际发货时间有值，则实际完成时间不能早于实际发货时间，否则错误文案为“实际完成时间不能早于实际发货时间”。
  - 同一运单标识号下的多行数据需校验为同一个车牌号/航班号/船号/班列号，否则错误文案为“统一运单车牌不一致”。

- 异常与边界：
  - 一行存在多个错误时，需收集全部错误文案，不得只返回第一条。
  - 警告类问题允许进入待导入数据明细，但需保留警告提示供用户识别。
  - 导入状态为进行中时，实际发货时间和实际完成时间不必填；有值时仍需执行日期格式和先后顺序校验。
  - 导入状态为完成时，实际发货时间和实际完成时间必填；导入状态为进行中时，实际发货时间和实际完成时间不必填。

- 反例：
  - 不允许车牌格式错误的公路运单进入待导入明细。
  - 不允许费用合计错误的数据静默修正后导入。
  - 不允许日期先后错误的数据生成正式运单。

---

### REQ-WAYB-045 导入失败报告

- 功能点：
  - 上传 Excel 后若存在校验失败数据，系统自动生成错误报告 Excel 并下载。
  - 错误报告字段顺序与原导入模板保持一致，并在最后一列追加错误原因。
  - 同一行存在多个错误或警告时，错误原因用分号分隔。
  - 校验失败时页面提示“提交失败，报错文件已下载，请根据提示修改内容”。
  - 校验失败的运单不展示在待导入数据明细中。

- 异常与边界：
  - 错误报告下载失败时需提示用户重新下载或重新上传。
  - 仅存在警告且无错误时，可展示待导入数据明细，并在明细行标识警告。
  - 文件解析异常、空文件、模板格式错误时，应阻止继续导入并提示原因。

- 反例：
  - 不允许校验失败数据混入待导入明细。
  - 不允许错误报告字段顺序与模板不一致。
  - 不允许有失败数据时只 toast 不下载错误报告。

---

### REQ-WAYB-046 导入数据明细

- 功能点：
  - 当导入数据校验通过后，才展示在待导入数据明细中。
  - 系统对每一条上传的有效运单自动生成唯一运单号。
  - 待导入数据明细展示复选框、序号、运单批次号、原始单号、车牌号/航班号/船号/班列号、司机/船长、运输类型、货物名称、货物类型、重量、操作等字段。
  - 运单数页签展示总导入运单数量，格式为“运单数（4）”。
  - 明细列表支持分页展示，默认10条/页，支持20/50/100条/页。
  - 明细行支持编辑、保存、取消、删除。
  - 明细行点击编辑后，可编辑字段切换为输入框、下拉框等可编辑控件。
  - 点击保存后保存当前行编辑内容，并重新执行该行校验。
  - 点击取消后放弃当前行修改，恢复原始值。
  - 点击删除后移除当前行数据。
  - 支持勾选多行后批量删除待导入明细。

- 异常与边界：
  - 行编辑时存在必填、枚举、格式、费用、日期等校验错误时阻止保存。
  - 删除明细后需重新统计运单数和疑似重复数量。
  - 所有明细被删除后，不允许确认导入。
  - 明细横向字段较多时支持横向滚动，操作列固定在右侧。

- 反例：
  - 不允许未校验通过的数据展示在运单数页签中。
  - 不允许编辑行未保存时直接确认导入。
  - 不允许删除明细后统计数量不刷新。

---

### REQ-WAYB-047 疑似重复处理

- 功能点：
  - 系统需校验导入数据重复性。
  - 同一运单批次号下，所有导入字段数据完全一致时，标记为疑似重复。
  - 疑似重复数据单独通过页签展示，页签格式为“疑似重复（2）”。
  - 疑似重复页签下支持用户在线编辑、保存、取消或删除重复条目。
  - 用户处理疑似重复数据后，系统需重新计算疑似重复数量。
  - 确认导入前，允许用户保留疑似重复数据，但需保证已通过字段校验。

- 异常与边界：
  - 疑似重复只用于提示和辅助处理，不等同于校验失败。
  - 不同运单批次号之间的数据不参与本次疑似重复判断。
  - 编辑疑似重复数据后如不再完全一致，应从疑似重复页签中移出。

- 反例：
  - 不允许把跨批次相同数据标记为当前批次疑似重复。
  - 不允许疑似重复数据绕过字段校验。
  - 不允许用户删除疑似重复数据后主运单数仍包含已删除记录。

---

### REQ-WAYB-048 确认导入

- 功能点：
  - 点击底部“确认导入”后，系统校验当前待导入明细是否均通过校验。
  - 校验通过后生成正式运单，并将导入批次状态更新为导入完成。
  - 导入类型为运单时，确认导入后生成正式运单并跳转或返回运单列表。
  - 导入类型为结算单时，点击确认导入需弹出确认提示。
  - 结算单确认提示文案为“确认后将同时生成运单、应收应付明细、结算单，是否继续？”。
  - 结算单确认弹窗按钮为“确认”“取消”。
  - 点击确认后同时生成运单、应收应付明细、结算单。
  - 点击取消后关闭弹窗，保留当前导入页面数据。
  - 确认导入成功后提示成功，并刷新导入批次列表或运单列表。

- 异常与边界：
  - 存在未保存编辑行时，不允许确认导入。
  - 存在校验失败数据时，不允许确认导入，并提示用户处理。
  - 导入类型为结算单时，任一结算相关数据生成失败应整体回滚或按后端事务规则保证数据一致。
  - 重复点击确认导入时应防止重复生成运单、应收应付明细或结算单。

- 反例：
  - 不允许结算单导入绕过二次确认弹窗。
  - 不允许导入失败后仍把批次状态改为导入完成。
  - 不允许同一批次重复确认导入生成重复运单。

---

### REQ-WAYB-049 配载与多货物导入

- 功能点：
  - 导入数据存在配载标识号时，系统按同一配载标识号自动生成一个配载单号。
  - 同一配载标识号下可包含多条运单，配载单号需回填到对应正式运单。
  - 若导入运单判断为配载单，导入运单状态为已完成或进行中时，配载单状态同步为已完成或进行中。
  - 导入数据存在同一运单标识号时，系统将相同标识下的货物相关字段写入同一运单的货物明细表。
  - 多货物明细字段包含货物类型、货物名称、数量、计量单位、规格、型号、包装等。
  - 多货物运单只生成一个运单号，多条货物明细关联该运单号。

- 异常与边界：
  - 配载标识号相同但车牌号不一致时，整组配载数据校验失败。
  - 同一运单标识号下车牌号/航班号/船号/班列号不一致时，整组多货物数据校验失败。
  - 配载标识号和同一运单标识号同时存在时，应分别维护配载关系和多货物关系，不得互相覆盖。
  - 多货物运单中任一货物明细校验失败时，该运单不得确认导入。

- 反例：
  - 不允许同一配载标识号生成多个配载单号。
  - 不允许多货物运单拆成多张正式运单。
  - 不允许配载关系和多货物关系混用后无法追溯。

---

### REQ-WAYB-050 导入地址解析

- 功能点：
  - 系统支持对导入运单的发货地址和到货地址进行地址解析。
  - 用户上传或录入地址后，系统调用地图地址解析服务。
  - 地址解析成功后，系统自动获取并保存标准地址、省、市、区县、经度、纬度。
  - 地址解析后的经纬度用于轨迹回放和数据统计。
  - 地址解析失败时，系统保留原地址，并标记该地址不支持轨迹回放。
  - 地址未匹配到地址库时给出警告，不阻止导入。

- 异常与边界：
  - 地图地址解析服务不可用时，应保留原地址并提示解析失败。
  - 地址为空时按模板必填规则处理，不进入解析流程。
  - 非公路运输地址仍需符合对应基础数据类型要求；不匹配时应提示用户修正。
  - 经纬度超过合法范围时视为解析失败。

- 反例：
  - 不允许地址解析失败后清空用户原地址。
  - 不允许无经纬度地址仍展示为可轨迹回放。
  - 不允许把发货地址解析结果写入到货地址字段。

---

### REQ-WAYB-051 新建导入操作

- 功能点：
  - 点击项目选择框后选择项目，系统联动带出客户、客户合同、承运商候选项和发货计划候选项。
  - 点击“添加附件”后选择 Excel 文件，上传后系统解析并校验。
  - 上传成功后展示解析进度或解析结果，并刷新导入数据明细。
  - 点击“下载模板”后下载 Excel 导入模板到本地。
  - 点击明细行“编辑”后，该行可编辑字段进入编辑状态。
  - 点击明细行“保存”后保存该行编辑内容，保存成功后恢复只读状态。
  - 点击明细行“取消”后放弃修改，行数据恢复原值。
  - 点击明细行“删除”后移除该行数据。
  - 点击底部“确认导入”后，校验通过的数据生成正式运单。
  - 点击底部“返回”后返回运单列表或导入批次列表，不执行导入。

- 异常与边界：
  - 上传文件解析中时，不允许重复上传或确认导入。
  - 在线编辑保存失败时保留编辑状态和用户修改内容。
  - 返回前存在未保存数据时，应提示用户确认是否离开。
  - 导入成功后应清理当前导入页面的临时数据，避免再次进入误提交。

- 反例：
  - 不允许上传成功但不展示解析或校验结果。
  - 不允许返回操作触发导入。
  - 不允许保存失败后行数据被错误还原为旧值。

---

## 通用规则

- 运单管理用于承接项目维度下的运输执行单据，归属于“业务管理”主菜单。
- 运单状态包含草稿、待执行、进行中、已完成、已取消。
- 运单号由系统自动生成，且全局唯一，生成后只读不可编辑。
- 运输类型为公路整车、公路配载/零担、铁路运输、水路运输、跨境海运、航空运输等枚举值。
- 新增和编辑页面默认展示精简录入，支持切换完整录入；两种录入方式的同名字段校验规则保持一致。
- 运单货物信息中货物名称、货物类型、数量、计量单位均为必填。
- 收发货信息字段与发货模板的新建运单模板保持一致。
- 非公路运输的收发地址只能从对应基础数据中选择；地址类型不匹配时提示“请选择港口/空港/车站地址”。
- 公路运输默认承运商模式，自运模式下承运商不需要填写。
- 运费合计等于运费加其他运费合计，只读展示；运费由货物数量合计乘以单价自动计算且允许修改。
- 公路类型默认币种为 CNY，铁路、水路、跨境海运、航空类型可选择 CNY 或 USD。
- 列表、详情、导出、导入等用户可见场景应优先展示名称字段，不直接展示用户 ID。
- 状态列和操作按钮列固定在右侧，不随横向滚动条滑动。
- 过程节点顺序固定为接单、到场、装货、发货、在途、到货、卸货、签收、回单，不允许拖拽改序。
- 未配置过程节点或未完成任何节点时，当前过程节点显示“/”。
- 节点完成后应记录完成时间，并把当前过程节点更新为最新完成节点。
- 草稿、待执行、进行中且未发货前的运单可按规则取消，已完成或已取消状态不允许取消。
- 进行中状态支持内部人员手动完成，满足末节点无需确认完成时可自动完成。
- 公路配载按钮仅用于公路配载或零担场景，不允许用于非公路运单。
- 导入批次状态包含草稿、导入完成；仅草稿状态允许编辑和删除，导入完成仅允许查看。
- 批量删除导入批次时仅删除草稿记录，非草稿记录需提示不可删除并跳过。
- 导入运单详情只能展示当前导入批次下的明细，不能跨批次混合展示。
- 新建导入流程为选择项目、上传 Excel 模板、系统自动校验、校验失败自动下载错误报告、校验通过展示运单列表、确认导入、生成正式运单。
- 导入状态为完成时，确认导入后运单状态为已完成；导入状态为进行中时，确认导入后运单状态为进行中。
- 导入类型为结算单时，确认导入需二次确认，并同步生成运单、应收应付明细和结算单。
- 导入模板校验失败时，失败行不得进入待导入数据明细；错误报告需在原模板最后一列追加错误原因。
- 同一导入批次内所有字段完全一致的数据标记为疑似重复，允许用户在线确认或删除。
- 顶部承运商为批量赋值字段，选择后对所有导入运单统一赋值。
- 导入地址解析失败时保留原地址，但不支持轨迹回放。
- 新建、编辑、删除、取消、完成、导入、复制后均需刷新列表。
