Files
Wechat/pages/yaoqingdashou/yaoqingdashou.js

248 lines
5.5 KiB
JavaScript
Raw 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.
// 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'
};
}
});