cashier_weapp/components/popupad.vue

251 lines
6.0 KiB
Vue

<template>
<view class="viewswiper" v-if="viewswiperShow">
<view class="swiperBox">
<u-swiper
:list="popupadList"
previousMargin="30"
nextMargin="30"
circular
:autoplay="true"
:indicator="false"
keyName="imgUrl"
radius='10'
@change="e => current = e.current"
@click="swiperClick"
bgColor="transparent" height='720'
>
<view slot="indicator" class="indicator">
<!-- <view class="indicator__dot" v-for="(item, index) in carousel" :key="index"
:class="[index === current && 'indicator__dot--active']"
:style="[index === current && {'width':16+'px'}]">
</view> -->
</view>
</u-swiper>
</view>
<u-icon name="close-circle" color="#fff" size="70" @click="closeClick"></u-icon>
</view>
</template>
<script>
import dayjs from "dayjs";
// import dayjs from "dayjs";
export default {
data() {
return {
current: 0,
popupadList: [],
viewswiperShow: false,
time: false,
};
},
props: {
showPosition: {
type: String,
default: ''
},
forceUpdate: {
type: Boolean,
default: false
},
},
watch: {
forceUpdate(val,oldval) {
// 在 forceUpdate 改变时执行更新操作
let time = uni.cache.get('popUpTime') ? new Date().getTime() - uni.cache.get('popUpTime') : 1000;
if ( time >= 1000 ) {
uni.cache.set('popUpTime', new Date().getTime())
this.getPopUpAd(); // 重新加载数据
}
}
},
mounted () {
// if (uni.cache.get('shopUser') && uni.cache.get('token')) {
// }
},
methods: {
/**
* 轮播图点击
*/
swiperClick (e) {
let item = this.popupadList[e];
if ( item.linkPath ) {
uni.navigateTo({
url: `${item.linkPath}`
})
}
},
/**
* 关闭广告
*/
closeClick () {
this.viewswiperShow = false;
},
/**
* 获取弹窗广告
*/
async getPopUpAd () {
let res = await this.api.getPopUpAd({
shopId: uni.cache.get('shopUser')
})
if (res.code == 0) {
this.popupadList = [];
// console.log(this.showPosition)
// console.log(this.showPosition)
// console.log(!uni.cache.get('popUpData'))
if (!uni.cache.get('popUpData')) {
res.data.forEach((item,index)=>{
if ( item.showPosition == this.showPosition) {
item["popUpTime"] = dayjs().format('YYYY-MM-DD');
this.popupadList.push(item);
}
})
uni.cache.set('popUpData', this.popupadList)
} else {
let popUpData = uni.cache.get('popUpData');
res.data.forEach((item1,index1)=>{
if ( popUpData.filter(obj => obj.id == item1.id).length > 0 ) {
let obj = popUpData.filter(obj => obj.id == item1.id)[0];
// console.log(this.showPosition)
// console.log(item1.updateTime, obj.updateTime)
// console.log(item1.showPosition == this.showPosition,this.isFrequency(item1.frequency,item1.popUpTime),item1.updateTime != obj.updateTime)
if ( (item1.showPosition == this.showPosition && this.isFrequency(item1.frequency,item1.popUpTime)) || ( item1.showPosition == this.showPosition && item1.updateTime != obj.updateTime) ) {
item1["popUpTime"] = dayjs().format('YYYY-MM-DD');
this.popupadList.push(item1)
}
popUpData.forEach((item,index)=>{
if ( item.id == item1.id && JSON.stringify(item1) != JSON.stringify(item) ) {
popUpData[index]= item1;
}
})
} else {
if ( item1.showPosition == this.showPosition) {
item1["popUpTime"] = dayjs().format('YYYY-MM-DD');
this.popupadList.push(item1);
popUpData.push(item1);
}
}
})
// console.log(popUpData)
uni.cache.set('popUpData', popUpData)
// console.log(this.popupadList)
// updateTime
}
if ( this.popupadList.length > 0 ) {
this.viewswiperShow = true;
}
}
},
isFrequency (frequency,popUpTime) {
switch (frequency) {
case "only_one": //仅首次展示
return false;
break;
case 'every_show': //每次打开都展示
return true;
break;
case 'every_day': //每天展示一次
// return this.isTime("2024-08-22",1);
return this.isTime(frequency,1);
break;
case 'three_day': //3天展示一次
// return this.isTime("2024-08-20",1);
return this.isTime(frequency,3);
break;
case 'seven_day': //7天展示一次
// return this.isTime("2024-08-16",1);
return this.isTime(frequency,7);
break;
case 'thirty_day': //30天展示一次
// return this.isTime("2024-07-24",1);
return this.isTime(frequency,30);
break;
}
},
isTime (popUpTime,num) {
// 获取当前日期
let date1 = dayjs();
let date2 = dayjs(popUpTime).format('YYYY-MM-DD');
// console.log(date1.diff(date2, "day"))
if ( date1.diff(date2, "day") >= num ) {
return true;
} else {
return false;
}
}
}
};
</script>
<style scoped lang="scss">
page{
width: 100%;
height: 100%;
}
.viewswiper {
width: 100%;
height: 100%;
position: fixed;
top: 0;
left: 0;
background-color: rgba(0,0,0,0.5);
z-index: 999;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.swiperBox{
width: 80%;
margin-bottom: 50rpx;
}
.swiper__wrapper__item__wrapper__image{
border-radius: 10rpx;
}
.indicator {
margin-bottom: 46rpx;
@include flex(row);
justify-content: center;
&__dot {
height: 6px;
width: 6px;
border-radius: 100px;
background-color: rgba(255, 255, 255, 0.35);
margin: 0 5px;
transition: background-color 0.3s;
&--active {
background-color: #ffffff;
}
}
.indicator_img{
}
}
.indicator-num {
padding: 2px 0;
background-color: rgba(0, 0, 0, 0.35);
border-radius: 100px;
width: 35px;
@include flex;
justify-content: center;
&__text {
color: #FFFFFF;
font-size: 12px;
}
}
}
</style>