index.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { createRouter, createWebHistory } from 'vue-router'
  2. import { useUserStore } from '@/store/user'
  3. import { http } from '@/utils/request'
  4. const router = createRouter({
  5. history: createWebHistory(),
  6. routes: [
  7. {
  8. path: '/login',
  9. name: 'Login',
  10. component: () => import('@/views/login/index.vue'),
  11. meta: { public: true }
  12. },
  13. {
  14. path: '/',
  15. name: 'Layout',
  16. component: () => import('@/views/layout/index.vue'),
  17. redirect: '/dashboard',
  18. children: [
  19. {
  20. path: '/dashboard',
  21. name: 'Dashboard',
  22. component: () => import('@/views/dashboard/index.vue'),
  23. meta: { title: '仪表盘' }
  24. },
  25. {
  26. path: '/user',
  27. name: 'User',
  28. component: () => import('@/views/user/index.vue'),
  29. meta: { title: '用户管理' }
  30. },
  31. {
  32. path: '/system/menu',
  33. name: 'Menu',
  34. component: () => import('@/views/system/menu/index.vue'),
  35. meta: { title: '菜单管理' }
  36. },
  37. {
  38. path: '/system/role',
  39. name: 'Role',
  40. component: () => import('@/views/system/role/index.vue'),
  41. meta: { title: '角色管理' }
  42. },
  43. {
  44. path: '/statistics',
  45. name: 'Statistics',
  46. component: () => import('@/views/statistics/index.vue'),
  47. meta: { title: '数据统计' }
  48. }
  49. ]
  50. }
  51. ]
  52. })
  53. // 路由守卫
  54. router.beforeEach(async (to, from, next) => {
  55. const userStore = useUserStore()
  56. if (to.meta.public) {
  57. next()
  58. return
  59. }
  60. if (!userStore.isLoggedIn) {
  61. next('/login')
  62. return
  63. }
  64. // 已登录但菜单为空(刷新后),重新获取菜单
  65. if (userStore.getMenus.length === 0) {
  66. try {
  67. const menus = await http.get('/upms/menu/list')
  68. userStore.setMenus(menus)
  69. } catch (error) {
  70. console.error('获取菜单失败:', error)
  71. }
  72. }
  73. next()
  74. })
  75. export default router