This is an automated email from the ASF dual-hosted git repository.
chenxingchun pushed a commit to branch 1.3.2-release
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git
The following commit(s) were added to refs/heads/1.3.2-release by this push:
new d1b6e6c Click DAG connection to add label function
new f7badc2 Merge pull request #3275 from break60/1.3.2-release
d1b6e6c is described below
commit d1b6e6c945165b3ec9d5311e211ab62d31833006
Author: break60 <[email protected]>
AuthorDate: Thu Jul 16 13:47:22 2020 +0800
Click DAG connection to add label function
---
.../src/js/conf/home/pages/dag/_source/dag.vue | 55 +++++++++-
.../pages/dag/_source/formModel/formLineModel.vue | 120 +++++++++++++++++++++
.../home/pages/dag/_source/plugIn/jsPlumbHandle.js | 47 ++++++--
.../src/js/conf/home/store/dag/mutations.js | 8 ++
.../src/js/module/i18n/locale/en_US.js | 6 +-
.../src/js/module/i18n/locale/zh_CN.js | 13 ++-
6 files changed, 233 insertions(+), 16 deletions(-)
diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
index eb58da4..a5098a0 100755
--- a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
+++ b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.vue
@@ -131,6 +131,7 @@
import { allNodesId } from './plugIn/util'
import { toolOper, tasksType } from './config'
import mFormModel from './formModel/formModel'
+ import mFormLineModel from './formModel/formLineModel'
import { formatDate } from '@/module/filter/filter'
import { findComponentDownward } from '@/module/util/'
import disabledState from '@/module/mixin/disabledState'
@@ -165,7 +166,7 @@
},
methods: {
...mapActions('dag', ['saveDAGchart', 'updateInstance',
'updateDefinition', 'getTaskState']),
- ...mapMutations('dag', ['addTasks', 'cacheTasks', 'resetParams',
'setIsEditDag', 'setName']),
+ ...mapMutations('dag', ['addTasks', 'cacheTasks', 'resetParams',
'setIsEditDag', 'setName', 'addConnects']),
// DAG automatic layout
dagAutomaticLayout() {
@@ -190,9 +191,14 @@
length: 12,
foldback: 0.8
}
- ]
+ ],
+ ['Label', {
+ location: 0.5,
+ id: 'label'
+ }]
],
- Container: 'canvas'
+ Container: 'canvas',
+ ConnectionsDetachable: true
})
})
if (this.tasks.length) {
@@ -498,8 +504,42 @@
* Create a node popup layer
* @param Object id
*/
+ _createLineLabel({id, sourceId, targetId}) {
+ // $('#jsPlumb_2_50').text('111')
+ let self = this
+ self.$modal.destroy()
+ const removeNodesEvent = (fromThis) => {
+ // Manually destroy events inside the component
+ fromThis.$destroy()
+ // Close the popup
+ eventModel.remove()
+ }
+ eventModel = this.$drawer({
+ render (h) {
+ return h(mFormLineModel,{
+ on: {
+ addLineInfo ({ item, fromThis }) {
+ self.addConnects(item)
+ setTimeout(() => {
+ removeNodesEvent(fromThis)
+ }, 100)
+ },
+ cancel ({fromThis}) {
+ removeNodesEvent(fromThis)
+ }
+ },
+ props: {
+ id: id,
+ sourceId: sourceId,
+ targetId: targetId
+ }
+ })
+ }
+ })
+ },
_createNodes ({ id, type }) {
let self = this
+ self.$modal.destroy()
let preNode = []
let rearNode = []
let rearList = []
@@ -630,9 +670,14 @@
length: 12,
foldback: 0.8
}
- ]
+ ],
+ ['Label', {
+ location: 0.5,
+ id: 'label'
+ }]
],
- Container: 'canvas'
+ Container: 'canvas',
+ ConnectionsDetachable: true
})
})
},
diff --git
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formLineModel.vue
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formLineModel.vue
new file mode 100644
index 0000000..e3c25b4
--- /dev/null
+++
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/formLineModel.vue
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+<template>
+ <div class="form-model-model" v-clickoutside="_handleClose">
+ <div class="title-box">
+ <span class="name">{{$t('Current connection settings')}}</span>
+ </div>
+ <div class="content-box">
+ <div class="from-model">
+ <!-- Node name -->
+ <div class="clearfix list">
+ <div class="text-box"><span>{{$t('Connection name')}}</span></div>
+ <div class="cont-box">
+ <label class="label-box">
+ <x-input
+ type="text"
+ v-model="labelName"
+ :disabled="isDetails"
+ :placeholder="$t('Please enter name')"
+ maxlength="100"
+ autocomplete="off">
+ </x-input>
+ </label>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="bottom-box">
+ <div class="submit" style="background: #fff;">
+ <x-button type="text" @click="cancel()"> {{$t('Cancel')}} </x-button>
+ <x-button type="primary" shape="circle" :loading="spinnerLoading"
@click="ok()" :disabled="isDetails">{{spinnerLoading ? 'Loading...' :
$t('Confirm add')}} </x-button>
+ </div>
+ </div>
+ </div>
+</template>
+<script>
+ import _ from 'lodash'
+ import { mapActions } from 'vuex'
+ import i18n from '@/module/i18n'
+ import JSP from './../plugIn/jsPlumbHandle'
+ import disabledState from '@/module/mixin/disabledState'
+
+ export default {
+ name: 'form-line-model',
+ data () {
+ return {
+ // loading
+ spinnerLoading: false,
+ // node name
+ labelName: '',
+ }
+ },
+ mixins: [disabledState],
+ props: {
+ id: String,
+ sourceId: String,
+ targetId: String
+ },
+ methods: {
+ cancel() {
+ this.$emit('cancel', {
+ fromThis: this
+ })
+ },
+ ok() {
+ $(`#${this.id}`).text(this.labelName)
+ this.$emit('addLineInfo', {
+ item: {
+ labelName: this.labelName,
+ sourceId: this.sourceId,
+ targetId: this.targetId
+ },
+ fromThis: this
+ })
+ }
+ },
+ watch: {
+
+ },
+ created () {
+ let connects = this.store.state.dag.connects
+ connects.filter( item => {
+ if(item.endPointSourceId===this.sourceId &&
item.endPointTargetId===this.targetId) {
+ this.labelName = item.label
+ }
+ });
+ },
+ mounted () {
+
+ },
+ updated () {
+ },
+ beforeDestroy () {
+ },
+ destroyed () {
+ },
+ computed: {
+
+ },
+ components: {}
+ }
+</script>
+
+<style lang="scss" rel="stylesheet/scss">
+
+</style>
diff --git
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
index 8dbc634..0cd8bc3 100755
---
a/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
+++
b/dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
@@ -83,6 +83,10 @@ JSP.prototype.init = function ({ dag, instance, options }) {
// Monitor line click
this.JspInstance.bind('click', e => {
+ // Untie event
+ if (this.config.isDblclick) {
+ findComponentDownward(this.dag.$root, 'dag-chart')._createLineLabel({id:
e._jsPlumb.overlays.label.canvas.id, sourceId: e.sourceId, targetId:
e.targetId})
+ }
if (this.config.isClick) {
this.connectClick(e)
}
@@ -641,14 +645,39 @@ JSP.prototype.saveStore = function () {
tasks.push(tasksParam)
}
})
-
- _.map(this.JspInstance.getConnections(), v => {
- connects.push({
- endPointSourceId: v.sourceId,
- endPointTargetId: v.targetId
+ if(store.state.dag.connects.length
===this.JspInstance.getConnections().length) {
+ _.map(store.state.dag.connects, u => {
+ connects.push({
+ endPointSourceId: u.endPointSourceId,
+ endPointTargetId: u.endPointTargetId,
+ label: u.label
+ })
})
- })
-
+ } else if(store.state.dag.connects.length>0 &&
store.state.dag.connects.length < this.JspInstance.getConnections().length) {
+ _.map(this.JspInstance.getConnections(), v => {
+ connects.push({
+ endPointSourceId: v.sourceId,
+ endPointTargetId: v.targetId,
+ label: v._jsPlumb.overlays.label.canvas.innerText
+ })
+ })
+ _.map(store.state.dag.connects, u => {
+ _.map(connects, v => {
+ if(u.label && u.endPointSourceId === v.endPointSourceId &&
u.endPointTargetId===v.endPointTargetId) {
+ v.label = u.label
+ }
+ })
+ })
+ } else if(store.state.dag.connects.length===0) {
+ _.map(this.JspInstance.getConnections(), v => {
+ connects.push({
+ endPointSourceId: v.sourceId,
+ endPointTargetId: v.targetId,
+ label: v._jsPlumb.overlays.label.canvas.innerText
+ })
+ })
+ }
+
_.map(tasksAll(), v => {
locations[v.id] = {
name: v.name,
@@ -741,6 +770,7 @@ JSP.prototype.jspBackfill = function ({ connects,
locations, largeJson }) {
_.map(connects, v => {
let sourceId = v.endPointSourceId.split('-')
let targetId = v.endPointTargetId.split('-')
+ let labels = v.label
if (sourceId.length === 4 && targetId.length === 4) {
sourceId = `${sourceId[0]}-${sourceId[1]}-${sourceId[2]}`
targetId = `${targetId[0]}-${targetId[1]}-${targetId[2]}`
@@ -773,7 +803,8 @@ JSP.prototype.jspBackfill = function ({ connects,
locations, largeJson }) {
target: targetId,
type: 'basic',
paintStyle: { strokeWidth: 2, stroke: '#2d8cf0' },
- HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3}
+ HoverPaintStyle: {stroke: '#ccc', strokeWidth: 3},
+ overlays:[["Label", { label: labels} ]]
})
}
})
diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
index 509ae3c..11395db 100755
--- a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
+++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
@@ -140,6 +140,14 @@ export default {
y: parseInt(dom.css('top'), 10)
})
},
+ addConnects(state, payload) {
+ state.connects = _.map(state.connects, v => {
+ if(v.endPointSourceId===payload.sourceId &&
v.endPointTargetId===payload.targetId) {
+ v.label = payload.labelName
+ }
+ return v
+ })
+ },
/**
* Cache the input
* @param state
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
index def4c1a..657dcef 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
@@ -595,5 +595,9 @@ export default {
'Please delete all non-existent resources': 'Please delete all non-existent
resources',
'The Worker group no longer exists, please select the correct Worker
group!': 'The Worker group no longer exists, please select the correct Worker
group!',
'Please confirm whether the workflow has been saved before downloading':
'Please confirm whether the workflow has been saved before downloading',
- 'User name length is between 3 and 39': 'User name length is between 3 and
39'
+ 'User name length is between 3 and 39': 'User name length is between 3 and
39',
+ zkDirectory: 'zkDirectory',
+ 'Directory detail': 'Directory detail',
+ 'Connection name': 'Connection name',
+ 'Current connection settings': 'Current connection settings'
}
diff --git a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
index add8601..8f38f34 100755
--- a/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
+++ b/dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
@@ -47,7 +47,6 @@ export default {
'Confirm add': '确认添加',
'The newly created sub-Process has not yet been executed and cannot enter
the sub-Process': '新创建子工作流还未执行,不能进入子工作流',
'The task has not been executed and cannot enter the sub-Process':
'该任务还未执行,不能进入子工作流',
- 'Please enter name (required)': '请输入名称(必填)',
'Name already exists': '名称已存在请重新输入',
'Download Log': '下载日志',
'Refresh Log': '刷新日志',
@@ -595,5 +594,15 @@ export default {
'Please delete all non-existent resources': '请删除所有未授权或已删除资源',
'The Worker group no longer exists, please select the correct Worker
group!': '该Worker分组已经不存在,请选择正确的Worker分组!',
'Please confirm whether the workflow has been saved before downloading':
'下载前请确定工作流是否已保存',
- 'User name length is between 3 and 39': '用户名长度在3~39之间'
+ 'User name length is between 3 and 39': '用户名长度在3~39之间',
+ 'Timeout Settings': '超时设置',
+ 'Connect Timeout':'连接超时',
+ 'Socket Timeout':'Socket超时',
+ 'Connect timeout be a positive integer': '连接超时必须为数字',
+ 'Socket Timeout be a positive integer': 'Socket超时必须为数字',
+ 'ms':'毫秒',
+ zkDirectory: 'zk注册目录',
+ 'Directory detail': '查看目录详情',
+ 'Connection name': '连线名',
+ 'Current connection settings': '当前连线设置'
}