Files
my-mom-system/prd/mom系统采购订单-页面开发说明文档.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

1080 lines
59 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 采购订单 - 页面设计开发说明文档
> 版本: 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` | **查看页CGDD0000472行物料含单价/金额/合计行** | ✅ 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 |