From a9d1f27d767c1eb3dd62695f7138fac749ded384 Mon Sep 17 00:00:00 2001 From: dengbf Date: Tue, 16 Sep 2025 14:29:42 +0800 Subject: [PATCH] =?UTF-8?q?-=20[=E4=BF=AE=E5=A4=8D]=20=E9=9B=86=E6=88=90?= =?UTF-8?q?=E5=8F=91=E5=B8=83=EF=BC=9A=E5=BA=94=E7=94=A8=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E7=BA=BF=E8=A1=A5=E5=85=85=20native/LOOP-Block=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/autoexec/detail/action-detail.vue | 1 + .../application-config-pipeline.vue | 71 ++++++++++++++++--- .../application-config/pipeline-detail.vue | 68 +++++++++++++++--- .../pipeline/step/step-config.vue | 7 +- .../pipeline/step/step-list.vue | 7 +- 5 files changed, 130 insertions(+), 24 deletions(-) diff --git a/src/views/pages/autoexec/detail/action-detail.vue b/src/views/pages/autoexec/detail/action-detail.vue index f4ab4d1a..d56fc70a 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 4735cdd5..48ee8082 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 217ff230..0480dfda 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 063463a2..e0bcbccc 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 63e2fc73..d3fa646c 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 { -- Gitee