From ec9e7f34d23713883afc9059f03794dbea9a7ef3 Mon Sep 17 00:00:00 2001 From: feige996 <1020102647@qq.com> Date: Mon, 1 Sep 2025 14:40:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(router):=20=E4=BF=AE=E6=94=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=B7=AF=E7=94=B1=E6=8B=A6=E6=88=AA=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BB=A5=E6=94=AF=E6=8C=81=E5=BC=80=E5=8F=91=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将 needLogin 参数名改为 excludeLoginPath 以更准确表达用途 在开发环境下动态获取排除登录的页面列表 将路由配置中的排除列表与页面配置合并 --- src/router/config.ts | 6 ++++++ src/router/interceptor.ts | 6 ++++-- src/utils/index.ts | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/router/config.ts b/src/router/config.ts index 40adb72..f6afeea 100644 --- a/src/router/config.ts +++ b/src/router/config.ts @@ -1,3 +1,5 @@ +import { getAllPages } from '@/utils' + export const LOGIN_STRATEGY_MAP = { DEFAULT_NO_NEED_LOGIN: 0, // 黑名单策略,默认可以进入APP DEFAULT_NEED_LOGIN: 1, // 白名单策略,默认不可以进入APP,需要强制登录 @@ -11,9 +13,13 @@ export const REGISTER_PAGE = '/pages/login/register' export const LOGIN_PAGE_LIST = [LOGIN_PAGE, REGISTER_PAGE] +// 在 definePage 里面配置了 excludeLoginPath 的页面,功能与 EXCLUDE_LOGIN_PATH_LIST 相同 +export const excludeLoginPathList = getAllPages('excludeLoginPath').map(page => page.path) + // 排除在外的列表,白名单策略指白名单列表,黑名单策略指黑名单列表 export const EXCLUDE_LOGIN_PATH_LIST = [ '/pages/xxx/index', + ...excludeLoginPathList, // 都是以 / 开头的 path ] // 在微信小程序里面是否使用小程序默认的登录,默认为true diff --git a/src/router/interceptor.ts b/src/router/interceptor.ts index c9de446..67af6cf 100644 --- a/src/router/interceptor.ts +++ b/src/router/interceptor.ts @@ -5,9 +5,10 @@ */ import { useTokenStore } from '@/store/token' import { tabbarStore } from '@/tabbar/store' -import { getLastPage, parseUrlToObj } from '@/utils/index' +import { getAllPages, getLastPage, parseUrlToObj } from '@/utils/index' import { EXCLUDE_LOGIN_PATH_LIST, isNeedLoginMode, LOGIN_PAGE, LOGIN_PAGE_LIST } from './config' +const isDev = import.meta.env.DEV export const FG_LOG_ENABLE = false // 黑名单登录拦截器 - (适用于大部分页面不需要登录,少部分页面需要登录) @@ -57,8 +58,9 @@ export const navigateToInterceptor = { return true // 明确表示允许路由继续执行 } else { + const allExcludeLoginPages = getAllPages('excludeLoginPath') // dev 环境下,需要每次都重新获取,否则新配置就不会生效 // 需要登录里面的 EXCLUDE_LOGIN_PATH_LIST 表示白名单,可以直接通过 - if (EXCLUDE_LOGIN_PATH_LIST.includes(path)) { + if (EXCLUDE_LOGIN_PATH_LIST.includes(path) || (isDev && allExcludeLoginPages.some(page => page.path === path))) { return true // 明确表示允许路由继续执行 } // 否则需要重定向到登录页 diff --git a/src/utils/index.ts b/src/utils/index.ts index 03da7ea..37c240f 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -60,10 +60,10 @@ export function parseUrlToObj(url: string) { } /** * 得到所有的需要登录的 pages,包括主包和分包的 - * 这里设计得通用一点,可以传递 key 作为判断依据,默认是 needLogin, 与 route-block 配对使用 + * 这里设计得通用一点,可以传递 key 作为判断依据,默认是 excludeLoginPath, 与 route-block 配对使用 * 如果没有传 key,则表示所有的 pages,如果传递了 key, 则表示通过 key 过滤 */ -export function getAllPages(key = 'needLogin') { +export function getAllPages(key = 'excludeLoginPath') { // 这里处理主包 const mainPages = pages .filter(page => !key || page[key])