288 lines
8.1 KiB
JavaScript
288 lines
8.1 KiB
JavaScript
// 管事会员记录页面逻辑
|
||
import request from '../../utils/request.js';
|
||
|
||
// 每页数据条数常量 - 统一管理,方便修改
|
||
const MEIYE_TIAOSHU = 50;
|
||
|
||
Page({
|
||
data: {
|
||
// 从全局变量获取的数据
|
||
yaoqingzongshu: 0, // 邀请打手总数
|
||
fenyongzonge: '0.00', // 分成总额
|
||
|
||
// 从接口获取的数据
|
||
chongzhiDashouShuliang: 0, // 充值打手数量
|
||
dashouList: [], // 打手列表数据
|
||
zongTiaoshu: 0, // 总条数
|
||
|
||
// 分页相关
|
||
dangqianYe: 1, // 当前页
|
||
meiyouGengduo: false, // 没有更多数据
|
||
jiazaiZhong: false, // 加载中状态
|
||
jiazaiGengduo: false, // 加载更多状态
|
||
|
||
// UI状态
|
||
cuowuTishi: '', // 错误提示
|
||
shuaxinKezhi: false, // 刷新按钮是否可点击
|
||
shuaxinCd: 2000, // 刷新冷却时间(毫秒)
|
||
|
||
// 常量(用于模板)
|
||
meiyeTiaoshu: MEIYE_TIAOSHU // 每页条数
|
||
},
|
||
|
||
onLoad(options) {
|
||
// 从全局变量获取管事数据
|
||
this.huoquQuanjubianliang();
|
||
|
||
// 加载第一页数据
|
||
this.jiazaiShuju(true);
|
||
},
|
||
|
||
onShow() {
|
||
// 页面显示时检查全局变量是否有更新
|
||
this.registerNotificationComponent();
|
||
this.huoquQuanjubianliang();
|
||
},
|
||
// 🆕 新增:注册通知组件
|
||
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()
|
||
};
|
||
}
|
||
},
|
||
|
||
// 获取全局变量数据
|
||
huoquQuanjubianliang() {
|
||
const app = getApp();
|
||
const guanshiData = app.globalData.guanshi;
|
||
|
||
if (guanshiData) {
|
||
this.setData({
|
||
yaoqingzongshu: guanshiData.yaoqingzongshu || 0,
|
||
fenyongzonge: guanshiData.fenyongzonge || '0.00'
|
||
});
|
||
}
|
||
},
|
||
|
||
// 加载数据核心方法
|
||
async jiazaiShuju(chushihua = false) {
|
||
// 防止重复请求
|
||
if (this.data.jiazaiZhong) return;
|
||
|
||
// 如果是初始化加载,重置分页
|
||
if (chushihua) {
|
||
this.setData({
|
||
dangqianYe: 1,
|
||
meiyouGengduo: false,
|
||
dashouList: [],
|
||
zongTiaoshu: 0,
|
||
chongzhiDashouShuliang: 0
|
||
});
|
||
} else {
|
||
// 上拉加载更多时,检查是否还有更多数据
|
||
if (this.data.meiyouGengduo) return;
|
||
|
||
// 如果有数据但不足一页,说明后端已经没数据了
|
||
if (this.data.dashouList.length > 0 && this.data.dashouList.length < MEIYE_TIAOSHU) {
|
||
this.setData({ meiyouGengduo: true });
|
||
return;
|
||
}
|
||
|
||
// 如果数据量已经达到总条数,则不请求
|
||
if (this.data.dashouList.length >= this.data.zongTiaoshu && this.data.zongTiaoshu > 0) {
|
||
this.setData({ meiyouGengduo: true });
|
||
return;
|
||
}
|
||
}
|
||
|
||
// 设置加载状态
|
||
this.setData({
|
||
jiazaiZhong: chushihua ? true : false,
|
||
jiazaiGengduo: !chushihua ? true : false,
|
||
cuowuTishi: ''
|
||
});
|
||
|
||
try {
|
||
const { dangqianYe } = this.data;
|
||
|
||
// 严格按照您的request规范调用
|
||
const res = await request({
|
||
url: '/shangpin/fenhonghq',
|
||
method: 'POST',
|
||
data: {
|
||
page: dangqianYe,
|
||
page_size: MEIYE_TIAOSHU // 使用统一常量
|
||
}
|
||
});
|
||
|
||
// 处理返回数据
|
||
if (res.data.code === 200) {
|
||
const data = res.data.data || {};
|
||
const newList = data.list || [];
|
||
const total = data.total || 0;
|
||
|
||
// 处理头像URL拼接
|
||
const processedList = this.chuliTouxiangURL(newList);
|
||
|
||
// 计算是否有更多数据
|
||
const hasMoreData = processedList.length === MEIYE_TIAOSHU;
|
||
|
||
// 更新数据
|
||
this.setData({
|
||
dashouList: chushihua ? processedList : [...this.data.dashouList, ...processedList],
|
||
zongTiaoshu: total,
|
||
chongzhiDashouShuliang: data.chongzhi_dashou_shuliang || 0,
|
||
meiyouGengduo: !hasMoreData,
|
||
dangqianYe: chushihua ? 2 : this.data.dangqianYe + 1
|
||
});
|
||
|
||
// 如果数据为空,显示空状态
|
||
if (chushihua && processedList.length === 0) {
|
||
wx.showToast({
|
||
title: '暂无数据',
|
||
icon: 'none',
|
||
duration: 1500
|
||
});
|
||
}
|
||
|
||
// 如果加载了数据,给个提示
|
||
if (processedList.length > 0) {
|
||
if (chushihua) {
|
||
wx.showToast({
|
||
title: `已加载${processedList.length}条记录`,
|
||
icon: 'success',
|
||
duration: 1000
|
||
});
|
||
}
|
||
}
|
||
} else {
|
||
this.setData({
|
||
cuowuTishi: res.data.msg || '数据加载失败'
|
||
});
|
||
wx.showToast({
|
||
title: res.data.msg || '加载失败',
|
||
icon: 'none',
|
||
duration: 2000
|
||
});
|
||
}
|
||
} catch (error) {
|
||
console.error('加载数据失败:', error);
|
||
this.setData({
|
||
cuowuTishi: '网络错误,请检查网络连接'
|
||
});
|
||
wx.showToast({
|
||
title: '网络错误',
|
||
icon: 'none',
|
||
duration: 2000
|
||
});
|
||
} finally {
|
||
this.setData({
|
||
jiazaiZhong: false,
|
||
jiazaiGengduo: false
|
||
});
|
||
}
|
||
},
|
||
|
||
// 处理头像URL拼接
|
||
chuliTouxiangURL(list) {
|
||
const app = getApp();
|
||
const ossUrl = app.globalData.ossImageUrl || '';
|
||
|
||
return list.map(item => {
|
||
// 确保有头像URL,如果没有则使用默认头像
|
||
let touxiangUrl = item.avatar || '';
|
||
if (touxiangUrl && !touxiangUrl.startsWith('http')) {
|
||
touxiangUrl = ossUrl + touxiangUrl;
|
||
}
|
||
|
||
// 格式化时间
|
||
let shijian = item.create_time || '';
|
||
if (shijian) {
|
||
// 如果是时间戳,转换为日期格式
|
||
if (/^\d+$/.test(shijian)) {
|
||
const date = new Date(parseInt(shijian));
|
||
shijian = `${date.getMonth() + 1}月${date.getDate()}日 ${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
|
||
} else {
|
||
// 如果是字符串,提取日期和时间
|
||
try {
|
||
const dateObj = new Date(shijian);
|
||
shijian = `${dateObj.getMonth() + 1}月${dateObj.getDate()}日 ${dateObj.getHours().toString().padStart(2, '0')}:${dateObj.getMinutes().toString().padStart(2, '0')}`;
|
||
} catch (e) {
|
||
shijian = shijian.substring(0, 10);
|
||
}
|
||
}
|
||
}
|
||
|
||
return {
|
||
...item,
|
||
touxiangUrl: touxiangUrl || '/images/default-avatar.png',
|
||
shijian: shijian,
|
||
fenhong: parseFloat(item.fenhong || 0).toFixed(2)
|
||
};
|
||
});
|
||
},
|
||
|
||
// 刷新数据(带防重复点击)
|
||
shuaxinShuju() {
|
||
// 检查是否在冷却中
|
||
if (this.data.shuaxinKezhi) {
|
||
wx.showToast({
|
||
title: `请等待${this.data.shuaxinCd/1000}秒`,
|
||
icon: 'none',
|
||
duration: 1000
|
||
});
|
||
return;
|
||
}
|
||
|
||
// 设置冷却状态
|
||
this.setData({ shuaxinKezhi: true });
|
||
|
||
// 显示刷新动画
|
||
this.setData({
|
||
jiazaiZhong: true
|
||
});
|
||
|
||
// 刷新数据
|
||
this.jiazaiShuju(true).finally(() => {
|
||
// 2秒后恢复按钮可点击
|
||
setTimeout(() => {
|
||
this.setData({ shuaxinKezhi: false });
|
||
}, this.data.shuaxinCd);
|
||
});
|
||
},
|
||
|
||
// 上拉加载更多
|
||
shanglaJiazai() {
|
||
// 没有更多数据时不再请求
|
||
if (this.data.meiyouGengduo) {
|
||
wx.showToast({
|
||
title: '已经到底了',
|
||
icon: 'none',
|
||
duration: 1000
|
||
});
|
||
return;
|
||
}
|
||
|
||
// 如果正在加载,不再请求
|
||
if (this.data.jiazaiGengduo || this.data.jiazaiZhong) {
|
||
return;
|
||
}
|
||
|
||
this.jiazaiShuju(false);
|
||
},
|
||
|
||
// 重试加载
|
||
chongshiJiazai() {
|
||
this.setData({
|
||
cuowuTishi: '',
|
||
meiyouGengduo: false
|
||
});
|
||
this.jiazaiShuju(true);
|
||
}
|
||
}); |