| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- import { isIPad, isMobile } from 'billd-utils';
- import { createRouter, createWebHistory } from 'vue-router';
- import { GoodsTypeEnum } from '@/interface';
- import MobileLayout from '@/layout/mobile/index.vue';
- import PcLayout from '@/layout/pc/index.vue';
- import type { RouteRecordRaw } from 'vue-router';
- export const commonRouterName = {
- qrcodeLogin: 'qrcodeLogin',
- };
- export const mobileRouterName = {
- h5: 'h5',
- h5Room: 'h5Room',
- h5Area: 'h5Area',
- h5Rank: 'h5Rank',
- h5Profile: 'h5Profile',
- ...commonRouterName,
- };
- export const routerName = {
- home: 'home',
- about: 'about',
- area: 'area',
- areaDetail: 'areaDetail',
- rank: 'rank',
- sponsors: 'sponsors',
- privatizationDeployment: 'privatizationDeployment',
- videoTools: 'videoTools',
- frameScreenshotByCanvas: 'frameScreenshotByCanvas',
- frameScreenshotByWebcodec: 'frameScreenshotByWebcodec',
- support: 'support',
- order: 'order',
- wallet: 'wallet',
- shop: 'shop',
- remoteDesktop: 'remoteDesktop',
- link: 'link',
- ad: 'ad',
- faq: 'faq',
- team: 'team',
- oauth: 'oauth',
- release: 'release',
- pushStreamDifferent: 'pushStreamDifferent',
- notFound: 'notFound',
- group: 'group',
- profile: 'profile',
- download: 'download',
- downloadLive: 'downloadLive',
- downloadRemoteDesktop: 'downloadRemoteDesktop',
- pull: 'pull',
- push: 'push',
- ...mobileRouterName,
- };
- // 默认路由
- export const defaultRoutes: RouteRecordRaw[] = [
- {
- name: routerName.oauth,
- path: '/oauth/:platform',
- component: () => import('@/views/oauth/index.vue'),
- },
- {
- path: '/',
- component: PcLayout,
- children: [
- {
- name: routerName.home,
- path: '/',
- component: () => import('@/views/home/index.vue'),
- },
- {
- name: routerName.about,
- path: '/about',
- children: [
- {
- name: routerName.group,
- path: 'group',
- component: () => import('@/views/about/group/index.vue'),
- },
- {
- name: routerName.faq,
- path: 'faq',
- component: () => import('@/views/about/faq/index.vue'),
- },
- {
- name: routerName.team,
- path: 'team',
- component: () => import('@/views/about/team/index.vue'),
- },
- {
- name: routerName.release,
- path: 'release',
- component: () => import('@/views/about/release/index.vue'),
- },
- {
- name: routerName.pushStreamDifferent,
- path: 'pushStreamDifferent',
- component: () =>
- import('@/views/about/pushStreamDifferent/index.vue'),
- },
- ],
- },
- {
- name: routerName.area,
- path: '/area',
- component: () => import('@/views/area/index.vue'),
- children: [
- {
- name: routerName.areaDetail,
- path: '/area/:id',
- component: () => import('@/views/area/id/index.vue'),
- },
- ],
- },
- {
- name: routerName.rank,
- path: '/rank',
- component: () => import('@/views/rank/index.vue'),
- },
- {
- name: routerName.shop,
- path: '/shop',
- component: () => import('@/views/shop/index.vue'),
- },
- {
- name: routerName.remoteDesktop,
- path: '/remoteDesktop',
- component: () => import('@/views/remoteDesktop/index.vue'),
- },
- {
- name: routerName.profile,
- path: '/profile/:userId',
- component: () => import('@/views/profile/index.vue'),
- },
- {
- name: routerName.downloadRemoteDesktop,
- path: '/download/remoteDesktop',
- component: () => import('@/views/download/remoteDesktop/index.vue'),
- },
- {
- name: routerName.downloadLive,
- path: '/download/live',
- component: () => import('@/views/download/live/index.vue'),
- },
- {
- name: routerName.sponsors,
- path: '/sponsors',
- component: () => import('@/views/doc/sponsors/index.vue'),
- },
- {
- name: routerName.privatizationDeployment,
- path: '/privatizationDeployment',
- component: () =>
- import('@/views/doc/privatizationDeployment/index.vue'),
- },
- {
- name: routerName.support,
- path: '/support',
- redirect: `/shop?goodsType=${GoodsTypeEnum.support}`,
- },
- {
- name: routerName.order,
- path: '/order',
- component: () => import('@/views/order/index.vue'),
- },
- {
- name: routerName.wallet,
- path: '/wallet',
- component: () => import('@/views/wallet/index.vue'),
- },
- {
- name: routerName.videoTools,
- path: '/videoTools',
- component: () => import('@/views/videoTools/index.vue'),
- },
- {
- name: routerName.frameScreenshotByCanvas,
- path: '/videoTools/frameScreenshotByCanvas',
- component: () =>
- import('@/views/videoTools/frameScreenshot/canvas/index.vue'),
- },
- {
- name: routerName.frameScreenshotByWebcodec,
- path: '/videoTools/frameScreenshotByWebcodec',
- component: () =>
- import('@/views/videoTools/frameScreenshot/webcodec/index.vue'),
- },
- {
- name: routerName.ad,
- path: '/ad',
- component: () => import('@/views/doc/ad/index.vue'),
- },
- {
- name: routerName.pull,
- path: '/pull/:roomId',
- component: () => import('@/views/pull/index.vue'),
- },
- {
- name: routerName.push,
- path: '/push',
- component: () => import('@/views/push/index.vue'),
- },
- ],
- },
- {
- path: '/h5',
- component: MobileLayout,
- children: [
- {
- name: mobileRouterName.h5,
- path: '',
- component: () => import('@/views/h5/index.vue'),
- },
- {
- name: mobileRouterName.h5Area,
- path: 'area/:id',
- component: () => import('@/views/h5/area/index.vue'),
- },
- {
- name: mobileRouterName.h5Rank,
- path: 'rank',
- component: () => import('@/views/h5/rank/index.vue'),
- },
- {
- name: mobileRouterName.h5Profile,
- path: 'profile',
- component: () => import('@/views/h5/profile/index.vue'),
- },
- ],
- },
- {
- name: mobileRouterName.h5Room,
- path: '/h5/:roomId',
- component: () => import('@/views/h5/room/index.vue'),
- },
- ];
- const router = createRouter({
- routes: [
- ...defaultRoutes,
- {
- path: '/:pathMatch(.*)*',
- name: routerName.notFound,
- component: () => import('@/views/notFound.vue'),
- },
- ],
- history: createWebHistory(),
- });
- router.beforeEach((to, from, next) => {
- if (to.name === routerName.oauth) {
- return next();
- }
- if (Object.keys(commonRouterName).includes(to.name as string)) {
- // 跳转通用路由
- return next();
- } else if (isMobile() && !isIPad()) {
- if (!Object.keys(mobileRouterName).includes(to.name as string)) {
- // 当前移动端,但是跳转了非移动端路由
- console.log('当前移动端,但是跳转了非移动端路由', to, from);
- if (to.name === routerName.pull) {
- return next({
- name: mobileRouterName.h5Room,
- params: { roomId: to.params.roomId },
- query: { ...to.query },
- });
- } else {
- return next({
- name: mobileRouterName.h5,
- });
- }
- } else {
- return next();
- }
- } else {
- if (Object.keys(mobileRouterName).includes(to.name as string)) {
- // 当前非移动端,但是跳转了移动端路由
- console.log('当前非移动端,但是跳转了移动端路由');
- if (to.name === mobileRouterName.h5Room) {
- // 有可能是原生webrtc或srs-webrtc
- return next({
- name: routerName.home,
- });
- } else {
- return next({
- name: routerName.home,
- });
- }
- }
- return next();
- }
- });
- export default router;
|