From ebbd788fbb2c0b45d4473798efc57eec8ba74a25 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期二, 18 六月 2024 14:51:16 +0800
Subject: [PATCH] 版本更新至2.11.5

---
 src/layouts/default/tabs/index.vue |  179 ++++++++++++++++++++++++++++-------------------------------
 1 files changed, 86 insertions(+), 93 deletions(-)

diff --git a/src/layouts/default/tabs/index.vue b/src/layouts/default/tabs/index.vue
index 3b487bb..189a1b0 100644
--- a/src/layouts/default/tabs/index.vue
+++ b/src/layouts/default/tabs/index.vue
@@ -8,17 +8,18 @@
       :tabBarGutter="3"
       :activeKey="activeKeyRef"
       @change="handleChange"
-      @edit="handleEdit"
+      @edit="(e) => handleEdit(`${e}`)"
     >
       <template v-for="item in getTabsState" :key="item.query ? item.fullPath : item.path">
-        <TabPane :closable="!(item && item.meta && item.meta.affix)">
+        <Tabs.TabPane :closable="!(item && item.meta && item.meta.affix)">
           <template #tab>
             <TabContent :tabItem="item" />
           </template>
-        </TabPane>
+        </Tabs.TabPane>
       </template>
 
       <template #rightExtra v-if="getShowRedo || getShowQuick">
+        <SettingButton v-if="(getShowFold && getIsUnFold) || !getShowHeader" />
         <TabRedo v-if="getShowRedo" />
         <TabContent isExtra :tabItem="$route" v-if="getShowQuick" />
         <FoldButton v-if="getShowFold" />
@@ -26,118 +27,110 @@
     </Tabs>
   </div>
 </template>
-<script lang="ts">
+<script lang="ts" setup>
   import type { RouteLocationNormalized, RouteMeta } from 'vue-router';
 
-  import { defineComponent, computed, unref, ref } from 'vue';
+  import { computed, unref, ref } from 'vue';
 
   import { Tabs } from 'ant-design-vue';
   import TabContent from './components/TabContent.vue';
   import FoldButton from './components/FoldButton.vue';
   import TabRedo from './components/TabRedo.vue';
 
-  import { useGo } from '/@/hooks/web/usePage';
+  import { useGo } from '@/hooks/web/usePage';
 
-  import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-  import { useUserStore } from '/@/store/modules/user';
+  import { useMultipleTabStore } from '@/store/modules/multipleTab';
+  import { useUserStore } from '@/store/modules/user';
 
   import { initAffixTabs, useTabsDrag } from './useMultipleTabs';
-  import { useDesign } from '/@/hooks/web/useDesign';
-  import { useMultipleTabSetting } from '/@/hooks/setting/useMultipleTabSetting';
+  import { useDesign } from '@/hooks/web/useDesign';
+  import { useMultipleTabSetting } from '@/hooks/setting/useMultipleTabSetting';
 
-  import { REDIRECT_NAME } from '/@/router/constant';
-  import { listenerRouteChange } from '/@/logics/mitt/routeChange';
+  import { REDIRECT_NAME } from '@/router/constant';
+  import { listenerRouteChange } from '@/logics/mitt/routeChange';
 
   import { useRouter } from 'vue-router';
 
-  export default defineComponent({
-    name: 'MultipleTabs',
-    components: {
-      TabRedo,
-      FoldButton,
-      Tabs,
-      TabPane: Tabs.TabPane,
-      TabContent,
-    },
-    setup() {
-      const affixTextList = initAffixTabs();
-      const activeKeyRef = ref('');
+  import { useMouse } from '@vueuse/core';
+  import { multipleTabHeight } from '@/settings/designSetting';
 
-      useTabsDrag(affixTextList);
-      const tabStore = useMultipleTabStore();
-      const userStore = useUserStore();
-      const router = useRouter();
+  import SettingButton from './components/SettingButton.vue';
+  import { useHeaderSetting } from '@/hooks/setting/useHeaderSetting';
+  import { useMenuSetting } from '@/hooks/setting/useMenuSetting';
 
-      const { prefixCls } = useDesign('multiple-tabs');
-      const go = useGo();
-      const { getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
+  defineOptions({ name: 'MultipleTabs' });
 
-      const getTabsState = computed(() => {
-        return tabStore.getTabList.filter((item) => !item.meta?.hideTab);
-      });
+  const affixTextList = initAffixTabs();
+  const activeKeyRef = ref('');
 
-      const unClose = computed(() => unref(getTabsState).length === 1);
+  useTabsDrag(affixTextList);
+  const tabStore = useMultipleTabStore();
+  const userStore = useUserStore();
+  const router = useRouter();
 
-      const getWrapClass = computed(() => {
-        return [
-          prefixCls,
-          {
-            [`${prefixCls}--hide-close`]: unref(unClose),
-          },
-        ];
-      });
+  const { prefixCls } = useDesign('multiple-tabs');
+  const go = useGo();
+  const { getShowQuick, getShowRedo, getShowFold } = useMultipleTabSetting();
 
-      listenerRouteChange((route) => {
-        const { name } = route;
-        if (name === REDIRECT_NAME || !route || !userStore.getToken) {
-          return;
-        }
-
-        const { path, fullPath, meta = {} } = route;
-        const { currentActiveMenu, hideTab } = meta as RouteMeta;
-        const isHide = !hideTab ? null : currentActiveMenu;
-        const p = isHide || fullPath || path;
-        if (activeKeyRef.value !== p) {
-          activeKeyRef.value = p as string;
-        }
-
-        if (isHide) {
-          const findParentRoute = router
-            .getRoutes()
-            .find((item) => item.path === currentActiveMenu);
-
-          findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized);
-        } else {
-          tabStore.addTab(unref(route));
-        }
-      });
-
-      function handleChange(activeKey: any) {
-        activeKeyRef.value = activeKey;
-        go(activeKey, false);
-      }
-
-      // Close the current tab
-      function handleEdit(targetKey: string) {
-        // Added operation to hide, currently only use delete operation
-        if (unref(unClose)) {
-          return;
-        }
-
-        tabStore.closeTabByKey(targetKey, router);
-      }
-      return {
-        getWrapClass,
-        handleEdit,
-        handleChange,
-        activeKeyRef,
-        getTabsState,
-        getShowQuick,
-        getShowRedo,
-        getShowFold,
-      };
-    },
+  const getTabsState = computed(() => {
+    return tabStore.getTabList.filter((item) => !item.meta?.hideTab);
   });
+
+  const unClose = computed(() => unref(getTabsState).length === 1);
+
+  const { y: mouseY } = useMouse();
+
+  const { getShowMenu } = useMenuSetting();
+  const { getShowHeader } = useHeaderSetting();
+  const getIsUnFold = computed(() => !unref(getShowMenu) && !unref(getShowHeader));
+
+  const getWrapClass = computed(() => {
+    return [
+      prefixCls,
+      {
+        [`${prefixCls}--hide-close`]: unref(unClose),
+        [`${prefixCls}--hover`]: unref(mouseY) < multipleTabHeight,
+      },
+    ];
+  });
+
+  listenerRouteChange((route) => {
+    const { name } = route;
+    if (name === REDIRECT_NAME || !route || !userStore.getToken) {
+      return;
+    }
+
+    const { path, fullPath, meta = {} } = route;
+    const { currentActiveMenu, hideTab } = meta as RouteMeta;
+    const isHide = !hideTab ? null : currentActiveMenu;
+    const p = isHide || fullPath || path;
+    if (activeKeyRef.value !== p) {
+      activeKeyRef.value = p as string;
+    }
+
+    if (isHide) {
+      const findParentRoute = router.getRoutes().find((item) => item.path === currentActiveMenu);
+
+      findParentRoute && tabStore.addTab(findParentRoute as unknown as RouteLocationNormalized);
+    } else {
+      tabStore.addTab(unref(route));
+    }
+  });
+
+  function handleChange(activeKey: any) {
+    activeKeyRef.value = activeKey;
+    go(activeKey, false);
+  }
+
+  // Close the current tab
+  function handleEdit(targetKey: string) {
+    // Added operation to hide, currently only use delete operation
+    if (unref(unClose)) {
+      return;
+    }
+
+    tabStore.closeTabByKey(targetKey, router);
+  }
 </script>
 <style lang="less">
   @import url('./index.less');

--
Gitblit v1.9.3