Files
Wechat/pages/leader-bonus-log/leader-bonus-log.js
2026-06-16 00:17:36 +08:00

216 lines
6.2 KiB
JavaScript

// pages/zuzhangfenhongjilu/zuzhangfenhongjilu.js
import request from '../../utils/request.js';
const PAGE_SIZE = 5; // 每页数据条数
const REFRESH_COOLDOWN = 2000; // 刷新冷却时间 (ms)
const app = getApp();
Page({
data: {
// 统计数据
fenhongZonge: '0.00', // 分红总额
yaoqingGuanshi: 0, // 邀请管事数
fenhongCishu: 0, // 分红次数
// 列表数据
jiluList: [], // 分红记录列表
totalCount: 0, // 总记录数(后端返回)
currentPage: 1, // 当前页码
hasMore: true, // 是否还有更多数据
loading: false, // 首次加载中
loadingMore: false, // 加载更多中
refreshDisabled: false, // 刷新按钮是否冷却
// 错误状态
errorMsg: '', // 错误提示信息
},
onLoad() {
this.loadFirstPage();
},
onShow() {
this.registerNotification();
},
// 注册全局通知组件
registerNotification() {
const notificationComp = this.selectComponent('#global-notification');
if (notificationComp && notificationComp.showNotification) {
app.globalData.globalNotification = {
show: (data) => notificationComp.showNotification(data),
hide: () => notificationComp.hideNotification()
};
}
},
// 加载第一页数据
loadFirstPage() {
this.setData({
currentPage: 1,
hasMore: true,
jiluList: [],
errorMsg: ''
});
this.fetchData(true);
},
// 刷新数据(点击刷新按钮)
onRefresh() {
if (this.data.refreshDisabled) {
wx.showToast({
title: `请稍后重试`,
icon: 'none',
duration: 1000
});
return;
}
// 启用冷却
this.setData({ refreshDisabled: true });
setTimeout(() => {
this.setData({ refreshDisabled: false });
}, REFRESH_COOLDOWN);
// 显示刷新动画(让按钮旋转)
// 执行刷新
this.loadFirstPage();
},
// 上拉加载更多
onLoadMore() {
const { hasMore, loading, loadingMore, currentPage } = this.data;
if (!hasMore || loading || loadingMore) return;
this.setData({ loadingMore: true });
this.fetchData(false, currentPage + 1);
},
// 核心数据获取方法
async fetchData(reset = false, page = 1) {
const url = '/shangpin/zuzhangfenhong'; // 假设后端接口地址
if (reset) {
this.setData({ loading: true, errorMsg: '' });
}
try {
const res = await request({
url,
method: 'POST',
data: {
page: page,
page_size: PAGE_SIZE
}
});
if (res.data.code === 200) {
const data = res.data.data || {};
// 更新统计数据
this.setData({
fenhongZonge: data.fenhong_zonge || '0.00',
yaoqingGuanshi: data.yaoqing_guanshi || 0,
fenhongCishu: data.fenhong_cishu || 0,
totalCount: data.total || 0
});
// 处理列表数据(拼接头像)
const rawList = data.list || [];
const processedList = this.processList(rawList);
if (reset) {
// 第一页
this.setData({
jiluList: processedList,
currentPage: page,
hasMore: processedList.length === PAGE_SIZE, // 如果等于页大小,认为可能还有更多
});
} else {
// 加载更多
const newList = [...this.data.jiluList, ...processedList];
this.setData({
jiluList: newList,
currentPage: page,
hasMore: processedList.length === PAGE_SIZE,
});
}
// 如果加载后数据为空且是第一页,可以给出提示
if (reset && processedList.length === 0) {
// 空状态已在 wxml 处理
}
} else {
// 业务错误
this.setData({
errorMsg: res.data.msg || '数据加载失败'
});
this.showNotification('error', res.data.msg || '数据加载失败');
}
} catch (err) {
console.error('获取分红记录失败', err);
this.setData({
errorMsg: '网络异常,请检查网络'
});
this.showNotification('error', '网络异常');
} finally {
if (reset) {
this.setData({ loading: false });
} else {
this.setData({ loadingMore: false });
}
}
},
// 处理列表项:拼接头像、格式化金额和时间
processList(list) {
const ossUrl = app.globalData.ossImageUrl || '';
const defaultAvatar = ossUrl + (app.globalData.morentouxiang || 'avatar/default.jpg');
return list.map(item => ({
// 打手信息
dashouAvatar: this.getFullUrl(item.dashou_avatar, ossUrl, defaultAvatar),
dashouNicheng: item.dashou_nicheng || '接单员',
dashouYonghuid: item.dashou_yonghuid || '',
// 管事信息
guanshiAvatar: this.getFullUrl(item.guanshi_avatar, ossUrl, defaultAvatar),
guanshiNicheng: item.guanshi_nicheng || '管事',
guanshiYonghuid: item.guanshi_yonghuid || '',
// 分红信息
fenhong: parseFloat(item.fenhong || 0).toFixed(2),
shijian: this.formatTime(item.create_time)
}));
},
// 拼接完整图片URL
getFullUrl(relativePath, ossUrl, defaultUrl) {
if (!relativePath) return defaultUrl;
if (relativePath.startsWith('http')) return relativePath;
const full = ossUrl + (relativePath.startsWith('/') ? relativePath : '/' + relativePath);
return full || defaultUrl;
},
// 格式化时间(根据实际后端返回调整)
formatTime(timestamp) {
if (!timestamp) return '';
try {
const date = new Date(timestamp);
return `${date.getMonth() + 1}${date.getDate()}${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}`;
} catch {
return timestamp.substring(0, 10) || '';
}
},
// 重试加载(当错误提示出现时)
onRetry() {
this.loadFirstPage();
},
// 显示通知(可选)
showNotification(type, msg) {
const noti = app.globalData.globalNotification;
if (noti && noti.show) {
noti.show({ type, message: msg });
}
}
});