在采购订单查看页面新增"生成到货通知单"按钮,已审核的采购订单可一键生成到货通知单, 自动携带供应商信息和未到货物料明细行。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
243 lines
7.0 KiB
TypeScript
243 lines
7.0 KiB
TypeScript
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: '取消' }
|
||
]
|