Просмотр исходного кода

fix: 修复类型转换和验证逻辑问题

确保表单字段类型转换的一致性,将字符串和数字类型正确转换
修改验证方法返回验证结果对象,使调用方可以获取验证状态
重构课程详情加载逻辑,使用nextTick确保DOM更新后执行
zhanghaijun месяцев назад: 11
Родитель
Сommit
4faae3d1cf

+ 7 - 7
src/components/business/EasyProcess/core/drawer_course.vue

@@ -17,18 +17,18 @@
     commonFormApi.setValues({
       name: String(props.data?.name || ''),
       bindRole: String(props.data?.bindRole || ''),
-      nodeDetail: props.data?.nodeDetail || '',
-      delaySkip: props.data?.delaySkip || 0,
+      nodeDetail: String(props.data?.nodeDetail || ''),
+      delaySkip: Number(props.data?.delaySkip || 0),
       loseItem: String(props.data?.loseItem || 1),
-      nodeJoinType: props.data?.nodeJoinType,
+      nodeJoinType: String(props.data?.nodeJoinType || 0),
       virtualOperation: String(props.data?.virtualOperation || 0)
     })
     const nodeTrigger = props.data?.nodeTrigger as Record<string, any> | undefined
     triggerFormApi.setValues({
-      triggerMode: Number(nodeTrigger?.triggerMode ?? 0),
-      textParam1: nodeTrigger?.textParam1 ?? '',
-      textParam2: nodeTrigger?.textParam2 ?? '',
-      event: nodeTrigger?.event ?? '',
+      triggerMode: String(nodeTrigger?.triggerMode ?? 0),
+      textParam1: String(nodeTrigger?.textParam1 ?? ''),
+      textParam2: String(nodeTrigger?.textParam2 ?? ''),
+      event: String(nodeTrigger?.event ?? ''),
       triggerDelay: Number(nodeTrigger?.triggerDelay ?? 0)
     })
   })

+ 14 - 7
src/components/business/EasyProcess/index.vue

@@ -55,11 +55,12 @@
   const validator = new ProcessValidator()
   provide<ProcessValidator>(ProcessConstant.KEY_PROCESS_VALIDATOR, validator)
   // 验证流程节点数据
-  const validate = (callback?: (valid: boolean, messages: string[]) => void) => {
+  const validate = (callback?: (valid: boolean, messages: string[]) => void): { valid: boolean; messages: string[] } => {
     let result = validator.validate()
     if (callback && typeof callback === 'function') {
       callback(result.valid, result.messages)
     }
+    return result
   }
   /* ====== 节点数据验证 ====== end */
 
@@ -71,14 +72,20 @@
   // 暴露方法给父组件使用
   defineExpose({
     validate,
-    getProcess: (): string => {
-      validate((valid, messages) => {
-        if (!valid) {
-          ElMessage.error('请修复以下错误:\n' + messages.join(','))
-          return
+    getProcess: async (): Promise<string> => {
+      return new Promise((resolve, reject) => {
+        const result = validate((valid, messages) => {
+          if (!valid) {
+            ElMessage.error('请修复以下错误:\n' + messages.join(','))
+            reject(new Error('验证失败'))
+            return
+          }
+        })
+        // 如果验证通过,返回流程数据
+        if (result.valid) {
+          resolve(JSON.stringify(processHelper.getProcessData()))
         }
       })
-      return JSON.stringify(processHelper.getProcessData())
     }
   })
 </script>

+ 24 - 23
src/views/train/course/detail/index.vue

@@ -10,7 +10,7 @@
       </el-space>
     </div>
     <div v-loading="loading" class="mt-4">
-      <BasicForm :formModelInit="courseDetail" @change="handleChange">
+      <BasicForm @change="handleChange">
         <template #courseDataStream>
           <EasyProcess ref="easyProcessRef" :data="courseDataStream" />
         </template>
@@ -25,7 +25,7 @@
   import EasyProcess from '@/components/business/EasyProcess/index.vue'
   import courseEvaluate from './course-evaluate.vue'
   import { schema, courseSchema, rules } from './course.schema'
-  import { Course, CourseServer } from '@/api/course.api'
+  import { CourseServer } from '@/api/course.api'
   import { useForm } from '@/components/form'
   import { router } from '@/router'
   import { ElMessageBox, ElMessage } from 'element-plus'
@@ -42,14 +42,13 @@
   const courseEdit = computed(() => !courseNew.value && query.value.edit === 'true')
   const courseQuery = computed(() => !courseNew.value && !courseEdit.value)
   const loading = ref(true)
-  const courseDetail = ref<Course | undefined>(undefined)
 
   const [BasicForm, formApi] = useForm({ labelPosition: 'right', labelWidth: '150px', schema: courseNew.value ? schema : courseSchema, rules, showDefaultActions: false })
   const formData = ref<any>({})
   const handleChange = (val: any) => (formData.value = val)
 
   const addCourse = async () => {
-    const processData = easyProcessRef.value.getProcess()
+    const processData = await easyProcessRef.value.getProcess()
     if (!processData) {
       ElMessage.error('请设计课程流程')
       return
@@ -85,25 +84,27 @@
   }
 
   onMounted(() => {
-    loading.value = true
-    if (!courseNew.value) {
-      CourseServer.detail(courseId.value)
-        .then(({ data }) => {
-          courseDataStream.value = data?.courseDataStream || ''
-          courseDetail.value = {
-            ...data,
-            totalDuration: String(data?.totalDuration || 0),
-            typeID: String(data?.typeID || ''),
-            externalTypeID: String(data?.externalTypeID || ''),
-            lineNo: String(data?.lineNo || ''),
-            runningMap: String(data?.runningMap || '')
-          }
-          loading.value = false
-        })
-        .catch(() => ElMessage.error('获取课程数据失败'))
-    } else {
-      loading.value = false
-    }
+    nextTick(() => {
+      loading.value = true
+      if (!courseNew.value) {
+        CourseServer.detail(courseId.value)
+          .then(({ data }) => {
+            courseDataStream.value = data?.courseDataStream || ''
+            formApi.setValues({
+              ...data,
+              totalDuration: String(data?.totalDuration || 0),
+              typeID: String(data?.typeID || ''),
+              externalTypeID: String(data?.externalTypeID || ''),
+              lineNo: String(data?.lineNo || ''),
+              runningMap: String(data?.runningMap || '')
+            })
+            loading.value = false
+          })
+          .catch(() => ElMessage.error('获取课程数据失败'))
+      } else {
+        loading.value = false
+      }
+    })
   })
 
   const handleCancel = () => {