index.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { setLoadComplete } from '@/common/methods';
  2. import { getLoadIsComplete } from '@/common/methods/mixin';
  3. import Layout from '@/layout/index.vue';
  4. import { globalDataRefresh } from '@/services/bus';
  5. import { isLogin, login } from '@/services/bus/login';
  6. import { localStorageUtil } from '@/utils/storage';
  7. import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
  8. import eventBus from '../utils/eventBus';
  9. import { registerRoutes } from './dynamic';
  10. const routes: Array<RouteRecordRaw> = [
  11. {
  12. path: '/login',
  13. name: 'login',
  14. component: () => import('@/views/account/login.vue'),
  15. },
  16. {
  17. path: '/logon',
  18. name: 'logon',
  19. component: () => import('@/views/account/logon.vue'),
  20. },
  21. {
  22. path: '/resetPassword',
  23. name: 'resetPassword',
  24. component: () => import('@/views/account/resetPassword.vue'),
  25. },
  26. {
  27. path: '/',
  28. component: Layout,
  29. props: true,
  30. redirect: '/login',
  31. children: [
  32. {
  33. path: '/home',
  34. name: 'home',
  35. component: () => import('@/views/home.vue'),
  36. },
  37. ],
  38. },
  39. {
  40. path: '/test',
  41. name: 'test',
  42. component: () => import('@/views/test/index.vue'),
  43. },
  44. ];
  45. const router = createRouter({
  46. history: createWebHashHistory(),
  47. routes,
  48. });
  49. // 防止加载动态路由无限死循环
  50. let routerComplete = false;
  51. // 路由拦截
  52. router.beforeEach((to, from, next) => {
  53. // 前往登录页时 直接走登出流程
  54. if (to.fullPath === '/login') {
  55. routerComplete = false;
  56. eventBus.$emit('logout');
  57. next();
  58. } else {
  59. // 前往其他页 判断是否是登录状态
  60. if (isLogin()) {
  61. if (routerComplete) {
  62. return next();
  63. } else {
  64. // 注册动态路由
  65. registerRoutes().then(() => {
  66. routerComplete = true;
  67. next({ ...to, replace: true });
  68. }).catch(() => {
  69. console.error('路由加载失败');
  70. })
  71. }
  72. } else {
  73. routerComplete = false;
  74. if (!getLoadIsComplete()) { // 没有加载对应的资料,表示第一次启动项目
  75. console.log('to', to);
  76. const { ACCOUNT, PASSWORD } = to.query
  77. const name = to.name ? to.name : 'home'
  78. if (ACCOUNT && PASSWORD) {
  79. setLoadComplete(false)
  80. globalDataRefresh().then(() => {
  81. const { ACCOUNT, PASSWORD } = to.query
  82. login(ACCOUNT as string, PASSWORD as string, [], true).then(res => {
  83. setLoadComplete(true)
  84. localStorageUtil.setItem('loginAccount', ACCOUNT); // 缓存登录账号
  85. eventBus.$emit('loginSuccess', true);
  86. next({ name })
  87. }).catch(err => {
  88. // 异常需要跳转到错误页面,让用户手动重试
  89. console.log('err', err);
  90. })
  91. })
  92. } else { // 跳转到登录页面
  93. next()
  94. }
  95. } else { //
  96. next()
  97. }
  98. }
  99. }
  100. });
  101. export default router;