feat(offline): 服务不可用页记录原页面, 网络恢复后重试回到原页而非首页

This commit is contained in:
DaxPay Dev
2026-07-05 12:31:07 +08:00
parent 863c9e0f2d
commit 0b53ec55a9
2 changed files with 19 additions and 4 deletions

View File

@@ -115,7 +115,14 @@ function setupAccessGuard(router: Router) {
return { path: LOGIN_PATH, replace: true };
}
// 网络错误 / 后端服务不可用: token 仍在, 跳服务不可用提示页, 保留登录态供用户手动刷新重试
return { path: '/service-unavailable', replace: true };
// 中文注释:记录用户原本想访问的页面,网络恢复后重试可回到该页而非首页;
// 排除自身路径,避免 redirect 指向 /service-unavailable 形成循环
const redirectPath = to.path === '/service-unavailable' ? HOME_PATH : to.fullPath;
return {
path: '/service-unavailable',
query: { redirect: encodeURIComponent(redirectPath) },
replace: true,
};
}
});
}

View File

@@ -1,18 +1,26 @@
<script lang="ts" setup>
import { useRoute, useRouter } from 'vue-router';
import { Fallback } from '@vben/common-ui';
import { useRouter } from 'vue-router';
import { $t } from '#/locales';
import { HOME_PATH } from '#/router/routes';
defineOptions({ name: 'FallbackOfflineDemo' });
const route = useRoute();
const router = useRouter();
// 重试连接: 跳回首页重新走认证流程
// 读取重试后应跳转的路径优先使用进入本页时记录的原页面query.redirect否则回首页
function getRedirectPath(): string {
const redirect = route.query.redirect;
return redirect ? decodeURIComponent(redirect as string) : HOME_PATH;
}
// 重试连接: 回到原页面重新走认证流程
// (后端已恢复则正常进入系统, 仍不可用则由守卫重新跳回本页, 不会死循环)
function retry() {
router.replace(HOME_PATH);
router.replace(getRedirectPath());
}
</script>