|  | @@ -1,104 +1,105 @@
 | 
	
		
			
				|  |  | -import { App } from 'vue';
 | 
	
		
			
				|  |  | -import {
 | 
	
		
			
				|  |  | -  createRouter,
 | 
	
		
			
				|  |  | -  createWebHistory,
 | 
	
		
			
				|  |  | -  LocationQuery,
 | 
	
		
			
				|  |  | -  LocationQueryRaw,
 | 
	
		
			
				|  |  | -  LocationQueryValue,
 | 
	
		
			
				|  |  | -  Router
 | 
	
		
			
				|  |  | -} from 'vue-router';
 | 
	
		
			
				|  |  | -import { constantRoutes } from './routes/index';
 | 
	
		
			
				|  |  | -import { AesEncryption } from '@/utils/cipher';
 | 
	
		
			
				|  |  | -import { createRouterGuards } from './router-guards';
 | 
	
		
			
				|  |  | -const aes = new AesEncryption();
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/** Used as references for various `Number` constants. */
 | 
	
		
			
				|  |  | -const MAX_SAFE_INTEGER = 9007199254740991;
 | 
	
		
			
				|  |  | -function isLength(value: any) {
 | 
	
		
			
				|  |  | -  return (
 | 
	
		
			
				|  |  | -    typeof value === 'number' &&
 | 
	
		
			
				|  |  | -    value > -1 &&
 | 
	
		
			
				|  |  | -    value % 1 == 0 &&
 | 
	
		
			
				|  |  | -    value <= MAX_SAFE_INTEGER
 | 
	
		
			
				|  |  | -  );
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -function isUndefined(value: any) {
 | 
	
		
			
				|  |  | -  return value === undefined;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -function isArray(value: any) {
 | 
	
		
			
				|  |  | -  return value != null && typeof value !== 'function' && isLength(value.length);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -function isNull(value: any) {
 | 
	
		
			
				|  |  | -  return value === null;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - *
 | 
	
		
			
				|  |  | - * @description 加密:反序列化字符串参数
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -export function stringifyQuery(obj: LocationQueryRaw): string {
 | 
	
		
			
				|  |  | -  if (!obj) return '';
 | 
	
		
			
				|  |  | -  const result = Object.keys(obj)
 | 
	
		
			
				|  |  | -    .map(key => {
 | 
	
		
			
				|  |  | -      const value: any = obj[key];
 | 
	
		
			
				|  |  | -      if (isUndefined(value)) return '';
 | 
	
		
			
				|  |  | -      if (isNull(value)) return key;
 | 
	
		
			
				|  |  | -      if (Array.isArray(value)) {
 | 
	
		
			
				|  |  | -        const resArray: string[] = [];
 | 
	
		
			
				|  |  | -        value.forEach((item: string) => {
 | 
	
		
			
				|  |  | -          if (isUndefined(item)) return;
 | 
	
		
			
				|  |  | -          if (isNull(item)) {
 | 
	
		
			
				|  |  | -            resArray.push(key);
 | 
	
		
			
				|  |  | -          } else {
 | 
	
		
			
				|  |  | -            resArray.push(key + '=' + item);
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | -        return resArray.join('&');
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      return `${key}=${value}`;
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | -    .filter(x => x.length > 0)
 | 
	
		
			
				|  |  | -    .join('&');
 | 
	
		
			
				|  |  | -  return result ? `?${aes.encryptByAES(result)}` : '';
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -/**
 | 
	
		
			
				|  |  | - *
 | 
	
		
			
				|  |  | - * @description 解密:反序列化字符串参数
 | 
	
		
			
				|  |  | - */
 | 
	
		
			
				|  |  | -export function parseQuery(query: string): LocationQuery {
 | 
	
		
			
				|  |  | -  const res: LocationQuery = {};
 | 
	
		
			
				|  |  | -  query = query.trim().replace(/^(\?|#|&)/, '');
 | 
	
		
			
				|  |  | -  if (!query) return res;
 | 
	
		
			
				|  |  | -  query = aes.decryptByAES(query);
 | 
	
		
			
				|  |  | -  query.split('&').forEach(param => {
 | 
	
		
			
				|  |  | -    const parts = param.replace(/\+/g, ' ').split('=');
 | 
	
		
			
				|  |  | -    const key: any = parts.shift();
 | 
	
		
			
				|  |  | -    const val = parts.length > 0 ? parts.join('=') : null;
 | 
	
		
			
				|  |  | -    if (!isUndefined(key)) {
 | 
	
		
			
				|  |  | -      if (isUndefined(res[key])) {
 | 
	
		
			
				|  |  | -        res[key] = val;
 | 
	
		
			
				|  |  | -      } else if (isArray(res[key])) {
 | 
	
		
			
				|  |  | -        (res[key] as LocationQueryValue[]).push(val);
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        res[key] = [res[key] as LocationQueryValue, val];
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  });
 | 
	
		
			
				|  |  | -  return res;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -const router: Router = createRouter({
 | 
	
		
			
				|  |  | -  history: createWebHistory('/classroom'),
 | 
	
		
			
				|  |  | -  routes: [...constantRoutes],
 | 
	
		
			
				|  |  | -  stringifyQuery,
 | 
	
		
			
				|  |  | -  parseQuery,
 | 
	
		
			
				|  |  | -  scrollBehavior: () => ({ top: 0 })
 | 
	
		
			
				|  |  | -});
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export function setupRouter(app: App) {
 | 
	
		
			
				|  |  | -  app.use(router);
 | 
	
		
			
				|  |  | -  // 创建路由守卫
 | 
	
		
			
				|  |  | -  createRouterGuards(router);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -export default router;
 | 
	
		
			
				|  |  | +import { App } from 'vue';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  createRouter,
 | 
	
		
			
				|  |  | +  createWebHashHistory,
 | 
	
		
			
				|  |  | +  createWebHistory,
 | 
	
		
			
				|  |  | +  LocationQuery,
 | 
	
		
			
				|  |  | +  LocationQueryRaw,
 | 
	
		
			
				|  |  | +  LocationQueryValue,
 | 
	
		
			
				|  |  | +  Router
 | 
	
		
			
				|  |  | +} from 'vue-router';
 | 
	
		
			
				|  |  | +import { constantRoutes } from './routes/index';
 | 
	
		
			
				|  |  | +import { AesEncryption } from '@/utils/cipher';
 | 
	
		
			
				|  |  | +import { createRouterGuards } from './router-guards';
 | 
	
		
			
				|  |  | +const aes = new AesEncryption();
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/** Used as references for various `Number` constants. */
 | 
	
		
			
				|  |  | +const MAX_SAFE_INTEGER = 9007199254740991;
 | 
	
		
			
				|  |  | +function isLength(value: any) {
 | 
	
		
			
				|  |  | +  return (
 | 
	
		
			
				|  |  | +    typeof value === 'number' &&
 | 
	
		
			
				|  |  | +    value > -1 &&
 | 
	
		
			
				|  |  | +    value % 1 == 0 &&
 | 
	
		
			
				|  |  | +    value <= MAX_SAFE_INTEGER
 | 
	
		
			
				|  |  | +  );
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +function isUndefined(value: any) {
 | 
	
		
			
				|  |  | +  return value === undefined;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +function isArray(value: any) {
 | 
	
		
			
				|  |  | +  return value != null && typeof value !== 'function' && isLength(value.length);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +function isNull(value: any) {
 | 
	
		
			
				|  |  | +  return value === null;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @description 加密:反序列化字符串参数
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export function stringifyQuery(obj: LocationQueryRaw): string {
 | 
	
		
			
				|  |  | +  if (!obj) return '';
 | 
	
		
			
				|  |  | +  const result = Object.keys(obj)
 | 
	
		
			
				|  |  | +    .map(key => {
 | 
	
		
			
				|  |  | +      const value: any = obj[key];
 | 
	
		
			
				|  |  | +      if (isUndefined(value)) return '';
 | 
	
		
			
				|  |  | +      if (isNull(value)) return key;
 | 
	
		
			
				|  |  | +      if (Array.isArray(value)) {
 | 
	
		
			
				|  |  | +        const resArray: string[] = [];
 | 
	
		
			
				|  |  | +        value.forEach((item: string) => {
 | 
	
		
			
				|  |  | +          if (isUndefined(item)) return;
 | 
	
		
			
				|  |  | +          if (isNull(item)) {
 | 
	
		
			
				|  |  | +            resArray.push(key);
 | 
	
		
			
				|  |  | +          } else {
 | 
	
		
			
				|  |  | +            resArray.push(key + '=' + item);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        return resArray.join('&');
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return `${key}=${value}`;
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    .filter(x => x.length > 0)
 | 
	
		
			
				|  |  | +    .join('&');
 | 
	
		
			
				|  |  | +  return result ? `?${aes.encryptByAES(result)}` : '';
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @description 解密:反序列化字符串参数
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +export function parseQuery(query: string): LocationQuery {
 | 
	
		
			
				|  |  | +  const res: LocationQuery = {};
 | 
	
		
			
				|  |  | +  query = query.trim().replace(/^(\?|#|&)/, '');
 | 
	
		
			
				|  |  | +  if (!query) return res;
 | 
	
		
			
				|  |  | +  query = aes.decryptByAES(query);
 | 
	
		
			
				|  |  | +  query.split('&').forEach(param => {
 | 
	
		
			
				|  |  | +    const parts = param.replace(/\+/g, ' ').split('=');
 | 
	
		
			
				|  |  | +    const key: any = parts.shift();
 | 
	
		
			
				|  |  | +    const val = parts.length > 0 ? parts.join('=') : null;
 | 
	
		
			
				|  |  | +    if (!isUndefined(key)) {
 | 
	
		
			
				|  |  | +      if (isUndefined(res[key])) {
 | 
	
		
			
				|  |  | +        res[key] = val;
 | 
	
		
			
				|  |  | +      } else if (isArray(res[key])) {
 | 
	
		
			
				|  |  | +        (res[key] as LocationQueryValue[]).push(val);
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        res[key] = [res[key] as LocationQueryValue, val];
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  });
 | 
	
		
			
				|  |  | +  return res;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +const router: Router = createRouter({
 | 
	
		
			
				|  |  | +  history: createWebHashHistory('/classroom'),
 | 
	
		
			
				|  |  | +  routes: [...constantRoutes],
 | 
	
		
			
				|  |  | +  stringifyQuery,
 | 
	
		
			
				|  |  | +  parseQuery,
 | 
	
		
			
				|  |  | +  scrollBehavior: () => ({ top: 0 })
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export function setupRouter(app: App) {
 | 
	
		
			
				|  |  | +  app.use(router);
 | 
	
		
			
				|  |  | +  // 创建路由守卫
 | 
	
		
			
				|  |  | +  createRouterGuards(router);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default router;
 |