From 127fd9d2f06ebb2938b482e95914a32ef788e57e Mon Sep 17 00:00:00 2001 From: sato03 Date: Fri, 15 Dec 2023 09:12:24 -0300 Subject: [PATCH] UI: Project column in Default View (#8287) The Default View has a projects toggle button that allows users to see which resources belong to projects, but there is nothing to indicate which project they belong to. For this reason, a project column was added if the projects button is enabled, indicating the name of the project to which the resource belongs. --------- Co-authored-by: Henrique Sato --- ui/src/components/view/ListView.vue | 4 +++ ui/src/config/section/compute.js | 44 +++++++++++++++++++++++++---- ui/src/config/section/event.js | 11 +++++++- ui/src/config/section/image.js | 6 ++++ ui/src/config/section/network.js | 41 ++++++++++++++++++++++++--- ui/src/config/section/storage.js | 11 ++++++-- ui/src/views/AutogenView.vue | 3 ++ 7 files changed, 108 insertions(+), 12 deletions(-) diff --git a/ui/src/components/view/ListView.vue b/ui/src/components/view/ListView.vue index 53c6efb321d..a61f1930f71 100644 --- a/ui/src/components/view/ListView.vue +++ b/ui/src/components/view/ListView.vue @@ -330,6 +330,10 @@ {{ text }} {{ text }} + diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js index b56c8eeead9..4cb9ed8e2ba 100644 --- a/ui/src/config/section/compute.js +++ b/ui/src/config/section/compute.js @@ -61,16 +61,18 @@ export default { if (store.getters.metrics) { fields.push(...metricsFields) } - if (store.getters.userInfo.roletype === 'Admin') { fields.splice(2, 0, 'instancename') - fields.push('account') fields.push('hostname') + fields.push('account') } else if (store.getters.userInfo.roletype === 'DomainAdmin') { fields.push('account') } else { fields.push('serviceofferingname') } + if (store.getters.listAllProjects) { + fields.push('project') + } fields.push('zonename') return fields }, @@ -464,8 +466,13 @@ export default { columns: () => { const fields = ['displayname', 'state', 'name', 'type', 'current', 'parentName', 'created'] if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { - fields.push('domain') fields.push('account') + if (store.getters.listAllProjects) { + fields.push('project') + } + fields.push('domain') + } else if (store.getters.listAllProjects) { + fields.push('project') } return fields }, @@ -536,6 +543,9 @@ export default { if (['Admin', 'DomainAdmin'].includes(store.userInfo.roletype)) { fields.push('account') } + if (store.listAllProjects) { + fields.push('project') + } if (store.apis.scaleKubernetesCluster.params.filter(x => x.name === 'autoscalingenabled').length > 0) { fields.splice(2, 0, 'autoscalingenabled') } @@ -633,7 +643,13 @@ export default { docHelp: 'adminguide/autoscale_without_netscaler.html', resourceType: 'AutoScaleVmGroup', permission: ['listAutoScaleVmGroups'], - columns: ['name', 'state', 'associatednetworkname', 'publicip', 'publicport', 'privateport', 'minmembers', 'maxmembers', 'availablevirtualmachinecount', 'account'], + columns: (store) => { + var fields = ['name', 'state', 'associatednetworkname', 'publicip', 'publicport', 'privateport', 'minmembers', 'maxmembers', 'availablevirtualmachinecount', 'account'] + if (store.listAllProjects) { + fields.push('project') + } + return fields + }, details: ['name', 'id', 'account', 'domain', 'associatednetworkname', 'associatednetworkid', 'lbruleid', 'lbprovider', 'publicip', 'publicipid', 'publicport', 'privateport', 'minmembers', 'maxmembers', 'availablevirtualmachinecount', 'interval', 'state', 'created'], related: [{ name: 'vm', @@ -737,7 +753,15 @@ export default { docHelp: 'adminguide/virtual_machines.html#changing-the-vm-name-os-or-group', resourceType: 'VMInstanceGroup', permission: ['listInstanceGroups'], - columns: ['name', 'account', 'domain'], + + columns: (store) => { + var fields = ['name', 'account'] + if (store.listAllProjects) { + fields.push('project') + } + fields.push('domain') + return fields + }, details: ['name', 'id', 'account', 'domain', 'created'], related: [{ name: 'vm', @@ -791,7 +815,12 @@ export default { var fields = ['name', 'fingerprint'] if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { fields.push('account') + if (store.getters.listAllProjects) { + fields.push('project') + } fields.push('domain') + } else if (store.getters.listAllProjects) { + fields.push('project') } return fields }, @@ -941,7 +970,12 @@ export default { var fields = ['name', 'type', 'description'] if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { fields.push('account') + if (store.getters.listAllProjects) { + fields.push('project') + } fields.push('domain') + } else if (store.getters.listAllProjects) { + fields.push('project') } return fields }, diff --git a/ui/src/config/section/event.js b/ui/src/config/section/event.js index 5f4b27b88ed..5ab87e86964 100644 --- a/ui/src/config/section/event.js +++ b/ui/src/config/section/event.js @@ -15,13 +15,22 @@ // specific language governing permissions and limitations // under the License. +import store from '@/store' + export default { name: 'event', title: 'label.events', icon: 'ScheduleOutlined', docHelp: 'adminguide/events.html', permission: ['listEvents'], - columns: ['level', 'type', 'state', 'description', 'resource', 'username', 'account', 'domain', 'created'], + columns: () => { + var fields = ['level', 'type', 'state', 'description', 'resource', 'username', 'account'] + if (store.getters.listAllProjects) { + fields.push('project') + } + fields.push(...['domain', 'created']) + return fields + }, details: ['username', 'id', 'description', 'resourcetype', 'resourceid', 'state', 'level', 'type', 'account', 'domain', 'created'], searchFilters: ['level', 'domainid', 'account', 'keyword', 'resourcetype'], related: [{ diff --git a/ui/src/config/section/image.js b/ui/src/config/section/image.js index 792e47f021f..7a5d52d1b89 100644 --- a/ui/src/config/section/image.js +++ b/ui/src/config/section/image.js @@ -47,6 +47,9 @@ export default { fields.push('size') fields.push('account') } + if (store.getters.listAllProjects) { + fields.push('project') + } if (['Admin'].includes(store.getters.userInfo.roletype)) { fields.push('templatetype') fields.push('order') @@ -220,6 +223,9 @@ export default { fields.push('size') fields.push('account') } + if (store.getters.listAllProjects) { + fields.push('project') + } if (['Admin'].includes(store.getters.userInfo.roletype)) { fields.push('order') } diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js index 7d7313ffb25..e1a0e69b57e 100644 --- a/ui/src/config/section/network.js +++ b/ui/src/config/section/network.js @@ -34,10 +34,16 @@ export default { permission: ['listNetworks'], resourceType: 'Network', columns: () => { - var fields = ['name', 'state', 'type', 'vpcname', 'cidr', 'ip6cidr', 'broadcasturi', 'domainpath', 'account', 'zonename'] + var fields = ['name', 'state', 'type', 'vpcname', 'cidr', 'ip6cidr', 'broadcasturi', 'domainpath'] if (!isAdmin()) { fields = fields.filter(function (e) { return e !== 'broadcasturi' }) } + if (store.getters.listAllProjects) { + fields.push('project') + } else { + fields.push('account') + } + fields.push('zonename') return fields }, details: () => { @@ -197,7 +203,14 @@ export default { docHelp: 'adminguide/networking_and_traffic.html#configuring-a-virtual-private-cloud', permission: ['listVPCs'], resourceType: 'Vpc', - columns: ['name', 'state', 'displaytext', 'cidr', 'account', 'domain', 'zonename'], + columns: () => { + var fields = ['name', 'state', 'displaytext', 'cidr', 'account'] + if (store.getters.listAllProjects) { + fields.push('project') + } + fields.push(...['domain', 'zonename']) + return fields + }, details: ['name', 'id', 'displaytext', 'cidr', 'networkdomain', 'ip6routes', 'ispersistent', 'redundantvpcrouter', 'restartrequired', 'zonename', 'account', 'domain', 'dns1', 'dns2', 'ip6dns1', 'ip6dns2', 'publicmtu'], searchFilters: ['name', 'zoneid', 'domainid', 'account', 'tags'], related: [{ @@ -334,10 +347,16 @@ export default { if (store.getters.userInfo.roletype === 'Admin') { fields.splice(2, 0, 'instancename') fields.push('account') + if (store.getters.listAllProjects) { + fields.push('project') + } fields.push('domain') fields.push('hostname') } else if (store.getters.userInfo.roletype === 'DomainAdmin') { fields.push('account') + if (store.getters.listAllProjects) { + fields.push('project') + } } else { fields.push('serviceofferingname') } @@ -730,7 +749,14 @@ export default { docHelp: 'adminguide/networking_and_traffic.html#reserving-public-ip-addresses-and-vlans-for-accounts', permission: ['listPublicIpAddresses'], resourceType: 'PublicIpAddress', - columns: ['ipaddress', 'state', 'associatednetworkname', 'vpcname', 'virtualmachinename', 'allocated', 'account', 'domain', 'zonename'], + columns: () => { + var fields = ['ipaddress', 'state', 'associatednetworkname', 'vpcname', 'virtualmachinename', 'allocated', 'account'] + if (store.getters.listAllProjects) { + fields.push('project') + } + fields.push(...['domain', 'zonename']) + return fields + }, details: ['ipaddress', 'id', 'associatednetworkname', 'virtualmachinename', 'networkid', 'issourcenat', 'isstaticnat', 'virtualmachinename', 'vmipaddress', 'vlan', 'allocated', 'account', 'domain', 'zonename'], filters: ['allocated', 'reserved', 'free'], component: shallowRef(() => import('@/views/network/PublicIpResource.vue')), @@ -1120,7 +1146,14 @@ export default { title: 'label.vpncustomergatewayid', icon: 'lock-outlined', permission: ['listVpnCustomerGateways'], - columns: ['name', 'gateway', 'cidrlist', 'ipsecpsk', 'account', 'domain'], + columns: () => { + var fields = ['name', 'gateway', 'cidrlist', 'ipsecpsk', 'account'] + if (store.getters.listAllProjects) { + fields.push('project') + } + fields.push('domain') + return fields + }, details: ['name', 'id', 'gateway', 'cidrlist', 'ipsecpsk', 'ikepolicy', 'ikelifetime', 'ikeversion', 'esppolicy', 'esplifetime', 'dpd', 'splitconnections', 'forceencap', 'account', 'domain'], searchFilters: ['keyword', 'domainid', 'account'], resourceType: 'VPNCustomerGateway', diff --git a/ui/src/config/section/storage.js b/ui/src/config/section/storage.js index 0fbb930e750..a096067b135 100644 --- a/ui/src/config/section/storage.js +++ b/ui/src/config/section/storage.js @@ -49,13 +49,15 @@ export default { if (store.getters.metrics) { fields.push(...metricsFields) } - if (store.getters.userInfo.roletype === 'Admin') { - fields.push('account') fields.push('storage') + fields.push('account') } else if (store.getters.userInfo.roletype === 'DomainAdmin') { fields.push('account') } + if (store.getters.listAllProjects) { + fields.push('project') + } fields.push('zonename') return fields @@ -320,7 +322,12 @@ export default { var fields = ['name', 'state', 'volumename', 'intervaltype', 'physicalsize', 'created'] if (['Admin', 'DomainAdmin'].includes(store.getters.userInfo.roletype)) { fields.push('account') + if (store.getters.listAllProjects) { + fields.push('project') + } fields.push('domain') + } else if (store.getters.listAllProjects) { + fields.push('project') } fields.push('zonename') return fields diff --git a/ui/src/views/AutogenView.vue b/ui/src/views/AutogenView.vue index 6c9c13dbf77..bf1c42d4c05 100644 --- a/ui/src/views/AutogenView.vue +++ b/ui/src/views/AutogenView.vue @@ -879,6 +879,9 @@ export default { this.$store.getters.customColumns[this.$store.getters.userInfo.id][this.$route.path] = this.selectedColumns } else { this.selectedColumns = this.$store.getters.customColumns[this.$store.getters.userInfo.id][this.$route.path] || this.selectedColumns + if (this.$store.getters.listAllProjects && !this.projectView) { + this.selectedColumns.push('project') + } this.updateSelectedColumns() } }