feat :init

This commit is contained in:
2025-11-02 19:34:16 +08:00
commit b767041311
617 changed files with 124099 additions and 0 deletions

246
miniprogram/app.js Normal file
View File

@@ -0,0 +1,246 @@
// 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'
})
}
}
})
}
})