From dd58c6203dbaa00c2458ee035c3649f41d494a4d Mon Sep 17 00:00:00 2001 From: liuyun Date: Fri, 16 Oct 2026 11:11:42 +0800 Subject: [PATCH] =?UTF-8?q?feat(layout):=20=E5=A4=9A=E9=A1=B5=E7=AD=BE?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20Element=20Plus=20tabs=EF=BC=88=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E7=AE=AD=E5=A4=B4=E6=9B=B4=E4=BC=98=E9=9B=85=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ty-tabs 重构为 el-tabs type=card,自带左右滚动 - 保留右键关闭其他/左侧/右侧/全部与首页不可关闭 Co-Authored-By: Claude Opus 4.8 --- components.d.ts | 4 ++ src/components/ty-tabs.vue | 133 ++++++++++++++++++++++--------------- 2 files changed, 84 insertions(+), 53 deletions(-) diff --git a/components.d.ts b/components.d.ts index b792c67..4c5aa71 100644 --- a/components.d.ts +++ b/components.d.ts @@ -48,6 +48,8 @@ declare module 'vue' { ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElTable: typeof import('element-plus/es')['ElTable'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + ElTabPane: typeof import('element-plus/es')['ElTabPane'] + ElTabs: typeof import('element-plus/es')['ElTabs'] ElTag: typeof import('element-plus/es')['ElTag'] ElTree: typeof import('element-plus/es')['ElTree'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] @@ -114,6 +116,8 @@ declare global { const ElSwitch: typeof import('element-plus/es')['ElSwitch'] const ElTable: typeof import('element-plus/es')['ElTable'] const ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + const ElTabPane: typeof import('element-plus/es')['ElTabPane'] + const ElTabs: typeof import('element-plus/es')['ElTabs'] const ElTag: typeof import('element-plus/es')['ElTag'] const ElTree: typeof import('element-plus/es')['ElTree'] const ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] diff --git a/src/components/ty-tabs.vue b/src/components/ty-tabs.vue index 6ff4f89..253e9e2 100644 --- a/src/components/ty-tabs.vue +++ b/src/components/ty-tabs.vue @@ -1,30 +1,33 @@ @@ -52,6 +55,10 @@ const emit = defineEmits<{ const menu = reactive({ visible: false, x: 0, y: 0, path: '' }) +function onTabChange(name: string | number): void { + emit('click', String(name)) +} + function openMenu(e: MouseEvent, tab: TabItem): void { menu.x = e.clientX menu.y = e.clientY @@ -87,43 +94,63 @@ onBeforeUnmount(() => document.removeEventListener('click', closeMenu))