You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

422 lines
13 KiB
Vue

<template>
<s-layout class="set-wrap" title="活动" :bgStyle="{ color: '#FFF' }">
<view class="_bgc">
<view class="_bg1">
<!-- <text class="_jf">5积分抽奖一次</text>
<view class="_cont">
<view class="_left">
<image src="https://obs-sdwh.cucloud.cn/cdz/jinbi.png" class="_jinbi"></image>
<text>开心贷</text>
</view>
<view class="_mid">抽到99元优惠券</view>
<view class="_right">4秒前</view>
</view> -->
</view>
<view class="container">
<!-- <view class="container_circle" v-for="(v, i) in circleList" :key="i"
:style="{ 'top': v.topCircle + 'rpx', 'left': v.leftCircle + 'rpx', 'background-color': (i % 2 == 0) ? oneCircleColor : twoCircleColor }">
</view> -->
<view class="container_content">
<view class="content_out" v-for="(v, i) in prizeList" :key="i" :style="{
top: v.topAward + 'rpx',
left: v.leftAward + 'rpx',
background: i == indexSelect ? prizeCheckColor : '',
animation: 'animatebox 4s linear infinite'
}">
<image class="award_image" :src="v.Img"></image>
<!-- {{ v.name }} -->
</view>
<view class="content_btn" @tap="handleStart"
:style="{ 'background-color': isRunning ? '#55ffff' : '' }">
<view class="_diji">点击</view>
<view>抽奖</view>
</view>
</view>
<!-- <view class="container_num">剩余抽奖次数{{ luckDrawNum }}</view> -->
</view>
<view class="_btnWrap">
<view class="_btn" @tap="sheep.$router.go('/pages/user/PrizesWon')"></view>
<view class="_btn" @tap="sheep.$router.go('/pages/user/ActivityRules')"></view>
</view>
</view>
</s-layout>
</template>
<script setup>
import { ref } from 'vue'
import { onLoad, onReachBottom, onShow, onUnload, onHide } from '@dcloudio/uni-app';
import MineApi from '@/sheep/api/prize/index'
import sheep from '@/sheep';
const prizeList = ref([]) // 奖品数组
const prizeCheckColor = ref('linear-gradient(72.5deg, #aa0000, #ff0000, #ff00ff, #550000, #ffaaff, #aa0000, #ff0000)') // 奖品的选中颜色
const indexSelect = ref(0) //被选中的奖品index
const isRunning = ref(false) //是否正在抽奖
const imgList = ref([
'https://cdn.cnbj1.fds.api.mi-img.com/nr-pub/202209261921_a1b840c267bd26bcf4dc654d52f259e5.png?w=800&h=800',
'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/0bcd64f412dfb5e15695fa96d21ecb23.png?w=800&h=800',
'https://cdn.cnbj1.fds.api.mi-img.com/nr-pub/202208111030_e3554c41e0484da99b16bb9e02142e68.png?w=800&h=800',
'https://cdn.cnbj0.fds.api.mi-img.com/b2c-shopapi-pms/pms_1653393310.29013051.png',
'https://cdn.cnbj1.fds.api.mi-img.com/nr-pub/202209261921_a1b840c267bd26bcf4dc654d52f259e5.png?w=800&h=800',
'https://cdn.cnbj0.fds.api.mi-img.com/b2c-shopapi-pms/9E253411E26FD16C7215D7E74321FA45.png',
'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/cc0be95d45d0063b0aa8bb541be22c77.png?w=800&h=800',
'https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/0c4b5e30d14ca8b51dc6fa6917295ff5.png?w=800&h=800'
]) //奖品图片数组
const prizelist = ref([]) //奖品列表
let showFloag = ref(true)
let HDid = ref()
onLoad(async () => {
const r = await MineApi.ActivityRules()
HDid.value = r.data?.id
const res = await MineApi.prizeImg(HDid.value)
prizelist.value = res.data
imgList.value = []
res.data.forEach((value, index) => {
imgList.value.push(value.imgUrl)
})
for (let i = 0; i < 24; i++) {
let prizeList_on = []
//间距,怎么顺眼怎么设置吧.
let topAward = 10
let leftAward = 10
for (let j = 0; j < 8; j++) {
if (j == 0) {
topAward = 5
leftAward = 10
} else if (j < 3) {
topAward = topAward
//166.6666是宽.15是间距.下同
leftAward = leftAward + 176.6666 + 15
} else if (j < 5) {
leftAward = leftAward
//150是高,15是间距,下同
topAward = topAward + 160 + 15
} else if (j < 7) {
leftAward = leftAward - 176.6666 - 15
topAward = topAward
} else if (j < 8) {
leftAward = leftAward
topAward = topAward - 160 - 15
}
// let imgList = this.imgList[j];
let Img = imgList.value[j]
prizeList_on.push({ topAward, leftAward, Img, id: res.data[j].id, name: res.data[j].name })
}
prizeList.value = prizeList_on
}
})
// 点击开始
const handleStart = async () => {
console.log('抽奖开始,');
if (isRunning.value) return
const res = await MineApi.lottery(HDid.value)
isRunning.value = true
let floag = ref()
for (let i = 0; i < prizelist.value.length; i++) {
if (prizelist.value[i]?.id == res.data?.id) {
floag.value = res.data.id
break
}
}
indexSelect.value = 0
let indexSelect_med = 0
let i = 0
let timer = setInterval(() => {
console.log('floag', floag.value);
//去除循环
if (!showFloag.value) {
clearInterval(timer)
isRunning.value = false
}
indexSelect_med++
// 光标跳动
indexSelect_med = indexSelect_med % 8
indexSelect.value = indexSelect_med
i += 30
let randomNum = 1000 + Math.ceil(Math.random() * 1000) //控制奖品
if (i > randomNum && prizeList.value[indexSelect.value].id === floag.value) {
//去除循环
clearInterval(timer)
//获奖提示
// if (showFloag.value) {
// if (!res.data?.id) {
// uni.showModal({
// title: '很遗憾',
// content: '祝君好运',
// showCancel: false,
// success: (res) => {
// if (res.confirm) {
// isRunning.value = false
// }
// }
// })
// return
// }
uni.showModal({
// title: '恭喜您',
// content: '获得了第' + (indexSelect.value) + '个奖品',
content: '抽中' + (res.data.name) + '',
showCancel: false,
success: (res) => {
if (res.confirm) {
isRunning.value = false
}
}
})
// }
isRunning.value = false
}
}, 200 + i)
}
onHide(() => {
showFloag.value = false
})
onUnload(() => {
showFloag.value = false
})
onShow(() => {
showFloag.value = true
})
</script>
<style lang="scss" scoped>
._bg1 {
background-image: url('https://obs-sdwh.cucloud.cn/cdz/beijing1.png');
width: 80%;
height: 150rpx;
background-repeat: no-repeat;
background-size: 100% 100%;
overflow: hidden;
margin: 370rpx auto 0;
font-size: 22rpx;
position: relative;
._jf {
position: absolute;
left: 240rpx;
top: 40rpx;
color: white;
}
._cont {
display: flex;
justify-content: space-around;
align-items: center;
color: white;
letter-spacing: 2rpx;
height: 100%;
margin-top: 35rpx;
._left {
display: flex;
align-items: center;
._jinbi {
width: 40rpx;
height: 40rpx;
margin-right: 10rpx;
}
}
}
}
._bgc {
background-image: url('https://obs-sdwh.cucloud.cn/cdz/cjBg.png');
width: 100%;
height: 100vh;
background-repeat: no-repeat;
background-size: 100% 100%;
overflow: hidden;
}
.container {
position: relative;
height: 600rpx;
width: 650rpx;
margin: 0 auto;
border-radius: 40rpx;
// background: linear-gradient(72.5deg, #e9f78c, #ffffb9, #cc55e5, #ef9bcb, #e5b8d8, #ffb140, #f7ed54);
// background-color: #FFB62F;
background-image: url('https://obs-sdwh.cucloud.cn/cdz/beijing2.png');
background-repeat: no-repeat;
background-size: 100% 100%;
// background-size: 400%;
animation: animatebox 4s linear infinite;
@keyframes animatebox {
0% {
background-position: 0%;
}
50% {
background-position: 100%;
}
100% {
background-position: 0%;
}
}
.container_circle {
position: absolute;
display: block;
border-radius: 50%;
height: 20rpx;
width: 20rpx;
}
.container_content {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
width: 580rpx;
height: 530rpx;
background-color: #ca2c01;
border-radius: 40rpx;
margin: auto;
// background: linear-gradient(72.5deg, #ef499c, #cc55e5, #ffb140, #f7ed54, #ffb140, #cc55e5, #ef499c);
background-size: 400%;
animation: animate1 4s linear infinite;
@keyframes animate1 {
0% {
background-position: 0%;
}
50% {
background-position: 100%;
}
100% {
background-position: 0%;
}
}
.content_out {
position: absolute;
height: 160rpx;
width: 176.6666rpx;
// background-color: #f5f0fc;
background-image: url('https://obs-sdwh.cucloud.cn/cdz/g1.png');
background-repeat: no-repeat;
background-size: 100% 100%;
border-radius: 15rpx;
box-shadow: 0 5px 0 #ff8327;
.award_image {
position: absolute;
margin: auto;
top: 0;
left: 0;
bottom: 0;
right: 0;
height: 140rpx;
width: 130rpx;
background-repeat: no-repeat;
background-size: 100% 100%;
background-image: url('https://obs-sdwh.cucloud.cn/cdz/xxcy.png');
}
}
.content_btn {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 15rpx;
height: 160rpx;
width: 176.6666rpx;
background-color: #ffe400;
box-shadow: 0 5rpx 0 #e7930a;
color: white;
text-align: center;
font-size: 44rpx;
font-weight: bolder;
background-color: #ff8859;
// line-height: 150rpx;
// background: linear-gradient(72.5deg, #f7a0ec, #ffb140, #e58da0, #ef7ecb, #ab9ae5, #ffec8a, #f6f7a6);
// background-size: 400%;
background-image: url('https://obs-sdwh.cucloud.cn/cdz/g5.png');
background-size: 100% 100%;
background-repeat: no-repeat;
animation: animate 4s linear infinite;
._diji {
margin-top: 14rpx;
}
@keyframes animate {
0% {
background-position: 0%;
}
50% {
background-position: 100%;
}
100% {
background-position: 0%;
}
}
}
}
.container_num {
position: absolute;
top: -130rpx;
left: 50%;
transform: translateX(-50%);
color: white;
// background-image: -webkit-linear-gradient(left, #083a96, #e63609 25%, #083a96 50%, #e63609 75%, #083a96);
// -webkit-text-fill-color: transparent;
background-clip: text;
background-size: 200% 100%;
animation: masked-animation 4s infinite linear;
@keyframes masked-animation {
0% {
background-position: 0 0;
}
100% {
background-position: -100% 0;
}
}
}
}
._btnWrap {
display: flex;
align-items: center;
justify-content: space-around;
margin-top: 40rpx;
._btn {
background-image: url('https://obs-sdwh.cucloud.cn/cdz/anniu.png');
background-repeat: no-repeat;
background-size: 100% 100%;
width: 40%;
height: 100rpx;
text-align: center;
line-height: 90rpx;
color: white;
font-weight: bold;
font-size: 32rpx;
}
}
</style>