Browse Source

fix: url router

main
xingyu 2 years ago
parent
commit
0732077adf
  1. 2
      src/hooks/web/usePermission.ts
  2. 46
      src/router/helper/routeHelper.ts
  3. 1
      src/store/modules/permission.ts
  4. 2
      src/store/modules/user.ts

2
src/hooks/web/usePermission.ts

@ -45,7 +45,9 @@ export function usePermission() {
resetRouter() resetRouter()
const routes = await permissionStore.buildRoutesAction() const routes = await permissionStore.buildRoutesAction()
routes.forEach((route) => { routes.forEach((route) => {
try {
router.addRoute(route as unknown as RouteRecordRaw) router.addRoute(route as unknown as RouteRecordRaw)
} catch (e) {}
}) })
permissionStore.setLastBuildMenuTime() permissionStore.setLastBuildMenuTime()
closeAll() closeAll()

46
src/router/helper/routeHelper.ts

@ -8,7 +8,6 @@ import { isUrl } from '@/utils/is'
export type LayoutMapKey = 'LAYOUT' export type LayoutMapKey = 'LAYOUT'
const IFRAME = () => import('@/views/base/iframe/FrameBlank.vue') const IFRAME = () => import('@/views/base/iframe/FrameBlank.vue')
const URL_HASH_TAB = `__AGWE4H__HASH__TAG__PWHRG__`
const LayoutMap = new Map<string, () => Promise<typeof import('*.vue')>>() const LayoutMap = new Map<string, () => Promise<typeof import('*.vue')>>()
LayoutMap.set('LAYOUT', LAYOUT) LayoutMap.set('LAYOUT', LAYOUT)
@ -21,18 +20,6 @@ function asyncImportRoute(routes: AppRouteRecordRaw[] | undefined) {
dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}') dynamicViewsModules = dynamicViewsModules || import.meta.glob('../../views/**/*.{vue,tsx}')
if (!routes) return if (!routes) return
routes.forEach((item) => { routes.forEach((item) => {
if (/^\/?http(s)?/.test(item.component as string)) {
item.component = item.component.substring(1, item.component.length)
}
if (/^http(s)?/.test(item.component as string)) {
if (item.meta?.internalOrExternal) {
item.path = item.component
item.path = item.path.replace('#', URL_HASH_TAB)
} else {
item.meta.frameSrc = item.component
}
delete item.component
}
if (!item.component && item.meta?.frameSrc) { if (!item.component && item.meta?.frameSrc) {
item.component = 'IFRAME' item.component = 'IFRAME'
} }
@ -94,27 +81,20 @@ export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModul
} else if (!route.children) { } else if (!route.children) {
route.component = route.component as string route.component = route.component as string
} }
// if (isUrl(route.path)) {
// route.component = 'LAYOUT'
// const path = route.path
// route.path = '/' + route.name
// route.redirect = path
// }
if (isUrl(route.path)) { if (isUrl(route.path)) {
route.component = 'IFRAME' route.component = 'IFrame'
const path = route.path // const path = route.path
route.path = '/' + route.name // route.path = '/' + route.name
const childRoute = [ // route.redirect = path
{
path: path,
name: route.name,
component: 'IFRAME',
sort: route.sort,
meta: {
title: route.name,
icon: route.icon
}
}
]
route.children = childRoute
} }
const component = route.component as string const component = route.component as string
if (component && !isUrl(route.path)) { if (component) {
const meta = route.meta || {} const meta = route.meta || {}
meta.hideMenu = !route.visible meta.hideMenu = !route.visible
meta.orderNo = route.sort meta.orderNo = route.sort
@ -125,8 +105,8 @@ export function transformObjToRoute<T = AppRouteModule>(routeList: AppRouteModul
route.component = LayoutMap.get('LAYOUT'.toUpperCase()) route.component = LayoutMap.get('LAYOUT'.toUpperCase())
} else if (component.toUpperCase() === 'IFRAME') { } else if (component.toUpperCase() === 'IFRAME') {
route.component = LayoutMap.get('IFRAME'.toUpperCase()) route.component = LayoutMap.get('IFRAME'.toUpperCase())
meta.frameSrc = route.path // meta.frameSrc = route.path
route.path = '/' + route.name // route.path = '/' + route.name
} else { } else {
//处理顶级非目录路由 //处理顶级非目录路由
meta.single = true meta.single = true

1
src/store/modules/permission.ts

@ -236,6 +236,7 @@ export const usePermissionStore = defineStore('app-permission', {
routeList = routeList.filter(routeRemoveIgnoreFilter) routeList = routeList.filter(routeRemoveIgnoreFilter)
routeList = flatMultiLevelRoutes(routeList) routeList = flatMultiLevelRoutes(routeList)
routes = [PAGE_NOT_FOUND_ROUTE, dashboard, ...routeList, about] routes = [PAGE_NOT_FOUND_ROUTE, dashboard, ...routeList, about]
console.info(routes)
break break
} }

2
src/store/modules/user.ts

@ -141,7 +141,9 @@ export const useUserStore = defineStore('app-user', {
if (!permissionStore.isDynamicAddedRoute) { if (!permissionStore.isDynamicAddedRoute) {
const routes = await permissionStore.buildRoutesAction() const routes = await permissionStore.buildRoutesAction()
routes.forEach((route) => { routes.forEach((route) => {
try {
router.addRoute(route as unknown as RouteRecordRaw) router.addRoute(route as unknown as RouteRecordRaw)
} catch (e) {}
}) })
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw) router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw)
permissionStore.setDynamicAddedRoute(true) permissionStore.setDynamicAddedRoute(true)