|
@@ -1,146 +1,144 @@
|
|
|
-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';
|
|
|
-import { getAuthForAdmin } from '../utils';
|
|
|
-
|
|
|
-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;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- // 为了处理课堂乐器后台预览课件的功能
|
|
|
- // const authSource = sessionStorage.getItem('authSource');
|
|
|
- const userAuth = getAuthForAdmin()
|
|
|
- let token = "";
|
|
|
- if (userAuth.authSource === 'admin') {
|
|
|
- token = userAuth.Authorization;
|
|
|
- } else {
|
|
|
- token = storage.get(ACCESS_TOKEN)
|
|
|
- }
|
|
|
- // 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;
|
|
|
- }
|
|
|
-
|
|
|
- if(!userStore.getNickname) {
|
|
|
- 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 => {});
|
|
|
-}
|
|
|
+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';
|
|
|
+import { getAuthForAdmin } from '../utils';
|
|
|
+
|
|
|
+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;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 为了处理课堂乐器后台预览课件的功能
|
|
|
+ // const authSource = sessionStorage.getItem('authSource');
|
|
|
+ const userAuth = getAuthForAdmin();
|
|
|
+ let token = '';
|
|
|
+ if (userAuth.authSource === 'admin') {
|
|
|
+ token = userAuth.Authorization;
|
|
|
+ } else {
|
|
|
+ token = storage.get(ACCESS_TOKEN);
|
|
|
+ }
|
|
|
+ // 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!userStore.getNickname) {
|
|
|
+ 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 => {});
|
|
|
+}
|