346 lines
8.4 KiB
Plaintext
346 lines
8.4 KiB
Plaintext
<template>
|
||
<view>
|
||
<image
|
||
v-if="data.show && data.pageThatAppears === type && !rbagmodelshow && !openrbagmodelshow"
|
||
:style="{bottom: bottom+'px'}"
|
||
:src="staticUrl + 'home/redBag.png'"
|
||
:ref="'redBag'+data.id" class="redBag" @click="openrbagbtn"></image>
|
||
|
||
<div class="mark" v-if="rbagmodelshow" @touchmove.prevent.stop>
|
||
<div class="mark-wrapper" ref="wrapper">
|
||
<image :src="staticUrl + 'home/redBagClose.png'" mode="widthFix" class="mark-wrapper-img"></image>
|
||
<div class="mark-wrapper-con">
|
||
<div class="mark-wrapper-con-txt">
|
||
<text class="mark-wrapper-title">{{data.titleName}}</text>
|
||
<text class="mark-wrapper-desc">{{data.describeDetails}}</text>
|
||
</div>
|
||
<div class="mark-wrapper-btn" ref="btn" @tap.stop="move">
|
||
<text class="mark-wrapper-btn-txt">立即领取</text>
|
||
</div>
|
||
</div>
|
||
<icon type="cancel" color="#fbd977" size="28" @click="rbagmodelshow = false"/>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="mark" v-if="openrbagmodelshow" @touchmove.prevent.stop>
|
||
<div class="mark-wrapper" ref="wrapperOpen">
|
||
<image :src="staticUrl + 'home/redBagOpen.png'" mode="widthFix" class="mark-wrapper-img"></image>
|
||
<div class="mark-wrapper-con" style="top: 400rpx; height: 380rpx;">
|
||
<div class="mark-wrapper-con-txt" v-if="!isTake">
|
||
<text class="mark-wrapper-title">恭喜您获得</text>
|
||
<text class="mark-wrapper-tip">{{data.receiveDetails}}</text>
|
||
</div>
|
||
<div class="mark-wrapper-con-txt" v-else>
|
||
<text class="mark-wrapper-tip">您已领取过专享红包</text>
|
||
</div>
|
||
<div class="mark-wrapper-btn2" ref="btn" @tap.stop="checkMoney">
|
||
<text class="mark-wrapper-btn2-txt">查看我的福利</text>
|
||
</div>
|
||
</div>
|
||
<icon type="cancel" color="#fbd977" size="28" style="margin-top: 50rpx;" @click="close"/>
|
||
</div>
|
||
</div>
|
||
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import { mapState } from "vuex"
|
||
import { sendRequest } from "@/common/http/api.js"
|
||
import url from "@/common/http/url.js"
|
||
import { getUUID } from "@/common/utils/index.js"
|
||
const music = uni.createInnerAudioContext(); //创建播放器对象
|
||
const animation = weex.requireModule('animation');
|
||
export default{
|
||
props: {
|
||
type: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
data: {
|
||
type: Object,
|
||
default: {}
|
||
},
|
||
bottom: {
|
||
type: Number,
|
||
default: 100
|
||
}
|
||
},
|
||
computed: {
|
||
...mapState(["userInfo"])
|
||
},
|
||
data(){
|
||
return{
|
||
rbagmodelshow: false,
|
||
openrbagmodelshow: false,
|
||
isTake: false // 是否已领取过了
|
||
}
|
||
},
|
||
mounted() {
|
||
let that = this
|
||
let el = this.$refs["redBag"+this.data.id]
|
||
setInterval(function(){
|
||
that.onState(el)
|
||
}, 800)
|
||
|
||
// 如果需要自动领取
|
||
if (this.data.automaticCollection === 2 && this.data.pageThatAppears === this.type) {
|
||
this.openrbagbtn()
|
||
setTimeout(()=>{
|
||
this.move()
|
||
}, 500)
|
||
}
|
||
},
|
||
methods:{
|
||
// 领取红包动效
|
||
move(){
|
||
let that = this
|
||
let btn = this.$refs.btn
|
||
animation.transition(btn, {
|
||
styles: {
|
||
transform: 'rotateY(360deg)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 1000, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
}, function(){
|
||
sendRequest("POST", url.cms.receiveRedEnvelopes, {id: that.data.id}).then(res => {
|
||
if (that.data.audioUrl) {
|
||
music.loop = false; //循环播放
|
||
music.src = that.data.audioUrl;
|
||
music.play(); //执行播放
|
||
}
|
||
that.data.show = false
|
||
that.rbagmodelshow = false
|
||
// #ifdef APP-PLUS
|
||
// 如果返回imAccount,并且直推人奖励开启,并且需要提示声音
|
||
if (res.data && that.data.directPushRewardStatus === 1 && that.data.directPushRewardAudioUrl) {
|
||
that.imSendMsg(res.data)
|
||
}
|
||
// #endif
|
||
that.redOpenAnimation()
|
||
}).catch(()=>{
|
||
that.rbagmodelshow = false
|
||
})
|
||
animation.transition(btn, {
|
||
styles: {
|
||
transform: 'rotateY(0)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 10, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
})
|
||
})
|
||
},
|
||
// 领取红包后显示结果
|
||
redOpenAnimation(){
|
||
let that = this
|
||
that.openrbagmodelshow = true
|
||
setTimeout(()=>{
|
||
let wrapperOpen = that.$refs.wrapperOpen
|
||
animation.transition(wrapperOpen, {
|
||
styles: {
|
||
transform: 'scale(1.2)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 500, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
}, function(){
|
||
animation.transition(wrapperOpen, {
|
||
styles: {
|
||
transform: 'scale(1)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 500, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
})
|
||
})
|
||
}, 100)
|
||
},
|
||
// 点击红包展示的动效
|
||
openrbagbtn(){
|
||
let that = this
|
||
if (this.isTake) {
|
||
that.redOpenAnimation()
|
||
} else {
|
||
that.rbagmodelshow = true
|
||
setTimeout(()=>{
|
||
let wrapper = that.$refs.wrapper
|
||
animation.transition(wrapper, {
|
||
styles: {
|
||
transform: 'scale(1.2)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 500, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
}, function(){
|
||
animation.transition(wrapper, {
|
||
styles: {
|
||
transform: 'scale(1)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 500, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
})
|
||
})
|
||
}, 100)
|
||
}
|
||
},
|
||
onState(el){
|
||
animation.transition(el, {
|
||
styles: {
|
||
transform: 'rotate(-5deg)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 400, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
}, function(){
|
||
animation.transition(el, {
|
||
styles: {
|
||
transform: 'rotate(5deg)',
|
||
transformOrigin: 'center center'
|
||
},
|
||
duration: 400, //ms
|
||
timingFunction: 'ease',
|
||
delay: 0 //ms
|
||
})
|
||
})
|
||
},
|
||
close(){
|
||
this.openrbagmodelshow = false
|
||
this.isTake = true
|
||
},
|
||
checkMoney(){
|
||
let path = ""
|
||
if (this.data.welfareType === "1") {
|
||
path = "/pages/user/cardBag"
|
||
} else {
|
||
path = "/pages/user/wallet/index"
|
||
}
|
||
uni.navigateTo({
|
||
url: path
|
||
})
|
||
},
|
||
imSendMsg(toImAccount){
|
||
sendRequest("GET", url.im.createConversation, {toImAccount: toImAccount, type: 1}).then(doc =>{
|
||
let conversationId = doc.data.id
|
||
let uid = getUUID() + this.userInfo.recommendCode
|
||
let params = {
|
||
conversationId: conversationId,
|
||
id: uid,
|
||
uid: uid,
|
||
from: this.userInfo.imAccount,
|
||
to: toImAccount,
|
||
cmd: 11,
|
||
createTime: new Date().getTime(),
|
||
chatType: 2,
|
||
msgType: 77,
|
||
content: JSON.stringify({
|
||
conversationId: conversationId,
|
||
type: 1,
|
||
musicUrl: this.data.directPushRewardAudioUrl
|
||
})
|
||
};
|
||
getApp().globalData.socket.sendSocketMessage(params)
|
||
})
|
||
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.redBag{
|
||
width: 133rpx;
|
||
height: 85rpx;
|
||
position: fixed;
|
||
right: 0;
|
||
}
|
||
.mark{
|
||
position: fixed;
|
||
left: 0;
|
||
top: 0;
|
||
bottom: 0;
|
||
right: 0;
|
||
background-color: rgba(0,0,0,0.5);
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.mark-wrapper{
|
||
width: 600rpx;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.mark-wrapper-img{
|
||
width: 660rpx;
|
||
margin-left: 0rpx;
|
||
}
|
||
.mark-wrapper-con{
|
||
height: 500rpx;
|
||
position: absolute;
|
||
left: 0;
|
||
top: 150rpx;
|
||
right: 0;
|
||
align-items: center;
|
||
justify-content: flex-end;
|
||
}
|
||
.mark-wrapper-con-txt{
|
||
flex: 1;
|
||
}
|
||
.mark-wrapper-title{
|
||
width: 500rpx;
|
||
lines: 1;
|
||
font-size: 60rpx;
|
||
color: #FFFFFF;
|
||
text-align: center;
|
||
}
|
||
.mark-wrapper-desc{
|
||
width: 500rpx;
|
||
font-size: 34rpx;
|
||
color: #FFFFFF;
|
||
text-align: center;
|
||
margin-top: 20rpx;
|
||
}
|
||
.mark-wrapper-tip{
|
||
width: 500rpx;
|
||
text-align: center;
|
||
font-size:50upx;
|
||
font-weight: bold;
|
||
color: #ffcc1a;
|
||
margin-top: 30rpx;
|
||
}
|
||
.mark-wrapper-btn{
|
||
box-shadow:inset 0 0 0 10upx #fff06e,0 10upx 0 0 #f69614;
|
||
background-image:linear-gradient(to bottom, #fff6a5,#ffcd1b);
|
||
width: 160upx;
|
||
height:160upx;
|
||
border-radius: 100rpx;
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.mark-wrapper-btn-txt{
|
||
color: white;
|
||
font-size: 32rpx;
|
||
}
|
||
.mark-wrapper-btn2{
|
||
width: 300upx;
|
||
height:60upx;
|
||
line-height: 60upx;
|
||
border-radius: 30upx;
|
||
box-shadow:inset 0 0 0 10upx #fff06e,0 10upx 0 0 #f69614;
|
||
background-image:linear-gradient(to bottom, #fff6a5,#ffcd1b);
|
||
align-items: center;
|
||
justify-content: center;
|
||
}
|
||
.mark-wrapper-btn2-txt{
|
||
font-size:26upx;
|
||
color:#ff2400;
|
||
}
|
||
</style> |