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) } }) })