jxg/jinxiangguo-home-master/components/popup-lottery/popup-lottery.vue

359 lines
8.5 KiB
Vue

<template>
<view>
<touch-popup ref="popup" background="linear-gradient(180deg, #F7FFC3 0%, #FFFFFF 100%)" :backShow="true">
<scroll-view scroll-y>
<view class="top">
<view class="top-left">
今日活动
</view>
<view v-if="userInfo" class="top-right">
<view class="price-bck">
<view class="logo-bck">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/trace/logo-balance.png" mode="widthFix"></image>
</view>
{{userInfo.amount}}
</view>
</view>
</view>
<view class="top-icon">
<!-- <image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/xiangguo.png" mode="heightFix"></image> -->
</view>
<view class="hint">
<view class="center">
橡果大转盘
</view>
<view class="center">
轻松解锁更多踪迹
</view>
</view>
<view class="center">
<view class="lottery">
<view v-for="(item,index) in lotteryList" key="lottery" class="center">
<view class="lottery-item" :class="{check: item.check}">
<view class="">
<image src="https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/xiangguo-black.png" mode="widthFix"></image>
</view>
<view class="">
{{item.amount}}
</view>
</view>
</view>
</view>
</view>
<view class="center" style="padding: 15px;">
<view class="btn center" @click="startLottery">
<text v-if="lotteryFree">{{!isLottery ? '免费抽奖' : '正在抽奖...'}}</text>
<text v-else>{{!isLottery ? (lotteryPrice + '橡果抽一次') : '正在抽奖...'}}</text>
</view>
</view>
<view class="bottom-terms">
<view @click="openTerms1Popup">
使用条款
</view>
<view @click="openTerms2Popup">
隐私政策
</view>
</view>
</scroll-view>
</touch-popup>
<touch-popup ref="terms1Popup" :backShow="true"
background="linear-gradient(180deg, #FFFFFB -19.14%, #FFFEEB 50.07%)">
<scroll-view scroll-y style="height: 100%;margin-top: 25px;">
<view class="terms-text">
这里是使用条款
</view>
</scroll-view>
</touch-popup>
<popup-agreement ref="pAgreementPrivate" :agreementMode="1"></popup-agreement>
</view>
</template>
<script setup>
const app = getApp()
import {
ref,
defineExpose
} from 'vue'
const popup = ref() // ref组件
const terms1Popup = ref()
const pAgreementPrivate = ref()
const userInfo = ref(false)
const lotteryList = ref(false) // 抽奖列表
const lotteryPrice = ref(0) // 抽奖价格
const lotteryFree = ref(false) // 是否免费抽奖
// 抽奖开始闪烁
const isLottery = ref(false) // 正在抽奖标识
var interval = false
const startLottery = () => {
if (isLottery.value) return
for (let i = 0; i < lotteryList.value.length; i++) {
lotteryList.value[i].check = false
}
isLottery.value = true
if (!lotteryFree.value) {
userInfo.value.amount -= lotteryPrice.value
}
let i = 0,
k = 30 // 执行30次时请求后台
interval = setInterval(() => {
if (k === 0) {
golottery()
}
k--
if (i - 1 >= 0) lotteryList.value[i - 1].check = false // 上一个熄灭
if ((i + 1) > lotteryList.value.length) i = 0 // 到底重置
lotteryList.value[i++].check = true
}, 100)
}
const golottery = () => {
uni.request({
url: app.globalData.requestUrl + '/api/lottery/go',
header: {
'Authorization': 'Bearer ' + app.globalData.token
},
method: 'POST',
success(res) {
if (res.data.code === 200) {
uni.request({
url: app.globalData.requestUrl + '/api/user',
header: {
'Authorization': 'Bearer ' + app.globalData.token
},
success: (resuser) => {
app.globalData.userinfo = resuser.data.data
userInfo.value = resuser.data.data
}
}) // 重新请求余额
for (let i = 0; i < lotteryList.value.length; i++) {
let item = lotteryList.value[i]
if (res.data.data.id === item.id) {
lotteryList.value[i].check = true
} else {
lotteryList.value[i].check = false
}
}
isLottery.value = false
lotteryFree.value = false
uni.showToast({
title: '抽奖完成,奖励' + res.data.data.amount,
icon: 'none'
})
} else {
uni.showToast({
title: res.data.msg,
icon: 'none'
})
}
},
fail() {
uni.showToast({
title: '抽奖失败',
icon: 'none'
})
},
complete() {
clearInterval(interval)
}
})
}
const openTerms1Popup = () => {
terms1Popup.value.open()
}
const openTerms2Popup = () => {
pAgreementPrivate.value.open()
}
const open = () => {
userInfo.value = app.globalData.userinfo
if (lotteryList.value) {
popup.value.open()
return
}
uni.showLoading()
uni.request({
url: app.globalData.requestUrl + '/api/lottery/get',
header: {
'Authorization': 'Bearer ' + app.globalData.token
},
success(res) {
console.log(res.data.data)
if (res.data.code === 200) {
lotteryList.value = res.data.data.list
lotteryPrice.value = res.data.data.price
lotteryFree.value = res.data.data.free
popup.value.open()
} else {
uni.showToast({
title: '获取奖品信息失败',
icon: 'none'
})
}
},
fail() {
uni.showToast({
title: '获取奖品信息失败',
icon: 'none'
})
},
complete() {
uni.hideLoading()
}
})
}
defineExpose({
open
}) // 暴露方法
</script>
<style scoped>
.check {
border: 4px solid #8F00FF;
}
.btn text {
background: linear-gradient(180deg, #01F0FD 0%, #17FFA7 100%);
color: transparent;
-webkit-background-clip: text;
}
.btn {
width: 180px;
height: 44px;
font-size: 14px;
background-color: #000;
box-shadow: 0px 4px 0px 0px #7F720040;
border-radius: 22px;
}
.bottom-terms view {
padding: 2px 10px;
}
.bottom-terms {
display: flex;
width: 100%;
align-items: center;
justify-content: center;
position: relative;
bottom: 0;
left: 0;
font-size: 12px;
color: #626262;
}
.lottery-item image {
width: 25px;
height: auto;
}
.lottery-item view {
font-weight: bold;
display: flex;
}
.lottery-item {
margin: 8px;
width: 75px;
height: 75px;
border-radius: 17px;
box-sizing: border-box;
background-color: #fff;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.lottery {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
background: linear-gradient(119.74deg, #C1FF90 0.63%, #13FFB7 100%);
box-shadow: 0px 4px 4px 0px #00000080;
border-radius: 24px;
padding: 8px;
}
.hint view:first-child {
font-size: 22px;
}
.hint {
display: flex;
flex-direction: column;
font-weight: bold;
padding-bottom: 5px;
}
.top-icon image {
height: 180px;
}
.top-icon {
height: 150px;
background: url(https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/xiangguo.png) no-repeat,
url(https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/TreasureHunter.png) no-repeat,
url(https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/star1.png) no-repeat,
url(https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/star2.png) no-repeat,
url(https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/star3.png) no-repeat,
url(https://6a69-jinxiangguo-7g6kqddnb0a8aa47-1326817332.tcb.qcloud.la/img/game/lottery/star4.png) no-repeat;
background-size: 180px, auto 90px, 28px, 52px, 38px, 13px;
background-position: center, center, calc(50% - 104px) 18px, left bottom, calc(50% + 120px) 18px, bottom 25px right 20px;
display: flex;
justify-content: center;
}
.price-bck image {
width: 18px;
}
.logo-bck {
height: 26px;
width: 26px;
background: #FFCC18;
border-radius: 13px;
display: flex;
align-items: center;
justify-content: center;
margin-right: 8px;
}
.price-bck {
height: 26px;
background: rgba(255, 255, 255, .8);
border-radius: 13px;
display: flex;
align-items: center;
padding-right: 12px;
font-size: 12px;
font-weight: 700;
}
.top-left {
flex: 1;
font-size: 18px;
font-weight: bold;
}
.top-right {
flex: 1;
display: flex;
justify-content: flex-end;
}
.top {
display: flex;
padding: 0 15px;
}
scroll-view {
padding-top: 15px;
position: relative;
height: calc(100% - 15px);
}
.terms-text {
height: calc(100% - 15px);
}
</style>