246 lines
5.5 KiB
JavaScript
246 lines
5.5 KiB
JavaScript
// app.js
|
||
App({
|
||
globalData: {
|
||
userInfo: null,
|
||
token: '',
|
||
memberInfo: null,
|
||
systemInfo: null,
|
||
apiBaseUrl: 'https://api.xiaozhi.com', // 生产环境API地址
|
||
// apiBaseUrl: 'http://localhost:8091', // 开发环境API地址
|
||
version: '1.0.0'
|
||
},
|
||
|
||
onLaunch() {
|
||
console.log('小智AI会员系统启动')
|
||
|
||
// 初始化系统信息
|
||
this.initSystemInfo()
|
||
|
||
// 检查登录状态
|
||
this.checkLoginStatus()
|
||
|
||
// 检查更新
|
||
this.checkForUpdate()
|
||
},
|
||
|
||
onShow() {
|
||
console.log('小程序显示')
|
||
},
|
||
|
||
onHide() {
|
||
console.log('小程序隐藏')
|
||
},
|
||
|
||
onError(msg) {
|
||
console.error('小程序错误:', msg)
|
||
// 错误上报
|
||
this.reportError(msg)
|
||
},
|
||
|
||
// 初始化系统信息
|
||
initSystemInfo() {
|
||
try {
|
||
const systemInfo = wx.getSystemInfoSync()
|
||
this.globalData.systemInfo = systemInfo
|
||
console.log('系统信息:', systemInfo)
|
||
} catch (error) {
|
||
console.error('获取系统信息失败:', error)
|
||
}
|
||
},
|
||
|
||
// 检查登录状态
|
||
checkLoginStatus() {
|
||
const token = wx.getStorageSync('token')
|
||
const userInfo = wx.getStorageSync('userInfo')
|
||
|
||
if (token && userInfo) {
|
||
this.globalData.token = token
|
||
this.globalData.userInfo = userInfo
|
||
console.log('用户已登录:', userInfo.nickName)
|
||
|
||
// 验证token有效性
|
||
this.validateToken()
|
||
} else {
|
||
console.log('用户未登录')
|
||
}
|
||
},
|
||
|
||
// 验证token有效性
|
||
async validateToken() {
|
||
try {
|
||
const api = require('./utils/api.js')
|
||
const res = await api.getMemberInfo()
|
||
|
||
if (res.code === 200) {
|
||
this.globalData.memberInfo = res.data
|
||
console.log('Token有效,会员信息:', res.data)
|
||
} else {
|
||
console.log('Token无效,清除登录状态')
|
||
this.clearLoginStatus()
|
||
}
|
||
} catch (error) {
|
||
console.error('验证Token失败:', error)
|
||
this.clearLoginStatus()
|
||
}
|
||
},
|
||
|
||
// 清除登录状态
|
||
clearLoginStatus() {
|
||
this.globalData.token = ''
|
||
this.globalData.userInfo = null
|
||
this.globalData.memberInfo = null
|
||
|
||
wx.removeStorageSync('token')
|
||
wx.removeStorageSync('userInfo')
|
||
wx.removeStorageSync('memberInfo')
|
||
},
|
||
|
||
// 检查小程序更新
|
||
checkForUpdate() {
|
||
if (wx.canIUse('getUpdateManager')) {
|
||
const updateManager = wx.getUpdateManager()
|
||
|
||
updateManager.onCheckForUpdate((res) => {
|
||
console.log('检查更新结果:', res.hasUpdate)
|
||
})
|
||
|
||
updateManager.onUpdateReady(() => {
|
||
wx.showModal({
|
||
title: '更新提示',
|
||
content: '新版本已经准备好,是否重启应用?',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
updateManager.applyUpdate()
|
||
}
|
||
}
|
||
})
|
||
})
|
||
|
||
updateManager.onUpdateFailed(() => {
|
||
wx.showToast({
|
||
title: '更新失败',
|
||
icon: 'error'
|
||
})
|
||
})
|
||
}
|
||
},
|
||
|
||
// 错误上报
|
||
reportError(error) {
|
||
// TODO: 实现错误上报逻辑
|
||
console.log('上报错误:', error)
|
||
},
|
||
|
||
// 获取用户信息
|
||
getUserInfo() {
|
||
return this.globalData.userInfo
|
||
},
|
||
|
||
// 设置用户信息
|
||
setUserInfo(userInfo) {
|
||
this.globalData.userInfo = userInfo
|
||
wx.setStorageSync('userInfo', userInfo)
|
||
},
|
||
|
||
// 获取会员信息
|
||
getMemberInfo() {
|
||
return this.globalData.memberInfo
|
||
},
|
||
|
||
// 设置会员信息
|
||
setMemberInfo(memberInfo) {
|
||
this.globalData.memberInfo = memberInfo
|
||
wx.setStorageSync('memberInfo', memberInfo)
|
||
},
|
||
|
||
// 获取Token
|
||
getToken() {
|
||
return this.globalData.token
|
||
},
|
||
|
||
// 设置Token
|
||
setToken(token) {
|
||
this.globalData.token = token
|
||
wx.setStorageSync('token', token)
|
||
},
|
||
|
||
// 检查会员权限
|
||
checkMemberPermission(benefitCode) {
|
||
const memberInfo = this.globalData.memberInfo
|
||
if (!memberInfo) {
|
||
return false
|
||
}
|
||
|
||
// 检查会员状态
|
||
if (memberInfo.memberStatus !== 'ACTIVE') {
|
||
return false
|
||
}
|
||
|
||
// 检查是否过期
|
||
if (memberInfo.endTime) {
|
||
const endTime = new Date(memberInfo.endTime)
|
||
const now = new Date()
|
||
if (endTime < now) {
|
||
return false
|
||
}
|
||
}
|
||
|
||
// 检查权益
|
||
const benefits = memberInfo.benefits || []
|
||
return benefits.some(benefit =>
|
||
benefit.benefitCode === benefitCode && benefit.isEnabled
|
||
)
|
||
},
|
||
|
||
// 格式化会员等级文本
|
||
formatMemberLevel(level) {
|
||
const levelMap = {
|
||
'FREE': '免费用户',
|
||
'VIP': 'VIP会员',
|
||
'SVIP': 'SVIP会员'
|
||
}
|
||
return levelMap[level] || '未知等级'
|
||
},
|
||
|
||
// 格式化会员状态文本
|
||
formatMemberStatus(status) {
|
||
const statusMap = {
|
||
'ACTIVE': '有效',
|
||
'EXPIRED': '已过期',
|
||
'SUSPENDED': '已暂停',
|
||
'CANCELLED': '已取消'
|
||
}
|
||
return statusMap[status] || '未知状态'
|
||
},
|
||
|
||
// 计算会员剩余天数
|
||
calculateRemainingDays(endTime) {
|
||
if (!endTime) {
|
||
return null // 永久有效
|
||
}
|
||
|
||
const end = new Date(endTime)
|
||
const now = new Date()
|
||
const diffTime = end - now
|
||
const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24))
|
||
|
||
return diffDays > 0 ? diffDays : 0
|
||
},
|
||
|
||
// 显示会员升级提示
|
||
showUpgradePrompt(benefitName) {
|
||
wx.showModal({
|
||
title: '权限不足',
|
||
content: `${benefitName}需要VIP会员权限,是否立即升级?`,
|
||
confirmText: '立即升级',
|
||
cancelText: '稍后再说',
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
wx.navigateTo({
|
||
url: '/pages/member/upgrade/upgrade'
|
||
})
|
||
}
|
||
}
|
||
})
|
||
}
|
||
}) |