Files
my-mom-system/erp-frontend-vue/src/api/purchaseOrder.ts
panchengyong b11bf5e631 feat: 采购订单自动生成到货通知单功能
在采购订单查看页面新增"生成到货通知单"按钮,已审核的采购订单可一键生成到货通知单,
自动携带供应商信息和未到货物料明细行。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 14:26:56 +08:00

243 lines
7.0 KiB
TypeScript
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.
import request from './request'
export interface PurchaseOrderLine {
lineId: number
orderId: number
orderCode: string
lineNo: number
trackCode?: string
planCode?: string
itemId: number
itemCode: string
itemName: string
specification?: string
unitName?: string
needDate?: string
quantity: number
unitPrice?: number
amount?: number
arrivedQuantity?: number
remark?: string
}
export interface PurchaseOrder {
orderId: number
orderCode: string
orderDate: string
status: string
businessStatus?: string
businessType: string
orderType: string
materialNeed: string
supplierId?: number
supplierCode?: string
supplierName?: string
deptId?: number
deptName?: string
userId?: number
userName?: string
deliveryDate?: string
contractNo?: string
contractFile?: string
totalQuantity?: number
totalAmount?: number
arrivedQuantity?: number
remark?: string
operatorId?: number
operatorName?: string
approverId?: number
approverName?: string
approveDate?: string
lines: PurchaseOrderLine[]
createTime?: string
// Detail-view join fields
trackCode?: string
planCode?: string
itemCode?: string
itemName?: string
needDate?: string
quantity?: number
lineArrivedQuantity?: number
}
/** 供应商采购订单用数据来源md_vendor */
export interface PoSupplier {
supplierId: number
supplierCode?: string
supplierName: string
supplierNick?: string
tel?: string
contact1?: string
contact1Tel?: string
enableFlag?: string
}
/** 引入弹窗行(采购计划明细) */
export interface LeadInRow {
purchaseId: number
purchaseCode: string
salesOrderCode?: string
salesUserName?: string
deliveryDate?: string
itemId: number
itemCode: string
itemName: string
specification?: string
unitName?: string
demandDate?: string
purchaseQty: number
orderedQty: number
unpurchasedQty?: number
}
export interface PurchaseOrderQuery {
trackCode?: string
orderCode?: string
supplierName?: string
itemCode?: string
itemName?: string
beginDate?: string
endDate?: string
status?: string
pageNum?: number
pageSize?: number
}
export interface PurchaseOrderListResponse {
rows: PurchaseOrder[]
total: number
}
// 获取采购订单列表
export function getPurchaseOrderList(params: PurchaseOrderQuery): Promise<PurchaseOrderListResponse> {
return request.get('/erp/po/order/list', { params }).then((res: any) => {
return {
rows: res.rows || [],
total: res.total || 0
}
})
}
// 获取采购订单详情
export function getPurchaseOrderDetail(orderId: number): Promise<PurchaseOrder> {
return request.get(`/erp/po/order/${orderId}`).then((res: any) => {
return res.data
})
}
// 新增采购订单
export function createPurchaseOrder(data: Partial<PurchaseOrder>): Promise<void> {
return request.post('/erp/po/order', data)
}
// 更新采购订单
export function updatePurchaseOrder(data: Partial<PurchaseOrder>): Promise<void> {
return request.put('/erp/po/order', data)
}
// 删除采购订单
export function deletePurchaseOrder(orderIds: string): Promise<void> {
return request.delete(`/erp/po/order/${orderIds}`)
}
// 获取采购订单单据视图列表
export function getPurchaseOrderDocList(params: PurchaseOrderQuery): Promise<PurchaseOrderListResponse> {
return request.get('/erp/po/order/docList', { params }).then((res: any) => ({
rows: res.rows || [],
total: res.total || 0
}))
}
// 获取采购订单汇总
export function getPurchaseOrderSummary(params: PurchaseOrderQuery): Promise<{ totalOrderQty: number; totalArrivedQty: number }> {
return request.get('/erp/po/order/summary', { params }).then((res: any) => res.data || {})
}
// 生成采购订单编码(后端返回的编码在 data 中msg 为「操作成功」)
export function genPurchaseOrderCode(): Promise<string> {
return request.get('/erp/po/order/genCode').then((res: any) => res.data ?? res.msg ?? '')
}
// 审核采购订单
export function approvePurchaseOrder(orderIds: string): Promise<void> {
return request.put(`/erp/po/order/approve/${orderIds}`)
}
// 反审核采购订单
export function unapprovePurchaseOrder(orderIds: string): Promise<void> {
return request.put(`/erp/po/order/unapprove/${orderIds}`)
}
// 导出采购订单
export function exportPurchaseOrder(params: PurchaseOrderQuery): Promise<Blob> {
return request.post('/erp/po/order/export', params, { responseType: 'blob' })
}
// 根据采购订单生成到货通知单
export function genArrivalNotice(orderId: number): Promise<number> {
return request.post(`/erp/po/order/genArrivalNotice/${orderId}`).then((res: any) => res.data)
}
// ============ 供应商 API使用 MOM md_vendor表 erp_po_supplier 在 my_mes 中未建) ============
export function getPoSupplierList(params?: { supplierName?: string; contact1?: string; pageNum?: number; pageSize?: number }): Promise<{ rows: PoSupplier[]; total: number }> {
const { supplierName, contact1, pageNum = 1, pageSize = 200, ...rest } = params ?? {}
return request.get('/mes/md/vendor/list', {
params: { enableFlag: 'Y', pageNum, pageSize, vendorName: supplierName, contact1, ...rest }
}).then((res: any) => {
const rows = (res.rows ?? []).map((v: any) => ({
supplierId: v.vendorId,
supplierCode: v.vendorCode,
supplierName: v.vendorName ?? '',
supplierNick: v.vendorNick,
tel: v.tel,
contact1: v.contact1,
contact1Tel: v.contact1Tel,
enableFlag: v.enableFlag
}))
return { rows, total: res.total ?? 0 }
})
}
// ============ 引入采购计划单明细 API ============
export function getLeadInList(params?: { salesOrderCode?: string; itemCode?: string; itemName?: string; businessType?: string; pageNum?: number; pageSize?: number }): Promise<{ rows: LeadInRow[]; total: number }> {
return request.get('/erp/po/order/leadIn', { params: { pageNum: 1, pageSize: 200, ...params } }).then((res: any) => {
const rows = (res.rows ?? []).map((r: any) => ({
...r,
unpurchasedQty: (r.purchaseQty ?? 0) - (r.orderedQty ?? 0)
}))
return { rows, total: res.total ?? 0 }
})
}
// ============ 状态映射 ============
export const STATUS_MAP: Record<string, { label: string; type: string }> = {
PREPARE: { label: '开立', type: 'info' },
DRAFT: { label: '开立', type: 'info' },
APPROVED: { label: '审核', type: 'success' },
CLOSED: { label: '关闭', type: '' },
REJECTED: { label: '退回', type: 'warning' }
}
export const BUSINESS_STATUS_MAP: Record<string, string> = {
NORMAL: '正常', COMPLETED: '完成', PAUSE: '暂停', CANCEL: '取消'
}
export const BUSINESS_TYPE_OPTIONS = [
{ value: '原材料', label: '原材料' },
{ value: '零部件', label: '零部件' },
{ value: '装配件', label: '装配件' },
{ value: '成品', label: '成品' },
{ value: '五金件', label: '五金件' },
{ value: '包装物', label: '包装物' }
]
export const BUSINESS_STATUS_OPTIONS = [
{ value: 'NORMAL', label: '正常' },
{ value: 'COMPLETED', label: '完成' },
{ value: 'PAUSE', label: '暂停' },
{ value: 'CANCEL', label: '取消' }
]