Files

338 lines
7.4 KiB
Vue
Raw Normal View History

<template>
<view v-if="visible">
<view v-if="adInfo.type === 3"
class="mask mask-coupon ad-coupons"
@touchmove.stop.prevent="moveHandle">
<view class="ad-box-warp">
<view class="ad-boxs">
<!-- <image class="img"-->
<!-- :src="adInfo.popupImage"-->
<!-- ></image>-->
<view class="coupon-list">
<scroll-view :scroll-top="0"
class="scrollBox"
scroll-y="true">
<div class="coupon-item" v-for="(item, index) in couponList">
<div class="coupon-left">
<!-- 折扣力度 -->
<div class="discount">
<div class="unit pre-unit" v-if="item.couponType === 1">
</div>
{{item.couponType === 1 ? item.couponValue : item.discount}}
<div class="unit" v-if="item.couponType === 2">
</div>
</div>
</div>
<div class="coupon-right">
<div class="info">
<div class="type">
{{item.couponType === 1 ? '满减券' : '折扣券'}}
</div>
<div class="tip">
{{item.threshold!==0?`(实付${item.threshold}元使用)`:'无门槛使用'}}
</div>
</div>
<!-- button -->
<div class="button get-coupon" @click="receiveCoupon(item.id)">
领取
</div>
</div>
</div>
</scroll-view>
</view>
</view>
<view class="close-btn">
<image :src="adInfo.buttonImage"
class='btn'
mode="widthFix"
@click="close()"></image>
</view>
</view>
</view>
<view v-else class="mask mask-coupon ad-link">
<view class="ad-box-warp">
<view class="ad-boxs"
@click="goRoll()">
<image class="img"
:src="adInfo.popupImage"
mode="widthFix"></image>
</view>
<view class="close-btn">
<image :src="adInfo.buttonImage"
class='btn'
mode="widthFix"
@click="close()"></image>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {onMounted, ref} from 'vue';
import { getAdPopup } from '@/api/global'
import { getCouponListById, receiveACoupon } from '@/api/coupon'
import {orderInfo} from "@/api/order";
import {useRouter} from "@/hooks/useRouter";
import cookie from "@/utils/cookie";
import api from "@/components/canvasShow/config/api";
const {push} = useRouter()
const visible = ref(false)
const adInfo = ref({})
const linkData = ref({})
const couponList = ref([])
const cParams = ref({})
onMounted(() => {
getAd()
})
// 阻止滑动
const moveHandle = () => {
return
}
// 获取广告信息
const getAd = async () => {
adInfo.value = await getAdPopup()
if (adInfo.value.link) {
linkData.value = JSON.parse(adInfo.value.link)
}
visible.value = true
if (adInfo.value.type === 3) {
getCoupons()
}
}
// 查询优惠券
const getCoupons = async () => {
const _items = linkData.value.items.map(item=>{
return item.id
}).join(',')
if (_items) {
const res = await getCouponListById({ids:_items})
couponList.value = res.list
}
}
// 领取优惠券
async function receiveCoupon (id) {
var token = cookie.get('accessToken')
if (token) {
const res = await receiveACoupon(id)
if(res){
uni.showToast({
title: '领取成功',
icon: 'success'
})
}
} else {
uni.showToast({
title: '请先登录',
icon: 'none'
})
uni.navigateTo({
url: '/pages/login/guid'
})
}
}
// 关闭弹窗
const close = () => {
visible.value = false
}
const goRoll = () => {
visible.value = false
switch (adInfo.value.type) {
case 1:
push({url: '/pages/goodsDetail/goodsDetail'}, {data: {id:linkData.value.id}})
break
case 2:
let _id = linkData.value.id[linkData.value.id.length - 1]
push({
url: '/pages/goodsList/goodsList'
}, {
data: {sid: _id}
})
break
case 4:
uni.navigateToMiniProgram({
appId: linkData.value.appId,
path: linkData.value.link,
success(res) {
// 打开成功
}
})
case 5:
push({
url: linkData.value.link
})
break
}
}
</script>
<style scoped
lang="scss">
.mask {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 55;
background-color: rgba(0, 0, 0, 0.7);
}
.mask-coupon {
z-index: 9999;
/*background: rgba(39, 38, 39, .15);*/
display: flex;
justify-content: center;
align-items: center;
.ad-box-warp {
width: 100%;
position: relative;
}
flex-direction: column;
.ad-boxs {
position: relative;
width: 100%;
text-align: center;
.img {
width: 70%;
}
}
.btn-receive {
width: 446rpx;
height: 84rpx;
background: #EC6F43;
border-radius: 42rpx;
display: block;
text-align: center;
font-size: 28rpx;
line-height: 84rpx;
color: #fff;
position: absolute;
bottom: 32rpx;
left: 50%;
margin-left: -223rpx;
}
.close-btn {
position: absolute;
bottom: -70rpx;
left: 50%;
margin-left: -25rpx;
.btn {
width: 50rpx;
height: 50rpx;
}
}
}
.ad-coupons {
.ad-box-warp {
width: 682rpx;
position: relative;
.ad-boxs {
margin-bottom: 20rpx;
.img {
position: absolute;
top:0;
left:0;
width: 100%;
height: 100%;
}
}
}
.coupon-list {
width: 682rpx;
overflow: auto;
.scrollBox {
max-height: 528upx;
}
.coupon-item {
width: 100%;
height: 160rpx;
margin-top: 24rpx;
background: url('https://b2c-pro-static-dev.zkthink.com/static/images/canvas/bg-coupon-l.png') no-repeat;
background-size: 100% 100%;
box-sizing: border-box;
display: flex;
align-items: center;
justify-content: space-between;
&:first-child{
margin-top: 0;
}
.discount{
display: flex;
align-items: baseline;
font-size: 68rpx;
line-height: 64rpx;
font-weight: bold;
.unit{
font-size: 32rpx;
}
}
.info{
font-size: 38rpx;
.type{
font-size: 32rpx;
font-weight: bold;
color: #333333;
line-height: 45rpx;
}
.tip{
font-size: 24rpx;
white-space: nowrap;
}
}
.button{
width: 144rpx;
height: 64rpx;
border-radius: 8rpx;
background: #ee6d46;
font-size: 24rpx;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
}
.disable{
background: #666666;
}
.expired{
background: #999999;
}
.coupon-left{
width: 206rpx;
display: flex;
justify-content: center;
}
.coupon-right{
flex: 1;
display: flex;
padding: 0 32rpx;
justify-content: space-between;
align-items: center;
}
}
}
}
</style>