8.7 KiB
8.7 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Purchase Order Pages | Implement the Purchase Order (采购订单) module per the PRD, upgrading the existing skeletal frontend pages and filling backend gaps (detail-view query, import dialog API, supplier integration). |
|
false |
Purchase Order Page Development Plan
Current State
The module has a working backend (CRUD, approve/unapprove, code generation, summary) and skeletal frontend pages. Key existing files:
- Backend: PoOrderController.java, PoOrderMapper.xml, PoOrderLineMapper.xml, PoSupplierController.java
- Frontend: index.vue, form.vue, purchaseOrder.ts, supplier.ts
Gaps to Fill
Backend
- Detail-view query: The PRD detail view is line-level (83 rows for 44 orders). Current
selectPoOrderListreturns order-level rows. Need a new mapper queryselectPoOrderDetailListthat joinserp_po_orderwitherp_po_order_lineand supports filters:trackCode,orderCode,supplierName,itemCode,itemName,beginDate,endDate. - Import dialog API (引入采购计划单明细): Need
GET /erp/po/order/leadInthat querieserp_mp_purchase(status=APPROVED) withpurchaseQty - orderedQty > 0, returning: planCode, salesOrderCode (trackCode), salesUserName, deliveryDate, itemId, itemCode, itemName, specification, unitName, needDate (demandDate), demandQty, orderedQty, unpurchasedQty. Support search by: trackCode, itemCode, itemName. - Date filter params:
selectPoOrderListusesparams.beginOrderDate/params.endOrderDatebut frontend sendsbeginDate/endDate. Need to add support for both or align naming. - Supplier list endpoint: Backend already has
GET /erp/po/supplier/list(at PoSupplierController). Frontend currently calls/mes/md/vendor(MOM vendor table). For PO, should use/erp/po/supplier.
Frontend
**index.vuedetail view data model**: Currently accessesrow.lines?.[0]?.trackCodebut the list API returns flat orders without lines. After backend adds the line-level detail query, update the template to use flat fields directly (row.trackCode,row.itemCode, etc.).**form.vuemajor rework** (the biggest task):
- Status codes: Use
PREPARE/APPROVED/CLOSEDinstead of Chinese labels开立/审核 - Header collapse: Add toggle button and
v-showfor header form (pattern from PurchasePlan/form.vue) - Full 4-row header layout per PRD 4.2: add missing fields (审核员, 审核日期, 业务状态, 采购合同/上传, 用料需求 as read-only)
- Supplier dialog: Switch from
/mes/md/vendorto/erp/po/supplierAPI; add columns for 序号, 电话, 手机号, 状态, 操作(选择); add search by name + contact person + 快速添加 + 查询所有 - Import dialog: Replace hardcoded data with real API call to
GET /erp/po/order/leadIn; add 10-column table per PRD 4.5; add search fields (跟单编号, 料品大类, 物料编码, 物料名称); add 全选 button - Material table summary row: Add
show-summarywith sum of 数量, 金额, 到货数量 - Amount auto-calculation:
amount = quantity * unitPriceon change, updatetotalQuantityandtotalAmounton header before save - Buttons per mode: view=[新增/编辑/审核/反审核/打印/操作/收起], edit=[保存/撤回/审核/反审核/操作/收起/引入/新增物料], add=[保存/取消/审核/反审核/收起/引入/新增物料]
- 上一条/下一条 navigation (view/edit mode)
- 撤回 button: reload saved data from server
- 打印 button:
window.print()or print dialog - Compute totals before save:
totalQuantity = sum(line.quantity),totalAmount = sum(line.amount)
**purchaseOrder.tsAPI additions**: AddgetImportPlanDetails(params),getPoSupplierList(params)functions.
Architecture
flowchart TD
subgraph fe [Frontend]
IndexVue["index.vue\n(list: detail + document views)"]
FormVue["form.vue\n(add/edit/view)"]
ApiTs["purchaseOrder.ts"]
SupplierApi["supplier API"]
end
subgraph be [Backend]
Controller["PoOrderController"]
SupplierCtrl["PoSupplierController"]
OrderSvc["PoOrderService"]
PurchaseSvc["MpPurchaseService"]
OrderMapper["PoOrderMapper.xml"]
LineMapper["PoOrderLineMapper.xml"]
end
subgraph db [Database]
PoOrder["erp_po_order"]
PoLine["erp_po_order_line"]
MpPurchase["erp_mp_purchase"]
PoSupplier["erp_po_supplier"]
end
IndexVue --> ApiTs
FormVue --> ApiTs
FormVue --> SupplierApi
ApiTs --> Controller
SupplierApi --> SupplierCtrl
Controller --> OrderSvc
Controller --> PurchaseSvc
OrderSvc --> OrderMapper
OrderSvc --> LineMapper
OrderMapper --> PoOrder
LineMapper --> PoLine
PurchaseSvc --> MpPurchase
SupplierCtrl --> PoSupplier
Key Implementation Notes
- The
erp_po_order+erp_po_order_lineis a proper 1:N header/line model (unlikeerp_mp_purchasewhich is flat). Backend already handles insert/update with lines in the controller. - Supplier selection dialog in the PRD references
erp_po_supplier(notmd_vendor). The controller at/erp/po/supplieris already implemented. Frontend needs a new API wrapper or reuse existing supplier.ts with path change. - For the import dialog, we query
erp_mp_purchase(approved plans) and map fields to the import dialog's 10 columns. - Pattern reference: PurchasePlan/form.vue for header collapse, import dialog, material table patterns.