340 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<template>
 | 
						||
	
 | 
						||
	<view class="">
 | 
						||
		    <view class="custom-navbar">
 | 
						||
		      <text style="font-size: 40rpx;" @click="back()" class="cuIcon-back"></text>
 | 
						||
		      <view class="title">幸运大抽奖</view>
 | 
						||
		      <view class="back-button">
 | 
						||
		      </view>
 | 
						||
		    </view>
 | 
						||
		<choujian style="position: absolute;" ref='choujian' :nImg='nImg' :AwardList="AwardList" :sjNum="sjNum"
 | 
						||
			:lotteryType="lotteryType" @updateMoney="updateMoney" @lookAd="lookAd" @noChance="noChance">
 | 
						||
		</choujian>
 | 
						||
		<view class="tip-box">100%中奖,积分中不停</view>
 | 
						||
		<view class="log-box">
 | 
						||
			<!-- 通知 -->
 | 
						||
			<view class="inform">
 | 
						||
				<view class="inform-info">
 | 
						||
					<view class="info">
 | 
						||
						<swiper class="swiper" :circular="true" :vertical="true" :indicator-dots="false"
 | 
						||
							:autoplay="true" :interval="3000" :duration="1000">
 | 
						||
							<swiper-item v-for="(item,index) in lotteryLog" :key="index">
 | 
						||
								<view class="swiper-item"><text class="one-omit">
 | 
						||
										<text class="cuIcon-vip"
 | 
						||
											style="margin-right: 10rpx;font-size: 23rpx;color: #fcc600;"></text>
 | 
						||
										微信用户_{{item.lotteryUserId}} 抽中了 {{item.name}}</text>
 | 
						||
								</view>
 | 
						||
							</swiper-item>
 | 
						||
						</swiper>
 | 
						||
					</view>
 | 
						||
				</view>
 | 
						||
			</view>
 | 
						||
		</view>
 | 
						||
 | 
						||
		<view class="cu-modal" :class="modalName=='Modal'?'show':''">
 | 
						||
			<view style="border-radius: 30rpx;" class="cu-dialog">
 | 
						||
				<view class="cu-bar bg-white justify-end">
 | 
						||
					<view style="color: black;font-size: 38rpx;margin-top: 50rpx;" class="content">提示</view>
 | 
						||
				</view>
 | 
						||
				<view class=" bg-white">
 | 
						||
					<view style="font-size: 35rpx;color: #6a6a6a;padding: 40rpx 60rpx 60rpx 60rpx;">
 | 
						||
						{{lotteryMsg}}
 | 
						||
					</view>
 | 
						||
 | 
						||
					<button @tap="hideModal" style="margin-bottom: 50rpx;width: 55%;height: 90rpx;font-size: 38rpx;"
 | 
						||
						class="cu-btn bg-green">知道了</button>
 | 
						||
				</view>
 | 
						||
			</view>
 | 
						||
		</view>
 | 
						||
		<view class="cu-modal" :class="modalName=='nowLookAd'?'show':''">
 | 
						||
			<view style="border-radius: 30rpx;" class="cu-dialog">
 | 
						||
				<view class="cu-bar bg-white justify-end">
 | 
						||
					<view style="color: black;font-size: 38rpx;margin-top: 50rpx;" class="content">提示</view>
 | 
						||
					<view class="action" @tap="hideModal">
 | 
						||
						<text class="cuIcon-close text-red"></text>
 | 
						||
					</view>
 | 
						||
				</view>
 | 
						||
				<view class=" bg-white">
 | 
						||
					<view style="font-size: 35rpx;color: #6a6a6a;padding: 40rpx 60rpx 60rpx 60rpx;">
 | 
						||
						今日免费抽奖次数已用完,观看视频后可额外获得一次抽奖机会哟
 | 
						||
					</view>
 | 
						||
 | 
						||
					<button @tap="nowLookAd" style="margin-bottom: 50rpx;width: 55%;height: 90rpx;font-size: 38rpx;"
 | 
						||
						class="cu-btn bg-green">观看视频</button>
 | 
						||
				</view>
 | 
						||
			</view>
 | 
						||
		</view>
 | 
						||
		<view class="bottom-guard"></view>
 | 
						||
	</view>
 | 
						||
</template>
 | 
						||
 | 
						||
<script>
 | 
						||
	import {
 | 
						||
		lottery,
 | 
						||
		lotteryAdd,
 | 
						||
		listLottery,
 | 
						||
		listLotteryLog
 | 
						||
	} from "@/api/app/index.js"
 | 
						||
	import config from '@/config'
 | 
						||
	import Choujian from '@/components/gb-choujiang/gb-choujiang';
 | 
						||
	let videoAd = null;
 | 
						||
	export default {
 | 
						||
		components: {
 | 
						||
			Choujian
 | 
						||
		},
 | 
						||
		data() {
 | 
						||
			return {
 | 
						||
				adUnitId: "",
 | 
						||
				baseUrl: config.baseUrl,
 | 
						||
				modalName: "",
 | 
						||
				userid: null,
 | 
						||
				// 背景图,可网络地址,可本地
 | 
						||
				nImg: 'https://img.yidaima.cn/luck-1752b306ed4b480b9258b22983a859f6',
 | 
						||
				// 中奖的索引,也就是AwardList数组的索引,sjNum不能等于4,4是立即抽奖
 | 
						||
				sjNum: 0,
 | 
						||
				// false前端,true前端
 | 
						||
				isQd: true,
 | 
						||
				// 可自己后端获取,也可以后端  percentage为概率 10代表10%   100代表100%   注意:必须要有一个概率为100%,
 | 
						||
				AwardList: [],
 | 
						||
				lotteryType: 0,
 | 
						||
				lotteryMsg: "",
 | 
						||
				index: -1,
 | 
						||
				queryParams: {
 | 
						||
					pageNum: 1,
 | 
						||
					pageSize: 6,
 | 
						||
				},
 | 
						||
				lotteryLog: []
 | 
						||
			}
 | 
						||
		},
 | 
						||
		onLoad() {
 | 
						||
			var that = this
 | 
						||
			this.adUnitId = uni.getStorageSync("sysSet").adVideoAd
 | 
						||
			//初始化激励广告
 | 
						||
			this.CreateAd()
 | 
						||
			this.userid = uni.getStorageSync("userInfo").userId
 | 
						||
			listLottery().then(response => {
 | 
						||
				// for (var i = 0; i < response.rows.length; i++) {
 | 
						||
				// 	response.rows[i].image = that.baseUrl + response.rows[i].image
 | 
						||
				// }
 | 
						||
				that.AwardList = response.rows
 | 
						||
			})
 | 
						||
			listLotteryLog(this.queryParams).then(response => {
 | 
						||
				that.lotteryLog = response.rows
 | 
						||
			})
 | 
						||
			this.getData()
 | 
						||
		},
 | 
						||
		methods: {
 | 
						||
			// 中奖后的逻辑
 | 
						||
			updateMoney(money) {
 | 
						||
				var that = this
 | 
						||
				lotteryAdd({
 | 
						||
					source: '抽奖',
 | 
						||
					userId: this.userid,
 | 
						||
					isAdd: 0,
 | 
						||
					integralNumber: that.AwardList[money].reward,
 | 
						||
					fId: that.AwardList[money].id
 | 
						||
				}).then(response => {
 | 
						||
					that.lotteryMsg = "恭喜获得:" + that.AwardList[money].name
 | 
						||
					setTimeout(() => {
 | 
						||
						that.modalName = "Modal"
 | 
						||
					}, 500);
 | 
						||
 | 
						||
					// 中奖后获取最新状态
 | 
						||
					that.getData()
 | 
						||
				})
 | 
						||
 | 
						||
 | 
						||
 | 
						||
			},
 | 
						||
			lookAd(index) {
 | 
						||
				// this.$refs.choujian.nowBegin(index);
 | 
						||
				this.index = index
 | 
						||
				this.modalName = 'nowLookAd'
 | 
						||
			},
 | 
						||
			nowLookAd() {
 | 
						||
				this.modalName = ''
 | 
						||
				if (videoAd) {
 | 
						||
					videoAd.show().catch(() => {
 | 
						||
						// 失败重试
 | 
						||
						videoAd.load()
 | 
						||
							.then(() => videoAd.show())
 | 
						||
							.catch(err => {
 | 
						||
								console.error('激励视频 广告显示失败', err)
 | 
						||
							})
 | 
						||
					})
 | 
						||
				}
 | 
						||
			},
 | 
						||
			noChance() {
 | 
						||
				this.lotteryMsg = "今日抽奖次数已用完,请明日再来 !"
 | 
						||
				this.modalName = "Modal"
 | 
						||
			},
 | 
						||
			hideModal() {
 | 
						||
				this.modalName = null
 | 
						||
			},
 | 
						||
			// 获取本次中奖的
 | 
						||
			getData() {
 | 
						||
				var that = this
 | 
						||
				// 概率指定,如果是前端控制,如果后端控制下面步骤判断步骤可以省略  直接后端获取sjNum值即可
 | 
						||
				if (this.isQd) {
 | 
						||
					// ------------------------------这里写获取后端中奖索引
 | 
						||
					// 后端赋值控制概率
 | 
						||
					lottery({}).then(response => {
 | 
						||
						that.lotteryType = response.lotteryType
 | 
						||
						that.sjNum = response.sjNum
 | 
						||
						console.log("后端随机数: ", response.sj);
 | 
						||
						console.log("后端中奖索引: ", response.sjNum);
 | 
						||
 | 
						||
					})
 | 
						||
				} else {
 | 
						||
					// 概率控制  概率100%
 | 
						||
					console.log(Math.random())
 | 
						||
					let sj = Math.round(Math.random() * 99 + 1)
 | 
						||
				}
 | 
						||
			},
 | 
						||
			back() {
 | 
						||
				uni.navigateBack()
 | 
						||
			},
 | 
						||
			CreateAd() {
 | 
						||
				var that = this;
 | 
						||
				if (this.adUnitId != '') {
 | 
						||
					if (wx.createRewardedVideoAd) {
 | 
						||
						videoAd = wx.createRewardedVideoAd({
 | 
						||
							adUnitId: this.adUnitId
 | 
						||
						})
 | 
						||
						videoAd.onLoad(() => {})
 | 
						||
						videoAd.onError((err) => {
 | 
						||
							that.$refs.uToast.show({
 | 
						||
								type: 'error',
 | 
						||
								title: '',
 | 
						||
								message: "请使用移动端设备访问",
 | 
						||
								icon: false
 | 
						||
							})
 | 
						||
						})
 | 
						||
						videoAd.onClose((res) => {
 | 
						||
							if (res && res.isEnded) {
 | 
						||
								// that.$refs.uToast.show({
 | 
						||
								// 	type: 'success',
 | 
						||
								// 	title: '',
 | 
						||
								// 	message: "╮(๑•́ ₃•̀๑)╭ 谢谢您的支持 ",
 | 
						||
								// 	icon: false
 | 
						||
								// })
 | 
						||
								that.$refs.choujian.nowBegin(that.index);
 | 
						||
							} else {}
 | 
						||
						})
 | 
						||
					}
 | 
						||
 | 
						||
				}
 | 
						||
			}
 | 
						||
 | 
						||
		}
 | 
						||
	}
 | 
						||
</script>
 | 
						||
 | 
						||
<style scoped lang="scss">
 | 
						||
	.tip-box {
 | 
						||
		position: relative;
 | 
						||
		background: linear-gradient(to right, #FE1C62, #FC8524);
 | 
						||
		height: 55rpx;
 | 
						||
		width: 70%;
 | 
						||
		left: 15%;
 | 
						||
		top: 235rpx;
 | 
						||
		text-align: center;
 | 
						||
		line-height: 55rpx;
 | 
						||
		color: #fff;
 | 
						||
		font-weight: 600;
 | 
						||
		border-radius: 15rpx;
 | 
						||
		letter-spacing: 10rpx;
 | 
						||
		box-shadow:
 | 
						||
			0 -2px 2px rgba(255, 255, 255, 0.4),
 | 
						||
			/* 上阴影 */
 | 
						||
			0 2px 2px rgba(255, 255, 255, 0.4),
 | 
						||
			/* 下阴影 */
 | 
						||
			2px 0 2px rgba(255, 255, 255, 0.4),
 | 
						||
			/* 左阴影 */
 | 
						||
			-2px 0 2px rgba(255, 255, 255, 0.4);
 | 
						||
		/* 右阴影 */
 | 
						||
	}
 | 
						||
 | 
						||
	.log-box {
 | 
						||
		position: relative;
 | 
						||
		height: 65rpx;
 | 
						||
		width: 56%;
 | 
						||
		left: 22%;
 | 
						||
		top: 1150rpx;
 | 
						||
	}
 | 
						||
 | 
						||
	/* 通知 */
 | 
						||
	.inform {
 | 
						||
 | 
						||
		.inform-info {
 | 
						||
			display: flex;
 | 
						||
			padding: 0 20rpx;
 | 
						||
			height: 65rpx;
 | 
						||
			background-color: rgba(0, 0, 0, 0.1);
 | 
						||
			border-radius: 50rpx;
 | 
						||
 | 
						||
			.picture {
 | 
						||
				width: 20%;
 | 
						||
				height: 100%;
 | 
						||
 | 
						||
				image {
 | 
						||
					width: 93rpx;
 | 
						||
					height: 84rpx;
 | 
						||
					margin-top: -20rpx;
 | 
						||
				}
 | 
						||
			}
 | 
						||
 | 
						||
			.info {
 | 
						||
				width: 100%;
 | 
						||
				height: 100%;
 | 
						||
 | 
						||
				.swiper {
 | 
						||
					width: 100%;
 | 
						||
					height: 100%;
 | 
						||
 | 
						||
					.swiper-item {
 | 
						||
						line-height: 65rpx;
 | 
						||
						text-align: center;
 | 
						||
						width: 100%;
 | 
						||
						height: 100%;
 | 
						||
 | 
						||
						text {
 | 
						||
							font-size: 24rpx;
 | 
						||
							color: #ffffff;
 | 
						||
						}
 | 
						||
					}
 | 
						||
				}
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
	.custom-navbar {
 | 
						||
	  /* 自定义导航栏样式 */
 | 
						||
	  display: flex;
 | 
						||
	  align-items: center;
 | 
						||
	  padding: 60px 10px 10px 10px;
 | 
						||
	  background-color: #F118E3;
 | 
						||
	  color: #FFFFFF;
 | 
						||
	}
 | 
						||
	.title {
 | 
						||
	  flex: 1;
 | 
						||
	  text-align: center;
 | 
						||
	}
 | 
						||
	.back-button {
 | 
						||
	  padding: 10px;
 | 
						||
	}
 | 
						||
	page {
 | 
						||
		background-color: #1015F2;
 | 
						||
		--safe-area-inset-bottom: env(safe-area-inset-bottom); /* 设置底部安全区域 */
 | 
						||
	}
 | 
						||
	page {
 | 
						||
	}
 | 
						||
	 
 | 
						||
	.bottom-guard {
 | 
						||
	  height: calc(var(--safe-area-inset-bottom)); /* 假设你需要的底部保护区域高度是100px */
 | 
						||
	  background-color: #1015F2; /* 设置你想要的颜色 */
 | 
						||
	  position: fixed;
 | 
						||
	  left: 0;
 | 
						||
	  right: 0;
 | 
						||
	  bottom: 0;
 | 
						||
	}
 | 
						||
</style> |