diff --git a/src/views/pages/deploy/job/job-add.vue b/src/views/pages/deploy/job/job-add.vue index 554a6a29b1ced5a8a02068edd0a84b872cbf77b1..857fc04912bf03d0fbc3b046168dbe5f59d53d4e 100644 --- a/src/views/pages/deploy/job/job-add.vue +++ b/src/views/pages/deploy/job/job-add.vue @@ -215,7 +215,8 @@ export default { jobId: null, //作业id jobConfig: {}, paramValue: {}, - saveLoading: false + saveLoading: false, + moduleEnvInstanceMap: {} }; }, beforeCreate() {}, @@ -276,7 +277,7 @@ export default { this.$api.deploy.job.getJobModuleList(data).then(res => { if (res && res.Status == 'OK') { let moduleList = res.Return || []; - this.appModuleList.forEach(async(item) => { + this.appModuleList.forEach((item) => { let findItem = moduleList.find(m => m.id == item.id); if (findItem) { this.$set(item, 'canSelectModule', true); //标识可选择的模块 @@ -296,11 +297,19 @@ export default { } else { this.$set(item, 'isChecked', true); } - - this.$set(item, 'isSelectInstance', !!item.isSelectInstance); - if (item.isSelectInstance && type != 'scenario') { //场景改变时,实例不变 - this.$set(item, 'loadingShow', true); - await this.getInstanceList(item); + if (type === 'env') { //环境改变时,实例改变 + const key = 'app_' + findItem.id + '_' + this.envId; + if (this.moduleEnvInstanceMap[key] && !this.$utils.isEmpty(this.moduleEnvInstanceMap[key])) { + this.$set(item, 'isSelectInstance', false); + this.$set(item, 'loadingShow', true); + this.$set(item, 'instanceList', this.moduleEnvInstanceMap[key]); + this.$nextTick(() => { + this.$set(item, 'isSelectInstance', true); + }); + } else { + this.$set(item, 'isSelectInstance', false); + this.$set(item, 'instanceList', []); + } } this.$set(item, 'disabled', false); } else { @@ -337,6 +346,7 @@ export default { this.scenarioId = item.scenarioId; this.combopPhaseNameList = item.combopPhaseNameList; } else if (type == 'env') { + this.getModuleEnvInstanceMap(this.envId); this.envId = item.id; this.envName = item.name; //环境改变时,需要从新查询当前实例 @@ -350,6 +360,16 @@ export default { this.disabledBtn = true; this.getJobModuleList(type); }, + getModuleEnvInstanceMap(envId) { + this.appModuleList.forEach(item => { + const key = 'app_' + item.id + '_' + envId; + if (item.isSelectInstance) { + this.$set(this.moduleEnvInstanceMap, key, item.instanceList || []); + } else { + this.$set(this.moduleEnvInstanceMap, key, []); + } + }); + }, saveJobData() { let data = { appSystemId: this.appSystemId, @@ -520,43 +540,6 @@ export default { } } }, - getInstanceList(module) { - //获取实例列表 - let data = { - needPage: false, - appSystemId: this.appSystemId, - envId: this.envId, - appModuleId: module.id - }; - return this.$api.deploy.env - .getInstanceList(data) - .then(res => { - if (res.Status == 'OK') { - if (res.Return && res.Return.tbodyList && res.Return.tbodyList.length) { - let instanceList = res.Return.tbodyList; - instanceList.forEach(i => { - //处理回显数据 - if (!this.$utils.isEmpty(module.instanceList)) { - let findItem = module.instanceList.find(ins => ins.id === i.id); - if (findItem) { - this.$set(i, 'isChecked', !!findItem.isChecked); - } else { - this.$set(i, 'isChecked', true); - } - } else { - this.$set(i, 'isChecked', true); - } - }); - this.$set(module, 'instanceList', instanceList); - } else { - this.$set(module, 'instanceList', []); - } - } - }) - .finally(() => { - this.$set(module, 'loadingShow', false); - }); - }, getRoundCountList() { let list = [ { diff --git a/src/views/pages/deploy/job/publishing/module-list.vue b/src/views/pages/deploy/job/publishing/module-list.vue index 3978491cba272bdfab1a66bfb1ad1b2a565b799e..f8664c008155bccd33b8bdb17e56ef1fcc553ea6 100644 --- a/src/views/pages/deploy/job/publishing/module-list.vue +++ b/src/views/pages/deploy/job/publishing/module-list.vue @@ -54,43 +54,18 @@
-
+
-
-
- - {{ $t('page.selectall') }} - -
-
- - -
- - {{ i.name }} - [{{ i.ip }}] - -
- -
-
-
-
{{ $t('term.deploy.moduleenvnotinstance', {modulename: item.name, envname: envName}) }}
+
@@ -138,7 +113,8 @@ export default { AddVersionDialog: () => import('./module/add-version-dialog.vue'), TsFormItem: () => import('@/resources/plugins/TsForm/TsFormItem'), TsFormSwitch: () => import('@/resources/plugins/TsForm/TsFormSwitch'), - ModuleEdit: () => import('@/views/pages/deploy/application-config/config/module/module-edit') + ModuleEdit: () => import('@/views/pages/deploy/application-config/config/module/module-edit'), + InstanceSetting: () => import('./module/instance-setting.vue') }, props: { appSystemId: Number, @@ -230,53 +206,10 @@ export default { //筛选实例 if (item.isSelectInstance) { this.$set(item, 'loadingShow', true); - this.getInstanceList(item); - } - }, - getInstanceList(module) { - //获取实例列表 - let data = { - needPage: false, - appSystemId: this.appSystemId, - envId: this.envId, - appModuleId: module.id - }; - this.$api.deploy.env - .getInstanceList(data) - .then(res => { - if (res.Status == 'OK') { - if (res.Return && res.Return.tbodyList && res.Return.tbodyList.length) { - let instanceList = res.Return.tbodyList; - instanceList.forEach(i => { - //处理回显数据 - if (module.instanceList) { - if (module.instanceList.find(ins => ins.id === i.id)) { - this.$set(i, 'isChecked', true); - } - } else { - this.$set(i, 'isChecked', true); - } - }); - this.$set(module, 'instanceList', instanceList); - } else { - this.$set(module, 'instanceList', []); - } - } - }) - .finally(() => { - this.$set(module, 'loadingShow', false); - }); - }, - checkAllInstance(module, isChecked) { - if (module.instanceList && module.instanceList.length) { - module.instanceList.forEach(i => { - this.$set(i, 'isChecked', isChecked); - }); + } else { + this.$set(item, 'instanceList', []); } }, - checkInstance() { - this.$emit('updateSelectModuleList', this.appModuleListLocal); - }, getData() { //向外提供的取数接口 let moduleList = []; @@ -328,10 +261,10 @@ export default { }); } if (m.isSelectInstance) { - let selectNodeList = m.instanceList.filter(i => { + let selectNodeList = m.instanceList && m.instanceList.filter(i => { return i.isChecked; }); - if (!selectNodeList.length) { + if (this.$utils.isEmpty(selectNodeList)) { validList.push({ text: this.$t('term.deploy.moduleconfigatleastselectainstance', {target: m.name}), type: 'error', @@ -357,6 +290,9 @@ export default { } } this.isShowModuleInfoEdit = false; + }, + updateInstanceList(module, val) { + this.$set(module, 'instanceList', val); } }, filter: {}, @@ -387,30 +323,6 @@ export default { } } return false; - }, - allInstanceCheck() { - return module => { - if (module.instanceList && module.instanceList.length > 0) { - const uncheckItem = module.instanceList.find(element => !element.isChecked); - const checkedItem = module.instanceList.find(element => element.isChecked); - if (!uncheckItem && checkedItem) { - return true; - } - } - return false; - }; - }, - allInstanceIndeterminate() { - return module => { - if (module.instanceList && module.instanceList.length > 0) { - const uncheckItem = module.instanceList.find(element => !element.isChecked); - const checkedItem = module.instanceList.find(element => element.isChecked); - if (uncheckItem && checkedItem) { - return true; - } - } - return false; - }; } }, watch: { diff --git a/src/views/pages/deploy/job/publishing/module/instance-setting.vue b/src/views/pages/deploy/job/publishing/module/instance-setting.vue new file mode 100644 index 0000000000000000000000000000000000000000..d53ca8dbb9b46b04aab6306844472e57d54da71c --- /dev/null +++ b/src/views/pages/deploy/job/publishing/module/instance-setting.vue @@ -0,0 +1,300 @@ + + + diff --git a/src/views/pages/deploy/job/publishing/module/more-instance-dialog.vue b/src/views/pages/deploy/job/publishing/module/more-instance-dialog.vue new file mode 100644 index 0000000000000000000000000000000000000000..46af74229688702caed68dae9def6d7adbf45fd0 --- /dev/null +++ b/src/views/pages/deploy/job/publishing/module/more-instance-dialog.vue @@ -0,0 +1,176 @@ + + + diff --git a/src/views/pages/deploy/pipeline/edit-jobtemplate-dialog.vue b/src/views/pages/deploy/pipeline/edit-jobtemplate-dialog.vue index 77261769a175bc454daedc87e8782057aa05ad05..6e86889c5a57dd8b4165eeba2c3b0574e6dd0baa 100644 --- a/src/views/pages/deploy/pipeline/edit-jobtemplate-dialog.vue +++ b/src/views/pages/deploy/pipeline/edit-jobtemplate-dialog.vue @@ -141,7 +141,11 @@ export default { id: { type: Number }, job: {type: Object}, appSystemId: {type: Number}, - type: {type: String} + type: {type: String}, + isUpdateJobTemplate: { + type: Boolean, + default: false + } }, data() { return { @@ -185,20 +189,21 @@ export default { transfer: true, desc: this.$t('term.autoexec.roundcountdescrition'), validateList: ['required', 'maxNum'] - } + }, + moduleEnvInstanceMap: {} }; }, beforeCreate() {}, - created() { + async created() { + if (this.id && !this.isUpdateJobTemplate) { + await this.getJobTemplateById(); + } else if (this.job) { + this.jobTemplateData = this.job; + } if (this.appSystemId) { this.$set(this.jobTemplateData, 'appSystemId', this.appSystemId); this.$set(this.appSystemConfig, 'disabled', true); } - if (this.id) { - this.getJobTemplateById(); - } else if (this.job) { - this.jobTemplateData = this.job; - } }, beforeMount() {}, mounted() {}, @@ -209,10 +214,9 @@ export default { beforeDestroy() {}, destroyed() {}, methods: { - toggleCheckAllModule(val) {}, getJobTemplateById() { if (this.id) { - this.$api.deploy.pipeline.getJobTemplateById(this.id).then(res => { + return this.$api.deploy.pipeline.getJobTemplateById(this.id).then(res => { this.jobTemplateData = res.Return; }); } @@ -305,7 +309,7 @@ export default { const selectedModule = this.appModuleList.find(d => d.id === this.jobTemplateData.appModuleId); if (selectedModule) { this.$set(selectedModule, 'isChecked', true); - if (this.jobTemplateData.config.selectNodeList && this.jobTemplateData.config.selectNodeList.length > 0) { + if (this.jobTemplateData.config && this.jobTemplateData.config.selectNodeList && this.jobTemplateData.config.selectNodeList.length > 0) { this.$set(selectedModule, 'isSelectInstance', true); const instanceList = this.$utils.deepClone(this.jobTemplateData.config.selectNodeList); instanceList.forEach(ins => { @@ -332,11 +336,13 @@ export default { this.$set(this.jobTemplateData, 'scenarioName', scenario.scenarioName); }, selectEnv(env) { + if (this.jobTemplateData && this.jobTemplateData.envId) { + this.getModuleEnvInstanceMap(this.jobTemplateData.envId); + } + this.$set(this.jobTemplateData, 'envId', env.id); this.$set(this.jobTemplateData, 'envName', env.name); - }, - checkAppModule(val) { - console.log(val); + this.updateInstanceList(env.id); }, save() { if (!this.jobTemplateData.id && !this.jobTemplateData.uuid) { @@ -365,6 +371,9 @@ export default { const moduleList = this.$refs?.moduleList.getData() || []; if (moduleList && moduleList.length == 1) { const module = moduleList[0]; + if (!this.jobTemplateData.config) { + this.jobTemplateData.config = {}; + } this.jobTemplateData.config.selectNodeList = module.selectNodeList; this.$emit('update', this.jobTemplateData); } else { @@ -384,6 +393,36 @@ export default { ]; list.push(...this.$utils.getRoundCountList()); return list; + }, + getModuleEnvInstanceMap(envId) { + if (!envId) { + return; + } + this.appModuleList.forEach(item => { + const key = 'app_' + item.id + '_' + envId; + if (item.isSelectInstance) { + this.$set(this.moduleEnvInstanceMap, key, item.instanceList || []); + } else { + this.$set(this.moduleEnvInstanceMap, key, []); + } + }); + }, + updateInstanceList(envId) { + this.appModuleList.forEach(item => { + this.$set(item, 'isSelectInstance', false); + const key = 'app_' + item.id + '_' + envId; + if (this.moduleEnvInstanceMap[key] && !this.$utils.isEmpty(this.moduleEnvInstanceMap[key])) { + this.$set(item, 'isSelectInstance', false); + this.$set(item, 'loadingShow', true); + this.$set(item, 'instanceList', this.moduleEnvInstanceMap[key]); + this.$nextTick(() => { + this.$set(item, 'isSelectInstance', true); + }); + } else { + this.$set(item, 'isSelectInstance', false); + this.$set(item, 'instanceList', []); + } + }); } }, filter: {}, diff --git a/src/views/pages/deploy/pipeline/pipeline-edit.vue b/src/views/pages/deploy/pipeline/pipeline-edit.vue index 56b4a77be04bc770c457daba69c856ace5b2fb7b..fec61dac8d1c652da107dacbb1572f3145e55e23 100644 --- a/src/views/pages/deploy/pipeline/pipeline-edit.vue +++ b/src/views/pages/deploy/pipeline/pipeline-edit.vue @@ -20,7 +20,7 @@
{{ $t('page.authority') }} {{ $t('page.delete') }} - +