Browse Source

Merge remote-tracking branch 'upstream/dev' into dev

pull/3/MERGE
dailidong 5 years ago
parent
commit
9e0f42fe48
  1. 1
      .github/workflows/ci_frontend.yml
  2. 3
      .github/workflows/ci_ut.yml
  3. 10
      dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
  4. 3
      dolphinscheduler-server/src/main/resources/config/install_config.conf
  5. 6
      dolphinscheduler-ui/.eslintrc
  6. 34
      dolphinscheduler-ui/.eslintrc.yml
  7. 8
      dolphinscheduler-ui/package.json
  8. 10
      dolphinscheduler-ui/src/js/conf/home/index.js
  9. 62
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/config.js
  10. 303
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js
  11. 14
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/commcon.js
  12. 6
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/jumpAffirm/index.js
  13. 22
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/downChart.js
  14. 3
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/dragZoom.js
  15. 156
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js
  16. 32
      dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js
  17. 26
      dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/gaugeOption.js
  18. 2
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/instanceConditions/common.js
  19. 4
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue
  20. 8
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/util.js
  21. 23
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/_source/tree.js
  22. 6
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/_source/util.js
  23. 9
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/chartConfig.js
  24. 33
      dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/_source/gantt.js
  25. 2
      dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/_source/common.js
  26. 1
      dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/details/_source/utils.js
  27. 18
      dolphinscheduler-ui/src/js/conf/home/pages/security/pages/users/_source/createUser.vue
  28. 16
      dolphinscheduler-ui/src/js/conf/home/router/index.js
  29. 72
      dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js
  30. 36
      dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js
  31. 4
      dolphinscheduler-ui/src/js/conf/home/store/dag/state.js
  32. 18
      dolphinscheduler-ui/src/js/conf/home/store/datasource/actions.js
  33. 8
      dolphinscheduler-ui/src/js/conf/home/store/monitor/actions.js
  34. 18
      dolphinscheduler-ui/src/js/conf/home/store/projects/actions.js
  35. 30
      dolphinscheduler-ui/src/js/conf/home/store/resource/actions.js
  36. 76
      dolphinscheduler-ui/src/js/conf/home/store/security/actions.js
  37. 2
      dolphinscheduler-ui/src/js/conf/home/store/security/state.js
  38. 14
      dolphinscheduler-ui/src/js/conf/home/store/user/actions.js
  39. 4
      dolphinscheduler-ui/src/js/conf/login/index.js
  40. 4
      dolphinscheduler-ui/src/js/module/ana-charts/common.js
  41. 2
      dolphinscheduler-ui/src/js/module/ana-charts/index.js
  42. 6
      dolphinscheduler-ui/src/js/module/ana-charts/packages/bar/index.js
  43. 4
      dolphinscheduler-ui/src/js/module/ana-charts/packages/funnel/index.js
  44. 4
      dolphinscheduler-ui/src/js/module/ana-charts/packages/line/index.js
  45. 10
      dolphinscheduler-ui/src/js/module/ana-charts/packages/pie/index.js
  46. 2
      dolphinscheduler-ui/src/js/module/ana-charts/packages/radar/index.js
  47. 2
      dolphinscheduler-ui/src/js/module/ana-charts/packages/scatter/index.js
  48. 64
      dolphinscheduler-ui/src/js/module/axios/querystring.js
  49. 1
      dolphinscheduler-ui/src/js/module/components/crontab/source/_source/i18n/index.js
  50. 86
      dolphinscheduler-ui/src/js/module/components/crontab/source/_source/i18n/locale/en_US.js
  51. 86
      dolphinscheduler-ui/src/js/module/components/crontab/source/_source/i18n/locale/zh_CN.js
  52. 26
      dolphinscheduler-ui/src/js/module/components/crontab/source/util/index.js
  53. 4
      dolphinscheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js
  54. 8
      dolphinscheduler-ui/src/js/module/download/index.js
  55. 351
      dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js
  56. 351
      dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js
  57. 11
      dolphinscheduler-ui/src/js/module/io/index.js
  58. 3
      dolphinscheduler-ui/src/js/module/mixin/disabledState.js
  59. 6
      dolphinscheduler-ui/src/js/module/mixin/listUrlParamHandle.js
  60. 4
      dolphinscheduler-ui/src/js/module/permissions/index.js
  61. 4
      dolphinscheduler-ui/src/js/module/util/index.js
  62. 3
      dolphinscheduler-ui/src/js/module/util/routerUtil.js
  63. 9
      dolphinscheduler-ui/src/js/module/util/util.js
  64. 2
      dolphinscheduler-ui/src/lib/external/config.js
  65. 2
      dolphinscheduler-ui/src/lib/external/email.js
  66. 2
      install.sh
  67. 1
      sql/dolphinscheduler_mysql.sql

1
.github/workflows/ci_frontend.yml

@ -50,6 +50,7 @@ jobs:
cd dolphinscheduler-ui
npm install node-sass --unsafe-perm
npm install
npm run lint
npm run build
License-check:

3
.github/workflows/ci_ut.yml

@ -75,6 +75,7 @@ jobs:
-Dsonar.core.codeCoveragePlugin=jacoco
-Dsonar.projectKey=apache-dolphinscheduler
-Dsonar.login=e4058004bc6be89decf558ac819aa1ecbee57682
-Dsonar.exclusions=dolphinscheduler-ui/src/**/i18n/locale/*.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
@ -83,4 +84,4 @@ jobs:
mkdir -p ${LOG_DIR}
cd ${DOCKER_DIR}
docker-compose logs db > ${LOG_DIR}/db.txt
continue-on-error: true
continue-on-error: true

10
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java

@ -782,6 +782,16 @@ public class ProcessDefinitionService extends BaseDAGService {
processDefinitionName, 1);
}
//unique check
Map<String, Object> checkResult = verifyProcessDefinitionName(loginUser, currentProjectName, processDefinitionName);
Status status = (Status) checkResult.get(Constants.STATUS);
if (Status.SUCCESS.equals(status)) {
putMsg(result, Status.SUCCESS);
} else {
result.putAll(checkResult);
return false;
}
// get create process result
Map<String, Object> createProcessResult =
getCreateProcessResult(loginUser,

3
dolphinscheduler-server/src/main/resources/config/install_config.conf

@ -27,6 +27,9 @@ dbhost="192.168.xx.xx:3306"
# db username
username="xx"
# database name
dbname="dolphinscheduler"
# db passwprd
# NOTICE: if there are special characters, please use the \ to escape, for example, `[` escape to `\[`
password="xx"

6
dolphinscheduler-ui/.eslintrc

@ -1,6 +0,0 @@
globals:
$: true
expect: true
rules:
"no-new": "off"
"no-labels": [2, {"allowLoop": true}]

34
dolphinscheduler-ui/.eslintrc.yml

@ -0,0 +1,34 @@
#
# 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.
#
env:
browser: true
es6: true
jquery: true
extends:
- 'plugin:vue/essential'
- standard
globals:
Atomics: readonly
SharedArrayBuffer: readonly
PUBLIC_PATH: readonly
parserOptions:
ecmaVersion: 2018
sourceType: module
plugins:
- vue
rules: {}

8
dolphinscheduler-ui/package.json

@ -8,6 +8,7 @@
"dev": "cross-env NODE_ENV=development webpack-dev-server --config ./build/webpack.config.dev.js",
"clean": "rimraf dist",
"start": "npm run dev",
"lint": "eslint ./src --fix",
"build:release": "npm run clean && cross-env NODE_ENV=production PUBLIC_PATH=/dolphinscheduler/ui webpack --config ./build/webpack.config.release.js"
},
"dependencies": {
@ -50,6 +51,13 @@
"css-loader": "^0.28.8",
"cssnano": "4.1.10",
"env-parse": "^1.0.5",
"eslint": "^6.8.0",
"eslint-config-standard": "^14.1.1",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.1",
"eslint-plugin-vue": "^6.2.2",
"file-loader": "^5.0.2",
"globby": "^8.0.1",
"html-loader": "^0.5.5",

10
dolphinscheduler-ui/src/js/conf/home/index.js

@ -31,15 +31,15 @@ import Permissions from '@/module/permissions'
import 'ans-ui/lib/ans-ui.min.css'
import ans from 'ans-ui/lib/ans-ui.min'
import en_US from 'ans-ui/lib/locale/en' // eslint-disable-line
import'normalize.css/normalize.css'
import 'normalize.css/normalize.css'
import 'sass/conf/home/index.scss'
import'bootstrap/dist/css/bootstrap.min.css'
import 'bootstrap/dist/css/bootstrap.min.css'
import'bootstrap/dist/js/bootstrap.min.js'
import 'bootstrap/dist/js/bootstrap.min.js'
import 'canvg/dist/browser/canvg.min.js'
// Component internationalization
let useOpt = i18n.globalScope.LOCALE === 'en_US' ? { locale: en_US } : {}
const useOpt = i18n.globalScope.LOCALE === 'en_US' ? { locale: en_US } : {}
// Vue.use(ans)
Vue.use(ans, useOpt)
@ -74,7 +74,7 @@ Permissions.request().then(res => {
methods: {
initApp () {
$('.global-loading').hide()
let bootstrapTooltip = $.fn.tooltip.noConflict()
const bootstrapTooltip = $.fn.tooltip.noConflict()
$.fn.tooltip = bootstrapTooltip
$('body').tooltip({
selector: '[data-toggle="tooltip"]',

62
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/config.js

@ -16,7 +16,6 @@
*/
import i18n from '@/module/i18n'
import Permissions from '@/module/permissions'
/**
* Operation bar config
@ -26,7 +25,7 @@ import Permissions from '@/module/permissions'
* @desc tooltip
*/
const toolOper = (dagThis) => {
let disabled =!!dagThis.$store.state.dag.isDetails// Permissions.getAuth() === false ? false : !dagThis.$store.state.dag.isDetails
const disabled = !!dagThis.$store.state.dag.isDetails// Permissions.getAuth() === false ? false : !dagThis.$store.state.dag.isDetails
return [
{
code: 'pointer',
@ -67,7 +66,7 @@ const toolOper = (dagThis) => {
* @desc tooltip
* @code Backend definition identifier
*/
let publishStatus = [
const publishStatus = [
{
id: 0,
desc: `${i18n.$t('Unpublished')}`,
@ -90,7 +89,7 @@ let publishStatus = [
* @desc tooltip
* @code identifier
*/
let runningType = [
const runningType = [
{
desc: `${i18n.$t('Start Process')}`,
code: 'START_PROCESS'
@ -146,85 +145,85 @@ let runningType = [
* @icoUnicode iconfont
* @isSpin is loading (Need to execute the code block to write if judgment)
*/
let tasksState = {
'SUBMITTED_SUCCESS': {
const tasksState = {
SUBMITTED_SUCCESS: {
id: 0,
desc: `${i18n.$t('Submitted successfully')}`,
color: '#A9A9A9',
icoUnicode: 'ans-icon-dot-circle',
isSpin: false
},
'RUNNING_EXEUTION': {
RUNNING_EXEUTION: {
id: 1,
desc: `${i18n.$t('Executing')}`,
color: '#0097e0',
icoUnicode: 'ans-icon-gear',
isSpin: true
},
'READY_PAUSE': {
READY_PAUSE: {
id: 2,
desc: `${i18n.$t('Ready to pause')}`,
color: '#07b1a3',
icoUnicode: 'ans-icon-pause-solid',
isSpin: false
},
'PAUSE': {
PAUSE: {
id: 3,
desc: `${i18n.$t('Pause')}`,
color: '#057c72',
icoUnicode: 'ans-icon-pause',
isSpin: false
},
'READY_STOP': {
READY_STOP: {
id: 4,
desc: `${i18n.$t('Ready to stop')}`,
color: '#FE0402',
icoUnicode: 'ans-icon-coin',
isSpin: false
},
'STOP': {
STOP: {
id: 5,
desc: `${i18n.$t('Stop')}`,
color: '#e90101',
icoUnicode: 'ans-icon-stop',
isSpin: false
},
'FAILURE': {
FAILURE: {
id: 6,
desc: `${i18n.$t('failed')}`,
color: '#000000',
icoUnicode: 'ans-icon-fail-empty',
isSpin: false
},
'SUCCESS': {
SUCCESS: {
id: 7,
desc: `${i18n.$t('success')}`,
color: '#33cc00',
icoUnicode: 'ans-icon-success-empty',
isSpin: false
},
'NEED_FAULT_TOLERANCE': {
NEED_FAULT_TOLERANCE: {
id: 8,
desc: `${i18n.$t('Need fault tolerance')}`,
color: '#FF8C00',
icoUnicode: 'ans-icon-pen',
isSpin: false
},
'KILL': {
KILL: {
id: 9,
desc: `${i18n.$t('kill')}`,
color: '#a70202',
icoUnicode: 'ans-icon-minus-circle-empty',
isSpin: false
},
'WAITTING_THREAD': {
WAITTING_THREAD: {
id: 10,
desc: `${i18n.$t('Waiting for thread')}`,
color: '#912eed',
icoUnicode: 'ans-icon-sand-clock',
isSpin: false
},
'WAITTING_DEPEND': {
WAITTING_DEPEND: {
id: 11,
desc: `${i18n.$t('Waiting for dependence')}`,
color: '#5101be',
@ -239,62 +238,61 @@ let tasksState = {
* @desc tooltip
* @color color (tree and gantt)
*/
let tasksType = {
'SHELL': {
const tasksType = {
SHELL: {
desc: 'SHELL',
color: '#646464'
},
'SUB_PROCESS': {
SUB_PROCESS: {
desc: 'SUB_PROCESS',
color: '#0097e0'
},
'PROCEDURE': {
PROCEDURE: {
desc: 'PROCEDURE',
color: '#525CCD'
},
'SQL': {
SQL: {
desc: 'SQL',
color: '#7A98A1'
},
'SPARK': {
SPARK: {
desc: 'SPARK',
color: '#E46F13'
},
'FLINK': {
FLINK: {
desc: 'FLINK',
color: '#E46F13'
},
'MR': {
MR: {
desc: 'MapReduce',
color: '#A0A5CC'
},
'PYTHON': {
PYTHON: {
desc: 'PYTHON',
color: '#FED52D'
},
'DEPENDENT': {
DEPENDENT: {
desc: 'DEPENDENT',
color: '#2FBFD8'
},
'HTTP': {
HTTP: {
desc: 'HTTP',
color: '#E46F13'
},
'DATAX': {
DATAX: {
desc: 'DataX',
color: '#1fc747'
},
'SQOOP': {
SQOOP: {
desc: 'SQOOP',
color: '#E46F13'
},
'CONDITIONS': {
CONDITIONS: {
desc: 'CONDITIONS',
color: '#E46F13'
}
}
export {
toolOper,
publishStatus,

303
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/dag.js

@ -24,7 +24,7 @@ import store from '@/conf/home/store'
/**
* Prototype method
*/
let Dag = function () {
const Dag = function () {
this.dag = {}
this.instance = {}
}
@ -49,7 +49,7 @@ Dag.prototype.setConfig = function (o) {
* create dag
*/
Dag.prototype.create = function () {
let self = this
const self = this
jsPlumb.ready(() => {
JSP.init({
dag: this.dag,
@ -98,36 +98,35 @@ Dag.prototype.toolbarEvent = function ({ item, code, is }) {
* Echo data display
*/
Dag.prototype.backfill = function (arg) {
if(arg) {
if (arg) {
let locationsValue = store.state.dag.locations
let locationsValue1 = store.state.dag.locations
let locationsValue2 = store.state.dag.locations
let arr = []
for (let i in locationsValue1) {
let objs = new Object();
const locationsValue1 = store.state.dag.locations
const locationsValue2 = store.state.dag.locations
const arr = []
for (const i in locationsValue1) {
const objs = {}
objs.id = i
arr.push(Object.assign(objs,locationsValue1[i])); //Attributes
arr.push(Object.assign(objs, locationsValue1[i])) // Attributes
}
let tmp = []
for(let i in locationsValue2) {
if(locationsValue2[i].targetarr !='' && locationsValue2[i].targetarr.split(',').length>1) {
const tmp = []
for (const i in locationsValue2) {
if (locationsValue2[i].targetarr !== '' && locationsValue2[i].targetarr.split(',').length > 1) {
tmp.push(locationsValue2[i])
}
}
function copy (array) {
let newArray = []
for(let item of array) {
newArray.push(item);
const copy = function (array) {
const newArray = []
for (const item of array) {
newArray.push(item)
}
return newArray;
return newArray
}
let newArr = copy(arr)
function getNewArr() {
for(let i= 0; i<newArr.length; i++) {
if(newArr[i].targetarr !='' && newArr[i].targetarr.split(',').length>1) {
const newArr = copy(arr)
const getNewArr = function () {
for (let i = 0; i < newArr.length; i++) {
if (newArr[i].targetarr !== '' && newArr[i].targetarr.split(',').length > 1) {
newArr[i].targetarr = newArr[i].targetarr.split(',').shift()
}
}
@ -141,154 +140,154 @@ Dag.prototype.backfill = function (arg) {
* @param {String} idStr id key name
* @param {String} childrenStr children key name
*/
function fommat({arrayList, pidStr = 'targetarr', idStr = 'id', childrenStr = 'children'}) {
let listOjb = {}; // Used to store objects of the form {key: obj}
let treeList = []; // An array to store the final tree structure data
// Transform the data into {key: obj} format, which is convenient for the following data processing
for (let i = 0; i < arrayList.length; i++) {
listOjb[arrayList[i][idStr]] = arrayList[i]
}
// Format data based on pid
for (let j = 0; j < arrayList.length; j++) {
// Determine if the parent exists
// let haveParent = arrayList[j].targetarr.split(',').length>1?listOjb[arrayList[j].targetarr.split(',')[0]]:listOjb[arrayList[j][pidStr]]
let haveParent = listOjb[arrayList[j][pidStr]]
if (haveParent) {
// If there is no parent children field, create a children field
!haveParent[childrenStr] && (haveParent[childrenStr] = [])
// Insert child in parent
haveParent[childrenStr].push(arrayList[j])
} else {
// If there is no parent, insert directly into the outermost layer
treeList.push(arrayList[j])
}
}
return treeList
const fommat = function ({ arrayList, pidStr = 'targetarr', idStr = 'id', childrenStr = 'children' }) {
const listOjb = {} // Used to store objects of the form {key: obj}
const treeList = [] // An array to store the final tree structure data
// Transform the data into {key: obj} format, which is convenient for the following data processing
for (let i = 0; i < arrayList.length; i++) {
listOjb[arrayList[i][idStr]] = arrayList[i]
}
let datas = fommat({arrayList: newArr,pidStr: 'targetarr'})
// Count the number of leaf nodes
function getLeafCountTree(json) {
if(!json.children) {
json.colspan = 1;
return 1;
// Format data based on pid
for (let j = 0; j < arrayList.length; j++) {
// Determine if the parent exists
// let haveParent = arrayList[j].targetarr.split(',').length>1?listOjb[arrayList[j].targetarr.split(',')[0]]:listOjb[arrayList[j][pidStr]]
const haveParent = listOjb[arrayList[j][pidStr]]
if (haveParent) {
// If there is no parent children field, create a children field
!haveParent[childrenStr] && (haveParent[childrenStr] = [])
// Insert child in parent
haveParent[childrenStr].push(arrayList[j])
} else {
let leafCount = 0;
for(let i = 0 ; i < json.children.length ; i++){
leafCount = leafCount + getLeafCountTree(json.children[i]);
}
json.colspan = leafCount;
return leafCount;
// If there is no parent, insert directly into the outermost layer
treeList.push(arrayList[j])
}
}
// Number of tree node levels
let countTree = getLeafCountTree(datas[0])
function getMaxFloor(treeData) {
let max = 0
function each (data, floor) {
data.forEach(e => {
e.floor = floor
e.x=floor*170
if (floor > max) {
max = floor
}
if (e.children) {
each(e.children, floor + 1)
}
})
}
each(treeData,1)
return max
return treeList
}
const datas = fommat({ arrayList: newArr, pidStr: 'targetarr' })
// Count the number of leaf nodes
const getLeafCountTree = function (json) {
if (!json.children) {
json.colspan = 1
return 1
} else {
let leafCount = 0
for (let i = 0; i < json.children.length; i++) {
leafCount = leafCount + getLeafCountTree(json.children[i])
}
getMaxFloor(datas)
// The last child of each node
let lastchildren = [];
forxh(datas);
function forxh(list) {
for (let i = 0; i < list.length; i++) {
let chlist = list[i];
if (chlist.children) {
forxh(chlist.children);
} else {
lastchildren.push(chlist);
}
json.colspan = leafCount
return leafCount
}
}
// Number of tree node levels
const countTree = getLeafCountTree(datas[0])
const getMaxFloor = function (treeData) {
let max = 0
function each (data, floor) {
data.forEach(e => {
e.floor = floor
e.x = floor * 170
if (floor > max) {
max = floor
}
}
// Get all parent nodes above the leaf node
function treeFindPath (tree, func, path,n) {
if (!tree) return []
for (const data of tree) {
path.push(data.name)
if (func(data)) return path
if (data.children) {
const findChildren = treeFindPath(data.children, func, path,n)
if (findChildren.length) return findChildren
}
path.pop()
if (e.children) {
each(e.children, floor + 1)
}
return []
}
function toLine(data){
return data.reduce((arrData, {id, name, targetarr, x, y, children = []}) =>
arrData.concat([{id, name, targetarr, x, y}], toLine(children)), [])
})
}
each(treeData, 1)
return max
}
getMaxFloor(datas)
// The last child of each node
let lastchildren = []
const forxh = function (list) {
for (let i = 0; i < list.length; i++) {
const chlist = list[i]
if (chlist.children) {
forxh(chlist.children)
} else {
lastchildren.push(chlist)
}
let listarr = toLine(datas);
let listarrs = toLine(datas)
let dataObject = {}
for(let i = 0; i<listarrs.length; i++) {
delete(listarrs[i].id)
}
}
forxh(datas)
// Get all parent nodes above the leaf node
const treeFindPath = function (tree, func, path, n) {
if (!tree) return []
for (const data of tree) {
path.push(data.name)
if (func(data)) return path
if (data.children) {
const findChildren = treeFindPath(data.children, func, path, n)
if (findChildren.length) return findChildren
}
path.pop()
}
return []
}
const toLine = function (data) {
return data.reduce((arrData, { id, name, targetarr, x, y, children = [] }) =>
arrData.concat([{ id, name, targetarr, x, y }], toLine(children)), [])
}
const listarr = toLine(datas)
const listarrs = toLine(datas)
const dataObject = {}
for (let i = 0; i < listarrs.length; i++) {
delete (listarrs[i].id)
}
for(let a = 0; a<listarr.length; a++) {
dataObject[listarr[a].id] = listarrs[a]
}
// Comparison function
function createComparisonFunction(propertyName) {
return function (object1,object2) {
let value1 = object1[propertyName];
let value2 = object2[propertyName];
for (let a = 0; a < listarr.length; a++) {
dataObject[listarr[a].id] = listarrs[a]
}
// Comparison function
const createComparisonFunction = function (propertyName) {
return function (object1, object2) {
const value1 = object1[propertyName]
const value2 = object2[propertyName]
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
};
if (value1 < value2) {
return -1
} else if (value1 > value2) {
return 1
} else {
return 0
}
}
}
lastchildren = lastchildren.sort(createComparisonFunction('x'))
lastchildren = lastchildren.sort(createComparisonFunction('x'))
// Coordinate value of each leaf node
for(let a = 0; a<lastchildren.length; a++) {
dataObject[lastchildren[a].id].y = (a+1)*120
}
for(let i =0 ; i<lastchildren.length; i++) {
let node = treeFindPath(datas, data=> data.targetarr===lastchildren[i].targetarr,[],i+1)
for(let j = 0; j<node.length; j++) {
for(let k= 0; k<listarrs.length; k++) {
if(node[j] == listarrs[k].name) {
listarrs[k].y = (i+1)*120
}
}
}
}
for(let i = 0; i<tmp.length; i++) {
for(let objs in dataObject) {
if(tmp[i].name == dataObject[objs].name) {
dataObject[objs].targetarr = tmp[i].targetarr
}
// Coordinate value of each leaf node
for (let a = 0; a < lastchildren.length; a++) {
dataObject[lastchildren[a].id].y = (a + 1) * 120
}
for (let i = 0; i < lastchildren.length; i++) {
const node = treeFindPath(datas, data => data.targetarr === lastchildren[i].targetarr, [], i + 1)
for (let j = 0; j < node.length; j++) {
for (let k = 0; k < listarrs.length; k++) {
if (node[j] === listarrs[k].name) {
listarrs[k].y = (i + 1) * 120
}
}
for(let a = 0; a<lastchildren.length; a++) {
dataObject[lastchildren[a].id].y = (a+1)*120
}
if(countTree>1) {
dataObject[Object.keys(locationsValue1)[0]].y = (countTree/2)*120+50
}
}
for (let i = 0; i < tmp.length; i++) {
for (const objs in dataObject) {
if (tmp[i].name === dataObject[objs].name) {
dataObject[objs].targetarr = tmp[i].targetarr
}
}
}
for (let a = 0; a < lastchildren.length; a++) {
dataObject[lastchildren[a].id].y = (a + 1) * 120
}
if (countTree > 1) {
dataObject[Object.keys(locationsValue1)[0]].y = (countTree / 2) * 120 + 50
}
locationsValue = dataObject
let self = this
const self = this
jsPlumb.ready(() => {
JSP.init({
dag: this.dag,
@ -310,7 +309,7 @@ Dag.prototype.backfill = function (arg) {
})
})
} else {
let self = this
const self = this
jsPlumb.ready(() => {
JSP.init({
dag: this.dag,

14
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/formModel/tasks/_source/commcon.js

@ -43,7 +43,7 @@ const cycleList = [
* cycle value
*/
const dateValueList = {
'hour': [
hour: [
{
value: 'last1Hour',
label: `${i18n.$t('Last1Hour')}`
@ -57,7 +57,7 @@ const dateValueList = {
label: `${i18n.$t('Last3Hours')}`
}
],
'day': [
day: [
{
value: 'today',
label: `${i18n.$t('today')}`
@ -79,7 +79,7 @@ const dateValueList = {
label: `${i18n.$t('Last7Days')}`
}
],
'week': [
week: [
{
value: 'thisWeek',
label: `${i18n.$t('ThisWeek')}`
@ -117,7 +117,7 @@ const dateValueList = {
label: `${i18n.$t('LastSunday')}`
}
],
'month': [
month: [
{
value: 'thisMonth',
label: `${i18n.$t('ThisMonth')}`
@ -221,15 +221,15 @@ const sqlTypeList = [
const positionList = [
{
id: 'PARAMETER',
code: "Parameter"
code: 'Parameter'
},
{
id: 'BODY',
code: "Body"
code: 'Body'
},
{
id: 'HEADERS',
code: "Headers"
code: 'Headers'
}
]
const nodeStatusList = [

6
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/jumpAffirm/index.js

@ -21,7 +21,7 @@ import store from '@/conf/home/store'
import router from '@/conf/home/router'
import { uuid, findComponentDownward } from '@/module/util/'
let Affirm = {}
const Affirm = {}
let $root = {}
let $routerType = ''
let $isPop = true
@ -59,7 +59,7 @@ Affirm.paramVerification = (name) => {
if (!$isPop) {
return true
}
let dagStore = store.state.dag
const dagStore = store.state.dag
let flag = false
if ($routerType === 'definition-create') {
// No nodes jump out directly
@ -100,7 +100,7 @@ Affirm.isPop = (fn) => {
Vue.$modal.destroy()
})
},
close () {
close () {
fn()
Vue.$modal.destroy()
}

22
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/downChart.js vendored

@ -21,7 +21,7 @@ import { tasksAll } from './util'
import html2canvas from 'html2canvas'
import { findComponentDownward } from '@/module/util/'
let DownChart = function () {
const DownChart = function () {
this.dag = {}
}
@ -31,10 +31,10 @@ let DownChart = function () {
DownChart.prototype.maxVal = function () {
return new Promise((resolve, reject) => {
// All nodes
let tasksAllList = tasksAll()
let dom = $('.dag-container')
let y = parseInt(_.maxBy(tasksAllList, 'y').y + 60)
let x = parseInt(_.maxBy(tasksAllList, 'x').x + 100)
const tasksAllList = tasksAll()
const dom = $('.dag-container')
const y = parseInt(_.maxBy(tasksAllList, 'y').y + 60)
const x = parseInt(_.maxBy(tasksAllList, 'x').x + 100)
resolve({
width: (x > 600 ? x : dom.width()) + 100,
@ -60,9 +60,9 @@ DownChart.prototype.download = function ({ dagThis }) {
// svg handle
const nodesToRecover = []
const nodesToRemove = []
let parentNode = node.parentNode
let svg = node.outerHTML.trim()
let canvas = document.createElement('canvas')
const parentNode = node.parentNode
const svg = node.outerHTML.trim()
const canvas = document.createElement('canvas')
canvg(canvas, svg)
if (node.style.position) {
canvas.style.position += node.style.position
@ -102,10 +102,10 @@ DownChart.prototype.download = function ({ dagThis }) {
heigth: height,
useCORS: true // Enable cross-domain configuration
}).then((canvas) => {
let name = `${this.dag.name}.png`
let url = canvas.toDataURL('image/png', 1)
const name = `${this.dag.name}.png`
const url = canvas.toDataURL('image/png', 1)
setTimeout(() => {
let triggerDownload = $('<a>').attr('href', url).attr('download', name).appendTo('body')
const triggerDownload = $('<a>').attr('href', url).attr('download', name).appendTo('body')
triggerDownload[0].click()
triggerDownload.remove()
}, 100)

3
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/dragZoom.js

@ -23,7 +23,7 @@ const DragZoom = function () {
}
DragZoom.prototype.init = function () {
let $canvas = $('#canvas')
const $canvas = $('#canvas')
this.element = d3.select('#canvas')
this.zoom = d3.behavior.zoom()
.scaleExtent([0.5, 2])
@ -35,5 +35,4 @@ DragZoom.prototype.init = function () {
this.element.call(this.zoom).on('dblclick.zoom', null)
}
export default new DragZoom()

156
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/jsPlumbHandle.js

@ -24,7 +24,6 @@ import { jsPlumb } from 'jsplumb'
import DragZoom from './dragZoom'
import store from '@/conf/home/store'
import router from '@/conf/home/router'
import Permissions from '@/module/permissions'
import { uuid, findComponentDownward } from '@/module/util/'
import {
@ -32,10 +31,11 @@ import {
rtTasksTpl,
setSvgColor,
saveTargetarr,
rtTargetarrArr } from './util'
rtTargetarrArr
} from './util'
import mStart from '@/conf/home/pages/projects/pages/definition/pages/list/_source/start'
let JSP = function () {
const JSP = function () {
this.dag = {}
this.selectedElement = {}
@ -75,7 +75,7 @@ JSP.prototype.init = function ({ dag, instance, options }) {
this.setConfig({
isDrag: !store.state.dag.isDetails,
isAttachment: false,
isNewNodes: !store.state.dag.isDetails,//Permissions.getAuth() === false ? false : !store.state.dag.isDetails,
isNewNodes: !store.state.dag.isDetails, // Permissions.getAuth() === false ? false : !store.state.dag.isDetails,
isDblclick: true,
isContextmenu: true,
isClick: false
@ -105,7 +105,7 @@ JSP.prototype.setConfig = function (o) {
* Node binding event
*/
JSP.prototype.tasksEvent = function (selfId) {
let tasks = $(`#${selfId}`)
const tasks = $(`#${selfId}`)
// Bind right event
tasks.on('contextmenu', e => {
this.tasksContextmenu(e)
@ -129,7 +129,7 @@ JSP.prototype.tasksEvent = function (selfId) {
JSP.prototype.draggable = function () {
if (this.config.isNewNodes) {
let selfId
let self = this
const self = this
$('.toolbar-btn .roundedRect').draggable({
scope: 'plant',
helper: 'clone',
@ -146,7 +146,7 @@ JSP.prototype.draggable = function () {
drop: function (ev, ui) {
let id = 'tasks-' + Math.ceil(Math.random() * 100000) // eslint-disable-line
// Get mouse coordinates
let left = parseInt(ui.offset.left - $(this).offset().left)
const left = parseInt(ui.offset.left - $(this).offset().left)
let top = parseInt(ui.offset.top - $(this).offset().top) - 10
if (top < 25) {
top = 25
@ -162,7 +162,7 @@ JSP.prototype.draggable = function () {
}))
// Get the generated node
let thisDom = jsPlumb.getSelector('.statemachine-demo .w')
const thisDom = jsPlumb.getSelector('.statemachine-demo .w')
// Generating a connection node
self.JspInstance.batch(() => {
@ -193,13 +193,13 @@ JSP.prototype.jsonHandle = function ({ largeJson, locations }) {
$('#canvas').append(rtTasksTpl({
id: v.id,
name: v.name,
x: locations[v.id]['x'],
y: locations[v.id]['y'],
targetarr: locations[v.id]['targetarr'],
x: locations[v.id].x,
y: locations[v.id].y,
targetarr: locations[v.id].targetarr,
isAttachment: this.config.isAttachment,
taskType: v.type,
runFlag: v.runFlag,
nodenumber: locations[v.id]['nodenumber'],
nodenumber: locations[v.id].nodenumber
}))
// contextmenu event
@ -263,29 +263,29 @@ JSP.prototype.initNode = function (el) {
*/
JSP.prototype.tasksContextmenu = function (event) {
if (this.config.isContextmenu) {
let routerName = router.history.current.name
const routerName = router.history.current.name
// state
let isOne = routerName === 'projects-definition-details' && this.dag.releaseState !== 'NOT_RELEASE'
const isOne = routerName === 'projects-definition-details' && this.dag.releaseState !== 'NOT_RELEASE'
// hide
let isTwo = store.state.dag.isDetails
const isTwo = store.state.dag.isDetails
let html = [
const html = [
`<a href="javascript:" id="startRunning" class="${isOne ? '' : 'disbled'}"><em class="ans-icon-play"></em><span>${i18n.$t('Start')}</span></a>`,
`<a href="javascript:" id="editNodes" class="${isTwo ? 'disbled' : ''}"><em class="ans-icon-edit"></em><span>${i18n.$t('Edit')}</span></a>`,
`<a href="javascript:" id="copyNodes" class="${isTwo ? 'disbled' : ''}"><em class="ans-icon-copy"></em><span>${i18n.$t('Copy')}</span></a>`,
`<a href="javascript:" id="removeNodes" class="${isTwo ? 'disbled' : ''}"><em class="ans-icon-trash"></em><span>${i18n.$t('Delete')}</span></a>`
]
let operationHtml = () => {
const operationHtml = () => {
return html.splice(',')
}
let e = event
let $id = e.currentTarget.id
let $contextmenu = $('#contextmenu')
let $name = $(`#${$id}`).find('.name-p').text()
let $left = e.pageX + document.body.scrollLeft - 5
let $top = e.pageY + document.body.scrollTop - 5
const e = event
const $id = e.currentTarget.id
const $contextmenu = $('#contextmenu')
const $name = $(`#${$id}`).find('.name-p').text()
const $left = e.pageX + document.body.scrollLeft - 5
const $top = e.pageY + document.body.scrollTop - 5
$contextmenu.css({
left: $left,
top: $top,
@ -297,10 +297,10 @@ JSP.prototype.tasksContextmenu = function (event) {
if (isOne) {
// start run
$('#startRunning').on('click', () => {
let name = store.state.dag.name
let id = router.history.current.params.id
const name = store.state.dag.name
const id = router.history.current.params.id
store.dispatch('dag/getStartCheck', { processDefinitionId: id }).then(res => {
let modal = Vue.$modal.dialog({
const modal = Vue.$modal.dialog({
closable: false,
showMask: true,
escClose: true,
@ -332,9 +332,9 @@ JSP.prototype.tasksContextmenu = function (event) {
})
})
}
if (!isTwo) {
if (!isTwo) {
// edit node
$(`#editNodes`).click(ev => {
$('#editNodes').click(ev => {
findComponentDownward(this.dag.$root, 'dag-chart')._createNodes({
id: $id,
type: $(`#${$id}`).attr('data-tasks-type')
@ -359,7 +359,7 @@ JSP.prototype.tasksContextmenu = function (event) {
JSP.prototype.tasksDblclick = function (e) {
// Untie event
if (this.config.isDblclick) {
let id = $(e.currentTarget.offsetParent).attr('id')
const id = $(e.currentTarget.offsetParent).attr('id')
findComponentDownward(this.dag.$root, 'dag-chart')._createNodes({
id: id,
@ -373,10 +373,10 @@ JSP.prototype.tasksDblclick = function (e) {
*/
JSP.prototype.tasksClick = function (e) {
let $id
let self = this
let $body = $(`body`)
const self = this
const $body = $('body')
if (this.config.isClick) {
let $connect = this.selectedElement.connect
const $connect = this.selectedElement.connect
$('.w').removeClass('jtk-tasks-active')
$(e.currentTarget).addClass('jtk-tasks-active')
if ($connect) {
@ -406,7 +406,7 @@ JSP.prototype.tasksClick = function (e) {
* paste
*/
JSP.prototype.removePaste = function () {
let $body = $(`body`)
const $body = $('body')
// Unbind copy and paste events
$body.unbind('copy').unbind('paste')
// Remove selected node parameters
@ -421,7 +421,7 @@ JSP.prototype.removePaste = function () {
JSP.prototype.connectClick = function (e) {
// Set svg color
setSvgColor(e, '#0097e0')
let $id = this.selectedElement.id
const $id = this.selectedElement.id
if ($id) {
$(`#${$id}`).removeClass('jtk-tasks-active')
this.selectedElement.id = null
@ -434,24 +434,10 @@ JSP.prototype.connectClick = function (e) {
* @param {Pointer}
*/
JSP.prototype.handleEventPointer = function (is) {
let wDom = $('.w')
this.setConfig({
isClick: is,
isAttachment: false
})
// wDom.removeClass('jtk-ep')
// if (!is) {
// wDom.removeClass('jtk-tasks-active')
// this.selectedElement = {}
// _.map($('#canvas svg'), v => {
// if ($(v).attr('class')) {
// _.map($(v).find('path'), v1 => {
// $(v1).attr('fill', '#555')
// $(v1).attr('stroke', '#555')
// })
// }
// })
// }
}
/**
@ -459,7 +445,7 @@ JSP.prototype.handleEventPointer = function (is) {
* @param {Line}
*/
JSP.prototype.handleEventLine = function (is) {
let wDom = $('.w')
const wDom = $('.w')
this.setConfig({
isAttachment: is
})
@ -471,8 +457,8 @@ JSP.prototype.handleEventLine = function (is) {
* @param {Remove}
*/
JSP.prototype.handleEventRemove = function () {
let $id = this.selectedElement.id || null
let $connect = this.selectedElement.connect || null
const $id = this.selectedElement.id || null
const $connect = this.selectedElement.connect || null
if ($id) {
this.removeNodes(this.selectedElement.id)
} else {
@ -489,9 +475,9 @@ JSP.prototype.handleEventRemove = function () {
JSP.prototype.removeNodes = function ($id) {
// Delete node processing(data-targetarr)
_.map(tasksAll(), v => {
let targetarr = v.targetarr.split(',')
const targetarr = v.targetarr.split(',')
if (targetarr.length) {
let newArr = _.filter(targetarr, v1 => v1 !== $id)
const newArr = _.filter(targetarr, v1 => v1 !== $id)
$(`#${v.id}`).attr('data-targetarr', newArr.toString())
}
})
@ -502,7 +488,7 @@ JSP.prototype.removeNodes = function ($id) {
$(`#${$id}`).remove()
// callback onRemoveNodes event
this.options&&this.options.onRemoveNodes&&this.options.onRemoveNodes($id)
this.options && this.options.onRemoveNodes && this.options.onRemoveNodes($id)
}
/**
@ -513,15 +499,15 @@ JSP.prototype.removeConnect = function ($connect) {
return
}
// Remove connections and remove node and node dependencies
let targetId = $connect.targetId
let sourceId = $connect.sourceId
const targetId = $connect.targetId
const sourceId = $connect.sourceId
let targetarr = rtTargetarrArr(targetId)
if (targetarr.length) {
targetarr = _.filter(targetarr, v => v !== sourceId)
$(`#${targetId}`).attr('data-targetarr', targetarr.toString())
}
if ($(`#${sourceId}`).attr('data-tasks-type')=='CONDITIONS') {
$(`#${sourceId}`).attr('data-nodenumber',Number($(`#${sourceId}`).attr('data-nodenumber'))-1)
if ($(`#${sourceId}`).attr('data-tasks-type') === 'CONDITIONS') {
$(`#${sourceId}`).attr('data-nodenumber', Number($(`#${sourceId}`).attr('data-nodenumber')) - 1)
}
this.JspInstance.deleteConnection($connect)
@ -533,24 +519,24 @@ JSP.prototype.removeConnect = function ($connect) {
*/
JSP.prototype.copyNodes = function ($id) {
let newNodeInfo = _.cloneDeep(_.find(store.state.dag.tasks, v => v.id === $id))
let newNodePors = store.state.dag.locations[$id]
const newNodePors = store.state.dag.locations[$id]
// Unstored nodes do not allow replication
if (!newNodePors) {
return
}
// Generate random id
let newUuId = `${uuid() + uuid()}`
let id = newNodeInfo.id.length > 8 ? newNodeInfo.id.substr(0, 7) : newNodeInfo.id
let name = newNodeInfo.name.length > 8 ? newNodeInfo.name.substr(0, 7) : newNodeInfo.name
const newUuId = `${uuid() + uuid()}`
const id = newNodeInfo.id.length > 8 ? newNodeInfo.id.substr(0, 7) : newNodeInfo.id
const name = newNodeInfo.name.length > 8 ? newNodeInfo.name.substr(0, 7) : newNodeInfo.name
// new id
let newId = `${id || ''}-${newUuId}`
const newId = `${id || ''}-${newUuId}`
// new name
let newName = `${name || ''}-${newUuId}`
const newName = `${name || ''}-${newUuId}`
// coordinate x
let newX = newNodePors.x + 100
const newX = newNodePors.x + 100
// coordinate y
let newY = newNodePors.y + 40
const newY = newNodePors.y + 40
// Generate template node
$('#canvas').append(rtTasksTpl({
@ -563,7 +549,7 @@ JSP.prototype.copyNodes = function ($id) {
}))
// Get the generated node
let thisDom = jsPlumb.getSelector('.statemachine-demo .w')
const thisDom = jsPlumb.getSelector('.statemachine-demo .w')
// Copy node information
newNodeInfo = Object.assign(newNodeInfo, {
@ -604,7 +590,7 @@ JSP.prototype.handleEventScreen = function ({ item, is }) {
item.icon = 'ans-icon-max'
screenOpen = false
}
let $mainLayoutModel = $('.main-layout-model')
const $mainLayoutModel = $('.main-layout-model')
if (screenOpen) {
$mainLayoutModel.addClass('dag-screen')
} else {
@ -619,21 +605,21 @@ JSP.prototype.handleEventScreen = function ({ item, is }) {
*/
JSP.prototype.saveStore = function () {
return new Promise((resolve, reject) => {
let connects = []
let locations = {}
let tasks = []
const connects = []
const locations = {}
const tasks = []
let is = (id) => {
const is = (id) => {
return !!_.filter(tasksAll(), v => v.id === id).length
}
// task
_.map(_.cloneDeep(store.state.dag.tasks), v => {
if (is(v.id)) {
let preTasks = []
let id = $(`#${v.id}`)
let tar = id.attr('data-targetarr')
let idDep = tar ? id.attr('data-targetarr').split(',') : []
const preTasks = []
const id = $(`#${v.id}`)
const tar = id.attr('data-targetarr')
const idDep = tar ? id.attr('data-targetarr').split(',') : []
if (idDep.length) {
_.map(idDep, v1 => {
preTasks.push($(`#${v1}`).find('.name-p').text())
@ -655,12 +641,11 @@ JSP.prototype.saveStore = function () {
_.map(this.JspInstance.getConnections(), v => {
connects.push({
'endPointSourceId': v.sourceId,
'endPointTargetId': v.targetId
endPointSourceId: v.sourceId,
endPointTargetId: v.targetId
})
})
_.map(tasksAll(), v => {
locations[v.id] = {
name: v.name,
@ -671,7 +656,6 @@ JSP.prototype.saveStore = function () {
}
})
// Storage node
store.commit('dag/setTasks', tasks)
// Store coordinate information
@ -692,14 +676,14 @@ JSP.prototype.saveStore = function () {
JSP.prototype.handleEvent = function () {
this.JspInstance.bind('beforeDrop', function (info) {
let sourceId = info['sourceId']// 出
let targetId = info['targetId']// 入
const sourceId = info.sourceId// 出
const targetId = info.targetId// 入
/**
* Recursive search for nodes
*/
let recursiveVal
const recursiveTargetarr = (arr, targetId) => {
for (let i in arr) {
for (const i in arr) {
if (arr[i] === targetId) {
recursiveVal = targetId
} else {
@ -719,10 +703,10 @@ JSP.prototype.handleEvent = function () {
return false
}
if ($(`#${sourceId}`).attr('data-tasks-type')=='CONDITIONS' && $(`#${sourceId}`).attr('data-nodenumber')==2) {
if ($(`#${sourceId}`).attr('data-tasks-type') === 'CONDITIONS' && $(`#${sourceId}`).attr('data-nodenumber') === 2) {
return false
} else {
$(`#${sourceId}`).attr('data-nodenumber',Number($(`#${sourceId}`).attr('data-nodenumber'))+1)
$(`#${sourceId}`).attr('data-nodenumber', Number($(`#${sourceId}`).attr('data-nodenumber')) + 1)
}
// Storage node dependency information
@ -744,7 +728,7 @@ JSP.prototype.jspBackfill = function ({ connects, locations, largeJson }) {
locations: locations
})
let wNodes = jsPlumb.getSelector('.statemachine-demo .w')
const wNodes = jsPlumb.getSelector('.statemachine-demo .w')
// Backfill line
this.JspInstance.batch(() => {

32
dolphinscheduler-ui/src/js/conf/home/pages/dag/_source/plugIn/util.js

@ -23,7 +23,7 @@ import store from '@/conf/home/store'
* Node, to array
*/
const rtTargetarrArr = (id) => {
let ids = $(`#${id}`).attr('data-targetarr')
const ids = $(`#${id}`).attr('data-targetarr')
return ids ? ids.split(',') : []
}
@ -31,8 +31,8 @@ const rtTargetarrArr = (id) => {
* Store node id to targetarr
*/
const saveTargetarr = (valId, domId) => {
let $target = $(`#${domId}`)
let targetStr = $target.attr('data-targetarr') ? $target.attr('data-targetarr') + `,${valId}` : `${valId}`
const $target = $(`#${domId}`)
const targetStr = $target.attr('data-targetarr') ? $target.attr('data-targetarr') + `,${valId}` : `${valId}`
$target.attr('data-targetarr', targetStr)
}
@ -44,20 +44,20 @@ const rtBantpl = () => {
* return node html
*/
const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType, runFlag, nodenumber }) => {
let tpl = ``
let tpl = ''
tpl += `<div class="w jtk-draggable jtk-droppable jtk-endpoint-anchor jtk-connected ${isAttachment ? 'jtk-ep' : ''}" data-targetarr="${targetarr || ''}" data-nodenumber="${nodenumber || 0}" data-tasks-type="${taskType}" id="${id}" style="left: ${x}px; top: ${y}px;">`
tpl += `<div>`
tpl += `<div class="state-p"></div>`
tpl += '<div>'
tpl += '<div class="state-p"></div>'
tpl += `<div class="icos icos-${taskType}"></div>`
tpl += `<span class="name-p">${name}</span>`
tpl += `</div>`
tpl += `<div class="ep"></div>`
tpl += `<div class="ban-p">`
tpl += '</div>'
tpl += '<div class="ep"></div>'
tpl += '<div class="ban-p">'
if (runFlag === 'FORBIDDEN') {
tpl += rtBantpl()
}
tpl += `</div>`
tpl += `</div>`
tpl += '</div>'
tpl += '</div>'
return tpl
}
@ -66,9 +66,9 @@ const rtTasksTpl = ({ id, name, x, y, targetarr, isAttachment, taskType, runFlag
* Get all tasks nodes
*/
const tasksAll = () => {
let a = []
const a = []
$('#canvas .w').each(function (idx, elem) {
let e = $(elem)
const e = $(elem)
a.push({
id: e.attr('id'),
name: e.find('.name-p').text(),
@ -117,10 +117,10 @@ const setSvgColor = (e, color) => {
* Get all node ids
*/
const allNodesId = () => {
let idArr = []
const idArr = []
$('.w').each((i, o) => {
let $obj = $(o)
let $span = $obj.find('.name-p').text()
const $obj = $(o)
const $span = $obj.find('.name-p').text()
if ($span) {
idArr.push({
id: $obj.attr('id'),

26
dolphinscheduler-ui/src/js/conf/home/pages/monitor/pages/servers/_source/gaugeOption.js

@ -30,21 +30,21 @@ export default function (value) {
color: [
[ 0.5, new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ // eslint-disable-line
offset: 1,
color: '#1CAD52'// 50% Color in place
color: '#1CAD52'// 50% Color in place
}, {
offset: 0.8,
color: '#1CAD52'// 40% Color in place
}], false) ], // 100% Color in place
color: '#1CAD52'// 40% Color in place
}], false)], // 100% Color in place
[ 0.7, new echarts.graphic.LinearGradient(0, 0, 1, 0, [{ // eslint-disable-line
offset: 1,
color: '#FFC539'// 70% Color in place
color: '#FFC539'// 70% Color in place
}, {
offset: 0.8,
color: '#FEEC49'// 66% Color in place
color: '#FEEC49'// 66% Color in place
}, {
offset: 0,
color: '#C7DD6B'// 50% Color in place
}], false) ],
color: '#C7DD6B'// 50% Color in place
}], false)],
[ 0.9, new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ // eslint-disable-line
offset: 1,
color: '#E75F25' // 90% Color in place
@ -54,14 +54,14 @@ export default function (value) {
}, {
offset: 0,
color: '#FFC539' // 70% Color in place
}], false) ],
}], false)],
[1, new echarts.graphic.LinearGradient(0, 0, 0, 1, [ { // eslint-disable-line
offset: 0.2,
color: '#E75F25' // 92% Color in place
}, {
offset: 0,
color: '#D9452C' // 90% Color in place
}], false) ]
}], false)]
],
width: 10
}
@ -92,10 +92,10 @@ export default function (value) {
show: true,
lineStyle: { // Property linestyle controls line style
color: [ // Dial Color
[ 0.5, '#20AE51' ], // 0-50%Color in place
[ 0.7, '#FFED44' ], // 51%-70%Color in place
[ 0.9, '#FF9618' ], // 70%-90%Color in place
[ 1, '#DA462C']// 90%-100%Color in place
[0.5, '#20AE51'], // 0-50%Color in place
[0.7, '#FFED44'], // 51%-70%Color in place
[0.9, '#FF9618'], // 70%-90%Color in place
[1, '#DA462C']// 90%-100%Color in place
],
width: 30// Dial width
}

2
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/_source/instanceConditions/common.js

@ -20,7 +20,7 @@ import i18n from '@/module/i18n'
/**
* State code table
*/
let stateType = [
const stateType = [
{
code: '',
label: `${i18n.$t('none')}`

4
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/list.vue

@ -92,7 +92,7 @@
<x-button type="info" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Timing')" @click="_timing(item)" :disabled="item.releaseState !== 'ONLINE' || item.scheduleReleaseState !== null" icon="ans-icon-timer"><!--{{$t('定时')}}--></x-button>
<x-button type="warning" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('online')" @click="_poponline(item)" v-if="item.releaseState === 'OFFLINE'" icon="ans-icon-upward"><!--{{$t('下线')}}--></x-button>
<x-button type="error" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('offline')" @click="_downline(item)" v-if="item.releaseState === 'ONLINE'" icon="ans-icon-downward"><!--{{$t('上线')}}--></x-button>
<x-button type="info" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Copy')" @click="_copyProcess(item)" :disabled="item.releaseState === 'ONLINE'" icon="ans-icon-copy"><!--{{$t('复制')}}--></x-button>
<x-button type="info" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Copy Workflow')" @click="_copyProcess(item)" :disabled="item.releaseState === 'ONLINE'" icon="ans-icon-copy"><!--{{$t('复制')}}--></x-button>
<x-button type="info" shape="circle" size="xsmall" data-toggle="tooltip" :title="$t('Cron Manage')" @click="_timingManage(item)" :disabled="item.releaseState !== 'ONLINE'" icon="ans-icon-datetime"><!--{{$t('定时管理')}}--></x-button>
<x-poptip
:ref="'poptip-delete-' + $index"
@ -166,6 +166,7 @@
},
methods: {
...mapActions('dag', ['editProcessState', 'getStartCheck', 'getReceiver', 'deleteDefinition', 'batchDeleteDefinition','exportDefinition','copyProcess']),
...mapActions('security', ['getWorkerGroupsAll']),
_rtPublishStatus (code) {
return _.filter(publishStatus, v => v.code === code)[0].desc
},
@ -176,6 +177,7 @@
* Start
*/
_start (item) {
this.getWorkerGroupsAll()
this.getStartCheck({ processDefinitionId: item.id }).then(res => {
let self = this
let modal = this.$modal.dialog({

8
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/util.js

@ -17,7 +17,7 @@
import i18n from '@/module/i18n'
let warningTypeList = [
const warningTypeList = [
{
id: 'NONE',
code: `${i18n.$t('none_1')}`
@ -42,9 +42,9 @@ const isEmial = (val) => {
}
const fuzzyQuery = (list, keyWord) => {
let len = list.length
let arr = []
let reg = new RegExp(keyWord)
const len = list.length
const arr = []
const reg = new RegExp(keyWord)
for (let i = 0; i < len; i++) {
if (list[i].match(reg)) {
arr.push(list[i])

23
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/_source/tree.js

@ -21,7 +21,7 @@ import { tasksType, tasksState } from '@/conf/home/pages/dag/_source/config'
let self = this
let Tree = function () {
const Tree = function () {
self = this
this.selfTree = {}
this.tree = function () {}
@ -57,7 +57,7 @@ Tree.prototype.init = function ({ data, limit, selfTree }) {
this.duration = 400
this.i = 0
this.tree = d3.layout.tree().nodeSize([0, 46])
let tasks = this.tree.nodes(data)
const tasks = this.tree.nodes(data)
this.diagonal = d3.svg
.diagonal()
@ -142,9 +142,9 @@ Tree.prototype.treeToggles = function (clicked_d) { // eslint-disable-line
*/
Tree.prototype.treeUpdate = function (source) {
return new Promise((resolve, reject) => {
let tasks = this.tree.nodes(this.root)
let height = Math.max(500, tasks.length * this.config.barHeight + this.config.margin.top + this.config.margin.bottom)
let width = (this.config.nodesMax * 70) + (this.squareNum * (this.config.squareSize + this.config.squarePading)) + this.config.margin.left + this.config.margin.right + 50
const tasks = this.tree.nodes(this.root)
const height = Math.max(500, tasks.length * this.config.barHeight + this.config.margin.top + this.config.margin.bottom)
const width = (this.config.nodesMax * 70) + (this.squareNum * (this.config.squareSize + this.config.squarePading)) + this.config.margin.left + this.config.margin.right + 50
d3.select('svg')
.transition()
@ -156,12 +156,12 @@ Tree.prototype.treeUpdate = function (source) {
n.x = i * this.config.barHeight
})
let task = this.svg.selectAll('g.node')
const task = this.svg.selectAll('g.node')
.data(tasks, (d) => {
return d.id || (d.id = ++this.i)
})
let nodeEnter = task.enter()
const nodeEnter = task.enter()
.append('g')
.attr('class', this.nodesClass)
.attr('transform', () => 'translate(' + source.y0 + ',' + source.x0 + ')')
@ -201,7 +201,7 @@ Tree.prototype.treeUpdate = function (source) {
}
})
.attr('class', 'state')
.style('fill', d => d.state && tasksState[d.state].color || '#ffffff')
.style('fill', d => (d.state && tasksState[d.state].color) || '#ffffff')
.attr('data-toggle', 'tooltip')
.attr('rx', d => d.type ? 0 : 12)
.attr('ry', d => d.type ? 0 : 12)
@ -231,7 +231,6 @@ Tree.prototype.treeUpdate = function (source) {
.attr('transform', d => 'translate(' + d.y + ',' + d.x + ')')
.style('opacity', 1)
// Convert the exit node to the new location of the parent node。
task.exit().transition()
.duration(this.duration)
@ -240,14 +239,14 @@ Tree.prototype.treeUpdate = function (source) {
.remove()
// Update link
let link = this.svg.selectAll('path.link')
const link = this.svg.selectAll('path.link')
.data(this.tree.links(tasks), d => d.target.id)
// Enter any new links in the previous location of the parent node。
link.enter().insert('path', 'g')
.attr('class', 'link')
.attr('d', (d) => {
let o = { x: source.x0, y: source.y0 }
const o = { x: source.x0, y: source.y0 }
return this.diagonal({ source: o, target: o })
})
.transition()
@ -263,7 +262,7 @@ Tree.prototype.treeUpdate = function (source) {
link.exit().transition()
.duration(this.duration)
.attr('d', (d) => {
let o = { x: source.x, y: source.y }
const o = { x: source.x, y: source.y }
return this.diagonal({ source: o, target: o })
})
.remove()

6
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/tree/_source/util.js

@ -22,7 +22,7 @@ import { tasksState } from '@/conf/home/pages/dag/_source/config'
* Node prompt dom
*/
const rtInstancesTooltip = (data) => {
let str = `<div style="text-align: left;word-break:break-all">`
let str = '<div style="text-align: left;word-break:break-all">'
str += `id : ${data.id}</br>`
str += `host : ${data.host}</br>`
str += `name : ${data.name}</br>`
@ -33,7 +33,7 @@ const rtInstancesTooltip = (data) => {
str += `startTime : ${data.startTime ? formatDate(data.startTime) : '-'}</br>`
str += `endTime : ${data.endTime ? formatDate(data.endTime) : '-'}</br>`
str += `duration : ${data.duration}</br>`
str += `</div>`
str += '</div>'
return str
}
@ -42,7 +42,7 @@ const rtInstancesTooltip = (data) => {
* Easy to calculate the width dynamically
*/
const rtCountMethod = list => {
let arr = []
const arr = []
function count (list, t) {
let toggle = false
list.forEach(v => {

9
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/index/_source/chartConfig.js

@ -18,7 +18,7 @@
import _ from 'lodash'
import { tasksState } from '@/conf/home/pages/dag/_source/config'
let pie = {
const pie = {
series: [
{
type: 'pie',
@ -37,7 +37,7 @@ let pie = {
]
}
let bar = {
const bar = {
title: {
text: ''
},
@ -56,7 +56,7 @@ let bar = {
},
tooltip: {
formatter (v) {
let val = v[0].name.split(',')
const val = v[0].name.split(',')
return `${val[0]} (${v[0].value})`
}
},
@ -66,7 +66,7 @@ let bar = {
}]
}
let simple = {
const simple = {
xAxis: {
splitLine: {
show: false
@ -93,7 +93,6 @@ let simple = {
},
color: ['#D5050B', '#0398E1']
}
export { pie, bar, simple }

33
dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/instance/pages/gantt/_source/gantt.js

@ -19,13 +19,13 @@ import * as d3 from 'd3'
import { formatDate } from '@/module/filter/filter'
import { tasksState } from '@/conf/home/pages/dag/_source/config'
let Gantt = function () {
const Gantt = function () {
this.el = ''
this.tasks = []
this.width = null
this.height = null
this.taskNames = []
this.tickFormat = `%H:%M:%S`
this.tickFormat = '%H:%M:%S'
this.margin = {
top: 10,
right: 40,
@ -41,20 +41,20 @@ Gantt.prototype.init = function ({ el, tasks }) {
this.tasks = tasks
this.taskNames = _.map(_.cloneDeep(tasks), v => v.taskName)
this.taskNames = this.taskNames.reduce(function (prev, cur) {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
},[])
prev.indexOf(cur) === -1 && prev.push(cur)
return prev
}, [])
this.height = parseInt(this.taskNames.length * 30)
this.width = $(this.el).width() - this.margin.right - this.margin.left - 5
this.x = d3.time.scale()
.domain([ this.startTimeXAxis, this.endTimeXAxis ])
.range([ 0, this.width ])
.domain([this.startTimeXAxis, this.endTimeXAxis])
.range([0, this.width])
.clamp(true)
this.y = d3.scale.ordinal()
.domain(this.taskNames)
.rangeRoundBands([ 0, this.height - this.margin.top - this.margin.bottom ], 0.1)
.rangeRoundBands([0, this.height - this.margin.top - this.margin.bottom], 0.1)
this.xAxis = d3.svg.axis()
.scale(this.x)
@ -97,13 +97,13 @@ Gantt.prototype.compXAxisTimes = function () {
*/
Gantt.prototype.initializeXAxis = function () {
this.x = d3.time.scale()
.domain([ this.startTimeXAxis, this.endTimeXAxis ])
.range([ 0, this.width ])
.domain([this.startTimeXAxis, this.endTimeXAxis])
.range([0, this.width])
.clamp(true)
this.y = d3.scale.ordinal()
.domain(this.taskNames)
.rangeRoundBands([ 0, this.height - this.margin.top - this.margin.bottom ], 0.1)
.rangeRoundBands([0, this.height - this.margin.top - this.margin.bottom], 0.1)
this.xAxis = d3.svg.axis()
.scale(this.x)
@ -151,9 +151,9 @@ Gantt.prototype.drawChart = function () {
.attr('transform', 'translate(0, ' + (this.height - this.margin.top - this.margin.bottom) + ')')
.transition()
.call(this.xAxis)
.selectAll("text")
.attr("transform", `rotate(-${this.width / ($('.tick').length - 1) > 50 ? 0 : Math.acos(this.width / ($('.tick').length - 1) / 50) * 57 })`)
.style("text-anchor", `${this.width / ($('.tick').length - 1) > 50 ? 'middle' : 'end'}`)
.selectAll('text')
.attr('transform', `rotate(-${this.width / ($('.tick').length - 1) > 50 ? 0 : Math.acos(this.width / ($('.tick').length - 1) / 50) * 57})`)
.style('text-anchor', `${this.width / ($('.tick').length - 1) > 50 ? 'middle' : 'end'}`)
svg.append('g')
.attr('class', 'y axis')
@ -169,15 +169,14 @@ Gantt.prototype.drawChart = function () {
* Tip prompt
*/
Gantt.prototype.tip = function (d) {
let str = `<div style="text-align: left;word-break:break-all">`
let str = '<div style="text-align: left;word-break:break-all">'
str += `taskName : ${d.taskName}</br>`
str += `status : ${tasksState[d.status].desc} (${d.status})</br>`
str += `startTime : ${formatDate(d.isoStart)}</br>`
str += `endTime : ${formatDate(d.isoEnd)}</br>`
str += `duration : ${d.duration}</br>`
str += `</div>`
str += '</div>'
return str
}
export default new Gantt()

2
dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/_source/common.js

@ -18,6 +18,6 @@
/**
* Create file type
*/
let filtTypeArr = ['txt', 'log', 'sh', 'conf', 'cfg', 'py', 'java', 'sql', 'xml', 'hql', 'properties']
const filtTypeArr = ['txt', 'log', 'sh', 'conf', 'cfg', 'py', 'java', 'sql', 'xml', 'hql', 'properties']
export { filtTypeArr }

1
dolphinscheduler-ui/src/js/conf/home/pages/resource/pages/file/pages/details/_source/utils.js

@ -32,7 +32,6 @@ const handlerSuffix = {
'.properties': 'textile'
}
export {
handlerSuffix
}

18
dolphinscheduler-ui/src/js/conf/home/pages/security/pages/users/_source/createUser.vue

@ -46,7 +46,7 @@
<m-list-box-f v-if="isADMIN">
<template slot="name"><strong>*</strong>{{$t('Tenant')}}</template>
<template slot="content">
<x-select v-model="tenantId">
<x-select v-model="tenantId" style="width: 100%;">
<x-option
v-for="city in tenantList"
:key="city.id"
@ -59,8 +59,8 @@
<m-list-box-f v-if="isADMIN">
<template slot="name">{{$t('Queue')}}</template>
<template slot="content">
<x-select v-model="queueName">
<x-input slot="trigger" slot-scope="{ selectedModel }" readonly :placeholder="$t('Please select a queue')" :value="selectedModel ? selectedModel.label : ''" style="width: 200px;" @on-click-icon.stop="queueName = ''">
<x-select v-model="queueName" style="width: 100%;">
<x-input slot="trigger" slot-scope="{ selectedModel }" readonly :placeholder="$t('Please select a queue')" :value="selectedModel ? selectedModel.label : ''" @on-click-icon.stop="queueName = ''">
<em slot="suffix" class="ans-icon-fail-solid" style="font-size: 15px;cursor: pointer;" v-show="queueName ==''"></em>
<em slot="suffix" class="ans-icon-arrow-down" style="font-size: 12px;" v-show="queueName!=''"></em>
</x-input>
@ -150,7 +150,7 @@
// Mobile phone number regular
let regPhone = /^1(3|4|5|6|7|8)\d{9}$/; // eslint-disable-line
let regPassword = /^(?![0-9]+$)(?![a-z]+$)(?![A-Z]+$)(?![`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]+$)[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、0-9A-Za-z]{6,22}$/;
// user name
@ -194,7 +194,7 @@
_getQueueList () {
return new Promise((resolve, reject) => {
this.store.dispatch('security/getQueueList').then(res => {
this.queueList = _.map(res, v => {
return {
id: v.id,
@ -229,12 +229,18 @@
},
_submit () {
this.$refs['popup'].spinnerLoading = true
let queueCode = '';
//get queue code
if (this.queueName != ''){
queueCode = this.queueList.length > 0 ? _.find(this.queueList, ['id', this.queueName]).code : ''
}
let param = {
userName: this.userName,
userPassword: this.userPassword,
tenantId: this.tenantId,
email: this.email,
queue: this.queueList.length>0? _.find(this.queueList, ['id', this.queueName]).code : '',
queue: queueCode,
phone: this.phone
}

16
dolphinscheduler-ui/src/js/conf/home/router/index.js

@ -426,7 +426,7 @@ const router = new Router({
name: 'monitor',
component: resolve => require(['../pages/monitor/index'], resolve),
meta: {
title: `monitor`
title: 'monitor'
},
redirect: {
name: 'servers-master'
@ -453,7 +453,7 @@ const router = new Router({
name: 'servers-alert',
component: resolve => require(['../pages/monitor/pages/servers/alert'], resolve),
meta: {
title: `Alert`
title: 'Alert'
}
},
{
@ -461,7 +461,7 @@ const router = new Router({
name: 'servers-rpcserver',
component: resolve => require(['../pages/monitor/pages/servers/rpcserver'], resolve),
meta: {
title: `Rpcserver`
title: 'Rpcserver'
}
},
{
@ -469,7 +469,7 @@ const router = new Router({
name: 'servers-zookeeper',
component: resolve => require(['../pages/monitor/pages/servers/zookeeper'], resolve),
meta: {
title: `Zookeeper`
title: 'Zookeeper'
}
},
{
@ -477,7 +477,7 @@ const router = new Router({
name: 'servers-apiserver',
component: resolve => require(['../pages/monitor/pages/servers/apiserver'], resolve),
meta: {
title: `Apiserver`
title: 'Apiserver'
}
},
{
@ -485,7 +485,7 @@ const router = new Router({
name: 'servers-db',
component: resolve => require(['../pages/monitor/pages/servers/db'], resolve),
meta: {
title: `DB`
title: 'DB'
}
},
{
@ -493,7 +493,7 @@ const router = new Router({
name: 'statistics',
component: resolve => require(['../pages/monitor/pages/servers/statistics'], resolve),
meta: {
title: `statistics`
title: 'statistics'
}
}
]
@ -502,7 +502,7 @@ const router = new Router({
})
router.beforeEach((to, from, next) => {
let $body = $('body')
const $body = $('body')
$body.find('.tooltip.fade.top.in').remove()
if (to.meta.title) {
document.title = `${to.meta.title} - DolphinScheduler`

72
dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js

@ -28,7 +28,7 @@ export default {
io.get(`projects/${state.projectName}/instance/task-list-by-process-id`, {
processInstanceId: payload
}, res => {
let arr = _.map(res.data.taskList, v => {
const arr = _.map(res.data.taskList, v => {
return _.cloneDeep(_.assign(tasksState[v.state], {
name: v.name,
stateId: v.id,
@ -108,7 +108,7 @@ export default {
// locations
state.locations = JSON.parse(res.data.locations)
// Process definition
let processDefinitionJson = JSON.parse(res.data.processDefinitionJson)
const processDefinitionJson = JSON.parse(res.data.processDefinitionJson)
// tasks info
state.tasks = processDefinitionJson.tasks
// tasks cache
@ -129,7 +129,7 @@ export default {
})
},
/**
/**
* Get process definition DAG diagram details
*/
copyProcess ({ state }, payload) {
@ -161,7 +161,7 @@ export default {
// locations
state.locations = JSON.parse(res.data.locations)
// process instance
let processInstanceJson = JSON.parse(res.data.processInstanceJson)
const processInstanceJson = JSON.parse(res.data.processInstanceJson)
// tasks info
state.tasks = processInstanceJson.tasks
// tasks cache
@ -176,7 +176,7 @@ export default {
state.tenantId = processInstanceJson.tenantId
//startup parameters
// startup parameters
state.startup = _.assign(state.startup, _.pick(res.data, ['commandType', 'failureStrategy', 'processInstancePriority', 'workerGroup', 'warningType', 'warningGroupId', 'receivers', 'receiversCc']))
state.startup.commandParam = JSON.parse(res.data.commandParam)
@ -191,7 +191,7 @@ export default {
*/
saveDAGchart ({ state }, payload) {
return new Promise((resolve, reject) => {
let data = {
const data = {
globalParams: state.globalParams,
tasks: state.tasks,
tenantId: state.tenantId,
@ -215,7 +215,7 @@ export default {
*/
updateDefinition ({ state }, payload) {
return new Promise((resolve, reject) => {
let data = {
const data = {
globalParams: state.globalParams,
tasks: state.tasks,
tenantId: state.tenantId,
@ -240,7 +240,7 @@ export default {
*/
updateInstance ({ state }, payload) {
return new Promise((resolve, reject) => {
let data = {
const data = {
globalParams: state.globalParams,
tasks: state.tasks,
tenantId: state.tenantId,
@ -294,16 +294,16 @@ export default {
getProjectList ({ state }, payload) {
return new Promise((resolve, reject) => {
if (state.projectListS.length) {
resolve()
return
}
io.get(`projects/query-project-list`, payload, res => {
state.projectListS = res.data
resolve(res.data)
}).catch(res => {
reject(res)
resolve()
return
}
io.get('projects/query-project-list', payload, res => {
state.projectListS = res.data
resolve(res.data)
}).catch(res => {
reject(res)
})
})
})
},
/**
* Get a list of process definitions by project id
@ -312,17 +312,17 @@ export default {
return new Promise((resolve, reject) => {
io.get(`projects/${state.projectName}/process/queryProcessDefinitionAllByProjectId`, payload, res => {
resolve(res.data)
}).catch(res => {
reject(res)
}).catch(res => {
reject(res)
})
})
})
},
/**
* get datasource
*/
getDatasourceList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`datasources/list`, {
io.get('datasources/list', {
type: payload
}, res => {
resolve(res)
@ -340,7 +340,7 @@ export default {
resolve()
return
}
io.get(`resources/list`, {
io.get('resources/list', {
type: 'FILE'
}, res => {
state.resourcesListS = res.data
@ -359,7 +359,7 @@ export default {
resolve()
return
}
io.get(`resources/list/jar`, {
io.get('resources/list/jar', {
type: 'FILE'
}, res => {
state.resourcesListJar = res.data
@ -387,7 +387,7 @@ export default {
*/
getNotifyGroupList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`alert-group/list`, res => {
io.get('alert-group/list', res => {
state.notifyGroupListS = _.map(res.data, v => {
return {
id: v.id,
@ -469,7 +469,7 @@ export default {
return new Promise((resolve, reject) => {
io.post(`projects/${state.projectName}/schedule/preview`, payload, res => {
resolve(res.data)
//alert(res.data)
// alert(res.data)
}).catch(e => {
reject(e)
})
@ -579,11 +579,11 @@ export default {
if (!data) {
return
}
let blob = new Blob([data])
let fileName = `${fileNameS}.json`
const blob = new Blob([data])
const fileName = `${fileNameS}.json`
if ('download' in document.createElement('a')) { // 不是IE浏览器
let url = window.URL.createObjectURL(blob)
let link = document.createElement('a')
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.style.display = 'none'
link.href = url
link.setAttribute('download', fileName)
@ -596,7 +596,7 @@ export default {
}
}
io.get(`projects/${state.projectName}/process/export`,{processDefinitionIds: payload.processDefinitionIds}, res => {
io.get(`projects/${state.projectName}/process/export`, {processDefinitionIds: payload.processDefinitionIds}, res => {
downloadBlob(res, payload.fileName)
}, e => {
@ -622,7 +622,7 @@ export default {
*/
getUdfList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/udf-func/list`, payload, res => {
io.get('resources/udf-func/list', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -646,7 +646,7 @@ export default {
*/
getTaskRecordList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/task-record/list-paging`, payload, res => {
io.get('projects/task-record/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -658,7 +658,7 @@ export default {
*/
getHistoryTaskRecordList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/task-record/history-list-paging`, payload, res => {
io.get('projects/task-record/history-list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -725,7 +725,7 @@ export default {
/**
* remove timing
*/
deleteTiming({ state }, payload){
deleteTiming ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/${state.projectName}/schedule/delete`, payload, res => {
resolve(res)
@ -736,11 +736,11 @@ export default {
},
getResourceId ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/queryResource`, payload, res => {
io.get('resources/queryResource', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
})
})
},
}
}

36
dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js

@ -100,27 +100,27 @@ export default {
*/
resetParams (state, payload) {
$('#canvas').html('')
state.globalParams = payload && payload.globalParams || []
state.tasks = payload && payload.tasks || []
state.name = payload && payload.name || ''
state.description = payload && payload.description || ''
state.timeout = payload && payload.timeout || 0
state.tenantId = payload && payload.tenantId || -1
state.processListS = payload && payload.processListS || []
state.resourcesListS = payload && payload.resourcesListS || []
state.resourcesListJar = payload && payload.resourcesListJar || []
state.projectListS = payload && payload.projectListS || []
state.isDetails = payload && payload.isDetails || false
state.runFlag = payload && payload.runFlag || ''
state.locations = payload && payload.locations || {}
state.connects = payload && payload.connects || []
state.globalParams = (payload && payload.globalParams) || []
state.tasks = (payload && payload.tasks) || []
state.name = (payload && payload.name) || ''
state.description = (payload && payload.description) || ''
state.timeout = (payload && payload.timeout) || 0
state.tenantId = (payload && payload.tenantId) || -1
state.processListS = (payload && payload.processListS) || []
state.resourcesListS = (payload && payload.resourcesListS) || []
state.resourcesListJar = (payload && payload.resourcesListJar) || []
state.projectListS = (payload && payload.projectListS) || []
state.isDetails = (payload && payload.isDetails) || false
state.runFlag = (payload && payload.runFlag) || ''
state.locations = (payload && payload.locations) || {}
state.connects = (payload && payload.connects) || []
},
/**
* add task
* object {}
*/
addTasks (state, payload) {
let i = _.findIndex(state.tasks, v => v.id === payload.id)
const i = _.findIndex(state.tasks, v => v.id === payload.id)
if (i !== -1) {
state.tasks[i] = Object.assign(state.tasks[i], {}, payload)
} else {
@ -129,9 +129,9 @@ export default {
if (state.cacheTasks[payload.id]) {
state.cacheTasks[payload.id] = Object.assign(state.cacheTasks[payload.id], {}, payload)
} else {
state.cacheTasks[payload.id] = payload;
state.cacheTasks[payload.id] = payload
}
let dom = $(`#${payload.id}`)
const dom = $(`#${payload.id}`)
state.locations[payload.id] = _.assign(state.locations[payload.id], {
name: dom.find('.name-p').text(),
targetarr: dom.attr('data-targetarr'),
@ -149,7 +149,7 @@ export default {
if (state.cacheTasks[payload.id]) {
state.cacheTasks[payload.id] = Object.assign(state.cacheTasks[payload.id], {}, payload)
} else {
state.cacheTasks[payload.id] = payload;
state.cacheTasks[payload.id] = payload
}
}
}

4
dolphinscheduler-ui/src/js/conf/home/store/dag/state.js

@ -18,7 +18,7 @@
import localStore from '@/module/util/localStorage'
// Get the name of the item currently clicked
let projectName = localStore.getItem('projectName')
const projectName = localStore.getItem('projectName')
export default {
// name
@ -34,7 +34,7 @@ export default {
// Timeout alarm
timeout: 0,
// tenant id
tenantId:-1,
tenantId: -1,
// Node location information
locations: {},
// Node-to-node connection

18
dolphinscheduler-ui/src/js/conf/home/store/datasource/actions.js

@ -27,7 +27,7 @@ export default {
*/
createDatasources ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`datasources/create`, payload, res => {
io.post('datasources/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -40,7 +40,7 @@ export default {
*/
connectDatasources ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`datasources/connect`, payload, res => {
io.post('datasources/connect', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -53,7 +53,7 @@ export default {
*/
getDatasourcesList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`datasources/list`, payload, res => {
io.get('datasources/list', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -68,7 +68,7 @@ export default {
*/
getDatasourcesListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`datasources/list-paging`, payload, res => {
io.get('datasources/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -80,7 +80,7 @@ export default {
*/
deleteDatasource ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`datasources/delete`, payload, res => {
io.get('datasources/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -92,7 +92,7 @@ export default {
*/
updateDatasource ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`datasources/update`, payload, res => {
io.post('datasources/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -101,7 +101,7 @@ export default {
},
getEditDatasource ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`datasources/update-ui`, payload, res => {
io.post('datasources/update-ui', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -110,7 +110,7 @@ export default {
},
verifyName ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`datasources/verify-name`, payload, res => {
io.get('datasources/verify-name', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -119,7 +119,7 @@ export default {
},
getKerberosStartupState ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`datasources/kerberos-startup-state`, payload, res => {
io.get('datasources/kerberos-startup-state', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)

8
dolphinscheduler-ui/src/js/conf/home/store/monitor/actions.js

@ -20,7 +20,7 @@ import io from '@/module/io'
export default {
getMasterData ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`monitor/master/list`, payload, res => {
io.get('monitor/master/list', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -29,7 +29,7 @@ export default {
},
getWorkerData ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`monitor/worker/list`, payload, res => {
io.get('monitor/worker/list', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -38,7 +38,7 @@ export default {
},
getDatabaseData ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`monitor/database`, payload, res => {
io.get('monitor/database', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -47,7 +47,7 @@ export default {
},
getZookeeperData ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`monitor/zookeeper/list`, payload, res => {
io.get('monitor/zookeeper/list', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)

18
dolphinscheduler-ui/src/js/conf/home/store/projects/actions.js

@ -23,7 +23,7 @@ export default {
*/
getProjectsList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/list-paging`, payload, res => {
io.get('projects/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -35,7 +35,7 @@ export default {
*/
createProjects ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`projects/create`, payload, res => {
io.post('projects/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -47,7 +47,7 @@ export default {
*/
deleteProjects ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/delete`, payload, res => {
io.get('projects/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -59,7 +59,7 @@ export default {
*/
updateProjects ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`projects/update`, payload, res => {
io.post('projects/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -71,7 +71,7 @@ export default {
*/
getTaskCtatusCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/task-state-count`, payload, res => {
io.get('projects/analysis/task-state-count', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -83,7 +83,7 @@ export default {
*/
getCommandStateCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/command-state-count`, payload, res => {
io.get('projects/analysis/command-state-count', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -95,7 +95,7 @@ export default {
*/
getQueueCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/queue-count`, payload, res => {
io.get('projects/analysis/queue-count', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -107,7 +107,7 @@ export default {
*/
getProcessStateCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/process-state-count`, payload, res => {
io.get('projects/analysis/process-state-count', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -119,7 +119,7 @@ export default {
*/
getDefineUserCount ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`projects/analysis/define-user-count`, payload, res => {
io.get('projects/analysis/define-user-count', payload, res => {
resolve(res)
}).catch(e => {
reject(e)

30
dolphinscheduler-ui/src/js/conf/home/store/resource/actions.js

@ -23,7 +23,7 @@ export default {
*/
getResourcesListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/list-paging`, payload, res => {
io.get('resources/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -32,7 +32,7 @@ export default {
},
getResourceId ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/queryResource`, payload, res => {
io.get('resources/queryResource', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -41,7 +41,7 @@ export default {
},
getResourcesList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/list`, payload, res => {
io.get('resources/list', payload, res => {
resolve(res)
}).catch(res => {
reject(res)
@ -53,7 +53,7 @@ export default {
*/
deleteResource ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/delete`, payload, res => {
io.get('resources/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -65,7 +65,7 @@ export default {
*/
resourceVerifyName ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/verify-name`, payload, res => {
io.get('resources/verify-name', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -77,7 +77,7 @@ export default {
*/
getViewResources ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/view`, payload, res => {
io.get('resources/view', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -89,7 +89,7 @@ export default {
*/
createUdfFunc ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`resources/udf-func/create`, payload, res => {
io.post('resources/udf-func/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -101,7 +101,7 @@ export default {
*/
updateUdfFunc ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`resources/udf-func/update`, payload, res => {
io.post('resources/udf-func/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -113,7 +113,7 @@ export default {
*/
verifyUdfFuncName ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/udf-func/verify-name`, payload, res => {
io.get('resources/udf-func/verify-name', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -126,7 +126,7 @@ export default {
*/
deleteUdf ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/udf-func/delete`, payload, res => {
io.get('resources/udf-func/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -138,7 +138,7 @@ export default {
*/
getUdfFuncListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`resources/udf-func/list-paging`, payload, res => {
io.get('resources/udf-func/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -150,7 +150,7 @@ export default {
*/
updateContent ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`resources/update-content`, payload, res => {
io.post('resources/update-content', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -162,7 +162,7 @@ export default {
*/
createResourceFile ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`resources/online-create`, payload, res => {
io.post('resources/online-create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -174,7 +174,7 @@ export default {
*/
createResourceFolder ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`resources/directory/create`, payload, res => {
io.post('resources/directory/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -186,7 +186,7 @@ export default {
*/
resourceRename ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`resources/update`, payload, res => {
io.post('resources/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)

76
dolphinscheduler-ui/src/js/conf/home/store/security/actions.js

@ -25,7 +25,7 @@ export default {
* @param tenant/verifyTenantCode
*/
verifyName ({ state }, payload) {
let o = {
const o = {
user: {
param: {
userName: payload.userName
@ -47,7 +47,7 @@ export default {
}
return new Promise((resolve, reject) => {
io.get(o[payload.type]['api'], o[payload.type]['param'], res => {
io.get(o[payload.type].api, o[payload.type].param, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -64,7 +64,7 @@ export default {
*/
createUser ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`users/create`, payload, res => {
io.post('users/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -77,7 +77,7 @@ export default {
*/
verifyUserName ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`users/verify-user-name`, payload, res => {
io.post('users/verify-user-name', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -92,7 +92,7 @@ export default {
*/
getUsersListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`users/list-paging`, payload, res => {
io.get('users/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -104,7 +104,7 @@ export default {
*/
getUsersList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`users/list`, payload, res => {
io.get('users/list', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -116,7 +116,7 @@ export default {
*/
getUsersAll ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`users/list-all`, payload, res => {
io.get('users/list-all', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -134,7 +134,7 @@ export default {
*/
updateUser ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`users/update`, payload, res => {
io.post('users/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -147,7 +147,7 @@ export default {
*/
deleteUser ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`users/delete`, payload, res => {
io.post('users/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -158,12 +158,12 @@ export default {
* Obtain authorized and unauthorized items
*/
getAuthList ({ state }, payload) {
let o = {
const o = {
type: payload.type,
category: payload.category
}
let param = {}
const param = {}
// Manage user
if (o.type === 'user') {
param.alertgroupId = payload.id
@ -197,12 +197,12 @@ export default {
},
getResourceList ({ state }, payload) {
let o = {
const o = {
type: payload.type,
category: payload.category
}
let param = {}
const param = {}
// Manage user
if (o.type === 'user') {
param.alertgroupId = payload.id
@ -254,7 +254,7 @@ export default {
*/
getUsersDetails ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`users/select-by-id`, payload, res => {
io.post('users/select-by-id', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -266,7 +266,7 @@ export default {
*/
getTenantListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`tenant/list-paging`, payload, res => {
io.get('tenant/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -278,8 +278,8 @@ export default {
*/
getTenantList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`tenant/list`, payload, res => {
let list=res.data
io.get('tenant/list', payload, res => {
const list = res.data
list.unshift({
id: -1,
tenantName: 'Default'
@ -296,7 +296,7 @@ export default {
*/
getQueueList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`queue/list`, payload, res => {
io.get('queue/list', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -308,7 +308,7 @@ export default {
*/
createQueue ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`tenant/create`, payload, res => {
io.post('tenant/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -320,7 +320,7 @@ export default {
*/
updateQueue ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`tenant/update`, payload, res => {
io.post('tenant/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -332,7 +332,7 @@ export default {
*/
deleteQueue ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`tenant/delete`, payload, res => {
io.post('tenant/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -344,7 +344,7 @@ export default {
*/
getAlertgroupP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`alert-group/list-paging`, payload, res => {
io.get('alert-group/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -356,7 +356,7 @@ export default {
*/
getAlertgroup ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`alert-group/list`, payload, res => {
io.get('alert-group/list', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -368,7 +368,7 @@ export default {
*/
createAlertgrou ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`alert-group/create`, payload, res => {
io.post('alert-group/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -380,7 +380,7 @@ export default {
*/
updateAlertgrou ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`alert-group/update`, payload, res => {
io.post('alert-group/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -392,7 +392,7 @@ export default {
*/
deleteAlertgrou ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`alert-group/delete`, payload, res => {
io.post('alert-group/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -404,7 +404,7 @@ export default {
*/
getProcessMasterList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`process/master/list`, payload, res => {
io.get('process/master/list', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -416,7 +416,7 @@ export default {
*/
getProcessWorkerList ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`process/worker/list`, payload, res => {
io.get('process/worker/list', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -428,7 +428,7 @@ export default {
*/
getQueueListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`queue/list-paging`, payload, res => {
io.get('queue/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -440,7 +440,7 @@ export default {
*/
createQueueQ ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`queue/create`, payload, res => {
io.post('queue/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -452,7 +452,7 @@ export default {
*/
updateQueueQ ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`queue/update`, payload, res => {
io.post('queue/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -464,7 +464,7 @@ export default {
*/
verifyQueueQ ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`queue/verify-queue`, payload, res => {
io.post('queue/verify-queue', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -476,7 +476,7 @@ export default {
*/
getWorkerGroups ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`worker-group/list-paging`, payload, res => {
io.get('worker-group/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -488,10 +488,10 @@ export default {
*/
getWorkerGroupsAll ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`worker-group/all-groups`, payload, res => {
io.get('worker-group/all-groups', payload, res => {
let list = res.data
if(list.length>0) {
list = list.map(item=>{
if (list.length > 0) {
list = list.map(item => {
return {
id: item,
name: item
@ -512,7 +512,7 @@ export default {
},
saveWorkerGroups ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`worker-group/save`, payload, res => {
io.post('worker-group/save', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -521,7 +521,7 @@ export default {
},
deleteWorkerGroups ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`worker-group/delete-by-id`, payload, res => {
io.get('worker-group/delete-by-id', payload, res => {
resolve(res)
}).catch(e => {
reject(e)

2
dolphinscheduler-ui/src/js/conf/home/store/security/state.js

@ -16,5 +16,5 @@
*/
export default {
workerGroupsListAll: [],
tenantAllList : []
tenantAllList: []
}

14
dolphinscheduler-ui/src/js/conf/home/store/user/actions.js

@ -23,7 +23,7 @@ export default {
*/
getUserInfo ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`users/get-user-info`, payload, res => {
io.get('users/get-user-info', payload, res => {
state.userInfo = res.data
resolve(res.data)
}).catch(e => {
@ -35,7 +35,7 @@ export default {
* sign out
*/
signOut () {
io.post(`signOut`, res => {
io.post('signOut', res => {
setTimeout(() => {
window.location.href = `${PUBLIC_PATH}/view/login/index.html`
}, 100)
@ -52,7 +52,7 @@ export default {
*/
getTokenListP ({ state }, payload) {
return new Promise((resolve, reject) => {
io.get(`access-token/list-paging`, payload, res => {
io.get('access-token/list-paging', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -68,7 +68,7 @@ export default {
*/
createToken ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`access-token/create`, payload, res => {
io.post('access-token/create', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -84,7 +84,7 @@ export default {
*/
updateToken ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`access-token/update`, payload, res => {
io.post('access-token/update', payload, res => {
resolve(res)
}).catch(e => {
reject(e)
@ -99,7 +99,7 @@ export default {
*/
generateToken ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`access-token/generate`, payload, res => {
io.post('access-token/generate', payload, res => {
resolve(res.data)
}).catch(e => {
reject(e)
@ -113,7 +113,7 @@ export default {
*/
deleteToken ({ state }, payload) {
return new Promise((resolve, reject) => {
io.post(`access-token/delete`, payload, res => {
io.post('access-token/delete', payload, res => {
resolve(res)
}).catch(e => {
reject(e)

4
dolphinscheduler-ui/src/js/conf/login/index.js

@ -25,7 +25,7 @@ import 'ans-ui/lib/ans-ui.min.css'
import ans from 'ans-ui/lib/ans-ui.min'
import 'sass/conf/login/index.scss'
import'bootstrap/dist/js/bootstrap.min.js'
import 'bootstrap/dist/js/bootstrap.min.js'
Vue.use(ans)
@ -41,7 +41,7 @@ new Vue({
},
methods: {
initApp () {
let bootstrapTooltip = $.fn.tooltip.noConflict()
const bootstrapTooltip = $.fn.tooltip.noConflict()
$.fn.tooltip = bootstrapTooltip
$('body').tooltip({
selector: '[data-toggle="tooltip"]',

4
dolphinscheduler-ui/src/js/module/ana-charts/common.js

@ -52,7 +52,7 @@ function getChartContainers (el) {
throw new Error('No corresponding DOM object found!')
}
let list
if (HTMLElement.prototype.isPrototypeOf(el)) {
if (Object.prototype.isPrototypeOf.call(HTMLElement.prototype, el)) {
list = new Array(el)
} else {
list = Array.from(el)
@ -70,7 +70,7 @@ function getChartContainers (el) {
*/
export const checkKeyInModel = (model, ...params) => {
for (const key of params) {
if (!model.hasOwnProperty(key)) {
if (!Object.prototype.hasOwnProperty.call(model, key)) {
throw new Error('Data format error! The specified property was not found:' + key)
}
}

2
dolphinscheduler-ui/src/js/module/ana-charts/index.js

@ -55,7 +55,7 @@ const Chart = {
// Corresponding methods for injection of different components
for (const key in components) {
if (components.hasOwnProperty(key)) {
if (Object.prototype.hasOwnProperty.call(components, key)) {
Chart[key.toLowerCase()] = (el, data, options) => {
return init(components[key], el, data, options)
}

6
dolphinscheduler-ui/src/js/module/ana-charts/packages/bar/index.js

@ -242,7 +242,7 @@ export default class Bar extends Base {
} = this.settings
const valueAxis = { type: 'value' }
let yAxisModel = reverseAxis ? xAxis : valueAxis
let xAxisModel = reverseAxis ? valueAxis : xAxis
const xAxisModel = reverseAxis ? valueAxis : xAxis
// Use custom Y-axis overlay
if (yAxis) {
yAxisModel = yAxis
@ -267,7 +267,7 @@ export default class Bar extends Base {
// time axis
if (timelineOptions) {
let opts = {
const opts = {
baseOption: {
timeline: timelineOptions.timeline,
tooltip: {
@ -296,7 +296,7 @@ export default class Bar extends Base {
// When the simple chart title is empty, the chart is vertically centered
const top = !title && this.simple ? '3%' : 60
let opts = {
const opts = {
title: {
text: title
},

4
dolphinscheduler-ui/src/js/module/ana-charts/packages/funnel/index.js

@ -118,10 +118,10 @@ export default class Funnel extends Base {
* Drawing charts
*/
apply () {
let { title, series, legendData } = this.options
const { title, series, legendData } = this.options
// Injection configuration to series
let { insertSeries } = this.settings
const { insertSeries } = this.settings
let _series = series
if (insertSeries && insertSeries.length && series.length) {
_series = this.injectDataIntoSeries(insertSeries, _series)

4
dolphinscheduler-ui/src/js/module/ana-charts/packages/line/index.js

@ -162,7 +162,7 @@ export default class Line extends Base {
} = this.settings
const valueAxis = { type: 'value' }
let yAxisModel = reverseAxis ? xAxis : valueAxis
let xAxisModel = reverseAxis ? valueAxis : xAxis
const xAxisModel = reverseAxis ? valueAxis : xAxis
// Use custom Y-axis overlay
if (yAxis) {
yAxisModel = yAxis
@ -175,7 +175,7 @@ export default class Line extends Base {
_series = this.injectDataIntoSeries(insertSeries, _series)
}
let opts = {
const opts = {
title: {
text: title
},

10
dolphinscheduler-ui/src/js/module/ana-charts/packages/pie/index.js

@ -60,8 +60,8 @@ export default class Pie extends Base {
checkKeyInModel(data[0], textKey, dataKey)
const legendData = []
let radius = ring ? ['50%', '70%'] : '60%'
let center = title ? ['50%', '60%'] : ['50%', '50%']
const radius = ring ? ['50%', '70%'] : '60%'
const center = title ? ['50%', '60%'] : ['50%', '50%']
const series = [{
radius: radius,
center: center,
@ -88,16 +88,16 @@ export default class Pie extends Base {
* Drawing charts
*/
apply () {
let { title, series, legendData } = this.options
const { title, series, legendData } = this.options
// Injection configuration to series
let { insertSeries } = this.settings
const { insertSeries } = this.settings
let _series = series
if (insertSeries && insertSeries.length && series.length) {
_series = this.injectDataIntoSeries(insertSeries, _series)
}
let opts = {
const opts = {
title: {
text: title,
x: 'center'

2
dolphinscheduler-ui/src/js/module/ana-charts/packages/radar/index.js

@ -87,7 +87,7 @@ export default class Radar extends Base {
targetSeries._raw.push(data[i])
// index
let targetIndicator = indicator.find(i => i.name === textItem)
const targetIndicator = indicator.find(i => i.name === textItem)
if (!targetIndicator) {
indicator.push({ name: textItem })
}

2
dolphinscheduler-ui/src/js/module/ana-charts/packages/scatter/index.js

@ -120,7 +120,7 @@ export default class Scatter extends Base {
apply () {
const { title, series, legendData = [] } = this.options
let {
const {
// Custom X axis
xAxis,
// Custom Y axis

64
dolphinscheduler-ui/src/js/module/axios/querystring.js

@ -16,45 +16,45 @@
*/
/* istanbul ignore next */
var param = function (a) {
var s = [],
rbracket = /\[\]$/,
isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]'
},
add = function (k, v) {
v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v
s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v)
},
buildParams = function (prefix, obj) {
var i, len, key
var s = []
var rbracket = /\[\]$/
var isArray = function (obj) {
return Object.prototype.toString.call(obj) === '[object Array]'
}
var add = function (k, v) {
v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v
s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v)
}
var buildParams = function (prefix, obj) {
var i, len, key
if (prefix) {
if (isArray(obj)) {
for (i = 0, len = obj.length; i < len; i++) {
if (rbracket.test(prefix)) {
add(prefix, obj[i])
} else {
buildParams(prefix + '[' + (typeof obj[i] === 'object' ? i : '') + ']', obj[i])
}
}
} else if (obj && String(obj) === '[object Object]') {
for (key in obj) {
buildParams(prefix + '[' + key + ']', obj[key])
}
} else {
add(prefix, obj)
}
} else if (isArray(obj)) {
if (prefix) {
if (isArray(obj)) {
for (i = 0, len = obj.length; i < len; i++) {
add(obj[i].name, obj[i].value)
if (rbracket.test(prefix)) {
add(prefix, obj[i])
} else {
buildParams(prefix + '[' + (typeof obj[i] === 'object' ? i : '') + ']', obj[i])
}
}
} else {
} else if (obj && String(obj) === '[object Object]') {
for (key in obj) {
buildParams(key, obj[key])
buildParams(prefix + '[' + key + ']', obj[key])
}
} else {
add(prefix, obj)
}
} else if (isArray(obj)) {
for (i = 0, len = obj.length; i < len; i++) {
add(obj[i].name, obj[i].value)
}
} else {
for (key in obj) {
buildParams(key, obj[key])
}
return s
}
return s
}
return buildParams('', a).join('&').replace(/%20/g, '+')
}

1
dolphinscheduler-ui/src/js/module/components/crontab/source/_source/i18n/index.js

@ -25,4 +25,3 @@ export default {
}
}
}

86
dolphinscheduler-ui/src/js/module/components/crontab/source/_source/i18n/locale/en_US.js

@ -15,62 +15,62 @@
* limitations under the License.
*/
export default {
'秒': 'second',
'分': 'minute',
'时': 'hour',
'天': 'day',
'月': 'month',
'年': 'year',
'星期一': 'Monday',
'星期二': 'Tuesday',
'星期三': 'Wednesday',
'星期四': 'Thursday',
'星期五': 'Friday',
'星期六': 'Saturday',
'星期天': 'Sunday',
'每一秒钟': 'Every second',
'每隔': 'Every',
: 'second',
: 'minute',
: 'hour',
: 'day',
: 'month',
: 'year',
星期一: 'Monday',
星期二: 'Tuesday',
星期三: 'Wednesday',
星期四: 'Thursday',
星期五: 'Friday',
星期六: 'Saturday',
星期天: 'Sunday',
每一秒钟: 'Every second',
每隔: 'Every',
'秒执行 ': 'second carried out',
'秒开始': 'Start',
秒开始: 'Start',
'具体秒数(可多选)': 'Specific second(multiple)',
'请选择具体秒数': 'Please enter a specific second',
'周期从': 'Cycle from',
'到': 'to',
'每一分钟': 'Every minute',
请选择具体秒数: 'Please enter a specific second',
周期从: 'Cycle from',
: 'to',
每一分钟: 'Every minute',
'分执行 ': 'minute carried out',
'分开始': 'Start',
分开始: 'Start',
'具体分钟数(可多选)': 'Specific minute(multiple)',
'请选择具体分钟数': 'Please enter a specific minute',
'每一小时': 'Every hour',
请选择具体分钟数: 'Please enter a specific minute',
每一小时: 'Every hour',
'小时执行 ': 'hour carried out',
'小时开始': 'Start',
小时开始: 'Start',
'具体小时数(可多选)': 'Specific hour(multiple)',
'请选择具体小时数': 'Please enter a hour',
'每一天': 'Every day',
请选择具体小时数: 'Please enter a hour',
每一天: 'Every day',
'周执行 ': 'week carried out',
'开始': 'Start',
开始: 'Start',
'天执行 ': 'day carried out',
'天开始': 'Start',
天开始: 'Start',
'具体星期几(可多选)': 'Specific day of the week(multiple)',
'请选择具体周几': 'Please enter a week',
请选择具体周几: 'Please enter a week',
'具体天数(可多选)': 'Specific days(multiple)',
'请选择具体天数': 'Please enter a days',
'在这个月的最后一天': 'On the last day of the month',
'在这个月的最后一个工作日': 'On the last working day of the month',
'在这个月的最后一个': 'At the last of this month',
'在本月底前': 'Before the end of this month',
请选择具体天数: 'Please enter a days',
在这个月的最后一天: 'On the last day of the month',
在这个月的最后一个工作日: 'On the last working day of the month',
在这个月的最后一个: 'At the last of this month',
在本月底前: 'Before the end of this month',
'最近的工作日周一至周五至本月': 'The most recent business day (Monday to Friday) to this month',
'在这个月的第': 'In this months',
'每一月': 'Every month',
在这个月的第: 'In this months',
每一月: 'Every month',
'月执行 ': 'month carried out',
'月开始': 'Start',
月开始: 'Start',
'具体月数(可多选)': 'Specific months(multiple)',
'请选择具体月数': 'Please enter a months',
'每一年': 'Every year',
请选择具体月数: 'Please enter a months',
每一年: 'Every year',
'年执行 ': 'year carried out',
'年开始': 'Start',
年开始: 'Start',
'具体年数(可多选)': 'Specific year(multiple)',
'请选择具体年数': 'Please enter a year',
'小时': 'hour',
'日': 'day'
请选择具体年数: 'Please enter a year',
小时: 'hour',
: 'day'
}

86
dolphinscheduler-ui/src/js/module/components/crontab/source/_source/i18n/locale/zh_CN.js

@ -15,62 +15,62 @@
* limitations under the License.
*/
export default {
'秒': '秒',
'分': '分',
'时': '时',
'天': '天',
'月': '月',
'年': '年',
'星期一': '星期一',
'星期二': '星期二',
'星期三': '星期三',
'星期四': '星期四',
'星期五': '星期五',
'星期六': '星期六',
'星期天': '星期天',
'每一秒钟': '每一秒钟',
'每隔': '每隔',
: '秒',
: '分',
: '时',
: '天',
: '月',
: '年',
星期一: '星期一',
星期二: '星期二',
星期三: '星期三',
星期四: '星期四',
星期五: '星期五',
星期六: '星期六',
星期天: '星期天',
每一秒钟: '每一秒钟',
每隔: '每隔',
'秒执行 ': '秒执行 ',
'秒开始': '秒开始',
秒开始: '秒开始',
'具体秒数(可多选)': '具体秒数(可多选)',
'请选择具体秒数': '请选择具体秒数',
'周期从': '周期从',
'到': '到',
'每一分钟': '每一分钟',
请选择具体秒数: '请选择具体秒数',
周期从: '周期从',
: '到',
每一分钟: '每一分钟',
'分执行 ': '分执行 ',
'分开始': '分开始',
分开始: '分开始',
'具体分钟数(可多选)': '具体分钟数(可多选)',
'请选择具体分钟数': '请选择具体分钟数',
'每一小时': '每一小时',
请选择具体分钟数: '请选择具体分钟数',
每一小时: '每一小时',
'小时执行 ': '小时执行 ',
'小时开始': '小时开始',
小时开始: '小时开始',
'具体小时数(可多选)': '具体小时数(可多选)',
'请选择具体小时数': '请选择具体小时数',
'每一天': '每一天',
请选择具体小时数: '请选择具体小时数',
每一天: '每一天',
'周执行 ': '周执行 ',
'开始': '开始',
开始: '开始',
'天执行 ': '天执行 ',
'天开始': '天开始',
天开始: '天开始',
'具体星期几(可多选)': '具体星期几(可多选)',
'请选择具体周几': '请选择具体周几',
请选择具体周几: '请选择具体周几',
'具体天数(可多选)': '具体天数(可多选)',
'请选择具体天数': '请选择具体天数',
'在这个月的最后一天': '在这个月的最后一天',
'在这个月的最后一个工作日': '在这个月的最后一个工作日',
'在这个月的最后一个': '在这个月的最后一个',
'在本月底前': '在本月底前',
请选择具体天数: '请选择具体天数',
在这个月的最后一天: '在这个月的最后一天',
在这个月的最后一个工作日: '在这个月的最后一个工作日',
在这个月的最后一个: '在这个月的最后一个',
在本月底前: '在本月底前',
'最近的工作日周一至周五至本月': '最近的工作日周一至周五至本月',
'在这个月的第': '在这个月的第',
'每一月': '每一月',
在这个月的第: '在这个月的第',
每一月: '每一月',
'月执行 ': '月执行 ',
'月开始': '月开始',
月开始: '月开始',
'具体月数(可多选)': '具体月数(可多选)',
'请选择具体月数': '请选择具体月数',
'每一年': '每一年',
请选择具体月数: '请选择具体月数',
每一年: '每一年',
'年执行 ': '年执行 ',
'年开始': '年开始',
年开始: '年开始',
'具体年数(可多选)': '具体年数(可多选)',
'请选择具体年数': '请选择具体年数',
'小时': '小时',
'日': '日'
请选择具体年数: '请选择具体年数',
小时: '小时',
: '日'
}

26
dolphinscheduler-ui/src/js/module/components/crontab/source/util/index.js

@ -23,37 +23,37 @@ import _ from 'lodash'
* @param end End value
*/
const range = (start, end) => {
let length = end - start + 1
const length = end - start + 1
let step = start - 1
return Array.apply(null, { length: length }).map(function (v, i) { step++; return step })
}
let selectList = {
'60': _.map(range(0, 59), v => {
const selectList = {
60: _.map(range(0, 59), v => {
return {
value: v + '',
label: v + ''
}
}),
'24': _.map(range(0, 23), v => {
24: _.map(range(0, 23), v => {
return {
value: v + '',
label: v + ''
}
}),
'12': _.map(range(0, 12), v => {
12: _.map(range(0, 12), v => {
return {
value: v + '',
label: v + ''
}
}),
'year': _.map(range(2018, 2030), v => {
year: _.map(range(2018, 2030), v => {
return {
value: v + '',
label: v + ''
}
}),
'week': [
week: [
{
value: 1,
label: '星期天'
@ -83,7 +83,7 @@ let selectList = {
label: '星期六'
}
],
'specificWeek': [
specificWeek: [
{
value: 'SUN',
label: 'SUN'
@ -113,13 +113,13 @@ let selectList = {
label: 'SAT'
}
],
'day': _.map(range(1, 31), v => {
day: _.map(range(1, 31), v => {
return {
value: v + '',
label: v + ''
}
}),
'lastWeeks': [
lastWeeks: [
{
value: '1L',
label: '星期天'
@ -161,8 +161,8 @@ const isStr = (str, v) => {
const isWeek = (str) => {
let flag = false
let data = str.split(',')
let isSpecificWeek = (key) => {
const data = str.split(',')
const isSpecificWeek = (key) => {
return _.findIndex(selectList.specificWeek, v => v.value === key) !== -1
}
_.map(data, v => {
@ -173,7 +173,6 @@ const isWeek = (str) => {
return flag
}
/**
* template
*
@ -206,7 +205,6 @@ const template = (string, ...args) => {
})
}
export {
selectList,
isStr,

4
dolphinscheduler-ui/src/js/module/components/secondaryMenu/_source/menu.js

@ -19,7 +19,7 @@ import i18n from '@/module/i18n'
import config from '~/external/config'
import Permissions from '@/module/permissions'
let menu = {
const menu = {
projects: [
{
name: `${i18n.$t('Project Home')}`,
@ -225,7 +225,7 @@ let menu = {
icon: 'ans-icon-menu',
children: [
{
name: "Statistics",
name: 'Statistics',
path: 'statistics',
id: 0,
disabled: true

8
dolphinscheduler-ui/src/js/module/download/index.js

@ -19,8 +19,8 @@ import i18n from '@/module/i18n'
/**
* download file
*/
let downloadFile = ($url, $obj) => {
let param = {
const downloadFile = ($url, $obj) => {
const param = {
url: $url,
obj: $obj
}
@ -30,9 +30,9 @@ let downloadFile = ($url, $obj) => {
return
}
let generatorInput = function (obj) {
const generatorInput = function (obj) {
let result = ''
let keyArr = Object.keys(obj)
const keyArr = Object.keys(obj)
keyArr.forEach(function (key) {
result += "<input type='hidden' name = '" + key + "' value='" + obj[key] + "'>"
})

351
dolphinscheduler-ui/src/js/module/i18n/locale/en_US.js

@ -18,11 +18,11 @@
export default {
'User Name': 'User Name',
'Please enter user name': 'Please enter user name',
'Password': 'Password',
Password: 'Password',
'Please enter your password': 'Please enter your password',
'Password consists of at least two combinations of numbers, letters, and characters, and the length is between 6-22': 'Password consists of at least two combinations of numbers, letters, and characters, and the length is between 6-22',
'Login': 'Login',
'Home': 'Home',
Login: 'Login',
Home: 'Home',
'Failed to create node to save': 'Failed to create node to save',
'Global parameters': 'Global parameters',
'Local parameters': 'Local parameters',
@ -36,14 +36,14 @@ export default {
'Node name': 'Node name',
'Please enter name(required)': 'Please enter name(required)',
'Run flag': 'Run flag',
'Normal': 'Normal',
Normal: 'Normal',
'Prohibition execution': 'Prohibition execution',
'Please enter description': 'Please enter description',
'Number of failed retries': 'Number of failed retries',
'Times': 'Times',
Times: 'Times',
'Failed retry interval': 'Failed retry interval',
'Minute': 'Minute',
'Cancel': 'Cancel',
Minute: 'Minute',
Cancel: 'Cancel',
'Confirm add': 'Confirm add',
'The newly created sub-Process has not yet been executed and cannot enter the sub-Process': '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': 'The task has not been executed and cannot enter the sub-Process',
@ -53,7 +53,7 @@ export default {
'Refresh Log': 'Refresh Log',
'Enter full screen': 'Enter full screen',
'Cancel full screen': 'Cancel full screen',
'Close': 'Close',
Close: 'Close',
'Update log success': 'Update log success',
'No more logs': 'No more logs',
'No log': 'No log',
@ -62,22 +62,23 @@ export default {
'Please enter description(optional)': 'Please enter description(optional)',
'Set global': 'Set global',
'Whether to update the process definition': 'Whether to update the process definition',
'Add': 'Add',
Add: 'Add',
'DAG graph name cannot be empty': 'DAG graph name cannot be empty',
'Create Datasource': 'Create Datasource',
'Project Home': 'Project Home',
'Project Manage': 'Project',
'Create Project': 'Create Project',
'Cron Manage': 'Cron Manage',
'Copy Workflow': 'Copy Workflow',
'Tenant Manage': 'Tenant Manage',
'Create Tenant': 'Create Tenant',
'User Manage': 'User Manage',
'Create User': 'Create User',
'User Information': 'User Information',
'Edit Password': 'Edit Password',
'success': 'success',
'failed': 'failed',
'delete': 'delete',
success: 'success',
failed: 'failed',
delete: 'delete',
'Please choose': 'Please choose',
'Please enter a positive integer': 'Please enter a positive integer',
'Program Type': 'Program Type',
@ -88,13 +89,13 @@ export default {
'Please enter Command-line parameters': 'Please enter Command-line parameters',
'Other parameters': 'Other parameters',
'Please enter other parameters': 'Please enter other parameters',
'Resources': 'Resources',
Resources: 'Resources',
'Custom Parameters': 'Custom Parameters',
'Custom template': 'Custom template',
'Datasource': 'Datasource',
'methods': 'methods',
Datasource: 'Datasource',
methods: 'methods',
'Please enter method(optional)': 'Please enter method(optional)',
'Script': 'Script',
Script: 'Script',
'Please enter script(required)': 'Please enter script(required)',
'Deploy Mode': 'Deploy Mode',
'Driver core number': 'Driver core number',
@ -112,11 +113,11 @@ export default {
'Please enter ExecutorPlease enter Executor core number': 'Please enter ExecutorPlease enter Executor core number',
'Core number should be positive integer': 'Core number should be positive integer',
'SQL Type': 'SQL Type',
'Title': 'Title',
Title: 'Title',
'Please enter the title of email': 'Please enter the title of email',
'Table': 'Table',
'TableMode': 'Table',
'Attachment': 'Attachment',
Table: 'Table',
TableMode: 'Table',
Attachment: 'Attachment',
'SQL Parameter': 'SQL Parameter',
'SQL Statement': 'SQL Statement',
'UDF Function': 'UDF Function',
@ -127,12 +128,12 @@ export default {
'Mail subject required': 'Mail subject required',
'Child Node': 'Child Node',
'Please select a sub-Process': 'Please select a sub-Process',
'Edit': 'Edit',
Edit: 'Edit',
'Datasource Name': 'Datasource Name',
'Please enter datasource name': 'Please enter datasource name',
'IP': 'IP',
IP: 'IP',
'Please enter IP': 'Please enter IP',
'Port': 'Port',
Port: 'Port',
'Please enter port': 'Please enter port',
'Database Name': 'Database Name',
'Please enter database name': 'Please enter database name',
@ -151,13 +152,13 @@ export default {
'Datasource Parameter': 'Datasource Parameter',
'Create Time': 'Create Time',
'Update Time': 'Update Time',
'Operation': 'Operation',
Operation: 'Operation',
'Click to view': 'Click to view',
'Delete?': 'Delete?',
'Confirm': 'Confirm',
Confirm: 'Confirm',
'Task status statistics': 'Task Status Statistics',
'Number': 'Number',
'State': 'State',
Number: 'Number',
State: 'State',
'Process Status Statistics': 'Process Status Statistics',
'Process Definition Statistics': 'Process Definition Statistics',
'Project Name': 'Project Name',
@ -165,42 +166,42 @@ export default {
'Owned Users': 'Owned Users',
'Process Pid': 'Process Pid',
'Zk registration directory': 'Zk registration directory',
'cpuUsage': 'cpuUsage',
'memoryUsage': 'memoryUsage',
cpuUsage: 'cpuUsage',
memoryUsage: 'memoryUsage',
'Last heartbeat time': 'Last heartbeat time',
'Edit Tenant': 'Edit Tenant',
'Tenant Code': 'Tenant Code',
'Tenant Name': 'Tenant Name',
'Queue': 'Queue',
'Please select a queue': 'Please select a queue',
Queue: 'Queue',
'Please select a queue': 'default is tenant association queue',
'Please enter the tenant code in English': 'Please enter the tenant code in English',
'Please enter tenant code in English': 'Please enter tenant code in English',
'Edit User': 'Edit User',
'Tenant': 'Tenant',
'Email': 'Email',
'Phone': 'Phone',
Tenant: 'Tenant',
Email: 'Email',
Phone: 'Phone',
'Please enter phone number': 'Please enter phone number',
'Please enter main class': 'Please enter main class',
'Please enter email': 'Please enter email',
'Please enter the correct email format': 'Please enter the correct email format',
'Please enter the correct mobile phone format': 'Please enter the correct mobile phone format',
'Project': 'Project',
'Authorize': 'Authorize',
Project: 'Project',
Authorize: 'Authorize',
'File resources': 'File resources',
'UDF resources': 'UDF resources',
'Please select UDF resources directory': 'Please select UDF resources directory',
'UDF resources directory' : 'UDF resources directory',
'UDF resources directory': 'UDF resources directory',
'Upload File Size': 'Upload File size cannot exceed 1g',
'Edit alarm group': 'Edit alarm group',
'Create alarm group': 'Create alarm group',
'Group Name': 'Group Name',
'Please enter group name': 'Please enter group name',
'Group Type': 'Group Type',
'Remarks': 'Remarks',
'SMS': 'SMS',
Remarks: 'Remarks',
SMS: 'SMS',
'Managing Users': 'Managing Users',
'Permission': 'Permission',
'Administrator': 'Administrator',
Permission: 'Permission',
Administrator: 'Administrator',
'Confirm Password': 'Confirm Password',
'Please enter confirm password': 'Please enter confirm password',
'Password cannot be in Chinese': 'Password cannot be in Chinese',
@ -210,7 +211,7 @@ export default {
'The password is inconsistent with the confirmation password': 'The password is inconsistent with the confirmation password',
'Please select the datasource': 'Please select the datasource',
'Please select resources': 'Please select resources',
'Query': 'Query',
Query: 'Query',
'Non Query': 'Non Query',
'prop(required)': 'prop(required)',
'value(optional)': 'value(optional)',
@ -220,18 +221,18 @@ export default {
'prop is repeat': 'prop is repeat',
'Start Time': 'Start Time',
'End Time': 'End Time',
'crontab': 'crontab',
crontab: 'crontab',
'Failure Strategy': 'Failure Strategy',
'online': 'online',
'offline': 'offline',
online: 'online',
offline: 'offline',
'Task Status': 'Task Status',
'Process Instance': 'Process Instance',
'Task Instance': 'Task Instance',
'Select date range': 'Select date range',
'Date': 'Date',
'waiting': 'waiting',
'execution': 'execution',
'finish': 'finish',
Date: 'Date',
waiting: 'waiting',
execution: 'execution',
finish: 'finish',
'Create File': 'Create File',
'Create folder': 'Create folder',
'File Name': 'File Name',
@ -239,13 +240,13 @@ export default {
'File Format': 'File Format',
'Folder Format': 'Folder Format',
'File Content': 'File Content',
'Create': 'Create',
Create: 'Create',
'Please enter the resource content': 'Please enter the resource content',
'Resource content cannot exceed 3000 lines': 'Resource content cannot exceed 3000 lines',
'File Details': 'File Details',
'Download Details': 'Download Details',
'Return': 'Return',
'Save': 'Save',
Return: 'Return',
Save: 'Save',
'File Manage': 'File Manage',
'Upload Files': 'Upload Files',
'Create UDF Function': 'Create UDF Function',
@ -253,22 +254,22 @@ export default {
'Service-Master': 'Service-Master',
'Service-Worker': 'Service-Worker',
'Process Name': 'Process Name',
'Executor': 'Executor',
Executor: 'Executor',
'Run Type': 'Run Type',
'Scheduling Time': 'Scheduling Time',
'Run Times': 'Run Times',
'host': 'host',
host: 'host',
'fault-tolerant sign': 'fault-tolerant sign',
'Rerun': 'Rerun',
Rerun: 'Rerun',
'Recovery Failed': 'Recovery Failed',
'Stop': 'Stop',
'Pause': 'Pause',
Stop: 'Stop',
Pause: 'Pause',
'Recovery Suspend': 'Recovery Suspend',
'Gantt': 'Gantt',
'Name': 'Name',
Gantt: 'Gantt',
Name: 'Name',
'Node Type': 'Node Type',
'Submit Time': 'Submit Time',
'Duration': 'Duration',
Duration: 'Duration',
'Retry Count': 'Retry Count',
'Task Name': 'Task Name',
'Task Date': 'Task Date',
@ -276,25 +277,25 @@ export default {
'Record Number': 'Record Number',
'Target Table': 'Target Table',
'Online viewing type is not supported': 'Online viewing type is not supported',
'Size': 'Size',
'Rename': 'Rename',
'Download': 'Download',
'Export': 'Export',
'Submit': 'Submit',
Size: 'Size',
Rename: 'Rename',
Download: 'Download',
Export: 'Export',
Submit: 'Submit',
'Edit UDF Function': 'Edit UDF Function',
'type': 'type',
type: 'type',
'UDF Function Name': 'UDF Function Name',
'FILE': 'FILE',
'UDF': 'UDF',
FILE: 'FILE',
UDF: 'UDF',
'File Subdirectory': 'File Subdirectory',
'Please enter a function name': 'Please enter a function name',
'Package Name': 'Package Name',
'Please enter a Package name': 'Please enter a Package name',
'Parameter': 'Parameter',
Parameter: 'Parameter',
'Please enter a parameter': 'Please enter a parameter',
'UDF Resources': 'UDF Resources',
'Upload Resources': 'Upload Resources',
'Instructions': 'Instructions',
Instructions: 'Instructions',
'Please enter a instructions': 'Please enter a instructions',
'Please enter a UDF function name': 'Please enter a UDF function name',
'Select UDF Resources': 'Select UDF Resources',
@ -303,52 +304,52 @@ export default {
'Library Name': 'Library Name',
'UDF Resource Name': 'UDF Resource Name',
'File Size': 'File Size',
'Description': 'Description',
Description: 'Description',
'Drag Nodes and Selected Items': 'Drag Nodes and Selected Items',
'Select Line Connection': 'Select Line Connection',
'Delete selected lines or nodes': 'Delete selected lines or nodes',
'Full Screen': 'Full Screen',
'Unpublished': 'Unpublished',
Unpublished: 'Unpublished',
'Start Process': 'Start Process',
'Execute from the current node': 'Execute from the current node',
'Recover tolerance fault process': 'Recover tolerance fault process',
'Resume the suspension process': 'Resume the suspension process',
'Execute from the failed nodes': 'Execute from the failed nodes',
'Complement Data': 'Complement Data',
'slot':'slot',
'taskManager':'taskManager',
'jobManagerMemory':'jobManagerMemory',
'taskManagerMemory':'taskManagerMemory',
slot: 'slot',
taskManager: 'taskManager',
jobManagerMemory: 'jobManagerMemory',
taskManagerMemory: 'taskManagerMemory',
'Scheduling execution': 'Scheduling execution',
'Recovery waiting thread': 'Recovery waiting thread',
'Submitted successfully': 'Submitted successfully',
'Executing': 'Executing',
Executing: 'Executing',
'Ready to pause': 'Ready to pause',
'Ready to stop': 'Ready to stop',
'Need fault tolerance': 'Need fault tolerance',
'kill': 'kill',
kill: 'kill',
'Waiting for thread': 'Waiting for thread',
'Waiting for dependence': 'Waiting for dependence',
'Start': 'Start',
'Copy': 'Copy',
Start: 'Start',
Copy: 'Copy',
'Copy name': 'Copy name',
'Delete': 'Delete',
Delete: 'Delete',
'Please enter keyword': 'Please enter keyword',
'File Upload': 'File Upload',
'Drag the file into the current upload window': 'Drag the file into the current upload window',
'Drag area upload': 'Drag area upload',
'Upload': 'Upload',
Upload: 'Upload',
'Please enter file name': 'Please enter file name',
'Please select the file to upload': 'Please select the file to upload',
'Resources manage': 'Resources',
'Security': 'Security',
'Logout': 'Logout',
Security: 'Security',
Logout: 'Logout',
'No data': 'No data',
'Uploading...': 'Uploading...',
'Loading...': 'Loading...',
'List': 'List',
List: 'List',
'Unable to download without proper url': 'Unable to download without proper url',
'Process': 'Process',
Process: 'Process',
'Process definition': 'Process definition',
'Task record': 'Task record',
'Warning group manage': 'Warning group manage',
@ -361,13 +362,13 @@ export default {
'Create process': 'Create process',
'Import process': 'Import process',
'Timing state': 'Timing state',
'Timing': 'Timing',
'TreeView': 'TreeView',
Timing: 'Timing',
TreeView: 'TreeView',
'Mailbox already exists! Recipients and copyers cannot repeat': 'Mailbox already exists! Recipients and copyers cannot repeat',
'Mailbox input is illegal': 'Mailbox input is illegal',
'Please set the parameters before starting': 'Please set the parameters before starting',
'Continue': 'Continue',
'End': 'End',
Continue: 'Continue',
End: 'End',
'Node execution': 'Node execution',
'Backward execution': 'Backward execution',
'Forward execution': 'Forward execution',
@ -375,8 +376,8 @@ export default {
'Notification strategy': 'Notification strategy',
'Notification group': 'Notification group',
'Please select a notification group': 'Please select a notification group',
'Recipient': 'Recipient',
'Cc': 'Cc',
Recipient: 'Recipient',
Cc: 'Cc',
'Whether it is a complement process?': 'Whether it is a complement process?',
'Schedule date': 'Schedule date',
'Mode of execution': 'Mode of execution',
@ -386,15 +387,15 @@ export default {
'Start and stop time': 'Start and stop time',
'Please select time': 'Please select time',
'Please enter crontab': 'Please enter crontab',
'none_1': 'none',
'success_1': 'success',
'failure_1': 'failure',
'All_1': 'All',
'Toolbar': 'Toolbar',
none_1: 'none',
success_1: 'success',
failure_1: 'failure',
All_1: 'All',
Toolbar: 'Toolbar',
'View variables': 'View variables',
'Format DAG': 'Format DAG',
'Refresh DAG status': 'Refresh DAG status',
'Return_1': 'Return',
Return_1: 'Return',
'Please enter format': 'Please enter format',
'connection parameter': 'connection parameter',
'Process definition details': 'Process definition details',
@ -404,8 +405,8 @@ export default {
'Create Resource': 'Create Resource',
'User Center': 'User Center',
'Please enter method': 'Please enter method',
'none': 'none',
'name': 'name',
none: 'none',
name: 'name',
'Process priority': 'Process priority',
'Task priority': 'Task priority',
'Task timeout alarm': 'Task timeout alarm',
@ -416,36 +417,36 @@ export default {
'Timeout strategy must be selected': 'Timeout strategy must be selected',
'Timeout must be a positive integer': 'Timeout must be a positive integer',
'Add dependency': 'Add dependency',
'and': 'and',
'or': 'or',
'month': 'month',
'week': 'week',
'day': 'day',
'hour': 'hour',
'Running': 'Running',
and: 'and',
or: 'or',
month: 'month',
week: 'week',
day: 'day',
hour: 'hour',
Running: 'Running',
'Waiting for dependency to complete': 'Waiting for dependency to complete',
'Selected': 'Selected',
'Last1Hour': 'Last1Hour',
'Last2Hours': 'Last2Hours',
'Last3Hours': 'Last3Hours',
'today': 'today',
'Last1Days': 'Last1Days',
'Last2Days': 'Last2Days',
'Last3Days': 'Last3Days',
'Last7Days': 'Last7Days',
'ThisWeek': 'ThisWeek',
'LastWeek': 'LastWeek',
'LastMonday': 'LastMonday',
'LastTuesday': 'LastTuesday',
'LastWednesday': 'LastWednesday',
'LastThursday': 'LastThursday',
'LastFriday': 'LastFriday',
'LastSaturday': 'LastSaturday',
'LastSunday': 'LastSunday',
'ThisMonth': 'ThisMonth',
'LastMonth': 'LastMonth',
'LastMonthBegin': 'LastMonthBegin',
'LastMonthEnd': 'LastMonthEnd',
Selected: 'Selected',
Last1Hour: 'Last1Hour',
Last2Hours: 'Last2Hours',
Last3Hours: 'Last3Hours',
today: 'today',
Last1Days: 'Last1Days',
Last2Days: 'Last2Days',
Last3Days: 'Last3Days',
Last7Days: 'Last7Days',
ThisWeek: 'ThisWeek',
LastWeek: 'LastWeek',
LastMonday: 'LastMonday',
LastTuesday: 'LastTuesday',
LastWednesday: 'LastWednesday',
LastThursday: 'LastThursday',
LastFriday: 'LastFriday',
LastSaturday: 'LastSaturday',
LastSunday: 'LastSunday',
ThisMonth: 'ThisMonth',
LastMonth: 'LastMonth',
LastMonthBegin: 'LastMonthBegin',
LastMonthEnd: 'LastMonthEnd',
'Refresh status succeeded': 'Refresh status succeeded',
'Queue manage': 'Queue manage',
'Create queue': 'Create queue',
@ -464,21 +465,21 @@ export default {
'Please enter the IP address separated by commas': 'Please enter the IP address separated by commas',
'Note: Multiple IP addresses have been comma separated': 'Note: Multiple IP addresses have been comma separated',
'Failure time': 'Failure time',
'User': 'User',
User: 'User',
'Please enter token': 'Please enter token',
'Generate token': 'Generate token',
'Monitor': 'Monitor',
'Group': 'Group',
Monitor: 'Monitor',
Group: 'Group',
'Queue statistics': 'Queue statistics',
'Command status statistics': 'Command status statistics',
'Task kill': 'Task Kill',
'Task queue': 'Task queue',
'Error command count': 'Error command count',
'Normal command count': 'Normal command count',
'Manage': ' Manage',
Manage: ' Manage',
'Number of connections': 'Number of connections',
'Sent': 'Sent',
'Received': 'Received',
Sent: 'Sent',
Received: 'Received',
'Min latency': 'Min latency',
'Avg latency': 'Avg latency',
'Max latency': 'Max latency',
@ -502,9 +503,9 @@ export default {
'tasks number of waiting running': 'tasks number of waiting running',
'task number of ready to kill': 'task number of ready to kill',
'Statistics manage': 'Statistics Manage',
'statistics': 'Statistics',
'select tenant':'select tenant',
'Please enter Principal':'Please enter Principal',
statistics: 'Statistics',
'select tenant': 'select tenant',
'Please enter Principal': 'Please enter Principal',
'The start time must not be the same as the end': 'The start time must not be the same as the end',
'Startup parameter': 'Startup parameter',
'Startup type': 'Startup type',
@ -512,14 +513,14 @@ export default {
'Next five execution times': 'Next five execution times',
'Execute time': 'Execute time',
'Complement range': 'Complement range',
'Http Url':'Http Url',
'Http Method':'Http Method',
'Http Parameters':'Http Parameters',
'Http Parameters Key':'Http Parameters Key',
'Http Parameters Position':'Http Parameters Position',
'Http Parameters Value':'Http Parameters Value',
'Http Check Condition':'Http Check Condition',
'Http Condition':'Http Condition',
'Http Url': 'Http Url',
'Http Method': 'Http Method',
'Http Parameters': 'Http Parameters',
'Http Parameters Key': 'Http Parameters Key',
'Http Parameters Position': 'Http Parameters Position',
'Http Parameters Value': 'Http Parameters Value',
'Http Check Condition': 'Http Check Condition',
'Http Condition': 'Http Condition',
'Please Enter Http Url': 'Please Enter Http Url(required)',
'Please Enter Http Condition': 'Please Enter Http Condition',
'There is no data for this period of time': 'There is no data for this period of time',
@ -527,18 +528,18 @@ export default {
'Please enter the correct IP': 'Please enter the correct IP',
'Please generate token': 'Please generate token',
'Spark Version': 'Spark Version',
'TargetDataBase': 'target database',
'TargetTable': 'target table',
TargetDataBase: 'target database',
TargetTable: 'target table',
'Please enter the table of target': 'Please enter the table of target',
'Please enter a Target Table(required)': 'Please enter a Target Table(required)',
'SpeedByte': 'speed(byte count)',
'SpeedRecord': 'speed(record count)',
SpeedByte: 'speed(byte count)',
SpeedRecord: 'speed(record count)',
'0 means unlimited by byte': '0 means unlimited',
'0 means unlimited by count': '0 means unlimited',
'Modify User': 'Modify User',
'Whether directory': 'Whether directory',
'Yes': 'Yes',
'No': 'No',
Yes: 'Yes',
No: 'No',
'Please enter Mysql Database(required)': 'Please enter Mysql Database(required)',
'Please enter Mysql Table(required)': 'Please enter Mysql Table(required)',
'Please enter Columns (Comma separated)': 'Please enter Columns (Comma separated)',
@ -553,34 +554,34 @@ export default {
'Please enter Lines Terminated': 'Please enter Lines Terminated',
'Please enter Concurrency': 'Please enter Concurrency',
'Please enter Update Key': 'Please enter Update Key',
'Direct': 'Direct',
'Type': 'Type',
'ModelType': 'ModelType',
'ColumnType': 'ColumnType',
'Database': 'Database',
'Column': 'Column',
Direct: 'Direct',
Type: 'Type',
ModelType: 'ModelType',
ColumnType: 'ColumnType',
Database: 'Database',
Column: 'Column',
'Map Column Hive': 'Map Column Hive',
'Map Column Java': 'Map Column Java',
'Export Dir': 'Export Dir',
'Hive partition Keys': 'Hive partition Keys',
'Hive partition Values': 'Hive partition Values',
'FieldsTerminated': 'FieldsTerminated',
'LinesTerminated': 'LinesTerminated',
'IsUpdate': 'IsUpdate',
'UpdateKey': 'UpdateKey',
'UpdateMode': 'UpdateMode',
FieldsTerminated: 'FieldsTerminated',
LinesTerminated: 'LinesTerminated',
IsUpdate: 'IsUpdate',
UpdateKey: 'UpdateKey',
UpdateMode: 'UpdateMode',
'Target Dir': 'Target Dir',
'DeleteTargetDir': 'DeleteTargetDir',
'FileType': 'FileType',
'CompressionCodec': 'CompressionCodec',
'CreateHiveTable': 'CreateHiveTable',
'DropDelimiter': 'DropDelimiter',
'OverWriteSrc': 'OverWriteSrc',
'ReplaceDelimiter': 'ReplaceDelimiter',
'Concurrency': 'Concurrency',
'Form': 'Form',
'OnlyUpdate': 'OnlyUpdate',
'AllowInsert': 'AllowInsert',
DeleteTargetDir: 'DeleteTargetDir',
FileType: 'FileType',
CompressionCodec: 'CompressionCodec',
CreateHiveTable: 'CreateHiveTable',
DropDelimiter: 'DropDelimiter',
OverWriteSrc: 'OverWriteSrc',
ReplaceDelimiter: 'ReplaceDelimiter',
Concurrency: 'Concurrency',
Form: 'Form',
OnlyUpdate: 'OnlyUpdate',
AllowInsert: 'AllowInsert',
'Data Source': 'Data Source',
'Data Target': 'Data Target',
'All Columns': 'All Columns',
@ -589,5 +590,5 @@ export default {
'Cannot select the same node for successful branch flow and failed branch flow': 'Cannot select the same node for successful branch flow and failed branch flow',
'Successful branch flow and failed branch flow are required': 'Successful branch flow and failed branch flow are required',
'Unauthorized or deleted resources': 'Unauthorized or deleted resources',
'Please delete all non-existent resources': 'Please delete all non-existent resources',
'Please delete all non-existent resources': 'Please delete all non-existent resources'
}

351
dolphinscheduler-ui/src/js/module/i18n/locale/zh_CN.js

@ -18,11 +18,11 @@
export default {
'User Name': '用户名',
'Please enter user name': '请输入用户名',
'Password': '密码',
Password: '密码',
'Please enter your password': '请输入密码',
'Password consists of at least two combinations of numbers, letters, and characters, and the length is between 6-22': '密码至少包含数字字母和字符的两种组合长度在6-22之间',
'Login': '登录',
'Home': '首页',
Login: '登录',
Home: '首页',
'Failed to create node to save': '未创建节点保存失败',
'Global parameters': '全局参数',
'Local parameters': '局部参数',
@ -36,14 +36,14 @@ export default {
'Node name': '节点名称',
'Please enter name(required)': '请输入名称(必填)',
'Run flag': '运行标志',
'Normal': '正常',
Normal: '正常',
'Prohibition execution': '禁止执行',
'Please enter description': '请输入描述',
'Number of failed retries': '失败重试次数',
'Times': '次',
Times: '次',
'Failed retry interval': '失败重试间隔',
'Minute': '分',
'Cancel': '取消',
Minute: '分',
Cancel: '取消',
'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': '该任务还未执行不能进入子工作流',
@ -53,7 +53,7 @@ export default {
'Refresh Log': '刷新日志',
'Enter full screen': '进入全屏',
'Cancel full screen': '取消全屏',
'Close': '关闭',
Close: '关闭',
'Update log success': '更新日志成功',
'No more logs': '暂无更多日志',
'No log': '暂无日志',
@ -62,22 +62,23 @@ export default {
'Please enter description(optional)': '请输入描述(选填)',
'Set global': '设置全局',
'Whether to update the process definition': '是否更新流程定义',
'Add': '添加',
Add: '添加',
'DAG graph name cannot be empty': 'DAG图名称不能为空',
'Create Datasource': '创建数据源',
'Project Home': '项目首页',
'Project Manage': '项目管理',
'Create Project': '创建项目',
'Cron Manage': '定时管理',
'Copy Workflow': '复制工作流',
'Tenant Manage': '租户管理',
'Create Tenant': '创建租户',
'User Manage': '用户管理',
'Create User': '创建用户',
'User Information': '用户信息',
'Edit Password': '密码修改',
'success': '成功',
'failed': '失败',
'delete': '删除',
success: '成功',
failed: '失败',
delete: '删除',
'Please choose': '请选择',
'Please enter a positive integer': '请输入正整数',
'Program Type': '程序类型',
@ -88,14 +89,14 @@ export default {
'Please enter Command-line parameters': '请输入命令行参数',
'Other parameters': '其他参数',
'Please enter other parameters': '请输入其他参数',
'Resources': '资源',
Resources: '资源',
'Custom Parameters': '自定义参数',
'Custom template': '自定义模版',
'Please enter main class': '请填写主函数的class',
'Datasource': '数据源',
'methods': '方法',
Datasource: '数据源',
methods: '方法',
'Please enter method(optional)': '请输入方法(选填)',
'Script': '脚本',
Script: '脚本',
'Please enter script(required)': '请输入脚本(必填)',
'Deploy Mode': '部署方式',
'Driver core number': 'Driver内核数',
@ -113,16 +114,16 @@ export default {
'Please enter ExecutorPlease enter Executor core number': '请填写Executor内核数',
'Core number should be positive integer': '内核数为正整数',
'SQL Type': 'sql类型',
'Title': '主题',
Title: '主题',
'Please enter the title of email': '请输入邮件主题',
'Table': '表名',
'TableMode': '表格',
'Attachment': '附件',
Table: '表名',
TableMode: '表格',
Attachment: '附件',
'SQL Parameter': 'sql参数',
'SQL Statement': 'sql语句',
'UDF Function': 'UDF函数',
'FILE': '文件',
'UDF': 'UDF',
FILE: '文件',
UDF: 'UDF',
'File Subdirectory': '文件子目录',
'Please enter a SQL Statement(required)': '请输入sql语句(必填)',
'Please enter a JSON Statement(required)': '请输入json语句(必填)',
@ -131,12 +132,12 @@ export default {
'Mail subject required': '邮件主题必填',
'Child Node': '子节点',
'Please select a sub-Process': '请选择子工作流',
'Edit': '编辑',
Edit: '编辑',
'Datasource Name': '数据源名称',
'Please enter datasource name': '请输入数据源名称',
'IP': 'IP主机名',
IP: 'IP主机名',
'Please enter IP': '请输入IP主机名',
'Port': '端口',
Port: '端口',
'Please enter port': '请输入端口',
'Database Name': '数据库名',
'Please enter database name': '请输入数据库名',
@ -155,13 +156,13 @@ export default {
'Datasource Parameter': '数据源参数',
'Create Time': '创建时间',
'Update Time': '更新时间',
'Operation': '操作',
Operation: '操作',
'Click to view': '点击查看',
'Delete?': '确定删除吗?',
'Confirm': '确定',
Confirm: '确定',
'Task status statistics': '任务状态统计',
'Number': '数量',
'State': '状态',
Number: '数量',
State: '状态',
'Process Status Statistics': '流程状态统计',
'Process Definition Statistics': '流程定义统计',
'Project Name': '项目名称',
@ -169,25 +170,25 @@ export default {
'Owned Users': '所属用户',
'Process Pid': '进程pid',
'Zk registration directory': 'zk注册目录',
'cpuUsage': 'cpuUsage',
'memoryUsage': 'memoryUsage',
cpuUsage: 'cpuUsage',
memoryUsage: 'memoryUsage',
'Last heartbeat time': '最后心跳时间',
'Edit Tenant': '编辑租户',
'Tenant Code': '租户编码',
'Tenant Name': '租户名称',
'Queue': '队列',
Queue: '队列',
'Please enter the tenant code in English': '请输入租户编码只允许英文',
'Please enter tenant code in English': '请输入英文租户编码',
'Edit User': '编辑用户',
'Tenant': '租户',
'Email': '邮件',
'Phone': '手机',
Tenant: '租户',
Email: '邮件',
Phone: '手机',
'Please enter phone number': '请输入手机',
'Please enter email': '请输入邮箱',
'Please enter the correct email format': '请输入正确的邮箱格式',
'Please enter the correct mobile phone format': '请输入正确的手机格式',
'Project': '项目',
'Authorize': '授权',
Project: '项目',
Authorize: '授权',
'File resources': '文件资源',
'UDF resources': 'UDF资源',
'UDF resources directory': 'UDF资源目录',
@ -197,11 +198,11 @@ export default {
'Group Name': '组名称',
'Please enter group name': '请输入组名称',
'Group Type': '组类型',
'Remarks': '备注',
'SMS': '短信',
Remarks: '备注',
SMS: '短信',
'Managing Users': '管理用户',
'Permission': '权限',
'Administrator': '管理员',
Permission: '权限',
Administrator: '管理员',
'Confirm Password': '确认密码',
'Please enter confirm password': '请输入确认密码',
'Password cannot be in Chinese': '密码不能为中文',
@ -211,7 +212,7 @@ export default {
'The password is inconsistent with the confirmation password': '密码与确认密码不一致,请重新确认',
'Please select the datasource': '请选择数据源',
'Please select resources': '请选择资源',
'Query': '查询',
Query: '查询',
'Non Query': '非查询',
'prop(required)': 'prop(必填)',
'value(optional)': 'value(选填)',
@ -221,18 +222,18 @@ export default {
'prop is repeat': 'prop中有重复',
'Start Time': '开始时间',
'End Time': '结束时间',
'crontab': 'crontab',
crontab: 'crontab',
'Failure Strategy': '失败策略',
'online': '上线',
'offline': '下线',
online: '上线',
offline: '下线',
'Task Status': '任务状态',
'Process Instance': '工作流实例',
'Task Instance': '任务实例',
'Select date range': '选择日期区间',
'Date': '日期',
'waiting': '等待',
'execution': '执行中',
'finish': '完成',
Date: '日期',
waiting: '等待',
execution: '执行中',
finish: '完成',
'Create File': '创建文件',
'Create folder': '创建文件夹',
'File Name': '文件名称',
@ -241,13 +242,13 @@ export default {
'Folder Format': '文件夹格式',
'File Content': '文件内容',
'Upload File Size': '文件大小不能超过1G',
'Create': '创建',
Create: '创建',
'Please enter the resource content': '请输入资源内容',
'Resource content cannot exceed 3000 lines': '资源内容不能超过3000行',
'File Details': '文件详情',
'Download Details': '下载详情',
'Return': '返回',
'Save': '保存',
Return: '返回',
Save: '保存',
'File Manage': '文件管理',
'Upload Files': '上传文件',
'Create UDF Function': '创建UDF函数',
@ -255,22 +256,22 @@ export default {
'Service-Master': '服务管理-Master',
'Service-Worker': '服务管理-Worker',
'Process Name': '工作流名称',
'Executor': '执行用户',
Executor: '执行用户',
'Run Type': '运行类型',
'Scheduling Time': '调度时间',
'Run Times': '运行次数',
'host': 'host',
host: 'host',
'fault-tolerant sign': '容错标识',
'Rerun': '重跑',
Rerun: '重跑',
'Recovery Failed': '恢复失败',
'Stop': '停止',
'Pause': '暂停',
Stop: '停止',
Pause: '暂停',
'Recovery Suspend': '恢复运行',
'Gantt': '甘特图',
'Name': '名称',
Gantt: '甘特图',
Name: '名称',
'Node Type': '节点类型',
'Submit Time': '提交时间',
'Duration': '运行时长',
Duration: '运行时长',
'Retry Count': '重试次数',
'Task Name': '任务名称',
'Task Date': '任务日期',
@ -278,22 +279,22 @@ export default {
'Record Number': '记录数',
'Target Table': '目标表',
'Online viewing type is not supported': '不支持在线查看类型',
'Size': '大小',
'Rename': '重命名',
'Download': '下载',
'Export': '导出',
'Submit': '提交',
Size: '大小',
Rename: '重命名',
Download: '下载',
Export: '导出',
Submit: '提交',
'Edit UDF Function': '编辑UDF函数',
'type': '类型',
type: '类型',
'UDF Function Name': 'UDF函数名称',
'Please enter a function name': '请输入函数名',
'Package Name': '包名类名',
'Please enter a Package name': '请输入包名类名',
'Parameter': '参数',
Parameter: '参数',
'Please enter a parameter': '请输入参数',
'UDF Resources': 'UDF资源',
'Upload Resources': '上传资源',
'Instructions': '使用说明',
Instructions: '使用说明',
'Please enter a instructions': '请输入使用说明',
'Please enter a UDF function name': '请输入UDF函数名称',
'Select UDF Resources': '请选择UDF资源',
@ -302,12 +303,12 @@ export default {
'Library Name': '库名',
'UDF Resource Name': 'UDF资源名称',
'File Size': '文件大小',
'Description': '描述',
Description: '描述',
'Drag Nodes and Selected Items': '拖动节点和选中项',
'Select Line Connection': '选择线条连接',
'Delete selected lines or nodes': '删除选中的线或节点',
'Full Screen': '全屏',
'Unpublished': '未发布',
Unpublished: '未发布',
'Start Process': '启动工作流',
'Execute from the current node': '从当前节点开始执行',
'Recover tolerance fault process': '恢复被容错的工作流',
@ -317,33 +318,33 @@ export default {
'Scheduling execution': '调度执行',
'Recovery waiting thread': '恢复等待线程',
'Submitted successfully': '提交成功',
'Executing': '正在执行',
Executing: '正在执行',
'Ready to pause': '准备暂停',
'Ready to stop': '准备停止',
'Need fault tolerance': '需要容错',
'kill': 'kill',
kill: 'kill',
'Waiting for thread': '等待线程',
'Waiting for dependence': '等待依赖',
'Start': '运行',
'Copy': '复制节点',
Start: '运行',
Copy: '复制节点',
'Copy name': '复制名称',
'Delete': '删除',
Delete: '删除',
'Please enter keyword': '请输入关键词',
'File Upload': '文件上传',
'Drag the file into the current upload window': '请将文件拖拽到当前上传窗口内',
'Drag area upload': '拖动区域上传',
'Upload': '上传',
Upload: '上传',
'Please enter file name': '请输入文件名',
'Please select the file to upload': '请选择要上传的文件',
'Resources manage': '资源中心',
'Security': '安全中心',
'Logout': '退出',
Security: '安全中心',
Logout: '退出',
'No data': '查询无数据',
'Uploading...': '文件上传中',
'Loading...': '正在努力加载中...',
'List': '列表',
List: '列表',
'Unable to download without proper url': '无下载url无法下载',
'Process': '工作流',
Process: '工作流',
'Process definition': '工作流定义',
'Task record': '任务记录',
'Warning group manage': '告警组管理',
@ -356,13 +357,13 @@ export default {
'Create process': '创建工作流',
'Import process': '导入工作流',
'Timing state': '定时状态',
'Timing': '定时',
'TreeView': '树形图',
Timing: '定时',
TreeView: '树形图',
'Mailbox already exists! Recipients and copyers cannot repeat': '邮箱已存在收件人和抄送人不能重复',
'Mailbox input is illegal': '邮箱输入不合法',
'Please set the parameters before starting': '启动前请先设置参数',
'Continue': '继续',
'End': '结束',
Continue: '继续',
End: '结束',
'Node execution': '节点执行',
'Backward execution': '向后执行',
'Forward execution': '向前执行',
@ -370,8 +371,8 @@ export default {
'Notification strategy': '通知策略',
'Notification group': '通知组',
'Please select a notification group': '请选择通知组',
'Recipient': '收件人',
'Cc': '抄送人',
Recipient: '收件人',
Cc: '抄送人',
'Whether it is a complement process?': '是否补数',
'Schedule date': '调度日期',
'Mode of execution': '执行方式',
@ -381,15 +382,15 @@ export default {
'Start and stop time': '起止时间',
'Please select time': '请选择时间',
'Please enter crontab': '请输入crontab',
'none_1': '都不发',
'success_1': '成功发',
'failure_1': '失败发',
'All_1': '成功或失败都发',
'Toolbar': '工具栏',
none_1: '都不发',
success_1: '成功发',
failure_1: '失败发',
All_1: '成功或失败都发',
Toolbar: '工具栏',
'View variables': '查看变量',
'Format DAG': '格式化DAG',
'Refresh DAG status': '刷新DAG状态',
'Return_1': '返回上一节点',
Return_1: '返回上一节点',
'Please enter format': '请输入格式为',
'connection parameter': '连接参数',
'Process definition details': '流程定义详情',
@ -399,8 +400,8 @@ export default {
'Create Resource': '创建资源',
'User Center': '用户中心',
'Please enter method': '请输入方法',
'none': '无',
'name': '名称',
none: '无',
name: '名称',
'Process priority': '流程优先级',
'Task priority': '任务优先级',
'Task timeout alarm': '任务超时告警',
@ -411,36 +412,36 @@ export default {
'Timeout strategy must be selected': '超时策略必须选一个',
'Timeout must be a positive integer': '超时时长必须为正整数',
'Add dependency': '添加依赖',
'and': '且',
'or': '或',
'month': '月',
'week': '周',
'day': '日',
'hour': '时',
'Running': '正在运行',
and: '且',
or: '或',
month: '月',
week: '周',
day: '日',
hour: '时',
Running: '正在运行',
'Waiting for dependency to complete': '等待依赖完成',
'Selected': '已选',
'Last1Hour': '前1小时',
'Last2Hours': '前2小时',
'Last3Hours': '前3小时',
'today': '今天',
'Last1Days': '昨天',
'Last2Days': '前两天',
'Last3Days': '前三天',
'Last7Days': '前七天',
'ThisWeek': '本周',
'LastWeek': '上周',
'LastMonday': '上周一',
'LastTuesday': '上周二',
'LastWednesday': '上周三',
'LastThursday': '上周四',
'LastFriday': '上周五',
'LastSaturday': '上周六',
'LastSunday': '上周日',
'ThisMonth': '本月',
'LastMonth': '上月',
'LastMonthBegin': '上月初',
'LastMonthEnd': '上月末',
Selected: '已选',
Last1Hour: '前1小时',
Last2Hours: '前2小时',
Last3Hours: '前3小时',
today: '今天',
Last1Days: '昨天',
Last2Days: '前两天',
Last3Days: '前三天',
Last7Days: '前七天',
ThisWeek: '本周',
LastWeek: '上周',
LastMonday: '上周一',
LastTuesday: '上周二',
LastWednesday: '上周三',
LastThursday: '上周四',
LastFriday: '上周五',
LastSaturday: '上周六',
LastSunday: '上周日',
ThisMonth: '本月',
LastMonth: '上月',
LastMonthBegin: '上月初',
LastMonthEnd: '上月末',
'Refresh status succeeded': '刷新状态成功',
'Queue manage': '队列管理',
'Create queue': '创建队列',
@ -459,21 +460,21 @@ export default {
'Please enter the IP address separated by commas': '请输入IP地址多个用英文逗号隔开',
'Note: Multiple IP addresses have been comma separated': '注意多个IP地址以英文逗号分割',
'Failure time': '失效时间',
'User': '用户',
User: '用户',
'Please enter token': '请输入令牌',
'Generate token': '生成令牌',
'Monitor': '监控中心',
'Group': '分组',
Monitor: '监控中心',
Group: '分组',
'Queue statistics': '队列统计',
'Command status statistics': '命令状态统计',
'Task kill': '等待kill任务',
'Task queue': '等待执行任务',
'Error command count': '错误指令数',
'Normal command count': '正确指令数',
'Manage': '管理',
Manage: '管理',
'Number of connections': '连接数',
'Sent': '发送量',
'Received': '接收量',
Sent: '发送量',
Received: '接收量',
'Min latency': '最低延时',
'Avg latency': '平均延时',
'Max latency': '最大延时',
@ -492,15 +493,15 @@ export default {
'Statement cannot be empty': '语句不能为空',
'Process Define Count': '工作流定义数',
'Process Instance Running Count': '正在运行的流程数',
'Please select a queue': '请选择队列',
'Please select a queue': '默认为租户关联队列',
'command number of waiting for running': '待执行的命令数',
'failure command number': '执行失败的命令数',
'tasks number of waiting running': '待运行任务数',
'task number of ready to kill': '待杀死任务数',
'Statistics manage': '统计管理',
'statistics': '统计',
'select tenant':'选择租户',
'Please enter Principal':'请输入Principal',
statistics: '统计',
'select tenant': '选择租户',
'Please enter Principal': '请输入Principal',
'The start time must not be the same as the end': '开始时间和结束时间不能相同',
'Startup parameter': '启动参数',
'Startup type': '启动类型',
@ -508,18 +509,18 @@ export default {
'Next five execution times': '接下来五次执行时间',
'Execute time': '执行时间',
'Complement range': '补数范围',
'slot':'slot数量',
'taskManager':'taskManage数量',
'jobManagerMemory':'jobManager内存数',
'taskManagerMemory':'taskManager内存数',
'Http Url':'请求地址',
'Http Method':'请求类型',
'Http Parameters':'请求参数',
'Http Parameters Key':'参数名',
'Http Parameters Position':'参数位置',
'Http Parameters Value':'参数值',
'Http Check Condition':'校验条件',
'Http Condition':'校验内容',
slot: 'slot数量',
taskManager: 'taskManage数量',
jobManagerMemory: 'jobManager内存数',
taskManagerMemory: 'taskManager内存数',
'Http Url': '请求地址',
'Http Method': '请求类型',
'Http Parameters': '请求参数',
'Http Parameters Key': '参数名',
'Http Parameters Position': '参数位置',
'Http Parameters Value': '参数值',
'Http Check Condition': '校验条件',
'Http Condition': '校验内容',
'Please Enter Http Url': '请填写请求地址(必填)',
'Please Enter Http Condition': '请填写校验内容',
'There is no data for this period of time': '该时间段无数据',
@ -527,18 +528,18 @@ export default {
'Please enter the correct IP': '请输入正确的IP',
'Please generate token': '请生成Token',
'Spark Version': 'Spark版本',
'TargetDataBase': '目标库',
'TargetTable': '目标表',
TargetDataBase: '目标库',
TargetTable: '目标表',
'Please enter the table of target': '请输入目标表名',
'Please enter a Target Table(required)': '请输入目标表(必填)',
'SpeedByte': '限流(字节数)',
'SpeedRecord': '限流(记录数)',
SpeedByte: '限流(字节数)',
SpeedRecord: '限流(记录数)',
'0 means unlimited by byte': 'KB0代表不限制',
'0 means unlimited by count': '0代表不限制',
'Modify User': '修改用户',
'Whether directory' : '是否文件夹',
'Yes': '是',
'No': '否',
'Whether directory': '是否文件夹',
Yes: '是',
No: '否',
'Please enter Mysql Database(required)': '请输入Mysql数据库(必填)',
'Please enter Mysql Table(required)': '请输入Mysql表名(必填)',
'Please enter Columns (Comma separated)': '请输入列名 , 隔开',
@ -553,34 +554,34 @@ export default {
'Please enter Lines Terminated': '请输入行分隔符',
'Please enter Concurrency': '请输入并发度',
'Please enter Update Key': '请输入更新列',
'Direct': '流向',
'Type': '类型',
'ModelType': '模式',
'ColumnType': '列类型',
'Database': '数据库',
'Column': '列',
Direct: '流向',
Type: '类型',
ModelType: '模式',
ColumnType: '列类型',
Database: '数据库',
Column: '列',
'Map Column Hive': 'Hive类型映射',
'Map Column Java': 'Java类型映射',
'Export Dir': '数据源路径',
'Hive partition Keys': 'Hive 分区键',
'Hive partition Values': 'Hive 分区值',
'FieldsTerminated': '列分隔符',
'LinesTerminated': '行分隔符',
'IsUpdate': '是否更新',
'UpdateKey': '更新列',
'UpdateMode': '更新类型',
FieldsTerminated: '列分隔符',
LinesTerminated: '行分隔符',
IsUpdate: '是否更新',
UpdateKey: '更新列',
UpdateMode: '更新类型',
'Target Dir': '目标路径',
'DeleteTargetDir': '是否删除目录',
'FileType': '保存格式',
'CompressionCodec': '压缩类型',
'CreateHiveTable': '是否创建新表',
'DropDelimiter': '是否删除分隔符',
'OverWriteSrc': '是否覆盖数据源',
'ReplaceDelimiter': '替换分隔符',
'Concurrency': '并发度',
'Form': '表单',
'OnlyUpdate': '只更新',
'AllowInsert': '无更新便插入',
DeleteTargetDir: '是否删除目录',
FileType: '保存格式',
CompressionCodec: '压缩类型',
CreateHiveTable: '是否创建新表',
DropDelimiter: '是否删除分隔符',
OverWriteSrc: '是否覆盖数据源',
ReplaceDelimiter: '替换分隔符',
Concurrency: '并发度',
Form: '表单',
OnlyUpdate: '只更新',
AllowInsert: '无更新便插入',
'Data Source': '数据来源',
'Data Target': '数据目的',
'All Columns': '全表导入',
@ -589,5 +590,5 @@ export default {
'Cannot select the same node for successful branch flow and failed branch flow': '成功分支流转和失败分支流转不能选择同一个节点',
'Successful branch flow and failed branch flow are required': '成功分支流转和失败分支流转必填',
'Unauthorized or deleted resources': '未授权或已删除资源',
'Please delete all non-existent resources': '请删除所有未授权或已删除资源',
'Please delete all non-existent resources': '请删除所有未授权或已删除资源'
}

11
dolphinscheduler-ui/src/js/module/io/index.js

@ -18,7 +18,6 @@
import io from '@/module/axios/index'
import cookies from 'js-cookie'
const apiPrefix = '/dolphinscheduler'
const reSlashPrefix = /^\/+/
@ -73,13 +72,13 @@ io.interceptors.response.use(
// Global request interceptor registion
io.interceptors.request.use(
config => {
let sIdCookie = cookies.get('sessionId')
let sessionId = sessionStorage.getItem("sessionId")
let requstUrl = config.url.substring(config.url.lastIndexOf("/")+1)
if(sIdCookie !== null && requstUrl!=='login' && sIdCookie!=sessionId) {
const sIdCookie = cookies.get('sessionId')
const sessionId = sessionStorage.getItem('sessionId')
const requstUrl = config.url.substring(config.url.lastIndexOf('/') + 1)
if (sIdCookie !== null && requstUrl !== 'login' && sIdCookie !== sessionId) {
window.location.href = `${PUBLIC_PATH}/view/login/index.html`
} else {
let { method } = config
const { method } = config
if (method === 'get') {
config.params = Object.assign({}, config.params, {
_t: Math.random()

3
dolphinscheduler-ui/src/js/module/mixin/disabledState.js

@ -17,7 +17,6 @@
import store from '@/conf/home/store'
import router from '@/conf/home/router'
import Permissions from '@/module/permissions'
export default {
data () {
@ -28,7 +27,7 @@ export default {
}
},
created () {
this.isDetails =this.store.state.dag.isDetails// Permissions.getAuth() ? this.store.state.dag.isDetails : true
this.isDetails = this.store.state.dag.isDetails// Permissions.getAuth() ? this.store.state.dag.isDetails : true
},
computed: {
_isDetails () {

6
dolphinscheduler-ui/src/js/module/mixin/listUrlParamHandle.js

@ -23,7 +23,7 @@ import { setUrlParams } from '@/module/util/routerUtil'
export default {
watch: {
// watch pageNo
'searchParams': {
searchParams: {
deep: true,
handler () {
setUrlParams(this.searchParams)
@ -48,8 +48,8 @@ export default {
_debounceGET: _.debounce(function (flag) {
this._getList(flag)
}, 100, {
'leading': false,
'trailing': true
leading: false,
trailing: true
})
}
}

4
dolphinscheduler-ui/src/js/module/permissions/index.js

@ -19,7 +19,7 @@ import _ from 'lodash'
import Vue from 'vue'
import store from '@/conf/home/store'
let Permissions = function () {
const Permissions = function () {
this.isAuth = true
}
@ -44,7 +44,7 @@ Permissions.prototype = {
if ($(el).prop('tagName') === 'BUTTON') {
$(el).attr('disabled', true)
} else {
setTimeout(function(){el.parentNode.removeChild(el)},100)
setTimeout(function () { el.parentNode.removeChild(el) }, 100)
}
}
}

4
dolphinscheduler-ui/src/js/module/util/index.js

@ -51,7 +51,7 @@ export function findComponentDownward (context, componentName) {
* uuid('v-ani-%{s}-translate') // -> v-ani-xxx
*/
export function uuid (prefix) {
let id = Math.floor(Math.random() * 10000).toString(36)
const id = Math.floor(Math.random() * 10000).toString(36)
return prefix ? (
~prefix.indexOf('%{s}') ? (
prefix.replace(/%\{s\}/g, id)
@ -59,7 +59,6 @@ export function uuid (prefix) {
) : id
}
/**
* template
*
@ -92,4 +91,3 @@ export function template (string, ...args) {
}
})
}

3
dolphinscheduler-ui/src/js/module/util/routerUtil.js

@ -15,9 +15,6 @@
* limitations under the License.
*/
import merge from 'webpack-merge'
import router from '@/conf/home/router'
export function setUrlParams (o) {
// router.push({
// query: merge(router.history.current.query, o)

9
dolphinscheduler-ui/src/js/module/util/util.js

@ -20,9 +20,9 @@
*/
const bytesToSize = (bytes) => {
if (bytes === 0) return '0 B'
let k = 1024, // or 1024
sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
i = Math.floor(Math.log(bytes) / Math.log(k))
const k = 1024 // or 1024
const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
const i = Math.floor(Math.log(bytes) / Math.log(k))
return parseInt((bytes / Math.pow(k, i)).toPrecision(3)) + ' ' + sizes[i]
}
@ -33,7 +33,7 @@ const bytesToSize = (bytes) => {
const isJson = (str) => {
if (typeof str === 'string') {
try {
let obj = JSON.parse(str)
const obj = JSON.parse(str)
if (typeof obj === 'object' && obj) {
return true
} else {
@ -69,7 +69,6 @@ const syntaxHighlight = (json) => {
})
}
export {
bytesToSize,
isJson,

2
dolphinscheduler-ui/src/lib/external/config.js vendored

@ -19,5 +19,5 @@
*/
export default {
// task record switch
recordSwitch:false
recordSwitch: false
}

2
dolphinscheduler-ui/src/lib/external/email.js vendored

@ -14,4 +14,4 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
export default ["test@analysys.com.cn"]
export default ['test@analysys.com.cn']

2
install.sh

@ -35,7 +35,7 @@ if [ $dbtype == "postgresql" ];then
datasourceDriverClassname="org.postgresql.Driver"
fi
sed -i ${txt} "s#spring.datasource.driver-class-name.*#spring.datasource.driver-class-name=${datasourceDriverClassname}#g" conf/datasource.properties
sed -i ${txt} "s#spring.datasource.url.*#spring.datasource.url=jdbc:${dbtype}://${dbhost}/dolphinscheduler?characterEncoding=UTF-8#g" conf/datasource.properties
sed -i ${txt} "s#spring.datasource.url.*#spring.datasource.url=jdbc:${dbtype}://${dbhost}/${dbname}?characterEncoding=UTF-8\&allowMultiQueries=true#g" conf/datasource.properties
sed -i ${txt} "s#spring.datasource.username.*#spring.datasource.username=${username}#g" conf/datasource.properties
sed -i ${txt} "s#spring.datasource.password.*#spring.datasource.password=${password}#g" conf/datasource.properties

1
sql/dolphinscheduler_mysql.sql

@ -415,6 +415,7 @@ CREATE TABLE `t_ds_process_definition` (
`modify_by` varchar(255) DEFAULT NULL,
`resource_ids` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `process_definition_unique` (`name`,`project_id`),
KEY `process_definition_index` (`project_id`,`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Loading…
Cancel
Save