From b8bffd884ca8fd060d66483e217340a1695e2340 Mon Sep 17 00:00:00 2001 From: Netfan Date: Fri, 10 Jan 2025 20:52:31 +0800 Subject: [PATCH] feat: allow close tab when mouse middle button click (#5347) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 偏好设置增加鼠标中键关闭标签页的设置 --- .../__tests__/__snapshots__/config.test.ts.snap | 1 + packages/@core/preferences/src/config.ts | 1 + packages/@core/preferences/src/types.ts | 2 ++ .../tabs-ui/src/components/tabs-chrome/tabs.vue | 15 +++++++++++++++ .../ui-kit/tabs-ui/src/components/tabs/tabs.vue | 15 +++++++++++++++ packages/@core/ui-kit/tabs-ui/src/types.ts | 7 ++++++- .../effects/layouts/src/basic/tabbar/tabbar.vue | 1 + .../widgets/preferences/blocks/layout/tabbar.vue | 6 ++++++ .../widgets/preferences/preferences-drawer.vue | 4 ++++ packages/locales/src/langs/en-US/preferences.json | 3 +++ packages/locales/src/langs/zh-CN/preferences.json | 1 + 11 files changed, 55 insertions(+), 1 deletion(-) diff --git a/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap b/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap index 81df96821..486bf0487 100644 --- a/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap +++ b/packages/@core/preferences/__tests__/__snapshots__/config.test.ts.snap @@ -80,6 +80,7 @@ exports[`defaultPreferences immutability test > should not modify the config obj "enable": true, "height": 38, "keepAlive": true, + "middleClickToClose": false, "persist": true, "showIcon": true, "showMaximize": true, diff --git a/packages/@core/preferences/src/config.ts b/packages/@core/preferences/src/config.ts index 10971de5c..8f82e4fc4 100644 --- a/packages/@core/preferences/src/config.ts +++ b/packages/@core/preferences/src/config.ts @@ -80,6 +80,7 @@ const defaultPreferences: Preferences = { enable: true, height: 38, keepAlive: true, + middleClickToClose: false, persist: true, showIcon: true, showMaximize: true, diff --git a/packages/@core/preferences/src/types.ts b/packages/@core/preferences/src/types.ts index f8b35242c..b554b219a 100644 --- a/packages/@core/preferences/src/types.ts +++ b/packages/@core/preferences/src/types.ts @@ -168,6 +168,8 @@ interface TabbarPreferences { height: number; /** 开启标签页缓存功能 */ keepAlive: boolean; + /** 是否点击中键时关闭标签 */ + middleClickToClose: boolean; /** 是否持久化标签 */ persist: boolean; /** 是否开启多标签页图标 */ diff --git a/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue b/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue index 7ab875a78..eb977ce49 100644 --- a/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue +++ b/packages/@core/ui-kit/tabs-ui/src/components/tabs-chrome/tabs.vue @@ -56,6 +56,20 @@ const tabsView = computed(() => { } as TabConfig; }); }); + +function onMouseDown(e: MouseEvent, tab: TabConfig) { + if ( + e.button === 1 && + tab.closable && + !tab.affixTab && + tabsView.value.length > 1 && + props.middleClickToClose + ) { + e.preventDefault(); + e.stopPropagation(); + emit('close', tab.key); + } +}