|
@@ -17,21 +17,38 @@
|
|
|
<template>
|
|
|
<div class="form-model-wrapper" v-clickoutside="_handleClose">
|
|
|
<div class="title-box">
|
|
|
- <span class="name">{{$t('Current node settings')}}</span>
|
|
|
+ <span class="name">{{ $t("Current node settings") }}</span>
|
|
|
<span class="go-subtask">
|
|
|
<!-- Component can't pop up box to do component processing -->
|
|
|
- <m-log v-if="taskInstance" :item="backfillItem" :task-instance-id="taskInstance.id">
|
|
|
- <template slot="history"><a href="javascript:" @click="_seeHistory" ><em class="ansicon el-icon-alarm-clock"></em><em>{{$t('View history')}}</em></a></template>
|
|
|
- <template slot="log"><a href="javascript:"><em class="ansicon el-icon-document"></em><em>{{$t('View log')}}</em></a></template>
|
|
|
+ <m-log
|
|
|
+ v-if="taskInstance"
|
|
|
+ :item="backfillItem"
|
|
|
+ :task-instance-id="taskInstance.id"
|
|
|
+ >
|
|
|
+ <template slot="history"
|
|
|
+ ><a href="javascript:" @click="_seeHistory"
|
|
|
+ ><em class="ansicon el-icon-alarm-clock"></em
|
|
|
+ ><em>{{ $t("View history") }}</em></a
|
|
|
+ ></template
|
|
|
+ >
|
|
|
+ <template slot="log"
|
|
|
+ ><a href="javascript:"
|
|
|
+ ><em class="ansicon el-icon-document"></em
|
|
|
+ ><em>{{ $t("View log") }}</em></a
|
|
|
+ ></template
|
|
|
+ >
|
|
|
</m-log>
|
|
|
- <a href="javascript:" @click="_goSubProcess" v-if="_isGoSubProcess"><em class="ansicon ri-node-tree"></em><em>{{$t('Enter this child node')}}</em></a>
|
|
|
+ <a href="javascript:" @click="_goSubProcess" v-if="_isGoSubProcess"
|
|
|
+ ><em class="ansicon ri-node-tree"></em
|
|
|
+ ><em>{{ $t("Enter this child node") }}</em></a
|
|
|
+ >
|
|
|
</span>
|
|
|
</div>
|
|
|
<div class="content-box" v-if="isContentBox">
|
|
|
<div class="form-model">
|
|
|
<!-- Node name -->
|
|
|
<m-list-box>
|
|
|
- <div slot="text">{{$t('Node name')}}</div>
|
|
|
+ <div slot="text">{{ $t("Node name") }}</div>
|
|
|
<div slot="content">
|
|
|
<el-input
|
|
|
type="text"
|
|
@@ -40,41 +57,50 @@
|
|
|
:disabled="isDetails"
|
|
|
:placeholder="$t('Please enter name (required)')"
|
|
|
maxlength="100"
|
|
|
- @blur="_verifName()">
|
|
|
+ @blur="_verifName()"
|
|
|
+ >
|
|
|
</el-input>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
+ <!-- Copy from task -->
|
|
|
+ <copy-from-task v-if="!isDetails" :taskType="nodeData.taskType" />
|
|
|
+
|
|
|
<!-- Running sign -->
|
|
|
<m-list-box>
|
|
|
- <div slot="text">{{$t('Run flag')}}</div>
|
|
|
+ <div slot="text">{{ $t("Run flag") }}</div>
|
|
|
<div slot="content">
|
|
|
<el-radio-group v-model="runFlag" size="small">
|
|
|
- <el-radio :label="'YES'" :disabled="isDetails">{{$t('Normal')}}</el-radio>
|
|
|
- <el-radio :label="'NO'" :disabled="isDetails">{{$t('Prohibition execution')}}</el-radio>
|
|
|
+ <el-radio :label="'YES'" :disabled="isDetails">{{
|
|
|
+ $t("Normal")
|
|
|
+ }}</el-radio>
|
|
|
+ <el-radio :label="'NO'" :disabled="isDetails">{{
|
|
|
+ $t("Prohibition execution")
|
|
|
+ }}</el-radio>
|
|
|
</el-radio-group>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
<!-- description -->
|
|
|
<m-list-box>
|
|
|
- <div slot="text">{{$t('Description')}}</div>
|
|
|
+ <div slot="text">{{ $t("Description") }}</div>
|
|
|
<div slot="content">
|
|
|
<el-input
|
|
|
:rows="2"
|
|
|
type="textarea"
|
|
|
:disabled="isDetails"
|
|
|
v-model="desc"
|
|
|
- :placeholder="$t('Please enter description')">
|
|
|
+ :placeholder="$t('Please enter description')"
|
|
|
+ >
|
|
|
</el-input>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
<!-- Task priority -->
|
|
|
<m-list-box>
|
|
|
- <div slot="text">{{$t('Task priority')}}</div>
|
|
|
+ <div slot="text">{{ $t("Task priority") }}</div>
|
|
|
<div slot="content">
|
|
|
- <span class="label-box" style="width: 193px;display: inline-block;">
|
|
|
+ <span class="label-box" style="width: 193px; display: inline-block">
|
|
|
<m-priority v-model="taskInstancePriority"></m-priority>
|
|
|
</span>
|
|
|
</div>
|
|
@@ -82,207 +108,305 @@
|
|
|
|
|
|
<!-- Worker group and environment -->
|
|
|
<m-list-box>
|
|
|
- <div slot="text">{{$t('Worker group')}}</div>
|
|
|
+ <div slot="text">{{ $t("Worker group") }}</div>
|
|
|
<div slot="content">
|
|
|
- <span class="label-box" style="width: 193px;display: inline-block;">
|
|
|
+ <span class="label-box" style="width: 193px; display: inline-block">
|
|
|
<m-worker-groups v-model="workerGroup"></m-worker-groups>
|
|
|
</span>
|
|
|
- <span class="text-b">{{$t('Environment Name')}}</span>
|
|
|
- <m-related-environment v-model="environmentCode" :workerGroup="workerGroup" v-on:environmentCodeEvent="_onUpdateEnvironmentCode"></m-related-environment>
|
|
|
+ <span class="text-b">{{ $t("Environment Name") }}</span>
|
|
|
+ <m-related-environment
|
|
|
+ v-model="environmentCode"
|
|
|
+ :workerGroup="workerGroup"
|
|
|
+ v-on:environmentCodeEvent="_onUpdateEnvironmentCode"
|
|
|
+ ></m-related-environment>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
<!-- Number of failed retries -->
|
|
|
<m-list-box v-if="nodeData.taskType !== 'SUB_PROCESS'">
|
|
|
- <div slot="text">{{$t('Number of failed retries')}}</div>
|
|
|
+ <div slot="text">{{ $t("Number of failed retries") }}</div>
|
|
|
<div slot="content">
|
|
|
- <m-select-input v-model="maxRetryTimes" :list="[0,1,2,3,4]"></m-select-input>
|
|
|
- <span>({{$t('Times')}})</span>
|
|
|
- <span class="text-b">{{$t('Failed retry interval')}}</span>
|
|
|
- <m-select-input v-model="retryInterval" :list="[1,10,30,60,120]"></m-select-input>
|
|
|
- <span>({{$t('Minute')}})</span>
|
|
|
+ <m-select-input
|
|
|
+ v-model="maxRetryTimes"
|
|
|
+ :list="[0, 1, 2, 3, 4]"
|
|
|
+ ></m-select-input>
|
|
|
+ <span>({{ $t("Times") }})</span>
|
|
|
+ <span class="text-b">{{ $t("Failed retry interval") }}</span>
|
|
|
+ <m-select-input
|
|
|
+ v-model="retryInterval"
|
|
|
+ :list="[1, 10, 30, 60, 120]"
|
|
|
+ ></m-select-input>
|
|
|
+ <span>({{ $t("Minute") }})</span>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
<!-- Delay execution time -->
|
|
|
- <m-list-box v-if="nodeData.taskType !== 'SUB_PROCESS' && nodeData.taskType !== 'CONDITIONS' && nodeData.taskType !== 'DEPENDENT'&& nodeData.taskType !== 'SWITCH'">
|
|
|
- <div slot="text">{{$t('Delay execution time')}}</div>
|
|
|
+ <m-list-box
|
|
|
+ v-if="
|
|
|
+ nodeData.taskType !== 'SUB_PROCESS' &&
|
|
|
+ nodeData.taskType !== 'CONDITIONS' &&
|
|
|
+ nodeData.taskType !== 'DEPENDENT' &&
|
|
|
+ nodeData.taskType !== 'SWITCH'
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <div slot="text">{{ $t("Delay execution time") }}</div>
|
|
|
<div slot="content">
|
|
|
- <m-select-input v-model="delayTime" :list="[0,1,5,10]"></m-select-input>
|
|
|
- <span>({{$t('Minute')}})</span>
|
|
|
+ <m-select-input
|
|
|
+ v-model="delayTime"
|
|
|
+ :list="[0, 1, 5, 10]"
|
|
|
+ ></m-select-input>
|
|
|
+ <span>({{ $t("Minute") }})</span>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
<!-- Branch flow -->
|
|
|
<m-list-box v-if="nodeData.taskType === 'CONDITIONS'">
|
|
|
- <div slot="text">{{$t('State')}}</div>
|
|
|
+ <div slot="text">{{ $t("State") }}</div>
|
|
|
<div slot="content">
|
|
|
- <span class="label-box" style="width: 193px;display: inline-block;">
|
|
|
- <el-select style="width: 157px;" size="small" v-model="successNode" :disabled="true">
|
|
|
- <el-option v-for="item in stateList" :key="item.value" :value="item.value" :label="item.label"></el-option>
|
|
|
+ <span class="label-box" style="width: 193px; display: inline-block">
|
|
|
+ <el-select
|
|
|
+ style="width: 157px"
|
|
|
+ size="small"
|
|
|
+ v-model="successNode"
|
|
|
+ :disabled="true"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in stateList"
|
|
|
+ :key="item.value"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</span>
|
|
|
- <span class="text-b" style="padding-left: 38px">{{$t('Branch flow')}}</span>
|
|
|
- <el-select style="width: 157px;" size="small" v-model="successBranch" clearable :disabled="isDetails">
|
|
|
- <el-option v-for="item in postTasks" :key="item.code" :value="item.name" :label="item.name"></el-option>
|
|
|
+ <span class="text-b" style="padding-left: 38px">{{
|
|
|
+ $t("Branch flow")
|
|
|
+ }}</span>
|
|
|
+ <el-select
|
|
|
+ style="width: 157px"
|
|
|
+ size="small"
|
|
|
+ v-model="successBranch"
|
|
|
+ clearable
|
|
|
+ :disabled="isDetails"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in postTasks"
|
|
|
+ :key="item.code"
|
|
|
+ :value="item.name"
|
|
|
+ :label="item.name"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
<m-list-box v-if="nodeData.taskType === 'CONDITIONS'">
|
|
|
- <div slot="text">{{$t('State')}}</div>
|
|
|
+ <div slot="text">{{ $t("State") }}</div>
|
|
|
<div slot="content">
|
|
|
- <span class="label-box" style="width: 193px;display: inline-block;">
|
|
|
- <el-select style="width: 157px;" size="small" v-model="failedNode" :disabled="true">
|
|
|
- <el-option v-for="item in stateList" :key="item.value" :value="item.value" :label="item.label"></el-option>
|
|
|
+ <span class="label-box" style="width: 193px; display: inline-block">
|
|
|
+ <el-select
|
|
|
+ style="width: 157px"
|
|
|
+ size="small"
|
|
|
+ v-model="failedNode"
|
|
|
+ :disabled="true"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in stateList"
|
|
|
+ :key="item.value"
|
|
|
+ :value="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</span>
|
|
|
- <span class="text-b" style="padding-left: 38px">{{$t('Branch flow')}}</span>
|
|
|
- <el-select style="width: 157px;" size="small" v-model="failedBranch" clearable :disabled="isDetails">
|
|
|
- <el-option v-for="item in postTasks" :key="item.code" :value="item.name" :label="item.name"></el-option>
|
|
|
+ <span class="text-b" style="padding-left: 38px">{{
|
|
|
+ $t("Branch flow")
|
|
|
+ }}</span>
|
|
|
+ <el-select
|
|
|
+ style="width: 157px"
|
|
|
+ size="small"
|
|
|
+ v-model="failedBranch"
|
|
|
+ clearable
|
|
|
+ :disabled="isDetails"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in postTasks"
|
|
|
+ :key="item.code"
|
|
|
+ :value="item.name"
|
|
|
+ :label="item.name"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</div>
|
|
|
</m-list-box>
|
|
|
|
|
|
- <!-- Task timeout alarm -->
|
|
|
- <m-timeout-alarm
|
|
|
- v-if="nodeData.taskType !== 'DEPENDENT'"
|
|
|
- ref="timeout"
|
|
|
- :backfill-item="backfillItem"
|
|
|
- @on-timeout="_onTimeout">
|
|
|
- </m-timeout-alarm>
|
|
|
- <!-- Dependent timeout alarm -->
|
|
|
- <m-dependent-timeout
|
|
|
- v-if="nodeData.taskType === 'DEPENDENT'"
|
|
|
- ref="dependentTimeout"
|
|
|
- :backfill-item="backfillItem"
|
|
|
- @on-timeout="_onDependentTimeout">
|
|
|
- </m-dependent-timeout>
|
|
|
+ <div v-if="backfillRefresh">
|
|
|
+ <!-- Task timeout alarm -->
|
|
|
+ <m-timeout-alarm
|
|
|
+ v-if="nodeData.taskType !== 'DEPENDENT'"
|
|
|
+ ref="timeout"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ @on-timeout="_onTimeout"
|
|
|
+ >
|
|
|
+ </m-timeout-alarm>
|
|
|
+ <!-- Dependent timeout alarm -->
|
|
|
+ <m-dependent-timeout
|
|
|
+ v-if="nodeData.taskType === 'DEPENDENT'"
|
|
|
+ ref="dependentTimeout"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ @on-timeout="_onDependentTimeout"
|
|
|
+ >
|
|
|
+ </m-dependent-timeout>
|
|
|
|
|
|
- <!-- shell node -->
|
|
|
- <m-shell
|
|
|
- v-if="nodeData.taskType === 'SHELL'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="SHELL"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-shell>
|
|
|
- <!-- waterdrop node -->
|
|
|
- <m-waterdrop
|
|
|
- v-if="nodeData.taskType === 'WATERDROP'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="WATERDROP"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-waterdrop>
|
|
|
- <!-- sub_process node -->
|
|
|
- <m-sub-process
|
|
|
- v-if="nodeData.taskType === 'SUB_PROCESS'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- @on-set-process-name="_onSetProcessName"
|
|
|
- ref="SUB_PROCESS"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-sub-process>
|
|
|
- <!-- procedure node -->
|
|
|
- <m-procedure
|
|
|
- v-if="nodeData.taskType === 'PROCEDURE'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="PROCEDURE"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-procedure>
|
|
|
- <!-- sql node -->
|
|
|
- <m-sql
|
|
|
- v-if="nodeData.taskType === 'SQL'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="SQL"
|
|
|
- :create-node-id="nodeData.id"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-sql>
|
|
|
- <!-- spark node -->
|
|
|
- <m-spark
|
|
|
- v-if="nodeData.taskType === 'SPARK'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="SPARK"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-spark>
|
|
|
- <m-flink
|
|
|
- v-if="nodeData.taskType === 'FLINK'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="FLINK"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-flink>
|
|
|
- <!-- mr node -->
|
|
|
- <m-mr
|
|
|
- v-if="nodeData.taskType === 'MR'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="MR"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-mr>
|
|
|
- <!-- python node -->
|
|
|
- <m-python
|
|
|
- v-if="nodeData.taskType === 'PYTHON'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="PYTHON"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-python>
|
|
|
- <!-- dependent node -->
|
|
|
- <m-dependent
|
|
|
- v-if="nodeData.taskType === 'DEPENDENT'"
|
|
|
- @on-dependent="_onDependent"
|
|
|
- @on-cache-dependent="_onCacheDependent"
|
|
|
- ref="DEPENDENT"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-dependent>
|
|
|
- <m-http
|
|
|
- v-if="nodeData.taskType === 'HTTP'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="HTTP"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-http>
|
|
|
- <m-datax
|
|
|
- v-if="nodeData.taskType === 'DATAX'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="DATAX"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-datax>
|
|
|
- <m-sqoop
|
|
|
- v-if="nodeData.taskType === 'SQOOP'"
|
|
|
- @on-params="_onParams"
|
|
|
- @on-cache-params="_onCacheParams"
|
|
|
- ref="SQOOP"
|
|
|
- :backfill-item="backfillItem">
|
|
|
- </m-sqoop>
|
|
|
- <m-conditions
|
|
|
- v-if="nodeData.taskType === 'CONDITIONS'"
|
|
|
- ref="CONDITIONS"
|
|
|
- @on-dependent="_onDependent"
|
|
|
- @on-cache-dependent="_onCacheDependent"
|
|
|
- :backfill-item="backfillItem"
|
|
|
- :prev-tasks="prevTasks">
|
|
|
- </m-conditions>
|
|
|
- <m-switch
|
|
|
- v-if="nodeData.taskType === 'SWITCH'"
|
|
|
- ref="SWITCH"
|
|
|
- @on-switch-result="_onSwitchResult"
|
|
|
- :backfill-item="backfillItem"
|
|
|
- :nodeData="nodeData"
|
|
|
- ></m-switch>
|
|
|
+ <!-- shell node -->
|
|
|
+ <m-shell
|
|
|
+ v-if="nodeData.taskType === 'SHELL'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="SHELL"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-shell>
|
|
|
+ <!-- waterdrop node -->
|
|
|
+ <m-waterdrop
|
|
|
+ v-if="nodeData.taskType === 'WATERDROP'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="WATERDROP"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-waterdrop>
|
|
|
+ <!-- sub_process node -->
|
|
|
+ <m-sub-process
|
|
|
+ v-if="nodeData.taskType === 'SUB_PROCESS'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ @on-set-process-name="_onSetProcessName"
|
|
|
+ ref="SUB_PROCESS"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-sub-process>
|
|
|
+ <!-- procedure node -->
|
|
|
+ <m-procedure
|
|
|
+ v-if="nodeData.taskType === 'PROCEDURE'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="PROCEDURE"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-procedure>
|
|
|
+ <!-- sql node -->
|
|
|
+ <m-sql
|
|
|
+ v-if="nodeData.taskType === 'SQL'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="SQL"
|
|
|
+ :create-node-id="nodeData.id"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-sql>
|
|
|
+ <!-- spark node -->
|
|
|
+ <m-spark
|
|
|
+ v-if="nodeData.taskType === 'SPARK'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="SPARK"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-spark>
|
|
|
+ <m-flink
|
|
|
+ v-if="nodeData.taskType === 'FLINK'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="FLINK"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-flink>
|
|
|
+ <!-- mr node -->
|
|
|
+ <m-mr
|
|
|
+ v-if="nodeData.taskType === 'MR'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="MR"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-mr>
|
|
|
+ <!-- python node -->
|
|
|
+ <m-python
|
|
|
+ v-if="nodeData.taskType === 'PYTHON'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="PYTHON"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-python>
|
|
|
+ <!-- dependent node -->
|
|
|
+ <m-dependent
|
|
|
+ v-if="nodeData.taskType === 'DEPENDENT'"
|
|
|
+ @on-dependent="_onDependent"
|
|
|
+ @on-cache-dependent="_onCacheDependent"
|
|
|
+ ref="DEPENDENT"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-dependent>
|
|
|
+ <m-http
|
|
|
+ v-if="nodeData.taskType === 'HTTP'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="HTTP"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-http>
|
|
|
+ <m-datax
|
|
|
+ v-if="nodeData.taskType === 'DATAX'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="DATAX"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-datax>
|
|
|
+ <m-sqoop
|
|
|
+ v-if="nodeData.taskType === 'SQOOP'"
|
|
|
+ @on-params="_onParams"
|
|
|
+ @on-cache-params="_onCacheParams"
|
|
|
+ ref="SQOOP"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ >
|
|
|
+ </m-sqoop>
|
|
|
+ <m-conditions
|
|
|
+ v-if="nodeData.taskType === 'CONDITIONS'"
|
|
|
+ ref="CONDITIONS"
|
|
|
+ @on-dependent="_onDependent"
|
|
|
+ @on-cache-dependent="_onCacheDependent"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ :prev-tasks="prevTasks"
|
|
|
+ >
|
|
|
+ </m-conditions>
|
|
|
+ <m-switch
|
|
|
+ v-if="nodeData.taskType === 'SWITCH'"
|
|
|
+ ref="SWITCH"
|
|
|
+ @on-switch-result="_onSwitchResult"
|
|
|
+ :backfill-item="backfillItem"
|
|
|
+ :nodeData="nodeData"
|
|
|
+ ></m-switch>
|
|
|
+ </div>
|
|
|
<!-- Pre-tasks in workflow -->
|
|
|
- <m-pre-tasks ref="preTasks" v-if="['SHELL', 'SUB_PROCESS'].indexOf(nodeData.taskType) > -1" :code="code"/>
|
|
|
+ <m-pre-tasks
|
|
|
+ ref="preTasks"
|
|
|
+ v-if="['SHELL', 'SUB_PROCESS'].indexOf(nodeData.taskType) > -1"
|
|
|
+ :code="code"
|
|
|
+ />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="bottom-box">
|
|
|
- <div class="submit" style="background: #fff;">
|
|
|
- <el-button type="text" size="small" id="cancelBtn"> {{$t('Cancel')}} </el-button>
|
|
|
- <el-button type="primary" size="small" round :loading="spinnerLoading" @click="ok()" :disabled="isDetails">{{spinnerLoading ? $t('Loading...') : $t('Confirm add')}} </el-button>
|
|
|
+ <div class="submit" style="background: #fff">
|
|
|
+ <el-button type="text" size="small" id="cancelBtn">
|
|
|
+ {{ $t("Cancel") }}
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ round
|
|
|
+ :loading="spinnerLoading"
|
|
|
+ @click="ok()"
|
|
|
+ :disabled="isDetails"
|
|
|
+ >{{ spinnerLoading ? $t("Loading...") : $t("Confirm add") }}
|
|
|
+ </el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -318,6 +442,7 @@
|
|
|
import disabledState from '@/module/mixin/disabledState'
|
|
|
import mPriority from '@/module/components/priority/priority'
|
|
|
import { findComponentDownward } from '@/module/util/'
|
|
|
+ import CopyFromTask from './_source/copyFromTask.vue'
|
|
|
|
|
|
export default {
|
|
|
name: 'form-model',
|
|
@@ -384,7 +509,14 @@
|
|
|
],
|
|
|
// for CONDITIONS
|
|
|
postTasks: [],
|
|
|
- prevTasks: []
|
|
|
+ prevTasks: [],
|
|
|
+ // refresh part of the formModel, after set backfillItem outside
|
|
|
+ backfillRefresh: true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ provide () {
|
|
|
+ return {
|
|
|
+ formModel: this
|
|
|
}
|
|
|
},
|
|
|
/**
|
|
@@ -408,7 +540,11 @@
|
|
|
id: task.id,
|
|
|
maxRetryTimes: task.failRetryTimes,
|
|
|
name: task.name,
|
|
|
- params: _.omit(task.taskParams, ['conditionResult', 'dependence']),
|
|
|
+ params: _.omit(task.taskParams, [
|
|
|
+ 'conditionResult',
|
|
|
+ 'dependence',
|
|
|
+ 'waitStartTimeout'
|
|
|
+ ]),
|
|
|
retryInterval: task.failRetryInterval,
|
|
|
runFlag: task.flag,
|
|
|
taskInstancePriority: task.taskPriority,
|
|
@@ -448,13 +584,17 @@
|
|
|
*/
|
|
|
_onDependentTimeout (o) {
|
|
|
this.timeout = Object.assign(this.timeout, {}, o.waitCompleteTimeout)
|
|
|
- this.waitStartTimeout = Object.assign(this.waitStartTimeout, {}, o.waitStartTimeout)
|
|
|
+ this.waitStartTimeout = Object.assign(
|
|
|
+ this.waitStartTimeout,
|
|
|
+ {},
|
|
|
+ o.waitStartTimeout
|
|
|
+ )
|
|
|
},
|
|
|
/**
|
|
|
* Click external to close the current component
|
|
|
*/
|
|
|
_handleClose () {
|
|
|
- // this.close()
|
|
|
+ // this.close()
|
|
|
},
|
|
|
/**
|
|
|
* Jump to task instance
|
|
@@ -468,25 +608,39 @@
|
|
|
*/
|
|
|
_goSubProcess () {
|
|
|
if (_.isEmpty(this.backfillItem)) {
|
|
|
- this.$message.warning(`${i18n.$t('The newly created sub-Process has not yet been executed and cannot enter the sub-Process')}`)
|
|
|
+ this.$message.warning(
|
|
|
+ `${i18n.$t(
|
|
|
+ 'The newly created sub-Process has not yet been executed and cannot enter the sub-Process'
|
|
|
+ )}`
|
|
|
+ )
|
|
|
return
|
|
|
}
|
|
|
if (this.router.history.current.name === 'projects-instance-details') {
|
|
|
if (!this.taskInstance) {
|
|
|
- this.$message.warning(`${i18n.$t('The task has not been executed and cannot enter the sub-Process')}`)
|
|
|
+ this.$message.warning(
|
|
|
+ `${i18n.$t(
|
|
|
+ 'The task has not been executed and cannot enter the sub-Process'
|
|
|
+ )}`
|
|
|
+ )
|
|
|
return
|
|
|
}
|
|
|
- this.store.dispatch('dag/getSubProcessId', { taskId: this.taskInstance.id }).then(res => {
|
|
|
- this.$emit('onSubProcess', {
|
|
|
- subProcessId: res.data.subProcessInstanceId,
|
|
|
- fromThis: this
|
|
|
+ this.store
|
|
|
+ .dispatch('dag/getSubProcessId', { taskId: this.taskInstance.id })
|
|
|
+ .then((res) => {
|
|
|
+ this.$emit('onSubProcess', {
|
|
|
+ subProcessId: res.data.subProcessInstanceId,
|
|
|
+ fromThis: this
|
|
|
+ })
|
|
|
+ })
|
|
|
+ .catch((e) => {
|
|
|
+ this.$message.error(e.msg || '')
|
|
|
})
|
|
|
- }).catch(e => {
|
|
|
- this.$message.error(e.msg || '')
|
|
|
- })
|
|
|
} else {
|
|
|
- const processDefinitionId = this.backfillItem.params.processDefinitionId
|
|
|
- const process = this.processListS.find(process => process.processDefinition.id === processDefinitionId)
|
|
|
+ const processDefinitionId =
|
|
|
+ this.backfillItem.params.processDefinitionId
|
|
|
+ const process = this.processListS.find(
|
|
|
+ (process) => process.processDefinition.id === processDefinitionId
|
|
|
+ )
|
|
|
this.$emit('onSubProcess', {
|
|
|
subProcessCode: process.processDefinition.code,
|
|
|
fromThis: this
|
|
@@ -519,8 +673,16 @@
|
|
|
this.$message.warning(`${i18n.$t('Please enter name (required)')}`)
|
|
|
return false
|
|
|
}
|
|
|
- if (this.successBranch !== '' && this.successBranch !== null && this.successBranch === this.failedBranch) {
|
|
|
- this.$message.warning(`${i18n.$t('Cannot select the same node for successful branch flow and failed branch flow')}`)
|
|
|
+ if (
|
|
|
+ this.successBranch !== '' &&
|
|
|
+ this.successBranch !== null &&
|
|
|
+ this.successBranch === this.failedBranch
|
|
|
+ ) {
|
|
|
+ this.$message.warning(
|
|
|
+ `${i18n.$t(
|
|
|
+ 'Cannot select the same node for successful branch flow and failed branch flow'
|
|
|
+ )}`
|
|
|
+ )
|
|
|
return false
|
|
|
}
|
|
|
if (this.name === this.backfillItem.name) {
|
|
@@ -528,7 +690,7 @@
|
|
|
}
|
|
|
// Name repeat depends on dom backfill dependent store
|
|
|
const tasks = this.store.state.dag.tasks
|
|
|
- const task = tasks.find(t => t.name === 'this.name')
|
|
|
+ const task = tasks.find((t) => t.name === 'this.name')
|
|
|
if (task) {
|
|
|
this.$message.warning(`${i18n.$t('Name already exists')}`)
|
|
|
return false
|
|
@@ -536,11 +698,15 @@
|
|
|
return true
|
|
|
},
|
|
|
_verifWorkGroup () {
|
|
|
- let item = this.store.state.security.workerGroupsListAll.find(item => {
|
|
|
+ let item = this.store.state.security.workerGroupsListAll.find((item) => {
|
|
|
return item.id === this.workerGroup
|
|
|
})
|
|
|
if (item === undefined) {
|
|
|
- this.$message.warning(`${i18n.$t('The Worker group no longer exists, please select the correct Worker group!')}`)
|
|
|
+ this.$message.warning(
|
|
|
+ `${i18n.$t(
|
|
|
+ 'The Worker group no longer exists, please select the correct Worker group!'
|
|
|
+ )}`
|
|
|
+ )
|
|
|
return false
|
|
|
}
|
|
|
return true
|
|
@@ -619,20 +785,29 @@
|
|
|
* set run flag
|
|
|
* TODO
|
|
|
*/
|
|
|
- _setRunFlag () {
|
|
|
-
|
|
|
- },
|
|
|
- /**
|
|
|
- *
|
|
|
- */
|
|
|
+ _setRunFlag () {},
|
|
|
_setEdgeLabel () {
|
|
|
if (this.successBranch || this.failedBranch) {
|
|
|
const canvas = findComponentDownward(this.dagChart, 'dag-canvas')
|
|
|
const edges = canvas.getEdges()
|
|
|
- const successTask = this.postTasks.find(t => t.name === this.successBranch)
|
|
|
- const failedTask = this.postTasks.find(t => t.name === this.failedBranch)
|
|
|
- const sEdge = edges.find(edge => successTask && edge.sourceId === this.code && edge.targetId === successTask.code)
|
|
|
- const fEdge = edges.find(edge => failedTask && edge.sourceId === this.code && edge.targetId === failedTask.code)
|
|
|
+ const successTask = this.postTasks.find(
|
|
|
+ (t) => t.name === this.successBranch
|
|
|
+ )
|
|
|
+ const failedTask = this.postTasks.find(
|
|
|
+ (t) => t.name === this.failedBranch
|
|
|
+ )
|
|
|
+ const sEdge = edges.find(
|
|
|
+ (edge) =>
|
|
|
+ successTask &&
|
|
|
+ edge.sourceId === this.code &&
|
|
|
+ edge.targetId === successTask.code
|
|
|
+ )
|
|
|
+ const fEdge = edges.find(
|
|
|
+ (edge) =>
|
|
|
+ failedTask &&
|
|
|
+ edge.sourceId === this.code &&
|
|
|
+ edge.targetId === failedTask.code
|
|
|
+ )
|
|
|
sEdge && canvas.setEdgeLabel(sEdge.id, this.$t('Success'))
|
|
|
fEdge && canvas.setEdgeLabel(fEdge.id, this.$t('Failed'))
|
|
|
}
|
|
@@ -659,6 +834,57 @@
|
|
|
flag: flag,
|
|
|
fromThis: this
|
|
|
})
|
|
|
+ },
|
|
|
+ backfill (backfillItem, copyFromTask) {
|
|
|
+ const o = backfillItem
|
|
|
+ // Non-null objects represent backfill
|
|
|
+ if (!_.isEmpty(o)) {
|
|
|
+ this.code = o.code
|
|
|
+ !copyFromTask && (this.name = o.name)
|
|
|
+ this.taskInstancePriority = o.taskInstancePriority
|
|
|
+ this.runFlag = o.runFlag || 'YES'
|
|
|
+ this.desc = o.desc
|
|
|
+ this.maxRetryTimes = o.maxRetryTimes
|
|
|
+ this.retryInterval = o.retryInterval
|
|
|
+ this.delayTime = o.delayTime
|
|
|
+ if (o.conditionResult) {
|
|
|
+ this.successBranch = o.conditionResult.successNode[0]
|
|
|
+ this.failedBranch = o.conditionResult.failedNode[0]
|
|
|
+ }
|
|
|
+ // If the workergroup has been deleted, set the default workergroup
|
|
|
+ for (
|
|
|
+ let i = 0;
|
|
|
+ i < this.store.state.security.workerGroupsListAll.length;
|
|
|
+ i++
|
|
|
+ ) {
|
|
|
+ let workerGroup = this.store.state.security.workerGroupsListAll[i].id
|
|
|
+ if (o.workerGroup === workerGroup) {
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (o.workerGroup === undefined) {
|
|
|
+ this.store
|
|
|
+ .dispatch('dag/getTaskInstanceList', {
|
|
|
+ pageSize: 10,
|
|
|
+ pageNo: 1,
|
|
|
+ processInstanceId: this.nodeData.instanceId,
|
|
|
+ name: o.name
|
|
|
+ })
|
|
|
+ .then((res) => {
|
|
|
+ this.workerGroup = res.totalList[0].workerGroup
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ this.workerGroup = o.workerGroup
|
|
|
+ }
|
|
|
+ this.environmentCode = o.environmentCode
|
|
|
+ this.params = o.params || {}
|
|
|
+ this.dependence = o.dependence || {}
|
|
|
+ this.cacheDependence = o.dependence || {}
|
|
|
+ } else {
|
|
|
+ this.workerGroup = this.store.state.security.workerGroupsListAll[0].id
|
|
|
+ }
|
|
|
+ this.cacheBackfillItem = JSON.parse(JSON.stringify(o))
|
|
|
+ this.isContentBox = true
|
|
|
}
|
|
|
},
|
|
|
created () {
|
|
@@ -666,7 +892,7 @@
|
|
|
let taskList = this.store.state.dag.tasks
|
|
|
let o = {}
|
|
|
if (taskList.length) {
|
|
|
- taskList.forEach(task => {
|
|
|
+ taskList.forEach((task) => {
|
|
|
if (task.code === this.nodeData.id) {
|
|
|
const backfillItem = this.taskToBackfillItem(task)
|
|
|
o = backfillItem
|
|
@@ -675,46 +901,7 @@
|
|
|
})
|
|
|
}
|
|
|
this.code = this.nodeData.id
|
|
|
- // Non-null objects represent backfill
|
|
|
- if (!_.isEmpty(o)) {
|
|
|
- this.code = o.code
|
|
|
- this.name = o.name
|
|
|
- this.taskInstancePriority = o.taskInstancePriority
|
|
|
- this.runFlag = o.runFlag || 'YES'
|
|
|
- this.desc = o.desc
|
|
|
- this.maxRetryTimes = o.maxRetryTimes
|
|
|
- this.retryInterval = o.retryInterval
|
|
|
- this.delayTime = o.delayTime
|
|
|
- if (o.conditionResult) {
|
|
|
- this.successBranch = o.conditionResult.successNode[0]
|
|
|
- this.failedBranch = o.conditionResult.failedNode[0]
|
|
|
- }
|
|
|
- // If the workergroup has been deleted, set the default workergroup
|
|
|
- for (let i = 0; i < this.store.state.security.workerGroupsListAll.length; i++) {
|
|
|
- let workerGroup = this.store.state.security.workerGroupsListAll[i].id
|
|
|
- if (o.workerGroup === workerGroup) {
|
|
|
- break
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (o.workerGroup === undefined) {
|
|
|
- this.store.dispatch('dag/getTaskInstanceList', {
|
|
|
- pageSize: 10, pageNo: 1, processInstanceId: this.nodeData.instanceId, name: o.name
|
|
|
- }).then(res => {
|
|
|
- this.workerGroup = res.totalList[0].workerGroup
|
|
|
- })
|
|
|
- } else {
|
|
|
- this.workerGroup = o.workerGroup
|
|
|
- }
|
|
|
- this.environmentCode = o.environmentCode
|
|
|
- this.params = o.params || {}
|
|
|
- this.dependence = o.dependence || {}
|
|
|
- this.cacheDependence = o.dependence || {}
|
|
|
- } else {
|
|
|
- this.workerGroup = this.store.state.security.workerGroupsListAll[0].id
|
|
|
- }
|
|
|
- this.cacheBackfillItem = JSON.parse(JSON.stringify(o))
|
|
|
- this.isContentBox = true
|
|
|
+ this.backfill(o)
|
|
|
|
|
|
if (this.dagChart) {
|
|
|
const canvas = findComponentDownward(this.dagChart, 'dag-canvas')
|
|
@@ -736,17 +923,11 @@
|
|
|
self.close()
|
|
|
})
|
|
|
},
|
|
|
- updated () {
|
|
|
- },
|
|
|
- beforeDestroy () {
|
|
|
- },
|
|
|
- destroyed () {
|
|
|
- },
|
|
|
+ updated () {},
|
|
|
+ beforeDestroy () {},
|
|
|
+ destroyed () {},
|
|
|
computed: {
|
|
|
- ...mapState('dag', [
|
|
|
- 'processListS',
|
|
|
- 'taskInstances'
|
|
|
- ]),
|
|
|
+ ...mapState('dag', ['processListS', 'taskInstances']),
|
|
|
/**
|
|
|
* Child workflow entry show/hide
|
|
|
*/
|
|
@@ -786,16 +967,17 @@
|
|
|
mPriority,
|
|
|
mWorkerGroups,
|
|
|
mRelatedEnvironment,
|
|
|
- mPreTasks
|
|
|
+ mPreTasks,
|
|
|
+ CopyFromTask
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" rel="stylesheet/scss">
|
|
|
- @import "./formModel";
|
|
|
- .ans-radio-disabled {
|
|
|
- .ans-radio-inner:after {
|
|
|
- background-color: #6F8391
|
|
|
- }
|
|
|
+@import "./formModel";
|
|
|
+.ans-radio-disabled {
|
|
|
+ .ans-radio-inner:after {
|
|
|
+ background-color: #6f8391;
|
|
|
}
|
|
|
+}
|
|
|
</style>
|