---
name: 采购模块三页面开发计划
overview: 基于 PRD 文档和已有代码,完成采购计划单、采购订单、采购计划需求表三个页面的前后端开发与联调,按业务流程依赖关系分阶段推进。
todos:
- id: phase1-backend
content: 阶段一后端:补全 MpPurchase 实体字段、Mapper 双视图查询、引入/审核/genCode 接口
status: completed
- id: phase1-frontend-list
content: 阶段一前端列表:采购计划单 index.vue 明细/单据双视图 + 快捷标签 + 底部汇总
status: completed
- id: phase1-frontend-form
content: 阶段一前端表单:采购计划单 form.vue 表头19字段 + 子表12列 + 引入弹窗(层级展开) + 按钮组
status: completed
- id: phase1-test
content: 阶段一联调:新增→引入→保存→审核完整流程自测
status: completed
- id: phase2-backend
content: 阶段二后端:确认 PoOrder 实体、引入采购计划明细接口、金额计算、到货回写
status: completed
- id: phase2-frontend-list
content: 阶段二前端列表:采购订单 index.vue 明细/单据双视图 + 底部订单/到货数量汇总
status: completed
- id: phase2-frontend-form
content: 阶段二前端表单:采购订单 form.vue 表头17字段 + 子表14列 + 供应商弹窗 + 引入弹窗 + 金额自动计算
status: completed
- id: phase2-test
content: 阶段二联调:新增→选供应商→引入→单价金额→保存→审核完整流程自测
status: completed
- id: phase3-backend
content: 阶段三后端:实现 /mp/plan/need/list 查询接口(物料汇总+库存可用量) + 导出接口
status: completed
- id: phase3-frontend
content: 阶段三前端:新建 need.vue 单文件组件(搜索+4按钮+快捷标签+12列表格+3项底部汇总+负值高亮)
status: completed
- id: phase3-test
content: 阶段三联调:报表查询+筛选+导出自测
status: completed
isProject: false
---
# 采购模块三页面开发计划
## 业务流程全景
```mermaid
flowchart LR
MBOM["物料清单MBOM
供应方式=采购"] --> PurchasePlan["采购计划单
/mp/plan/purchase"]
PurchasePlan -->|"引入计划明细"| PurchaseOrder["采购订单
/po/purchase/order"]
PurchasePlan -->|"数据汇总"| NeedReport["采购计划需求表
/mp/plan/need"]
PurchaseOrder -->|"到货引入"| Checkin["采购到货单"]
Supplier["供应商档案"] -->|"选择供应商"| PurchaseOrder
```
三个页面存在上下游依赖关系:**采购计划单 → 采购订单 → 采购计划需求表**,开发顺序应按此依赖链推进。
---
## 现有代码基础
已有可用的前后端骨架代码(来自 `erp-frontend-vue` 和 `mom-backend`):
- **采购计划单**: 前端 `erp-frontend-vue/src/views/Production/PurchasePlan/` (index.vue + form.vue),后端 `MpPurchaseController.java` + `MpPurchaseMapper.xml`,API `purchasePlan.ts`
- **采购订单**: 前端 `erp-frontend-vue/src/views/Purchasing/Order/` (index.vue + form.vue),后端 `PoOrderController.java` + `PoOrderMapper.xml`,API `purchaseOrder.ts`
- **采购计划需求表**: 前端无独立组件(Production/Reports 下有 DetailReport/TotalReport 可参考),后端接口 `GET /mp/plan/need/list` 已在前端开发规范中定义
开发重点是**对齐 PRD 文档中的字段、交互和业务逻辑**,而非从零开始。
---
## 阶段一:采购计划单(P0 - 核心上游)
> PRD: [mom系统采购计划单-页面开发说明文档.md](prd/mom系统采购计划单-页面开发说明文档.md)
> 现有代码: `erp-frontend-vue/src/views/Production/PurchasePlan/` + `mom-backend/.../mp/`
### 后端任务
- **补全 MpPurchase 实体字段**: 对照 PRD 5.1 节 erp_mp_purchase 表,确认 `MpPurchase.java` 包含 businessType, businessStatus, deptId, deptName, operatorId, operatorName, approverId, approverName, approveDate, needType 等字段(部分已在 `alter_erp_mp_purchase_add_columns.sql` 中添加)
- **补全 Mapper XML 查询**: `MpPurchaseMapper.xml` 需支持明细视图(物料维度 70 行)和单据视图(按 purchaseCode 聚合 31 行)两种查询模式;补充底部汇总 SQL(SUM purchaseQty, orderedQty)
- **引入接口**: 确认 `/erp/mp/purchase/lead` 接口返回生产计划单列表(含展开的物料明细:需求数量/可用量/已采数量/未采数量),对齐 PRD 4.4 节引入弹窗的 8 列 + 展开 7 列
- **审核/反审核**: 确认审核时填充 approverId/approverName/approveDate,反审核时校验无下游采购订单引用
- **编码生成**: 确认 genCode 接口生成 CGJH + 6 位流水号
### 前端任务
- **列表页 index.vue — 双视图切换**: 对照 PRD 3.1/3.2 节,实现明细视图(11 列:序号/跟单编号/订单交期/单据编码/单据状态/物料名称/物料编码/采购数量/已订数量/单据日期/采购说明)和单据视图(9 列 + 操作列 查看/编辑/删除);工具栏按钮明细=[搜索/单据/查询所有/新增/导出],单据=[搜索/明细/查询所有/新增/删除/审核/反审核]
- **列表页 — 快捷筛选标签**: 物料分类标签(成品/原材料/五金件等),来源动态加载
- **列表页 — 底部汇总**: 采购数量 + 已订数量合计
- **表单页 form.vue — 表头**: 对照 PRD 4.2 节 19 个字段(5 列布局),区分新增/编辑/查看模式的可编辑状态
- **表单页 — 物料信息子表**: 12 列(序号/物料编码/物料名称/型号规格/主计量/需求日期/需求数量/可用量/采购数量/已订数量/采购说明/操作)
- **表单页 — 引入弹窗**: 标题="选择生产计划单",搜索=[销售单号/物料编码/物料名称/日期范围],父行 8 列(销售员/销售单号/订单交期/计划单号/物料编码/物料名称/主计量/数量),展开子行 7 列(物料编码/物料名称/需求数量/可用量/已采数量/未采数量/备注)
- **表单页 — 按钮组**: 新增=[保存/取消/审核/反审核/收起/引入],查看=[新增/编辑/审核/反审核/打印/操作/收起 + 上一条/下一条],编辑=[保存/撤回/审核/反审核/操作/收起/引入/新增物料]
### 验收标准
- 明细视图 / 单据视图切换正常,数据行数一致
- 新增 → 引入 → 保存 → 审核 完整流程跑通
- 底部汇总数据正确
---
## 阶段二:采购订单(P0 - 核心执行单据)
> PRD: [mom系统采购订单-页面开发说明文档.md](prd/mom系统采购订单-页面开发说明文档.md)
> 现有代码: `erp-frontend-vue/src/views/Purchasing/Order/` + `mom-backend/.../po/`
### 后端任务
- **确认 PoOrder / PoOrderLine 实体**: 对照 PRD 5.1/5.2 节 erp_po_order(22 字段)和 erp_po_order_line(18 字段),确认 `PoOrder.java` 和 `PoOrderLine.java` 字段完整
- **引入接口(采购计划单明细)**: 确认 `/erp/po/order/lead` 或 `/leadInto` 接口返回采购计划单明细(10 列:计划单号/销售员/跟单编号/订单交期/物料编码/物料名称/需求日期/需求数量/已采数量/未采数量),支持按跟单编号/料品大类/物料编码/物料名称搜索
- **供应商选择**: 确认 `/erp/po/supplier/list` 返回 7 列(序号/供应商名称/电话/业务联系人/手机号/状态/操作),注意 ERP 用 supplier_id/supplier_name vs MOM 用 vendor_id/vendor_name 的字段名差异
- **金额计算**: 确认 line.amount = line.quantity * line.unitPrice,表头 totalQuantity / totalAmount 为明细行合计
- **到货数量回写**: 确认到货单审核后回写 order_line.arrived_quantity
- **Mapper XML**: `PoOrderMapper.xml` 需支持明细视图(83 行物料维度,含供应商列)和单据视图(44 行单据维度);底部汇总 SUM(quantity) 作为订单数量
### 前端任务
- **列表页 index.vue — 双视图**: 明细视图 12 列(序号/跟单编号/计划编号/单据编码/单据状态/供应商/物料名称/物料编码/需求日期/采购数量/到货数量/单据日期),单据视图 9 列 + 操作列
- **表单页 form.vue — 表头**: 对照 PRD 4.2 节 17 字段(含供方选择弹窗、到货日期、采购合同上传、合同号),区分新增/编辑/查看模式
- **表单页 — 物料子表**: 14 列(序号/跟单编号/计划单号/物料编码/物料名称/型号规格/主计量/需求日期/数量/单价/金额/到货数量/采购说明/操作),底部合计行
- **供应商选择弹窗**: 标题="选择供应商",搜索=[供应商名称/业务联系人],按钮含"快速添加",7 列表格 79 行数据
- **引入弹窗(采购计划单明细)**: 标题="采购计划单明细",10 列,按钮=[搜索/采购退货单/全选/确定/取消]
- **按钮组差异**: 新增=[保存/取消/审核/反审核/收起/引入/新增物料],查看=[新增/编辑/审核/反审核/打印/操作/收起],编辑=[保存/撤回/审核/反审核/操作/收起/引入/新增物料],注意编辑页有"撤回"按钮而非"取消"
- **金额自动计算**: 数量 x 单价 = 金额,合计行实时更新
### 验收标准
- 新增 → 选择供应商 → 引入计划明细 → 修改单价 → 金额自动计算 → 保存 → 审核 完整流程
- 供应商弹窗正确加载(注意 supplier vs vendor 字段映射)
- 引入弹窗含全选和退货单切换按钮
---
## 阶段三:采购计划需求表(P1 - 只读报表)
> PRD: [mom系统采购计划需求表-页面开发说明文档.md](prd/mom系统采购计划需求表-页面开发说明文档.md)
> 现有代码: 前端无独立组件(需新建 `need.vue`),后端接口 `GET /mp/plan/need/list` 待实现
### 后端任务
- **实现查询接口**: `GET /erp/mp/plan/need/list`,基于 erp_mp_purchase 按物料维度查询,关联库存计算可用量,返回 12 列(销售订单号/计划单号/物料编码/物料名称/需求数量/可用量/采购数量/已订数量/未订数量/单据日期/采购说明)
- **实现导出接口**: `GET /erp/mp/plan/need/export`,参数同查询接口
- **未订数量计算**: unorderedQty = purchaseQty - orderedQty
- **可用量**: 查询库存可用量(可为负值,表示缺料)
### 前端任务
- **新建 need.vue**: 单文件组件,仅列表页无详情页
- **搜索区**: 6 个搜索项(销售订单号/物料编码/物料名称/开始日期/结束日期/下拉选择)
- **工具栏**: 4 按钮(搜索/查询所有/导出/打印)+ 快捷标签(原材料/零部件/五金)
- **表格**: 12 列,底部汇总 3 项(采购数量/已订数量/未订数量)
- **可用量负值高亮**: 可用量 < 0 时红色显示
- **路由注册**: `/production/purchase-need` 或复用 `/mp/plan/need`
### 验收标准
- 页面加载显示采购需求汇总数据
- 快捷标签筛选正常
- 导出 Excel 正常
- 底部 3 项汇总数据正确
---
## 开发依赖与顺序
```mermaid
gantt
title 采购模块开发甘特图
dateFormat YYYY-MM-DD
section 阶段一_采购计划单
后端补全字段与接口 :a1, 2026-02-08, 2d
前端列表页双视图 :a2, after a1, 2d
前端表单页含引入弹窗 :a3, after a2, 3d
联调与自测 :a4, after a3, 1d
section 阶段二_采购订单
后端引入与金额逻辑 :b1, after a1, 2d
前端列表页双视图 :b2, after b1, 2d
前端表单页含供应商弹窗 :b3, after b2, 3d
联调与自测 :b4, after b3, 1d
section 阶段三_需求报表
后端查询汇总接口 :c1, after a4, 1d
前端need_vue组件 :c2, after c1, 1d
联调与自测 :c3, after c2, 1d
```
---
## 关键技术注意事项
- **供应商字段映射**: ERP 用 `supplier_id/supplier_name/supplier_code`,MOM 用 `vendor_id/vendor_name/vendor_code`(表名也不同:erp_po_supplier vs md_vendor),接口调用和数据同步时需做字段转换
- **双视图模式**: 三个页面中采购计划单和采购订单都有明细/单据双视图,通过 `viewMode` 状态变量切换,共享搜索条件的公共字段
- **引入弹窗嵌套表格**: 采购计划单的引入弹窗需支持父行展开子行(可用量/未采数量等),采购订单的引入弹窗为平铺 10 列
- **金额计算**: 仅采购订单有单价/金额字段,采购计划单和需求表不涉及价格
- **状态流转**: 采购计划单和采购订单共用 DRAFT→APPROVED 流转,反审核需校验下游引用