Files
exam-jyt/exam-vue/src/router/index.js
T
2026-06-18 21:29:45 +08:00

291 lines
5.9 KiB
JavaScript

/**
* @description 路由配置模块,定义应用所有页面的路由映射与导航守卫
* @author D吕贺034244311
* @date 20260620
*/
import { createRouter, createWebHashHistory } from 'vue-router'
// 主要框架
import Layout from '@/layout/index.vue'
// 登录框架
import LoginLayout from '@/views/login/components/LoginLayout.vue'
export const constantRoutes = [{
path: '/redirect',
component: Layout,
hidden: true,
children: [{
path: '/redirect/:path(.*)',
component: () => import('@/views/redirect/index.vue')
}]
},
{
path: '/login',
component: LoginLayout,
hidden: true,
children: [{
path: '/login',
name: 'Login',
component: () => import('@/views/login/index.vue'),
hidden: true
},
{
path: '/register',
name: 'Register',
component: () => import('@/views/login/register.vue'),
hidden: true
}
]
},
{
path: '/404',
component: () => import('@/views/error-page/404.vue'),
hidden: true
},
{
path: '/401',
component: () => import('@/views/error-page/401.vue'),
hidden: true
},
{
path: '/',
component: Layout,
redirect: '/dashboard',
children: [{
path: 'dashboard',
component: () => import('@/views/dashboard/index.vue'),
name: 'Dashboard',
meta: {
title: '控制台',
icon: 'dashboard',
affix: true
}
}, ]
},
{
path: '/profile',
component: Layout,
redirect: '/profile/index',
hidden: true,
children: [{
path: 'index',
component: () => import('@/views/profile/index.vue'),
name: 'Profile',
meta: {
title: '个人资料',
icon: 'user',
noCache: true
}
}]
}
]
/**
* asyncRoutes
* the routes that need to be dynamically loaded based on user roles
*/
export const asyncRoutes = [
{
path: '/sys',
component: Layout,
redirect: '/sys/config',
name: 'Sys',
meta: {
title: '系统设置',
icon: 'configure',
roles: ['root']
},
children: [{
path: 'config',
component: () => import('@/views/sys/config/index.vue'),
name: 'SysConfig',
meta: {
title: '系统配置',
icon: 'theme'
}
},
{
path: 'dict',
component: () => import('@/views/sys/dict/index.vue'),
name: 'SysDict',
meta: {
title: '码值管理',
icon: 'theme'
}
},
{
path: 'role',
component: () => import('@/views/sys/role/index.vue'),
name: 'SysRole',
meta: {
title: '角色管理',
icon: 'role'
}
},
{
path: 'user',
component: () => import('@/views/sys/user/index.vue'),
name: 'SysUser',
meta: {
title: '用户管理',
icon: 'admin'
}
},
{
path: 'bookgl',
component: () => import('@/views/sys/bookgl/index.vue'),
name: 'SysBookgl',
meta: {
title: '书籍信息管理',
icon: 'admin'
}
},
{
path: 'jieshu',
component: () => import('@/views/sys/jieshu/index.vue'),
name: 'SysJieshu',
meta: {
title: '图书搜索',
icon: 'admin'
}
},
{
path: 'huanshu',
component: () => import('@/views/sys/huanshu/index.vue'),
name: 'Syshuanshu',
meta: {
title: '我的借还',
icon: 'admin'
}
},
{
path: 'jiehuanjilu',
component: () => import('@/views/sys/jiehuanjilu/index.vue'),
name: 'SysJiehuanjilu',
meta: {
title: '借还记录',
icon: 'admin'
}
},{
path: 'gggl',
component: () => import('@/views/sys/gggl/index.vue'),
name: 'SysGggl',
meta: {
title: '公告管理',
icon: 'admin'
}
},
{
path: 'lygl',
component: () => import('@/views/sys/liuyangl/index.vue'),
name: 'SysLygl',
meta: {
title: '留言管理',
icon: 'admin'
}
},
]
},
{
path: '/sys',
component: Layout,
redirect: '/sys/config',
name: 'student',
meta: {
title: '用户系统',
icon: 'configure',
roles: ['student']
},
children: [
{
path: 'jieshu',
component: () => import('@/views/sys/jieshu/index.vue'),
name: 'SysJieshu',
meta: {
title: '图书搜索',
icon: 'admin'
}
},
{
path: 'huanshu',
component: () => import('@/views/sys/huanshu/index.vue'),
name: 'Syshuanshu',
meta: {
title: '我的借还',
icon: 'admin'
}
},
{
path: 'jiehuanjilu',
component: () => import('@/views/sys/jiehuanjilu/index.vue'),
name: 'SysJiehuanjilu',
meta: {
title: '借还记录',
icon: 'admin'
}
}
,
{
path: 'liuyan',
component: () => import('@/views/sys/stuliuyan/index.vue'),
name: 'SysStuliuyan',
meta: {
title: '留言板块',
icon: 'admin'
}
}
,
{
path: 'gonggao',
component: () => import('@/views/sys/stugggl/index.vue'),
name: 'SysStugggl',
meta: {
title: '公告板块',
icon: 'admin'
}
}
]
},
// 404 page must be placed at the end !!!
{
path: '/:pathMatch(.*)*',
redirect: '/dashboard',
hidden: true
}
]
const router = createRouter({
history: createWebHashHistory(),
scrollBehavior: () => ({ top: 0 }),
routes: constantRoutes
})
export function resetRouter() {
const newRouter = createRouter({
history: createWebHashHistory(),
scrollBehavior: () => ({ top: 0 }),
routes: constantRoutes
})
// 注意:Vue Router 4 没有 matcher,通过移除所有路由再重新添加来重置
const currentRoutes = router.getRoutes()
currentRoutes.forEach(route => {
if (route.name && !constantRoutes.find(cr => cr.name === route.name)) {
router.removeRoute(route.name)
}
})
}
export default router