diff --git a/easyflow-ui-admin/app/src/router/guard.ts b/easyflow-ui-admin/app/src/router/guard.ts index 971c92e..cdb309a 100644 --- a/easyflow-ui-admin/app/src/router/guard.ts +++ b/easyflow-ui-admin/app/src/router/guard.ts @@ -10,6 +10,39 @@ import { useAuthStore } from '#/store'; import { generateAccess } from './access'; +interface NetworkConnectionLike { + effectiveType?: string; + saveData?: boolean; +} + +function isSlowNetworkConnection() { + if (typeof navigator === 'undefined') { + return false; + } + const nav = navigator as Navigator & { + connection?: NetworkConnectionLike; + mozConnection?: NetworkConnectionLike; + webkitConnection?: NetworkConnectionLike; + }; + const connection = + nav.connection ?? nav.mozConnection ?? nav.webkitConnection; + if (!connection) { + return false; + } + if (connection.saveData) { + return true; + } + return ['2g', '3g', 'slow-2g'].includes(connection.effectiveType ?? ''); +} + +function shouldUseRouteProgress() { + if (preferences.transition.progress) { + return true; + } + // 普通网络下,loading遮罩不显示时自动回退到顶部进度条 + return preferences.transition.loading && !isSlowNetworkConnection(); +} + /** * 通用守卫配置 * @param router @@ -22,7 +55,7 @@ function setupCommonGuard(router: Router) { to.meta.loaded = loadedPaths.has(to.path); // 页面加载进度条 - if (!to.meta.loaded && preferences.transition.progress) { + if (!to.meta.loaded && shouldUseRouteProgress()) { startProgress(); } return true; @@ -34,7 +67,7 @@ function setupCommonGuard(router: Router) { loadedPaths.add(to.path); // 关闭页面加载进度条 - if (preferences.transition.progress) { + if (shouldUseRouteProgress()) { stopProgress(); } }); diff --git a/easyflow-ui-admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue b/easyflow-ui-admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue index dbce69e..483f186 100644 --- a/easyflow-ui-admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue +++ b/easyflow-ui-admin/packages/@core/ui-kit/shadcn-ui/src/components/spinner/spinner.vue @@ -63,7 +63,7 @@ function onTransitionEnd() {