fix(mes): 解决产品收货批次信息传递和销售订单校验问题
- 修复产品收货服务中批次ID和批次代码从收货行获取而非明细
- 添加收货行存在性和归属校验逻辑
- 在产品销售行创建时添加销售订单明细校验
- 添加ERP销售订单API集成以验证销售订单项目关联
- 修复退货销售库存操作中的数量比较逻辑
- 添加退货销售批次信息在库存交易中的传递
- 增加相关单元测试验证销售订单校验和批次信息处理
| | |
| | | export function useLineFormSchema( |
| | | hasNotice: boolean, |
| | | formApi?: VbenFormApi, |
| | | orderItems: import('#/api/erp/sale/order').ErpSaleOrderApi.SaleOrderItem[] = [], |
| | | ): VbenFormSchema[] { |
| | | return [ |
| | | { |
| | | fieldName: 'saleOrderItemId', |
| | | label: '销售订单明细', |
| | | component: 'Select', |
| | | componentProps: { |
| | | placeholder: '请选择销售订单明细及盘号', |
| | | options: orderItems.map((item) => ({ |
| | | label: `${item.productName || ''}(盘号:${item.reelNo || '未填写'})`, |
| | | value: item.id, |
| | | })), |
| | | onChange: async (id?: number) => { |
| | | const item = orderItems.find((entry) => entry.id === id); |
| | | await formApi?.setFieldValue('itemId', item?.productId); |
| | | }, |
| | | }, |
| | | dependencies: { triggerFields: ['noticeId'], if: () => !hasNotice }, |
| | | rules: 'selectRequired', |
| | | }, |
| | | { |
| | | fieldName: 'noticeId', |
| | | component: 'Input', |
| | |
| | | }, |
| | | rules: 'selectRequired', |
| | | dependencies: { |
| | | triggerFields: ['noticeLineId'], |
| | | triggerFields: ['noticeLineId', 'saleOrderItemId'], |
| | | componentProps: (values) => ({ |
| | | disabled: !!values.noticeLineId, |
| | | disabled: !!values.noticeLineId || !!values.saleOrderItemId, |
| | | placeholder: '请选择产品', |
| | | }), |
| | | }, |
| | |
| | | import { message } from 'ant-design-vue'; |
| | | |
| | | import { useVbenForm } from '#/adapter/form'; |
| | | import { getProductSales } from '#/api/mes/wm/productsales'; |
| | | import { getSaleOrder } from '#/api/erp/sale/order'; |
| | | import { |
| | | createProductSalesLine, |
| | | getProductSalesLine, |
| | |
| | | }>(); |
| | | salesId.value = data.salesId; |
| | | noticeId.value = data.noticeId; |
| | | formApi.setState({ schema: useLineFormSchema(!!data.noticeId, formApi) }); |
| | | const sales = await getProductSales(data.salesId); |
| | | const order = sales.saleOrderId ? await getSaleOrder(sales.saleOrderId) : undefined; |
| | | formApi.setState({ schema: useLineFormSchema(!!data.noticeId, formApi, order?.items || []) }); |
| | | if (data.noticeId) { |
| | | await formApi.setFieldValue('noticeId', data.noticeId); |
| | | } |
| | |
| | | return z |
| | | .number({ message: '请输入退货数量' }) |
| | | .min(0) |
| | | .max(max, `可退货数量不能超过 ${max}`); |
| | | .max(max, `退货数量不能超过订单数量 ${max}`); |
| | | } |
| | | return z.number({ message: '请输入退货数量' }).min(0); |
| | | }, |
| | |
| | | v-if="maxQuantity !== undefined" |
| | | class="mx-4 mt-2 text-sm text-blue-600" |
| | | > |
| | | 当前物料可退货数量:<span class="font-bold">{{ maxQuantity }}</span> |
| | | 当前物料订单数量:<span class="font-bold">{{ maxQuantity }}</span> |
| | | </div> |
| | | </Modal> |
| | | </template> |