web-zk-h5/components/giftDrwal/index.vue

792 lines
16 KiB
Vue
Raw Permalink 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>
<u-popup :show='newVip' mode="center">
<view class="wrap_close_center">
<img :src="closeImg" @click="clickClose" />
</view>
<view class="gameBox">
<view class="start" @click="move">
<view class="lovesmart">
<img src="@../../static/images/lovesmart.png" alt="" />
</view>
<view class='starttitle'>
<view class="thestarttext">{{$t('w_0193')}}</view>
<p>{{$t('w_0194')}}{{ number_of_draws }}</p>
</view>
</view>
<ul>
<li v-for="(item, i) in giftList" :key="i" :class="['item' + (i + 1), { active: index == i }]">
<view class="img1">
<img :src="item.giftCover" alt="" />
</view>
<p>{{ item.giftName }}</p>
</li>
</ul>
</view>
</u-popup>
<!-- 抽奖获得产品 -->
<u-popup class="chanpin" mode="center" :show="prizeShow">
<div class="wrap">
<div class="turntable">
<div class="bg-closes">
<div class="bg-img">
<image src="../../static/images/bg-cologs.jpg"></image>
</div>
<div>
<img class="close-icons" style="width: 25rpx; height: 25rpx" :src="closeImg1"
@click="prizeClose" />
</div>
<div class="prize" style="position: relative;z-index: 11;display: block;align-items: none;">
<div class="width-flex-s">
<div class="top_texts" style="margin-top:110rpx;background-image: none;">{{$t('w_0195')}}</div>
<div class="top_texts overflow1">
{{ productData.giftName || "" }}
</div>
</div>
<div class="banner-bottom">
<swiper v-if="productData.acGiftConfigList.length>2" circular="true" vertical="true"
autoplay="true" interval="3000" duration="1000" class="margin-right30 swiperBox">
<swiper-item v-for="(item,index) in productData.acGiftConfigList" :key="index"
class="row-me row-center swiperItem">
<div class="item-s" v-for="(item, index) in productData.acGiftConfigList"
:key="index">
<div class="product">{{$t('ENU_N_B_T_3')}}{{item.productName}} x{{item.quantity}}</div>
<div class="price">{{$t('w_0196')}}{{ item.retailPrice | numFilter }}{{$t('w_0197')}}</div>
</div>
</swiper-item>
</swiper>
<div v-else>
<div class="item-s" style="align-items: center"
v-for="(item, index) in productData.acGiftConfigList" :key="index">
<div class="product">{{$t('ENU_N_B_T_3')}}{{item.productName}} x{{item.quantity}}</div>
<div class="price">{{$t('w_0196')}}{{ item.retailPrice | numFilter }}{{$t('w_0197')}}</div>
</div>
</div>
</div>
<div style="text-align: center">
<img class="margin-tops" style="height: 150px;margin-top: 110rpx"
:src="productData.giftCover" />
</div>
</div>
</div>
</div>
</div>
</u-popup>
<!-- 充值抽奖次数 -->
<u-popup mode="center" :show="rechargeShow" class="pay_password" closeable @close="rechargeShow=false">
<view class="pay_item">
<view class="pay_pt1">{{$t('w_0198')}}</view>
<view style="font-size: 26rpx;margin: 20rpx 0;">
<view>{{$t('w_0199')}}{{totalSurplusNum}}</view>
<view>{{$t('w_0194')}}0</view>
</view>
<u-input type="number" :placeholder="$t('w_0200')" v-model="keyValue" clearable>
</u-input>
<view class="czbtnbox">
<u-button class="btn" shape="circle" color="#D61820" @click="closeBtn">{{$t('MY_WAL_4')}}</u-button>
</view>
</view>
</u-popup>
<!-- <Pay :isPay="isPay" @closePay="closePay" :paramsPost="paramsPost"></Pay> -->
</view>
</template>
<script>
import * as act from "@/config/activity.js";
// import Pay from "@/components/Pay.vue";
export default {
// components: {
// Pay,
// },
data() {
return {
isPay: false,
giftList: [{
id: 1,
number: 15,
prize_name: "欢乐豆1"
},
{
id: 2,
number: 15,
prize_name: "欢乐豆2"
},
{
id: 3,
number: 15,
prize_name: "欢乐豆3"
},
{
id: 4,
number: 15,
prize_name: "欢乐豆4"
},
{
id: 5,
number: 15,
prize_name: "欢乐豆5"
},
{
id: 6,
number: 15,
prize_name: "欢乐豆6"
},
{
id: 7,
number: 15,
prize_name: "欢乐豆7"
},
{
id: 8,
number: 15,
prize_name: "欢乐豆8"
},
], //奖品列表
index: 0, // 当前转动到哪个位置第一次起点位置0,对应页面item1位置
count: 8, // 总共有多少个位置
times: 0, // 转动跑格子次数,
cycle: 50, // 转动基本次数:即至少需要转动多少次再进入抽奖环节
speed: 120, // 初始转动速度
timer: 0, // 转动定时器
lamp: 0, // 灯光定时器
prize: 0, // 中奖位置,接口返回
number_of_draws: 0, //限制每天抽奖次数,接口返回
productData: {
acGiftConfigList: [{
productName: ""
}],
}, //中奖信息
prize_data: {
//中奖信息
id: Number, //奖品ID
name: "", //奖品名称
number: Number, //奖品数量
image: "", //奖品图片
type: Number, // 奖品类型
},
newVip: false,
pkId: "",
prizeShow: false, //奖品
closeImg: require("@/static/images/close.png"),
closeImg1: require("@/static/images/close1.png"),
rechargeShow: false,
keyValue: "", //充值抽奖次数
totalSurplusNum: "", //可购买次数
paramsPost: {},
};
},
filters: {
numFilter (value) {
// 截取当前数据到小数点后两位
let realVal = parseFloat(value).toFixed(2)
return realVal
}
},
methods: {
closePay(val) {
if (val) {
this.isPay = false;
} else {
this.isPay = false;
// this.$confirm("确认取消支付?")
// .then((_) => {
// this.isPay = false;
// // this.$router.replace({
// // path: "/order/myOrder",
// // });
// })
// .catch((_) => {});
}
},
// 充值抽奖次数
closeBtn() {
if (
this.keyValue &&
Number(this.keyValue) > 0 &&
Number(this.keyValue) <= this.totalSurplusNum
) {
this.rechargeShow = false;
act
.drawOnlinePayDraw({
payNum: Number(this.keyValue),
pkBaseId: this.pkId,
})
.then((res) => {
this.paramsPost = {
orderType: "4",
type: "0",
orderCode: res.data.actCode,
specialArea: "4",
address: "0", //订单ID 不需要随便传个占位
luckydrawData: {
pkBaseId: this.pkId,
payNum: Number(this.keyValue),
},
};
uni.navigateTo({
url: '/pages/pay/index?paramsPost=' + JSON.stringify(this.paramsPost),
})
})
.catch((error) => {
this.rechargeShow = true;
});
} else {
uni.showToast({
title: this.$t('w_0034'),
content: this.$t('w_0201'),
// success: (res) => {
// },
})
}
},
clickClose() {
this.newVip = false;
},
//关闭获得商品弹窗
prizeClose() {
this.prizeShow = false;
},
//查询转盘抽奖次数
getDrawNum(val) {
act.getLotteryDrawNum({
pkBaseId: val
}).then((res) => {
if (res.code == 200) {
this.number_of_draws = res.data.availableSurplusNum;
this.totalSurplusNum = res.data.totalSurplusNum;
}
});
},
getGiftList(val) {
this.pkId = val;
act
.getDrawPrizeList({
pkBaseId: val,
})
.then((res) => {
if (res.code == 200) {
if (res.rows.length > 0) {
this.newVip = true;
this.giftList = res.rows;
this.getDrawNum(val);
} else {
this.newVip = false;
}
}
});
},
move() {
if (this.number_of_draws == 0) {
this.newVip = false;
this.rechargeShow = true;
} else if (this.times != 0) {
// this.$message({
// message: "正在抽奖中,请勿重复点击",
// type: "warning",
// });
uni.showToast({
title: this.$t('w_0034'),
content: this.$t('w_0202'),
// success: (res) => {
// },
})
} else {
act.getLotteryDraw({
pkBaseId: this.pkId
}).then((res) => {
if (res.code == 200) {
this.giftList.forEach((ele, index) => {
if (ele.pkId == res.data.pkId) {
this.prize = index; //中奖位置赋值,跑马灯最终停留位置,这里实际位置需要-1
}
});
//中奖奖品信息
this.productData = res.data;
this.getDrawNum(this.pkId);
this.speed = 120; //每次抽奖速度初始化为200
this.startRoll(); //执行抽奖
}
});
}
},
// 开始转动
startRoll() {
this.times += 1; // 转动次数
this.oneRoll(); // 转动过程调用的每一次转动方法,这里是第一次调用初始化
this.usePrize();
},
// 每一次转动
oneRoll() {
let index = this.index; // 当前转动到哪个位置
const count = 8; // 总共有多少个位置
index += 1;
if (index > count - 1) {
index = 0;
}
this.index = index;
},
usePrize() {
// 如果当前转动次数达到要求 && 目前转到的位置是中奖位置
console.log(this.times);
if (this.times > this.cycle && this.prize === this.index) {
clearTimeout(this.timer); // 清除转动定时器
clearTimeout(this.lamp); // 清除灯光定时器
this.times = 0; // 转动跑格子次数初始化为0可以开始下次抽奖
this.prizeShow = true;
} else {
if (this.times < this.cycle - 10) {
// this.speed -= 4; // 加快转动速度
} else {
this.speed += 10; // 抽奖即将结束,放慢转动速度
}
this.timer = setTimeout(this.startRoll, this.speed); //开始转动
}
},
},
};
</script>
<style lang="scss" scoped>
uni-swiper {
height: 31px;
width: 100%;
}
.close-icons {
position: absolute;
right: 30rpx;
top: 30rpx;
cursor: pointer;
}
.seamless-warp {
//margin-top: 30px;
padding-top: 20px !important;
padding: 10px 20px;
height: 150px;
}
.product {
color: #fff;
font-size: 12rpx;
margin-left: 15rpx;
width: 120px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.price {
margin-right: 15rpx;
color: #c8161d;
font-size: 12rpx;
//width: 120px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.width-flex-s {
// width: 700rpx;
justify-content: center;
align-items: center;
// display: flex;
text-align: center;
font-size: 40rpx;
color: #C8161D;
// margin-top: -130rpx;
// margin-left: -50rpx;
}
.bg-img {
image {
width: 650rpx;
height: 850rpx;
position: absolute;
}
}
.bg-closes {
width: 650rpx;
height: 850rpx;
// background: url("~@/assets/images/bg-cologs.jpg") no-repeat;
// margin-top: 0rpx;
position: relative;
}
.item-s {
//margin-bottom: 15rpx;
display: flex;
justify-content: space-between;
width: 470rpx;
}
.banner-bottom {
width: 470rpx;
height: 75rpx;
position: absolute;
left: 90rpx;
bottom: 20rpx;
display: flex;
justify-content: center;
align-items: center;
//padding: 10px;
}
::v-deep .u-popup__content {
background-color: rgba(0, 0, 0, 0);
}
.pay_password {
display: flex;
flex-direction: column;
align-items: center;
.pay_item {
background: #fff;
height: auto;
border-radius: 10rpx 10rpx 0 0;
padding: 42rpx;
text-align: center;
font-size: 28rpx;
color: #202020;
width: 500rpx;
.pay_pt1 {
margin-bottom: 20rpx;
font-size: 30rpx;
font-weight: bold;
}
.czbtnbox {
display: flex;
justify-content: center;
// margin: 30rpx auto 0 auto;
margin-top: 30rpx;
}
}
}
.wrap_close_center {
display: flex;
justify-content: center;
img {
width: 40rpx;
height: 40rpx;
cursor: pointer
}
}
.wrap {
display: flex;
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
width: 100%;
height: 100%;
.turntable {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background-color: rgba(0, 0, 0, 0.5);
height: 100vh;
margin: auto;
width: 100%;
}
.wrap_close_center {
z-index: 100010;
display: flex;
justify-content: center;
width: 325rpx;
height: 120rpx;
}
.turntable_top {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
margin-bottom: 40rpx;
// width: 325rpx;
.top_img {
position: absolute;
top: -20rpx;
bottom: 0;
}
.top_text {
font-size: 42.5rpx;
letter-spacing: 0rpx;
line-height: 45rpx;
color: #f33030;
// background-image: -webkit-linear-gradient(top, #f33030, #f33030);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
font-weight: bold;
}
}
.footer_text {
font-size: 24rpx;
background-image: -webkit-linear-gradient(top, #0be9fe, #45b5fe);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-top: 65rpx;
text-align: center;
}
.prize {
display: flex;
flex-direction: column;
align-items: center;
width: 650rpx;
height: 650rpx;
background-size: 100% auto;
background-repeat: no-repeat;
.top_text {
height: 100rpx;
font-size: 40rpx;
background-image: -webkit-linear-gradient(top, #ffffff, #ffffff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
margin-top: 80rpx;
text-align: center;
padding: 0 50rpx;
}
}
.turntableNum {
width: 420rpx;
height: 600rpx;
background-image: linear-gradient(#c1edff, #02f2fe);
margin-top: 50rpx;
border-radius: 10rpx;
display: flex;
justify-content: center;
align-items: center;
.item {
width: 385rpx;
height: 529rpx;
background-color: #ffffff;
padding-top: 70rpx;
.top {
display: flex;
flex-direction: column;
font-size: 36rpx;
color: #3ea5e1;
text-align: center;
line-height: 30rpx;
.bottomcishu {
margin-top: 40rpx;
}
}
.btn_box {
display: flex;
justify-content: center;
margin: 250rpx auto 0 auto;
}
}
}
}
.gameBox {
display: flex;
align-items: center;
justify-content: center;
width: 700rpx;
height: 670rpx;
margin: auto;
border-radius: 8rpx;
background: url("~@/static/images/giftDrwalbg.gif") no-repeat;
background-size: 100% 100%;
position: relative;
.start {
position: relative;
// padding-top:20px;
width: 160rpx;
height: 140rpx;
top: 0rpx;
left: 32rpx;
cursor: pointer;
// background: linear-gradient(0deg, #ff6a00, #fed8bc);
display: flex;
// align-items: center;
justify-content: center;
flex-direction: column;
color: #ffffff;
border-radius: 35rpx;
.lovesmart {
display: flex;
justify-content: flex-end;
img {
width: 30rpx;
height: 30rpx;
}
}
.starttitle {
display: flex;
flex-direction: column;
align-items: center;
}
.thestarttext {
// margin-top: 10px;
color: #fced99;
font-size: 38rpx;
font-weight: 600;
}
p {
// margin-bottom: 5rpx;
margin: 10rpx 0;
font-size: 12rpx;
font-weight: 400;
color: #fced99;
// color: rgba(255, 255, 255, 1);
}
// p {
// font-size: 12rpx;
// font-weight: 400;
// }
}
ul {
list-style: none;
li {
position: absolute;
width: 160rpx;
height: 153rpx;
background-color: (0, 0, 0, 0.02);
// background: linear-gradient(0deg, #fffdd6, #fffefb);
border: 4rpx solid #ff6a00;
border-radius: 38rpx;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.img1 {
width: 80rpx;
height: 80rpx;
img {
width: 100%;
height: auto;
}
}
p {
text-align: center;
font-size: 13rpx;
font-weight: 500;
color: #fff;
}
}
.item1 {
left: 82rpx;
top: 84rpx;
}
.item2 {
left: 262rpx;
top: 84rpx;
}
.item3 {
left: 442rpx;
top: 84rpx;
}
.item8 {
left: 82rpx;
top: 260rpx;
}
.item4 {
left: 442rpx;
top: 260rpx;
}
.item7 {
left: 82rpx;
top: 434rpx;
}
.item6 {
left: 262rpx;
top: 434rpx;
}
.item5 {
left: 442rpx;
top: 434rpx;
}
.active {
background: linear-gradient(-20deg, rgb(249, 84, 19), rgba(253, 252, 252, 0.6));
// background: #fff600;
}
}
}
</style>