[本时生活h5端]

This commit is contained in:
2023-06-21 17:19:58 +08:00
commit ebb9575bd0
284 changed files with 39689 additions and 0 deletions

603
pages/draw/index.vue Normal file
View File

@@ -0,0 +1,603 @@
<template>
<view class="content">
<!-- 抽奖 -->
<image class="luckBack" src="https://card.ysd-bs.com/storage/materials/2022/05/12/luck_back.png"></image>
<view class="luck">
<image class="luckTitle" src="https://card.ysd-bs.com/storage/materials/2022/09/23/drawTitle.png" mode="widthFix"></image>
<view class="drawContent">
<image class="drawContent-back" src="https://card.ysd-bs.com/storage/materials/2022/05/16/ly-plate-c.png" mode="widthFix"></image>
<view class="drawContent-number" v-if="isUser">抽奖数<text>{{number >= 0 ? number : '0'}}</text></view>
<image class="drawContent-award" :animation="animationData" bindtransitionend='animationend' :src="picture" mode="widthFix"></image>
<image class="drawContent-arrow" @click="onExtracting" src="https://card.ysd-bs.com/storage/materials/2022/05/12/playbtn.png" mode="widthFix"></image>
<image class="drawFooter drawFooter-right" src="https://card.ysd-bs.com/storage/materials/2022/05/12/dial_rigntImg.png" mode="widthFix"></image>
<image class="drawFooter drawFooter-left" src="https://card.ysd-bs.com/storage/materials/2022/05/12/dial_leftImg.png" mode="widthFix"></image>
</view>
<view class="roll">
<view class="roll-title">
- 参与抽奖用户 -
</view>
<swiper class="roll-list" interval="3000" autoplay circular vertical bindchange="swiperChange">
<swiper-item class="roll-item" catchtouchmove="stopTouchMove" v-for="(item, index) in logsArr" :key="index">
<view class="roll-name" v-if="item.user">
{{item.user.nickname}}
</view>
<view class="roll-tel" v-if="item.user">
{{item.user.username}}
</view>
<view class="roll-time">
{{item.created_at}}
</view>
</swiper-item>
</swiper>
</view>
<navigator v-if="isUser" hover-class="none" :url="'logs?id=' + exchageId" class="dial-record">抽奖记录</navigator>
<view class="dial-btns">
<view @click="userNav('order?type=paid')" class="dial-btns-go">
我的订单
</view>
<view @click="userNav('myCoupon')" class="dial-btns-go dial-btns-order">
我的优惠券
</view>
</view>
<view class="setupLabel" @click="delStorage" v-if="isUser">
<view class="setupLabel-name">
切换用户
</view>
</view>
</view>
<!-- 弹出 -->
<view class="popBack" v-if="pointShow"></view>
<view class="popCont" v-if="pointShow">
<view class="popTips">
<image class="luckTips" src="https://card.ysd-bs.com/storage/materials/2022/05/12/luckTips.png" mode="widthFix"></image>
<view class="Tips-title">
恭喜中奖
</view>
<view class="Tips-text">
获得{{prize}}
</view>
<view class="Tips-btn">
<image class="Tips-btn-image" src="https://card.ysd-bs.com/storage/materials/2022/05/12/luckBtn.png"></image>
<view v-if="value == 2" class="Tips-btn-text" @click="exchange(luckId)">去兑换</view>
<view v-else class="Tips-btn-text" @click="useGp(luckId)">去使用</view>
</view>
<view class="Tips-out">~温馨提示请您尽快使用哦~</view>
</view>
<view class="luckClose">
<image src="/static/img/luckClose.png" mode="widthFix" @click="luckClosePop"></image>
</view>
</view>
</view>
</template>
<script>
import { index, result } from '@/apis/interfaces/draw'
export default {
data() {
return {
isUser : false, // 用户是否登录
number : '', //抽奖次数
logsArr : '', //获奖列表
luckId : '', //抽奖列表id
pointShow : false, //抽奖弹出
prize : '', //获得奖项标题
value : '', //获得奖项类型
animationData : {}, //旋转动画
picture : '', //抽奖转盘图片
isState : false, //抽奖状态
exchageId : '', //抽奖id
backGround : '',
itemArr : []
}
},
// 生命周期函数--监听页面加载
onLoad(options) {
// 初始化动画信息
const animation = uni.createAnimation({
duration : 2000,
timingFunction : 'ease-in-out'
})
this.animation = animation
},
// 生命周期函数--监听页面显示
onShow() {
// 存储环境-用户抽奖活动
getApp().globalData.envType = 'drawEnv'
if(uni.getStorageSync("token")) {
this.isUser = true
// 获取抽奖默认信息(抽奖次数)
}
this.drawShow();
},
methods: {
// 抽奖默认信息(抽奖次数)
drawShow(){
index().then(res=>{
this.countLengtht= res.lottery.items_count
this.number = res.lottery.number
this.background = res.lottery.background
this.picture = res.lottery.picture
this.exchageId = res.lottery.exchage_id
this.itemArr = res.lottery.items
this.logsArr = res.logs
})
},
// 抽奖
onExtracting(){
if(uni.getStorageSync("token")) {
result(this.exchageId).then(res=>{
let runNum = 3 // 旋转圈数
// 检查抽奖状态
if(this.isState) return
if(this.number <= 0){
uni.showToast({
title: '今日抽奖次数已用完,请明天再来吧~',
icon : 'none'
})
return
}
// 更新抽奖状态
this.isState = true
this.prize = res.log.exchange_item.title
this.value = res.log.exchange_item.type.value
this.luckId = res.log.exchage_log_id
//旋转角度
this.runDeg = this.runDeg || 0;
this.runDeg = this.runDeg + (360 - this.runDeg % 360) + (360 * runNum - (res.log.exchange_item.order - 1) * Math.round(360 / this.countLengtht))
// 动画
this.animation.rotate(this.runDeg).step()
this.animationData = this.animation.export()
// 提示用户中奖信息
setTimeout(()=>{
this.isState = false
this.pointShow = true
},3000)
}).catch(err => {
uni.showToast({
title: err.message,
icon: 'none'
})
})
return
}
// 去登录
uni.navigateTo({
url: '/pages/draw/signin'
})
},
// 动画结束弹出
animationend(){
setTimeout(()=>{
this.pointShow = true
},1000)
},
// 关闭弹出
luckClosePop() {
uni.showModal({
title : '提示',
content : '是否放弃此权益',
success : res=> {
if (res.confirm) {
this.pointShow = false
}
// 获取抽奖默认信息(抽奖次数)
this.drawShow();
}
})
},
// 兑换乐心三件套
exchange(id) {
uni.navigateTo({
url: "choose?id=" + id
})
this.pointShow = false
},
// 使用权益券
useGp(id){
uni.navigateTo({
url: "right?luck_id=" + id
})
this.pointShow = false
},
// 处理未登录时的转跳
userNav(url){
let pageUrl = url
if(uni.getStorageSync("token")) {
uni.navigateTo({
url: pageUrl
})
return
}
// 去登录
uni.navigateTo({
url: '/pages/draw/signin'
})
},
// 退出登录
delStorage() {
uni.clearStorage()
uni.navigateTo({
url:'/pages/draw/signin'
})
},
// 禁止滚动
stopTouchMove() {
return false
}
}
}
</script>
<style lang="scss" scoped>
page {
background-color: #e4353a;
}
.luckBack {
position: fixed;
width: 100vw;
height: 100%;
left: 0;
top: 0;
}
.luck {
position: fixed;
width: 100%;
overflow: hidden;
height: 100%;
z-index: 9;
left: 0;
top: 0;
padding: 80rpx 40rpx 20rpx;
box-sizing: border-box;
overflow-y: scroll;
text-align: center;
}
.luckTitle {
width: 90%;
}
.drawFooter{
position: absolute;
z-index: 9;
}
.drawFooter-right {
width: 48%;
bottom: -70rpx;
right: -16%;
}
.drawFooter-left {
width: 60%;
bottom: -30rpx;
left: -18%;
}
/* 转盘 */
.drawContent{
margin: 60rpx auto 40rpx;
width: 100%;
padding-top: 100%;
position: relative;
}
.drawContent-arrow,
.drawContent-back,
.drawContent-award{
position: absolute;
}
.drawContent-back{
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.drawContent-award{
width: 76%;
height: 76%;
top: 5.5%;
left: 13.5%;
}
.drawContent-arrow{
width: 26%;
height: 26%;
top: 28%;
left: 39%;
}
.drawContent-number {
bottom: 38rpx;
color: #ffffff;
left: 0;
width: 100%;
position: absolute;
text-align: center;
padding-left: 20rpx;
box-sizing: border-box;
font-size: 28rpx;
}
.drawContent-number text {
font-weight: 600;
padding: 0 5rpx;
}
.dial-btns {
padding-bottom: 40rpx;
display: flex;
.dial-btns-go {
flex: 2;
text-align: center;
box-sizing: border-box;
background-color: #ffeace;
border: 2rpx solid transparent;
color: #5a0000;
margin-top: 40rpx;
border-radius: 50rpx;
height: 80rpx;
line-height: 80rpx;
margin: 50rpx 15rpx 0;
}
.dial-btns-order {
background-color: #f3524a;
color: #ffeace;
border-color: #ffeace;
}
}
/* 弹出 */
.popBack {
background-color: rgba(0, 0, 0, .7);
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 99;
}
.popCont {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 0;
bottom: 0;
position: fixed;
width: 100%;
height: 100%;
z-index: 100;
padding: 140rpx 100rpx 0;
box-sizing: border-box;
}
.popTips{
color: #ffffff;
width: 100%;
padding: 140rpx 30rpx 30rpx;
box-sizing: border-box;
background-color: #de3935;
border-radius: 20rpx;
text-align: center;
color: #ffe3ba;
position: relative;
}
.luckTips {
position: absolute;
top: -120rpx;
z-index: 101;
width: 60%;
left: 25%;
}
.Tips-title {
font-size: 60rpx;
margin-bottom: 60rpx;
}
.Tips-text {
font-size: 34rpx;
}
.Tips-btn {
margin: 100rpx 0 20rpx;
position: relative;
padding-top: 14%;
}
.Tips-btn-image {
position: absolute;
width: 70%;
height: 100%;
left: 15%;
top: 0;
}
.Tips-btn-text {
font-size: 30rpx;
text-align: center;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
color: #c35b34;
display: -webkit-box;
-webkit-box-orient: vertical;
font-weight: 600;
-webkit-box-pack: center;
}
.Tips-out {
font-size: 28rpx;
line-height: 90rpx;
}
.luckClose {
width: 100%;
text-align: center;
margin-top: 40rpx;
}
.luckClose image {
width: 64rpx;
opacity: .5;
}
/* 抽奖规则 */
.rulesBack {
background-color: rgba(0, 0, 0, .7);
position: fixed;
width: 100%;
height: 100%;
left: 0;
top: 0;
z-index: 99;
display: none;
}
.rulesCont {
-webkit-box-orient: vertical;
-webkit-box-pack: center;
left: 0;
right: 0;
top: 25vh;
bottom: 0;
position: fixed;
width: 100%;
height: 50vh;
z-index: 100;
display: none;
}
.rulesBack.active {
display: block;
}
.rulesCont.active {
display: -webkit-box;
}
.luckRules {
position: absolute;
left: 10%;
top: 0;
width: 80%;
box-sizing: border-box;
z-index: 100;
}
.textRules {
position: absolute;
left: 10%;
top: 0;
width: 80%;
z-index: 101;
height: 100%;
padding: 60rpx 80rpx;
color: #ffffff;
line-height: 58rpx;
box-sizing: border-box;
}
.rulesClose-title {
width: 60%;
display: block;
margin: 20rpx auto 40rpx;
}
.textRules-text {
height: 70%;
overflow: hidden;
overflow-y: scroll;
}
.rulesClose {
position: absolute;
z-index: 102;
right: 50rpx;
top: 60rpx;
width: 54rpx;
opacity: .8;
}
.roll {
height: 160rpx;
overflow: hidden;
background-color: #f5675a;
border: 4rpx solid #ffeace;
border-radius: 20rpx;
padding: 20rpx;
box-sizing: border-box;
margin: 60rpx 15rpx 0;
width: calc(100% - 30rpx);
.roll-title {
color: #ffeace;
font-size: 34rpx;
}
.roll-list {
height: 90rpx;
}
.roll-item {
height: 90rpx;
display: flex;
line-height: 90rpx;
color: #fff0dd;
font-size: 28rpx;
view {
flex: 3;
}
.roll-name {
text-align: left;
}
.roll-time {
text-align: right;
}
}
}
// 中间记录
.dial-record {
position: absolute;
top: 20%;
right: 0;
background-color: rgba($color: #ffdba2, $alpha: .9);
border-radius: 30rpx 0 0 30rpx;
line-height: 58rpx;
font-size: 30rpx;
color: #b80501;
padding: 0 15rpx 0 20rpx;
}
.setupLabel {
width: 100%;
text-align: center;
line-height: 90rpx;
color: #FFFFFF;
opacity: .8;
}
</style>