Files
yimo-resource-blog/pages/mine/lottery.vue

340 lines
8.5 KiB
Vue
Raw Permalink Normal View History

2025-08-14 15:04:24 +08:00
<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不能等于44是立即抽奖
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>