From 9a93910ac5af8512e6f02f664995897e8e0459a5 Mon Sep 17 00:00:00 2001 From: Amy0104 <97265214+Amy0104@users.noreply.github.com> Date: Tue, 15 Mar 2022 19:01:48 +0800 Subject: [PATCH] [Fix][UI Next][V1.0.0-Alpha] Fix saving a sub process workflow failure. (#8908) --- .../components/node/fields/use-child-node.ts | 69 ++++--------------- .../task/components/node/format-data.ts | 7 ++ .../components/node/tasks/use-sub-process.ts | 7 +- .../projects/task/components/node/types.ts | 1 + 4 files changed, 25 insertions(+), 59 deletions(-) diff --git a/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-child-node.ts b/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-child-node.ts index 97dbbae256..7c033f475c 100644 --- a/dolphinscheduler-ui-next/src/views/projects/task/components/node/fields/use-child-node.ts +++ b/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(() => { diff --git a/dolphinscheduler-ui-next/src/views/projects/task/components/node/format-data.ts b/dolphinscheduler-ui-next/src/views/projects/task/components/node/format-data.ts index b6af81bb55..07ac7e9115 100644 --- a/dolphinscheduler-ui-next/src/views/projects/task/components/node/format-data.ts +++ b/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 } diff --git a/dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-sub-process.ts b/dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-sub-process.ts index 7c468e0f1a..e698a49d4f 100644 --- a/dolphinscheduler-ui-next/src/views/projects/task/components/node/tasks/use-sub-process.ts +++ b/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[], diff --git a/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts b/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts index 264d3a5a88..1509969dde 100644 --- a/dolphinscheduler-ui-next/src/views/projects/task/components/node/types.ts +++ b/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