diff --git a/src/views/mes/dv/maintenrecord/MaintenRecordForm.vue b/src/views/mes/dv/maintenrecord/MaintenRecordForm.vue
index 4dde2b69b..c54d59831 100644
--- a/src/views/mes/dv/maintenrecord/MaintenRecordForm.vue
+++ b/src/views/mes/dv/maintenrecord/MaintenRecordForm.vue
@@ -50,11 +50,18 @@
-
- 确 定
+
+ 保 存
-
- {{ isDetail ? '关 闭' : '取 消' }}
+
+ 提 交
+
+ 关 闭
@@ -66,24 +73,35 @@ import DvCheckPlanSelect from '@/views/mes/dv/checkplan/components/DvCheckPlanSe
import UserSelect from '@/views/system/user/components/UserSelect.vue'
import MaintenRecordLineList from './MaintenRecordLineList.vue'
import { useUserStore } from '@/store/modules/user'
+import { MesDvMaintenRecordStatusEnum } from '@/views/mes/utils/constants'
defineOptions({ name: 'MaintenRecordForm' })
+const emit = defineEmits(['success'])
-const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗
+const { t } = useI18n() // 国际化
const userStore = useUserStore()
const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
-const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-const formType = ref('') // 表单的类型:create - 新增;update - 修改;detail - 详情
+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,
maintenTime: undefined,
userId: undefined,
+ status: undefined as number | undefined,
remark: ''
})
const formRules = reactive({
@@ -91,11 +109,11 @@ const formRules = reactive({
maintenTime: [{ required: true, message: '保养时间不能为空', trigger: 'blur' }]
})
const formRef = ref() // 表单 Ref
+const originalFormData = ref('') // 原始表单数据快照,用于脏检查
/** 打开弹窗 */
const open = async (type: string, id?: number) => {
dialogVisible.value = true
- dialogTitle.value = type === 'detail' ? '保养记录详情' : t('action.' + type)
formType.value = type
resetForm()
// 修改/详情时,设置数据
@@ -111,28 +129,31 @@ const open = async (type: string, id?: number) => {
if (type === 'create') {
formData.value.userId = userStore.getUser.id
}
+ // 保存原始数据快照
+ 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 DvMaintenRecordApi.createMaintenRecord(data)
+ const res = await DvMaintenRecordApi.createMaintenRecord(data)
message.success(t('common.createSuccess'))
+ // 创建成功后,更新表单数据和状态为编辑模式
+ formData.value.id = res
+ formData.value.status = MesDvMaintenRecordStatusEnum.PREPARE
+ formType.value = 'update'
} else {
await DvMaintenRecordApi.updateMaintenRecord(data)
message.success(t('common.updateSuccess'))
}
- dialogVisible.value = false
+ // 更新快照
+ originalFormData.value = JSON.stringify(formData.value)
// 发送操作成功的事件
emit('success')
} finally {
@@ -140,6 +161,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 DvMaintenRecordApi.updateMaintenRecord(data)
+ }
+ // 2. 提交保养记录
+ await DvMaintenRecordApi.submitMaintenRecord(formData.value.id!)
+ message.success('提交成功')
+ dialogVisible.value = false
+ emit('success')
+ } catch {
+ } finally {
+ formLoading.value = false
+ }
+}
+
/** 重置表单 */
const resetForm = () => {
formData.value = {
@@ -148,8 +192,11 @@ const resetForm = () => {
machineryId: undefined,
maintenTime: undefined,
userId: undefined,
+ status: undefined,
remark: ''
}
formRef.value?.resetFields()
}
+
+defineExpose({ open })
diff --git a/src/views/mes/dv/maintenrecord/index.vue b/src/views/mes/dv/maintenrecord/index.vue
index 48ad95bff..aaac8ba03 100644
--- a/src/views/mes/dv/maintenrecord/index.vue
+++ b/src/views/mes/dv/maintenrecord/index.vue
@@ -55,8 +55,13 @@
-
-
+
+
+
+ {{ scope.row.machineryCode }}
+
+
+
@@ -74,36 +79,24 @@
-
+
-
- 查看
-
+
编辑
-
-
- 提交
-
删除
@@ -125,13 +118,13 @@