index.ts 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. import { isMobile } from 'billd-utils';
  2. import { createRouter, createWebHistory } from 'vue-router';
  3. import Layout from '@/layout/index.vue';
  4. import type { RouteRecordRaw } from 'vue-router';
  5. export const mobileRouterName = {
  6. h5: 'h5',
  7. h5Room: 'h5Room',
  8. };
  9. export const routerName = {
  10. home: 'home',
  11. about: 'about',
  12. account: 'account',
  13. rank: 'rank',
  14. sponsors: 'sponsors',
  15. support: 'support',
  16. order: 'order',
  17. shop: 'shop',
  18. link: 'link',
  19. ad: 'ad',
  20. faq: 'faq',
  21. team: 'team',
  22. oauth: 'oauth',
  23. release: 'release',
  24. notFound: 'notFound',
  25. group: 'group',
  26. profile: 'profile',
  27. pull: 'pull',
  28. push: 'push',
  29. ...mobileRouterName,
  30. };
  31. // 默认路由
  32. export const defaultRoutes: RouteRecordRaw[] = [
  33. {
  34. path: '/',
  35. component: Layout,
  36. children: [
  37. {
  38. name: routerName.home,
  39. path: '/',
  40. component: () => import('@/views/home/index.vue'),
  41. },
  42. {
  43. name: routerName.about,
  44. path: '/about',
  45. children: [
  46. {
  47. name: routerName.group,
  48. path: 'group',
  49. component: () => import('@/views/group/index.vue'),
  50. },
  51. {
  52. name: routerName.faq,
  53. path: 'faq',
  54. component: () => import('@/views/faq/index.vue'),
  55. },
  56. {
  57. name: routerName.team,
  58. path: 'team',
  59. component: () => import('@/views/team/index.vue'),
  60. },
  61. {
  62. name: routerName.release,
  63. path: 'release',
  64. component: () => import('@/views/release/index.vue'),
  65. },
  66. ],
  67. },
  68. {
  69. name: routerName.rank,
  70. path: '/rank',
  71. component: () => import('@/views/rank/index.vue'),
  72. },
  73. {
  74. name: routerName.shop,
  75. path: '/shop',
  76. component: () => import('@/views/shop/index.vue'),
  77. },
  78. {
  79. name: routerName.profile,
  80. path: '/profile/:userId',
  81. component: () => import('@/views/profile/index.vue'),
  82. },
  83. {
  84. name: routerName.account,
  85. path: '/account',
  86. component: () => import('@/views/account/index.vue'),
  87. },
  88. {
  89. name: routerName.sponsors,
  90. path: '/sponsors',
  91. component: () => import('@/views/sponsors/index.vue'),
  92. },
  93. {
  94. name: routerName.support,
  95. path: '/support',
  96. component: () => import('@/views/support/index.vue'),
  97. },
  98. {
  99. name: routerName.order,
  100. path: '/order',
  101. component: () => import('@/views/order/index.vue'),
  102. },
  103. {
  104. name: routerName.ad,
  105. path: '/ad',
  106. component: () => import('@/views/ad/index.vue'),
  107. },
  108. {
  109. name: routerName.pull,
  110. path: '/pull/:roomId',
  111. component: () => import('@/views/pull/index.vue'),
  112. },
  113. {
  114. name: routerName.push,
  115. path: '/push',
  116. component: () => import('@/views/push/index.vue'),
  117. },
  118. ],
  119. },
  120. {
  121. name: mobileRouterName.h5,
  122. path: '/h5',
  123. component: () => import('@/views/h5/index.vue'),
  124. },
  125. {
  126. name: mobileRouterName.h5Room,
  127. path: '/h5/:roomId',
  128. component: () => import('@/views/h5/room/index.vue'),
  129. },
  130. {
  131. name: routerName.oauth,
  132. path: '/oauth/:platform',
  133. component: () => import('@/views/oauth/index.vue'),
  134. },
  135. ];
  136. const router = createRouter({
  137. routes: [
  138. ...defaultRoutes,
  139. {
  140. path: '/:pathMatch(.*)*',
  141. name: routerName.notFound,
  142. component: () => import('@/views/notFound.vue'),
  143. },
  144. ],
  145. history: createWebHistory(),
  146. });
  147. router.beforeEach((to, from, next) => {
  148. if (to.name === routerName.oauth) {
  149. return next();
  150. }
  151. if (isMobile()) {
  152. if (!Object.keys(mobileRouterName).includes(to.name as string)) {
  153. // 当前移动端,但是跳转了非移动端路由
  154. return next({ name: mobileRouterName.h5 });
  155. } else {
  156. return next();
  157. }
  158. } else {
  159. if (Object.keys(mobileRouterName).includes(to.name as string)) {
  160. // 当前非移动端,但是跳转了移动端路由
  161. return next({ name: routerName.home });
  162. }
  163. return next();
  164. }
  165. });
  166. export default router;