|                                                                                                                                                                                                                                                                   |  | <template>	<scroll-view scroll-y="true" :style="{height: height}" @scrolltolower="moreCoupon()">		<!-- 优惠券列表 -->		<view class="list">			<view class="item" v-for="item in couponList" @click="select(item)" :key="item.id"				:class="['status-' + item.state]">				<image src="@/pages_order/static/coupon/coupon-bg.png" mode="widthFix" class="coupon-bg"></image>
				<view class="item-con">					<view class="price-time">						<view class="price">							<view class="num">								<view class="icon">									¥								</view>								{{ item.money }}							</view>						</view>
						<view class="date-tiao">							<view class="time">								限{{ formatDate(item.stateTime) }} - {{ formatDate(item.endTime) }}							</view>							<view class="tiao">								满{{ item.useMoney }}可用							</view>						</view>					</view>
					<view class="status">						<view class="order-status">							<image src="@/pages_order/static/coupon/status.png" mode="widthFix" class="status-img">							</image>							<view class="text">								{{ status[item.state] }}							</view>						</view>
						<!-- <view class="surplus">							剩余28天过期						</view> -->					</view>				</view>			</view>		</view>
		<uv-empty v-if="couponList.length == 0" text="空空如也" textSize="30rpx" iconSize="200rpx" icon="list"></uv-empty>	</scroll-view></template>
<script>	export default {		name: 'CouponList',		data() {			return {				status: ['已领取', '已使用', '已过期'],				queryParams: {					pageNo: 1,					pageSize: 10				},				couponList: [],				total: 0			}		},		methods: {			select(item) {				this.$emit('select', item)			},
			//获取优惠券列表
			getCouponList() {				let requestData = {					...this.queryParams,					state: this.state ? this.state : 0				}				this.$api('getRiceCouponList', requestData, res => {					if (res.code == 200) {						this.couponList = res.result.records						this.total = res.result.total					}				})			},
			//格式化年月日
			formatDate(date) {				if(!date){					return ''				}				date = new Date(date.replace(/-/g,'/'));				// const year = date.getFullYear();
				const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要加1,并且确保是两位数
				const day = String(date.getDate()).padStart(2, '0'); // 确保日期是两位数
				return `${month}-${day}`;			},
			// 加载更多
			moreCoupon() {				if (this.queryParams.pageSize > this.total) return				this.queryParams.pageSize += 10				this.getCouponList()			},		},		props: {			state: {				type: Number,				default: 0			},			height: {				default: 'calc(90vh - 180rpx)'			}		},		watch: {			state: function(newValue) {				this.getCouponList()			}		}	}</script>
<style lang="scss" scoped>	.list {
		.item {			color: #FDDFCD;			position: relative;			width: calc(100% - 40rpx);			height: 220rpx;			background-size: 100% 100%;			margin: 20rpx;			box-sizing: border-box;			padding: 30rpx;
			.coupon-bg {				width: 100%;				position: absolute;				left: 0rpx;				top: 0rpx;			}
			.item-con {				display: flex;				align-items: center;				flex-wrap: wrap;				position: absolute;				top: 50%;				left: 0rpx;				transform: translateY(-50%);				z-index: 99;				width: 100%;
				.price-time {					display: flex;					width: 65%;
					.price {						display: flex;						align-items: center;
						.num {							color: #FFF8E9;							font-weight: 900;							font-size: 70rpx;							display: flex;							align-items: flex-end;
							.icon {								color: #FFF8E9;								width: 30rpx;								height: 30rpx;								display: flex;								justify-content: center;								align-items: center;								font-size: 20rpx;								border-radius: 14rpx;								margin-bottom: 14rpx;								margin-right: 10rpx;							}						}					}
					.date-tiao {						display: flex;						flex-direction: column;						align-items: center;						font-size: 24rpx;						box-sizing: border-box;						padding-left: 20rpx;
						.time {}
						.tiao {							display: flex;							justify-content: center;							background: #FDE5BA;							border-radius: 40rpx;							color: #FF2E34;							padding: 5rpx 20rpx;							margin-top: 15rpx;						}					}				}
				.status {					display: flex;					flex-direction: column;					align-items: center;					justify-content: center;					width: 35%;					color: #FD4231;					padding-top: 30rpx;
					.order-status {						position: relative;						width: 180rpx;
						.status-img {							position: absolute;							left: 0;							width: 100%;						}
						.text {							height: 90rpx;							display: flex;							justify-content: center;							align-items: center;							position: relative;							z-index: 100;							font-size: 34rpx;							font-weight: bold;						}					}
					.surplus {						font-size: 22rpx;						text-align: center;						margin-top: 10rpx;					}				}			}		}
		.status-0 {			opacity: 1;		}
		.status-1 {			opacity: .9;		}
		.status-2 {			opacity: .6;		}
		.del {			position: absolute;			top: 0;			left: 0;			width: 100%;			height: 100%;			background-color: #ffffff99;			z-index: 99;		}	}</style>
 |