From 6f3443df64be0704f5b19c892249eb965313cc24 Mon Sep 17 00:00:00 2001 From: "yang3.xie" Date: Mon, 10 Aug 2026 00:54:38 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=90=9B=20fix:=20guard=20missing=20wor?= =?UTF-8?q?kflow=20definition=20in=20DAG=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/projects/workflow/components/dag/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/index.tsx b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/index.tsx index d65a3e410b23..54511d9ff614 100644 --- a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/index.tsx +++ b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/index.tsx @@ -127,7 +127,7 @@ export default defineComponent({ if (props.definition) { return ( route.name === 'workflow-definition-detail' && - props.definition!.workflowDefinition.releaseState === 'ONLINE' + props.definition.workflowDefinition?.releaseState === 'ONLINE' ) } else { return false @@ -149,7 +149,7 @@ export default defineComponent({ props.instance.state === 'STOP' ) } else if (props.definition) { - return props.definition!.workflowDefinition.releaseState === 'OFFLINE' + return props.definition.workflowDefinition?.releaseState === 'OFFLINE' } else { return false } From bfaedfda766ec81f82be98a84f3650210a458460 Mon Sep 17 00:00:00 2001 From: "yang3.xie" Date: Mon, 10 Aug 2026 15:44:56 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9B=20fix:=20validate=20DAG=20data?= =?UTF-8?q?=20before=20rendering?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../workflow/definition/detail/index.tsx | 18 ++++++--- .../workflow/instance/detail/index.tsx | 39 ++++++++++++------- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/dolphinscheduler-ui/src/views/projects/workflow/definition/detail/index.tsx b/dolphinscheduler-ui/src/views/projects/workflow/definition/detail/index.tsx index 2831014c55a6..e86c94e23515 100644 --- a/dolphinscheduler-ui/src/views/projects/workflow/definition/detail/index.tsx +++ b/dolphinscheduler-ui/src/views/projects/workflow/definition/detail/index.tsx @@ -58,12 +58,18 @@ export default defineComponent({ const isLoading = ref(true) const dagRef = ref() - const refresh = () => { + const refresh = async () => { isLoading.value = true - queryWorkflowDefinitionByCode(code, projectCode).then((res: any) => { + try { + const res = await queryWorkflowDefinitionByCode(code, projectCode) + if (!res?.workflowDefinition) { + definition.value = undefined + message.error(t('project.workflow.request_failed')) + return + } + readonly.value = res.workflowDefinition.releaseState === 'ONLINE' definition.value = res - isLoading.value = false if (!res.workflowDefinition.locations) { setTimeout(() => { const graph = dagRef.value @@ -71,7 +77,9 @@ export default defineComponent({ submit() }, 1000) } - }) + } finally { + isLoading.value = false + } } const save = ({ @@ -121,7 +129,7 @@ export default defineComponent({ theme.darkTheme ? Styles['dark'] : Styles['light'] ]} > - {!isLoading.value && ( + {!isLoading.value && definition.value && ( () const instance = ref() + const isLoading = ref(true) const dagInstanceRef = ref() - const refresh = () => { - queryWorkflowInstanceById(id, projectCode).then((res: any) => { + const refresh = async () => { + isLoading.value = true + try { + const res = await queryWorkflowInstanceById(id, projectCode) instance.value = res + if (!res?.dagData?.workflowDefinition) { + definition.value = undefined + window.$message.error(t('project.workflow.request_failed')) + return + } + if (!res.dagData.workflowDefinition.locations) { setTimeout(() => { const graph = dagInstanceRef.value @@ -65,10 +74,10 @@ export default defineComponent({ submit() }, 1000) } - if (res.dagData) { - definition.value = res.dagData - } - }) + definition.value = res.dagData + } finally { + isLoading.value = false + } } const save = ({ @@ -115,14 +124,16 @@ export default defineComponent({ theme.darkTheme ? Styles['dark'] : Styles['light'] ]} > - + {!isLoading.value && definition.value && instance.value && ( + + )} ) }