mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Hide register template, create/upload volume and create vpc buttons when zone is not created. (#10243)
This commit is contained in:
parent
37c29f82ed
commit
1b2f6c9998
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
import { shallowRef, defineAsyncComponent } from 'vue'
|
import { shallowRef, defineAsyncComponent } from 'vue'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
import { isZoneCreated } from '@/utils/zone'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'compute',
|
name: 'compute',
|
||||||
@ -99,6 +100,7 @@ export default {
|
|||||||
label: 'label.vm.add',
|
label: 'label.vm.add',
|
||||||
docHelp: 'adminguide/virtual_machines.html#creating-vms',
|
docHelp: 'adminguide/virtual_machines.html#creating-vms',
|
||||||
listView: true,
|
listView: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: () => import('@/views/compute/DeployVM.vue')
|
component: () => import('@/views/compute/DeployVM.vue')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -567,6 +569,7 @@ export default {
|
|||||||
docHelp: 'plugins/cloudstack-kubernetes-service.html#creating-a-new-kubernetes-cluster',
|
docHelp: 'plugins/cloudstack-kubernetes-service.html#creating-a-new-kubernetes-cluster',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/compute/CreateKubernetesCluster.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/compute/CreateKubernetesCluster.vue')))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -695,6 +698,7 @@ export default {
|
|||||||
icon: 'plus-outlined',
|
icon: 'plus-outlined',
|
||||||
label: 'label.new.autoscale.vmgroup',
|
label: 'label.new.autoscale.vmgroup',
|
||||||
listView: true,
|
listView: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: () => import('@/views/compute/CreateAutoScaleVmGroup.vue')
|
component: () => import('@/views/compute/CreateAutoScaleVmGroup.vue')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -785,6 +789,7 @@ export default {
|
|||||||
icon: 'plus-outlined',
|
icon: 'plus-outlined',
|
||||||
label: 'label.new.instance.group',
|
label: 'label.new.instance.group',
|
||||||
listView: true,
|
listView: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
args: ['name']
|
args: ['name']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
import { shallowRef, defineAsyncComponent } from 'vue'
|
import { shallowRef, defineAsyncComponent } from 'vue'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
import { isZoneCreated } from '@/utils/zone'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'image',
|
name: 'image',
|
||||||
@ -110,16 +111,17 @@ export default {
|
|||||||
docHelp: 'adminguide/templates.html#uploading-templates-from-a-remote-http-server',
|
docHelp: 'adminguide/templates.html#uploading-templates-from-a-remote-http-server',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/image/RegisterOrUploadTemplate.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/image/RegisterOrUploadTemplate.vue')))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
api: 'registerTemplate',
|
api: 'registerTemplate',
|
||||||
icon: 'cloud-upload-outlined',
|
icon: 'cloud-upload-outlined',
|
||||||
label: 'label.upload.template.from.local',
|
label: 'label.upload.template.from.local',
|
||||||
show: () => { return 'getUploadParamsForTemplate' in store.getters.apis },
|
|
||||||
docHelp: 'adminguide/templates.html#uploading-templates-and-isos-from-a-local-computer',
|
docHelp: 'adminguide/templates.html#uploading-templates-and-isos-from-a-local-computer',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
|
show: () => { return isZoneCreated() && 'getUploadParamsForTemplate' in store.getters.apis },
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/image/RegisterOrUploadTemplate.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/image/RegisterOrUploadTemplate.vue')))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -270,13 +272,14 @@ export default {
|
|||||||
docHelp: 'adminguide/templates.html#id10',
|
docHelp: 'adminguide/templates.html#id10',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/image/RegisterOrUploadIso.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/image/RegisterOrUploadIso.vue')))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
api: 'registerIso',
|
api: 'registerIso',
|
||||||
icon: 'cloud-upload-outlined',
|
icon: 'cloud-upload-outlined',
|
||||||
label: 'label.upload.iso.from.local',
|
label: 'label.upload.iso.from.local',
|
||||||
show: () => { return 'getUploadParamsForIso' in store.getters.apis },
|
show: () => { return isZoneCreated() && 'getUploadParamsForIso' in store.getters.apis },
|
||||||
docHelp: 'adminguide/templates.html#id10',
|
docHelp: 'adminguide/templates.html#id10',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
@ -389,6 +392,7 @@ export default {
|
|||||||
label: 'label.kubernetes.version.add',
|
label: 'label.kubernetes.version.add',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/image/AddKubernetesSupportedVersion.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/image/AddKubernetesSupportedVersion.vue')))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import { shallowRef, defineAsyncComponent } from 'vue'
|
|||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
import tungsten from '@/assets/icons/tungsten.svg?inline'
|
import tungsten from '@/assets/icons/tungsten.svg?inline'
|
||||||
import { isAdmin } from '@/role'
|
import { isAdmin } from '@/role'
|
||||||
|
import { isZoneCreated } from '@/utils/zone'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'network',
|
name: 'network',
|
||||||
@ -123,7 +124,7 @@ export default {
|
|||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
show: () => {
|
show: () => {
|
||||||
if (!store.getters.zones || store.getters.zones.length === 0) {
|
if (!isZoneCreated()) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const AdvancedZones = store.getters.zones.filter(zone => zone.networktype === 'Advanced')
|
const AdvancedZones = store.getters.zones.filter(zone => zone.networktype === 'Advanced')
|
||||||
@ -245,6 +246,7 @@ export default {
|
|||||||
icon: 'plus-outlined',
|
icon: 'plus-outlined',
|
||||||
label: 'label.add.vpc',
|
label: 'label.add.vpc',
|
||||||
docHelp: 'adminguide/networking_and_traffic.html#adding-a-virtual-private-cloud',
|
docHelp: 'adminguide/networking_and_traffic.html#adding-a-virtual-private-cloud',
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/network/CreateVpc.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/network/CreateVpc.vue')))
|
||||||
@ -306,7 +308,7 @@ export default {
|
|||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/network/IngressEgressRuleConfigure.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/network/IngressEgressRuleConfigure.vue')))
|
||||||
}],
|
}],
|
||||||
show: () => {
|
show: () => {
|
||||||
if (!store.getters.zones || store.getters.zones.length === 0) {
|
if (!isZoneCreated()) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
const listZoneHaveSGEnabled = store.getters.zones.filter(zone => zone.securitygroupsenabled === true)
|
const listZoneHaveSGEnabled = store.getters.zones.filter(zone => zone.securitygroupsenabled === true)
|
||||||
@ -394,6 +396,7 @@ export default {
|
|||||||
label: 'label.vnf.appliance.add',
|
label: 'label.vnf.appliance.add',
|
||||||
docHelp: 'adminguide/networking/vnf_templates_appliances.html#deploying-vnf-appliances',
|
docHelp: 'adminguide/networking/vnf_templates_appliances.html#deploying-vnf-appliances',
|
||||||
listView: true,
|
listView: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: () => import('@/views/compute/DeployVnfAppliance.vue')
|
component: () => import('@/views/compute/DeployVnfAppliance.vue')
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -941,6 +944,7 @@ export default {
|
|||||||
label: 'label.add.vpn.gateway',
|
label: 'label.add.vpn.gateway',
|
||||||
docHelp: 'adminguide/networking_and_traffic.html#creating-a-vpn-gateway-for-the-vpc',
|
docHelp: 'adminguide/networking_and_traffic.html#creating-a-vpn-gateway-for-the-vpc',
|
||||||
listView: true,
|
listView: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
args: ['vpcid']
|
args: ['vpcid']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1116,6 +1120,7 @@ export default {
|
|||||||
icon: 'plus-outlined',
|
icon: 'plus-outlined',
|
||||||
label: 'label.add.vpn.user',
|
label: 'label.add.vpn.user',
|
||||||
listView: true,
|
listView: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
args: (record, store) => {
|
args: (record, store) => {
|
||||||
if (store.userInfo.roletype === 'User') {
|
if (store.userInfo.roletype === 'User') {
|
||||||
return ['username', 'password']
|
return ['username', 'password']
|
||||||
@ -1195,6 +1200,7 @@ export default {
|
|||||||
docHelp: 'adminguide/networking_and_traffic.html#creating-and-updating-a-vpn-customer-gateway',
|
docHelp: 'adminguide/networking_and_traffic.html#creating-and-updating-a-vpn-customer-gateway',
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/network/CreateVpnCustomerGateway.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/network/CreateVpnCustomerGateway.vue')))
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1384,12 +1390,7 @@ export default {
|
|||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/network/GuestVlanNetworksTab.vue'))),
|
component: shallowRef(defineAsyncComponent(() => import('@/views/network/GuestVlanNetworksTab.vue'))),
|
||||||
show: (record) => { return (record.allocationstate === 'Allocated') }
|
show: (record) => { return (record.allocationstate === 'Allocated') }
|
||||||
}],
|
}],
|
||||||
show: () => {
|
show: () => { isZoneCreated() }
|
||||||
if (!store.getters.zones || store.getters.zones.length === 0) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
import { shallowRef, defineAsyncComponent } from 'vue'
|
import { shallowRef, defineAsyncComponent } from 'vue'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
import { isZoneCreated } from '@/utils/zone'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'storage',
|
name: 'storage',
|
||||||
@ -103,6 +104,7 @@ export default {
|
|||||||
icon: 'plus-outlined',
|
icon: 'plus-outlined',
|
||||||
docHelp: 'adminguide/storage.html#creating-a-new-volume',
|
docHelp: 'adminguide/storage.html#creating-a-new-volume',
|
||||||
label: 'label.action.create.volume',
|
label: 'label.action.create.volume',
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/CreateVolume.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/CreateVolume.vue')))
|
||||||
@ -112,7 +114,7 @@ export default {
|
|||||||
icon: 'cloud-upload-outlined',
|
icon: 'cloud-upload-outlined',
|
||||||
docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
|
docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
|
||||||
label: 'label.upload.volume.from.local',
|
label: 'label.upload.volume.from.local',
|
||||||
show: () => { return 'getUploadParamsForVolume' in store.getters.apis },
|
show: () => { return isZoneCreated() && 'getUploadParamsForVolume' in store.getters.apis },
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/UploadLocalVolume.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/UploadLocalVolume.vue')))
|
||||||
@ -122,6 +124,7 @@ export default {
|
|||||||
icon: 'link-outlined',
|
icon: 'link-outlined',
|
||||||
docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
|
docHelp: 'adminguide/storage.html#uploading-an-existing-volume-to-a-virtual-machine',
|
||||||
label: 'label.upload.volume.from.url',
|
label: 'label.upload.volume.from.url',
|
||||||
|
show: () => { isZoneCreated() },
|
||||||
listView: true,
|
listView: true,
|
||||||
popup: true,
|
popup: true,
|
||||||
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/UploadVolume.vue')))
|
component: shallowRef(defineAsyncComponent(() => import('@/views/storage/UploadVolume.vue')))
|
||||||
|
|||||||
25
ui/src/utils/zone.js
Normal file
25
ui/src/utils/zone.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
// 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.
|
||||||
|
|
||||||
|
import store from '@/store'
|
||||||
|
|
||||||
|
export function isZoneCreated () {
|
||||||
|
if (!store.getters.zones || store.getters.zones.length === 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user