# 采购订单 - 页面设计开发说明文档 > 版本: 2.3.0 > 创建日期: 2026-02-07 > 更新日期: 2026-02-13 > 来源系统: 升阳云ERP 演示系统 > 来源页面: `https://demo.rsun.vip/po/purchase/order/plan?needType=0&workType=&fmConfig=010301,020301` > 所属模块: 采购管理 > 采购订单 > 前端路由: `/po/purchase/order/plan` > **采集脚本**: `python3 scripts/crawl_purchase_order.py`(列表+按钮采集);`python3 scripts/crawl_po_form_deep.py`(表单深度采集);共 19 张截图 > **关联文档**: [erp数据库设计-数据字典](db/erp数据库设计-数据字典.md);[采购管理.md](采购管理.md);[采购管理-前端开发规范.md](采购管理-前端开发规范.md);[mom系统采购计划单-页面开发说明文档](mom系统采购计划单-页面开发说明文档.md) --- ## 目录 0. [业务流程总览](#0-业务流程总览) 1. [页面概述](#1-页面概述) 2. [页面结构](#2-页面结构) 3. [列表页设计](#3-列表页设计) 4. [新增/编辑页设计](#4-新增编辑页设计) - 4.3.1 [手工(手动)新增物料](#431-手工新增物料截图确认) 5. [数据字段定义](#5-数据字段定义) 6. [按钮操作说明](#6-按钮操作说明) 7. [页面交互规则](#7-页面交互规则) 8. [接口调用说明](#8-接口调用说明) 9. [状态流转](#9-状态流转) 10. [业务规则](#10-业务规则) 11. [前端组件设计](#11-前端组件设计) 12. [数据模型](#12-数据模型) --- ## 0. 业务流程总览 ### 0.1 采购订单在 ERP 中的定位 采购订单是**采购计划→采购执行→到货入库**链条中的核心执行单据,承接采购计划单的物料需求,向供应商下达采购指令,下游驱动到货、入库、发票及退货。 ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 销售订单 │────►│ 生产计划单 │────►│ 采购计划单 │────►│ ★ 采购订单 │ │ │ │ + BOM运算 │ │ (物料需求) │ │ (执行采购) │ └──────────────┘ └──────────────┘ └──────────────┘ └──────┬───────┘ │ ┌───────────────────────────┼───────────────────────┐ ▼ ▼ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ 采购到货单 │ │ 采购发票 │ │ 采购退货单 │ │ (到货登记) │ │ (财务核算) │ │ (退货出库) │ └──────┬───────┘ └──────────────┘ └──────────────┘ │ ▼ ┌──────────────┐ │ 采购入库单 │ │ (库存增加) │ └──────────────┘ ``` ### 0.2 端到端业务流程 ``` 采购计划单(已审核) │ 引入(采购计划单明细) ▼ ┌─────────────────┐ 选择供应商 ┌─────────────────┐ │ ★ 采购订单 │ ◄───────────────── │ 原料供应商档案 │ │ - 表头+供应商 │ │ │ │ - 物料明细子表 │ └─────────────────┘ │ - 数量/单价/金额│ └────────┬────────┘ │ 保存 → 审核 ▼ ┌─────────────────┐ 引入采购订单 ┌─────────────────┐ │ 采购到货单 │ ◄───────────────── │ 采购订单(已审核) │ │ - 到货数量 │ └─────────────────┘ └────────┬────────┘ │ 到货 → 入库 ▼ ┌─────────────────┐ │ 采购入库单 │ ──► 库存增加 └─────────────────┘ ``` ### 0.3 采购订单内部业务流程(Playwright 实际验证 ✅) | 阶段 | 操作 | 触发条件 | 结果 | 验证 | |------|------|----------|------|------| | 1. 新建 | 点击「新增」 | 始终可用 | 打开新增页,编码自动生成,状态=开立,按钮=[保存/取消/审核/反审核/收起/引入/新增物料] | ✅ | | 2. 选择供应商 | 点击「选择」或「供方」旁按钮 | 新增/编辑页 | 打开供应商选择弹窗 | 截图确认 | | 3. 引入 | 点击「引入」→ 弹窗「采购计划单明细」→ 勾选 → 确定 | 新增/编辑状态 | 物料明细子表填充:跟单编号、计划单号、物料、数量、需求日期 | ✅ | | 4. 新增物料 | 点击「新增物料」 | 新增/编辑状态 | 子表末尾新增空行;可通过「选择物料」弹窗选料并填数量/单价,详见 [4.3.1](#431-手工新增物料截图确认) | ✅ | | 5. 保存 | 点击「保存」 | 至少 1 条物料明细 | 数据持久化 | - | | 6. 审核 | 点击「审核」或批量审核 | 开立状态,已保存 | 状态→审核,记录审核员/日期;**审核后可生成到货单** | - | | 7. 反审核 | 点击「反审核」 | 审核状态,无下游引用 | 状态→开立 | - | | 8. 撤回 | 编辑页点击「撤回」 | 编辑状态 | 撤回未保存修改 | ✅ 按钮确认 | | 9. 打印 | 查看页点击「打印」 | 查看页 | 打印预览 | ✅ 按钮确认 | | 10. 删除 | 操作列「删除」或批量删除 | 开立/退回状态 | 逻辑删除 | ✅ | ### 0.4 上下游单据关系 | 上游单据 | 关联字段 | 说明 | |----------|----------|------| | 采购计划单 | plan_code, plan_line_id | 引入弹窗「采购计划单明细」| | 销售订单 | track_code (跟单编号) | 通过采购计划间接关联 | | 供应商 | supplier_id, supplier_name | 选择供应商弹窗 | | 下游单据 | 关联字段 | 说明 | |----------|----------|------| | 采购到货单 | po_order_code, order_id | 到货单引入采购订单 | | 采购发票 | order_code | 发票关联采购订单 | | 采购退货单 | order_code | 退货关联采购订单 | | 采购入库单 | - | 通过到货单间接关联 | ### 0.5 关键数量与金额逻辑 | 字段 | 含义 | 计算/来源 | |------|------|-----------| | 数量 (quantity) | 采购数量 | 引入时从计划带入,可手动修改 | | 单价 (unit_price) | 采购单价 | 手工输入或从市场价格表带入 | | 金额 (amount) | 行金额 | 数量 × 单价,自动计算 | | 到货数量 (arrived_quantity) | 已到货数量 | 从到货单回写,只读 | | 总数量 (total_quantity) | 订单总数量 | 明细行数量合计 | | 总金额 (total_amount) | 订单总金额 | 明细行金额合计 | --- ## 1. 页面概述 ### 1.1 功能说明 采购订单页面用于管理企业的采购订单。采购订单是向供应商正式下达采购指令的核心单据,支持从采购计划引入物料需求或手工新增物料行,关联供应商后形成完整的采购订单。审核后作为到货、入库、发票的上游依据。 ### 1.2 业务场景 - **引入采购计划**: 从已审核的采购计划单引入物料明细(跟单编号、计划单号、物料、需求数量、需求日期等) - **手工新增物料**: 通过「+ 新增物料」按钮在子表末尾增加空行,再通过「选择物料」弹窗选择物料并填写数量、单价等(详见 [4.3.1 手工新增物料](#431-手工新增物料)) - **选择供应商**: 通过供应商选择弹窗关联供应商 - **价格管理**: 录入采购单价,自动计算金额(数量 × 单价) - **审核流程**: 采购订单审核后不可编辑,可反审核 - **到货跟踪**: 跟踪每个物料的到货数量,订单数量 vs 到货数量 ### 1.3 URL路由参数 | 参数名 | 类型 | 说明 | |--------|------|------| | needType | integer | 0=订单用料(默认),1=备库用料 | | workType | string | 工作类型 | | fmConfig | string | 表单配置编码,如 010301,020301 | ### 1.4 页面截图参考(Playwright V1 自动采集) | 截图文件 | 说明 | 来源 | |----------|------|------| | `screenshot/采购订单-明细视图-列表.png` | 明细视图列表,12列/83行 | ✅ V1 采集 | | `screenshot/采购订单-单据视图-列表.png` | 单据视图列表,9列/44行,操作列=查看/编辑/删除 | ✅ V1 采集 | | `screenshot/采购订单-导出确认弹窗.png` | 导出按钮弹出确认框 | ✅ V1 采集 | | `screenshot/采购订单-新增页-初始化.png` | 新增页空白表单 | ✅ V1 采集 | | `screenshot/采购订单-新增页-表头详情.png` | **新增页表头:单据编码/业务类型/操作员/供方/备注 + 14列子表** | ✅ V2 深度采集 | | `screenshot/采购订单-引入弹窗-采购计划单明细.png` | 引入弹窗:10列,搜索4项,11行计划明细 | ✅ V1 采集 | | `screenshot/采购订单-引入弹窗-详情.png` | **引入弹窗详情:首行数据可见** | ✅ V2 深度采集 | | `screenshot/采购订单-选择供应商弹窗.png` | **选择供应商弹窗:7列/79行/搜索+快速添加** | ✅ V2 深度采集 | | `screenshot/采购订单-新增页-新增物料后.png` | 新增物料后子表增加空行 | ✅ V1 采集 | | `screenshot/采购订单-新增页-新增物料行.png` | **新增物料行(含合计行)** | ✅ V2 深度采集 | | `screenshot/采购订单-新增页-可新增物料.png` | **手工新增物料:物料信息表含「引入」「+ 新增物料」;已填行与空行(跟单/计划单号「手工单据」或「添加物料」);物料编码列「选择」打开物料选择** | ✅ 补充 | | `screenshot/采购订单-新增页-点击添加物料.png` | **选择物料弹窗:分类树、物料编码/物料名称搜索、查询所有/连选;物料列表「选择」「查看」;背后可见「+ 新增物料」** | ✅ 补充 | | `screenshot/采购订单-新增页-表头收起.png` | 表头折叠效果 | ✅ V1 采集 | | `screenshot/采购订单-查看页.png` | 查看页(只读),7个按钮 | ✅ V1 采集 | | `screenshot/采购订单-查看页-表头详情.png` | **查看页:CGDD000047,2行物料,含单价/金额/合计行** | ✅ V2 深度采集 | | `screenshot/采购订单-查看页-上一条.png` | **上一条按钮:切换到相邻记录** | ✅ V2 深度采集 | | `screenshot/采购订单-查看页转编辑.png` | **查看→编辑:按钮变=保存/撤回/审核/反审核/操作/收起/引入/新增物料** | ✅ V2 深度采集 | | `screenshot/采购订单-编辑页.png` | 编辑页,8个按钮含撤回 | ✅ V1 采集 | --- ## 2. 页面结构 ### 2.1 整体布局 ``` ┌─────────────────────────────────────────────────────────────────┐ │ 顶部导航栏 (64px) │ ├────────┬────────────────────────────────────────────────────────┤ │ 左侧 │ 面包屑: 首页 / 采购管理 / 采购订单 │ │ 菜单 │ ┌────────────────────────────────────────────────┐ │ │ (200px)│ │ Tab标签: ● 采购订单 │ │ │ │ ├────────────────────────────────────────────────┤ │ │ 采购管 │ │ 查询区域 (搜索条件) │ │ │ 理 │ ├────────────────────────────────────────────────┤ │ │ ├原料 │ │ 工具栏 (操作按钮) + 料品分类快捷标签 │ │ │ 供应 │ ├────────────────────────────────────────────────┤ │ │ 商 │ │ 数据表格 │ │ │ ├采购 │ ├────────────────────────────────────────────────┤ │ │ 订单★│ │ 底部统计 (订单数量/到货数量汇总) + 分页组件 │ │ │ ├到货 │ └────────────────────────────────────────────────┘ │ │ 单 │ │ ├────────┴────────────────────────────────────────────────────────┤ ``` ### 2.2 页面模式 | 模式 | 说明 | 入口 | |------|------|------| | 列表页 - 明细视图 | **默认视图**,以物料维度展示,含跟单编号/供应商/物料/数量/单价/到货 | 菜单点击「采购订单」 | | 列表页 - 单据视图 | 以单据维度展示,含批量操作 | 明细视图点击「单据」 | | 新增页 | 新建采购订单 | 列表页点击「新增」 | | 编辑页 | 修改采购订单(仅开立/退回状态) | 单据视图「编辑」 | | 查看页 | 只读查看详情 | 单据视图「查看」 | ### 2.3 列表页双视图对比(Playwright 采集数据) | 对比项 | 明细视图(默认) | 单据视图 | |--------|-----------------|---------| | 切换按钮 | 「单据」 | 「明细」 | | 复选框列 | 无 | 有 | | 序号列 | 有 | 无 | | 搜索条件 | 跟单编号、单据编码、供应商、物料编码、物料名称、日期范围 | 单据编码、单据状态、业务状态、日期范围 | | 工具栏按钮 | 搜索、单据、查询所有、新增、导出 | 搜索、明细、查询所有、新增、删除、审核、反审核 | | 数据列 | 序号/跟单编号/计划编号/单据编码/单据状态/供应商/物料名称/物料编码/需求日期/采购数量/到货数量/单据日期 | 单据编码/单据日期/单据状态/业务类型/采购部门/采购人员/业务状态/审核日期/操作 | | 操作列 | 无 | 查看、编辑、删除 | | 数据行数 | 83行(物料维度) | 44行(单据维度) | | 底部统计 | 订单数量:4,543,466 到货数量:汇总 | 订单数量汇总 | --- ## 3. 列表页设计 ### 3.1 明细视图(默认视图) > 截图: `screenshot/采购订单-明细视图-列表.png` #### 3.1.1 搜索条件区域 | 序号 | 字段名 | 标签 | 组件类型 | 宽度 | 说明 | |------|--------|------|----------|------|------| | 1 | trackCode | 跟单编号 | el-input | 140px | 模糊搜索 | | 2 | orderCode | 单据编码 | el-input | 140px | 模糊搜索 | | 3 | supplierName | 供应商 | el-input | 140px | 模糊搜索 | | 4 | itemCode | 物料编码 | el-input | 140px | 模糊搜索 | | 5 | itemName | 物料名称 | el-input | 140px | 模糊搜索 | | 6 | startDate | 开始日期 | el-date-picker | 140px | 日期范围起 | | 7 | endDate | 结束日期 | el-date-picker | 140px | 日期范围止 | #### 3.1.2 工具栏按钮(✅ Playwright 采集确认) | 序号 | 按钮名称 | 类型 | 权限标识 | 说明 | |------|----------|------|----------|------| | 1 | 搜索 | primary | po:order:list | 按搜索条件查询 | | 2 | 单据 | primary | po:order:list | 切换到单据视图 | | 3 | 查询所有 | default | po:order:list | 重置搜索条件并查询所有 | | 4 | 新增 | success | po:order:add | 打开新增采购订单页面 | | 5 | 导出 | default | po:order:export | 导出到Excel | #### 3.1.3 数据表格列定义(✅ 采集确认 12 列) | 序号 | 列标题 | 字段名 | 宽度 | 对齐 | 说明 | |------|--------|--------|------|------|------| | 1 | 序号 | - | 60px | center | 自动编号 | | 2 | 跟单编号 | trackCode | 140px | left | 销售订单号,蓝色链接 | | 3 | 计划编号 | planCode | 140px | left | 采购计划编码 | | 4 | 单据编码 | orderCode | 140px | left | 采购订单编码,蓝色链接可点击 | | 5 | 单据状态 | status | 80px | center | 状态标签(开立/审核/关闭) | | 6 | 供应商 | supplierName | 200px | left | 供应商名称 | | 7 | 物料名称 | itemName | 200px | left | 物料名称 | | 8 | 物料编码 | itemCode | 120px | left | 物料编码 | | 9 | 需求日期 | needDate | 100px | center | 需求到货日期 | | 10 | 采购数量 | quantity | 100px | right | 采购数量 | | 11 | 到货数量 | arrivedQuantity | 100px | right | 已到货数量 | | 12 | 单据日期 | orderDate | 100px | center | 订单创建日期 | #### 3.1.4 底部统计 | 组件 | 说明 | |------|------| | 订单数量 | 当前查询结果采购数量合计(如 4,543,466) | | 到货数量 | 当前查询结果已到货数量合计 | ### 3.2 单据视图 > 截图: `screenshot/采购订单-单据视图-列表.png` #### 3.2.1 搜索条件区域 | 序号 | 字段名 | 标签 | 组件类型 | 说明 | |------|--------|------|----------|------| | 1 | orderCode | 单据编码 | el-input | 模糊搜索 | | 2 | status | 单据状态 | el-select | 开立/审核/关闭 | | 3 | businessStatus | 业务状态 | el-select | 正常/完成/暂停/取消 | | 4 | startDate | 开始日期 | el-date-picker | 日期范围起 | | 5 | endDate | 结束日期 | el-date-picker | 日期范围止 | #### 3.2.2 工具栏按钮(✅ 采集确认 7 个) | 序号 | 按钮名称 | 类型 | 权限标识 | 说明 | |------|----------|------|----------|------| | 1 | 搜索 | primary | po:order:list | 按条件搜索 | | 2 | 明细 | primary | po:order:list | 切换到明细视图 | | 3 | 查询所有 | default | po:order:list | 重置并查询 | | 4 | 新增 | success | po:order:add | 新增采购订单 | | 5 | 删除 | danger | po:order:remove | 批量删除(需勾选) | | 6 | 审核 | primary | po:order:approve | 批量审核(需勾选) | | 7 | 反审核 | default | po:order:unapprove | 批量反审核(需勾选) | #### 3.2.3 数据表格列定义(✅ 采集确认 9 列) | 序号 | 列标题 | 字段名 | 宽度 | 说明 | |------|--------|--------|------|------| | 0 | (复选框) | - | 55px | 批量操作 | | 1 | 单据编码 | orderCode | 140px | 可点击查看详情 | | 2 | 单据日期 | orderDate | 120px | 默认降序 | | 3 | 单据状态 | status | 80px | 颜色标签 | | 4 | 业务类型 | businessType | 100px | 原材料/零部件等 | | 5 | 采购部门 | deptName | 100px | | | 6 | 采购人员 | userName | 100px | | | 7 | 业务状态 | businessStatus | 80px | 正常/完成 | | 8 | 审核日期 | approveDate | 120px | | | 9 | 操作 | - | 160px | 查看/编辑/删除 | #### 3.2.4 操作列按钮(✅ 采集确认) | 按钮 | 颜色 | 显示条件 | 说明 | |------|------|----------|------| | 查看 | success | 所有状态 | 打开查看页(只读) | | 编辑 | primary | 开立/退回 | 打开编辑页 | | 删除 | danger | 开立/退回 | 二次确认后删除 | ### 3.3 分页组件 | 属性 | 值 | |------|------| | 默认每页条数 | 100 | | 可选 | 100, 200, 500, 1000 | | 布局 | total, sizes, prev, pager, next, jumper | --- ## 4. 新增/编辑页设计 ### 4.1 页面布局 > 截图: `screenshot/采购订单-新增页-初始化.png` ``` ┌──────────────────────────────────────────────────────────────┐ │ 采购订单 [保存][取消][审核][反审核][收起] │ ├──────────────────────────────────────────────────────────────┤ │ 表头表单区 (可折叠) │ │ ┌──────────┬──────────┬──────────┬──────────┐ │ │ │ 单据编码 │ 业务类型 │ 操作员 │ 供方[选择]│ │ │ │ 单据日期 │ 单据类型 │ 采购部门 │ 到货日期 │ │ │ │ 单据状态 │ 采购人员 │ 审核员 │ 采购合同 │ │ │ │ 业务状态 │ 用料需求 │ 审核日期 │ 合同号 │ │ │ │ │ │ │ 备注信息 │ │ │ └──────────┴──────────┴──────────┴──────────┘ │ ├──────────────────────────────────────────────────────────────┤ │ 物料信息 [引入] [新增物料] │ │ ┌──┬────┬────┬────┬────┬────┬──┬────┬──┬──┬──┬────┬────┬──┐ │ │ │序│跟单│计划│物料│物料│型号│主│需求│数│单│金│到货│采购│操│ │ │ │号│编号│单号│编码│名称│规格│计│日期│量│价│额│数量│说明│作│ │ │ ├──┼────┼────┼────┼────┼────┼──┼────┼──┼──┼──┼────┼────┼──┤ │ │ │ │ │ │ │ │ │量│ │ │ │ │ │ │删│ │ │ ├──┴────┴────┴────┴────┴────┴──┴────┴──┴──┴──┴────┴────┴──┤ │ │ │ 合计 0 0 0.00 │ │ │ └────────────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ``` ### 4.2 表头表单字段(✅ V2 截图确认布局) > 截图: `screenshot/采购订单-新增页-表头详情.png`(新增);`screenshot/采购订单-查看页-表头详情.png`(查看) 表头采用 5 列栅格布局(第1~4列为字段组,第5列含供方/到货/合同/备注),共 4 行。 | 序号 | 字段名 | 标签 | 组件类型 | 必填 | 默认值 | 新增可编辑 | 查看只读 | 说明 | |------|--------|------|----------|------|--------|------------|----------|------| | 1 | orderCode | 单据编码 | el-input | 是 | 自动生成 | 否(只读) | 是 | 格式: CGDD000XXX | | 2 | businessType | 业务类型 | el-select | 是 | 原材料 | 是 | 是 | 原材料/零部件/装配件/成品/五金件/包装物 | | 3 | operatorName | 操作员 | el-input | - | 当前用户 | 否(只读) | 是 | 如 admin, njrsun | | 4 | supplierName | 供方 | el-input + [选择] | 否 | - | 是(弹窗) | 是 | 点击「选择」打开供应商弹窗 | | 5 | remark | 备注信息 | el-input(textarea) | 否 | - | 是 | 是 | 多行文本 | | 6 | orderDate | 单据日期 | el-date-picker | 是 | 当天 | 是 | 是 | 如 2026-02-07 | | 7 | orderType | 单据类型 | el-select | 是 | 采购订单 | 否(只读) | 是 | 固定值 | | 8 | approverName | 审核员 | el-input | - | - | 否(空) | 是 | 审核时自动填充 | | 9 | deliveryDate | 到货日期 | el-date-picker | 否 | - | 是 | 是 | 预计到货日期 | | 10 | status | 单据状态 | el-tag | - | 开立 | 否(标签) | 是 | 开立=橙色, 审核=绿色 | | 11 | deptName | 采购部门 | el-select | 否 | 请选择 | 是 | 是 | 下拉选择部门 | | 12 | approveDate | 审核日期 | el-date-picker | - | - | 否(空) | 是 | 审核时自动填充 | | 13 | contractFile | 采购合同 | upload + [上传] | 否 | - | 是 | 是(修改) | 上传/查看合同附件 | | 14 | businessStatus | 业务状态 | el-select | 否 | 正常 | 是 | 是 | 正常/暂停/取消 | | 15 | userName | 采购人员 | el-select | 否 | 请选择 | 是 | 是 | 需先选择部门 | | 16 | materialNeed | 用料需求 | el-select | 是 | 订单用料 | 否(只读) | 是 | 订单用料/备库用料 | | 17 | contractNo | 合同号 | el-input | 否 | - | 是 | 是 | 合同编号 | **表头布局示意(基于截图):** ``` 行1: 单据编码[只读] | 业务类型[下拉] | 操作员[只读] | 供方[选择弹窗] | 备注信息[文本域] 行2: 单据日期[日期] | 单据类型[只读] | 审核员[只读] | 到货日期[日期] | 行3: 单据状态[标签] | 采购部门[下拉] | 审核日期[只读] | 采购合同[上传] | 行4: 业务状态[下拉] | 采购人员[下拉] | 用料需求[只读] | 合同号[输入] | ``` **查看页 vs 编辑页 vs 新增页差异:** | 差异项 | 新增页 | 编辑页 | 查看页 | |--------|--------|--------|--------| | 单据编码 | 空(保存后生成) | 已生成(只读) | 已生成(只读) | | 表头字段 | 部分可编辑 | 部分可编辑 | 全部只读 | | 顶部按钮 | 保存/取消/审核/反审核/收起 | 保存/撤回/审核/反审核/操作/收起 | 新增/编辑/审核/反审核/打印/操作/收起 | | 子表区域按钮 | 引入/新增物料 | 引入/新增物料 | 无 | | 子表操作列 | 有(删除) | 有(删除) | 无 | | 子表合计行 | 有 | 有 | 有 | | 上一条/下一条 | 无 | 有 | 有 | ### 4.3 物料明细子表(✅ 采集确认 14 列) | 序号 | 列标题 | 字段名 | 宽度 | 组件类型 | 必填 | 说明 | |------|--------|--------|------|----------|------|------| | 1 | 序号 | lineNo | 60px | 自动编号 | - | | | 2 | 跟单编号 | trackCode | 120px | el-input | - | 只读,引入带入 | | 3 | 计划单号 | planCode | 120px | el-input | - | 只读,引入带入 | | 4 | 物料编码 | itemCode | 150px | el-input + 选择 | 是 | 引入或手工选择 | | 5 | 物料名称 | itemName | 200px | el-input | - | 只读 | | 6 | 型号规格 | specification | 150px | el-input | - | 只读 | | 7 | 主计量 | unitName | 80px | el-input | - | 只读 | | 8 | 需求日期 | needDate | 120px | el-date-picker | 否 | 可编辑 | | 9 | 数量 | quantity | 100px | el-input-number | 是 | 采购数量 | | 10 | 单价 | unitPrice | 100px | el-input-number | 否 | 采购单价 | | 11 | 金额 | amount | 100px | el-input | - | 自动=数量×单价 | | 12 | 到货数量 | arrivedQuantity | 100px | el-input | - | 只读,到货回写 | | 13 | 采购说明 | remark | 120px | el-input | 否 | 行级备注 | | 14 | 操作 | - | 80px | el-button | - | 删除 | > **注意**: 子表底部有「合计」行,汇总数量、金额等。 #### 4.3.1 手工新增物料(✅ 截图确认) > 本功能也称"**手动新增物料**",与"手工新增物料"同义。 手工新增物料用于在**未从采购计划引入**的情况下,直接为当前订单添加物料行。与「引入」互补:引入带出计划单号/跟单编号;手工新增行为空行,跟单编号/计划单号显示为「手工单据」或「添加物料」,需通过「选择物料」弹窗选择物料后填写数量、单价等。 **操作流程:** | 步骤 | 操作 | 结果 | |------|------|------| | 1 | 在「物料信息」区域点击 **「+ 新增物料」** | 子表末尾新增一条空行;该行跟单编号/计划单号显示「手工单据」或「添加物料」 | | 2 | 在该行「物料编码」列点击 **「选择」** | 打开「选择物料」弹窗 | | 3 | 在弹窗内按分类/编码/名称筛选,点击某行 **「选择」** | 弹窗关闭,当前行回填:物料编码、物料名称、型号规格、主计量 | | 4 | 在同行填写需求日期、数量、单价等 | 金额自动计算(数量×单价);可填采购说明 | > 截图: `screenshot/采购订单-新增页-可新增物料.png`(可新增物料时的子表与「+ 新增物料」);`screenshot/采购订单-新增页-点击添加物料.png`(选择物料弹窗) **选择物料弹窗(选择物料):** | 属性 | 值 | |------|------| | 弹窗标题 | 选择物料 | | 用途 | 手工新增物料时,从物料主数据中单选一条物料回填到当前行 | **筛选与操作:** | 组件 | 说明 | |------|------| | 分类名称 | 请输入分类名称,配合左侧分类树筛选 | | 分类树 | 可展开节点,如 04-原材料、05-五金件、06-包装物等,选择分类缩小列表范围 | | 物料编码 | 文本输入,模糊搜索 | | 物料名称 | 文本输入,模糊搜索 | | 搜索 / 重置 | 执行搜索或清空条件 | | 查询所有 | 忽略条件,加载全部物料 | | 连选 | 连续选择多行(若支持) | **列表列:** 物料编码、物料名称、型号规格、主计量、操作(**选择**、**查看**)。点击某行「选择」即回填当前订单行并关闭弹窗。 **与引入的区分:** | 来源 | 跟单编号/计划单号 | 数量/需求日期 | |------|-------------------|----------------| | 引入(采购计划单明细) | 由计划带入 | 由计划带入,可改 | | 手工新增物料 | 「手工单据」或「添加物料」 | 用户手工填写 | ### 4.4 选择供应商弹窗(✅ V2 深度采集确认) > 截图: `screenshot/采购订单-选择供应商弹窗.png` | 属性 | 值 | |------|------| | 弹窗标题 | 选择供应商 | | 弹窗宽度 | ~900px | | 选择模式 | 单选(每行操作列「选择」按钮) | | 数据量 | 79 条供应商(实际采集) | **搜索区域:** | 组件 | 说明 | |------|------| | 供应商名称 | 文本输入,模糊搜索 | | 业务联系人 | 文本输入,模糊搜索 | | 搜索按钮 | primary,执行搜索 | | 快速添加 | success,直接新增供应商(无需离开弹窗) | | 查询所有 | 重置搜索并刷新 | **列表表头(✅ 采集确认 7 列):** | 序号 | 列标题 | 字段名 | 说明 | |------|--------|--------|------| | 1 | 序号 | - | 自动编号 | | 2 | 供应商名称 | supplierName | | | 3 | 电话 | phone | | | 4 | 业务联系人 | contactPerson | | | 5 | 手机号 | mobile | | | 6 | 状态 | status | 开关样式(启用/停用) | | 7 | 操作 | - | 「选择」蓝色链接 | **选择交互:** 点击某行操作列「选择」→ 弹窗关闭 → 自动填充表头「供方」字段(供应商ID + 供应商名称) ### 4.5 引入弹窗(采购计划单明细)(✅ 采集确认) > 截图: `screenshot/采购订单-引入弹窗-采购计划单明细.png` | 属性 | 值 | |------|------| | 弹窗标题 | 采购计划单明细 | | 弹窗宽度 | 1000px | | 选择模式 | 多选(勾选 + 全选按钮) | **搜索字段(✅ 采集确认):** | 组件 | placeholder | |------|-------------| | 跟单编号 | 跟单编号 | | 料品大类 | 料品大类 | | 物料编码 | 物料编码 | | 物料名称 | 物料名称 | | 搜索按钮 | primary | **列表表头(✅ 采集确认 10 列):** | 序号 | 列标题 | 字段名 | 说明 | |------|--------|--------|------| | 1 | 计划单号 | planCode | 采购计划编码 | | 2 | 销售员 | salesUserName | | | 3 | 跟单编号 | trackCode | 销售订单号 | | 4 | 订单交期 | deliveryDate | | | 5 | 物料编码 | itemCode | | | 6 | 物料名称 | itemName | | | 7 | 需求日期 | needDate | | | 8 | 需求数量 | demandQty | | | 9 | 已采数量 | purchasedQty | | | 10 | 未采数量 | unpurchasedQty | 需求-已采 | **弹窗按钮(✅ 采集确认):** | 按钮 | 说明 | |------|------| | 搜索 | 按条件筛选 | | 采购退货单 | 切换到退货单引入模式(特殊功能) | | 全选 | 勾选当前页所有行 | | 确定 | 引入勾选的行到物料子表 | | 取消 | 关闭弹窗 | ### 4.6 查看页设计(✅ V2 深度采集确认) > 截图: `screenshot/采购订单-查看页-表头详情.png` **查看页展示了完整的采购订单:** - 表头字段全部只读,值已填充(如 CGDD000047, 2026-02-07, 原材料, 采购订单, njrsun, 供方=汕头市三辰蓝猫产品发展有限公司) - 子表包含物料明细(含数量/单价/金额/到货数量列) - 子表底部「合计」行汇总数量、金额 - 含「上一条」「下一条」导航链接 **查看页按钮(✅ 采集确认 7 个):** | 按钮 | 颜色 | 说明 | |------|------|------| | 新增 | primary | 直接新增新订单(不关闭当前页) | | 编辑 | default | 切换到编辑模式(按钮组变为编辑模式) | | 审核 | success | 审核当前订单 | | 反审核 | warning | 反审核 | | 打印 | default | 打印预览(含打印图标) | | 操作 | default 下拉 | 更多操作(如关闭、复制等) | | 收起 | default | 折叠表头 | **查看→编辑切换(✅ V2 截图确认):** > 截图: `screenshot/采购订单-查看页转编辑.png` 点击「编辑」后,按钮组变为编辑模式=[保存/撤回/审核/反审核/操作/收起/引入/新增物料],表头字段变为可编辑,子表操作列显示「删除」按钮。 **上一条/下一条(✅ V2 截图确认):** > 截图: `screenshot/采购订单-查看页-上一条.png` 子表底部右侧显示「上一条」「下一条」链接,点击可在相邻采购订单间切换查看。 ### 4.7 编辑页设计(✅ 采集确认) > 截图: `screenshot/采购订单-编辑页.png`;`screenshot/采购订单-查看页转编辑.png` **编辑页按钮(✅ 采集确认 8 个):** | 按钮 | 颜色 | 说明 | |------|------|------| | 保存 | primary | 保存修改(表头+子表全量提交) | | 撤回 | default | 撤回未保存修改,恢复上次保存状态 | | 审核 | success | 审核当前订单 | | 反审核 | warning | 反审核(需无下游引用) | | 操作 | default 下拉 | 更多操作 | | 收起 | default | 折叠表头 | | 引入 | warning | 打开「采购计划单明细」引入弹窗 | | 新增物料 | primary | 子表末尾新增空行 | **子表行操作(✅ 编辑截图确认):** | 按钮 | 说明 | |------|------| | 删除 | 红色文字,删除当前行 | > **注意**: 查看页子表无操作列,编辑页子表有操作列(含删除按钮)。 --- ## 5. 数据字段定义 ### 5.1 采购订单表头(erp_po_order) > API路径: `/po/order` | 字段名 | 数据库字段 | 类型 | 必填 | 默认值 | 说明 | |--------|-----------|------|------|--------|------| | 订单ID | order_id | bigint | 是 | AUTO | 主键 | | 租户ID | tenant_id | varchar(20) | 是 | - | 多租户 | | 订单编码 | order_code | varchar(32) | 是 | 自动 | 格式: CGDD + 6位 | | 订单日期 | order_date | date | 是 | 当天 | | | 单据状态 | status | varchar(20) | 是 | DRAFT | 开立/审核/关闭 | | 业务状态 | business_status | varchar(20) | 否 | NORMAL | 正常/完成/暂停/取消 | | 业务类型 | business_type | varchar(20) | 否 | - | 原材料/零部件等 | | 单据类型 | order_type | varchar(20) | 否 | - | 采购订单 | | 用料需求 | material_need | varchar(20) | 否 | - | 订单用料/备库用料 | | 供应商ID | supplier_id | bigint | 否 | - | 外键 | | 供应商编码 | supplier_code | varchar(32) | 否 | - | | | 供应商名称 | supplier_name | varchar(100) | 否 | - | | | 采购部门ID | dept_id | bigint | 否 | - | | | 采购部门 | dept_name | varchar(50) | 否 | - | | | 采购人员ID | user_id | bigint | 否 | - | | | 采购人员 | user_name | varchar(50) | 否 | - | | | 到货日期 | delivery_date | date | 否 | - | | | 合同号 | contract_no | varchar(50) | 否 | - | | | 合同附件 | contract_file | varchar(500) | 否 | - | | | 总数量 | total_quantity | decimal(18,4) | 否 | 0 | | | 总金额 | total_amount | decimal(18,2) | 否 | 0 | | | 已到货数量 | arrived_quantity | decimal(18,4) | 否 | 0 | | | 备注 | remark | varchar(500) | 否 | - | | ### 5.2 采购订单明细(erp_po_order_line) | 字段名 | 数据库字段 | 类型 | 必填 | 说明 | |--------|-----------|------|------|------| | 明细ID | line_id | bigint | 是 | 主键 | | 订单ID | order_id | bigint | 是 | 外键 | | 订单编码 | order_code | varchar(32) | 是 | 冗余 | | 行号 | line_no | int | 是 | | | 跟单编号 | track_code | varchar(32) | 否 | 销售订单号 | | 计划单号 | plan_code | varchar(32) | 否 | 采购计划编码 | | 计划明细ID | plan_line_id | bigint | 否 | 关联采购计划行 | | 物料ID | item_id | bigint | 是 | | | 物料编码 | item_code | varchar(32) | 是 | | | 物料名称 | item_name | varchar(100) | 是 | | | 型号规格 | specification | varchar(200) | 否 | | | 计量单位 | unit_name | varchar(20) | 否 | | | 需求日期 | need_date | date | 否 | | | 采购数量 | quantity | decimal(18,4) | 是 | | | 采购单价 | unit_price | decimal(18,4) | 否 | | | 金额 | amount | decimal(18,2) | 否 | 数量×单价 | | 已到货数量 | arrived_quantity | decimal(18,4) | 否 | | | 采购说明 | remark | varchar(200) | 否 | | --- ## 6. 按钮操作说明(✅ Playwright 采集验证 13 个按钮) ### 6.1 明细视图工具栏 | 按钮 | 操作 | 结果 | 验证 | |------|------|------|------| | 搜索 | pageNum=1 带条件查询 | 列表刷新+底部汇总更新 | ✅ | | 单据 | 切换到单据视图 | 9列+44行+操作列 | ✅ | | 查询所有 | 重置搜索+查询 | 83行结果 | ✅ | | 新增 | 跳转新增页 | 空白表单,7个按钮 | ✅ | | 导出 | 弹出确认框 → 下载Excel | 截图确认 | ✅ | ### 6.2 单据视图工具栏 | 按钮 | 操作 | 前置 | 结果 | 验证 | |------|------|------|------|------| | 明细 | 切换回明细视图 | - | 12列明细列表 | ✅ | | 删除 | 批量删除 | 勾选+开立/退回 | 确认后逻辑删除 | ✅ 按钮存在 | | 审核 | 批量审核 | 勾选+开立 | 状态→审核 | ✅ 按钮存在 | | 反审核 | 批量反审核 | 勾选+审核+无下游 | 状态→开立 | ✅ 按钮存在 | ### 6.3 新增/编辑页按钮 | 按钮 | 页面 | 操作 | 结果 | 验证 | |------|------|------|------|------| | 保存 | 新增/编辑 | 提交表头+明细 | 持久化 | ✅ 按钮确认 | | 取消 | 新增 | 返回列表 | 确认后回列表 | ✅ | | 撤回 | 编辑 | 撤销未保存修改 | 恢复上次保存状态 | ✅ 采集确认 | | 审核 | 新增/编辑 | 审核当前单据 | 状态→审核 | ✅ | | 反审核 | 查看/编辑 | 反审核 | 状态→开立 | ✅ | | 收起 | 所有 | 折叠表头 | 仅显示子表 | ✅ | | 引入 | 新增/编辑 | 打开「采购计划单明细」弹窗 | 10列表格 | ✅ | | 新增物料 | 新增/编辑 | 子表新增空行 | 子表新增空行(行数+1);选料与完整流程见 [4.3.1](#431-手工新增物料截图确认) | ✅ | | 打印 | 查看 | 打印预览 | 打印对话框 | ✅ | | 操作 | 查看/编辑 | 更多操作下拉 | 扩展功能 | ✅ | ### 6.4 操作列按钮 | 按钮 | 颜色 | 显示条件 | 操作 | 验证 | |------|------|----------|------|------| | 查看 | success | 所有状态 | 打开查看页 | ✅ | | 编辑 | primary | 开立/退回 | 打开编辑页 | ✅ | | 删除 | danger | 开立/退回 | 确认后删除 | ✅ | --- ## 7. 页面交互规则(✅ Playwright 实际验证) | 序号 | 交互场景 | 规则 | 验证 | |------|----------|------|------| | 1 | 页面首次加载 | 明细视图,83行,按日期降序 | ✅ | | 2 | 明细→单据切换 | 表头/按钮/数据全切换,44行单据 | ✅ | | 3 | 单据编码点击 | 跳转查看页 | ✅ | | 4 | 新增→引入 | 弹窗「采购计划单明细」,10列,支持全选 | ✅ | | 5 | 引入确定 | 物料行填充:跟单编号/计划单号/物料/需求日期/数量 | ✅ | | 6 | 新增物料 | 子表末尾追加空行 | ✅ | | 7 | 金额计算 | 数量×单价自动计算金额,合计行实时更新 | 截图确认 | | 8 | 收起/展开 | 折叠/展开表头区域 | ✅ | | 9 | 查看→编辑 | 查看页点击「编辑」切换到编辑模式 | ✅ | | 10 | 编辑页撤回 | 撤回按钮撤销未保存修改 | ✅ 按钮确认 | --- ## 8. 接口调用说明 ### 8.1 接口总览 | 序号 | 功能 | 方法 | 路径 | 说明 | |------|------|------|------|------| | 1 | 查询列表 | GET | /po/order/list | 分页查询 | | 2 | 获取详情 | GET | /po/order | 获取表头+明细 | | 3 | 新增 | POST | /po/order | 创建 | | 4 | 修改 | PUT | /po/order | 更新 | | 5 | 删除 | POST | /po/order/delete | 批量删除 | | 6 | 审核 | POST | /po/order/check | 批量审核 | | 7 | 反审核 | POST | /po/order/antiCheck | 批量反审核 | | 8 | 导出 | GET | /po/order/export | 导出Excel | | 9 | 选择供应商 | GET | /po/supplier/list | 供应商列表 | | 10 | 引入采购计划 | GET | /po/order/lead 或 /po/order/leadInto | 采购计划单明细 | | 11 | 明细查询 | GET | /po/order/linkDetail | 明细视图数据 | | 12 | 获取编码 | GET | /po/order/genCode | 生成编码(推测) | > 接口来源: ERP Swagger API (`/prod-api/v2/api-docs?group=采购模块`) --- ## 9. 状态流转 ### 9.1 单据状态流转图 ``` ┌──────────────┐ │ │ ┌─────────► 开立(DRAFT) ◄──────────┐ │ │ │ │ │ └──────┬───────┘ │ │ │ │ │ [审核操作] [反审核] │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ │ │ │ │ 审核(APPROVED)├───────────┘ │ │ │ │ └──────┬───────┘ │ │ │ [业务完成/关闭] │ │ │ ▼ │ ┌──────────────┐ └──────────┤ │ │ 关闭(CLOSED) │ └──────────────┘ ``` ### 9.2 状态说明 | 状态 | 编码 | 可执行操作 | 说明 | |------|------|-----------|------| | 开立 | DRAFT | 编辑、保存、删除、审核 | 初始状态 | | 审核 | APPROVED | 查看、反审核、生成到货单 | 生效状态 | | 关闭 | CLOSED | 查看 | 业务完结 | --- ## 10. 业务规则 ### 10.1 编码规则 | 项目 | 说明 | |------|------| | 前缀 | CGDD | | 流水号 | 6位,不足补零 | | 示例 | CGDD000041, CGDD000047 | ### 10.2 引入规则 | 规则 | 说明 | |------|------| | 数据来源 | 已审核的采购计划单中未采数量>0 的明细行 | | 引入方式 | 支持勾选多行 + 全选 | | 引入后 | 跟单编号、计划单号、物料信息、需求日期、数量自动填充 | | 特殊 | 引入弹窗含「采购退货单」按钮,可切换到退货引入模式 | ### 10.2.1 手工(手动)新增物料规则 与「引入」互补,手工新增物料用于未从采购计划引入时直接添加物料行。 | 规则 | 说明 | |------|------| | 数据来源 | 无计划单/跟单来源;跟单编号/计划单号显示「手工单据」或「添加物料」 | | 选择物料 | 须通过「选择物料」弹窗从物料主数据中选择,回填物料编码、物料名称、型号规格、主计量 | | 用户填写 | 数量、单价、需求日期、采购说明由用户手工填写 | | 金额计算 | 行金额 = 数量 × 单价,自动计算;合计行实时更新 | | 操作入口 | 物料信息区域「+ 新增物料」按钮,新增/编辑状态下可用 | > 操作流程与选择物料弹窗详见 [4.3.1 手工新增物料](#431-手工新增物料截图确认)。 ### 10.3 金额规则 | 规则 | 说明 | |------|------| | 行金额 | 数量 × 单价,自动计算 | | 合计行 | 子表底部合计行汇总数量、金额 | | 总金额 | 表头 total_amount = 所有行金额之和 | ### 10.4 到货跟踪 | 规则 | 说明 | |------|------| | 到货数量 | 从到货单审核后回写到订单明细 | | 业务状态 | 全部到货后自动变为「完成」 | | 删除限制 | 有到货记录的订单不可删除 | ### 10.5 下游引用限制 | 场景 | 影响 | |------|------| | 有到货记录 | 不可反审核、不可删除 | | 有发票记录 | 不可反审核、不可删除 | | 无引用 | 可反审核、可删除(仅开立/退回) | --- ## 11. 前端组件设计 ### 11.1 文件结构 ``` src/ ├── api/ │ └── po/ │ └── order.js # 采购订单API ├── views/ │ └── po/ │ └── order/ │ ├── index.vue # 列表页(明细+单据双视图) │ ├── add.vue # 新增页 │ ├── edit.vue # 编辑页 │ ├── view.vue # 查看页 │ └── components/ │ ├── DetailViewTable.vue # 明细视图表格 │ ├── DocumentViewTable.vue # 单据视图表格 │ ├── OrderHeaderForm.vue # 表头表单 │ ├── OrderLineTable.vue # 物料明细子表(可编辑) │ ├── SupplierSelectDialog.vue # 选择供应商弹窗 │ └── PlanImportDialog.vue # 引入采购计划单明细弹窗 ``` ### 11.2 路由配置 ```javascript { path: '/po', component: Layout, children: [ { path: 'purchase/order/plan', name: 'PoOrder', component: () => import('@/views/po/order/index'), meta: { title: '采购订单' } }, { path: 'purchase/orderadd0', name: 'PoOrderAdd', component: () => import('@/views/po/order/add'), meta: { title: '新增采购订单' }, hidden: true }, { path: 'purchase/orderedit0/:id', name: 'PoOrderEdit', component: () => import('@/views/po/order/edit'), meta: { title: '编辑采购订单' }, hidden: true }, { path: 'purchase/orderview0/:id', name: 'PoOrderView', component: () => import('@/views/po/order/view'), meta: { title: '查看采购订单' }, hidden: true } ] } ``` --- ## 12. 数据模型 ### 12.1 表关系图(ERP 侧) ``` ┌──────────────────────────┐ ┌──────────────────────────┐ │ erp_po_supplier │ │ erp_mp_purchase │ │ (供应商档案 / ERP) │ │ (采购计划单) │ │ supplier_id (PK) │ └──────────┬───────────────┘ │ supplier_name │ │ plan_code, plan_line_id │ supplier_code │ ▼ └──────────┬───────────────┘ ┌──────────────────────────────────────────────┐ │ supplier_id │ erp_po_order │ ▼ │ (采购订单表头) │ ┌──────────────────┤ order_id (PK) order_code (UK) │ │ │ supplier_id (FK→erp_po_supplier) │ │ │ total_quantity total_amount │ │ └──────────────────────┬───────────────────────┘ │ │ 1:N │ ▼ │ ┌──────────────────────────────────────────────┐ │ │ erp_po_order_line │ │ │ (采购订单明细) │ │ │ line_id (PK) order_id (FK) │ │ │ item_id (FK→erp_md_item) │ │ │ plan_line_id (FK→erp_mp_purchase) │ │ │ quantity unit_price amount │ │ └──────────────────────┬───────────────────────┘ │ │ 被下游引用 │ ┌──────────────────┼──────────────────┐ │ ▼ ▼ ▼ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │ │ erp_po_checkin │ │ erp_po_fapiao │ │ erp_po_reject │ │ │ (采购到货单) │ │ (采购发票) │ │ (采购退货单) │ │ └────────────────┘ └────────────────┘ └────────────────┘ ``` ### 12.2 ERP→MOM 表映射关系 > 数据来源: [erp与mom数据库表映射对照表](db/erp与mom数据库表映射对照表.md) 第 2.4、3.7、5.1~5.4 节 #### 12.2.1 供应商表映射(⚠️ 字段名差异较大) | 项目 | ERP | MOM | 说明 | |------|-----|-----|------| | **表名** | **erp_po_supplier** | **md_vendor** | **表名完全不同** | | 主键 | supplier_id | vendor_id | 名称不同 | | 编码 | supplier_code | vendor_code | 名称不同 | | 名称 | supplier_name | vendor_name | 名称不同 | | 简称 | supplier_nick | vendor_nick | 名称不同 | | 类型 | supplier_type | vendor_type | 名称不同 | | 等级 | supplier_level | vendor_level | 名称不同 | | 英文名 | - | vendor_en | MOM 专用 | | 简介 | - | vendor_des | MOM 专用 | | 评分 | - | vendor_score | MOM 专用 | | Logo | - | vendor_logo | MOM 专用 | | 开票地址 | bank_address | invoice_address | 名称不同 | | 省份 | province | province | 一致 | | 城市 | city | city | 一致 | | 地址 | address | address | 一致 | | 联系人1 | contact1 | contact1 | 一致 | | 联系人1电话 | contact1_tel | contact1_tel | 一致 | | 联系人1邮箱 | - | contact1_email | MOM 专用 | | 银行 | bank_name | bank_name | 一致 | | 账号 | bank_account | bank_account | 一致 | | 税号 | tax_no | tax_no | 一致 | | 供应料品 | supply_items | supply_items | 一致 | | 启用 | enable_flag | enable_flag | 一致 | > **开发注意**: 采购订单中 `supplier_id`/`supplier_name`/`supplier_code` 对应 ERP 的 erp_po_supplier 表。MOM 侧操作供应商时需使用 `vendor_id`/`vendor_name`/`vendor_code`(md_vendor 表),**接口字段名需做转换**。 #### 12.2.2 采购订单表映射 | ERP表名 | MOM表名 | 同步方式 | 说明 | |---------|---------|----------|------| | erp_po_order | **erp_po_order**(MOM 镜像表) | ERP→MOM 1:1 | 审核后同步,主键一致,含 erp_sync_time | | erp_po_order_line | **erp_po_order_line**(MOM 镜像表) | ERP→MOM 1:1 | 明细行镜像 | | erp_po_order | wm_arrival_notice (po_code) | ERP→MOM 业务映射 | 到货通知,order_code→po_code | | erp_po_order_line | wm_arrival_notice_line | ERP→MOM 业务映射 | 到货明细 | #### 12.2.3 采购订单→到货通知 关键字段映射 | ERP字段 (erp_po_order) | MOM字段 (wm_arrival_notice) | 映射方式 | |------------------------|----------------------------|----------| | order_code | po_code | 直接映射 | | **supplier_id** | **vendor_id** | **字段名不同** | | **supplier_code** | **vendor_code** | **字段名不同** | | **supplier_name** | **vendor_name** | **字段名不同** | | delivery_date | arrival_date | 字段名不同 | | status | status | 值转换: DRAFT→PREPARE, APPROVED→CONFIRMED | #### 12.2.4 采购订单明细→到货通知明细 关键字段映射 | ERP字段 (erp_po_order_line) | MOM字段 (wm_arrival_notice_line) | 映射方式 | |-----------------------------|----------------------------------|----------| | item_id | item_id | 直接映射 | | item_code | item_code | 直接映射 | | item_name | item_name | 直接映射 | | specification | specification | 直接映射 | | **unit_name** | **unit_of_measure** | **字段名不同** | | **quantity** | **quantity_arrive** | **字段名不同**,采购数量→到货数量 | | unit_price | - | **MOM 不需要**(不涉及价格) | | amount | - | **MOM 不需要** | | track_code | - | **MOM 不需要**(通过表头 po_code 关联) | ### 12.3 数据同步方向 ``` ERP (erp_po_order/line) ──审核后同步──► MOM (erp_po_order/line 镜像表) │ ├──► MOM (wm_arrival_notice 到货通知) │ po_code = order_code │ vendor_id = supplier_id │ └──► MOM (wm_item_recpt 入库单) po_order_id → order_id po_line_id → line_id ``` - **同步方向**: ERP → MOM(订单数据单向同步) - **同步触发**: 采购订单审核后触发 - **供应商同步**: ERP erp_po_supplier → MOM md_vendor(字段名转换) - **价格/金额**: MOM 不存储(ERP 专有),到货/入库仅关注数量 - **MOM 回写 ERP**: 到货数量、入库数量可反馈回 ERP 更新 arrived_quantity --- ## 附录A: 状态标签颜色映射 ```javascript const statusTagMap = { 'DRAFT': 'info', // 灰色 - 开立 'APPROVED': 'success', // 绿色 - 审核 'CLOSED': '', // 默认 - 关闭 'REJECTED': 'warning' // 橙色 - 退回 } ``` ## 附录B: 权限标识汇总 | 权限标识 | 说明 | 视图 | |----------|------|------| | po:order:list | 列表查询 | 通用 | | po:order:query | 详情查询 | 单据视图 | | po:order:add | 新增 | 通用 | | po:order:edit | 编辑 | 单据视图 | | po:order:remove | 删除 | 单据视图 | | po:order:approve | 审核 | 单据视图 | | po:order:unapprove | 反审核 | 单据视图 | | po:order:export | 导出 | 明细视图 | ## 附录C: Playwright 采集数据摘要 > 采集时间: 2026-02-07 16:27:52,脚本: `crawl_purchase_order.py` | 页面 | 行数 | 按钮 | 表头列 | |------|------|------|--------| | 明细视图 | 83 | 搜索/单据/查询所有/新增/导出 | 序号/跟单编号/计划编号/单据编码/单据状态/供应商/物料名称/物料编码/需求日期/采购数量/到货数量/单据日期 | | 单据视图 | 44 | 搜索/明细/查询所有/新增/删除/审核/反审核 | 单据编码/单据日期/单据状态/业务类型/采购部门/采购人员/业务状态/审核日期/操作 | | 新增页 | 0+合计 | 保存/取消/审核/反审核/收起/引入/新增物料 | 序号/跟单编号/计划单号/物料编码/物料名称/型号规格/主计量/需求日期/数量/单价/金额/到货数量/采购说明/操作 | | 引入弹窗 | - | 搜索/采购退货单/全选/确定/取消 | 计划单号/销售员/跟单编号/订单交期/物料编码/物料名称/需求日期/需求数量/已采数量/未采数量 | | 查看页 | 3 | 新增/编辑/审核/反审核/打印/操作/收起 | 同新增页(无操作列) | | 编辑页 | 3 | 保存/撤回/审核/反审核/操作/收起/引入/新增物料 | 同新增页 | --- ## 修订历史 | 版本 | 日期 | 修订内容 | 修订人 | |------|------|----------|--------| | 1.0.0 | 2026-02-07 | 初始版本:基于 Playwright V1 自动采集(13 个按钮/10 张截图)+ ERP 数据库设计 + 采购管理 PRD 编写完整页面开发说明 | System | | **2.0.0** | **2026-02-07** | **V2 表单深度采集**:新增 7 张截图(新增页表头/查看页表头/查看页上一条/查看转编辑/选择供应商/引入弹窗详情/新增物料行);更新 4.4 供应商弹窗(7列/79行/快速添加);更新 4.6 查看页(按钮详情/上一条下一条/查看→编辑切换);更新 4.7 编辑页(8按钮含撤回/子表行操作);截图总计 17 张 | System | | **2.1.0** | **2026-02-07** | **重写第 12 章数据模型**:基于《erp与mom数据库表映射对照表》补充供应商表 ERP(erp_po_supplier) vs MOM(md_vendor) 完整字段对照(⚠️ 字段名差异较大);补充采购订单→到货通知/入库单的字段映射;补充数据同步方向与价格处理说明 | System | | **2.2.0** | **2026-02-13** | **手工新增物料**:新增 4.3.1 手工新增物料(操作流程、选择物料弹窗、与引入的区分);新增截图引用「采购订单-新增页-可新增物料.png」「采购订单-新增页-点击添加物料.png」;补充选择物料弹窗的筛选与列表说明 | System | | **2.3.0** | **2026-02-13** | **版本更新与手工新增物料补全**:版本更新至 2.3.0;补全新功能说明,重点补全**手动/手工新增物料**在业务流程(0.3)、按钮说明(6.3)、业务规则(10.2.1)中的引用与规则;目录增加 4.3.1 手工(手动)新增物料;4.3.1 增加「手动新增物料」同义说明;截图总数更新为 19 张 | System |