diff --git a/src/interceptors/route.ts b/src/interceptors/route.ts index d2242304..6d4ae1a7 100644 --- a/src/interceptors/route.ts +++ b/src/interceptors/route.ts @@ -5,7 +5,7 @@ * 我这里应为大部分都可以随便进入,所以使用黑名单 */ import { useUserStore } from '@/store' -import { getAllNeedLoginPages, allNeedLoginPages } from '@/utils' +import { getNeedLoginPages, needLoginPages as _needLoginPages, isDev } from '@/utils' // TODO Check const loginRoute = '/pages/login/index' @@ -14,17 +14,17 @@ const loginRoute = '/pages/login/index' // 官网数说可用 process.env 判断环境, 为啥我运行报错(小程序里)(h5正常) // console.log(process.env) -// TODO: 通过环境区分,非硬编码 -const isDev = false // 黑名单登录拦截器 - (适用于大部分页面不需要登录,少部分页面需要登录) const navigateToInterceptor = { // 注意,这里的url是 '/' 开头的,如 '/pages/index/index',跟 'pages.json' 里面的 path 不同 invoke({ url }: { url: string }) { console.log(url) - let needLoginPages = allNeedLoginPages + let needLoginPages = [] // 为了防止开发时出现BUG,这里每次都获取一下。生产环境可以移到函数外,性能更好 - if (isDev) { - needLoginPages = getAllNeedLoginPages() + if (isDev()) { + needLoginPages = getNeedLoginPages() + } else { + needLoginPages = _needLoginPages } if (needLoginPages.includes(url)) { const userStore = useUserStore() diff --git a/src/utils/index.ts b/src/utils/index.ts index 532fc88a..440f83f8 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -34,56 +34,26 @@ export const currRoute = () => { const currRoute = (pages.at(-1) as any).$page // console.log(currRoute) const { fullPath } = currRoute as { fullPath: string } - console.log(fullPath) // eg: /pages/login/index?redirect=/pages/demo/base/route-interceptor (H5) + // console.log(fullPath) // eg: /pages/login/index?redirect=/pages/demo/base/route-interceptor (H5) // /pages/login/index?redirect=%2Fpages%2Fdemo%2Fbase%2Froute-interceptor (小程序) const [path, query] = fullPath.split('?') - console.log(path, query) // /pages/login/index redirect=/pages/demo/base/route-interceptor + // console.log(path, query) // /pages/login/index redirect=/pages/demo/base/route-interceptor // /pages/login/index redirect=%2Fpages%2Fdemo%2Fbase%2Froute-interceptor // TODO: 根据业务,可能需要调整代码逻辑 const redirectPath = query.split('redirect=')[1] // /pages/demo/base/route-interceptor return { path, redirectPath: decodeURIComponent(redirectPath) } // 这里需要统一 decodeURIComponent 一下,可以兼容h5和微信 } -/** - * 得到所有的pages,包括主包和分包的 - * path 统一加 '/' 前缀 - */ -export const getAllPages = () => { - // 这里处理主包 - const pages = [ - ...pagesJson.pages.map((page) => ({ - ...page, - path: `/${page.path}`, - })), - ] - // 这里处理分包 - const subPages = [] - pagesJson.subPackages.forEach((subPageObj) => { - console.log(subPageObj) - const { root } = subPageObj - console.log('root', root) - - subPageObj.pages.forEach((page) => { - subPages.push({ - ...page, - path: `/${root}/${page.path}`, - }) - }) - }) - const result = [...pages, ...subPages] - console.log('all pages: ', result) - return result -} /** * 得到所有的需要登录的pages,包括主包和分包的 * 这里设计得通用一点,可以传递key作为判断依据,默认是 needLogin, 与 route-block 配对使用 - * PS: 这里为啥多写一个函数,主要是性能问题,这个函数性能好很多 + * 如果没有传 key,则表示所有的pages,如果传递了 key, 则表示通过 key 过滤 */ -export const getAllPagesByKey = (key = 'needLogin') => { +export const getAllPages = (key = 'needLogin') => { // 这里处理主包 const pages = [ ...pagesJson.pages - .filter((page) => page[key]) + .filter((page) => !key || page[key]) .map((page) => ({ ...page, path: `/${page.path}`, @@ -92,11 +62,11 @@ export const getAllPagesByKey = (key = 'needLogin') => { // 这里处理分包 const subPages = [] pagesJson.subPackages.forEach((subPageObj) => { - console.log(subPageObj) + // console.log(subPageObj) const { root } = subPageObj subPageObj.pages - .filter((page) => page[key]) + .filter((page) => !key || page[key]) .forEach((page) => { subPages.push({ ...page, @@ -105,7 +75,7 @@ export const getAllPagesByKey = (key = 'needLogin') => { }) }) const result = [...pages, ...subPages] - console.log('needLogin pages: ', result) + console.log('getAllPages result: ', result) return result } @@ -113,11 +83,25 @@ export const getAllPagesByKey = (key = 'needLogin') => { * 得到所有的需要登录的pages,包括主包和分包的 * 只得到 path 数组 */ -export const getAllNeedLoginPages = (): string[] => - getAllPagesByKey('needLogin').map((page) => page.path) +export const getNeedLoginPages = (): string[] => getAllPages('needLogin').map((page) => page.path) /** * 得到所有的需要登录的pages,包括主包和分包的 * 只得到 path 数组 */ -export const allNeedLoginPages: string[] = getAllPagesByKey('needLogin').map((page) => page.path) +export const needLoginPages: string[] = getAllPages('needLogin').map((page) => page.path) +/** + * 是否是开发环境 + */ +export const isDev = () => { + let isDev = false + console.log('wx ==> miniProgram.envVersion:', uni.getAccountInfoSync().miniProgram.envVersion) + console.log('非wx ==> process.env.NODE_ENV:', process.env.NODE_ENV) + // #ifdef MP-WEIXIN + isDev = uni.getAccountInfoSync().miniProgram.envVersion === 'develop' + // #endif + // #ifndef MP-WEIXIN + isDev = process.env.NODE_ENV === 'development' + // #endif + return isDev +}