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 { 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 { return request.get(`/erp/po/order/${orderId}`).then((res: any) => { return res.data }) } // 新增采购订单 export function createPurchaseOrder(data: Partial): Promise { return request.post('/erp/po/order', data) } // 更新采购订单 export function updatePurchaseOrder(data: Partial): Promise { return request.put('/erp/po/order', data) } // 删除采购订单 export function deletePurchaseOrder(orderIds: string): Promise { return request.delete(`/erp/po/order/${orderIds}`) } // 获取采购订单单据视图列表 export function getPurchaseOrderDocList(params: PurchaseOrderQuery): Promise { 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 { return request.get('/erp/po/order/genCode').then((res: any) => res.data ?? res.msg ?? '') } // 审核采购订单 export function approvePurchaseOrder(orderIds: string): Promise { return request.put(`/erp/po/order/approve/${orderIds}`) } // 反审核采购订单 export function unapprovePurchaseOrder(orderIds: string): Promise { return request.put(`/erp/po/order/unapprove/${orderIds}`) } // 导出采购订单 export function exportPurchaseOrder(params: PurchaseOrderQuery): Promise { return request.post('/erp/po/order/export', params, { responseType: 'blob' }) } // 根据采购订单生成到货通知单 export function genArrivalNotice(orderId: number): Promise { 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 = { 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 = { 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: '取消' } ]