123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- import { isNavigationFailure, Router } from 'vue-router';
- import { useUserStore } from '@/store/modules/users';
- import { storage } from '@/utils/storage';
- import { PageEnum } from '@/enums/pageEnum';
- import { ACCESS_TOKEN, ACCESS_TOKEN_ADMIN } from '@/store/mutation-types';
- const LOGIN_PATH = PageEnum.BASE_LOGIN;
- const whitePathList = [LOGIN_PATH]; // no redirect whitelist
- const isChrome = () => {
- const isChromium = (window as any).chrome;
- const winNav = window.navigator;
- const vendorName = winNav.vendor;
- const isOpera = typeof (window as any).opr !== 'undefined';
- const isIEedge = winNav.userAgent.indexOf('Edge') > -1;
- const isIOSChrome = winNav.userAgent.match('CriOS');
- return (
- isIOSChrome ||
- (isChromium !== null &&
- typeof isChromium !== 'undefined' &&
- vendorName === 'Google Inc.' &&
- isOpera === false &&
- isIEedge === false)
- );
- };
- export function createRouterGuards(router: Router) {
- const userStore = useUserStore();
- router.beforeEach(async (to, from, next) => {
- if (to.path === '/attend-class') {
- let title = to.meta.title;
- if (to.query.type === 'preview') {
- title = '预览课件';
- }
- (document as any).title = title ? title : ('音乐数字课堂' as string);
- } else {
- (document as any).title = to.meta.title
- ? to.meta.title
- : ('音乐数字课堂' as string);
- }
- if ('serviceWorker' in navigator) {
- console.log(caches.keys(), 'caches.keys()');
- caches.keys().then(function (cacheNames) {
- cacheNames.forEach(function (cacheName) {
- caches.delete(cacheName);
- });
- });
- }
- if (!isChrome()) {
- return;
- }
- window.$loadingBar && window.$loadingBar.start();
- // console.log(window.$loadingBar, '232332');
- if (from.path === LOGIN_PATH && to.name === 'errorPage') {
- next(PageEnum.BASE_HOME);
- return;
- }
- // Whitelist can be directly entered
- if (whitePathList.includes(to.path as PageEnum)) {
- next();
- return;
- }
- let token = storage.get(ACCESS_TOKEN);
- const authSource = sessionStorage.getItem('authSource');
- if (authSource === 'admin' && storage.get(ACCESS_TOKEN_ADMIN)) {
- token = storage.get(ACCESS_TOKEN_ADMIN);
- }
- // console.log(token, 'access token');
- if (!token) {
- // You can access without permissions. You need to set the routing meta.ignoreAuth to true
- if (to.meta.ignoreAuth) {
- next();
- return;
- }
- // redirect login page
- const redirectData: { path: string; replace: boolean; query?: any } = {
- path: LOGIN_PATH,
- replace: true
- };
- if (to.path) {
- redirectData.query = {
- ...redirectData.query,
- redirect: to.path
- };
- }
- console.log(redirectData, to);
- next(redirectData);
- return;
- }
- await userStore.getInfo();
- // const redirectPath = (from.query.redirect || to.path) as string;
- // const redirect = decodeURIComponent(redirectPath);
- // const nextData =
- // to.path === redirect ? { ...to, replace: true } : { path: redirect };
- // next(nextData);
- next();
- // window.$loadingBar && window.$loadingBar.finish();
- });
- router.afterEach((to, _, failure) => {
- if (isNavigationFailure(failure)) {
- console.log('failed navigation', failure);
- }
- // const asyncRouteStore = useAsyncRouteStoreWidthOut();
- // // 在这里设置需要缓存的组件名称
- // const keepAliveComponents = asyncRouteStore.keepAliveComponents;
- // const currentComName: any = to.matched.find(
- // item => item.name == to.name
- // )?.name;
- // if (
- // currentComName &&
- // !keepAliveComponents.includes(currentComName) &&
- // to.meta?.keepAlive
- // ) {
- // // 需要缓存的组件
- // keepAliveComponents.push(currentComName);
- // } else if (!to.meta?.keepAlive || to.name == 'Redirect') {
- // // 不需要缓存的组件
- // const index = asyncRouteStore.keepAliveComponents.findIndex(
- // name => name == currentComName
- // );
- // if (index != -1) {
- // keepAliveComponents.splice(index, 1);
- // }
- // }
- // asyncRouteStore.setKeepAliveComponents(keepAliveComponents);
- window.$loadingBar && window.$loadingBar.finish();
- });
- // router.onError(error => {});
- }
|