feat(transfer): 新增库存选择功能并优化表单逻辑

pull/871/MERGE
YunaiV 2026-04-07 00:31:44 +08:00
parent b173e40ebf
commit 1387509a37
1 changed files with 53 additions and 20 deletions

View File

@ -70,9 +70,17 @@
>
<el-row>
<el-col :span="8">
<el-form-item label="选择库存" prop="materialStockId">
<WmMaterialStockSelect
v-model="formData.materialStockId"
@change="handleStockChange"
class="!w-full"
/>
</el-form-item>
</el-col>
<el-col :span="8" v-if="formData.itemId">
<el-form-item label="物料" prop="itemId">
<!-- DONE @AI已移除来源库存选择逻辑改为直接选择物料 -->
<MdItemSelect v-model="formData.itemId" placeholder="请选择物料" class="!w-full" />
<MdItemSelect v-model="formData.itemId" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
@ -81,6 +89,7 @@
v-model="formData.quantity"
:precision="2"
:min="0"
:max="quantityMax"
controls-position="right"
class="!w-full"
/>
@ -88,29 +97,29 @@
</el-col>
<el-col :span="8">
<el-form-item label="批次号">
<el-input v-model="formData.batchCode" placeholder="请输入批次号" />
<el-input v-model="formData.batchCode" placeholder="请输入批次号" disabled />
</el-form-item>
</el-col>
<!-- DONE @AI移出仓库/库区/库位改为可编辑选择符合当前录入要求 -->
<el-col :span="8">
<el-form-item label="移出仓库" prop="fromWarehouseId">
<WmWarehouseSelect v-model="formData.fromWarehouseId" @change="handleWarehouseChange" />
<WmWarehouseSelect v-model="formData.fromWarehouseId" disabled />
</el-form-item>
</el-col>
<el-col v-if="formData.fromWarehouseId" :span="8">
<el-col :span="8">
<el-form-item label="移出库区" prop="fromLocationId">
<WmWarehouseLocationSelect
v-model="formData.fromLocationId"
:warehouse-id="formData.fromWarehouseId"
@change="handleLocationChange"
disabled
/>
</el-form-item>
</el-col>
<el-col v-if="formData.fromLocationId" :span="8">
<el-col :span="8">
<el-form-item label="移出库位" prop="fromAreaId">
<WmWarehouseAreaSelect
v-model="formData.fromAreaId"
:location-id="formData.fromLocationId"
disabled
/>
</el-form-item>
</el-col>
@ -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<number | undefined>(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()
}