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