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