2026-02-27 23:50:25 +08:00
|
|
|
|
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' })
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-03-14 14:26:56 +08:00
|
|
|
|
// 根据采购订单生成到货通知单
|
|
|
|
|
|
export function genArrivalNotice(orderId: number): Promise<number> {
|
|
|
|
|
|
return request.post(`/erp/po/order/genArrivalNotice/${orderId}`).then((res: any) => res.data)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-27 23:50:25 +08:00
|
|
|
|
// ============ 供应商 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: '取消' }
|
|
|
|
|
|
]
|