117 lines
3.4 KiB
TypeScript
Executable File
117 lines
3.4 KiB
TypeScript
Executable File
// app.ts
|
|
import { IAppOption } from './types/app'
|
|
import apiManager from './utils/api'
|
|
|
|
App<IAppOption>({
|
|
globalData: {
|
|
isLoggedIn: false,
|
|
userInfo: undefined,
|
|
token: undefined,
|
|
dictLevel: undefined // 新增字段,用户词典等级配置
|
|
},
|
|
|
|
onLaunch() {
|
|
console.log('小程序启动')
|
|
wx.cloud.init()
|
|
|
|
// 初始化登录状态
|
|
this.initLoginStatus()
|
|
|
|
// 设置存储日志
|
|
const logs = wx.getStorageSync('logs') || []
|
|
logs.unshift(Date.now())
|
|
wx.setStorageSync('logs', logs)
|
|
},
|
|
|
|
onShow() {
|
|
console.log('小程序显示')
|
|
},
|
|
|
|
onHide() {
|
|
console.log('小程序隐藏')
|
|
},
|
|
|
|
// 初始化登录状态
|
|
initLoginStatus() {
|
|
try {
|
|
const authInfo = apiManager.getStoredAuthInfo()
|
|
|
|
if (authInfo && authInfo.token) {
|
|
// 使用API管理器的方法检查token是否过期
|
|
if (!apiManager.isTokenExpired()) {
|
|
this.globalData.isLoggedIn = true
|
|
this.globalData.token = authInfo.token
|
|
this.globalData.userInfo = authInfo.userInfo
|
|
// 初始化词典等级
|
|
this.globalData.dictLevel = authInfo.dictLevel || 'PRIMARY'
|
|
console.log('登录状态有效,自动登录')
|
|
} else {
|
|
console.log('Token 已过期,清理本地数据')
|
|
this.clearLoginData()
|
|
}
|
|
} else {
|
|
console.log('未找到登录信息')
|
|
this.globalData.isLoggedIn = false
|
|
}
|
|
} catch (error) {
|
|
console.error('初始化登录状态失败:', error)
|
|
this.globalData.isLoggedIn = false
|
|
}
|
|
},
|
|
|
|
// 更新登录状态
|
|
updateLoginStatus(loginData: { access_token: string; access_token_expire_time: string; session_uuid: string; userInfo?: IUserInfo, dict_level?: string }) {
|
|
try {
|
|
this.globalData.isLoggedIn = true
|
|
this.globalData.token = loginData.access_token
|
|
this.globalData.userInfo = loginData.userInfo
|
|
// 更新词典等级
|
|
this.globalData.dictLevel = loginData.dict_level || 'PRIMARY'
|
|
|
|
// 存储到本地
|
|
wx.setStorageSync('token', loginData.access_token)
|
|
if (loginData.userInfo) {
|
|
wx.setStorageSync('userInfo', loginData.userInfo)
|
|
}
|
|
// 存储词典等级
|
|
if (loginData.dict_level) {
|
|
wx.setStorageSync('dictLevel', loginData.dict_level)
|
|
}
|
|
|
|
// 处理过期时间,将字符串时间转换为时间戳
|
|
const expiryTime = new Date(loginData.access_token_expire_time).getTime()
|
|
wx.setStorageSync('tokenExpiry', expiryTime)
|
|
|
|
// 存储 session_uuid
|
|
wx.setStorageSync('sessionUuid', loginData.session_uuid)
|
|
|
|
console.log('登录状态更新成功', {
|
|
tokenExpiry: loginData.access_token_expire_time,
|
|
sessionUuid: loginData.session_uuid,
|
|
dictLevel: loginData.dict_level
|
|
})
|
|
} catch (error) {
|
|
console.error('更新登录状态失败:', error)
|
|
}
|
|
},
|
|
|
|
// 清理登录数据
|
|
clearLoginData() {
|
|
try {
|
|
this.globalData.isLoggedIn = false
|
|
this.globalData.token = undefined
|
|
this.globalData.userInfo = undefined
|
|
this.globalData.dictLevel = undefined
|
|
|
|
wx.removeStorageSync('token')
|
|
wx.removeStorageSync('userInfo')
|
|
wx.removeStorageSync('tokenExpiry')
|
|
wx.removeStorageSync('sessionUuid')
|
|
wx.removeStorageSync('dictLevel')
|
|
|
|
console.log('登录数据清理完成')
|
|
} catch (error) {
|
|
console.error('清理登录数据失败:', error)
|
|
}
|
|
}
|
|
}) |