4-12:业务落地:创建结构路由表
想要实现结构路由表,那么我们需要先知道最终我们要实现的结构是什么样子的,大家来看下面的截图:
这是我们最终要实现的 menu 截图
根据此截图,我们可以知道两点内容:
-
我们创建的页面并没有全部进行展示
- 根据该方案
- 即不显示页面 不满足 该条件
meta && meta.title && meta.icon
- 根据该方案
-
menu菜单将具备父子级的结构-
按照此结构规划数据,则数据应为
[ { "title": "个人中心", "path": "" }, { "title": "用户", "children": [ { "title": "员工管理", "path": "" }, { "title": "角色列表", "path": "" }, { "title": "权限列表", "path": "" } ] }, { "title": "文章", "children": [ { "title": "文章排名", "path": "" }, { "title": "创建文章", "path": "" } ] } ]
-
又因为将来我们需要进行 用户权限处理,所以此时我们需要先对路由表进行一个划分:
-
私有路由表
privateRoutes:权限路由- 公有路由表
publicRoutes:无权限路由
- 公有路由表
根据以上理论,生成以下路由表结构:
/**
* 私有路由表
*/
const privateRoutes = [
{
path: '/user',
component: layout,
redirect: '/user/manage',
meta: {
title: 'user',
icon: 'personnel'
},
children: [
{
path: '/user/manage',
component: () => import('@/views/user-manage/index'),
meta: {
title: 'userManage',
icon: 'personnel-manage'
}
},
{
path: '/user/role',
component: () => import('@/views/role-list/index'),
meta: {
title: 'roleList',
icon: 'role'
}
},
{
path: '/user/permission',
component: () => import('@/views/permission-list/index'),
meta: {
title: 'permissionList',
icon: 'permission'
}
},
{
path: '/user/info/:id',
name: 'userInfo',
component: () => import('@/views/user-info/index'),
meta: {
title: 'userInfo'
}
},
{
path: '/user/import',
name: 'import',
component: () => import('@/views/import/index'),
meta: {
title: 'excelImport'
}
}
]
},
{
path: '/article',
component: layout,
redirect: '/article/ranking',
meta: {
title: 'article',
icon: 'article'
},
children: [
{
path: '/article/ranking',
component: () => import('@/views/article-ranking/index'),
meta: {
title: 'articleRanking',
icon: 'article-ranking'
}
},
{
path: '/article/:id',
component: () => import('@/views/article-detail/index'),
meta: {
title: 'articleDetail'
}
},
{
path: '/article/create',
component: () => import('@/views/article-create/index'),
meta: {
title: 'articleCreate',
icon: 'article-create'
}
},
{
path: '/article/editor/:id',
component: () => import('@/views/article-create/index'),
meta: {
title: 'articleEditor'
}
}
]
}
]
/**
* 公开路由表
*/
const publicRoutes = [
{
path: '/login',
component: () => import('@/views/login/index')
},
{
path: '/',
// 注意:带有路径“/”的记录中的组件“默认”是一个不返回 Promise 的函数
component: layout,
redirect: '/profile',
children: [
{
path: '/profile',
name: 'profile',
component: () => import('@/views/profile/index'),
meta: {
title: 'profile',
icon: 'el-icon-user'
}
},
{
path: '/404',
name: '404',
component: () => import('@/views/error-page/404')
},
{
path: '/401',
name: '401',
component: () => import('@/views/error-page/401')
}
]
}
]
const router = createRouter({
history: createWebHashHistory(),
routes: [...publicRoutes, ...privateRoutes]
})
最后不要忘记在 layout/appMain 下设置路由出口
<template>
<div class="app-main">
<router-view></router-view>
</div>
</template>