From 1387509a37699bf5e71879dd8db7b807bfff2026 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 7 Apr 2026 00:31:44 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(transfer):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=BA=93=E5=AD=98=E9=80=89=E6=8B=A9=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96=E8=A1=A8=E5=8D=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/wm/transfer/TransferLineList.vue | 73 ++++++++++++++----- 1 file changed, 53 insertions(+), 20 deletions(-) diff --git a/src/views/mes/wm/transfer/TransferLineList.vue b/src/views/mes/wm/transfer/TransferLineList.vue index eab33119e..413f6a857 100644 --- a/src/views/mes/wm/transfer/TransferLineList.vue +++ b/src/views/mes/wm/transfer/TransferLineList.vue @@ -70,9 +70,17 @@ > + + + + + - - + @@ -81,6 +89,7 @@ v-model="formData.quantity" :precision="2" :min="0" + :max="quantityMax" controls-position="right" class="!w-full" /> @@ -88,29 +97,29 @@ - + - - + - + - + @@ -140,6 +149,8 @@ import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue' import WmWarehouseSelect from '@/views/mes/wm/warehouse/components/WmWarehouseSelect.vue' import WmWarehouseLocationSelect from '@/views/mes/wm/warehouse/components/WmWarehouseLocationSelect.vue' import WmWarehouseAreaSelect from '@/views/mes/wm/warehouse/components/WmWarehouseAreaSelect.vue' +import WmMaterialStockSelect from '@/views/mes/wm/materialstock/components/WmMaterialStockSelect.vue' +import { WmMaterialStockApi, WmMaterialStockVO } from '@/api/mes/wm/materialstock' import TransferDetailList from './TransferDetailList.vue' import TransferDetailForm from './TransferDetailForm.vue' @@ -206,6 +217,7 @@ const formData = ref({ remark: undefined }) const formRules = reactive({ + materialStockId: [{ required: true, message: '请选择库存', trigger: 'change' }], itemId: [{ required: true, message: '物料不能为空', trigger: 'change' }], quantity: [{ required: true, message: '转移数量不能为空', trigger: 'blur' }], fromWarehouseId: [{ required: true, message: '移出仓库不能为空', trigger: 'change' }], @@ -213,19 +225,29 @@ const formRules = reactive({ fromAreaId: [{ required: true, message: '移出库位不能为空', trigger: 'change' }] }) const formRef = ref() +const quantityMax = ref(undefined) -/** 仓库变化时清空库区和库位 */ -const handleWarehouseChange = () => { - formData.value.fromLocationId = undefined - formData.value.fromLocationName = undefined - formData.value.fromAreaId = undefined - formData.value.fromAreaName = undefined -} - -/** 库区变化时清空库位 */ -const handleLocationChange = () => { - formData.value.fromAreaId = undefined - formData.value.fromAreaName = undefined +/** 库存选中回来,自动回填属性 */ +const handleStockChange = (stock: WmMaterialStockVO | undefined) => { + if (!stock) { + formData.value.itemId = undefined + formData.value.fromWarehouseId = undefined + formData.value.fromLocationId = undefined + formData.value.fromAreaId = undefined + formData.value.batchId = undefined + formData.value.batchCode = undefined + formData.value.quantity = undefined + quantityMax.value = undefined + return + } + formData.value.itemId = stock.itemId + formData.value.fromWarehouseId = stock.warehouseId + formData.value.fromLocationId = stock.locationId + formData.value.fromAreaId = stock.areaId + formData.value.batchId = stock.batchId + formData.value.batchCode = stock.batchCode + formData.value.quantity = stock.quantity + quantityMax.value = stock.quantity } /** 打开表单弹窗 */ @@ -238,6 +260,16 @@ const openForm = async (type: string, id?: number) => { formLoading.value = true try { formData.value = await WmTransferLineApi.getTransferLine(id) + // 编辑时:如果行关联了库存台账,查询当前在库量作为数量上限 + if (formData.value.materialStockId) { + try { + const stock = await WmMaterialStockApi.getMaterialStock(formData.value.materialStockId) + quantityMax.value = stock?.quantity + } catch { + // 台账记录可能已不存在,不限制上限 + quantityMax.value = undefined + } + } } finally { formLoading.value = false } @@ -286,6 +318,7 @@ const resetForm = () => { fromAreaName: undefined, remark: undefined } + quantityMax.value = undefined formRef.value?.resetFields() }