mrr.sj.front/pages/lottery/list.vue

283 lines
6.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<custom-navbar title="我的礼品" :show-back="true" title-color="#000" background-color="#FFFFFF"></custom-navbar>
<!-- Tab 内容区域 -->
<view class="tab-nav">
<view v-for="tab in tabs" :key="tab.id" class="tab-item" :class="{ active: queryData.issue === tab.id }"
@click="switchTab(tab.id)">
{{ tab.name }}
</view>
</view>
<CommonList ref="groupRef" apiUrl="/user/lottery/record"
:listScrollHeight="`calc(100vh - ${statusBarHeight + 220}rpx)`">
<template #listData="{ list }">
<view class="scoll-lists">
<view class="scoll-lists-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)">
<view class="flex-row-start">
<!-- 左侧行李箱图片 -->
<image class="prize-img" :src="item.prize_img"></image>
<!-- 右侧信息区域 -->
<view class="prize-info">
<!-- 奖品名称 -->
<view class="prize-title">{{ item.prize_name }}</view>
<!-- 邀请时间 -->
<view class="invite-time">中奖时间:{{ item.lottery_time }}</view>
<!-- 兑奖方式标签 -->
<view class="award-type">兑奖方式:{{ item.type==2?"线上发放":"邮寄"}}</view>
</view>
</view>
<!-- 底部:截止时间 + 地址按钮 -->
<view class="bottom-bar">
<view class="expire-time">{{ item.claim_deadline }}前兑换</view>
<view class="address-btn flex-row-center-center" v-if="item.type==3 && item.issue !=3 ">
<image class="address-btn-img" src="/static/images/icons/lottery-address.png" v-if="!item.claim_address || !item.claim_address.length"></image>
<text>{{ (item.claim_address && item.claim_address.length) || item.issue!=1?"看兑奖地址":"填写发货地址" }}</text>
</view>
<view class="address-btn flex-row-center-center" v-if="item.type==2 && item.issue==1">
<text>去领取</text>
</view>
<view class="address-btn flex-row-center-center" v-if="item.type==2 && item.issue==2">
<text>已发放</text>
</view>
</view>
</view>
</view>
</template>
<!-- 空数据状态 -->
<template #empty>
<noData></noData>
</template>
</CommonList>
</view>
</template>
<script>
import CommonList from "@/components/common/CommonList.vue";
import request from "@/utils/request";
export default {
components: {
CommonList,
},
data() {
return {
queryData: {
issue: 1,
},
tabs: [{
id: 1,
name: "待发放",
},
{
id: 2,
name: "已发放",
},
{
id: 3,
name: "已失效",
},
],
}
},
async onLoad(options) {
if (options.activity_id) {
this.queryData.activity_id = options.activity_id
}
this.statusBarHeight = this.getRpxStatusBarHeight();
this.$nextTick(() => {
this.search();
});
},
onShow() {
if(this.queryData.activity_id){
this.search();
}
},
methods: {
saveSuccess(){
setTimeout(()=>{
uni.showToast({
title: "提交成功",
icon: "none",
});
},1000)
},
// 切换 Tab 的方法
switchTab(tabId) {
this.queryData.issue = tabId;
this.search();
},
search() {
this.$refs.groupRef.manualRefresh(this.queryData);
},
goDetail(item) {
uni.navigateTo({
url: `/pages/lottery/winDetail?id=${item.id}`
});
}
}
}
</script>
<style lang="less">
.container {
.tab-nav {
display: flex;
justify-content: space-between;
padding: 0 80rpx;
background: #fff;
.tab-item {
padding: 30rpx 0rpx 40rpx 0rpx;
cursor: pointer;
font-weight: 500;
font-size: 30rpx;
color: #333333;
line-height: 42rpx;
text-align: left;
font-style: normal;
/* 预先设置透明边框防止切换时布局跳动 */
&.active {
color: #e8101e;
font-weight: 500;
position: relative;
&:after {
content: "";
position: absolute;
bottom: 27rpx; // 定位在底部边框的下方
left: 50%;
transform: translateX(-50%); // 水平居中
/* 激活时显示红色边框 */
width: 34rpx;
height: 6rpx;
background: linear-gradient(306deg, #e8101e 0%, #fc563b 100%);
border-radius: 3rpx;
}
}
}
}
.scoll-lists {
.scoll-lists-item {
padding: 20rpx 20rpx 12rpx 20rpx;
background: #FFFFFF;
border-radius: 20rpx;
margin-bottom: 20rpx;
// 左侧图片
.prize-img {
width: 140rpx;
height: 140rpx;
border-radius: 20rpx;
aspect-ratio: 1/1; // 保持图片比例
object-fit: contain;
margin-right: 24rpx;
}
// 右侧信息区域
.prize-info {
flex: 1;
// 奖品名称
.prize-title {
margin-bottom: 10rpx;
font-weight: 500;
font-size: 28rpx;
color: #333333;
line-height: 40rpx;
text-align: left;
font-style: normal;
max-width: 500rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
// 邀请时间
.invite-time {
font-weight: 400;
font-size: 24rpx;
color: #666666;
line-height: 33rpx;
text-align: left;
font-style: normal;
margin-bottom: 28rpx;
}
// 兑奖方式标签
.award-type {
padding: 0 8rpx;
height: 37rpx;
border-radius: 10rpx;
border: 1rpx solid rgba(210, 87, 85, 0.5);
font-weight: 400;
font-size: 20rpx;
color: #DB2B28;
line-height: 37rpx;
text-align: left;
font-style: normal;
width: fit-content;
transform: translateY(-12rpx);
}
}
// 底部栏截止时间 + 按钮
.bottom-bar {
padding-top: 22rpx;
border-top: 1rpx solid #F1F1F1;
margin-top: 22rpx;
display: flex;
justify-content: space-between;
align-items: center;
// 截止时间
.expire-time {
font-weight: 400;
font-size: 24rpx;
color: #666666;
line-height: 33rpx;
text-align: left;
font-style: normal;
}
// 填写地址按钮
.address-btn {
height: 47rpx;
padding: 0 20rpx;
background: #F43642;
border-radius: 24rpx;
font-weight: 400;
font-size: 24rpx;
color: #FFFFFF;
text-align: left;
font-style: normal;
.address-btn-img{
width: 25rpx;
height: 25rpx;
margin-right: 8rpx;
}
}
}
}
}
}
.common-list {
background: #f5f5f5!important;
padding-bottom: 0rpx!important;
::v-deep .list-container {
padding: 0 20rpx!important;
}
}
</style>