Improve the user experience in the task definition page (#1678)

define the architecture (include actions.js, dag.vue,formModel.vue,mutations.js, and state.js) and implement one of the tasks , such as http.vue.
This commit is contained in:
zhukai 2020-01-03 21:07:22 +08:00 committed by khadgarmage
parent 0a3954107e
commit cfe174293f
5 changed files with 121 additions and 19 deletions

View File

@ -156,8 +156,8 @@
}, },
methods: { methods: {
...mapActions('dag', ['saveDAGchart', 'updateInstance', 'updateDefinition', 'getTaskState']), ...mapActions('dag', ['saveDAGchart', 'updateInstance', 'updateDefinition', 'getTaskState']),
...mapMutations('dag', ['addTasks', 'resetParams', 'setIsEditDag', 'setName']), ...mapMutations('dag', ['addTasks', 'cacheTasks', 'resetParams', 'setIsEditDag', 'setName']),
// DAG automatic layout // DAG automatic layout
dagAutomaticLayout() { dagAutomaticLayout() {
$('#canvas').html('') $('#canvas').html('')
@ -495,6 +495,14 @@
removeNodesEvent(fromThis) removeNodesEvent(fromThis)
}, 100) }, 100)
}, },
/**
* Cache the item
* @param item
* @param fromThis
*/
cacheTaskInfo({item, fromThis}) {
self.cacheTasks(item)
},
close ({ flag, fromThis }) { close ({ flag, fromThis }) {
// Edit status does not allow deletion of nodes // Edit status does not allow deletion of nodes
if (flag) { if (flag) {

View File

@ -16,7 +16,7 @@
*/ */
<template> <template>
<div class="form-model-model" v-clickoutside="_handleClose"> <div class="form-model-model" v-clickoutside="_handleClose">
<div class="title-box"> <div class="title-box">
<span class="name">{{$t('Current node settings')}}</span> <span class="name">{{$t('Current node settings')}}</span>
<span class="go-subtask"> <span class="go-subtask">
<!-- Component can't pop up box to do component processing --> <!-- Component can't pop up box to do component processing -->
@ -184,6 +184,7 @@
<m-http <m-http
v-if="taskType === 'HTTP'" v-if="taskType === 'HTTP'"
@on-params="_onParams" @on-params="_onParams"
@on-cache-params="_onCacheParams"
ref="HTTP" ref="HTTP"
:backfill-item="backfillItem"> :backfill-item="backfillItem">
</m-http> </m-http>
@ -333,6 +334,31 @@
_onParams (o) { _onParams (o) {
this.params = Object.assign(this.params, {}, o) this.params = Object.assign(this.params, {}, o)
}, },
_onCacheParams (o) {
this.params = Object.assign(this.params, {}, o)
this._cacheItem()
},
_cacheItem () {
this.$emit('cacheTaskInfo', {
item: {
type: this.taskType,
id: this.id,
name: this.name,
params: this.params,
description: this.description,
runFlag: this.runFlag,
dependence: this.dependence,
maxRetryTimes: this.maxRetryTimes,
retryInterval: this.retryInterval,
timeout: this.timeout,
taskInstancePriority: this.taskInstancePriority,
workerGroupId: this.workerGroupId
},
fromThis: this
})
},
/** /**
* verification name * verification name
*/ */
@ -431,29 +457,43 @@
} }
}, },
watch: { watch: {
/**
* Watch the item change, cache the value it changes
**/
_item (val) {
this._cacheItem()
}
}, },
created () { created () {
// Unbind copy and paste events // Unbind copy and paste events
JSP.removePaste() JSP.removePaste()
// Backfill data // Backfill data
let taskList = this.store.state.dag.tasks let taskList = this.store.state.dag.tasks
//fillback use cacheTasks
let cacheTasks = this.store.state.dag.cacheTasks
let o = {} let o = {}
if (taskList.length) { if (cacheTasks[this.id]) {
taskList.forEach(v => { o = cacheTasks[this.id]
if (v.id === this.id) { this.backfillItem = cacheTasks[this.id]
o = v } else {
this.backfillItem = v if (taskList.length) {
taskList.forEach(v => {
if (v.id === this.id) {
o = v
this.backfillItem = v
}
})
} }
}) }
// Non-null objects represent backfill // Non-null objects represent backfill
if (!_.isEmpty(o)) { if (!_.isEmpty(o)) {
this.name = o.name this.name = o.name
this.taskInstancePriority = o.taskInstancePriority this.taskInstancePriority = o.taskInstancePriority
this.runFlag = o.runFlag || 'NORMAL' this.runFlag = o.runFlag || 'NORMAL'
this.description = o.description this.description = o.description
this.maxRetryTimes = o.maxRetryTimes this.maxRetryTimes = o.maxRetryTimes
this.retryInterval = o.retryInterval this.retryInterval = o.retryInterval
// If the workergroup has been deleted, set the default workergroup // If the workergroup has been deleted, set the default workergroup
var hasMatch = false; var hasMatch = false;
@ -471,7 +511,6 @@
this.workerGroupId = o.workerGroupId this.workerGroupId = o.workerGroupId
} }
}
} }
this.isContentBox = true this.isContentBox = true
}, },
@ -490,6 +529,23 @@
*/ */
_isGoSubProcess () { _isGoSubProcess () {
return this.taskType === 'SUB_PROCESS' && this.name return this.taskType === 'SUB_PROCESS' && this.name
},
//Define the item model
_item () {
return {
type: this.taskType,
id: this.id,
name: this.name,
description: this.description,
runFlag: this.runFlag,
dependence: this.dependence,
maxRetryTimes: this.maxRetryTimes,
retryInterval: this.retryInterval,
timeout: this.timeout,
taskInstancePriority: this.taskInstancePriority,
workerGroupId: this.workerGroupId
}
} }
}, },
components: { components: {

View File

@ -164,7 +164,26 @@
return true return true
} }
}, },
computed: {
cacheParams () {
return {
localParams: this.localParams,
httpParams: this.httpParams,
url: this.url,
httpMethod: this.httpMethod,
httpCheckCondition: this.httpCheckCondition,
condition: this.condition
}
}
},
watch: { watch: {
/**
* Watch the cacheParams
* @param val
*/
cacheParams (val) {
this.$emit('on-cache-params', val);
}
}, },
created () { created () {
let o = this.backfillItem let o = this.backfillItem

View File

@ -125,6 +125,11 @@ export default {
} else { } else {
state.tasks.push(payload) state.tasks.push(payload)
} }
if (state.cacheTasks[payload.id]) {
state.cacheTasks[payload.id] = Object.assign(state.cacheTasks[payload.id], {}, payload)
} else {
state.cacheTasks[payload.id] = payload;
}
let dom = $(`#${payload.id}`) let dom = $(`#${payload.id}`)
state.locations[payload.id] = _.assign(state.locations[payload.id], { state.locations[payload.id] = _.assign(state.locations[payload.id], {
name: dom.find('.name-p').text(), name: dom.find('.name-p').text(),
@ -132,5 +137,17 @@ export default {
x: parseInt(dom.css('left'), 10), x: parseInt(dom.css('left'), 10),
y: parseInt(dom.css('top'), 10) y: parseInt(dom.css('top'), 10)
}) })
},
/**
* Cache the input
* @param state
* @param payload
*/
cacheTasks (state, payload) {
if (state.cacheTasks[payload.id]) {
state.cacheTasks[payload.id] = Object.assign(state.cacheTasks[payload.id], {}, payload)
} else {
state.cacheTasks[payload.id] = payload;
}
} }
} }

View File

@ -29,6 +29,8 @@ export default {
globalParams: [], globalParams: [],
// Node information // Node information
tasks: [], tasks: [],
// Node cache information, cache the previous input
cacheTasks: {},
// Timeout alarm // Timeout alarm
timeout: 0, timeout: 0,
// tenant id // tenant id