index.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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(import.meta.env.BASE_URL),
  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: 'wallet',
  34. name: 'wallet',
  35. component: () => import('@/views/WalletView.vue')
  36. },
  37. {
  38. path: 'device',
  39. name: 'device',
  40. component: () => import('@/views/DeviceView.vue')
  41. },
  42. {
  43. path: 'tg-user',
  44. name: 'tg-user',
  45. component: () => import('@/views/TgUserView.vue')
  46. },
  47. {
  48. path: 'replacement',
  49. name: 'replacement',
  50. component: () => import('@/views/ReplacementView.vue')
  51. },
  52. {
  53. path: 'user',
  54. name: 'user',
  55. component: () => import('@/views/UserView.vue')
  56. }
  57. ]
  58. },
  59. {
  60. path: '/login',
  61. name: 'login',
  62. component: LoginView,
  63. meta: { guest: true }
  64. },
  65. {
  66. path: '/:pathMatch(.*)*',
  67. redirect: '/main/dashboard'
  68. }
  69. ]
  70. })
  71. router.beforeEach(async (to, from, next) => {
  72. const userStore = useUserStore()
  73. if (to.meta.requiresAuth) {
  74. if (userStore.token && userStore.userInfo.id) {
  75. next()
  76. } else if (userStore.token) {
  77. await userStore.sync()
  78. next()
  79. } else {
  80. next('/login')
  81. }
  82. } else if (to.path === '/login' && userStore.token) {
  83. next('/')
  84. } else {
  85. next()
  86. }
  87. })
  88. export default router