413 lines
12 KiB
JavaScript
413 lines
12 KiB
JavaScript
// packageE/lottery/lottery.js
|
||
var app = getApp();
|
||
Component({
|
||
properties: {
|
||
datas: {
|
||
type: null,
|
||
},
|
||
component_id: {
|
||
type: null,
|
||
},
|
||
},
|
||
// 私有数据,可用于模板渲染
|
||
data: {
|
||
emptyImage: "https://mini-app-img-1251768088.cos.ap-guangzhou.myqcloud.com/image.png",
|
||
clientWidth: "375",
|
||
|
||
goods: [],
|
||
radio: "",
|
||
prizeIndex: 999,
|
||
arrNum: [0, 1, 2, 3, 7, 11, 15, 14, 13, 12, 8, 4], // 定义转动的顺序
|
||
clickFlage: true, // 点击事件,防止重复点击
|
||
prizeInfoShow: false, // 显示中奖信息的遮罩层
|
||
noPrizeShow: false, // 没中奖
|
||
havePrizeShow: false, // 中奖了
|
||
haveLottery: false, // 已经抽过奖了
|
||
timer1: "",
|
||
timer2: "",
|
||
s1: "",
|
||
s2: -1,
|
||
lotteryId: "", // 抽奖活动的id
|
||
hasRecord: false, // 是否显示获奖情况
|
||
remainingTimes: 0, // 剩余抽奖次数
|
||
prizeList: [], // 奖项列表
|
||
prizeLevel: "", // 中奖等级
|
||
prizeName: "", // 奖品名称
|
||
prizeUrl: "", // 奖品图片
|
||
timeFlag: 0, // 时间标记,抽奖请求时间过长,则返回错误
|
||
startStatus: 1, // 活动开始的状态
|
||
prizerListBol: false,
|
||
|
||
activityModel: {},
|
||
countdown_time: [],
|
||
result_arr: [],
|
||
usable: "",
|
||
success_app_url: "", // 成功跳转链接
|
||
},
|
||
|
||
lifetimes: {
|
||
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
|
||
attached() {},
|
||
moved() {},
|
||
detached() {},
|
||
},
|
||
|
||
// 生命周期函数,可以为函数,或一个在methods段中定义的方法名
|
||
attached() {},
|
||
// 此处attached的声明会被lifetimes字段中的声明覆盖
|
||
ready() {
|
||
this.setData({
|
||
clientWidth: wx.getSystemInfoSync().windowWidth,
|
||
});
|
||
let basic_info = wx.getStorageSync("yz_basic_info");
|
||
if (basic_info.home.memberinfo) {
|
||
this.setData({
|
||
usable: basic_info.home.memberinfo.usable,
|
||
});
|
||
}
|
||
if (this.data.datas.lottery && this.data.datas.lottery.name) {
|
||
this.initData();
|
||
}
|
||
},
|
||
|
||
pageLifetimes: {
|
||
// 组件所在页面的生命周期函数
|
||
show() {},
|
||
hide() {},
|
||
resize() {},
|
||
},
|
||
methods: {
|
||
toUrl() {
|
||
wx.navigateTo({
|
||
url: "/packageC/orders/LotteryRecord/LotteryRecord?lotteryId=" + this.data.lotteryId,
|
||
});
|
||
},
|
||
onChange(event) {
|
||
this.setData({
|
||
radio: event.detail,
|
||
});
|
||
},
|
||
closePop() {
|
||
this.setData({
|
||
show: false,
|
||
});
|
||
},
|
||
confirmGoods() {
|
||
this.setData({
|
||
show: false,
|
||
});
|
||
if (this.data.radio) {
|
||
wx.navigateTo({
|
||
url: "/packageA/detail_v2/detail_v2?id=" + this.data.radio,
|
||
});
|
||
}
|
||
},
|
||
// 更新页面数据
|
||
getData() {
|
||
console.log('111111');
|
||
let that = this;
|
||
let urlStr = app.getNetAddresss("plugin.lucky-draw.frontend.draw.index");
|
||
app._getNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
lotteryId: this.data.lotteryId
|
||
},
|
||
success: function(resdata) {
|
||
var res = resdata.data;
|
||
if (res.result == 1) {
|
||
that.setData({
|
||
activityModel: res.data.activityModel,
|
||
['datas.list.point.credit1']:res.data.point.credit1
|
||
});
|
||
if(res.data.love){
|
||
that.setData({
|
||
usable:res.data.love[0],
|
||
});
|
||
}
|
||
}
|
||
},
|
||
fail: function(res) {
|
||
console.log(res);
|
||
}
|
||
});
|
||
},
|
||
initData() {
|
||
if(!this.data.datas.list) {
|
||
return;
|
||
}
|
||
let that = this;
|
||
this.setData({
|
||
result_arr: this.data.datas.list.result_arr,
|
||
activityModel: this.data.datas.list.activityModel,
|
||
success_app_url: this.data.datas.list.activityModel.success_app_url,
|
||
countdown_time: this.data.datas.list.activityModel.countdown_time,
|
||
lotteryId: this.data.datas.list.activityModel.id,
|
||
remainingTimes: this.data.datas.list.surplus_time,
|
||
goods: this.data.datas.list.goods,
|
||
});
|
||
if (this.data.goods && this.data.goods.length > 0) {
|
||
that.setData({
|
||
radio: this.data.goods[0].id,
|
||
});
|
||
}
|
||
this.data.result_arr.forEach((item) => {
|
||
item.bgSrc = "https://mini-app-img-1251768088.cos.ap-guangzhou.myqcloud.com/lottery/item_bg.png";
|
||
});
|
||
this.data.result_arr.splice(5, 0, " ");
|
||
this.data.result_arr.splice(6, 0, " ");
|
||
this.data.result_arr.splice(9, 0, " ");
|
||
this.data.result_arr.splice(10, 0, " ");
|
||
that.setData({
|
||
prizeList: this.data.result_arr,
|
||
});
|
||
let temp = that.data.prizeList[4];
|
||
that.setData({
|
||
"prizeList[4]": that.data.prizeList[7],
|
||
"prizeList[7]": temp,
|
||
});
|
||
temp = that.data.prizeList[12];
|
||
that.setData({
|
||
"prizeList[12]": that.data.prizeList[13],
|
||
"prizeList[13]": temp,
|
||
});
|
||
temp = that.data.prizeList[14];
|
||
that.setData({
|
||
"prizeList[14]": that.data.prizeList[15],
|
||
"prizeList[15]": temp,
|
||
});
|
||
|
||
// 获取状态,开始,未开始,结束
|
||
that.statusFun(Date.parse(new Date()) / 1000, that.data.countdown_time[0], that.data.countdown_time[1]);
|
||
},
|
||
statusFun(c, s, e) {
|
||
if (c < s) {
|
||
// 当前时间小于开始时间,未开始
|
||
this.setData({
|
||
startStatus: 0,
|
||
});
|
||
} else if (c > s && c < e) {
|
||
// 当前时间大于开始时间,并且小于结束时间,已经开始未结束
|
||
this.setData({
|
||
startStatus: 1,
|
||
});
|
||
} else if (c > e) {
|
||
// 当前时间大于结束时间,已经结束
|
||
this.setData({
|
||
startStatus: 2,
|
||
});
|
||
}
|
||
},
|
||
prizeZhuan() {
|
||
let that = this;
|
||
this.setData({
|
||
prizeIndex: 0,
|
||
});
|
||
if (this.data.remainingTimes > 0) {
|
||
// 判断剩余抽奖次数
|
||
if (this.data.clickFlage) {
|
||
if (this.data.startStatus === 1) {
|
||
// 活动开始
|
||
this.setData({
|
||
clickFlage: false, // 不能点击
|
||
timer1: setInterval(() => {
|
||
this.move();
|
||
}, 100),
|
||
});
|
||
let urlStr = app.getNetAddresss("plugin.lucky-draw.frontend.draw.doDraw");
|
||
app._getNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
lotteryId: this.data.lotteryId,
|
||
},
|
||
success: (resdata) => {
|
||
var res = resdata.data;
|
||
if (res.result == 1) {
|
||
that.setData({
|
||
remainingTimes: that.data.remainingTimes - 1,
|
||
});
|
||
if (res.data.result) {
|
||
that.setData({
|
||
hasRecord: true,
|
||
prozeLevel: res.data.result.item,
|
||
prizeName: res.data.result.prize,
|
||
prizeUrl: res.data.result.thumb_url,
|
||
});
|
||
that.getData();
|
||
} else {
|
||
that.setData({
|
||
hasRecord: false,
|
||
prozeLevel: res.data.item,
|
||
prizeName: res.data.prize,
|
||
prizeUrl: res.data.thumb_url,
|
||
empty_prize_prompt: res.data.empty_prize_prompt,
|
||
});
|
||
that.getData();
|
||
}
|
||
setTimeout(() => {
|
||
clearInterval(that.data.timer1);
|
||
that.lowSpeed();
|
||
}, 1200);
|
||
} else {
|
||
wx.showModal({
|
||
title: "提示",
|
||
content: res.msg,
|
||
showCancel: false,
|
||
success(res_1) {
|
||
if (res_1.confirm) {
|
||
if (that.data.goods && that.data.goods.length > 0) {
|
||
that.setData({
|
||
show: true,
|
||
});
|
||
}
|
||
}
|
||
},
|
||
});
|
||
that.setData({
|
||
clickFlage: true, // 不能点击
|
||
});
|
||
clearInterval(that.data.timer1);
|
||
clearInterval(that.data.timer2);
|
||
}
|
||
},
|
||
fail: function (res) {
|
||
console.log(res);
|
||
},
|
||
});
|
||
// 请求,返回后给s定值
|
||
} else if (this.data.startStatus === 0) {
|
||
// 没开始
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: "活动尚未开始",
|
||
duration: 1500,
|
||
});
|
||
} else if (this.data.startStatus === 2) {
|
||
// 已经结束
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: "活动已经结束",
|
||
duration: 1500,
|
||
});
|
||
}
|
||
}
|
||
} else {
|
||
// 没有抽奖机会了
|
||
this.setData({
|
||
prizeInfoShow: true,
|
||
haveLottery: true,
|
||
});
|
||
}
|
||
},
|
||
// 降速
|
||
lowSpeed() {
|
||
clearInterval(this.data.timer1);
|
||
this.setData({
|
||
clickFlage: false, // 不能点击
|
||
timer2: setInterval(() => {
|
||
this.move();
|
||
}, 300),
|
||
});
|
||
setTimeout(() => {
|
||
// 顺序打乱
|
||
this.setData({
|
||
s2: this.data.prozeLevel,
|
||
});
|
||
}, 900);
|
||
},
|
||
move() {
|
||
if (this.data.prizeIndex === 0) {
|
||
this.setData({
|
||
prizeIndex: this.data.prizeIndex + 1,
|
||
});
|
||
} else if (this.data.prizeIndex === 12) {
|
||
this.setData({
|
||
prizeIndex: 0,
|
||
});
|
||
} else {
|
||
this.setData({
|
||
prizeIndex: this.data.prizeIndex + 1,
|
||
});
|
||
}
|
||
if (this.data.s2 !== -1 && this.data.prizeList[this.data.arrNum[this.data.prizeIndex]] && this.data.prizeList[this.data.arrNum[this.data.prizeIndex]].item == this.data.s2) {
|
||
clearInterval(this.data.timer1);
|
||
clearInterval(this.data.timer2);
|
||
this.stop();
|
||
}
|
||
this.setData({
|
||
timeFlag: this.data.timeFlag + 100,
|
||
});
|
||
if (this.data.timeFlag >= 10000 && !this.data.prizeName) {
|
||
clearInterval(this.data.timer1);
|
||
clearInterval(this.data.timer2);
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: "当前抽奖人数过多,稍后再来",
|
||
duration: 1500,
|
||
});
|
||
this.setData({
|
||
clickFlage: true,
|
||
});
|
||
}
|
||
},
|
||
// 停止
|
||
stop() {
|
||
this.setData({
|
||
s2: -1,
|
||
clickFlage: false,
|
||
});
|
||
this.prizeInfo(); // 弹出是否中奖
|
||
},
|
||
prizeInfo() {
|
||
setTimeout(() => {
|
||
this.setData({
|
||
clickFlage: true,
|
||
});
|
||
if (this.data.hasRecord) {
|
||
this.setData({
|
||
prizeInfoShow: true,
|
||
havePrizeShow: true,
|
||
noPrizeShow:false
|
||
});
|
||
} else {
|
||
this.setData({
|
||
prizeInfoShow: true,
|
||
noPrizeShow: true,
|
||
havePrizeShow:false
|
||
});
|
||
}
|
||
if (this.data.noPrizeShow) {
|
||
wx.showModal({
|
||
title: "提示",
|
||
content: `${this.data.empty_prize_prompt || "很遗憾,您没有中奖"}`,
|
||
showCancel: false,
|
||
});
|
||
}
|
||
if (this.data.havePrizeShow) {
|
||
wx.showModal({
|
||
title: "提示",
|
||
content: `恭喜您抽中${this.data.prizeName}`,
|
||
showCancel: false,
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
if (this.data.success_app_url.indexOf("http") == -1) {
|
||
wx.navigateTo({
|
||
url: this.data.success_app_url,
|
||
fail: (res) => {},
|
||
});
|
||
}
|
||
}
|
||
},
|
||
});
|
||
}
|
||
if (this.data.haveLottery) {
|
||
wx.showModal({
|
||
title: "提示",
|
||
content: "您已经抽过奖啦,不要太贪心哦!",
|
||
showCancel: false,
|
||
});
|
||
}
|
||
}, 800);
|
||
},
|
||
},
|
||
});
|