Sfoglia il codice sorgente

【功能修复】条件节点配置问题修复

jason 7 mesi fa
parent
commit
b047fd9929

+ 4 - 31
src/components/SimpleProcessDesignerV2/src/NodeHandler.vue

@@ -71,7 +71,8 @@ import {
   NODE_DEFAULT_NAME,
   NodeType,
   RejectHandlerType,
-  SimpleFlowNode
+  SimpleFlowNode,
+  DEFAULT_CONDITION_GROUP_VALUE
 } from './consts'
 import {generateUUID} from '@/utils'
 
@@ -167,21 +168,7 @@ const addNode = (type: number) => {
           conditionSetting: {
             defaultFlow: false,
             conditionType: ConditionType.RULE,
-            conditionGroups: {
-              and: true,
-              conditions: [
-                {
-                  and: true,
-                  rules: [
-                    {
-                      opCode: '==',
-                      leftSide: '',
-                      rightSide: ''
-                    }
-                  ]
-                }
-              ]
-            }
+            conditionGroups: DEFAULT_CONDITION_GROUP_VALUE
           }
         },
         {
@@ -239,21 +226,7 @@ const addNode = (type: number) => {
           conditionSetting: {
             defaultFlow: false,
             conditionType: ConditionType.RULE,
-            conditionGroups: {
-              and: true,
-              conditions: [
-                {
-                  and: true,
-                  rules: [
-                    {
-                      opCode: '==',
-                      leftSide: '',
-                      rightSide: ''
-                    }
-                  ]
-                }
-              ]
-            }
+            conditionGroups: DEFAULT_CONDITION_GROUP_VALUE
           }
         },
         {

+ 18 - 0
src/components/SimpleProcessDesignerV2/src/consts.ts

@@ -463,6 +463,24 @@ export type ConditionGroup = {
   // 条件数组
   conditions: Condition[]
 }
+/**
+ * 条件组默认值
+ */
+export const DEFAULT_CONDITION_GROUP_VALUE = {
+  and: true,
+  conditions: [
+    {
+      and: true,
+      rules: [
+        {
+          opCode: '==',
+          leftSide: '',
+          rightSide: ''
+        }
+      ]
+    }
+  ]
+}
 
 /**
  * 条件结构定义

+ 1 - 2
src/components/SimpleProcessDesignerV2/src/nodes-config/ConditionNodeConfig.vue

@@ -46,7 +46,6 @@
 import {
   SimpleFlowNode,
   ConditionType,
-  ConditionSetting,
   COMPARISON_OPERATORS,
   ProcessVariableEnum
 } from '../consts'
@@ -69,7 +68,7 @@ const props = defineProps({
 })
 const settingVisible = ref(false)
 const currentNode = ref<SimpleFlowNode>(props.conditionNode)
-const condition = ref<ConditionSetting>()
+const condition = ref<any>()
 const open = () => {
   condition.value = currentNode.value.conditionSetting
   settingVisible.value = true

+ 24 - 11
src/components/SimpleProcessDesignerV2/src/nodes-config/components/Condition.vue

@@ -1,7 +1,7 @@
 <template>
   <el-form ref="formRef" :model="condition" :rules="formRules" label-position="top">
     <el-form-item label="配置方式" prop="conditionType">
-      <el-radio-group v-model="condition!.conditionType">
+      <el-radio-group v-model="condition.conditionType" @change="changeConditionType">
         <el-radio
           v-for="(dict, indexConditionType) in conditionConfigTypes"
           :key="indexConditionType"
@@ -12,34 +12,34 @@
         </el-radio>
       </el-radio-group>
     </el-form-item>
-    <el-form-item v-if="condition.conditionType === ConditionType.RULE" label="条件规则">
+    <el-form-item v-if="condition.conditionType === ConditionType.RULE && condition.conditionGroups" label="条件规则">
       <div class="condition-group-tool">
         <div class="flex items-center">
           <div class="mr-4">条件组关系</div>
           <el-switch
-            v-model="condition!.conditionGroups!.and"
+            v-model="condition.conditionGroups.and"
             inline-prompt
             active-text="且"
             inactive-text="或"
           />
         </div>
       </div>
-      <el-space direction="vertical" :spacer="condition!.conditionGroups!.and ? '且' : '或'">
+      <el-space direction="vertical" :spacer="condition.conditionGroups.and ? '且' : '或'">
         <el-card
           class="condition-group"
           style="width: 530px"
-          v-for="(equation, cIdx) in condition!.conditionGroups!.conditions"
+          v-for="(equation, cIdx) in condition.conditionGroups.conditions"
           :key="cIdx"
         >
           <div
             class="condition-group-delete"
-            v-if="condition!.conditionGroups!.conditions.length > 1"
+            v-if="condition.conditionGroups.conditions.length > 1"
           >
             <Icon
               color="#0089ff"
               icon="ep:circle-close-filled"
               :size="18"
-              @click="deleteConditionGroup(condition!.conditionGroups!.conditions, cIdx)"
+              @click="deleteConditionGroup(condition.conditionGroups.conditions, cIdx)"
             />
           </div>
           <template #header>
@@ -114,7 +114,7 @@
           color="#0089ff"
           icon="ep:plus"
           :size="24"
-          @click="addConditionGroup(condition?.conditionGroups!.conditions)"
+          @click="addConditionGroup(condition.conditionGroups?.conditions)"
         />
       </div>
     </el-form-item>
@@ -125,7 +125,7 @@
     >
       <el-input
         type="textarea"
-        v-model="condition!.conditionExpression"
+        v-model="condition.conditionExpression"
         clearable
         style="width: 100%"
       />
@@ -138,13 +138,18 @@ import {
   COMPARISON_OPERATORS,
   CONDITION_CONFIG_TYPES,
   ConditionType,
-  ConditionSetting,
+  DEFAULT_CONDITION_GROUP_VALUE,
   ProcessVariableEnum
 } from '../../consts'
 import { BpmModelFormType } from '@/utils/constants'
 import { useFormFields } from '../../node'
 
-const props = defineProps<{modelValue: ConditionSetting}>()
+const props = defineProps({
+  modelValue: {
+    type: Object,
+    required: true
+  }
+})
 const emit = defineEmits(['update:modelValue'])
 const condition = computed({
   get() {
@@ -183,6 +188,14 @@ const formRules = reactive({
 })
 const formRef = ref() // 表单 Ref
 
+/** 切换条件配置方式 */
+const changeConditionType = () => {
+  if (condition.value.conditionType === ConditionType.RULE) {
+    if (!condition.value.conditionGroups) {
+      condition.value.conditionGroups = DEFAULT_CONDITION_GROUP_VALUE
+    }
+  }
+}
 const deleteConditionGroup = (conditions, index) => {
   conditions.splice(index, 1)
 }

+ 7 - 4
src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue

@@ -108,7 +108,7 @@
 <script setup lang="ts">
 import NodeHandler from '../NodeHandler.vue'
 import ProcessNodeTree from '../ProcessNodeTree.vue'
-import { SimpleFlowNode, NodeType, NODE_DEFAULT_TEXT } from '../consts'
+import { SimpleFlowNode, NodeType, ConditionType, DEFAULT_CONDITION_GROUP_VALUE, NODE_DEFAULT_TEXT } from '../consts'
 import { getDefaultConditionNodeName } from '../utils'
 import { useTaskStatusClass } from '../node'
 import { generateUUID } from '@/utils'
@@ -149,7 +149,7 @@ const blurEvent = (index: number) => {
   showInputs.value[index] = false
   const conditionNode = currentNode.value.conditionNodes?.at(index) as SimpleFlowNode
   conditionNode.name =
-    conditionNode.name || getDefaultConditionNodeName(index, conditionNode.defaultFlow)
+    conditionNode.name || getDefaultConditionNodeName(index, conditionNode.conditionSetting?.defaultFlow)
 }
 
 // 点击条件名称
@@ -178,8 +178,11 @@ const addCondition = () => {
       type: NodeType.CONDITION_NODE,
       childNode: undefined,
       conditionNodes: [],
-      conditionType: 1,
-      defaultFlow: false
+      conditionSetting: {
+        defaultFlow: false,
+        conditionType: ConditionType.RULE,
+        conditionGroups: DEFAULT_CONDITION_GROUP_VALUE
+      }
     }
     conditionNodes.splice(lastIndex, 0, conditionData)
   }

+ 7 - 4
src/components/SimpleProcessDesignerV2/src/nodes/InclusiveNode.vue

@@ -110,7 +110,7 @@
 <script setup lang="ts">
 import NodeHandler from '../NodeHandler.vue'
 import ProcessNodeTree from '../ProcessNodeTree.vue'
-import { SimpleFlowNode, NodeType, NODE_DEFAULT_TEXT } from '../consts'
+import { SimpleFlowNode, NodeType, ConditionType, DEFAULT_CONDITION_GROUP_VALUE, NODE_DEFAULT_TEXT } from '../consts'
 import { useTaskStatusClass } from '../node'
 import { getDefaultInclusiveConditionNodeName } from '../utils'
 import { generateUUID } from '@/utils'
@@ -153,7 +153,7 @@ const blurEvent = (index: number) => {
   showInputs.value[index] = false
   const conditionNode = currentNode.value.conditionNodes?.at(index) as SimpleFlowNode
   conditionNode.name =
-    conditionNode.name || getDefaultInclusiveConditionNodeName(index, conditionNode.defaultFlow)
+    conditionNode.name || getDefaultInclusiveConditionNodeName(index, conditionNode.conditionSetting?.defaultFlow)
 }
 
 // 点击条件名称
@@ -182,8 +182,11 @@ const addCondition = () => {
       type: NodeType.CONDITION_NODE,
       childNode: undefined,
       conditionNodes: [],
-      conditionType: 1,
-      defaultFlow: false
+      conditionSetting: {
+        defaultFlow: false,
+        conditionType: ConditionType.RULE,
+        conditionGroups: DEFAULT_CONDITION_GROUP_VALUE
+      }
     }
     conditionNodes.splice(lastIndex, 0, conditionData)
   }