From df6341f0b8d7fa39b51432e2d987cd5c05a803f1 Mon Sep 17 00:00:00 2001 From: Jin Mao <50581550+jinmao88@users.noreply.github.com> Date: Sun, 30 Mar 2025 16:23:24 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(tabbar):=20=E6=B7=BB=E5=8A=A0=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E8=BF=87=E6=BB=A4=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20(#5820)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layouts/src/basic/tabbar/use-tabbar.ts | 3 +- packages/stores/src/modules/tabbar.ts | 29 +++++++++++++++++-- playground/src/layouts/basic.vue | 15 +++++++++- 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts b/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts index 501ae9b2..b0146ef6 100644 --- a/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts +++ b/packages/effects/layouts/src/basic/tabbar/use-tabbar.ts @@ -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 { diff --git a/packages/stores/src/modules/tabbar.ts b/packages/stores/src/modules/tabbar.ts index 05554377..ec64bdc4 100644 --- a/packages/stores/src/modules/tabbar.ts +++ b/packages/stores/src/modules/tabbar.ts @@ -26,6 +26,10 @@ interface TabbarState { * @zh_CN 需要排除缓存的标签页 */ excludeCachedTabs: Set; + /** + * @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(), diff --git a/playground/src/layouts/basic.vue b/playground/src/layouts/basic.vue index 2da8ab70..a44f46e2 100644 --- a/playground/src/layouts/basic.vue +++ b/playground/src/layouts/basic.vue @@ -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([ { avatar: 'https://avatar.vercel.sh/vercel.svg?text=VB', From a0feeb1966b9576c7cd495d4ca5bef38f9139533 Mon Sep 17 00:00:00 2001 From: Netfan Date: Mon, 31 Mar 2025 09:06:02 +0800 Subject: [PATCH 2/6] fix: watermark settings in the preferences modified accidentally (#5823) --- apps/web-antd/src/layouts/basic.vue | 2 +- apps/web-ele/src/layouts/basic.vue | 2 +- apps/web-naive/src/layouts/basic.vue | 2 +- packages/effects/hooks/src/use-watermark.ts | 4 ---- playground/src/layouts/basic.vue | 10 ++++++++-- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/web-antd/src/layouts/basic.vue b/apps/web-antd/src/layouts/basic.vue index 51412956..1481dc5a 100644 --- a/apps/web-antd/src/layouts/basic.vue +++ b/apps/web-antd/src/layouts/basic.vue @@ -110,7 +110,7 @@ watch( async (enable) => { if (enable) { await updateWatermark({ - content: `${userStore.userInfo?.username}`, + content: `${userStore.userInfo?.username} - ${userStore.userInfo?.realName}`, }); } else { destroyWatermark(); diff --git a/apps/web-ele/src/layouts/basic.vue b/apps/web-ele/src/layouts/basic.vue index 51412956..1481dc5a 100644 --- a/apps/web-ele/src/layouts/basic.vue +++ b/apps/web-ele/src/layouts/basic.vue @@ -110,7 +110,7 @@ watch( async (enable) => { if (enable) { await updateWatermark({ - content: `${userStore.userInfo?.username}`, + content: `${userStore.userInfo?.username} - ${userStore.userInfo?.realName}`, }); } else { destroyWatermark(); diff --git a/apps/web-naive/src/layouts/basic.vue b/apps/web-naive/src/layouts/basic.vue index f75b3ddc..69189384 100644 --- a/apps/web-naive/src/layouts/basic.vue +++ b/apps/web-naive/src/layouts/basic.vue @@ -111,7 +111,7 @@ watch( async (enable) => { if (enable) { await updateWatermark({ - content: `${userStore.userInfo?.username}`, + content: `${userStore.userInfo?.username} - ${userStore.userInfo?.realName}`, }); } else { destroyWatermark(); diff --git a/packages/effects/hooks/src/use-watermark.ts b/packages/effects/hooks/src/use-watermark.ts index c3f56eaf..8484a082 100644 --- a/packages/effects/hooks/src/use-watermark.ts +++ b/packages/effects/hooks/src/use-watermark.ts @@ -2,8 +2,6 @@ import type { Watermark, WatermarkOptions } from 'watermark-js-plus'; import { nextTick, onUnmounted, readonly, ref } from 'vue'; -import { updatePreferences } from '@vben/preferences'; - const watermark = ref(); const unmountedHooked = ref(false); const cachedOptions = ref>({ @@ -48,7 +46,6 @@ export function useWatermark() { ...options, }; watermark.value = new Watermark(cachedOptions.value); - updatePreferences({ app: { watermark: true } }); await watermark.value?.create(); } @@ -69,7 +66,6 @@ export function useWatermark() { watermark.value.destroy(); watermark.value = undefined; } - updatePreferences({ app: { watermark: false } }); } // 只在第一次调用时注册卸载钩子,防止重复注册以致于在路由切换时销毁了水印 diff --git a/playground/src/layouts/basic.vue b/playground/src/layouts/basic.vue index a44f46e2..227ce955 100644 --- a/playground/src/layouts/basic.vue +++ b/playground/src/layouts/basic.vue @@ -1,7 +1,7 @@