// app.js const { utils } = require('./utils/api.js'); App({ onload() { wx.hideTabBar(); }, onLaunch() { // 展示本地存储能力 const logs = wx.getStorageSync('logs') || [] // logs.unshift(Date.now()) // wx.setStorageSync('logs', logs) // 检查是否已有登录状态 const token = wx.getStorageSync('token') if (token) { // 已登录,直接设置全局数据 this.globalData.token = token const userInfo = wx.getStorageSync('userInfo') if (userInfo) { this.globalData.userInfo = userInfo } // 获取访问token this.getAccessToken() // 启动定时刷新token this.startTokenRefreshTimer() } else { // 未登录,显示授权弹窗 this.showLoginModal() } }, // 显示登录授权弹窗 showLoginModal() { wx.showModal({ title: '登录授权', content: '为了给您提供更好的服务,需要获取您的微信登录信息,是否同意?', confirmText: '同意', cancelText: '暂不', success: (res) => { if (res.confirm) { // 用户同意,进行微信登录 this.wxLogin() } else { // 用户拒绝,保持未登录状态 console.log('用户拒绝登录授权,保持未登录状态') this.globalData.isGuest = true } } }) }, // 微信登录方法 wxLogin() { wx.login({ success: (res) => { if (res.code) { console.log('微信登录获取code成功:', res.code) // 调用登录接口 this.callLoginApi(res.code) } else { console.error('微信登录失败:', res.errMsg) } }, fail: (error) => { console.error('微信登录调用失败:', error) } }) }, // 调用登录接口 callLoginApi(code) { wx.request({ url: 'https://sit-kelamayi.4dage.com/api/museum/wxMini/login', method: 'GET', data: { code: code }, header: { 'content-type': 'application/x-www-form-urlencoded' }, success: (response) => { console.log('登录接口调用成功:', response.data) if (response.data && response.data.code === 0) { // 存储基本用户信息(微信用户) const basicUserInfo = { nickName: '微信用户', avatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0', isWxUser: true } const token = response.data.data.token this.globalData.userInfo = basicUserInfo wx.setStorageSync('userInfo', basicUserInfo) // 存储token到全局数据 this.globalData.token = token // 也存储到本地存储 wx.setStorageSync('token', token) // 登录成功,设置为非游客状态 this.globalData.isGuest = false console.log('token获取成功:', token) // 登录成功后获取token this.getAccessToken() // 启动定时刷新token this.startTokenRefreshTimer() // 通知所有页面更新登录状态 this.notifyLoginStatusChange() } else { console.error('登录失败:', response.data.message || '未知错误') } }, fail: (error) => { console.error('登录接口调用失败:', error) } }) }, // 获取访问token getAccessToken() { wx.request({ url: 'https://sit-kelamayi.4dage.com/api/museum/wxMini/getAccessToken', method: 'GET', header: { 'content-type': 'application/x-www-form-urlencoded' }, success: (response) => { console.log('获取accessToken接口调用成功:', response.data) if (response.data && response.data.code === 0) { const accessToken = response.data.data // 存储token到全局数据 this.globalData.accessToken = accessToken // 也存储到本地存储 wx.setStorageSync('accessToken', accessToken) console.log('accessToken获取成功:', accessToken) } else { console.error('获取token失败:', response.data.message || '未知错误') } }, fail: (error) => { console.error('获取token接口调用失败:', error) } }) }, // 手动触发登录(供其他页面调用) triggerLogin() { this.showLoginModal() }, // 启动定时刷新token startTokenRefreshTimer() { // 清除之前的定时器 if (this.globalData.refreshTimer) { clearInterval(this.globalData.refreshTimer) } // 设置每10分钟刷新一次token(600000毫秒) this.globalData.refreshTimer = setInterval(() => { if (this.globalData.token) { console.log('定时刷新token开始') utils.refreshToken() .then(newToken => { console.log('定时刷新token成功:', newToken) }) .catch(error => { console.error('定时刷新token失败:', error) // 如果刷新失败,可能需要重新登录 if (error.includes('token') || error.includes('401')) { this.logout() this.showLoginModal() } }) } }, 600000) // 10分钟 = 600000毫秒 }, // 停止定时刷新token stopTokenRefreshTimer() { if (this.globalData.refreshTimer) { clearInterval(this.globalData.refreshTimer) this.globalData.refreshTimer = null } }, // 退出登录 logout() { // 停止定时刷新token this.stopTokenRefreshTimer() // 清除本地存储 wx.removeStorageSync('token') wx.removeStorageSync('userInfo') wx.removeStorageSync('accessToken') // 清除全局数据 this.globalData.userInfo = null this.globalData.token = null this.globalData.accessToken = null this.globalData.isGuest = true console.log('用户已退出登录') // 通知所有页面更新登录状态 this.notifyLoginStatusChange() }, // 通知所有页面更新登录状态 notifyLoginStatusChange() { // 获取当前页面栈 const pages = getCurrentPages() if (pages.length > 0) { // 获取当前页面 const currentPage = pages[pages.length - 1] // 如果当前页面有checkLoginStatus方法,则调用它 if (currentPage && typeof currentPage.checkLoginStatus === 'function') { currentPage.checkLoginStatus() } } }, globalData: { userInfo: null, token: null, accessToken: null, isGuest: false, // 是否为游客状态 refreshTimer: null // 定时刷新token的定时器 } })