feat: tabs的操作功能

This commit is contained in:
wang_fan_w 2024-04-22 00:14:26 +08:00
parent b0791d674c
commit 00c2aab7dd
3 changed files with 68 additions and 10 deletions

View File

@ -19,23 +19,23 @@
<template #icon><icon-refresh /></template>
<template #default>刷新</template>
</a-doption>
<a-doption>
<a-doption @click="closeCurrent">
<template #icon><icon-close /></template>
<template #default>关闭当前</template>
</a-doption>
<a-doption>
<a-doption @click="closeSides('left')">
<template #icon><icon-left /></template>
<template #default>关闭左侧</template>
</a-doption>
<a-doption>
<a-doption @click="closeSides('right')">
<template #icon><icon-right /></template>
<template #default>关闭右侧</template>
</a-doption>
<a-doption>
<a-doption @click="closeOther('other')">
<template #icon><icon-close-circle /></template>
<template #default>关闭其它</template>
</a-doption>
<a-doption>
<a-doption @click="closeOther('all')">
<template #icon><icon-folder-delete /></template>
<template #default>全部关闭</template>
</a-doption>
@ -67,7 +67,7 @@ const onTabs = (key: string) => {
//
const onDelete = (key: string) => {
routerStore.removeTabsList(key);
routerStore.removeRouteNames(key);
routerStore.removeRouteName(key);
if (tabsList.value.length == 0) return;
router.push(tabsList.value.at(-1).path);
};
@ -76,12 +76,63 @@ const onDelete = (key: string) => {
const refresh = () => {
const themeStore = useThemeConfig();
themeStore.setRefreshPage(false);
currentRoute.value.meta.keepAlive && routerStore.removeRouteNames(currentRoute.value.name);
currentRoute.value.meta.keepAlive && routerStore.removeRouteName(currentRoute.value.name);
setTimeout(() => {
themeStore.setRefreshPage(true);
currentRoute.value.meta.keepAlive && routerStore.setRouteNames(currentRoute.value.name);
}, 0);
};
//
const closeCurrent = () => {
onDelete(currentRoute.value.name);
};
// &
const closeSides = (type: string) => {
// index
let currentIndex = tabsList.value.findIndex((item: Menu.MenuOptions) => item.name === currentRoute.value.name);
// affix: false
let rightList = tabsList.value.filter((item: Menu.MenuOptions, index: number) => {
if (type == "right") {
if (index > currentIndex && !item.meta.affix) return item;
} else {
if (index < currentIndex && !item.meta.affix) return item;
}
});
//
let rightNames = rightList.map((item: Menu.MenuOptions) => item.name);
//
tabsList.value = tabsList.value.filter((item: Menu.MenuOptions) => !rightNames.includes(item.name));
//
routerStore.removeRouteNames(rightNames);
};
// &
const closeOther = (type: string) => {
// affix: false
let list = tabsList.value.filter((item: Menu.MenuOptions) => {
if (type == "other") {
if (item.name != currentRoute.value.name && !item.meta.affix) {
return item;
}
} else {
if (!item.meta.affix) {
return item;
}
}
});
//
let rightNames = list.map((item: Menu.MenuOptions) => item.name);
//
tabsList.value = tabsList.value.filter((item: Menu.MenuOptions) => !rightNames.includes(item.name));
//
routerStore.removeRouteNames(rightNames);
//
if (tabsList.value.length != 0 && !currentRoute.value.meta.affix && type == "all") {
router.push(tabsList.value.at(-1).path);
}
};
</script>
<style lang="scss" scoped>

View File

@ -199,7 +199,7 @@ export const dynamicRoutes: RouteRecordRaw[] = [
title: "about-project",
hide: false,
keepAlive: true,
affix: false,
affix: true,
link: "",
iframe: false,
roles: ["admin", "common"],

View File

@ -69,13 +69,20 @@ export const useRoutesListStore = defineStore("routeList", {
this.tabsList.splice(index, 1);
},
/**
*
*
* @param {string} key
*/
removeRouteNames(key: string) {
removeRouteName(key: string) {
const index = this.cacheRoutes.findIndex((item: string) => item === key);
if (index === -1) return;
this.cacheRoutes.splice(index, 1);
},
/**
*
* @param {Array} list
*/
removeRouteNames(list: Array<string>) {
this.cacheRoutes = this.cacheRoutes.filter((item: string) => !list.includes(item));
}
}
});