Browse Source

Implements the sql type task, now it can be cache the previous input. (#1745)

zhukai 5 years ago
parent
commit
2087f464fb

+ 1 - 0
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formModel.vue

@@ -143,6 +143,7 @@
         <m-sql
           v-if="taskType === 'SQL'"
           @on-params="_onParams"
+          @on-cache-params="_onCacheParams"
           ref="SQL"
           :create-node-id="id"
           :backfill-item="backfillItem">

+ 15 - 2
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/datasource.vue

@@ -112,7 +112,20 @@
         })
       }
     },
-    watch: {},
+    computed: {
+      cacheParams () {
+        return {
+          type: this.type,
+          datasource: this.datasource
+        }
+      }
+    },
+    // Watch the cacheParams
+    watch: {
+      cacheParams (val) {
+        this.$emit('on-dsData', val);
+      }
+    },
     created () {
       let supportType = this.supportType || []
       this.typeList = _.cloneDeep(this.store.state.dag.dsTypeListS)
@@ -146,4 +159,4 @@
     },
     components: { }
   }
-</script>
+</script>

+ 33 - 2
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/sql.vue

@@ -371,6 +371,10 @@
           this.connParams = ''
         }
       },
+      //Watch the cacheParams
+      cacheParams (val) {
+        this.$emit('on-cache-params', val);
+      }
     },
     created () {
       let o = this.backfillItem
@@ -396,7 +400,8 @@
         this.receivers = o.params.receivers && o.params.receivers.split(',') || []
         this.receiversCc = o.params.receiversCc && o.params.receiversCc.split(',') || []
       }
-      if (!_.some(this.store.state.dag.tasks, { id: this.createNodeId }) &&
+      // read tasks from cache
+      if (!_.some(this.store.state.dag.cacheTasks, { id: this.createNodeId }) &&
         this.router.history.current.name !== 'definition-create') {
         this._getReceiver()
       }
@@ -415,7 +420,33 @@
         editor.off($('.code-sql-mirror'), 'keypress', this.keypress)
       }
     },
-    computed: {},
+    computed: {
+      cacheParams () {
+        return {
+          type: this.type,
+          datasource: this.rtDatasource,
+          sql: editor ? editor.getValue() : '',
+          udfs: this.udfs,
+          sqlType: this.sqlType,
+          title: this.title,
+          receivers: this.receivers.join(','),
+          receiversCc: this.receiversCc.join(','),
+          showType: (() => {
+
+            let showType = this.showType
+            if (showType.length === 2 && showType[0] === 'ATTACHMENT') {
+              return [showType[1], showType[0]].join(',')
+            } else {
+              return showType.join(',')
+            }
+          })(),
+          localParams: this.localParams,
+          connParams: this.connParams,
+          preStatements: this.preStatements,
+          postStatements: this.postStatements
+        }
+      }
+    },
     components: { mListBox, mDatasource, mLocalParams, mUdfs, mSqlType, mStatementList, mEmail }
   }
 </script>

+ 5 - 0
dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js

@@ -110,6 +110,11 @@ export default {
         let processDefinitionJson = JSON.parse(res.data.processDefinitionJson)
         // tasks info
         state.tasks = processDefinitionJson.tasks
+        // tasks cache
+        state.cacheTasks = {}
+        processDefinitionJson.tasks.forEach(v => {
+          state.cacheTasks[v.id] = v
+        })
         // global params
         state.globalParams = processDefinitionJson.globalParams
         // timeout