From 45c70bfc7a8835ba38f6ee267baa28df37d8b328 Mon Sep 17 00:00:00 2001 From: hwj Date: Thu, 18 Jun 2026 19:10:51 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=85=A5=E5=BA=93=E5=8D=95?= =?UTF-8?q?=E6=8D=AE-=E4=BA=A7=E5=93=81-=E6=B7=BB=E5=8A=A0=E6=89=98?= =?UTF-8?q?=E7=9B=98=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/mes/task/index.ts | 5 + src/locales/en.ts | 10 + src/locales/zh-CN.ts | 10 + src/views/erp/stock/checkExecution/index.vue | 2 +- src/views/erp/stock/in/StockInForm.vue | 18 +- .../stock/in/components/StockInItemForm.vue | 833 +++++++++++++++--- 6 files changed, 758 insertions(+), 120 deletions(-) diff --git a/src/api/mes/task/index.ts b/src/api/mes/task/index.ts index 1fdc8407..4770783b 100644 --- a/src/api/mes/task/index.ts +++ b/src/api/mes/task/index.ts @@ -118,6 +118,11 @@ export const TaskApi = { return await request.get({ url: `/mes/task/task-detail/summary?taskId=` + taskId }) }, + // 获取生产任务单默认包装方案 + getTaskDefaultPackagingSchemes: async (taskId: number) => { + return await request.get({ url: `/mes/task/task-detail/default-packaging-schemes`, params: { taskId } }) + }, + // 获得可查询计划的生产任务单列表 getTaskList: async () => { return await request.get({ url: `/mes/task/getTaskList`}) diff --git a/src/locales/en.ts b/src/locales/en.ts index c96f3ae6..c1f74466 100644 --- a/src/locales/en.ts +++ b/src/locales/en.ts @@ -560,12 +560,19 @@ purchaseUnitConvertQuantity: 'Purchase Convert Qty', defaultSupplier: 'Supplier (Default)', outboundPurpose: 'Outbound Purpose', + outMode: 'Outbound Mode', + outModeWholePallet: 'Whole Pallet', + outModeSplitPallet: 'Split Pallet', relatedOrder: 'Related Order', relatedRepairOrder: 'Related Repair Order', relatedMaintainRecord: 'Related Maintenance Record', relatedTask: 'Related Task', taskOrder: 'Task Order', palletCode: 'Pallet Code', + availablePallets: 'Available Pallets', + selectedPallets: 'Selected Pallets', + packageCount: 'Package Count', + itemCount: 'Item Count', productInfo: 'Product Info', productName: 'Product Name', packagingScheme: 'Packaging Scheme', @@ -605,6 +612,9 @@ validatorProductRequired: 'Product is required', validatorTaskRequired: 'Task order is required', validatorPalletRequired: 'Pallet code is required', + validatorPackageCountRequired: 'Package count is required and must be greater than 0', + validatorOutboundPurposeRequired: 'Outbound purpose is required', + validatorOutModeRequired: 'Outbound mode is required', validatorCountRequired: 'Quantity is required', stockCountExceededWarning: 'Quantity cannot exceed stock. It has been adjusted to stock quantity.' }, diff --git a/src/locales/zh-CN.ts b/src/locales/zh-CN.ts index 29b2364f..bed5862d 100644 --- a/src/locales/zh-CN.ts +++ b/src/locales/zh-CN.ts @@ -560,12 +560,19 @@ purchaseUnitConvertQuantity: '采购换算数量', defaultSupplier: '供应商(默认)', outboundPurpose: '出库用途', + outMode: '出库方式', + outModeWholePallet: '整托出库', + outModeSplitPallet: '拆托出库', relatedOrder: '关联单据', relatedRepairOrder: '关联维修单', relatedMaintainRecord: '关联保养记录', relatedTask: '关联任务单', taskOrder: '任务单', palletCode: '托盘码', + availablePallets: '可选托盘', + selectedPallets: '已选托盘', + packageCount: '包数', + itemCount: '个数', productInfo: '产品信息', productName: '产品名称', packagingScheme: '包装方案', @@ -605,6 +612,9 @@ validatorProductRequired: '产品不能为空', validatorTaskRequired: '任务单不能为空', validatorPalletRequired: '托盘码不能为空', + validatorPackageCountRequired: '包数不能为空且必须大于0', + validatorOutboundPurposeRequired: '出库用途不能为空', + validatorOutModeRequired: '出库方式不能为空', validatorCountRequired: '产品数量不能为空', stockCountExceededWarning: '数量不能超出库存,已自动调整为库存数量' }, diff --git a/src/views/erp/stock/checkExecution/index.vue b/src/views/erp/stock/checkExecution/index.vue index 3421891a..97ca0a30 100644 --- a/src/views/erp/stock/checkExecution/index.vue +++ b/src/views/erp/stock/checkExecution/index.vue @@ -184,7 +184,7 @@ {{ t('action.edit') }} { // 提交请求 formLoading.value = true try { - const data = formData.value as unknown as StockInVO + const data = { + ...formData.value, + items: normalizeItemsForSubmit(formData.value.items) + } as unknown as StockInVO if (formType.value === 'create') { await StockInApi.createStockIn(data) message.success(t('common.createSuccess')) @@ -300,6 +303,19 @@ const submitForm = async () => { } } +const normalizeItemsForSubmit = (items: any[] = []) => { + return items.map((item) => { + const { relatedTask, palletId, palletCode, taskCode, taskName, productCode, productUnitName, stockCount, totalPrice, ...rest } = item + const relateTask = item.relateTask === true || item.relateTask === 1 || item.relateTask === '1' + return { + ...rest, + relateTask, + taskId: relateTask ? item.taskId : null, + pallets: Array.isArray(item.pallets) ? item.pallets : [] + } + }) +} + /** 重置表单 */ const resetForm = () => { formData.value = { diff --git a/src/views/erp/stock/in/components/StockInItemForm.vue b/src/views/erp/stock/in/components/StockInItemForm.vue index b2574a5e..4b27c228 100644 --- a/src/views/erp/stock/in/components/StockInItemForm.vue +++ b/src/views/erp/stock/in/components/StockInItemForm.vue @@ -1,7 +1,7 @@ --> - - - - - - - - - - - - - + @@ -168,7 +162,7 @@ + {{ t('ErpStock.In.addItem') }} - + {{ t('common.cancel') }} + + +
+
{{ t('ErpStock.Item.selectTaskOrder') }}
+ + + + + + + {{ t('common.query') }} + + + + + + + + + + + + + + + +
+ +
+
{{ t('ErpStock.Item.selectProduct') }}
+ + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + {{ t('common.query') }} + + + +
+
+
{{ t('ErpStock.Item.availablePallets') }}
+ + + + + + + + + + + +
+ +
+
+
+ + + + + + +
+
+
{{ t('ErpStock.Item.selectedPallets') }}
+ + + + + + + + + + +
+
+ +