import { getToken } from '@/utils/auth'
|
|
// 登录页面
|
const loginPage = "/pages/login"
|
|
// 页面白名单
|
const whiteList = [
|
'/pages/login',
|
'/pages/qylogin', // 企业微信免登页面(匿名访问)
|
'/pages/register',
|
'/pages/common/webview/index',
|
'/pages/mine/privacy-policy/index', // 隐私政策(匿名访问)
|
'/pages/mine/user-agreement/index' // 用户协议(匿名访问)
|
]
|
|
// 检查地址白名单
|
function checkWhite(url) {
|
const path = url.split('?')[0]
|
return whiteList.indexOf(path) !== -1
|
}
|
|
// 保存目标页面URL,用于登录后跳转
|
function saveTargetUrl(url) {
|
try {
|
// 如果URL已经是/pages/login或/pages/qylogin,则不保存
|
if (url && !url.startsWith('/pages/login') && !url.startsWith('/pages/qylogin')) {
|
uni.setStorageSync('targetUrl', url)
|
}
|
} catch (e) {
|
console.error('保存目标URL失败:', e)
|
}
|
}
|
|
// 页面跳转验证拦截器
|
let list = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
|
list.forEach(item => {
|
uni.addInterceptor(item, {
|
invoke(to) {
|
if (getToken()) {
|
// 已登录
|
if (to.url === loginPage) {
|
// 如果已经登录还要访问登录页,直接跳转到首页
|
uni.reLaunch({ url: "/" })
|
return false
|
}
|
return true
|
} else {
|
// 未登录
|
if (checkWhite(to.url)) {
|
// 白名单页面可以直接访问
|
return true
|
}
|
|
// 保存当前要访问的页面作为登录后跳转的目标
|
saveTargetUrl(to.url)
|
|
// 跳转到登录页面
|
uni.reLaunch({ url: loginPage })
|
return false
|
}
|
},
|
fail(err) {
|
console.log(err)
|
}
|
})
|
})
|