index.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import { createRouter, createWebHistory } from 'vue-router'
  2. import MainView from '@/views/MainView.vue'
  3. import DashboardView from '@/views/DashboardView.vue'
  4. import LoginView from '@/views/LoginView.vue'
  5. import { useUserStore } from '@/stores/user'
  6. const router = createRouter({
  7. history: createWebHistory('/admin/'),
  8. routes: [
  9. {
  10. path: '/',
  11. redirect: '/main/dashboard'
  12. },
  13. {
  14. path: '/main',
  15. component: MainView,
  16. meta: { requiresAuth: true },
  17. children: [
  18. {
  19. path: '',
  20. redirect: '/main/dashboard'
  21. },
  22. {
  23. path: 'dashboard',
  24. name: 'dashboard',
  25. component: DashboardView
  26. },
  27. {
  28. path: 'user',
  29. name: 'user',
  30. component: () => import('@/views/UserView.vue')
  31. },
  32. {
  33. path: 'sys-config',
  34. name: 'sys-config',
  35. component: () => import('@/views/SysConfigView.vue')
  36. },
  37. ]
  38. },
  39. {
  40. path: '/login',
  41. name: 'login',
  42. component: LoginView,
  43. meta: { guest: true }
  44. },
  45. {
  46. path: '/:pathMatch(.*)*',
  47. redirect: '/main/dashboard'
  48. }
  49. ]
  50. })
  51. router.beforeEach(async (to, from, next) => {
  52. const userStore = useUserStore()
  53. if (to.meta.requiresAuth) {
  54. if (userStore.token && userStore.userInfo.id) {
  55. next()
  56. } else if (userStore.token) {
  57. await userStore.sync()
  58. next()
  59. } else {
  60. next('/login')
  61. }
  62. } else if (to.path === '/login' && userStore.token) {
  63. next('/')
  64. } else {
  65. next()
  66. }
  67. })
  68. export default router