mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	zone: Update physical network traffic labels (#884)
* update infra physical network traffic labels * add translation label * Use blank traffic label to placeholder instead set value * fix to reset the traffic label * Update src/views/infra/network/EditTrafficLabel.vue Co-authored-by: davidjumani <dj.davidjumani1994@gmail.com> Co-authored-by: davidjumani <dj.davidjumani1994@gmail.com> Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
		
							parent
							
								
									ea0802b4c8
								
							
						
					
					
						commit
						aba0f56e9c
					
				| @ -84,14 +84,14 @@ export default { | ||||
|     { | ||||
|       api: 'updatePhysicalNetwork', | ||||
|       icon: 'edit', | ||||
|       label: 'Update Physical Network', | ||||
|       label: 'label.update.physical.network', | ||||
|       dataView: true, | ||||
|       args: ['vlan', 'tags'] | ||||
|     }, | ||||
|     { | ||||
|       api: 'addTrafficType', | ||||
|       icon: 'plus-square', | ||||
|       label: 'Add Traffic Type', | ||||
|       label: 'label.add.traffic.type', | ||||
|       dataView: true, | ||||
|       args: ['traffictype', 'physicalnetworkid', 'isolationmethod'], | ||||
|       mapping: { | ||||
| @ -109,15 +109,10 @@ export default { | ||||
|     { | ||||
|       api: 'updateTrafficType', | ||||
|       icon: 'branches', | ||||
|       label: 'Update Traffic Labels', | ||||
|       label: 'label.update.traffic.label', | ||||
|       dataView: true, | ||||
|       args: ['id', 'kvmnetworklabel', 'vmwarenetworklabel', 'xennetworklabel', 'hypervnetworklabel', 'ovm3networklabel'], | ||||
|       mapping: { | ||||
|         id: { | ||||
|           api: 'listTrafficTypes', | ||||
|           params: (record) => { return { physicalnetworkid: record.id } } | ||||
|         } | ||||
|       } | ||||
|       popup: true, | ||||
|       component: () => import('@/views/infra/network/EditTrafficLabel.vue') | ||||
|     }, | ||||
|     { | ||||
|       api: 'deletePhysicalNetwork', | ||||
|  | ||||
| @ -362,6 +362,7 @@ | ||||
| "label.add.template": "Add Template", | ||||
| "label.add.to.group": "Add to group", | ||||
| "label.add.traffic": "Add Traffic", | ||||
| "label.add.traffic.type": "Add Traffic Type", | ||||
| "label.add.ucs.manager": "Add UCS Manager", | ||||
| "label.add.user": "Add User", | ||||
| "label.add.vlan": "Add VLAN", | ||||
| @ -2129,11 +2130,13 @@ | ||||
| "label.unlimited": "Unlimited", | ||||
| "label.untagged": "Untagged", | ||||
| "label.update.instance.group": "Update Instance Group", | ||||
| "label.update.physical.network": "Update Physical Network", | ||||
| "label.update.project.resources": "Update project resources", | ||||
| "label.update.project.role": "Update project role", | ||||
| "label.update.ssl": " SSL Certificate", | ||||
| "label.update.ssl.cert": " SSL Certificate", | ||||
| "label.update.to": "updated to", | ||||
| "label.update.traffic.label": "Update Traffic Labels", | ||||
| "label.update.vmware.datacenter": "Update VMware Datacenter", | ||||
| "label.updating": "Updating", | ||||
| "label.upgrade.router.newer.template": "Upgrade Router to Use Newer Template", | ||||
|  | ||||
							
								
								
									
										235
									
								
								ui/src/views/infra/network/EditTrafficLabel.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										235
									
								
								ui/src/views/infra/network/EditTrafficLabel.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,235 @@ | ||||
| // Licensed to the Apache Software Foundation (ASF) under one | ||||
| // or more contributor license agreements.  See the NOTICE file | ||||
| // distributed with this work for additional information | ||||
| // regarding copyright ownership.  The ASF licenses this file | ||||
| // to you under the Apache License, Version 2.0 (the | ||||
| // "License"); you may not use this file except in compliance | ||||
| // with the License.  You may obtain a copy of the License at | ||||
| // | ||||
| //   http://www.apache.org/licenses/LICENSE-2.0 | ||||
| // | ||||
| // Unless required by applicable law or agreed to in writing, | ||||
| // software distributed under the License is distributed on an | ||||
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
| // KIND, either express or implied.  See the License for the | ||||
| // specific language governing permissions and limitations | ||||
| // under the License. | ||||
| 
 | ||||
| <template> | ||||
|   <div class="form-layout"> | ||||
|     <a-spin :spinning="loading"> | ||||
|       <a-form :form="form" :loading="loading" @submit="handleSubmit" layout="vertical"> | ||||
|         <a-form-item> | ||||
|           <span slot="label"> | ||||
|             {{ $t('label.traffictype') }} | ||||
|             <a-tooltip :title="apiParams.id.description"> | ||||
|               <a-icon type="info-circle" style="color: rgba(0,0,0,.45)" /> | ||||
|             </a-tooltip> | ||||
|           </span> | ||||
|           <a-select | ||||
|             v-decorator="['id', { | ||||
|               initialValue: selectedType, | ||||
|               rules: [{ required: true, message: $t('message.error.select') }] }]" | ||||
|             :loading="typeLoading" | ||||
|             :placeholder="apiParams.id.description" | ||||
|             @change="onChangeTrafficType"> | ||||
|             <a-select-option v-for="type in trafficTypes" :key="type.id"> | ||||
|               {{ type.traffictype }} | ||||
|             </a-select-option> | ||||
|           </a-select> | ||||
|         </a-form-item> | ||||
|         <a-form-item> | ||||
|           <span slot="label"> | ||||
|             {{ $t('label.kvmnetworklabel') }} | ||||
|             <a-tooltip :title="apiParams.kvmnetworklabel.description"> | ||||
|               <a-icon type="info-circle" style="color: rgba(0,0,0,.45)" /> | ||||
|             </a-tooltip> | ||||
|           </span> | ||||
|           <a-input | ||||
|             v-decorator="['kvmnetworklabel', { | ||||
|               initialValue: trafficResource.kvmnetworklabel | ||||
|             }]" | ||||
|             :placeholder="$t('label.network.label.display.for.blank.value')" /> | ||||
|         </a-form-item> | ||||
|         <a-form-item> | ||||
|           <span slot="label"> | ||||
|             {{ $t('label.vmwarenetworklabel') }} | ||||
|             <a-tooltip :title="apiParams.vmwarenetworklabel.description"> | ||||
|               <a-icon type="info-circle" style="color: rgba(0,0,0,.45)" /> | ||||
|             </a-tooltip> | ||||
|           </span> | ||||
|           <a-input | ||||
|             v-decorator="['vmwarenetworklabel', { | ||||
|               initialValue: trafficResource.vmwarenetworklabel | ||||
|             }]" | ||||
|             :placeholder="$t('label.network.label.display.for.blank.value')" /> | ||||
|         </a-form-item> | ||||
|         <a-form-item> | ||||
|           <span slot="label"> | ||||
|             {{ $t('label.xennetworklabel') }} | ||||
|             <a-tooltip :title="apiParams.xennetworklabel.description"> | ||||
|               <a-icon type="info-circle" style="color: rgba(0,0,0,.45)" /> | ||||
|             </a-tooltip> | ||||
|           </span> | ||||
|           <a-input | ||||
|             v-decorator="['xennetworklabel', { | ||||
|               initialValue: trafficResource.xennetworklabel | ||||
|             }]" | ||||
|             :placeholder="$t('label.network.label.display.for.blank.value')" /> | ||||
|         </a-form-item> | ||||
|         <a-form-item> | ||||
|           <span slot="label"> | ||||
|             {{ $t('label.hypervnetworklabel') }} | ||||
|             <a-tooltip :title="apiParams.hypervnetworklabel.description"> | ||||
|               <a-icon type="info-circle" style="color: rgba(0,0,0,.45)" /> | ||||
|             </a-tooltip> | ||||
|           </span> | ||||
|           <a-input | ||||
|             v-decorator="['hypervnetworklabel', { | ||||
|               initialValue: trafficResource.hypervnetworklabel | ||||
|             }]" | ||||
|             :placeholder="$t('label.network.label.display.for.blank.value')" /> | ||||
|         </a-form-item> | ||||
|         <a-form-item> | ||||
|           <span slot="label"> | ||||
|             {{ $t('label.ovm3networklabel') }} | ||||
|             <a-tooltip :title="apiParams.ovm3networklabel.description"> | ||||
|               <a-icon type="info-circle" style="color: rgba(0,0,0,.45)" /> | ||||
|             </a-tooltip> | ||||
|           </span> | ||||
|           <a-input | ||||
|             v-decorator="['ovm3networklabel', { | ||||
|               initialValue: trafficResource.ovm3networklabel | ||||
|             }]" | ||||
|             :placeholder="$t('label.network.label.display.for.blank.value')" /> | ||||
|         </a-form-item> | ||||
|         <div :span="24" class="action-button"> | ||||
|           <a-button @click="closeAction">{{ $t('label.cancel') }}</a-button> | ||||
|           <a-button :loading="loading" type="primary" @click="handleSubmit">{{ $t('label.ok') }}</a-button> | ||||
|         </div> | ||||
|       </a-form> | ||||
|     </a-spin> | ||||
|   </div> | ||||
| </template> | ||||
| 
 | ||||
| <script> | ||||
| import { api } from '@/api' | ||||
| 
 | ||||
| export default { | ||||
|   name: 'EditTrafficLabel', | ||||
|   props: { | ||||
|     resource: { | ||||
|       type: Object, | ||||
|       default: () => {} | ||||
|     } | ||||
|   }, | ||||
|   data () { | ||||
|     return { | ||||
|       loading: false, | ||||
|       selectedType: undefined, | ||||
|       typeLoading: false, | ||||
|       traffictype: null, | ||||
|       trafficTypes: [], | ||||
|       trafficResource: {} | ||||
|     } | ||||
|   }, | ||||
|   beforeCreate () { | ||||
|     this.form = this.$form.createForm(this) | ||||
|     this.apiConfig = this.$store.getters.apis.updateTrafficType || {} | ||||
|     this.apiParams = {} | ||||
|     if (this.apiConfig.params) { | ||||
|       this.apiConfig.params.forEach(param => { | ||||
|         this.apiParams[param.name] = param | ||||
|       }) | ||||
|     } | ||||
|   }, | ||||
|   inject: ['parentFetchData'], | ||||
|   mounted () { | ||||
|     this.fetchData() | ||||
|   }, | ||||
|   methods: { | ||||
|     fetchData () { | ||||
|       this.typeLoading = true | ||||
| 
 | ||||
|       api('listTrafficTypes', { physicalnetworkid: this.resource.id }) | ||||
|         .then(json => { | ||||
|           this.trafficTypes = json.listtraffictypesresponse.traffictype || [] | ||||
|           this.selectedType = this.trafficTypes[0].id || undefined | ||||
|           this.trafficResource = this.trafficTypes[0] || {} | ||||
|           this.traffictype = this.trafficTypes[0].traffictype || undefined | ||||
|         }) | ||||
|         .catch(error => { | ||||
|           this.$notification.error({ | ||||
|             message: `${this.$t('label.error')} ${error.response.status}`, | ||||
|             description: error.response.data.errorresponse.errortext | ||||
|           }) | ||||
|         }) | ||||
|         .finally(() => { | ||||
|           this.typeLoading = false | ||||
|         }) | ||||
|     }, | ||||
|     onChangeTrafficType (trafficId) { | ||||
|       if (!trafficId) return | ||||
|       this.trafficResource = this.trafficTypes.filter(item => item.id === trafficId)[0] || {} | ||||
|       this.traffictype = this.trafficResource.traffictype || undefined | ||||
|     }, | ||||
|     handleSubmit (e) { | ||||
|       e.preventDefault() | ||||
|       this.form.validateFields((err, values) => { | ||||
|         if (err) { | ||||
|           return | ||||
|         } | ||||
|         this.loading = true | ||||
|         const params = {} | ||||
|         for (const key in values) { | ||||
|           params[key] = values[key] | ||||
|         } | ||||
|         const title = this.$t('label.update.traffic.label') | ||||
|         const description = this.traffictype | ||||
|         api('updateTrafficType', params).then(response => { | ||||
|           this.$pollJob({ | ||||
|             jobId: response.updatetraffictyperesponse.jobid, | ||||
|             successMethod: result => { | ||||
|               this.$store.dispatch('AddAsyncJob', { | ||||
|                 title: title, | ||||
|                 description: description, | ||||
|                 jobid: response.updatetraffictyperesponse.jobid, | ||||
|                 status: this.$t('progress') | ||||
|               }) | ||||
|               this.parentFetchData() | ||||
|             }, | ||||
|             successMessage: `${this.$t('label.update.traffic.label')} ${this.traffictype} ${this.$t('label.success')}`, | ||||
|             loadingMessage: `${title} ${this.$t('label.in.progress')}`, | ||||
|             catchMessage: this.$t('error.fetching.async.job.result') | ||||
|           }) | ||||
|         }).catch(error => { | ||||
|           this.$notifyError(error) | ||||
|         }).finally(() => { | ||||
|           this.loading = false | ||||
|           this.closeAction() | ||||
|         }) | ||||
|       }) | ||||
|     }, | ||||
|     closeAction () { | ||||
|       this.$emit('close-action') | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
| 
 | ||||
| <style scoped lang="less"> | ||||
| .form-layout { | ||||
|   width: 80vw; | ||||
| 
 | ||||
|   @media (min-width: 600px) { | ||||
|     width: 450px; | ||||
|   } | ||||
| } | ||||
| .action-button { | ||||
|   text-align: right; | ||||
| 
 | ||||
|   button { | ||||
|     margin-right: 5px; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user