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