Files
server/miniprogram/app.js
2025-11-02 19:34:16 +08:00

246 lines
5.5 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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'
})
}
}
})
}
})