Files
yimo-resource-blog/pages/mine/lottery.vue
王鹏 a47c6dd47a init
2025-08-14 15:04:24 +08:00

340 lines
8.5 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="">
<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>