From f9eb1a419834f97a3ab0124b132de4f977b1973b Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期六, 28 十二月 2024 21:00:56 +0800
Subject: [PATCH] 通用导入Excel更新

---
 src/hooks/web/usePage.ts |   62 ++++++++++++++++++++++++++++--
 1 files changed, 57 insertions(+), 5 deletions(-)

diff --git a/src/hooks/web/usePage.ts b/src/hooks/web/usePage.ts
index a4a5c73..0d60d45 100644
--- a/src/hooks/web/usePage.ts
+++ b/src/hooks/web/usePage.ts
@@ -1,10 +1,14 @@
 import type { RouteLocationRaw, Router } from 'vue-router';
 
-import { PageEnum } from '/@/enums/pageEnum';
+import { PageEnum } from '@/enums/pageEnum';
 import { unref } from 'vue';
 
 import { useRouter } from 'vue-router';
-import { REDIRECT_NAME } from '/@/router/constant';
+import { REDIRECT_NAME } from '@/router/constant';
+import { isHttpUrl } from '@/utils/is';
+import { openWindow } from '@/utils';
+
+import { useMultipleTabStore } from '@/store/modules/multipleTab';
 
 export type PathAsPageEnum<T> = T extends { path: string } ? T & { path: PageEnum } : T;
 export type RouteLocationRawEx = PathAsPageEnum<RouteLocationRaw>;
@@ -13,16 +17,64 @@
   console.error(e);
 }
 
+export enum GoType {
+  'replace',
+  'after',
+}
+
 /**
  * page switch
  */
 export function useGo(_router?: Router) {
-  const { push, replace } = _router || useRouter();
-  function go(opt: RouteLocationRawEx = PageEnum.BASE_HOME, isReplace = false) {
+  const { push, replace, currentRoute } = _router || useRouter();
+
+  function go(opt?: RouteLocationRawEx): void;
+  function go(opt: RouteLocationRawEx, isReplace: boolean): void;
+  function go(opt: RouteLocationRawEx, goType: GoType): void;
+  function go(
+    opt: RouteLocationRawEx = PageEnum.BASE_HOME,
+    goTypeOrIsReplace: boolean | GoType = false,
+  ) {
     if (!opt) {
       return;
     }
-    isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError);
+    let path = unref(opt) as string;
+    if (path[0] === '/') {
+      path = path.slice(1);
+    }
+    if (isHttpUrl(path)) {
+      return openWindow(path);
+    }
+
+    const isReplace = goTypeOrIsReplace === true || goTypeOrIsReplace === GoType.replace;
+    const isAfter = goTypeOrIsReplace === GoType.after;
+
+    if (isReplace) {
+      replace(opt).catch(handleError);
+    } else if (isAfter) {
+      const tabStore = useMultipleTabStore();
+      const currentName = unref(currentRoute).name;
+      // 褰撳墠 tab
+      const currentIndex = tabStore.getTabList.findIndex((item) => item.name === currentName);
+      // 褰撳墠 tab 鏁伴噺
+      const currentCount = tabStore.getTabList.length;
+      push(opt)
+        .then(() => {
+          if (tabStore.getTabList.length > currentCount) {
+            // 浜х敓鏂� tab
+            // 鏂� tab锛堜篃鏄渶鍚庝竴涓級
+            const targetIndex = tabStore.getTabList.length - 1;
+            // 鏂� tab 鍦� 褰撳墠 tab 鐨勫悗闈�
+            if (currentIndex > -1 && targetIndex > currentIndex) {
+              // 绉诲姩 tab
+              tabStore.sortTabs(targetIndex, currentIndex + 1);
+            }
+          }
+        })
+        .catch(handleError);
+    } else {
+      push(opt).catch(handleError);
+    }
   }
   return go;
 }

--
Gitblit v1.9.3