--- 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 流转,反审核需校验下游引用