diff --git a/src/views/pages/autoexec/detail/action-detail.vue b/src/views/pages/autoexec/detail/action-detail.vue index f4ab4d1ab34b8e69db04d43fc01d9fdae996563b..d56fc70a7ddcd6ea037eb180bc17f35efa97ebc1 100644 --- a/src/views/pages/autoexec/detail/action-detail.vue +++ b/src/views/pages/autoexec/detail/action-detail.vue @@ -697,6 +697,7 @@ export default { this.$set(item.config, 'elseList', this.savePhaseOperationList(item.config.elseList)); } } else if (item.operationName == 'native/LOOP-Block') { + delete item.config.paramMappingList; if (item.config.operations && item.config.operations.length) { this.$set(item.config, 'operations', this.savePhaseOperationList(item.config.operations)); } diff --git a/src/views/pages/deploy/application-config/application-config-pipeline.vue b/src/views/pages/deploy/application-config/application-config-pipeline.vue index 4735cdd5651e87289ff284efa1ab0ab494993574..48ee8082ea44c1a13bdb57dec9792d43ccc1950a 100644 --- a/src/views/pages/deploy/application-config/application-config-pipeline.vue +++ b/src/views/pages/deploy/application-config/application-config-pipeline.vue @@ -75,6 +75,7 @@ :runtimeParamList="runtimeParamList" :combopGroupList="combopGroupList" :execModeList="execModeList" + :validPhaseOperationUuidList="validPhaseOperationUuidList" @updateSort="updateSort" @change="changeSelectStep" > @@ -233,7 +234,8 @@ export default { protocolId: null, executeUser: {} }, - isShowStepTopo: false + isShowStepTopo: false, + validPhaseOperationUuidList: [] }; }, beforeCreate() {}, @@ -550,12 +552,13 @@ export default { }); } this.changeSelectStep(item); + this.validPhaseOperationUuidList = obj.validUuidList; this.$nextTick(() => { this.$refs.stepList && this.$refs.stepList.valid(); }); } }); - this.$utils.jumpTo(obj.id); + this.$utils.jumpTo(obj.id, '', '', 'start'); }, getValidList() { //流水线检验 let validList = []; @@ -595,9 +598,10 @@ export default { validList.length && this.$refs.stepList && this.$refs.stepList.valid(); return validList; }, - validPhaseOperationList(step, phaseOperationList) { //校验工具列表 + validPhaseOperationList(step, phaseOperationList, validPperationUuidList) { //校验工具列表 let validList = []; phaseOperationList.forEach(p => { + let validUuidList = [p.uuid, ...validPperationUuidList || []]; if (p.operationName == 'native/IF-Block') { if (p.config) { !p.config.condition && validList.push({ @@ -606,7 +610,8 @@ export default { stepUuid: step.uuid, operationUuid: p.uuid, id: '#id_' + step.uuid + '_' + p.uuid, - current: 1 + current: 1, + validUuidList: validUuidList }); if (this.$utils.isEmpty(p.config.ifList) && this.$utils.isEmpty(p.config.elseList)) { validList.push({ @@ -615,18 +620,53 @@ export default { stepUuid: step.uuid, operationUuid: p.uuid, id: '#id_' + step.uuid + '_' + p.uuid, - current: 1 + current: 1, + validUuidList: validUuidList }); } if (p.config.ifList && p.config.ifList.length) { - let validIfList = this.validPhaseOperationList(step, p.config.ifList); + let validIfList = this.validPhaseOperationList(step, p.config.ifList, validUuidList); validIfList.length && validList.push(...validIfList); } if (p.config.elseList && p.config.elseList.length) { - let validElseList = this.validPhaseOperationList(step, p.config.elseList); + let validElseList = this.validPhaseOperationList(step, p.config.elseList, validUuidList); validElseList.length && validList.push(...validElseList); } } + } else if (p.operationName == 'native/LOOP-Block') { + if (p.config) { + !p.config.loopItems && validList.push({ + text: this.$t('page.phase') + step.name + '【' + p.operationName + '】' + this.$t('term.autoexec.setinputloopitems'), + type: 'error', + stepUuid: step.uuid, + operationUuid: p.uuid, + id: '#id_' + step.uuid + '_' + p.uuid, + current: 1, + validUuidList: validUuidList + }); + !p.config.loopItemVar && validList.push({ + text: this.$t('page.phase') + step.name + '【' + p.operationName + '】' + this.$t('term.autoexec.setinputloopitemvar'), + type: 'error', + stepUuid: step.uuid, + operationUuid: p.uuid, + id: '#id_' + step.uuid + '_' + p.uuid, + current: 1, + validUuidList: validUuidList + }); + (!p.config.operations || p.config.operations.length == 0) && validList.push({ + text: this.$t('page.phase') + step.name + '【' + p.operationName + '】' + this.$t('term.autoexec.setinputloopoperations'), + type: 'error', + stepUuid: step.uuid, + operationUuid: p.uuid, + id: '#id_' + step.uuid + '_' + p.uuid, + current: 1, + validUuidList: validUuidList + }); + if (p.config.operations && p.config.operations.length) { + let validOperations = this.validPhaseOperationList(step, p.config.operations, validUuidList); + validOperations.length && validList.push(...validOperations); + } + } } else { let isPass = true; //输入参数 let isPassArgument = true; //自由参数必填校验 @@ -651,7 +691,8 @@ export default { stepUuid: step.uuid, operationUuid: p.uuid, id: '#id_' + step.uuid + '_' + p.uuid, - current: 1 + current: 1, + validUuidList: validUuidList }); } } @@ -669,7 +710,8 @@ export default { stepUuid: step.uuid, operationUuid: p.uuid, id: '#id_' + step.uuid + '_' + p.uuid, - current: 1 + current: 1, + validUuidList: validUuidList }); } } @@ -681,7 +723,8 @@ export default { stepUuid: step.uuid, operationUuid: p.uuid, id: '#id_' + step.uuid + '_' + p.uuid, - current: 1 + current: 1, + validUuidList: validUuidList }); } } @@ -692,7 +735,8 @@ export default { stepUuid: step.uuid, operationUuid: p.uuid, id: '#id_' + step.uuid + '_' + p.uuid, - current: 1 + current: 1, + validUuidList: validUuidList }); } } @@ -747,6 +791,11 @@ export default { if (item.config.elseList && item.config.elseList.length) { this.$set(item.config, 'elseList', this.savePhaseOperationList(item.config.elseList)); } + } else if (item.operationName == 'native/LOOP-Block') { + delete item.config.paramMappingList; + if (item.config.operations && item.config.operations.length) { + this.$set(item.config, 'operations', this.savePhaseOperationList(item.config.operations)); + } } else { delete item.config.profileParamList; if (item.config && item.config.paramMappingList) { diff --git a/src/views/pages/deploy/application-config/pipeline-detail.vue b/src/views/pages/deploy/application-config/pipeline-detail.vue index 217ff2304319195c66d0ac511c64af5bd9060069..0480dfda037f92aa58154ef5874060a8e4607178 100644 --- a/src/views/pages/deploy/application-config/pipeline-detail.vue +++ b/src/views/pages/deploy/application-config/pipeline-detail.vue @@ -94,6 +94,7 @@ :combopGroupList="combopGroupList" :execModeList="execModeList" :canEdit="canEdit" + :validPhaseOperationUuidList="validPhaseOperationUuidList" @updateSort="updateSort" @change="changeSelectStep" > @@ -294,7 +295,8 @@ export default { executeConfig: null, hasEditAuth: true, // 是否有编辑配置权限 isShowImportPipeline: false, - isExportPipeline: false + isExportPipeline: false, + validPhaseOperationUuidList: [] }; }, beforeCreate() {}, @@ -573,6 +575,11 @@ export default { if (item.config.elseList && item.config.elseList.length) { this.$set(item.config, 'elseList', this.savePhaseOperationList(item.config.elseList)); } + } else if (item.operationName == 'native/LOOP-Block') { + delete item.config.paramMappingList; + if (item.config.operations && item.config.operations.length) { + this.$set(item.config, 'operations', this.savePhaseOperationList(item.config.operations)); + } } else { delete item.config.profileParamList; if (item.config && item.config.paramMappingList) { @@ -835,12 +842,13 @@ export default { }); } this.changeSelectStep(item); + this.validPhaseOperationUuidList = obj.validUuidList; this.$nextTick(() => { this.$refs.stepList.valid(); }); } }); - this.$utils.jumpTo(obj.id); + this.$utils.jumpTo(obj.id, '', '', 'start'); }, showRuntimeParamList() { //展示作业参数 this.isShowParamList = true; @@ -916,9 +924,10 @@ export default { } }); }, - validPhaseOperationList(step, phaseOperationList) { //校验工具列表 + validPhaseOperationList(step, phaseOperationList, validPperationUuidList) { //校验工具列表 let validList = []; phaseOperationList.forEach(p => { + let validUuidList = [p.uuid, ...validPperationUuidList || []]; if (p.operationName == 'native/IF-Block') { if (p.config) { !p.config.condition && validList.push({ @@ -926,7 +935,8 @@ export default { type: 'error', stepUuid: step.uuid, operationUuid: p.uuid, - id: '#id_' + step.uuid + '_' + p.uuid + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList }); if (this.$utils.isEmpty(p.config.ifList) && this.$utils.isEmpty(p.config.elseList)) { validList.push({ @@ -934,18 +944,50 @@ export default { type: 'error', stepUuid: step.uuid, operationUuid: p.uuid, - id: '#id_' + step.uuid + '_' + p.uuid + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList }); } if (p.config.ifList && p.config.ifList.length) { - let validIfList = this.validPhaseOperationList(step, p.config.ifList); + let validIfList = this.validPhaseOperationList(step, p.config.ifList, validUuidList); validIfList.length && validList.push(...validIfList); } if (p.config.elseList && p.config.elseList.length) { - let validElseList = this.validPhaseOperationList(step, p.config.elseList); + let validElseList = this.validPhaseOperationList(step, p.config.elseList, validUuidList); validElseList.length && validList.push(...validElseList); } } + } else if (p.operationName == 'native/LOOP-Block') { + if (p.config) { + !p.config.loopItems && validList.push({ + text: this.$t('page.phase') + step.name + '【' + p.operationName + '】' + this.$t('term.autoexec.setinputloopitems'), + type: 'error', + stepUuid: step.uuid, + operationUuid: p.uuid, + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList + }); + !p.config.loopItemVar && validList.push({ + text: this.$t('page.phase') + step.name + '【' + p.operationName + '】' + this.$t('term.autoexec.setinputloopitemvar'), + type: 'error', + stepUuid: step.uuid, + operationUuid: p.uuid, + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList + }); + (!p.config.operations || p.config.operations.length == 0) && validList.push({ + text: this.$t('page.phase') + step.name + '【' + p.operationName + '】' + this.$t('term.autoexec.setinputloopoperations'), + type: 'error', + stepUuid: step.uuid, + operationUuid: p.uuid, + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList + }); + if (p.config.operations && p.config.operations.length) { + let validOperations = this.validPhaseOperationList(step, p.config.operations, validUuidList); + validOperations.length && validList.push(...validOperations); + } + } } else { let isPass = true; //输入参数 let isPassArgument = true; //自由参数必填校验 @@ -969,7 +1011,8 @@ export default { type: 'error', stepUuid: step.uuid, operationUuid: p.uuid, - id: '#id_' + step.uuid + '_' + p.uuid + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList }); } } @@ -986,7 +1029,8 @@ export default { type: 'error', stepUuid: step.uuid, operationUuid: p.uuid, - id: '#id_' + step.uuid + '_' + p.uuid + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList }); } } @@ -997,7 +1041,8 @@ export default { type: 'error', stepUuid: step.uuid, operationUuid: p.uuid, - id: '#id_' + step.uuid + '_' + p.uuid + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList }); } } @@ -1007,7 +1052,8 @@ export default { type: 'error', stepUuid: step.uuid, operationUuid: p.uuid, - id: '#id_' + step.uuid + '_' + p.uuid + id: '#id_' + step.uuid + '_' + p.uuid, + validUuidList: validUuidList }); } } diff --git a/src/views/pages/deploy/application-config/pipeline/step/step-config.vue b/src/views/pages/deploy/application-config/pipeline/step/step-config.vue index 063463a26b016f2f2f0404f003cddea5e7272f3f..e0bcbccc8295d896bbbbb22305b8a181856044db 100644 --- a/src/views/pages/deploy/application-config/pipeline/step/step-config.vue +++ b/src/views/pages/deploy/application-config/pipeline/step/step-config.vue @@ -13,6 +13,7 @@ :failPolicyOption="failPolicyOption" :inputTypeList="inputTypeList" :execMode="currentStepConfig.execMode" + :validPhaseOperationUuidList="validPhaseOperationUuidList" @sortList="sortList" > @@ -48,7 +49,11 @@ export default { runtimeParamList: Array, //作业参数 list: Array, //工具列表 failPolicyOption: Array, //失败策略下拉列表 - inputTypeList: Array //输入参数映射下拉 + inputTypeList: Array, //输入参数映射下拉 + validPhaseOperationUuidList: { + type: Array, + default: () => [] + } }, data() { return { diff --git a/src/views/pages/deploy/application-config/pipeline/step/step-list.vue b/src/views/pages/deploy/application-config/pipeline/step/step-list.vue index 63e2fc73a94322b2de6e17a0ab86afba14b33505..d3fa646cb9eb6efef2824f92f8b85a565f21b9b3 100644 --- a/src/views/pages/deploy/application-config/pipeline/step/step-list.vue +++ b/src/views/pages/deploy/application-config/pipeline/step/step-list.vue @@ -111,6 +111,7 @@ :prevStepList="getPrev(step,stepList)" :failPolicyOption="failPolicyOption" :inputTypeList="inputTypeList" + :validPhaseOperationUuidList="validPhaseOperationUuidList" @changeOperation="(list)=>{changeOperation(list, step)}" > @@ -178,7 +179,11 @@ export default { }, appSystemId: Number, //应用id appModuleId: Number, //模块id - envId: Number //环境id + envId: Number, //环境id + validPhaseOperationUuidList: { + type: Array, + default: () => [] + } }, data() { return {