从旧 WebVue 移植的地基部分: - 登录页(RSA+MD5 密码加密、redirect 回跳、中英文切换)与登录后落地页 - 401 / 403 / 404 错误页 + error-panel 通用外壳(文案走 ErrorPage 语言包) - 登录守卫双链路:uni.addInterceptor 拦站内跳转,页面级 onShow 复核冷启动深链 - 单一请求链路 common/http.interceptor:JWT 唯一来源、401 并发刷新单例、 业务异常识别、HTTP 403 跳无权限页 - H5 干净短地址:initRouter 前向 __uniRoutes 追加克隆记录(router/h5-clean-url) - 路由登记表 router/routes.ts(PAGE_PATHS / pageUrl / PAGE_PERMISSIONS) 与新增页面四步登记约定(src/md/page-routing.md) - i18n:uView Pro 语言包 + 后端词条合并,双取值(后端 zh-cn/en,包名 zh-CN/en-US) - 后端接口层 service/ 与数据模型 data/auto/ 为生成器产物,不手改 不入库的内容: - 摘除脚手架残留的 Harmony 签名密码(manifest.json signingConfigs 与 harmony-configs/build-profile.json5 的 keyPassword / storePassword 已置空) - 忽略 node_modules、dist、unpackage、.hbuilderx、.agents、pnpm-lock.yaml 及根目录临时截图
24 lines
885 B
TypeScript
24 lines
885 B
TypeScript
import { onShow } from "@dcloudio/uni-app";
|
|
import { ensureCurrentPageAuthorized } from "@/router/nav-guard";
|
|
|
|
/**
|
|
* 页面级登录守卫(补 router/nav-guard 拦不到的那半边)
|
|
*
|
|
* uni.addInterceptor 只作用于站内跳转;H5 地址栏直达、分享链接冷启动、
|
|
* 小程序「编译进入指定页面」都不会调用任何导航 API,
|
|
* 因此受保护页面必须在自己的 onShow 里再校验一次。
|
|
*
|
|
* 放在 onShow 而不是 onLoad:从登录页 reLaunch 回来、或从后台切回前台时
|
|
* 令牌可能已经变化,每次显示都复核一次更稳妥。
|
|
*
|
|
* @param onAuthorized 校验通过后的初始化回调(拉数据等),被拦走时不会执行
|
|
*/
|
|
export function useAuthGuard(onAuthorized?: () => void): void {
|
|
onShow(() => {
|
|
if (!ensureCurrentPageAuthorized()) {
|
|
return;
|
|
}
|
|
onAuthorized?.();
|
|
});
|
|
}
|