diff --git a/src/api/mes/wm/salesnotice/line/index.ts b/src/api/mes/wm/salesnotice/line/index.ts index 19596bb01..252d546dd 100644 --- a/src/api/mes/wm/salesnotice/line/index.ts +++ b/src/api/mes/wm/salesnotice/line/index.ts @@ -5,6 +5,7 @@ export interface WmSalesNoticeLineVO { id: number noticeId: number itemId: number + materialStockId: number itemCode: string itemName: string specification: string diff --git a/src/views/mes/wm/salesnotice/SalesNoticeForm.vue b/src/views/mes/wm/salesnotice/SalesNoticeForm.vue index 9f1467f94..998e47834 100644 --- a/src/views/mes/wm/salesnotice/SalesNoticeForm.vue +++ b/src/views/mes/wm/salesnotice/SalesNoticeForm.vue @@ -13,9 +13,7 @@ @@ -45,6 +43,7 @@ value-format="x" placeholder="请选择发货日期" class="!w-1/1" + :disabled="isDetail" /> @@ -74,16 +73,24 @@ - - @@ -93,32 +100,34 @@ import { WmSalesNoticeApi, WmSalesNoticeVO } from '@/api/mes/wm/salesnotice' import { AutoCodeRecordApi } from '@/api/mes/md/autocode/record' import SalesNoticeLineList from './SalesNoticeLineList.vue' import MdClientSelect from '@/views/mes/md/client/components/MdClientSelect.vue' -import { MesAutoCodeRuleCode } from '@/views/mes/utils/constants' +import { MesAutoCodeRuleCode, MesWmSalesNoticeStatusEnum } from '@/views/mes/utils/constants' defineOptions({ name: 'SalesNoticeForm' }) +const emit = defineEmits(['success']) -const { t } = useI18n() -const message = useMessage() +const message = useMessage() // 消息弹窗 -const dialogVisible = ref(false) -const formLoading = ref(false) -const formType = ref('') -const isDetail = computed(() => formType.value === 'detail') +const dialogVisible = ref(false) // 弹窗的是否展示 +const formLoading = ref(false) // 表单的加载中 +const formType = ref('create') // 表单的类型:create / update / detail +const isEditable = computed(() => ['create', 'update'].includes(formType.value)) // 是否为编辑模式 +const isDetail = computed(() => formType.value === 'detail') // 是否为详情模式 const dialogTitle = computed(() => { - const titles = { + const titles: Record = { create: '新增发货通知单', update: '修改发货通知单', detail: '查看发货通知单' } - return titles[formType.value] || t('action.' + formType.value) + return titles[formType.value] || formType.value }) const formData = ref({ - id: undefined, + id: undefined as number | undefined, noticeCode: undefined, noticeName: undefined, salesOrderCode: undefined, clientId: undefined, salesDate: undefined, + status: undefined as number | undefined, recipientName: undefined, recipientTelephone: undefined, recipientAddress: undefined, @@ -130,7 +139,8 @@ const formRules = reactive({ clientId: [{ required: true, message: '请选择客户', trigger: 'change' }], salesDate: [{ required: true, message: '请选择发货日期', trigger: 'change' }] }) -const formRef = ref() +const formRef = ref() // 表单 Ref +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 生成通知单编号 */ const generateCode = async () => { @@ -152,11 +162,11 @@ 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 @@ -164,20 +174,44 @@ const submitForm = async () => { const data = formData.value as unknown as WmSalesNoticeVO if (formType.value === 'create') { const res = await WmSalesNoticeApi.createSalesNotice(data) - message.success(t('common.createSuccess')) + message.success('新增成功') formData.value.id = res + formData.value.status = MesWmSalesNoticeStatusEnum.PREPARE formType.value = 'update' } else { await WmSalesNoticeApi.updateSalesNotice(data) - message.success(t('common.updateSuccess')) - dialogVisible.value = false + 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 WmSalesNoticeVO + await WmSalesNoticeApi.updateSalesNotice(data) + } + // 2. 提交发货通知单 + await WmSalesNoticeApi.submitSalesNotice(formData.value.id!) + message.success('提交成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { @@ -187,6 +221,7 @@ const resetForm = () => { salesOrderCode: undefined, clientId: undefined, salesDate: undefined, + status: undefined, recipientName: undefined, recipientTelephone: undefined, recipientAddress: undefined, @@ -194,4 +229,6 @@ const resetForm = () => { } formRef.value?.resetFields() } + +defineExpose({ open }) diff --git a/src/views/mes/wm/salesnotice/SalesNoticeLineList.vue b/src/views/mes/wm/salesnotice/SalesNoticeLineList.vue index eceefbb89..9c44d9672 100644 --- a/src/views/mes/wm/salesnotice/SalesNoticeLineList.vue +++ b/src/views/mes/wm/salesnotice/SalesNoticeLineList.vue @@ -1,26 +1,43 @@