Skip to content

Commit c4cc2be

Browse files
committed
refactor: route.js
1 parent 538e1fb commit c4cc2be

File tree

2 files changed

+31
-47
lines changed

2 files changed

+31
-47
lines changed

src/interceptors/route.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* 我这里应为大部分都可以随便进入,所以使用黑名单
66
*/
77
import { useUserStore } from '@/store'
8-
import { getAllNeedLoginPages, allNeedLoginPages } from '@/utils'
8+
import { getNeedLoginPages, needLoginPages as _needLoginPages, isDev } from '@/utils'
99

1010
// TODO Check
1111
const loginRoute = '/pages/login/index'
@@ -14,17 +14,17 @@ const loginRoute = '/pages/login/index'
1414
// 官网数说可用 process.env 判断环境, 为啥我运行报错(小程序里)(h5正常)
1515
// console.log(process.env)
1616

17-
// TODO: 通过环境区分,非硬编码
18-
const isDev = false
1917
// 黑名单登录拦截器 - (适用于大部分页面不需要登录,少部分页面需要登录)
2018
const navigateToInterceptor = {
2119
// 注意,这里的url是 '/' 开头的,如 '/pages/index/index',跟 'pages.json' 里面的 path 不同
2220
invoke({ url }: { url: string }) {
2321
console.log(url)
24-
let needLoginPages = allNeedLoginPages
22+
let needLoginPages = []
2523
// 为了防止开发时出现BUG,这里每次都获取一下。生产环境可以移到函数外,性能更好
26-
if (isDev) {
27-
needLoginPages = getAllNeedLoginPages()
24+
if (isDev()) {
25+
needLoginPages = getNeedLoginPages()
26+
} else {
27+
needLoginPages = _needLoginPages
2828
}
2929
if (needLoginPages.includes(url)) {
3030
const userStore = useUserStore()

src/utils/index.ts

+25-41
Original file line numberDiff line numberDiff line change
@@ -34,56 +34,26 @@ export const currRoute = () => {
3434
const currRoute = (pages.at(-1) as any).$page
3535
// console.log(currRoute)
3636
const { fullPath } = currRoute as { fullPath: string }
37-
console.log(fullPath) // eg: /pages/login/index?redirect=/pages/demo/base/route-interceptor (H5)
37+
// console.log(fullPath) // eg: /pages/login/index?redirect=/pages/demo/base/route-interceptor (H5)
3838
// /pages/login/index?redirect=%2Fpages%2Fdemo%2Fbase%2Froute-interceptor (小程序)
3939
const [path, query] = fullPath.split('?')
40-
console.log(path, query) // /pages/login/index redirect=/pages/demo/base/route-interceptor
40+
// console.log(path, query) // /pages/login/index redirect=/pages/demo/base/route-interceptor
4141
// /pages/login/index redirect=%2Fpages%2Fdemo%2Fbase%2Froute-interceptor
4242
// TODO: 根据业务,可能需要调整代码逻辑
4343
const redirectPath = query.split('redirect=')[1] // /pages/demo/base/route-interceptor
4444
return { path, redirectPath: decodeURIComponent(redirectPath) } // 这里需要统一 decodeURIComponent 一下,可以兼容h5和微信
4545
}
4646

47-
/**
48-
* 得到所有的pages,包括主包和分包的
49-
* path 统一加 '/' 前缀
50-
*/
51-
export const getAllPages = () => {
52-
// 这里处理主包
53-
const pages = [
54-
...pagesJson.pages.map((page) => ({
55-
...page,
56-
path: `/${page.path}`,
57-
})),
58-
]
59-
// 这里处理分包
60-
const subPages = []
61-
pagesJson.subPackages.forEach((subPageObj) => {
62-
console.log(subPageObj)
63-
const { root } = subPageObj
64-
console.log('root', root)
65-
66-
subPageObj.pages.forEach((page) => {
67-
subPages.push({
68-
...page,
69-
path: `/${root}/${page.path}`,
70-
})
71-
})
72-
})
73-
const result = [...pages, ...subPages]
74-
console.log('all pages: ', result)
75-
return result
76-
}
7747
/**
7848
* 得到所有的需要登录的pages,包括主包和分包的
7949
* 这里设计得通用一点,可以传递key作为判断依据,默认是 needLogin, 与 route-block 配对使用
80-
* PS: 这里为啥多写一个函数,主要是性能问题,这个函数性能好很多
50+
* 如果没有传 key,则表示所有的pages,如果传递了 key, 则表示通过 key 过滤
8151
*/
82-
export const getAllPagesByKey = (key = 'needLogin') => {
52+
export const getAllPages = (key = 'needLogin') => {
8353
// 这里处理主包
8454
const pages = [
8555
...pagesJson.pages
86-
.filter((page) => page[key])
56+
.filter((page) => !key || page[key])
8757
.map((page) => ({
8858
...page,
8959
path: `/${page.path}`,
@@ -92,11 +62,11 @@ export const getAllPagesByKey = (key = 'needLogin') => {
9262
// 这里处理分包
9363
const subPages = []
9464
pagesJson.subPackages.forEach((subPageObj) => {
95-
console.log(subPageObj)
65+
// console.log(subPageObj)
9666
const { root } = subPageObj
9767

9868
subPageObj.pages
99-
.filter((page) => page[key])
69+
.filter((page) => !key || page[key])
10070
.forEach((page) => {
10171
subPages.push({
10272
...page,
@@ -105,19 +75,33 @@ export const getAllPagesByKey = (key = 'needLogin') => {
10575
})
10676
})
10777
const result = [...pages, ...subPages]
108-
console.log('needLogin pages: ', result)
78+
console.log('getAllPages result: ', result)
10979
return result
11080
}
11181

11282
/**
11383
* 得到所有的需要登录的pages,包括主包和分包的
11484
* 只得到 path 数组
11585
*/
116-
export const getAllNeedLoginPages = (): string[] =>
117-
getAllPagesByKey('needLogin').map((page) => page.path)
86+
export const getNeedLoginPages = (): string[] => getAllPages('needLogin').map((page) => page.path)
11887

11988
/**
12089
* 得到所有的需要登录的pages,包括主包和分包的
12190
* 只得到 path 数组
12291
*/
123-
export const allNeedLoginPages: string[] = getAllPagesByKey('needLogin').map((page) => page.path)
92+
export const needLoginPages: string[] = getAllPages('needLogin').map((page) => page.path)
93+
/**
94+
* 是否是开发环境
95+
*/
96+
export const isDev = () => {
97+
let isDev = false
98+
console.log('wx ==> miniProgram.envVersion:', uni.getAccountInfoSync().miniProgram.envVersion)
99+
console.log('非wx ==> process.env.NODE_ENV:', process.env.NODE_ENV)
100+
// #ifdef MP-WEIXIN
101+
isDev = uni.getAccountInfoSync().miniProgram.envVersion === 'develop'
102+
// #endif
103+
// #ifndef MP-WEIXIN
104+
isDev = process.env.NODE_ENV === 'development'
105+
// #endif
106+
return isDev
107+
}

0 commit comments

Comments
 (0)