Skip to content

Commit

Permalink
refactor: route.js
Browse files Browse the repository at this point in the history
  • Loading branch information
codercup2 committed Mar 7, 2024
1 parent 538e1fb commit c4cc2be
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 47 deletions.
12 changes: 6 additions & 6 deletions src/interceptors/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand All @@ -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()
Expand Down
66 changes: 25 additions & 41 deletions src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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}`,
Expand All @@ -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,
Expand All @@ -105,19 +75,33 @@ export const getAllPagesByKey = (key = 'needLogin') => {
})
})
const result = [...pages, ...subPages]
console.log('needLogin pages: ', result)
console.log('getAllPages result: ', result)
return result
}

/**
* 得到所有的需要登录的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
}

0 comments on commit c4cc2be

Please sign in to comment.