Files
cashier/fuintUniapp/components/page/coupon/index.vue
砂糖 8015759c65 init
2026-02-07 18:01:13 +08:00

295 lines
8.0 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="diy-goods" :style="{ background: itemStyle.background }">
<view class="goods-list" :class="[`display__${itemStyle.display}`, `column__${itemStyle.column}`]">
<scroll-view :scroll-x="itemStyle.display === 'slide'">
<view class="goods-item" v-for="(dataItem, index) in dataList" :key="index" @click="onTargetCoupon(dataItem.id, dataItem.type, dataItem.userCouponId)">
<!-- 单列卡券 -->
<block>
<view class="dis-flex">
<!-- 卡券图片 -->
<view class="goods-item_left">
<image class="image" :src="dataItem.image"></image>
</view>
<view class="goods-item_right">
<!-- 卡券名称 -->
<view class="goods-name twolist-hidden">
<text>{{ dataItem.name }}</text>
</view>
<view class="goods-item_desc">
<!-- 卡券卖点 -->
<view class="desc-selling_point dis-flex">
<text class="onelist-hidden">{{ dataItem.sellingPoint }}</text>
</view>
<view class="coupon-attr">
<view class="attr-l">
<!-- 参与人数 -->
<view class="desc-goods_sales dis-flex">
<text v-if="dataItem.type === 'C'">已领取{{ dataItem.gotNum }}剩余{{ dataItem.leftNum }}</text>
<text v-if="dataItem.type === 'P'">已预存{{ dataItem.gotNum }}剩余{{ dataItem.leftNum }}</text>
<text v-if="dataItem.type === 'T'">已领取{{ dataItem.gotNum }}</text>
</view>
<!-- 卡券面额 -->
<view v-if="dataItem.amount > 0" class="desc_footer">
<text class="price_x">¥{{ dataItem.amount }}</text>
</view>
</view>
<view class="attr-r">
<!--领券按钮-->
<view class="receive" v-if="dataItem.type === 'C' && dataItem.isReceive === false">
<text>立即领取</text>
</view>
<view class="receive state" v-if="dataItem.type === 'C' && dataItem.isReceive === true">
<text>已领取</text>
</view>
<view class="receive" v-if="dataItem.type === 'P' && dataItem.isReceive === false">
<text>立即预存</text>
</view>
<view v-if="dataItem.type === 'T' && dataItem.isReceive === false" class="receive">
<text>领取次卡</text>
</view>
<view v-if="dataItem.type === 'T' && dataItem.isReceive === true" class="receive state">
<text>已领取</text>
</view>
</view>
</view>
</view>
</view>
</view>
</block>
</view>
</scroll-view>
</view>
</view>
</template>
<script>
import * as couponApi from '@/api/coupon'
import * as pageApi from '@/api/page'
export default {
name: "Coupon",
/**
* 组件的属性列表
* 用于组件自定义设置
*/
props: {
itemIndex: String,
itemStyle: Object,
params: Object,
dataList: Array
},
/**
* 组件的方法列表
* 更新属性和数据的方法与更新页面数据的方法类似
*/
methods: {
/**
* 卡券详情页
*/
onTargetCoupon(couponId, type, userCouponId) {
if (type === 'P') {
this.$navTo(`pages/prestore/buy`, { couponId })
} else {
if (type === 'C') {
this.$navTo(`pages/coupon/detail`, { couponId: couponId, userCouponId: userCouponId })
} else if(type === 'T') {
this.$navTo(`pages/timer/detail`, { couponId: couponId, userCouponId: userCouponId })
}
}
}
}
}
</script>
<style lang="scss" scoped>
.diy-goods {
.goods-list {
padding: 4rpx;
box-sizing: border-box;
.goods-item {
box-sizing: border-box;
padding: 6rpx;
.goods-image {
position: relative;
width: 80rpx;
height: 63rpx;
border-radius: 5rpx;
padding-bottom: 100%;
overflow: hidden;
background: #fff;
&:after {
content: '';
display: block;
margin-top: 100%;
}
.image {
position: absolute;
width: 80rpx;
height: 63rpx;
border-radius: 5rpx;
top: 0;
left: 0;
-o-object-fit: cover;
object-fit: cover;
}
}
.detail {
padding: 8rpx;
background: #fff;
.goods-name {
height: 64rpx;
line-height: 1.3;
white-space: normal;
color: #484848;
font-size: 26rpx;
}
.detail-price {
.goods-price {
margin-right: 8rpx;
}
.line-price {
text-decoration: line-through;
}
}
}
}
&.display__slide {
white-space: nowrap;
font-size: 0;
.goods-item {
display: inline-block;
}
}
&.display__list {
.goods-item {
float: left;
}
}
&.column__2 {
.goods-item {
width: 50%;
}
}
&.column__3 {
.goods-item {
width: 33.33333%;
}
}
&.column__1 {
.goods-item {
width: 100%;
height: 240rpx;
margin-bottom: 12rpx;
padding: 20rpx;
box-sizing: border-box;
background: #fff;
line-height: 1.6;
&:last-child {
margin-bottom: 0;
}
}
.goods-item_left {
display: flex;
width: 35%;
background: #fff;
align-items: center;
.image {
display: block;
margin-top: 20rpx;
width: 200rpx;
height: 157rpx;
border-radius: 6rpx;
}
}
.goods-item_right {
position: relative;
width: 65%;
.goods-name {
margin-top: 20rpx;
height: 40rpx;
line-height: 1.0;
white-space: normal;
color: #484848;
font-size: 30rpx;
}
}
.goods-item_desc {
margin-top: 0rpx;
.coupon-attr {
.attr-l {
float:left;
width: 70%;
}
.attr-r {
margin-top:20rpx;
float:left;
}
}
}
.desc-selling_point {
width: 400rpx;
font-size: 24rpx;
color: #e49a3d;
}
.receive {
height: 46rpx;
width: 128rpx;
line-height: 46rpx;
text-align: center;
border: 1px solid #f8df00;
border-radius: 5rpx;
color: #f86d48;
background: #f8df98;
font-size: 22rpx;
&.state {
border: none;
color: #cccccc;
background: #F5F5F5;
}
}
.desc-goods_sales {
color: #999;
font-size: 24rpx;
}
.desc_footer {
font-size: 24rpx;
.price_x {
margin-right: 16rpx;
color: #f03c3c;
font-size: 30rpx;
}
.price_y {
text-decoration: line-through;
}
}
}
}
}
</style>