2025-12-17 10:03:40 +08:00

107 lines
3.8 KiB
Vue

<template>
<view class="container">
<scroll-view class="content" scroll-y @scrolltolower="loadMore">
<view v-for="(item, index) in redPacketList" :key="index">
<view class="item">
<view class="item_left">{{ item.money }}</view>
<view class="item_center">
<view class="title">{{ item.red_package_name }}</view>
<view class="time">{{ item.end_time }}到期</view>
<view class="desc">{{ item.scope }}</view>
</view>
<view class="item_right">
<view class="status" @click="showPopup(item)">{{ item.is_received ? '已领取' : '领取' }}</view>
</view>
<view class="status2" :data-status="item.is_received ? '' : '待领取'" v-if="!item.is_received"></view>
</view>
</view>
<!-- 加载状态 -->
<view v-if="loading" class="loading">加载中...</view>
</scroll-view>
<view class="bottom">
<view @click="goRedPacket()">我的权益</view>
</view>
<!-- 弹窗 -->
<view v-if="popupVisible" class="popup-overlay" @click="hidePopup">
<view class="popup-content" @click.stop>
<view class="popup-icon">
<view class="checkmark"></view>
</view>
<view class="popup-title">领取成功!</view>
<view class="popup-desc">{{ currentItem.red_package_name }}{{ currentItem.money }}元已存入您的账户</view>
<button class="popup-btn" @click="hidePopup">确定</button>
</view>
</view>
</view>
</template>
<script>
import { menuButtonInfo, NavgateTo, picUrl, request } from '../../../utils/index';
import { apiArr } from '../../../api/user';
export default {
data() {
return {
redPacketList: [],
popupVisible: false,
currentItem: null,
page_num: 1,
page_size: 10,
loading: false,
noMore: false
}
},
methods: {
async getRedPacketCenter() {
const params = {
pageNum: this.page_num,
pageSize: this.page_size,
}
const res = await request(apiArr.redPackageCenter, 'POST', params);
// 触底加载时合并数据,而不是替换
if (this.page_num === 1) {
this.redPacketList = res.rows;
} else {
this.redPacketList = [...this.redPacketList, ...res.rows];
}
// 判断是否还有更多数据
this.noMore = res.rows.length < this.page_size;
this.loading = false;
},
showPopup(item) {
if (item.is_received) {
return
}
const params = {
user_id: uni.getStorageSync('userId'),
red_package_config_id: item.id,
}
request(apiArr.redPackageClaim, 'POST', params).then(res => {
this.currentItem = item;
this.popupVisible = true;
this.getRedPacketCenter()
})
},
hidePopup() {
this.popupVisible = false;
this.currentItem = null;
},
goRedPacket() {
NavgateTo('/packages/user/myRedPacket/index');
},
// 触底加载更多
loadMore() {
if (this.loading || this.noMore) return;
this.loading = true;
this.page_num++;
this.getRedPacketCenter();
}
},
onLoad() {
this.getRedPacketCenter();
}
}
</script>
<style>
@import url("./index.css");
</style>