| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- import { createRouter, createWebHistory } from 'vue-router'
- import { useUserStore } from '@/store/user'
- import { http } from '@/utils/request'
- const router = createRouter({
- history: createWebHistory(),
- routes: [
- {
- path: '/login',
- name: 'Login',
- component: () => import('@/views/login/index.vue'),
- meta: { public: true }
- },
- {
- path: '/',
- name: 'Layout',
- component: () => import('@/views/layout/index.vue'),
- redirect: '/dashboard',
- children: [
- {
- path: '/dashboard',
- name: 'Dashboard',
- component: () => import('@/views/dashboard/index.vue'),
- meta: { title: '仪表盘' }
- },
- {
- path: '/user',
- name: 'User',
- component: () => import('@/views/user/index.vue'),
- meta: { title: '用户管理' }
- },
- {
- path: '/system/menu',
- name: 'Menu',
- component: () => import('@/views/system/menu/index.vue'),
- meta: { title: '菜单管理' }
- },
- {
- path: '/system/role',
- name: 'Role',
- component: () => import('@/views/system/role/index.vue'),
- meta: { title: '角色管理' }
- },
- {
- path: '/statistics',
- name: 'Statistics',
- component: () => import('@/views/statistics/index.vue'),
- meta: { title: '数据统计' }
- }
- ]
- }
- ]
- })
- // 路由守卫
- router.beforeEach(async (to, from, next) => {
- const userStore = useUserStore()
- if (to.meta.public) {
- next()
- return
- }
- if (!userStore.isLoggedIn) {
- next('/login')
- return
- }
- // 已登录但菜单为空(刷新后),重新获取菜单
- if (userStore.getMenus.length === 0) {
- try {
- const menus = await http.get('/upms/menu/list')
- userStore.setMenus(menus)
- } catch (error) {
- console.error('获取菜单失败:', error)
- }
- }
- next()
- })
- export default router
|