feat(tabbar): 添加右键菜单过滤功能 (#5820)

pull/62/head
Jin Mao 2025-03-30 16:23:24 +08:00 committed by YunaiV
parent 5bace9de1f
commit 3f4e878e69
3 changed files with 43 additions and 4 deletions

View File

@ -209,7 +209,8 @@ export function useTabbar() {
text: $t('preferences.tabbar.contextMenu.closeAll'),
},
];
return menus;
return menus.filter((item) => tabbarStore.getMenuList.includes(item.key));
};
return {

View File

@ -26,6 +26,10 @@ interface TabbarState {
* @zh_CN
*/
excludeCachedTabs: Set<string>;
/**
* @zh_CN
*/
menuList: string[];
/**
* @zh_CN
*/
@ -372,6 +376,14 @@ export const useTabbarStore = defineStore('core-tabbar', {
}
},
/**
* @zh_CN
* @param list
*/
setMenuList(list: string[]) {
this.menuList = list;
},
/**
* @zh_CN
* @param tab
@ -388,7 +400,6 @@ export const useTabbarStore = defineStore('core-tabbar', {
await this.updateCacheTabs();
}
},
setUpdateTime() {
this.updateTime = Date.now();
},
@ -406,6 +417,7 @@ export const useTabbarStore = defineStore('core-tabbar', {
this.tabs.splice(newIndex, 0, currentTab);
this.dragEndIndex = this.dragEndIndex + 1;
},
/**
* @zh_CN
* @param tab
@ -439,7 +451,6 @@ export const useTabbarStore = defineStore('core-tabbar', {
// 交换位置重新排序
await this.sortTabs(index, newIndex);
},
/**
*
*/
@ -480,6 +491,9 @@ export const useTabbarStore = defineStore('core-tabbar', {
getExcludeCachedTabs(): string[] {
return [...this.excludeCachedTabs];
},
getMenuList(): string[] {
return this.menuList;
},
getTabs(): TabDefinition[] {
const normalTabs = this.tabs.filter((tab) => !isAffixTab(tab));
return [...this.affixTabs, ...normalTabs].filter(Boolean);
@ -496,6 +510,17 @@ export const useTabbarStore = defineStore('core-tabbar', {
cachedTabs: new Set(),
dragEndIndex: 0,
excludeCachedTabs: new Set(),
menuList: [
'close',
'affix',
'maximize',
'reload',
'open-in-new-window',
'close-left',
'close-right',
'close-other',
'close-all',
],
renderRouteView: true,
tabs: [],
updateTime: Date.now(),

View File

@ -14,13 +14,26 @@ import {
UserDropdown,
} from '@vben/layouts';
import { preferences } from '@vben/preferences';
import { useAccessStore, useUserStore } from '@vben/stores';
import { useAccessStore, useTabbarStore, useUserStore } from '@vben/stores';
import { openWindow } from '@vben/utils';
import { $t } from '#/locales';
import { useAuthStore } from '#/store';
import LoginForm from '#/views/_core/authentication/login.vue';
const { setMenuList } = useTabbarStore();
setMenuList([
'close',
'affix',
'maximize',
'reload',
'open-in-new-window',
'close-left',
'close-right',
'close-other',
'close-all',
]);
const notifications = ref<NotificationItem[]>([
{
avatar: 'https://avatar.vercel.sh/vercel.svg?text=VB',