Procházet zdrojové kódy

[Fix][UI Next][V1.0.0-Alpha] Fix saving a sub process workflow failure. (#8908)

Amy0104 před 3 roky
rodič
revize
9a93910ac5

+ 12 - 57
dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-child-node.ts

@@ -17,7 +17,6 @@
 
 import { ref, onMounted } from 'vue'
 import { useI18n } from 'vue-i18n'
-import { uniqBy } from 'lodash'
 import {
   querySimpleList,
   queryProcessDefinitionByCode
@@ -46,69 +45,25 @@ export function useChildNode({
     if (loading.value) return
     loading.value = true
     const res = await querySimpleList(projectCode)
-    options.value = res.map((option: { name: string; code: number }) => ({
-      label: option.name,
-      value: option.code
-    }))
+    options.value = res
+      .filter((option: { name: string; code: number }) => option.code !== code)
+      .map((option: { name: string; code: number }) => ({
+        label: option.name,
+        value: option.code
+      }))
     loading.value = false
+    if (!model.processDefinitionCode) {
+      model.processDefinitionCode = options.value[0].value
+    }
   }
   const getProcessListByCode = async (processCode: number) => {
     if (!processCode) return
     const res = await queryProcessDefinitionByCode(processCode, projectCode)
-    getTaskOptions(res)
-  }
-  const getTaskOptions = (processDefinition: {
-    processTaskRelationList: []
-    taskDefinitionList: []
-  }) => {
-    const { processTaskRelationList = [], taskDefinitionList = [] } =
-      processDefinition
-
-    const preTaskOptions: { code: number; name: string }[] = []
-    const tasks: { [field: number]: string } = {}
-    taskDefinitionList.forEach(
-      (task: { code: number; taskType: string; name: string }) => {
-        tasks[task.code] = task.name
-        if (task.code === code) return
-        if (
-          task.taskType === 'CONDITIONS' &&
-          processTaskRelationList.filter(
-            (relation: { preTaskCode: number }) =>
-              relation.preTaskCode === task.code
-          ).length >= 2
-        ) {
-          return
-        }
-        preTaskOptions.push({
-          code: task.code,
-          name: task.name
-        })
-      }
-    )
-    model.preTaskOptions = uniqBy(preTaskOptions, 'code')
-
-    if (!code) return
-    const preTasks: number[] = []
-    const postTaskOptions: { code: number; name: string }[] = []
-    processTaskRelationList.forEach(
-      (relation: { preTaskCode: number; postTaskCode: number }) => {
-        if (relation.preTaskCode === code) {
-          postTaskOptions.push({
-            code: relation.postTaskCode,
-            name: tasks[relation.postTaskCode]
-          })
-        }
-        if (relation.postTaskCode === code && relation.preTaskCode !== 0) {
-          preTasks.push(relation.preTaskCode)
-        }
-      }
-    )
-    model.preTasks = preTasks
-    model.postTaskOptions = postTaskOptions
+    model.definition = res
   }
 
-  const onChange = (code: number) => {
-    getProcessListByCode(code)
+  const onChange = (code: number, options: { label: string }) => {
+    model.name = options.label
   }
 
   onMounted(() => {

+ 7 - 0
dolphinscheduler-ui-next/src/views/projects/task/components/node/format-data.ts

@@ -32,6 +32,9 @@ export function formatParams(data: INodeData): {
   taskDefinitionJsonObj: object
 } {
   const taskParams: ITaskParams = {}
+  if (data.taskType === 'SUB_PROCESS') {
+    taskParams.processDefinitionCode = data.processDefinitionCode
+  }
   if (
     data.taskType === 'SPARK' ||
     data.taskType === 'MR' ||
@@ -457,6 +460,10 @@ export function formatModel(data: ITaskData) {
     params.jobFlowDefineJson = data.taskParams.jobFlowDefineJson
   }
 
+  if (data.taskParams?.processDefinitionCode) {
+    params.processDefinitionCode = data.taskParams.processDefinitionCode
+  }
+
   return params
 }
 

+ 5 - 2
dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-sub-process.ts

@@ -17,6 +17,7 @@
 
 import { reactive } from 'vue'
 import * as Fields from '../fields/index'
+import { useRouter } from 'vue-router'
 import type { IJsonItem, INodeData, ITaskData } from '../types'
 
 export function useSubProcess({
@@ -30,6 +31,8 @@ export function useSubProcess({
   readonly?: boolean
   data?: ITaskData
 }) {
+  const router = useRouter()
+  const workflowCode = router.currentRoute.value.params.code
   const model = reactive({
     taskType: 'SUB_PROCESS',
     name: '',
@@ -43,7 +46,7 @@ export function useSubProcess({
     workerGroup: 'default',
     delayTime: 0,
     timeout: 30,
-    processDefinitionCode: ''
+    processDefinitionCode: 0
   } as INodeData)
 
   let extra: IJsonItem[] = []
@@ -76,7 +79,7 @@ export function useSubProcess({
         projectCode,
         from,
         processName: data?.processName,
-        code: data?.code
+        code: from === 1 ? 0 : Number(workflowCode)
       }),
       Fields.usePreTasks(model, data?.code)
     ] as IJsonItem[],

+ 1 - 0
dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts

@@ -271,6 +271,7 @@ interface ITaskParams {
   ruleId?: number
   ruleInputParameter?: IRuleParameters
   jobFlowDefineJson?: string
+  processDefinitionCode?: number
 }
 
 interface INodeData