refactor: 重构重置路由功能

This commit is contained in:
xiaoxian521 2022-08-18 18:34:53 +08:00
parent 5ac646444f
commit d6a329a63c
5 changed files with 40 additions and 16 deletions

View File

@ -4,6 +4,7 @@ import { MockMethod } from "vite-plugin-mock";
// http://mockjs.com/examples.html#Object // http://mockjs.com/examples.html#Object
const systemRouter = { const systemRouter = {
path: "/system", path: "/system",
name: "User",
redirect: "/system/user/index", redirect: "/system/user/index",
meta: { meta: {
icon: "setting", icon: "setting",
@ -51,6 +52,7 @@ const systemRouter = {
const permissionRouter = { const permissionRouter = {
path: "/permission", path: "/permission",
redirect: "/permission/page/index", redirect: "/permission/page/index",
name: "PermissionPage",
meta: { meta: {
title: "menus.permission", title: "menus.permission",
icon: "lollipop", icon: "lollipop",
@ -77,6 +79,7 @@ const permissionRouter = {
const frameRouter = { const frameRouter = {
path: "/iframe", path: "/iframe",
name: "FramePure",
redirect: "/iframe/pure", redirect: "/iframe/pure",
meta: { meta: {
icon: "monitor", icon: "monitor",
@ -113,6 +116,7 @@ const frameRouter = {
const tabsRouter = { const tabsRouter = {
path: "/tabs", path: "/tabs",
redirect: "/tabs/index", redirect: "/tabs/index",
name: "Tabs",
meta: { meta: {
icon: "IF-team-icontabs", icon: "IF-team-icontabs",
title: "menus.hstabs", title: "menus.hstabs",

View File

@ -1,5 +1,10 @@
import { http } from "../utils/http"; import { http } from "../utils/http";
export const getAsyncRoutes = (params?: object) => { type Result = {
return http.request("get", "/getAsyncRoutes", { params }); code: number;
info: Array<any>;
};
export const getAsyncRoutes = (params?: object) => {
return http.request<Result>("get", "/getAsyncRoutes", { params });
}; };

View File

@ -4,11 +4,11 @@ import { getConfig } from "/@/config";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { emitter } from "/@/utils/mitt"; import { emitter } from "/@/utils/mitt";
import { routeMetaType } from "../types"; import { routeMetaType } from "../types";
import { remainingPaths } from "/@/router";
import type { StorageConfigs } from "/#/index"; import type { StorageConfigs } from "/#/index";
import { routerArrays } from "/@/layout/types"; import { routerArrays } from "/@/layout/types";
import { transformI18n } from "/@/plugins/i18n"; import { transformI18n } from "/@/plugins/i18n";
import { useAppStoreHook } from "/@/store/modules/app"; import { useAppStoreHook } from "/@/store/modules/app";
import { remainingPaths, resetRouter } from "/@/router";
import { i18nChangeLanguage } from "@wangeditor/editor"; import { i18nChangeLanguage } from "@wangeditor/editor";
import { storageSession, useGlobal } from "@pureadmin/utils"; import { storageSession, useGlobal } from "@pureadmin/utils";
import { useEpThemeStoreHook } from "/@/store/modules/epTheme"; import { useEpThemeStoreHook } from "/@/store/modules/epTheme";
@ -72,6 +72,10 @@ export function useNav() {
useMultiTagsStoreHook().handleTags("equal", [...routerArrays]); useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
storageSession.removeItem("info"); storageSession.removeItem("info");
router.push("/login"); router.push("/login");
resetRouter();
setTimeout(() => {
console.log("----", router.options.routes, router.getRoutes());
}, 3000);
} }
function backHome() { function backHome() {

View File

@ -98,6 +98,19 @@ export const router: Router = createRouter({
} }
}); });
// 重置路由
export function resetRouter() {
router.getRoutes().forEach(route => {
const { name, meta } = route;
if (name && router.hasRoute(name) && meta?.backstage) {
router.removeRoute(name);
router.options.routes = formatTwoStageRoutes(
formatFlatteningRoutes(buildHierarchyTree(ascending(routes)))
);
}
});
}
// 路由白名单 // 路由白名单
const whiteList = ["/login"]; const whiteList = ["/login"];

View File

@ -104,14 +104,14 @@ function findRouteByPath(path: string, routes: RouteRecordRaw[]) {
} }
} }
// 重置路由 function addPathMatch() {
function resetRouter(): void { if (!router.hasRoute("pathMatch")) {
router.getRoutes().forEach(route => { router.addRoute({
const { name } = route; path: "/:pathMatch(.*)",
if (name) { name: "pathMatch",
router.hasRoute(name) && router.removeRoute(name); redirect: "/error/404"
} });
}); }
} }
// 初始化路由 // 初始化路由
@ -146,10 +146,7 @@ function initRouter(name: string) {
); );
usePermissionStoreHook().changeSetting(info); usePermissionStoreHook().changeSetting(info);
} }
router.addRoute({ addPathMatch();
path: "/:pathMatch(.*)",
redirect: "/error/404"
});
}); });
}); });
} }
@ -230,6 +227,8 @@ function addAsyncRoutes(arrRoutes: Array<RouteRecordRaw>) {
if (!arrRoutes || !arrRoutes.length) return; if (!arrRoutes || !arrRoutes.length) return;
const modulesRoutesKeys = Object.keys(modulesRoutes); const modulesRoutesKeys = Object.keys(modulesRoutes);
arrRoutes.forEach((v: RouteRecordRaw) => { arrRoutes.forEach((v: RouteRecordRaw) => {
// 将backstage属性加入meta标识此路由为后端返回路由
v.meta.backstage = true;
if (v.redirect) { if (v.redirect) {
v.component = Layout; v.component = Layout;
} else if (v.meta?.frameSrc) { } else if (v.meta?.frameSrc) {
@ -295,7 +294,6 @@ export {
ascending, ascending,
filterTree, filterTree,
initRouter, initRouter,
resetRouter,
hasPermissions, hasPermissions,
getHistoryMode, getHistoryMode,
addAsyncRoutes, addAsyncRoutes,