diff --git a/src/views/mes/dv/checkrecord/CheckRecordForm.vue b/src/views/mes/dv/checkrecord/CheckRecordForm.vue index cfaba1cf6..47099d8f2 100644 --- a/src/views/mes/dv/checkrecord/CheckRecordForm.vue +++ b/src/views/mes/dv/checkrecord/CheckRecordForm.vue @@ -6,6 +6,7 @@ :model="formData" :rules="formRules" label-width="100px" + :disabled="isDetail" > @@ -47,11 +48,21 @@ @@ -62,22 +73,33 @@ import DvMachinerySelect from '@/views/mes/dv/machinery/components/DvMachinerySe import DvCheckPlanSelect from '@/views/mes/dv/checkplan/components/DvCheckPlanSelect.vue' import UserSelect from '@/views/system/user/components/UserSelect.vue' import CheckRecordLineList from './CheckRecordLineList.vue' +import { MesDvCheckRecordStatusEnum } from '@/views/mes/utils/constants' defineOptions({ name: 'CheckRecordForm' }) +const emit = defineEmits(['success']) -const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 const dialogVisible = ref(false) // 弹窗的是否展示 -const dialogTitle = ref('') // 弹窗的标题 -const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用 -const formType = ref('') // 表单的类型:create - 新增;update - 修改 +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: Record = { + create: '新增点检记录', + update: '编辑点检记录', + detail: '点检记录详情' + } + return titles[formType.value] || formType.value +}) const formData = ref({ - id: undefined, + id: undefined as number | undefined, planId: undefined, machineryId: undefined, checkTime: undefined, userId: undefined, + status: undefined as number | undefined, remark: '' }) const formRules = reactive({ @@ -85,14 +107,14 @@ const formRules = reactive({ checkTime: [{ required: true, message: '点检时间不能为空', trigger: 'blur' }] }) const formRef = ref() // 表单 Ref +const originalFormData = ref('') // 原始表单数据快照,用于脏检查 /** 打开弹窗 */ const open = async (type: string, id?: number) => { dialogVisible.value = true - dialogTitle.value = t('action.' + type) formType.value = type resetForm() - // 修改时,设置数据 + // 修改/详情时,加载数据 if (id) { formLoading.value = true try { @@ -101,28 +123,31 @@ const open = async (type: string, id?: number) => { formLoading.value = false } } + // 保存原始数据快照 + originalFormData.value = JSON.stringify(formData.value) } -defineExpose({ open }) // 提供 open 方法,用于打开弹窗 -/** 提交表单 */ -const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调 +/** 提交表单(create/update 模式) */ const submitForm = async () => { // 校验表单 - if (!formRef) return - const valid = await formRef.value.validate() - if (!valid) return + await formRef.value.validate() // 提交请求 formLoading.value = true try { const data = formData.value as any if (formType.value === 'create') { - await DvCheckRecordApi.createCheckRecord(data) - message.success(t('common.createSuccess')) + const res = await DvCheckRecordApi.createCheckRecord(data) + message.success('新增成功') + // 创建成功后,更新表单数据和状态为编辑模式 + formData.value.id = res + formData.value.status = MesDvCheckRecordStatusEnum.DRAFT + formType.value = 'update' } else { await DvCheckRecordApi.updateCheckRecord(data) - message.success(t('common.updateSuccess')) + message.success('修改成功') } - dialogVisible.value = false + // 更新快照 + originalFormData.value = JSON.stringify(formData.value) // 发送操作成功的事件 emit('success') } finally { @@ -130,6 +155,29 @@ const submitForm = async () => { } } +/** 提交操作:表单修改过则先保存,再提交 */ +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 any + await DvCheckRecordApi.updateCheckRecord(data) + } + // 2. 提交记录 + await DvCheckRecordApi.submitCheckRecord(formData.value.id!) + message.success('提交成功') + dialogVisible.value = false + emit('success') + } catch { + } finally { + formLoading.value = false + } +} + /** 重置表单 */ const resetForm = () => { formData.value = { @@ -138,8 +186,11 @@ const resetForm = () => { machineryId: undefined, checkTime: undefined, userId: undefined, + status: undefined, remark: '' } formRef.value?.resetFields() } + +defineExpose({ open }) diff --git a/src/views/mes/dv/checkrecord/index.vue b/src/views/mes/dv/checkrecord/index.vue index 2ee773309..544bf8471 100644 --- a/src/views/mes/dv/checkrecord/index.vue +++ b/src/views/mes/dv/checkrecord/index.vue @@ -65,11 +65,18 @@ - - + + + + - - + + + - +