更新生产计划、销售订单、工作订单和仓库发料功能
This commit is contained in:
@@ -140,3 +140,20 @@ export function revokeIssue(mbomId: number): Promise<void> {
|
||||
export function calcBom(planId: number): Promise<void> {
|
||||
return request.put(`/erp/mp/plan/bom-calculate/${planId}`)
|
||||
}
|
||||
|
||||
// 齐套检查:查询物料清单的子件库存情况
|
||||
export interface StockCheckItem {
|
||||
itemCode: string
|
||||
itemName: string
|
||||
unitName?: string
|
||||
requiredQty: number
|
||||
availableQty: number
|
||||
shortage: number
|
||||
isShortage: boolean
|
||||
}
|
||||
|
||||
export function checkMbomStock(mbomId: number): Promise<StockCheckItem[]> {
|
||||
return request.get(`/erp/mp/mbom/stock-check/${mbomId}`).then((res: any) => {
|
||||
return res.data ?? res.rows ?? res ?? []
|
||||
})
|
||||
}
|
||||
|
||||
@@ -57,6 +57,12 @@ export interface ProductionPlan {
|
||||
slaveList?: PlanLine[]
|
||||
/** 部门名称(单据视图) */
|
||||
deptName?: string
|
||||
/** 客户ID(从关联销售订单带入) */
|
||||
clientId?: number
|
||||
/** 客户编码(从关联销售订单带入) */
|
||||
clientCode?: string
|
||||
/** 客户名称(从关联销售订单带入) */
|
||||
clientName?: string
|
||||
/** 物料清单(BOM运算结果,详情页只读) */
|
||||
mbomList?: MbomLine[]
|
||||
/** 补料清单(详情页只读) */
|
||||
@@ -187,6 +193,7 @@ export const PLAN_STATUS_MAP: Record<string, { label: string; type: string }> =
|
||||
|
||||
export const BUSINESS_STATUS_OPTIONS = [
|
||||
{ value: 'NORMAL', label: '正常' },
|
||||
{ value: 'BOM_CALCULATED', label: '已运算' },
|
||||
{ value: 'PAUSE', label: '暂停' },
|
||||
{ value: 'CANCEL', label: '取消' }
|
||||
]
|
||||
@@ -295,7 +302,7 @@ export function getImportOrderList(params?: {
|
||||
return request.get('/erp/sl/order/list', {
|
||||
params: {
|
||||
...params,
|
||||
orderStatus: '审核',
|
||||
status: 'APPROVED',
|
||||
pageNum: 1,
|
||||
pageSize: 100
|
||||
}
|
||||
@@ -306,9 +313,9 @@ export function getImportOrderList(params?: {
|
||||
orderId: row.orderId,
|
||||
orderCode: row.orderCode,
|
||||
orderDate: row.orderDate,
|
||||
userId: row.salesmanId,
|
||||
userName: row.salesmanName,
|
||||
salesmanName: row.salesmanName,
|
||||
userId: row.salesUserId ?? row.salesmanId,
|
||||
userName: row.salesUserName ?? row.salesmanName,
|
||||
salesmanName: row.salesUserName ?? row.salesmanName,
|
||||
clientName: row.clientName,
|
||||
deliveryDate: row.deliveryDate,
|
||||
deliveryStatus: row.deliveryDate && new Date(row.deliveryDate) < new Date() ? '超期' : '预计',
|
||||
|
||||
@@ -122,11 +122,12 @@ export interface SalesOrderDetailListResponse {
|
||||
// ============ 状态映射 ============
|
||||
|
||||
export const ORDER_STATUS_MAP: Record<string, { label: string; type: string }> = {
|
||||
'DRAFT': { label: '草稿', type: 'info' },
|
||||
'开立': { label: '开立', type: '' },
|
||||
'审核': { label: '审核', type: 'success' },
|
||||
'退回': { label: '退回', type: 'warning' },
|
||||
'关闭': { label: '关闭', type: 'danger' }
|
||||
'DRAFT': { label: '草稿', type: 'info' },
|
||||
'PREPARE': { label: '开立', type: '' },
|
||||
'APPROVED': { label: '已审核', type: 'success' },
|
||||
'REJECTED': { label: '退回', type: 'warning' },
|
||||
'FINISHED': { label: '已完成', type: 'info' },
|
||||
'CANCELED': { label: '关闭', type: 'danger' },
|
||||
}
|
||||
|
||||
export const SALES_TYPE_OPTIONS = [
|
||||
@@ -162,9 +163,10 @@ const BASE = '/erp/sl/order'
|
||||
function normalizeOrderRow(row: any): any {
|
||||
return {
|
||||
...row,
|
||||
orderStatus: row.orderStatus ?? row.status ?? '',
|
||||
salesmanId: row.salesmanId ?? row.salesUserId,
|
||||
salesmanName: row.salesmanName ?? row.salesUserName ?? '',
|
||||
salesType: row.salesType ?? row.saleType ?? '',
|
||||
salesType: row.salesType ?? row.orderType ?? row.saleType ?? '',
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,11 +199,13 @@ export function getSalesOrderDetail(orderId: number): Promise<SalesOrder> {
|
||||
// 后端返回 salesUserId/salesUserName,前端表单使用 salesmanId/salesmanName,便于下拉回显
|
||||
if (data.salesUserId !== undefined) data.salesmanId = data.salesUserId
|
||||
if (data.salesUserName !== undefined) data.salesmanName = data.salesUserName
|
||||
// 审核信息字段别名映射(后端可能使用 checkBy/checkDate 等命名)
|
||||
// 审核信息字段别名映射
|
||||
// 使用 == null 而非 ! 判断,避免 auditorId=0 或 auditorName='' 被误判为缺失
|
||||
if (data.auditorId == null) data.auditorId = data.checkUserId ?? data.checkById ?? data.auditById
|
||||
if (data.auditorName == null) data.auditorName = data.checkUserName ?? data.checkByName ?? data.auditByName ?? data.auditUser
|
||||
if (data.auditDate == null) data.auditDate = data.checkDate ?? data.auditTime ?? data.checkTime
|
||||
if (data.auditorId == null) data.auditorId = data.approverId ?? data.checkUserId ?? data.checkById ?? data.auditById
|
||||
if (data.auditorName == null) data.auditorName = data.approverName ?? data.checkUserName ?? data.checkByName ?? data.auditByName ?? data.auditUser
|
||||
if (data.auditDate == null) data.auditDate = data.approveDate ?? data.checkDate ?? data.auditTime ?? data.checkTime
|
||||
// 统一状态字段
|
||||
if (data.orderStatus == null) data.orderStatus = data.status ?? ''
|
||||
return data
|
||||
})
|
||||
}
|
||||
@@ -216,6 +220,10 @@ function buildOrderPayload(data: Partial<SalesOrder>): Record<string, unknown> {
|
||||
// 后端实体为 salesUserId / salesUserName,前端表单为 salesmanId / salesmanName,此处统一发给后端
|
||||
if (payload.salesmanId !== undefined) payload.salesUserId = payload.salesmanId
|
||||
if (payload.salesmanName !== undefined) payload.salesUserName = payload.salesmanName
|
||||
// 后端实体用 orderType 存储销售类型,前端表单用 salesType
|
||||
if (payload.salesType !== undefined) payload.orderType = payload.salesType
|
||||
// 前端用 orderStatus,后端实体字段为 status
|
||||
if (payload.orderStatus !== undefined) payload.status = payload.orderStatus
|
||||
return payload
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user