index.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { isUserLoggedIn } from '@/utils/user';
  2. import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
  3. import { HOME, LOGIN, PROJECT } from './name';
  4. const AuthWrapper = (routeRecord: RouteRecordRaw) => {
  5. const meta = routeRecord.meta || {};
  6. meta.requiresAuth = true;
  7. return {
  8. ...routeRecord,
  9. meta,
  10. };
  11. };
  12. const routes: Array<RouteRecordRaw> = [
  13. {
  14. path: '/',
  15. redirect: '/home',
  16. },
  17. {
  18. path: '/home',
  19. name: HOME,
  20. component: () => import('@/views/Home.vue'),
  21. },
  22. {
  23. path: '/login',
  24. name: LOGIN,
  25. component: () => import(/* webpackChunkName: "login" */ '@/views/Login.vue'),
  26. meta: {
  27. hideNavigator: true,
  28. },
  29. },
  30. AuthWrapper({
  31. path: '/project/:projectId',
  32. name: PROJECT,
  33. component: () => import(/* webpackChunkName: "project" */ '@/views/ProjectContainer.vue'),
  34. children: [
  35. {
  36. path: 'schedule',
  37. component: () => import(/* webpackChunkName: "project" */'@/views/Project/Schedule.vue'),
  38. },
  39. {
  40. path: 'taskList',
  41. component: () => import(/* webpackChunkName: "project" */'@/views/Project/TaskList.vue'),
  42. },
  43. {
  44. path: 'bugList',
  45. component: () => import(/* webpackChunkName: "project" */'@/views/Project/BugList.vue'),
  46. },
  47. {
  48. path: 'statistics',
  49. component: () => import(/* webpackChunkName: "project" */'@/views/Project/Statistics.vue'),
  50. },
  51. {
  52. path: 'pipeline',
  53. component: () => import(/* webpackChunkName: "project" */'@/views/Project/Pipeline.vue'),
  54. },
  55. {
  56. path: 'apitest',
  57. component: () => import(/* webpackChunkName: "project" */'@/views/Project/APITest.vue'),
  58. },
  59. {
  60. path: 'invite',
  61. component: () => import(/* webpackChunkName: "project" */'@/views/Project/Invite.vue'),
  62. },
  63. ],
  64. }),
  65. ];
  66. const router = createRouter({
  67. history: createWebHistory(),
  68. routes,
  69. });
  70. router.beforeEach((to, from, next) => {
  71. if (to.matched.some((record) => record.meta.requiresAuth)) {
  72. // this route requires auth, check if logged in
  73. // if not, redirect to login page.
  74. if (!isUserLoggedIn()) {
  75. next({
  76. name: LOGIN,
  77. query: { redirect: to.fullPath },
  78. });
  79. } else {
  80. next();
  81. }
  82. } else {
  83. next();
  84. }
  85. });
  86. router.beforeEach((to, from, next) => {
  87. if (to.name !== LOGIN || !isUserLoggedIn()) {
  88. next();
  89. }
  90. });
  91. router.afterEach((to, from) => {
  92. if (to.matched.some((record) => record.meta.hideNavigator)) {
  93. document.getElementsByTagName('header')[0]!.style.display = 'none';
  94. } else {
  95. document.getElementsByTagName('header')[0]!.style.display = 'flex';
  96. }
  97. });
  98. export default router;