|
|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
|
- <div :class="getWrapClass">
|
|
|
+ <div :class="getWrapClass" ref="tabsRootRef">
|
|
|
<Tabs
|
|
|
type="editable-card"
|
|
|
size="small"
|
|
|
@@ -28,7 +28,7 @@
|
|
|
<script lang="ts">
|
|
|
import { RouteLocationNormalized, RouteMeta, useRoute } from 'vue-router';
|
|
|
|
|
|
- import { defineComponent, computed, unref, ref } from 'vue';
|
|
|
+ import { defineComponent, computed, unref, ref, onMounted, onBeforeUnmount } from 'vue';
|
|
|
|
|
|
import { Tabs } from 'ant-design-vue';
|
|
|
import TabContent from './components/TabContent.vue';
|
|
|
@@ -62,6 +62,7 @@
|
|
|
const route = useRoute();
|
|
|
const affixTextList = initAffixTabs();
|
|
|
const activeKeyRef = ref('');
|
|
|
+ const tabsRootRef = ref<HTMLElement | null>(null);
|
|
|
|
|
|
useTabsDrag(affixTextList);
|
|
|
const tabStore = useMultipleTabStore();
|
|
|
@@ -88,6 +89,25 @@
|
|
|
];
|
|
|
});
|
|
|
|
|
|
+ // 页签栏内容超出宽度时用滚轮横向滚动;rc-tabs 自带的 wheel 监听在页签重渲染后会丢失,这里自行接管
|
|
|
+ function handleTabsWheel(e: WheelEvent) {
|
|
|
+ const wrap = tabsRootRef.value?.querySelector<HTMLElement>('.ant-tabs-nav-wrap');
|
|
|
+ if (!wrap || !(e.target instanceof Node) || !wrap.contains(e.target)) return;
|
|
|
+ if (wrap.scrollWidth <= wrap.clientWidth) return;
|
|
|
+ const delta = Math.abs(e.deltaY) >= Math.abs(e.deltaX) ? e.deltaY : e.deltaX;
|
|
|
+ if (!delta) return;
|
|
|
+ e.preventDefault();
|
|
|
+ wrap.scrollLeft += delta * (e.deltaMode === 1 ? 16 : 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ tabsRootRef.value?.addEventListener('wheel', handleTabsWheel, { passive: false });
|
|
|
+ });
|
|
|
+
|
|
|
+ onBeforeUnmount(() => {
|
|
|
+ tabsRootRef.value?.removeEventListener('wheel', handleTabsWheel);
|
|
|
+ });
|
|
|
+
|
|
|
listenerRouteChange((route) => {
|
|
|
const { name } = route;
|
|
|
// if (name === REDIRECT_NAME || !route || !userStore.getToken) {
|
|
|
@@ -140,6 +160,7 @@
|
|
|
prefixCls,
|
|
|
unClose,
|
|
|
getWrapClass,
|
|
|
+ tabsRootRef,
|
|
|
handleEdit,
|
|
|
handleChange,
|
|
|
activeKeyRef,
|