// pages/yaoqingma/yaoqingma.js // 阿龙电竞 - 邀请码页面 (优化重构版) import request from '../../utils/request.js' Page({ /** * 页面的初始数据 (字段保持与你渲染层一致) */ data: { yaoqingma: '', // 邀请码 isLoading: false, // 是否正在加载 copySuccess: false, // 是否复制成功 copyTimer: null // 复制成功提示计时器 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 仅初始化,不自动请求 this.chushihuaYaoqingma(); }, /** * 生命周期函数--监听页面显示 */ onShow: function () { // 每次显示页面时重置复制状态 if (this.data.copySuccess) { this.chongzhiCopyZhuangtai(); } }, onShow() { // 原有代码... // 🆕 注册通知组件 this.registerNotificationComponent(); this.registerNotificationComponent(); }, // 🆕 新增:注册通知组件 registerNotificationComponent() { const app = getApp(); const notificationComp = this.selectComponent('#global-notification'); if (notificationComp && notificationComp.showNotification) { console.log('🏪 商城页面注册通知组件'); app.globalData.globalNotification = { show: (data) => notificationComp.showNotification(data), hide: () => notificationComp.hideNotification() }; } }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { // 清理计时器 if (this.data.copyTimer) { clearTimeout(this.data.copyTimer); } }, /** * 初始化邀请码数据 */ chushihuaYaoqingma: function () { // 只从缓存读取并显示,不主动请求 try { const cachedYaoqingma = wx.getStorageSync('yaoqingma'); if (cachedYaoqingma && cachedYaoqingma.trim() !== '') { this.setData({ yaoqingma: cachedYaoqingma }); } else { } } catch (error) { } }, /** * 处理邀请码相关操作 (主入口函数) * 如果没有邀请码则生成,如果有则复制 */ chuliYaoqingma: async function () { // 防止重复点击 if (this.data.isLoading) { return; } // 如果已经有邀请码,执行复制操作 if (this.data.yaoqingma && this.data.yaoqingma.trim() !== '') { this.fuzhiYaoqingma(); return; } // 如果没有邀请码,向后端请求生成 await this.shengchengYaoqingma(); }, /** * 向后端请求生成邀请码 */ shengchengYaoqingma: async function () { this.setData({ isLoading: true }); try { // 使用封装的request工具发送POST请求(与你的调用方式一致) const response = await request({ url: '/yonghu/yaoqingma', method: 'POST' // 如果需要参数可以在此添加 data: {} }); // 处理业务响应 if (response.data.code === 200) { const newYaoqingma = response.data.data.yaoqingma; this.chuliShengchengChenggong(newYaoqingma); } else { this.chuliShiwu('生成失败', response.message); } } catch (error) { // 处理网络或系统错误 this.chuliShiwu('网络错误', error.message || '请检查网络后重试'); } }, /** * 处理生成成功的逻辑 */ chuliShengchengChenggong: function (newYaoqingma) { // 更新页面数据 this.setData({ yaoqingma: newYaoqingma, isLoading: false }); // 保存到缓存 try { wx.setStorageSync('yaoqingma', newYaoqingma); } catch (error) { } // 显示成功提示 wx.showToast({ title: '生成成功!', icon: 'success', duration: 2000 }); }, /** * 处理错误情况 */ chuliShiwu: function (title, message) { this.setData({ isLoading: false }); wx.showToast({ title: message || title, icon: 'none', duration: 3000 }); }, /** * 复制邀请码到剪贴板 */ fuzhiYaoqingma: function () { const yaoqingma = this.data.yaoqingma; if (!yaoqingma || yaoqingma.trim() === '') { wx.showToast({ title: '暂无邀请码可复制', icon: 'none', duration: 2000 }); return; } wx.setClipboardData({ data: yaoqingma, success: () => { this.setData({ copySuccess: true }); wx.showToast({ title: '已复制', icon: 'success', duration: 1500 }); // 2秒后重置状态 const timer = setTimeout(() => { this.chongzhiCopyZhuangtai(); }, 2000); this.setData({ copyTimer: timer }); }, fail: (error) => { console.error('复制失败:', error); wx.showToast({ title: '复制失败', icon: 'none', duration: 2000 }); } }); }, /** * 重置复制状态 */ chongzhiCopyZhuangtai: function () { if (this.data.copyTimer) { clearTimeout(this.data.copyTimer); } this.setData({ copySuccess: false, copyTimer: null }); }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { if (this.data.yaoqingma) { return { title: '我的阿龙电竞邀请码', path: `/pages/yaoqingma/yaoqingma?yaoqingma=${this.data.yaoqingma}` }; } return { title: '阿龙电竞陪玩平台', path: '/pages/index/index' }; } });