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

View File

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

View File

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