diff --git a/src/api/mes/wm/miscreceipt/line.ts b/src/api/mes/wm/miscreceipt/line.ts index 8f2f49313..4f0ca71ab 100644 --- a/src/api/mes/wm/miscreceipt/line.ts +++ b/src/api/mes/wm/miscreceipt/line.ts @@ -11,9 +11,6 @@ export interface WmMiscReceiptLineVO { warehouseId: number locationId: number areaId: number - productionDate: string - expireDate: string - lotNumber: string remark: string createTime: string } diff --git a/src/views/mes/wm/miscreceipt/MiscReceiptForm.vue b/src/views/mes/wm/miscreceipt/MiscReceiptForm.vue index 603ce83d5..2219a4f91 100644 --- a/src/views/mes/wm/miscreceipt/MiscReceiptForm.vue +++ b/src/views/mes/wm/miscreceipt/MiscReceiptForm.vue @@ -7,6 +7,7 @@ :rules="formRules" label-width="110px" v-loading="formLoading" + :disabled="isDetail" > @@ -17,7 +18,7 @@ :disabled="isHeaderReadonly" > @@ -101,10 +102,21 @@ @@ -114,19 +126,35 @@ import { generateRandomStr } from '@/utils' import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' import { WmMiscReceiptApi, WmMiscReceiptVO } from '@/api/mes/wm/miscreceipt' import MiscReceiptLineList from './MiscReceiptLineList.vue' +import { MesWmMiscReceiptStatusEnum } from '@/views/mes/utils/constants' defineOptions({ name: 'MiscReceiptForm' }) +const emit = defineEmits(['success']) const message = useMessage() const dialogVisible = ref(false) const formLoading = ref(false) -const formType = ref('create') // create / update / detail +const formType = ref('create') // create / update / finish / detail +const isEditable = computed(() => ['create', 'update'].includes(formType.value)) +const isFinish = computed(() => formType.value === 'finish') +const isDetail = computed(() => ['detail', 'finish'].includes(formType.value)) +const isHeaderReadonly = computed(() => ['detail', 'finish'].includes(formType.value)) +const dialogTitle = computed(() => { + const titles: Record = { + create: '新增杂项入库单', + update: '编辑杂项入库单', + finish: '执行入库', + detail: '杂项入库单详情' + } + return titles[formType.value] || formType.value +}) const formData = ref({ id: undefined as number | undefined, code: undefined, name: undefined, type: undefined, + status: undefined as number | undefined, sourceDocId: undefined, sourceDocCode: undefined, sourceDocType: undefined, @@ -140,17 +168,7 @@ const formRules = reactive({ receiptDate: [{ required: true, message: '入库日期不能为空', trigger: 'blur' }] }) const formRef = ref() - -const isUpdate = computed(() => ['create', 'update'].includes(formType.value)) -const isHeaderReadonly = computed(() => formType.value === 'detail') -const dialogTitle = computed(() => { - const titles = { - create: '新增杂项入库单', - update: '编辑杂项入库单', - detail: '杂项入库单详情' - } - return titles[formType.value] || formType.value -}) +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 生成入库单编号 */ const generateCode = () => { @@ -170,11 +188,12 @@ const open = async (type: string, id?: number) => { formLoading.value = false } } + // 保存原始数据快照 + originalFormData.value = JSON.stringify(formData.value) } defineExpose({ open }) -/** 提交表单 */ -const emit = defineEmits(['success']) +/** 保存表单(create/update 模式) */ const submitForm = async () => { await formRef.value.validate() formLoading.value = true @@ -184,17 +203,57 @@ const submitForm = async () => { const res = await WmMiscReceiptApi.createMiscReceipt(data) message.success('新增成功') formData.value.id = res + formData.value.status = MesWmMiscReceiptStatusEnum.PREPARE formType.value = 'update' } else { await WmMiscReceiptApi.updateMiscReceipt(data) message.success('修改成功') } + // 更新快照 + originalFormData.value = JSON.stringify(formData.value) emit('success') } finally { formLoading.value = false } } +/** 提交操作:表单修改过则先保存,再提交 */ +const handleSubmit = async () => { + await formRef.value.validate() + try { + await message.confirm('确认提交该杂项入库单?【提交后将不能修改】') + formLoading.value = true + // 1. 表单有修改时,先保存 + if (JSON.stringify(formData.value) !== originalFormData.value) { + const data = formData.value as unknown as WmMiscReceiptVO + await WmMiscReceiptApi.updateMiscReceipt(data) + } + // 2. 提交入库单 + await WmMiscReceiptApi.submitMiscReceipt(formData.value.id!) + message.success('提交成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + +/** 执行入库 */ +const handleFinish = async () => { + try { + await message.confirm('确认执行入库?执行后将更新库存台账。') + formLoading.value = true + await WmMiscReceiptApi.finishMiscReceipt(formData.value.id!) + message.success('入库成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { @@ -202,6 +261,7 @@ const resetForm = () => { code: undefined, name: undefined, type: undefined, + status: undefined, sourceDocId: undefined, sourceDocCode: undefined, sourceDocType: undefined, diff --git a/src/views/mes/wm/miscreceipt/MiscReceiptLineList.vue b/src/views/mes/wm/miscreceipt/MiscReceiptLineList.vue index cc086bb3c..c90753d8d 100644 --- a/src/views/mes/wm/miscreceipt/MiscReceiptLineList.vue +++ b/src/views/mes/wm/miscreceipt/MiscReceiptLineList.vue @@ -1,7 +1,7 @@