From 36776f2fc9f4cc1b2d8476322df946d6af079646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E6=AF=85?= <1335909236@qq.com> Date: Thu, 18 Dec 2025 17:39:45 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=88=91=E7=9A=84=E7=BA=A2?= =?UTF-8?q?=E5=8C=85=E9=A1=B5=E9=9D=A2=E6=95=B0=E6=8D=AE=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E4=B8=BA=E5=88=86=E9=A1=B5=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/user/myRedPacket/index.vue | 86 +++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 4 deletions(-) diff --git a/packages/user/myRedPacket/index.vue b/packages/user/myRedPacket/index.vue index 2b6be0b0..78f41780 100644 --- a/packages/user/myRedPacket/index.vue +++ b/packages/user/myRedPacket/index.vue @@ -124,15 +124,31 @@ export default { changeIndex: 0, redPacketNum: 0, redPacketMoney: 0.00, + page_num: 1, + page_size: 20, + loading: false, + hasMore: true, } }, methods: { - async getMyRedPacket(changeIndex) { + async getMyRedPacket(changeIndex, isLoadMore = false) { + if (this.loading) return; + this.loading = true; + const params = { user_id: uni.getStorageSync('userId'), belong_role: changeIndex == 0 ? '' : changeIndex, + page_num: this.page_num, + page_size: this.page_size, } const res = await request(apiArr.redPackageMyred, 'POST', params); + + if (!res || !res.rows) { + this.loading = false; + this.hasMore = false; + return; + } + let processedList = res.rows .filter(item => item.status !== 3) .map(item => { @@ -160,7 +176,26 @@ export default { grouped[adName].packets.push(item); } }); - this.redPacketList = Object.values(grouped); + + if (isLoadMore) { + // 合并分组数据 + const existingGroups = { ...this.redPacketList.reduce((acc, group) => { + acc[group.ad_name] = group; + return acc; + }, {}) }; + + Object.keys(grouped).forEach(adName => { + if (existingGroups[adName]) { + existingGroups[adName].packets = [...existingGroups[adName].packets, ...grouped[adName].packets]; + } else { + existingGroups[adName] = grouped[adName]; + } + }); + + this.redPacketList = Object.values(existingGroups); + } else { + this.redPacketList = Object.values(grouped); + } } else if (this.currentTab == 3) { // 店铺标签:按 merchant_name 分组 const grouped = {}; @@ -176,14 +211,42 @@ export default { grouped[merchantName].packets.push(item); } }); - this.redPacketList = Object.values(grouped); + + if (isLoadMore) { + // 合并分组数据 + const existingGroups = { ...this.redPacketList.reduce((acc, group) => { + acc[group.merchant_name] = group; + return acc; + }, {}) }; + + Object.keys(grouped).forEach(merchantName => { + if (existingGroups[merchantName]) { + existingGroups[merchantName].packets = [...existingGroups[merchantName].packets, ...grouped[merchantName].packets]; + } else { + existingGroups[merchantName] = grouped[merchantName]; + } + }); + + this.redPacketList = Object.values(existingGroups); + } else { + this.redPacketList = Object.values(grouped); + } } else { - this.redPacketList = processedList; + if (isLoadMore) { + this.redPacketList = [...this.redPacketList, ...processedList]; + } else { + this.redPacketList = processedList; + } } + this.redPacketNum = processedList.filter(item => item.red_package_config).length; this.redPacketMoney = processedList.reduce((total, item) => item.red_package_config ? total + item.red_package_config.money : total, 0.00 ).toFixed(2); + + // 检查是否有更多数据 + this.hasMore = processedList.length === this.page_size; + this.loading = false; }, useRedPacket(item) { console.log('使用红包:', item); @@ -208,13 +271,28 @@ export default { } else if (index == 3) { this.changeIndex = 1; } + // 重置分页状态 + this.page_num = 1; + this.loading = false; + this.hasMore = true; + this.redPacketList = []; this.getMyRedPacket(this.changeIndex); if (this.tabList[index] == '历史记录') { NavgateTo('/packages/user/history/index'); } + }, + onReachBottom() { + if (this.loading || !this.hasMore) return; + this.page_num++; + this.getMyRedPacket(this.changeIndex, true); } }, onShow() { + // 重置分页状态 + this.page_num = 1; + this.loading = false; + this.hasMore = true; + this.redPacketList = []; this.switchTab(0); this.getMyRedPacket(0); }