From b8bffd884ca8fd060d66483e217340a1695e2340 Mon Sep 17 00:00:00 2001 From: Netfan Date: Fri, 10 Jan 2025 20:52:31 +0800 Subject: [PATCH 1/7] 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 81df9682..486bf048 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 10971de5..8f82e4fc 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 f8b35242..b554b219 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 7ab875a7..eb977ce4 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); + } +} From b785bc5704e6299ec2e34b5839b40a2ea4d05401 Mon Sep 17 00:00:00 2001 From: Netfan Date: Sun, 12 Jan 2025 09:54:37 +0800 Subject: [PATCH 7/7] fix: useEcharts return invalid instance (#5360) --- .../effects/plugins/src/echarts/use-echarts.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/effects/plugins/src/echarts/use-echarts.ts b/packages/effects/plugins/src/echarts/use-echarts.ts index ec5786e8..d2e96ebb 100644 --- a/packages/effects/plugins/src/echarts/use-echarts.ts +++ b/packages/effects/plugins/src/echarts/use-echarts.ts @@ -2,6 +2,8 @@ import type { EChartsOption } from 'echarts'; import type { Ref } from 'vue'; +import type { Nullable } from '@vben/types'; + import type EchartsUI from './echarts-ui.vue'; import { computed, nextTick, watch } from 'vue'; @@ -50,7 +52,10 @@ function useEcharts(chartRef: Ref) { return chartInstance; }; - const renderEcharts = (options: EChartsOption, clear = true) => { + const renderEcharts = ( + options: EChartsOption, + clear = true, + ): Promise> => { cacheOptions = options; const currentOptions = { ...options, @@ -58,9 +63,8 @@ function useEcharts(chartRef: Ref) { }; return new Promise((resolve) => { if (chartRef.value?.offsetHeight === 0) { - useTimeoutFn(() => { - renderEcharts(currentOptions); - resolve(null); + useTimeoutFn(async () => { + resolve(await renderEcharts(currentOptions)); }, 30); return; } @@ -72,7 +76,7 @@ function useEcharts(chartRef: Ref) { } clear && chartInstance?.clear(); chartInstance?.setOption(currentOptions); - resolve(null); + resolve(chartInstance); }, 30); }); }); @@ -109,7 +113,7 @@ function useEcharts(chartRef: Ref) { return { renderEcharts, resize, - chartInstance, + getChartInstance: () => chartInstance, }; }