feat: tabs不渲染关联的路由缓存和高亮

This commit is contained in:
wang_fan_w 2024-05-03 18:27:04 +08:00
parent 28bdd3e17e
commit e3773fd8b5
3 changed files with 24 additions and 8 deletions

View File

@ -14,7 +14,7 @@
</div>
<div class="flex-row">
<div>标签栏</div>
<a-switch v-model="isTabs" />
<a-switch v-model="isTabs" @change="tabsChange" />
</div>
<div class="flex-row">
<div>底部栏</div>
@ -50,15 +50,31 @@
<script setup lang="ts">
import { storeToRefs } from "pinia";
import { useRoutesListStore } from "@/store/modules/route-list";
import { useThemeConfig } from "@/store/modules/theme-config";
import { currentlyRoute } from "@/router/route-output";
const themeStore = useThemeConfig();
const routerStore = useRoutesListStore();
const { collapsed, isBreadcrumb, isTabs, isFooter } = storeToRefs(themeStore);
const { tabsList, cacheRoutes } = storeToRefs(routerStore);
const route = useRoute();
const props = defineProps({
systemOpen: {
type: Boolean,
default: false
}
});
// tabs
// tabs
// tabs
const tabsChange = (e: Boolean) => {
if (!e) {
tabsList.value = [];
cacheRoutes.value = [];
} else {
currentlyRoute(route.name as string);
}
};
const emits = defineEmits(["systemCancel"]);
const handleOk = () => {
emits("systemCancel");

View File

@ -50,7 +50,7 @@ router.beforeEach(async (to, from, next) => {
// 3、去登录页有token直接重定向到home页
next("/home");
// 项目内的跳转,处理跳转路由高亮
currentlyRoute(to);
currentlyRoute(to.name as string);
} else {
// 4、去非登录页有token校验是否动态添加过路由添加过则放行未添加则执行路由初始化
const routeStore = useRoutesListStore(pinia);
@ -65,7 +65,7 @@ router.beforeEach(async (to, from, next) => {
// 动态路由添加过走这里,直接放行
next();
// 项目内的跳转,处理跳转路由高亮
currentlyRoute(to);
currentlyRoute(to.name as string);
}
}
});

View File

@ -86,9 +86,9 @@ export const roleBase = (roles: Array<string>) => {
* tabs栏数据
* tabs标签栏数据
* menu和tabs以及手动刷新浏览器等功能只需要跳转即可
* @param {object} to
* @param {object} name
*/
export const currentlyRoute = (to: any) => {
export const currentlyRoute = (name: string) => {
const themeStore = useThemeConfig();
const { isTabs } = storeToRefs(themeStore);
const store = useRoutesListStore(pinia);
@ -99,13 +99,13 @@ export const currentlyRoute = (to: any) => {
}
// 跳转路由是有权限的,缓存跳转路由
const { findLinearArray } = useRoutingMethod();
const find = findLinearArray(to.name);
const find = findLinearArray(name);
if (find === undefined) return;
// 存入当前路由-高亮
store.setCurrentRoute(find);
// 存入tabs栏数据如果系统配置里允许展示标签栏则存入
if (isTabs.value) store.setTabs(find);
// 是否缓存路由
if (!find.meta.keepAlive) return;
// 是否缓存路由 || 是否渲染tabs符合任意条件则不缓存路由
if (!find.meta.keepAlive || !isTabs.value) return;
store.setRouteNames(find.name); // 缓存路由name
};