/** * Soul创业派对 - 设置页 * 账号绑定功能 */ const app = getApp() Page({ data: { statusBarHeight: 44, isLoggedIn: false, userInfo: null, version: '1.0.0', // 绑定信息 phoneNumber: '', wechatId: '', alipayAccount: '', address: '', // 自动提现(默认开启) autoWithdrawEnabled: true, // 绑定弹窗 showBindModal: false, bindType: '', // phone | wechat | alipay bindValue: '' }, onLoad() { this.setData({ statusBarHeight: app.globalData.statusBarHeight, isLoggedIn: app.globalData.isLoggedIn, userInfo: app.globalData.userInfo }) this.loadBindingInfo() }, onShow() { this.loadBindingInfo() }, // 加载绑定信息 loadBindingInfo() { const { userInfo, isLoggedIn } = app.globalData if (isLoggedIn && userInfo) { // 从本地存储或用户信息中获取绑定数据 const phoneNumber = wx.getStorageSync('user_phone') || userInfo.phone || '' const wechatId = wx.getStorageSync('user_wechat') || userInfo.wechat || '' const alipayAccount = wx.getStorageSync('user_alipay') || userInfo.alipay || '' const address = wx.getStorageSync('user_address') || userInfo.address || '' // 默认开启自动提现 const autoWithdrawEnabled = wx.getStorageSync('auto_withdraw_enabled') !== false this.setData({ isLoggedIn: true, userInfo, phoneNumber, wechatId, alipayAccount, address, autoWithdrawEnabled }) } }, // 一键获取收货地址 getAddress() { wx.chooseAddress({ success: (res) => { console.log('[Settings] 获取地址成功:', res) const fullAddress = `${res.provinceName || ''}${res.cityName || ''}${res.countyName || ''}${res.detailInfo || ''}` if (fullAddress.trim()) { wx.setStorageSync('user_address', fullAddress) this.setData({ address: fullAddress }) // 更新用户信息 if (app.globalData.userInfo) { app.globalData.userInfo.address = fullAddress wx.setStorageSync('userInfo', app.globalData.userInfo) } // 同步到服务器 this.syncAddressToServer(fullAddress) wx.showToast({ title: '地址已获取', icon: 'success' }) } }, fail: (e) => { console.log('[Settings] 获取地址失败:', e) if (e.errMsg?.includes('cancel')) { // 用户取消,不提示 return } if (e.errMsg?.includes('auth deny') || e.errMsg?.includes('authorize')) { wx.showModal({ title: '需要授权', content: '请在设置中允许获取收货地址', confirmText: '去设置', success: (res) => { if (res.confirm) wx.openSetting() } }) } else { wx.showToast({ title: '获取失败,请重试', icon: 'none' }) } } }) }, // 同步地址到服务器 async syncAddressToServer(address) { try { const userId = app.globalData.userInfo?.id if (!userId) return await app.request('/api/user/update', { method: 'POST', data: { userId, address } }) console.log('[Settings] 地址已同步到服务器') } catch (e) { console.log('[Settings] 同步地址失败:', e) } }, // 切换自动提现 async toggleAutoWithdraw(e) { const enabled = e.detail.value // 检查是否绑定了支付方式 if (enabled && !this.data.wechatId && !this.data.alipayAccount) { wx.showToast({ title: '请先绑定微信号或支付宝', icon: 'none' }) this.setData({ autoWithdrawEnabled: false }) return } // 开启时需要确认 if (enabled) { wx.showModal({ title: '开启自动提现', content: `收益将自动打款到您的${this.data.alipayAccount ? '支付宝' : '微信'}账户,确认开启吗?`, success: async (res) => { if (res.confirm) { this.setData({ autoWithdrawEnabled: true }) wx.setStorageSync('auto_withdraw_enabled', true) // 同步到服务器 try { await app.request('/api/user/update', { method: 'POST', data: { userId: app.globalData.userInfo?.id, autoWithdraw: true, withdrawAccount: this.data.alipayAccount || this.data.wechatId } }) } catch (e) { console.log('同步自动提现设置失败', e) } wx.showToast({ title: '已开启自动提现', icon: 'success' }) } else { this.setData({ autoWithdrawEnabled: false }) } } }) } else { this.setData({ autoWithdrawEnabled: false }) wx.setStorageSync('auto_withdraw_enabled', false) wx.showToast({ title: '已关闭自动提现', icon: 'success' }) } }, // 绑定手机号 bindPhone() { this.setData({ showBindModal: true, bindType: 'phone', bindValue: '' }) }, // 微信号输入 onWechatInput(e) { this.setData({ wechatId: e.detail.value }) }, // 保存微信号 async saveWechat() { const { wechatId } = this.data if (!wechatId || wechatId.length < 6) return wx.setStorageSync('user_wechat', wechatId) // 更新用户信息 if (app.globalData.userInfo) { app.globalData.userInfo.wechat = wechatId wx.setStorageSync('userInfo', app.globalData.userInfo) } // 同步到服务器 try { await app.request('/api/user/update', { method: 'POST', data: { userId: app.globalData.userInfo?.id, wechat: wechatId } }) wx.showToast({ title: '微信号已保存', icon: 'success' }) } catch (e) { console.log('保存微信号失败', e) } }, // 输入绑定值 onBindInput(e) { let value = e.detail.value if (this.data.bindType === 'phone') { value = value.replace(/\D/g, '').slice(0, 11) } this.setData({ bindValue: value }) }, // 确认绑定 confirmBind() { const { bindType, bindValue } = this.data if (!bindValue) { wx.showToast({ title: '请输入内容', icon: 'none' }) return } // 验证 if (bindType === 'phone' && !/^1[3-9]\d{9}$/.test(bindValue)) { wx.showToast({ title: '请输入正确的手机号', icon: 'none' }) return } if (bindType === 'wechat' && bindValue.length < 6) { wx.showToast({ title: '微信号至少6位', icon: 'none' }) return } if (bindType === 'alipay' && !bindValue.includes('@') && !/^1[3-9]\d{9}$/.test(bindValue)) { wx.showToast({ title: '请输入正确的支付宝账号', icon: 'none' }) return } // 保存绑定信息到本地 if (bindType === 'phone') { wx.setStorageSync('user_phone', bindValue) this.setData({ phoneNumber: bindValue }) } else if (bindType === 'wechat') { wx.setStorageSync('user_wechat', bindValue) this.setData({ wechatId: bindValue }) } else if (bindType === 'alipay') { wx.setStorageSync('user_alipay', bindValue) this.setData({ alipayAccount: bindValue }) } // 同步到服务器 this.syncProfileToServer() this.setData({ showBindModal: false }) wx.showToast({ title: '绑定成功', icon: 'success' }) }, // 同步资料到服务器 async syncProfileToServer() { try { const userId = app.globalData.userInfo?.id if (!userId) return const res = await app.request('/api/user/profile', { method: 'POST', data: { userId, phone: this.data.phoneNumber || undefined, wechatId: this.data.wechatId || undefined } }) if (res.success) { console.log('[Settings] 资料同步成功') // 更新本地用户信息 if (app.globalData.userInfo) { app.globalData.userInfo.phone = this.data.phoneNumber app.globalData.userInfo.wechatId = this.data.wechatId wx.setStorageSync('userInfo', app.globalData.userInfo) } } } catch (e) { console.log('[Settings] 资料同步失败:', e) } }, // 获取微信头像(新版授权) async getWechatAvatar() { try { const res = await wx.getUserProfile({ desc: '用于完善会员资料' }) if (res.userInfo) { const { nickName, avatarUrl } = res.userInfo // 更新本地 this.setData({ userInfo: { ...this.data.userInfo, nickname: nickName, avatar: avatarUrl } }) // 同步到服务器 const userId = app.globalData.userInfo?.id if (userId) { await app.request('/api/user/profile', { method: 'POST', data: { userId, nickname: nickName, avatar: avatarUrl } }) } // 更新全局 if (app.globalData.userInfo) { app.globalData.userInfo.nickname = nickName app.globalData.userInfo.avatar = avatarUrl wx.setStorageSync('userInfo', app.globalData.userInfo) } wx.showToast({ title: '头像更新成功', icon: 'success' }) } } catch (e) { console.log('[Settings] 获取头像失败:', e) wx.showToast({ title: '获取头像失败', icon: 'none' }) } }, // 一键获取微信手机号(button组件回调) async onGetPhoneNumber(e) { console.log('[Settings] 获取手机号回调:', e.detail) if (e.detail.errMsg !== 'getPhoneNumber:ok') { wx.showToast({ title: '授权失败', icon: 'none' }) return } try { // 需要将code发送到服务器解密获取手机号 const code = e.detail.code if (!code) { // 如果没有code,弹出手动输入 this.bindPhone() return } wx.showLoading({ title: '获取中...', mask: true }) // 调用服务器解密手机号(传入userId以便同步到数据库) const userId = app.globalData.userInfo?.id const res = await app.request('/api/miniprogram/phone', { method: 'POST', data: { code, userId } }) wx.hideLoading() if (res.success && res.phoneNumber) { wx.setStorageSync('user_phone', res.phoneNumber) this.setData({ phoneNumber: res.phoneNumber }) // 更新用户信息 if (app.globalData.userInfo) { app.globalData.userInfo.phone = res.phoneNumber wx.setStorageSync('userInfo', app.globalData.userInfo) } // 同步到服务器 this.syncProfileToServer() wx.showToast({ title: '手机号绑定成功', icon: 'success' }) } else { // 获取失败,弹出手动输入 this.bindPhone() } } catch (e) { wx.hideLoading() console.log('[Settings] 获取手机号失败:', e) // 获取失败,弹出手动输入 this.bindPhone() } }, // 关闭绑定弹窗 closeBindModal() { this.setData({ showBindModal: false }) }, // 清除缓存 clearCache() { wx.showModal({ title: '清除缓存', content: '确定要清除本地缓存吗?', success: (res) => { if (res.confirm) { // 保留登录信息,只清除其他缓存 const token = wx.getStorageSync('token') const userInfo = wx.getStorageSync('userInfo') wx.clearStorageSync() if (token) wx.setStorageSync('token', token) if (userInfo) wx.setStorageSync('userInfo', userInfo) wx.showToast({ title: '缓存已清除', icon: 'success' }) } } }) }, // 退出登录 handleLogout() { wx.showModal({ title: '退出登录', content: '确定要退出登录吗?', success: (res) => { if (res.confirm) { app.logout() this.setData({ isLoggedIn: false, userInfo: null, phoneNumber: '', wechatId: '', alipayAccount: '' }) wx.showToast({ title: '已退出登录', icon: 'success' }) setTimeout(() => wx.navigateBack(), 1500) } } }) }, // 联系客服 - 跳转到Soul派对房 contactService() { wx.showToast({ title: '请在Soul派对房联系客服', icon: 'none' }) }, // 阻止冒泡 stopPropagation() {}, goBack() { wx.navigateBack() } })