| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { App } from 'vue'
- import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
- import { RedirectRoute } from '@/router/base'
- import { PageEnum } from '@/enums/pageEnum'
- import { createRouterGuards } from './router-guards'
- import routes from './modules/dashboard'
- import { AesEncryption } from '@/utils/cipher'
- import { isArray, isNull, isUndefined } from 'lodash-es'
- import type { LocationQuery, LocationQueryRaw, LocationQueryValue } from 'vue-router'
- const aes = new AesEncryption()
- const routeModuleList: RouteRecordRaw[] = [...routes]
- function sortRoute(a: any, b: any) {
- return (a.meta?.sort || 0) - (b.meta?.sort || 0)
- }
- /**
- *
- * @description 加密:反序列化字符串参数
- */
- export function stringifyQuery(obj: LocationQueryRaw): string {
- if (!obj) return ''
- const result = Object.keys(obj)
- .map((key) => {
- const value = obj[key]
- if (isUndefined(value)) return ''
- if (isNull(value)) return key
- if (isArray(value)) {
- const resArray: string[] = []
- value.forEach((item) => {
- 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 = 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
- }
- routeModuleList.sort(sortRoute)
- export const RootRoute: RouteRecordRaw = {
- path: '/',
- name: 'Root',
- redirect: PageEnum.BASE_HOME,
- meta: {
- title: 'Root'
- }
- }
- export const LoginRoute: RouteRecordRaw = {
- path: '/login',
- name: 'Login',
- component: () => import('@/views/login/index.vue'),
- meta: {
- title: '登录'
- }
- }
- //需要验证权限
- export const asyncRoutes = []
- //普通路由 无需验证权限
- export const constantRouter: any[] = [LoginRoute, RootRoute, RedirectRoute, ...routeModuleList]
- const router = createRouter({
- history: createWebHashHistory(''),
- routes: constantRouter,
- strict: true,
- stringifyQuery,
- parseQuery,
- scrollBehavior: () => ({ left: 0, top: 0 })
- })
- /**
- *
- // stringifyQuery, // 序列化query参数
- // parseQuery,
- */
- export function setupRouter(app: App) {
- app.use(router)
- // 创建路由守卫
- createRouterGuards(router, app)
- }
- export default router
|