mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
271 lines
8.1 KiB
JavaScript
271 lines
8.1 KiB
JavaScript
// 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.
|
|
|
|
// eslint-disable-next-line
|
|
import { UserLayout, BasicLayout, RouteView, BlankLayout, PageView } from '@/layouts'
|
|
import AutogenView from '@/views/AutogenView.vue'
|
|
|
|
import compute from '@/config/section/compute'
|
|
import storage from '@/config/section/storage'
|
|
import network from '@/config/section/network'
|
|
import image from '@/config/section/image'
|
|
import project from '@/config/section/project'
|
|
import event from '@/config/section/event'
|
|
import iam from '@/config/section/iam'
|
|
import infra from '@/config/section/infra'
|
|
import offering from '@/config/section/offering'
|
|
import config from '@/config/section/config'
|
|
import quota from '@/config/section/plugin/quota'
|
|
import cloudian from '@/config/section/plugin/cloudian'
|
|
|
|
export function generateRouterMap (section) {
|
|
var map = {
|
|
name: section.name,
|
|
path: '/' + section.name,
|
|
hidden: section.hidden,
|
|
meta: { title: section.title, icon: section.icon, docHelp: section.docHelp },
|
|
component: RouteView
|
|
}
|
|
|
|
if (section.children && section.children.length > 0) {
|
|
map.redirect = '/' + section.children[0].name
|
|
map.meta.permission = section.children[0].permission
|
|
map.children = []
|
|
for (const child of section.children) {
|
|
var component = child.component ? child.component : AutogenView
|
|
var route = {
|
|
name: child.name,
|
|
path: '/' + child.name,
|
|
hidden: child.hidden,
|
|
meta: {
|
|
title: child.title,
|
|
name: child.name,
|
|
icon: child.icon,
|
|
docHelp: child.docHelp,
|
|
permission: child.permission,
|
|
resourceType: child.resourceType,
|
|
params: child.params ? child.params : {},
|
|
columns: child.columns,
|
|
details: child.details,
|
|
related: child.related,
|
|
actions: child.actions,
|
|
treeView: child.treeView ? child.treeView : false,
|
|
tabs: child.treeView ? child.tabs : {}
|
|
},
|
|
component: component,
|
|
hideChildrenInMenu: true,
|
|
children: [
|
|
{
|
|
path: '/' + child.name + '/:id',
|
|
hidden: child.hidden,
|
|
meta: {
|
|
title: child.title,
|
|
name: child.name,
|
|
icon: child.icon,
|
|
docHelp: child.docHelp,
|
|
permission: child.permission,
|
|
resourceType: child.resourceType,
|
|
params: child.params ? child.params : {},
|
|
details: child.details,
|
|
related: child.related,
|
|
tabs: child.tabs,
|
|
actions: child.actions ? child.actions : []
|
|
},
|
|
component: component
|
|
}
|
|
]
|
|
}
|
|
if (child.actions) {
|
|
child.actions.forEach(function (action) {
|
|
if (!action.component || !action.api) {
|
|
return
|
|
}
|
|
map.children.push({
|
|
name: action.api,
|
|
icon: child.icon,
|
|
hidden: true,
|
|
path: '/action/' + action.api,
|
|
meta: {
|
|
title: child.title,
|
|
name: child.name,
|
|
permission: [action.api]
|
|
},
|
|
component: action.component
|
|
})
|
|
})
|
|
}
|
|
map.children.push(route)
|
|
}
|
|
} else {
|
|
map.component = section.component ? section.component : AutogenView
|
|
map.hideChildrenInMenu = true
|
|
map.children = [{
|
|
path: '/' + section.name + '/:id',
|
|
actions: section.actions ? section.actions : [],
|
|
meta: {
|
|
title: section.title,
|
|
name: section.name,
|
|
icon: section.icon,
|
|
docHelp: section.docHelp,
|
|
hidden: section.hidden,
|
|
permission: section.permission,
|
|
resourceType: section.resourceType,
|
|
params: section.params ? section.params : {},
|
|
details: section.details,
|
|
related: section.related,
|
|
tabs: section.tabs,
|
|
actions: section.actions ? section.actions : []
|
|
},
|
|
component: section.component ? section.component : AutogenView
|
|
}]
|
|
}
|
|
|
|
if (section.component) {
|
|
map.component = section.component
|
|
}
|
|
|
|
if (section.permission) {
|
|
map.meta.permission = section.permission
|
|
}
|
|
|
|
if (section.columns) {
|
|
map.meta.columns = section.columns
|
|
}
|
|
|
|
if (section.actions) {
|
|
map.meta.actions = section.actions
|
|
}
|
|
|
|
return map
|
|
}
|
|
|
|
export const asyncRouterMap = [
|
|
{
|
|
path: '/',
|
|
name: 'index',
|
|
component: BasicLayout,
|
|
meta: { icon: 'home' },
|
|
redirect: '/dashboard',
|
|
children: [
|
|
{
|
|
path: '/dashboard',
|
|
name: 'dashboard',
|
|
meta: {
|
|
title: 'Dashboard',
|
|
icon: 'dashboard',
|
|
tabs: [
|
|
{
|
|
name: 'Dashboard',
|
|
component: () => import('@/views/dashboard/UsageDashboardChart')
|
|
},
|
|
{
|
|
name: 'accounts',
|
|
show: (record, route, user) => { return record.account === user.account || ['Admin', 'DomainAdmin'].includes(user.roletype) },
|
|
component: () => import('@/views/project/AccountsTab')
|
|
},
|
|
{
|
|
name: 'resources',
|
|
params: {
|
|
projectid: 'id'
|
|
},
|
|
show: (record, route, user) => { return ['Admin'].includes(user.roletype) },
|
|
component: () => import('@/components/view/ResourceLimitTab.vue')
|
|
}
|
|
]
|
|
},
|
|
component: () => import('@/views/dashboard/Dashboard')
|
|
},
|
|
|
|
generateRouterMap(compute),
|
|
generateRouterMap(storage),
|
|
generateRouterMap(network),
|
|
generateRouterMap(image),
|
|
generateRouterMap(project),
|
|
generateRouterMap(event),
|
|
generateRouterMap(iam),
|
|
generateRouterMap(infra),
|
|
generateRouterMap(offering),
|
|
generateRouterMap(config),
|
|
generateRouterMap(quota),
|
|
generateRouterMap(cloudian),
|
|
|
|
{
|
|
path: '/exception',
|
|
name: 'exception',
|
|
component: RouteView,
|
|
hidden: true,
|
|
redirect: '/exception/404',
|
|
meta: { title: 'Exception', icon: 'warning' },
|
|
children: [
|
|
{
|
|
path: '/exception/403',
|
|
name: '403',
|
|
hidden: true,
|
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/403'),
|
|
meta: { title: '403' }
|
|
},
|
|
{
|
|
path: '/exception/404',
|
|
name: '404',
|
|
hidden: true,
|
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404'),
|
|
meta: { title: '404' }
|
|
},
|
|
{
|
|
path: '/exception/500',
|
|
name: '500',
|
|
hidden: true,
|
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/500'),
|
|
meta: { title: '500' }
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
{
|
|
path: '*', redirect: '/exception/404', hidden: true
|
|
}
|
|
]
|
|
|
|
export const constantRouterMap = [
|
|
{
|
|
path: '/user',
|
|
component: UserLayout,
|
|
redirect: '/user/login',
|
|
hidden: true,
|
|
children: [
|
|
{
|
|
path: 'login',
|
|
name: 'login',
|
|
component: () => import(/* webpackChunkName: "auth" */ '@/views/auth/Login')
|
|
}
|
|
]
|
|
},
|
|
{
|
|
path: '/403',
|
|
component: () => import(/* webpackChunkName: "forbidden" */ '@/views/exception/403')
|
|
},
|
|
{
|
|
path: '/404',
|
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
|
|
},
|
|
{
|
|
path: '/500',
|
|
component: () => import(/* webpackChunkName: "error" */ '@/views/exception/500')
|
|
}
|
|
]
|