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