diff --git a/src/views/mes/qc/ipqc/IpqcForm.vue b/src/views/mes/qc/ipqc/IpqcForm.vue index 7e8299355..e5a3b221b 100644 --- a/src/views/mes/qc/ipqc/IpqcForm.vue +++ b/src/views/mes/qc/ipqc/IpqcForm.vue @@ -275,6 +275,14 @@ 保 存 + + 完 成 + 关 闭 @@ -290,7 +298,7 @@ import ProTaskSelect from '@/views/mes/pro/task/components/ProTaskSelect.vue' import UserSelect from '@/views/system/user/components/UserSelect.vue' import IpqcLineList from './IpqcLineList.vue' import QcIndicatorResultList from '@/views/mes/qc/indicatorresult/components/QcIndicatorResultList.vue' -import { MesQcTypeEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' +import { MesQcTypeEnum, MesQcStatusEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' defineOptions({ name: 'IpqcForm' }) @@ -318,6 +326,7 @@ const formData = ref({ id: undefined as number | undefined, code: undefined, name: undefined, + status: undefined as number | undefined, type: undefined, templateId: undefined, sourceDocId: undefined, @@ -363,6 +372,7 @@ const formRules = reactive({ inspectDate: [{ required: true, message: '检测日期不能为空', trigger: 'change' }] }) const formRef = ref() // 表单 Ref +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 生成检验单编号 */ const generateCode = async () => { @@ -400,6 +410,8 @@ const open = async (type: string, id?: number, data?: QcIpqcVO) => { // 预填模式:来自待检任务(pending inspect) Object.assign(formData.value, data) } + // 保存原始数据快照 + originalFormData.value = JSON.stringify(formData.value) } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -429,12 +441,35 @@ const submitForm = async () => { } } +/** 完成操作:表单修改过则先保存,再完成 */ +const handleFinish = async () => { + if (!formRef) return + const valid = await formRef.value.validate() + if (!valid) return + try { + await message.confirm('是否完成过程检验单编制?【完成后将不能更改】') + formLoading.value = true + if (JSON.stringify(formData.value) !== originalFormData.value) { + const data = formData.value as unknown as QcIpqcVO + await QcIpqcApi.updateIpqc(data) + } + await QcIpqcApi.finishIpqc(formData.value.id!) + message.success('完成成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { id: undefined, code: undefined, name: undefined, + status: undefined, type: undefined, templateId: undefined, sourceDocId: undefined, diff --git a/src/views/mes/qc/ipqc/index.vue b/src/views/mes/qc/ipqc/index.vue index 3dc9b5774..d5e7beea6 100644 --- a/src/views/mes/qc/ipqc/index.vue +++ b/src/views/mes/qc/ipqc/index.vue @@ -139,15 +139,6 @@ > 编辑 - - 完成 - { formRef.value.open(type, id) } -/** 完成操作 */ -const handleFinish = async (id: number) => { - try { - await message.confirm('是否完成过程检验单编制?【完成后将不能更改】') - await QcIpqcApi.finishIpqc(id) - message.success('完成成功') - await getList() - } catch {} -} - /** 删除按钮操作 */ const handleDelete = async (id: number) => { try { diff --git a/src/views/mes/qc/iqc/IqcForm.vue b/src/views/mes/qc/iqc/IqcForm.vue index 471c36f67..ba295e716 100644 --- a/src/views/mes/qc/iqc/IqcForm.vue +++ b/src/views/mes/qc/iqc/IqcForm.vue @@ -226,6 +226,14 @@ 保 存 + + 完 成 + 关 闭 @@ -240,7 +248,7 @@ import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue' import IqcLineList from './IqcLineList.vue' import QcIndicatorResultList from '@/views/mes/qc/indicatorresult/components/QcIndicatorResultList.vue' import UserSelect from '@/views/system/user/components/UserSelect.vue' -import { MesQcTypeEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' +import { MesQcTypeEnum, MesQcStatusEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' defineOptions({ name: 'IqcForm' }) @@ -269,6 +277,7 @@ const formData = ref({ id: undefined as number | undefined, code: undefined, name: undefined, + status: undefined as number | undefined, sourceDocId: undefined, sourceDocType: undefined, sourceDocCode: undefined, @@ -305,6 +314,7 @@ const formRules = reactive({ inspectDate: [{ required: true, message: '检测日期不能为空', trigger: 'change' }] }) const formRef = ref() // 表单 Ref +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 生成检验单编号 */ const generateCode = async () => { @@ -329,6 +339,8 @@ const open = async (type: string, id?: number, data?: QcIqcVO) => { // 预填模式:来自待检任务(pending inspect) Object.assign(formData.value, data) } + // 保存原始数据快照 + originalFormData.value = JSON.stringify(formData.value) } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -358,12 +370,38 @@ const submitForm = async () => { } } +/** 完成操作:表单修改过则先保存,再完成 */ +const handleFinish = async () => { + // 校验表单 + if (!formRef) return + const valid = await formRef.value.validate() + if (!valid) return + try { + await message.confirm('是否完成来料检验单编制?【完成后将不能更改】') + formLoading.value = true + // 1. 表单有修改时,先保存 + if (JSON.stringify(formData.value) !== originalFormData.value) { + const data = formData.value as unknown as QcIqcVO + await QcIqcApi.updateIqc(data) + } + // 2. 完成检验单 + await QcIqcApi.finishIqc(formData.value.id!) + message.success('完成成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { id: undefined, code: undefined, name: undefined, + status: undefined, sourceDocId: undefined, sourceDocType: undefined, sourceDocCode: undefined, diff --git a/src/views/mes/qc/iqc/index.vue b/src/views/mes/qc/iqc/index.vue index c8379ce08..41bf57b71 100644 --- a/src/views/mes/qc/iqc/index.vue +++ b/src/views/mes/qc/iqc/index.vue @@ -166,15 +166,6 @@ > 编辑 - - 完成 - { formRef.value.open(type, id) } -/** 完成操作 */ -const handleComplete = async (id: number) => { - try { - await message.confirm('是否完成来料检验单编制?【完成后将不能更改】') - await QcIqcApi.finishIqc(id) - message.success('完成成功') - await getList() - } catch {} -} - /** 删除按钮操作 */ const handleDelete = async (id: number) => { try { diff --git a/src/views/mes/qc/oqc/OqcForm.vue b/src/views/mes/qc/oqc/OqcForm.vue index 333f1ea1e..49b916a28 100644 --- a/src/views/mes/qc/oqc/OqcForm.vue +++ b/src/views/mes/qc/oqc/OqcForm.vue @@ -234,6 +234,14 @@ @@ -248,7 +256,7 @@ import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue' import UserSelect from '@/views/system/user/components/UserSelect.vue' import OqcLineList from './OqcLineList.vue' import QcIndicatorResultList from '@/views/mes/qc/indicatorresult/components/QcIndicatorResultList.vue' -import { MesQcTypeEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' +import { MesQcTypeEnum, MesQcStatusEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' defineOptions({ name: 'OqcForm' }) @@ -275,6 +283,7 @@ const formData = ref({ id: undefined as number | undefined, code: undefined, name: undefined, + status: undefined as number | undefined, sourceDocId: undefined, sourceDocType: undefined, sourceDocCode: undefined, @@ -313,6 +322,7 @@ const formRules = reactive({ inspectDate: [{ required: true, message: '检测日期不能为空', trigger: 'change' }] }) const formRef = ref() // 表单 Ref +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 const isDetail = computed(() => formType.value === 'detail') // 表单是否为详情模式(只读) /** 生成检验单编号 */ @@ -338,6 +348,8 @@ const open = async (type: string, id?: number, data?: QcOqcVO) => { // 预填模式:来自待检任务(pending inspect) Object.assign(formData.value, data) } + // 保存原始数据快照 + originalFormData.value = JSON.stringify(formData.value) } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -367,12 +379,35 @@ const submitForm = async () => { } } +/** 完成操作:表单修改过则先保存,再完成 */ +const handleFinish = async () => { + if (!formRef) return + const valid = await formRef.value.validate() + if (!valid) return + try { + await message.confirm('是否完成出货检验单编制?【完成后将不能更改】') + formLoading.value = true + if (JSON.stringify(formData.value) !== originalFormData.value) { + const data = formData.value as unknown as QcOqcVO + await QcOqcApi.updateOqc(data) + } + await QcOqcApi.finishOqc(formData.value.id!) + message.success('完成成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { id: undefined, code: undefined, name: undefined, + status: undefined, sourceDocId: undefined, sourceDocType: undefined, sourceDocCode: undefined, diff --git a/src/views/mes/qc/oqc/index.vue b/src/views/mes/qc/oqc/index.vue index 134090237..d0fb0a2bc 100644 --- a/src/views/mes/qc/oqc/index.vue +++ b/src/views/mes/qc/oqc/index.vue @@ -138,15 +138,6 @@ > 编辑 - - 完成 - { formRef.value.open(type, id) } -/** 完成操作 */ -const handleFinish = async (id: number) => { - try { - await message.confirm('是否完成出货检验单编制?【完成后将不能更改】') - await QcOqcApi.finishOqc(id) - message.success('完成成功') - await getList() - } catch {} -} - /** 删除按钮操作 */ const handleDelete = async (id: number) => { try { diff --git a/src/views/mes/qc/rqc/RqcForm.vue b/src/views/mes/qc/rqc/RqcForm.vue index e40cdd62f..2a5d99c0f 100644 --- a/src/views/mes/qc/rqc/RqcForm.vue +++ b/src/views/mes/qc/rqc/RqcForm.vue @@ -223,6 +223,14 @@ 保 存 + + 完 成 + 关 闭 @@ -236,7 +244,7 @@ import MdItemSelect from '@/views/mes/md/item/components/MdItemSelect.vue' import UserSelect from '@/views/system/user/components/UserSelect.vue' import RqcLineList from './RqcLineList.vue' import QcIndicatorResultList from '@/views/mes/qc/indicatorresult/components/QcIndicatorResultList.vue' -import { MesQcTypeEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' +import { MesQcTypeEnum, MesQcStatusEnum, MesAutoCodeRuleCode } from '@/views/mes/utils/constants' defineOptions({ name: 'RqcForm' }) @@ -264,6 +272,7 @@ const formData = ref({ id: undefined as number | undefined, code: undefined, name: undefined, + status: undefined as number | undefined, templateId: undefined, sourceDocId: undefined, sourceDocType: undefined, @@ -299,6 +308,7 @@ const formRules = reactive({ inspectorUserId: [{ required: true, message: '检测人员不能为空', trigger: 'change' }] }) const formRef = ref() // 表单 Ref +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 生成检验单编号 */ const generateCode = async () => { @@ -323,6 +333,8 @@ const open = async (type: string, id?: number, data?: QcRqcVO) => { // 预填模式:来自待检任务(pending inspect) Object.assign(formData.value, data) } + // 保存原始数据快照 + originalFormData.value = JSON.stringify(formData.value) } defineExpose({ open }) // 提供 open 方法,用于打开弹窗 @@ -354,12 +366,35 @@ const submitForm = async () => { } } +/** 完成操作:表单修改过则先保存,再完成 */ +const handleFinish = async () => { + if (!formRef) return + const valid = await formRef.value.validate() + if (!valid) return + try { + await message.confirm('是否完成退货检验单编制?【完成后将不能更改】') + formLoading.value = true + if (JSON.stringify(formData.value) !== originalFormData.value) { + const data = formData.value as unknown as QcRqcVO + await QcRqcApi.updateRqc(data) + } + await QcRqcApi.finishRqc(formData.value.id!) + message.success('完成成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { id: undefined, code: undefined, name: undefined, + status: undefined, templateId: undefined, sourceDocId: undefined, sourceDocType: undefined, diff --git a/src/views/mes/qc/rqc/index.vue b/src/views/mes/qc/rqc/index.vue index 37e125444..2947d970b 100644 --- a/src/views/mes/qc/rqc/index.vue +++ b/src/views/mes/qc/rqc/index.vue @@ -165,15 +165,6 @@ > 编辑 - - 完成 - { formRef.value.open(type, id) } -/** 完成操作 */ -const handleFinish = async (id: number) => { - try { - await message.confirm('是否完成退货检验单编制?【完成后将不能更改】') - await QcRqcApi.finishRqc(id) - message.success('完成成功') - await getList() - } catch {} -} - /** 删除按钮操作 */ const handleDelete = async (id: number) => { try {