mirror of https://github.com/veops/cmdb.git
153 lines
4.0 KiB
Python
153 lines
4.0 KiB
Python
// eslint-disable-next-line
|
|
import store from '@/store'
|
|
|
|
import { UserLayout, BasicLayout, RouteView, PageView } from '@/layouts'
|
|
import { getPreference } from '@/api/cmdb/preference'
|
|
|
|
const cmdbRouter = [
|
|
// preference
|
|
{
|
|
path: '/preference',
|
|
component: () => import('@/views/cmdb/preference'),
|
|
name: 'cmdb_preference',
|
|
meta: { title: '我的订阅', icon: 'book', keepAlive: true }
|
|
},
|
|
// views
|
|
{
|
|
path: '/tree_views',
|
|
component: () => import('@/views/cmdb/tree_views'),
|
|
name: 'cmdb_tree_views',
|
|
meta: { title: '树形视图', icon: 'share-alt', keepAlive: true },
|
|
hideChildrenInMenu: true,
|
|
children: [
|
|
{
|
|
path: '/tree_views/:typeId',
|
|
name: 'cmdb_tree_views_item',
|
|
component: () => import('@/views/cmdb/tree_views'),
|
|
meta: { title: '树形视图', keepAlive: true },
|
|
hidden: true
|
|
}]
|
|
},
|
|
// batch
|
|
{
|
|
path: '/batch',
|
|
component: () => import('@/views/cmdb/batch'),
|
|
name: 'cmdb_batch',
|
|
meta: { 'title': '批量导入', icon: 'upload', keepAlive: true }
|
|
},
|
|
{
|
|
path: '/ci_types',
|
|
name: 'cmdb_ci_type',
|
|
component: RouteView,
|
|
redirect: '/ci_type',
|
|
meta: { title: '模型配置', icon: 'setting', permission: ['admin'] },
|
|
children: [
|
|
{
|
|
path: '/ci_types',
|
|
name: 'ci_type',
|
|
hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
|
|
component: () => import('@/views/cmdb/ci_type/list'),
|
|
meta: { title: '模型定义', keepAlive: true }
|
|
},
|
|
{
|
|
path: '/ci_types/:CITypeName/detail/:CITypeId',
|
|
name: 'ci_type_detail',
|
|
hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
|
|
component: () => import('@/views/cmdb/ci_type/detail'),
|
|
meta: { title: '模型配置', keepAlive: true, hidden: true },
|
|
hidden: true
|
|
},
|
|
{
|
|
path: '/attributes',
|
|
name: 'attributes',
|
|
hideChildrenInMenu: true, // 强制显示 MenuItem 而不是 SubMenu
|
|
component: () => import('@/views/cmdb/attributes/index'),
|
|
meta: { title: '属性库', keepAlive: true }
|
|
}
|
|
]
|
|
}
|
|
]
|
|
|
|
function copyArray(arr) {
|
|
return arr.map((e) => {
|
|
if (typeof e === 'object') {
|
|
return Object.assign({}, e)
|
|
} else {
|
|
return e
|
|
}
|
|
})
|
|
}
|
|
|
|
export const generatorDynamicRouter = () => {
|
|
return new Promise((resolve, reject) => {
|
|
// cmdb 订阅的模型
|
|
getPreference().then(res => {
|
|
const routers = copyArray(asyncRouterMap)
|
|
routers[0].children = copyArray(cmdbRouter)
|
|
for (let i = 0; i < res.length; i++) {
|
|
const item = res[i]
|
|
routers[0].children.unshift({
|
|
path: `/instances/types/${item.id}`,
|
|
component: () => import(`@/views/cmdb/ci/index`),
|
|
name: `cmdb_${item.id}`,
|
|
meta: { title: item.alias, icon: 'table', keepAlive: true, typeId: item.id },
|
|
hideChildrenInMenu: true // 强制显示 MenuItem 而不是 SubMenu
|
|
})
|
|
}
|
|
|
|
resolve(routers)
|
|
})
|
|
})
|
|
}
|
|
|
|
const asyncRouterMap = [
|
|
{
|
|
path: '/',
|
|
name: 'cmdb',
|
|
component: BasicLayout,
|
|
meta: { title: 'CMDB', keepAlive: true },
|
|
redirect: () => {
|
|
return store.getters.addRouters[0].children.find(item => !item.hidden)
|
|
}
|
|
},
|
|
{
|
|
path: '*', redirect: '/404', hidden: true
|
|
}
|
|
]
|
|
|
|
/**
|
|
* 基础路由
|
|
* @type { *[] }
|
|
*/
|
|
export const constantRouterMap = [
|
|
{
|
|
path: '/user',
|
|
component: UserLayout,
|
|
redirect: '/user/login',
|
|
hidden: true,
|
|
children: [
|
|
{
|
|
path: 'login',
|
|
name: 'login',
|
|
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login')
|
|
},
|
|
{
|
|
path: 'register',
|
|
name: 'register',
|
|
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Register')
|
|
},
|
|
{
|
|
path: 'register-result',
|
|
name: 'registerResult',
|
|
component: () => import(/* webpackChunkName: "user" */ '@/views/user/RegisterResult')
|
|
}
|
|
]
|
|
},
|
|
|
|
{
|
|
path: '/404',
|
|
component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404')
|
|
}
|
|
|
|
]
|