| 
					
				 | 
			
			
				@@ -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;
 
			 |