/** * 用户认证相关工具函数 */ // 检查用户是否已登录 export function isLoggedIn() { const token = uni.getStorageSync('userToken') const loginTime = uni.getStorageSync('loginTime') if (!token || !loginTime) { return false } // 检查登录是否过期(7天) const now = Date.now() const expired = now - loginTime > 7 * 24 * 60 * 60 * 1000 if (expired) { clearUserData() return false } return true } // 获取用户信息 export function getUserInfo() { if (!isLoggedIn()) { return null } const userInfo = uni.getStorageSync('userInfo') if (userInfo) { return userInfo } // 兼容老版本数据 return { token: uni.getStorageSync('userToken'), phone: uni.getStorageSync('userPhone'), loginTime: uni.getStorageSync('loginTime') } } // 清除用户数据 export function clearUserData() { uni.removeStorageSync('userToken') uni.removeStorageSync('userInfo') uni.removeStorageSync('userPhone') // 兼容老版本 uni.removeStorageSync('loginTime') // 更新全局状态 try { const app = getApp() if (app && app.globalData) { app.globalData.isLoggedIn = false app.globalData.userInfo = null } } catch (error) { console.log('更新全局状态失败,可能App还未初始化完成') } } // 需要登录权限的操作类型 export const PROTECTED_ACTIONS = { ADD_TO_CART: 'add_to_cart', // 加入购物车 BUY_NOW: 'buy_now', // 立即购买 VIEW_MY_PAGE: 'view_my_page', // 点击"我的" VIEW_LEGOU: 'view_legou' // 点击"乐购" } // 需要登录权限的页面列表(已废弃,仅保留4个动作的权限控制) export const PROTECTED_PAGES = [] // 检查页面是否需要登录权限 export function isProtectedPage(url) { return PROTECTED_PAGES.some(page => url.includes(page)) } // 跳转到登录页面 export function navigateToLogin(returnUrl = '') { const loginUrl = '/pages/auth/login' if (returnUrl) { uni.setStorageSync('returnUrl', returnUrl) } uni.navigateTo({ url: loginUrl, fail() { // 如果是tabBar页面,使用reLaunch uni.reLaunch({ url: loginUrl }) } }) } // 登录后返回原页面 export function navigateBack() { const returnUrl = uni.getStorageSync('returnUrl') // tabBar页面列表 const tabBarPages = [ '/pages/index/index', '/pages/community/index', '/pages/legou/index', '/pages/cart/index', '/pages/user/index' ] if (returnUrl) { uni.removeStorageSync('returnUrl') console.log('导航返回原页面:', returnUrl) if (tabBarPages.includes(returnUrl)) { uni.switchTab({ url: returnUrl }) } else { uni.reLaunch({ url: returnUrl }) } } else { console.log('导航到首页') // 使用switchTab跳转到tabBar页面 uni.switchTab({ url: '/pages/index/index' }) } } // 权限拦截器 - 在需要权限的操作前调用 export function requireAuth(callback, options = {}) { if (isLoggedIn()) { // 已登录,执行回调 if (typeof callback === 'function') { callback() } return true } else { // 未登录,显示提示并跳转登录 const actionMessages = { [PROTECTED_ACTIONS.ADD_TO_CART]: '加入购物车需要先登录', [PROTECTED_ACTIONS.BUY_NOW]: '立即购买需要先登录', [PROTECTED_ACTIONS.VIEW_MY_PAGE]: '访问"我的"页面需要先登录', [PROTECTED_ACTIONS.VIEW_LEGOU]: '访问"乐购"页面需要先登录' } const message = options.message || actionMessages[options.action] || '请先登录后再进行此操作' uni.showModal({ title: '提示', content: message, confirmText: '去登录', cancelText: '暂不登录', success(res) { if (res.confirm) { navigateToLogin(options.returnUrl) } } }) return false } } // 静默权限检查(不显示弹窗) export function checkAuth() { return isLoggedIn() } // 手机号格式验证 export function validatePhoneNumber(phone) { const phoneRegex = /^1[3-9]\d{9}$/ return phoneRegex.test(phone) } // 验证码格式验证 export function validateSmsCode(code) { const codeRegex = /^\d{6}$/ return codeRegex.test(code) } // 用户权限级别(已废弃,仅保留4个动作的权限控制) export const USER_LEVELS = { GUEST: 0, // 游客 NORMAL: 1 // 普通用户 } // 获取用户权限级别(已废弃) export function getUserLevel() { const userInfo = getUserInfo() return userInfo?.level || USER_LEVELS.GUEST } // 检查用户是否有特定权限(已废弃) export function hasPermission(requiredLevel) { const userLevel = getUserLevel() return userLevel >= requiredLevel }