index.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import {createRouter, createWebHistory} from 'vue-router'
  2. import staticRouter from './modules/static'
  3. import webRouter from './modules/web'
  4. import manageRouter from './modules/manage'
  5. import Temp404 from '@/views/global/temp/404.vue'
  6. import {mockGetUserInfo} from "@/api/modules/mock/global";
  7. import {ElLoading, ElMessage} from "element-plus";
  8. import {useAppStore} from "@/stores";
  9. import {toLogin} from "@/utils/permissions";
  10. const routes = [
  11. ...staticRouter,
  12. { path: '/:pathMatch(.*)*', name: 'NotFound', component: Temp404 },
  13. { path: '', redirect: '/web' },
  14. webRouter,
  15. ]
  16. const router = createRouter({
  17. history: createWebHistory(),
  18. routes,
  19. });
  20. router.beforeEach((to, from , next) => {
  21. const AppStore = useAppStore()
  22. if (userInfo) {
  23. if (!AppStore.userInfo) {
  24. AppStore.$patch((state) => {
  25. state.userInfo = userInfo
  26. })
  27. }
  28. if (to.query.routeTitle) {
  29. to.meta.title = to.query.routeTitle
  30. }
  31. document.title = to.meta?.title || import.meta.env.VITE_TITLE
  32. next()
  33. } else if (to.path === '/login') {
  34. next()
  35. } else {
  36. ElMessage.error('用户信息获取失败!')
  37. toLogin()
  38. }
  39. })
  40. let userInfo = null
  41. export const initMainRouter = async () => {
  42. if (localStorage.getItem('ss_token')) {
  43. const loading = ElLoading.service({
  44. lock: true,
  45. text: '加载中……',
  46. background: 'rgba(0, 0, 0, 0.7)',
  47. })
  48. await Promise.all([
  49. mockGetUserInfo()
  50. ]).then(async ([user]) => {
  51. userInfo = user.data
  52. console.log('管理员:', userInfo?.isAdmin)
  53. if (userInfo?.isAdmin) {
  54. router.addRoute(manageRouter)
  55. }
  56. loading.close()
  57. })
  58. } else if (location.pathname !== '/login') {
  59. toLogin()
  60. }
  61. }
  62. export default router;