diff --git a/src/resources/api/autoexec/action/action.js b/src/resources/api/autoexec/action/action.js index 0eba77084f67cd37d1edb58e4f817d8268d47c5a..86224aa8f73b023dec51f135204564e654d6bd18 100644 --- a/src/resources/api/autoexec/action/action.js +++ b/src/resources/api/autoexec/action/action.js @@ -115,7 +115,7 @@ const action = { // 获取可执行组合工具分类列表 return axios.post('/api/rest/autoexec/combop/type/executable/list', params); }, - searchResourceCustomList(params) { + searchResourceCustomList(params) { //废弃 // 高级查询资源中心数据列表 return axios.post('/api/rest/resourcecenter/resource/custom/list', params); }, diff --git a/src/resources/assets/js/util.js b/src/resources/assets/js/util.js index 21b03e3f6f7cdc0e2584b5d5a33c8e3825f5e51b..aa2295c9cbcca9e7ba7915b0baf9d49dc3f03cec 100644 --- a/src/resources/assets/js/util.js +++ b/src/resources/assets/js/util.js @@ -1243,6 +1243,9 @@ const methods = { } return result; }, + filteredObj (obj, list) { //过滤对象中指定的属性列表 + return _.omit(obj, list) + }, isValidTimeString(timeStr) { //校验时间字符串 if(!timeStr || typeof timeStr !== 'string') { return false; diff --git a/src/resources/assets/languages/term/en.json b/src/resources/assets/languages/term/en.json index 3d4b45e63a542309e1b77b72238ec3414bd67d2c..e697635b310acccee551775b2e2e9074723f3904 100644 --- a/src/resources/assets/languages/term/en.json +++ b/src/resources/assets/languages/term/en.json @@ -914,7 +914,10 @@ "parall": "Concurrent quantity", "paralldesc": "Execute the execution targets in order of concurrency.", "jobrecord": "Automated job recording", - "jobcount": "Number of automated tasks" + "jobcount": "Number of automated tasks", + "precondition": "pre-filter", + "globalprecondition": "Global pre filter", + "preconditiontip": "If empty, inherit the global pre filter" }, "framework": { "roleauth": "Authorize immediately after creating the role", @@ -2887,7 +2890,14 @@ "defaultstatus": "Defaults on", "joinalert": "Merge into alarms", "uniquekey": "unique", - "alertsign": "Alarm features" + "alertsign": "Alarm features", + "iswholerow": "Exclusive one line display", + "istab": "Exclusive tab display", + "serialsave": "Serial save", + "subscribeaudit": "Subscription Audit", + "clickcopyattr": "Click to copy attributes", + "alertinterval": "Notification interval", + "cc": "cc" }, "runnergroup": { "ruletips": "The request for login authentication needs to carry a header as a rule expression (note that the header parameter in the expression is all lowercase). If the value of the expression after execution is true, the executor group will take effect, and false and syntax exceptions will not take effect. For example: ${env}==\\ bit \\&&(${test}==\\ 1 \\ | | ${test2}==\\ aaa \\)" diff --git a/src/resources/assets/languages/term/zh.json b/src/resources/assets/languages/term/zh.json index 5789eefa76289698ed7427446be32bb0dea84c2a..45641bcdc795036ebb43b99bc0244bdc61dcd699 100644 --- a/src/resources/assets/languages/term/zh.json +++ b/src/resources/assets/languages/term/zh.json @@ -914,7 +914,10 @@ "parall": "并发数量", "paralldesc": "将执行目标按并发数量先后执行。", "jobrecord": "自动化作业记录", - "jobcount": "自动化作业数" + "jobcount": "自动化作业数", + "precondition": "前置过滤器", + "globalprecondition": "全局前置过滤器", + "preconditiontip": "如果为空时,继承全局前置过滤器" }, "framework": { "roleauth": "创建完角色立即授权", @@ -2887,7 +2890,14 @@ "defaultstatus": "默认状态", "joinalert": "归并到告警", "uniquekey": "唯一键", - "alertsign": "告警特征" + "alertsign": "告警特征", + "iswholerow": "独占一行展示", + "istab": "独占页签展示", + "serialsave": "串行保存", + "subscribeaudit": "订阅审计", + "clickcopyattr": "点击复制属性", + "alertinterval": "通知间隔", + "cc": "抄送" }, "informant": { "last5dump": "最近5次快照", diff --git a/src/resources/components/CombineSearcher/CombineSearcher.vue b/src/resources/components/CombineSearcher/CombineSearcher.vue index 75b947c8dc18694a23be5b3bc40d457547ec7ae5..01f1aad07edf74ee6eb0521e1059fffda294c8a8 100644 --- a/src/resources/components/CombineSearcher/CombineSearcher.vue +++ b/src/resources/components/CombineSearcher/CombineSearcher.vue @@ -7,7 +7,7 @@ :key="tindex" :name="tindex" :fade="false" - class="tag-item-text border-color radius-sm overflow bg-op" + class="tag-item-text border-base radius-sm overflow bg-op" > {{ getLabel(tindex) }} : @@ -130,7 +130,7 @@
- +
@@ -227,6 +227,12 @@ export default { // 底部是否显示高级模式文案 type: Boolean, default: false + }, + searchText: { + type: String, + default() { + return this.$t('page.search'); + } } }, data() { @@ -739,7 +745,6 @@ export default { display: none; } .tag-item-text{ - border: 1px dashed; padding: 0 16px; line-height: 30px; display: inline-block; diff --git a/src/resources/plugins/TsForm/TsFormItem.vue b/src/resources/plugins/TsForm/TsFormItem.vue index 677f977d42d7ab876bfbd7903a31fffa139a5e71..12e4273dae1ef52b19f02b6db834c5dafa5e9ae8 100755 --- a/src/resources/plugins/TsForm/TsFormItem.vue +++ b/src/resources/plugins/TsForm/TsFormItem.vue @@ -256,7 +256,7 @@ function getRequired(validateList, required) { } diff --git a/src/views/pages/autoexec/detail/actionDetail/step-group.vue b/src/views/pages/autoexec/detail/actionDetail/step-group.vue index 05617862529bc1e31a9d73d1af3db0b533fcf319..40e8ebea826d0159523339095e74eb0c2426cc54 100644 --- a/src/views/pages/autoexec/detail/actionDetail/step-group.vue +++ b/src/views/pages/autoexec/detail/actionDetail/step-group.vue @@ -5,7 +5,7 @@
{{ $t('term.autoexec.stagegroup') }}
{{ currentGroupConfig.sort + 1 }}
- + +
@@ -139,12 +150,12 @@ @@ -172,7 +183,8 @@ export default { TsFormSwitch: () => import('@/resources/plugins/TsForm/TsFormSwitch'), ExecuteuserSetting: () => import('@/views/pages/autoexec/detail/actionDetail/executeuser-setting.vue'), RunnerGroupSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergroup-setting.vue'), - RunnerGroupTagSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergrouptag-setting.vue') + RunnerGroupTagSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergrouptag-setting.vue'), + PreconditionDetail: () => import('@/views/pages/autoexec/detail/actionDetail/precondition-detail.vue') }, filters: {}, props: { @@ -203,7 +215,8 @@ export default { type: Array, default: () => [] }, - runtimeParamList: Array + runtimeParamList: Array, + globalPreCondition: Object //全局前置过滤器 }, data() { let _this = this; @@ -299,6 +312,10 @@ export default { label: this.$t('term.autoexec.parall'), desc: this.$t('term.autoexec.paralldesc'), dataList: this.$utils.getRoundCountList() + }, + preCondition: { + type: 'slot', + label: this.$t('term.autoexec.precondition') } }, executeConfig: { @@ -311,7 +328,8 @@ export default { executeNodeConfig: {}, isPresetRunnerGroup: 0, runnerGroup: null, - runnerGroupTag: null + runnerGroupTag: null, + preCondition: null }, isValid: false, // 校验执行目标 @@ -324,7 +342,8 @@ export default { mappingMode: 'constant', value: '', text: '' - } + }, + preCondition: null }; }, beforeCreate() {}, @@ -341,6 +360,7 @@ export default { this.executeConfig[key] = this.config.config.executeConfig[key]; } }); + this.preCondition = !this.$utils.isEmpty(this.executeConfig.preCondition) ? this.$utils.deepClone(this.executeConfig.preCondition) : null; if (!this.$utils.isEmpty(this.executeConfig.runnerGroup) || !this.$utils.isEmpty(this.executeConfig.runnerGroupTag)) { this.$set(this.executeConfig, 'isPresetRunnerGroup', 1); } @@ -395,7 +415,7 @@ export default { } else { this.executeConfig.parallelCount = null; } - + this.executeConfig.preCondition = !this.$utils.isEmpty(this.preCondition) ? this.preCondition : null; if (this.$refs.form.valid()) { let editConfig = this.$utils.deepClone(this.editConfig); if (editConfig.policy && (!this.groupConfig || this.groupConfig.policy != 'grayScale' || (this.editConfig.execMode && this.editConfig.execMode != 'runner' && this.editConfig.execMode != 'sqlfile'))) { @@ -485,14 +505,12 @@ export default { } }); }, - async ok() { - this.isValid = false; - (this.editConfig.execMode != 'runner') && (await this.validSetting(true)); - if (this.isValid) { + ok() { + if (!this.$utils.isEmpty(this.preCondition) && this.$refs.targetDetail && !this.$refs.targetDetail.valid()) { return; - } else { - this.confirmEdit(); } + // (this.editConfig.execMode != 'runner') && (await this.validSetting(true)); //废弃接口校验规则 + this.confirmEdit(); }, saveValid() { //校验完成,保存 this.confirmEdit(); @@ -521,6 +539,9 @@ export default { this.$set(this.executeForm.parallelCount, 'isHidden', false); } }); + }, + changePreConditionValue(val) { + this.preCondition = !this.$utils.isEmpty(val) ? val : null; } }, computed: {}, diff --git a/src/views/pages/autoexec/detail/actionDetail/step/step-list.vue b/src/views/pages/autoexec/detail/actionDetail/step/step-list.vue index aeabacb059af11a6ffe4fc4ff08ef94359cba8ed..98804203be90ffa9f21217016198cd7971890b63 100644 --- a/src/views/pages/autoexec/detail/actionDetail/step/step-list.vue +++ b/src/views/pages/autoexec/detail/actionDetail/step/step-list.vue @@ -98,6 +98,7 @@ :groupConfig="groupConfig" :prevStepList="getPrev(editConfig, stepList)" :runtimeParamList="runtimeParamList" + :globalPreCondition="globalPreCondition" @close="close" > @@ -145,7 +146,8 @@ export default { type: Array }, scrollLeft: Number, - runtimeParamList: Array + runtimeParamList: Array, + globalPreCondition: Object //全局前置条件 }, data() { return { diff --git a/src/views/pages/autoexec/detail/runner-detail.vue b/src/views/pages/autoexec/detail/runner-detail.vue index 01b02d7541c9292ce409fb031070162af3f82a79..603b8a6f4c209a63a8f109df84d4d7b4bce66bdf 100644 --- a/src/views/pages/autoexec/detail/runner-detail.vue +++ b/src/views/pages/autoexec/detail/runner-detail.vue @@ -60,7 +60,7 @@
@@ -74,7 +74,7 @@
@@ -88,7 +88,7 @@
@@ -151,7 +151,18 @@
{{ $t('term.autoexec.executetarget') }} -
+ + + +
@@ -289,7 +301,8 @@ export default { ExpiredReasonAlert: () => import('./expired-reason-alert'), ExecuteuserSetting: () => import('@/views/pages/autoexec/detail/actionDetail/executeuser-setting.vue'), RunnerGroupSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergroup-setting.vue'), - RunnerGroupTagSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergrouptag-setting.vue') + RunnerGroupTagSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergrouptag-setting.vue'), + PreconditionDetail: () => import('@/views/pages/autoexec/detail/actionDetail/precondition-detail.vue') }, filters: {}, props: { @@ -346,7 +359,7 @@ export default { } }, executeForm: { - labelWidth: 100, + labelWidth: 110, labelPosition: 'left', itemList: { protocolId: { @@ -436,7 +449,8 @@ export default { value: 'roundCount' } ], - parallelPolicy: 'parallel' + parallelPolicy: 'parallel', + preCondition: null }; }, beforeCreate() {}, @@ -577,6 +591,9 @@ export default { this.scenarioList = this.dataConfig.config.scenarioList; } this.getSelectStepList(this.scenarioId); + if (this.dataConfig.config.executeConfig && !this.$utils.isEmpty(this.dataConfig.config.executeConfig.preCondition)) { + this.preCondition = this.dataConfig.config.executeConfig.preCondition; + } }) .finally(res => { this.loading = false; diff --git a/src/views/pages/autoexec/detail/runnerDetail/add-target.vue b/src/views/pages/autoexec/detail/runnerDetail/add-target.vue index a584af5808fad5aa6518690f27d8291f6a239b35..90dd9165639298effe2da36d19ee32e880f6c9e7 100644 --- a/src/views/pages/autoexec/detail/runnerDetail/add-target.vue +++ b/src/views/pages/autoexec/detail/runnerDetail/add-target.vue @@ -1,6 +1,35 @@ - -
+ + + @@ -278,6 +288,7 @@ export default { ExpiredReasonAlert: () => import('@/views/pages/autoexec/quick-service/service-catalog/expired-reason-alert'), // 服务失效原因提示列表 RunnerGroupSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergroup-setting.vue'), RunnerGroupTagSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergrouptag-setting.vue'), + PreconditionDetail: () => import('@/views/pages/autoexec/detail/actionDetail/precondition-detail.vue'), ...Component }, mixins: [serviceMixin], diff --git a/src/views/pages/autoexec/quick-service/service-catalog/other-params.vue b/src/views/pages/autoexec/quick-service/service-catalog/other-params.vue index 03cdb41f4fc1bc943ea5d31c3f499d618531e5cb..55878c4804c80246767391605ede9cbf5d9e7685 100644 --- a/src/views/pages/autoexec/quick-service/service-catalog/other-params.vue +++ b/src/views/pages/autoexec/quick-service/service-catalog/other-params.vue @@ -125,6 +125,15 @@
+ + + import('@/views/pages/autoexec/detail/runnerDetail/add-target.vue'), RunnerGroupSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergroup-setting.vue'), RunnerGroupTagSetting: () => import('@/views/pages/autoexec/detail/actionDetail/runnergrouptag-setting.vue'), + PreconditionDetail: () => import('@/views/pages/autoexec/detail/actionDetail/precondition-detail.vue'), ...Component }, props: { diff --git a/src/views/pages/cmdb/asset/advanced-mode-search.vue b/src/views/pages/cmdb/asset/advanced-mode-search.vue index 5c2c5c1b5124381acf34cc43e6ab1fc9d0b4e7df..1837d8870cfd8286eaf6c1a14efb8ced26da1034 100644 --- a/src/views/pages/cmdb/asset/advanced-mode-search.vue +++ b/src/views/pages/cmdb/asset/advanced-mode-search.vue @@ -8,7 +8,7 @@ {{ item.label }} : @@ -188,7 +188,7 @@
- +
@@ -245,6 +245,12 @@ export default { // 搜索条件列表 type: Array, default: () => { return []; } + }, + searchText: { + type: String, + default() { + return this.$t('page.search'); + } } }, data() { @@ -921,7 +927,6 @@ export default { white-space: nowrap; overflow: hidden; .tag-item-text{ - border: 1px dashed; padding: 0 16px; line-height: 30px; display: inline-block; diff --git a/src/views/pages/cmdb/asset/asset-manage.vue b/src/views/pages/cmdb/asset/asset-manage.vue index fe1bab57668985dbca4877b4e907019907caba21..5b85e4d5ac3a6dff2c9b34b2a4bdf5eb65d27da2 100644 --- a/src/views/pages/cmdb/asset/asset-manage.vue +++ b/src/views/pages/cmdb/asset/asset-manage.vue @@ -1086,7 +1086,7 @@ export default { }; this.loadingShow = true; this.$api.autoexec.action - .searchResourceCustomList(params) + .getNodeList(params) .then(res => { if (res.Status == 'OK') { this.tableConfig = Object.assign(this.tableConfig, res.Return || {}); diff --git a/src/views/pages/cmdb/cientity/delete-cientity-list.vue b/src/views/pages/cmdb/cientity/delete-cientity-list.vue index ff1d825a14db1a14d40f5f0e64ce5e4e744a9b11..d136b5717dc3e4b1db8141c16ced25389667d396 100644 --- a/src/views/pages/cmdb/cientity/delete-cientity-list.vue +++ b/src/views/pages/cmdb/cientity/delete-cientity-list.vue @@ -3,7 +3,7 @@
@@ -114,14 +114,28 @@ export default { searchParam: { pageSize: this.pageSize }, searchConfig: { search: false, + searchMode: 'clickBtnSearch', labelPosition: 'left', - labelWidth: 70, + labelWidth: 110, searchList: [ + { + type: 'text', + name: 'ciEntityName', + label: this.$t('term.cmdb.cientityname') + }, { type: 'text', name: 'transactionId', label: this.$t('term.cmdb.transactionid') }, + { + type: 'userselect', + name: 'deleteUser', + groupList: ['user'], + multiple: false, + label: this.$t('term.autoexec.operator'), + transfer: true + }, { type: 'select', name: 'inputFrom', @@ -131,10 +145,10 @@ export default { transfer: true }, { - type: 'daterange', + type: 'datetimerange', name: 'commitTimeRange', label: this.$t('page.deletetime'), - format: 'yyyy-MM-dd', + format: 'yyyy-MM-dd HH:mm', transfer: true } ] diff --git a/src/views/pages/cmdb/discovery/obj-manage.vue b/src/views/pages/cmdb/discovery/obj-manage.vue index eb545f746be958fbfcaeb7dbad0d098658c413f8..ebc4457beea9b860eaf9c852193ebcc6d67289c3 100644 --- a/src/views/pages/cmdb/discovery/obj-manage.vue +++ b/src/views/pages/cmdb/discovery/obj-manage.vue @@ -35,15 +35,15 @@
{{ $t('term.cmdb.objectcategory') }}
-
{{ row.objCategory }}
+
{{ row.objCategory }}
{{ $t('term.cmdb.objecttype') }}
-
{{ row.objType }}
+
{{ row.objType }}
{{ $t('page.model') }}
-
{{ row.ciLabel }}
+
{{ row.ciLabel }}
diff --git a/src/views/pages/cmdb/transaction/transaction-manage.vue b/src/views/pages/cmdb/transaction/transaction-manage.vue index f09d1e7837ef2e0183040bbc25121169ff67f7a5..6e6adcc2b428139e5670e1b4e9776ecc54d49842 100644 --- a/src/views/pages/cmdb/transaction/transaction-manage.vue +++ b/src/views/pages/cmdb/transaction/transaction-manage.vue @@ -135,6 +135,7 @@ export default { searchConfig: { search: false, labelPosition: 'left', + searchMode: 'clickBtnSearch', searchList: [ { type: 'text', name: 'transactionId', label: this.$t('term.cmdb.transactionid') }, { type: 'text', name: 'transactionGroupId', label: this.$t('term.cmdb.transactiongroupid') }, @@ -172,24 +173,24 @@ export default { transfer: true }, { - type: 'daterange', + type: 'datetimerange', name: 'createTimeRange', label: this.$t('page.actiondate'), - format: 'yyyy-MM-dd', + format: 'yyyy-MM-dd HH:mm', transfer: true }, { - type: 'daterange', + type: 'datetimerange', name: 'commitTimeRange', label: this.$t('page.commitdate'), - format: 'yyyy-MM-dd', + format: 'yyyy-MM-dd HH:mm', transfer: true }, { - type: 'daterange', + type: 'datetimerange', name: 'recoverTimeRange', label: this.$t('page.restoredate'), - format: 'yyyy-MM-dd', + format: 'yyyy-MM-dd HH:mm', transfer: true } ] 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 { diff --git a/src/views/pages/deploy/pipeline/add-deployjob-form.vue b/src/views/pages/deploy/pipeline/add-deployjob-form.vue index b6c16b896ae60942bb47f6ba73f2e6b286aaa41d..32f520d45deedbb1caf2e198bce76624d647944b 100644 --- a/src/views/pages/deploy/pipeline/add-deployjob-form.vue +++ b/src/views/pages/deploy/pipeline/add-deployjob-form.vue @@ -8,44 +8,10 @@ :labelWidth="90" > -