From 764c88451c5b201ea9f8e5c5a4f3d7e8b801f758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=B4=E4=B8=9A=E4=BC=9F?= <806724993@qq.com> Date: Wed, 31 Jan 2024 15:42:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=94=A8=E6=88=B7=E6=9D=83=E9=99=90,?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B3=BB=E7=BB=9F=E4=B8=BB=E9=A2=98=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 13 ++++++++++- src/api/system/menu.ts | 4 ++-- src/enums/pageEnum.ts | 2 +- src/router/generator.ts | 4 +++- src/router/index.ts | 7 ++++++ src/router/router-guards.ts | 17 ++++++++------ src/store/modules/asyncRoute.ts | 40 +-------------------------------- src/utils/router.ts | 2 +- 8 files changed, 37 insertions(+), 52 deletions(-) diff --git a/src/App.vue b/src/App.vue index f06bddf..17314f1 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,10 +1,21 @@ diff --git a/src/api/system/menu.ts b/src/api/system/menu.ts index 5ba6ef0..3b7c4e7 100644 --- a/src/api/system/menu.ts +++ b/src/api/system/menu.ts @@ -13,8 +13,8 @@ export const insertMenu = (params: Object) => { return post(url.insert, params); }; -export const getMenuTree = () => { - return get(url.tree); +export const getMenuTree = (params?: any) => { + return get(url.tree, params); }; export const updateMenu = (params: Object) => { diff --git a/src/enums/pageEnum.ts b/src/enums/pageEnum.ts index 986340f..f7a877e 100644 --- a/src/enums/pageEnum.ts +++ b/src/enums/pageEnum.ts @@ -8,7 +8,7 @@ export enum PageEnum { REDIRECT = "/redirect", REDIRECT_NAME = "Redirect", // 首页 - BASE_HOME = "/system/menu", + BASE_HOME = "/system/role", // 错误 ERROR_PAGE_NAME_403 = "ErrorPage403", ERROR_PAGE_NAME_404 = "ErrorPage404", diff --git a/src/router/generator.ts b/src/router/generator.ts index 64007cf..0502daa 100644 --- a/src/router/generator.ts +++ b/src/router/generator.ts @@ -47,6 +47,8 @@ export const generateRoutes = (routerMap, parent?): any[] => { !item.redirect && (currentRoute.redirect = `${item.path}/${item.children[0].path}`); // Recursion + console.log(currentRoute.redirect, "currentRoute.redirect"); + currentRoute.children = generateRoutes(item.children, currentRoute); } return currentRoute; @@ -58,7 +60,7 @@ export const generateRoutes = (routerMap, parent?): any[] => { * @returns {Promise} */ export const generateDynamicRoutes = async (): Promise => { - const { data } = await getMenuTree(); + const { data } = await getMenuTree({ mode: 1 }); const router = generateRoutes(data); asyncImportRoute(router); return router; diff --git a/src/router/index.ts b/src/router/index.ts index f6d7a35..577b15c 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -26,11 +26,18 @@ export const RootRoute: RouteRecordRaw = { path: "/", name: "Root", redirect: "/system/menu", + // async beforeEnter(to, from, next) { + // next(await reqRedirectUrl()); + // }, meta: { title: "Root", }, }; +// async function reqRedirectUrl() { +// return "/system/role"; +// } + //需要验证权限 export const asyncRoutes = []; diff --git a/src/router/router-guards.ts b/src/router/router-guards.ts index ddbfc30..4c91779 100644 --- a/src/router/router-guards.ts +++ b/src/router/router-guards.ts @@ -59,13 +59,16 @@ export async function createRouterGuards(router: Router) { return; } - await userStore.getInfo(); - const routes = await asyncRouteStore.generateRoutes(); - - // 动态添加可访问路由表 - routes.forEach((item: unknown) => { - router.addRoute(item as unknown as RouteRecordRaw); - }); + try { + await userStore.getInfo(); + const routes = await asyncRouteStore.generateRoutes(); + // 动态添加可访问路由表 + routes.forEach((item: unknown) => { + router.addRoute(item as unknown as RouteRecordRaw); + }); + } catch (error) { + next(LOGIN_PATH); + } //添加404 const isErrorPage = router diff --git a/src/store/modules/asyncRoute.ts b/src/store/modules/asyncRoute.ts index 8371c5d..b9d1740 100644 --- a/src/store/modules/asyncRoute.ts +++ b/src/store/modules/asyncRoute.ts @@ -1,24 +1,9 @@ import { defineStore } from "pinia"; import { RouteRecordRaw } from "vue-router"; import { store } from "@/store"; -import { asyncRoutes, constantRouter } from "@/router/index"; +import { constantRouter } from "@/router/index"; import { generateDynamicRoutes } from "@/router/generator"; -interface TreeHelperConfig { - id: string; - children: string; - pid: string; -} - -const DEFAULT_CONFIG: TreeHelperConfig = { - id: "id", - children: "children", - pid: "pid", -}; - -const getConfig = (config: Partial) => - Object.assign({}, DEFAULT_CONFIG, config); - export interface IAsyncRouteState { menus: RouteRecordRaw[]; routers: any[]; @@ -27,26 +12,6 @@ export interface IAsyncRouteState { isDynamicRouteAdded: boolean; } -function filter( - tree: T[], - func: (n: T) => boolean, - config: Partial = {} -): T[] { - config = getConfig(config); - const children = config.children as string; - - function listFilter(list: T[]) { - return list - .map((node: any) => ({ ...node })) - .filter((node) => { - node[children] = node[children] && listFilter(node[children]); - return func(node) || (node[children] && node[children].length); - }); - } - - return listFilter(tree); -} - export const useAsyncRouteStore = defineStore({ id: "app-async-route", state: (): IAsyncRouteState => ({ @@ -54,7 +19,6 @@ export const useAsyncRouteStore = defineStore({ routers: constantRouter, routersAdded: [], keepAliveComponents: [], - // Whether the route has been dynamically added isDynamicRouteAdded: false, }), getters: { @@ -93,7 +57,6 @@ export const useAsyncRouteStore = defineStore({ } catch (error) { console.log(error); } - // accessedRouters = accessedRouters.filter(routeFilter); this.setRouters(accessedRouters); this.setMenus(accessedRouters); return toRaw(accessedRouters); @@ -101,7 +64,6 @@ export const useAsyncRouteStore = defineStore({ }, }); -// Need to be used outside the setup export function useAsyncRoute() { return useAsyncRouteStore(store); } diff --git a/src/utils/router.ts b/src/utils/router.ts index d83a159..ca60f34 100644 --- a/src/utils/router.ts +++ b/src/utils/router.ts @@ -1,7 +1,7 @@ import router from "@/router"; import { ResultEnum } from "@/enums/httpEnum"; import { ErrorPageNameMap } from "@/enums/pageEnum"; -import { cryptoDecode } from "./crypto"; +// import { cryptoDecode } from "./crypto"; import { StorageEnum } from "@/enums/storageEnum"; import { storage } from "@/utils/storage";