소스 검색

Improve workflow lineage interaction (#6230)

Wangyizhi1 3 년 전
부모
커밋
14feda996d

+ 7 - 3
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/kinship/index.vue

@@ -73,7 +73,7 @@
     },
     props: {},
     methods: {
-      ...mapActions('kinship', ['getWorkFlowList', 'getWorkFlowDAG']),
+      ...mapActions('kinship', ['getWorkFlowList', 'getWorkFlowDAG', 'getWorkFlowDAGAll']),
       /**
        * init
        */
@@ -83,7 +83,7 @@
         Promise.all([
           // get process definition
           this.getWorkFlowList(),
-          this.getWorkFlowDAG()
+          this.getWorkFlowDAGAll()
         ]).then((data) => {
           this.isLoading = false
         }).catch(() => {
@@ -103,7 +103,11 @@
         this.isLoading = true
         this.currentItemName = item
         try {
-          await this.getWorkFlowDAG(item)
+          if (item) {
+            await this.getWorkFlowDAG(item)
+          } else {
+            await this.getWorkFlowDAGAll()
+          }
         } catch (error) {
           this.$message.error(error.msg || '')
         }

+ 56 - 17
dolphinscheduler-ui/src/js/conf/home/store/kinship/actions.js

@@ -19,6 +19,31 @@ import _ from 'lodash'
 import io from '@/module/io'
 import localStore from '@/module/util/localStorage'
 
+/**
+ * build locations by workFlowList
+ */
+const buildLocations = (workFlowList) => {
+  return _.uniqBy(workFlowList, 'workFlowCode').map((item) => ({
+    code: `${item.workFlowCode}`,
+    name: item.workFlowName,
+    workFlowPublishStatus: item.workFlowPublishStatus,
+    scheduleStartTime: item.scheduleStartTime,
+    scheduleEndTime: item.scheduleEndTime,
+    crontab: item.crontab,
+    schedulePublishStatus: item.schedulePublishStatus
+  }))
+}
+
+/**
+ * build connects by workFlowRelationList
+ */
+const buildConnects = (workFlowRelationList) => {
+  return _.map(workFlowRelationList, (item) => ({
+    source: `${item.sourceWorkFlowCode}`, // should be string, or connects will not show by echarts
+    target: `${item.targetWorkFlowCode}` // should be string, or connects will not show by echarts
+  }))
+}
+
 export default {
   /**
    * Get workFlow DAG
@@ -49,31 +74,20 @@ export default {
   /**
    * Get workFlow DAG
    */
-  getWorkFlowDAG ({ state }, payload) {
+  getWorkFlowDAG ({ state }, code) {
     const projectCode = localStore.getItem('projectCode')
     return new Promise((resolve, reject) => {
-      const url = `projects/${projectCode}/lineages/list`
-      io.get(url, { code: payload }, res => {
+      const url = `projects/${projectCode}/lineages/${code}`
+      io.get(url, res => {
         let locations = []
         let connects = []
         if (res.data.workFlowList) {
-          locations = _.uniqBy(res.data.workFlowList, 'workFlowCode').map((item) => ({
-            code: `${item.workFlowCode}`,
-            name: item.workFlowName,
-            workFlowPublishStatus: item.workFlowPublishStatus,
-            scheduleStartTime: item.scheduleStartTime,
-            scheduleEndTime: item.scheduleEndTime,
-            crontab: item.crontab,
-            schedulePublishStatus: item.schedulePublishStatus
-          }))
+          locations = buildLocations(res.data.workFlowList)
         }
         if (res.data.workFlowRelationList) {
-          connects = _.map(res.data.workFlowRelationList, (item) => ({
-            source: `${item.sourceWorkFlowCode}`, // should be string, or connects will not show by echarts
-            target: `${item.targetWorkFlowCode}` // should be string, or connects will not show by echarts
-          }))
+          connects = buildConnects(res.data.workFlowRelationList)
         }
-        state.sourceWorkFlowCode = payload || ''
+        state.sourceWorkFlowCode = code || ''
         // locations
         state.locations = locations /* JSON.parse(locations) */
         // connects
@@ -83,5 +97,30 @@ export default {
         reject(res)
       })
     })
+  },
+  /**
+   * Get all workFlow DAG
+   */
+  getWorkFlowDAGAll ({ state }, payload) {
+    const projectCode = localStore.getItem('projectCode')
+    return new Promise((resolve, reject) => {
+      const url = `projects/${projectCode}/lineages/list`
+      io.get(url, res => {
+        let locations = []
+        let connects = []
+        if (res.data.workFlowList) {
+          locations = buildLocations(res.data.workFlowList)
+        }
+        if (res.data.workFlowRelationList) {
+          connects = buildConnects(res.data.workFlowRelationList)
+        }
+        state.sourceWorkFlowCode = ''
+        state.locations = locations
+        state.connects = connects
+        resolve(res.data)
+      }).catch(res => {
+        reject(res)
+      })
+    })
   }
 }