2
0

fix: 路由加载合并排序(还存在切换账号菜单缓存问题)

This commit is contained in:
TsMask
2024-12-02 20:03:31 +08:00
parent f6bfceab29
commit 18dacb0c75
5 changed files with 37 additions and 92 deletions

View File

@@ -1,16 +1,16 @@
import { computed, ref, shallowRef } from 'vue';
import type { RouteRecordRaw } from 'vue-router';
import { defineStore } from 'pinia';
import { useBoolean } from '@sa/hooks';
import type { CustomRoute, ElegantConstRoute, LastLevelRouteKey, RouteKey } from '@elegant-router/types';
import { SetupStoreId } from '@/enum';
import { router } from '@/router';
import { createStaticRoutes, getAuthVueRoutes } from '@/router/routes';
import { ROOT_ROUTE } from '@/router/routes/builtin';
import { getRoutePath } from '@/router/elegant/transform';
import { useAppStore } from '../app';
import { useAuthStore } from '../auth';
import { useTabStore } from '../tab';
import {computed, ref, shallowRef} from 'vue';
import type {RouteRecordRaw} from 'vue-router';
import {defineStore} from 'pinia';
import {useBoolean} from '@sa/hooks';
import type {CustomRoute, ElegantConstRoute, LastLevelRouteKey, RouteKey} from '@elegant-router/types';
import {SetupStoreId} from '@/enum';
import {router} from '@/router';
import {createStaticRoutes, getAuthVueRoutes} from '@/router/routes';
import {ROOT_ROUTE} from '@/router/routes/builtin';
import {getRoutePath} from '@/router/elegant/transform';
import {useAppStore} from '../app';
import {useAuthStore} from '../auth';
import {useTabStore} from '../tab';
import {
filterAuthRoutesByRoles,
getBreadcrumbsByRoute,
@@ -26,8 +26,8 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
const appStore = useAppStore();
const authStore = useAuthStore();
const tabStore = useTabStore();
const { bool: isInitConstantRoute, setBool: setIsInitConstantRoute } = useBoolean();
const { bool: isInitAuthRoute, setBool: setIsInitAuthRoute } = useBoolean();
const {bool: isInitConstantRoute, setBool: setIsInitConstantRoute} = useBoolean();
const {bool: isInitAuthRoute, setBool: setIsInitAuthRoute} = useBoolean();
/** Home route key */
@@ -146,17 +146,9 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
async function initConstantRoute() {
if (isInitConstantRoute.value) return;
// if (authRouteMode.value === 'static') {
const { constantRoutes } = createStaticRoutes();
const {constantRoutes} = createStaticRoutes();
addAuthRoutes(constantRoutes);
// } else {
// const { data, error } = await fetchGetConstantRoutes();
// if (!error) {
// addAuthRoutes(data);
// }
// }
handleAuthRoutes();
@@ -165,17 +157,12 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
/** Init auth route */
async function initAuthRoute() {
// await initStaticAuthRoute();
// await initDynamicAuthRoute();
const { data: routes, error } = await doGetUserRoutes();
const {data: routes, error} = await doGetUserRoutes();
if (!error) {
const { authRoutes: staticAuthRoutes } = createStaticRoutes();
const {authRoutes: staticAuthRoutes} = createStaticRoutes();
const filteredAuthRoutes = filterAuthRoutesByRoles(staticAuthRoutes, authStore.userInfo.roles ?? []);
console.log(authStore.userInfo.roles,filteredAuthRoutes)
console.log(authStore.userInfo.roles,[ ...filteredAuthRoutes,...routes])
addAuthRoutes([ ...filteredAuthRoutes,...routes]);
addAuthRoutes(filteredAuthRoutes.concat(routes));
handleAuthRoutes();
@@ -190,36 +177,6 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
tabStore.initHomeTab();
}
/** Init static auth route */
async function initStaticAuthRoute() {
const { authRoutes: staticAuthRoutes } = createStaticRoutes();
const filteredAuthRoutes = filterAuthRoutesByRoles(staticAuthRoutes, authStore.userInfo.roles ?? []);
addAuthRoutes(filteredAuthRoutes);
handleAuthRoutes();
setIsInitAuthRoute(true);
}
/** Init dynamic auth route */
async function initDynamicAuthRoute() {
const { data: routes, error } = await doGetUserRoutes();
if (!error) {
addAuthRoutes(routes);
handleAuthRoutes();
setRouteHome('home');
handleUpdateRootRouteRedirect('home');
setIsInitAuthRoute(true);
} else {
await authStore.resetStore();
}
}
/** handle auth routes */
function handleAuthRoutes() {
const sortRoutes = sortRoutesByOrder(authRoutes.value);
@@ -265,7 +222,7 @@ export const useRouteStore = defineStore(SetupStoreId.Route, () => {
const redirect = getRoutePath(redirectKey);
if (redirect) {
const rootRoute: CustomRoute = { ...ROOT_ROUTE, redirect };
const rootRoute: CustomRoute = {...ROOT_ROUTE, redirect};
router.removeRoute(rootRoute.name);

View File

@@ -57,7 +57,7 @@ function sortRouteByOrder(route: ElegantConstRoute) {
* @param routes routes
*/
export function sortRoutesByOrder(routes: ElegantConstRoute[]) {
routes.sort((next, prev) => (Number(next.meta?.order) || 0) - (Number(prev.meta?.order) || 0));
routes.sort((next, prev) => (Number(next.meta?.order) || 1) - (Number(prev.meta?.order) || 1));
routes.forEach(sortRouteByOrder);
return routes;