yuminge-app/yun-min-program-plugin-master/packageD/directSeeding/livePage/livePage.js

4392 lines
128 KiB
JavaScript
Raw 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.

// packageD/directSeeding/livePage/livePage.js
let app = getApp();
let clicktag = 0;
const queue = {};
let timer = 0;
let timer_1 = 0;
let timer_2 = null;
let timer_3 = null;
let timer_4 = 0;
// let activityTime = null;
let ctx = null;
let myCanvasWidth = null;
let myCanvasHeight = null;
let unit = "";
let canvasDpr = 1;
import TIM from "../../tim-wx-sdk/tim-wx";
Page({
/**
* 页面的初始数据
*/
data: {
isShowADLook: true, //广告列表按钮
isShowADPut: true, //广告投放按钮
close_reward: 0, //是否关闭打赏1是0否
close_chat: 0, //是否关闭评论1是0否
giftEffectsTime: null, //打赏特效定时器
specialList: [], //打赏特效
language: "",
inputInfo: "",
statusBarHeight: 0,
navBarHeight: 0,
showUser: false,
shade: false,
showGoodLift: false,
showGift: false,
showactivity: false,
showavticeFail: false,
mainCommentShow: false,
style_img: "",
width: 60,
height: 260,
//公告栏效果
tipsContentHeight: 0,
tipsContent: [],
tipsContentMsssage: "",
tipsopacity: 0,
tipsopacityBol: false,
//礼物滚动
widthAll: 0,
giftScreenLeft: 0,
giftwidth: 0,
giftScreenLeftBol: true,
firstwidth: "",
activeNum: "",
giftListContent: [],
giftListmessage: {},
//是否关注
focusBol: true,
// followSuccessBol: false,
//礼物选择
giftSelectId: "",
giftListData: "",
giftSelectNUm: 0,
//
roomData: "",
giftMemberData: "",
id: "",
room_id: "",
postData: {},
anchorPopupData: "",
//
heightauto: "auto",
widthauto: "auto",
screeheight: "",
//直播类型
playerType: "live",
//滑动列表
liveListData: [],
backid: "",
last_room_id: "",
last_backid: "",
//more
isLoadMore: true,
page: 1,
total_page: 0,
//营销活动
activityData: "",
lasttime: "",
activityTimeArray: [],
activityDataArray: [],
//消息列表
messageList: [],
messagesTop: 0,
view_num: 0,
giftSelectBol: false,
roomMemberContent: [],
roomMemberContentArray: [],
roomMemberTimeArray: [],
playBackUrl: "plugin.room.frontend.live-list.play-back",
memberid: "",
loadingImg: true,
loadingMessage: "海报生成中",
tim: "",
shownum: 0,
likeNumBol: true,
lastGroupId: "",
pauseBol: true,
catMessagebol: true,
wechatpayShow: false,
roomObj: "",
usewechatpayBol: false,
moreShowBol: false,
memberBol: false,
room_ban: false,
explainingGoods: {
goods_id: "",
},
commoditiesshow: true,
picturemodeshow: true,
imReadly: true,
sendMessageReadly: true,
SDKAppID: "",
activityDataBtnBol: false,
roomMemberBtnBol: false,
permissionsShow: true,
passwordShow: false,
passwordVal: "",
passwordIndex: undefined,
IMmessage: {},
changeAnchor: true, //滑动改变直播间时
luck_number: 0,
showPosterWord: false,
diyPosterWord: "",
oldWord:'',
chatInputBottom:0,//键盘弹起时input高度问题
isLivePK: false,
livePKData:{},
livePKSrc:'',
startPKTime: null,
pkTimer: null,
PKTimed: "00:00:00", //连麦已进行的时长
mode_button: 1, //0为竖屏1为横屏
// 观看时长定时器
rewardTimeOut:null,
// 推广id
code_id:'',
// 直播进入小窗
smallWindowIn:false
},
gotoFanList() {
wx.navigateTo({
url:
"/packageD/directSeeding/liveFanList/liveFanList?memberId=" +
this.data.id,
});
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
let that = this;
setTimeout(function () {
wx.hideLoading();
}, 10000);
setTimeout(function () {
that.data.imReadly = false;
that.data.sendMessageReadly = false;
}, 5000);
this.setData({
code_id:null
});
// console.log('重新启动清除一下推广id',this.data.code_id)
if (options.scene) {
let scene = decodeURIComponent(options.scene);
if (scene) {
var info_arr = [];
info_arr = scene.split(",");
for (let i = 0; i < info_arr.length; i++) {
let chil_arr = [];
chil_arr = info_arr[i].split("=");
if (chil_arr[0] == "id") {
this.setData({
room_id: chil_arr[1],
});
} else if (chil_arr[0] == "pT") {
this.setData({
playerType: chil_arr[1],
});
} else if (chil_arr[0] == "bid") {
this.setData({
backid: chil_arr[1],
});
} else if (chil_arr[0] == "meid") {
this.setData({
memberid: chil_arr[1],
});
} else if (chil_arr[0] == "mid") {
app._setMid(chil_arr[1]);
} else if (chil_arr[0] == "cd") {
this.setData({
code_id : chil_arr[1]
});
}else if (chil_arr[0] == "T") {
if (chil_arr[1] == 1) {
this.setData({
playerType: "live",
});
} else {
this.setData({
playerType: "video",
});
}
} else if (chil_arr[0] == "D") {
this.setData({
memberBol: true,
});
}
}
}
} else {
if (options.mid) {
app._setMid(options.mid);
this.newMedia(4);
}
if (options.id) {
this.setData({
room_id: options.id,
});
}
if(options.cd){
this.setData({
code_id:options.cd
});
}
//判断直播类型是回放还是直播 live直播 video回放
if (options.playerType) {
this.setData({
playerType: options.playerType,
});
}
//回放id
if (options.backid) {
this.setData({
backid: options.backid,
});
}
if (options.memberid) {
this.setData({
memberid: options.memberid,
});
}
}
let { statusBarHeight, navBarHeight } = app.globalData;
this.setData({
statusBarHeight,
navBarHeight,
});
this.getsdkappid();
this.newMedia(3);
//创建点赞动画标签
// this.getGiftEffect(); //开启礼物效果
// this.getData(); //获取数据
// this.getPoster(); //加载海报
},
permissionsShowBtn() {
this.setData({
permissionsShow: !this.data.permissionsShow,
});
},
passwordValInp(e) {
let val = e.detail.value;
this.setData({
passwordVal: val,
});
},
commoditiesclosebtn() {
this.setData({
commoditiesshow: false,
});
},
getmoreBtn() {
this.setData({
moreShowBol: true,
});
},
showShoplistBtn(e) {
let index = e.currentTarget.dataset.index;
this.setData({
["roomData.diy_menu[" + index + "].show"]: true,
});
},
moreShowCloseBtn() {
this.setData({
moreShowBol: false,
});
},
gooption(e) {
let index = e.currentTarget.dataset.index;
let url = this.data.roomData.diy_option[index].min_url;
if (url) {
try {
wx.navigateTo({
url: url,
});
} catch (e) {
wx.showToast({
title: "链接设置错误:" + url,
icon: "none",
duration: 2000,
});
//TODO handle the exception
}
} else {
wx.showToast({
title: "链接未设置",
icon: "none",
duration: 2000,
});
}
},
gomenu(e) {
let index = e.currentTarget.dataset.index;
let url = this.data.roomData.diy_menu[index].min_url;
if (url) {
try {
wx.navigateTo({
url: url,
});
} catch (e) {
wx.showToast({
title: "链接设置错误:" + url,
icon: "none",
duration: 2000,
});
}
} else {
wx.showToast({
title: "链接未设置",
icon: "none",
duration: 2000,
});
}
},
usewechatpay() {
var that = this;
if (this.data.usewechatpayBol) {
return false;
}
that.data.usewechatpayBol = true;
let urlStr = app.getNetAddresss("finance.balance.recharge");
if (!that.data.giftmoney) {
wx.showToast({
icon: "none",
title: that.data.giftMemberData.credit2_name
? "充值" + that.data.giftMemberData.credit2_name + "不小于0"
: "充值余额不小于0",
duration: 1500,
});
that.setData({
wechatpayShow: false,
});
return false;
}
urlStr += "&client_type=2";
urlStr += "&app_type=wechat";
urlStr += "&pay_type=1";
urlStr += "&recharge_money=" + that.data.giftmoney;
app._getNetWork({
url: urlStr,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
var pay_data = res.data.config;
var payParams = {
timeStamp: pay_data.timestamp,
nonceStr: pay_data.nonceStr,
package: pay_data.package,
signType: pay_data.signType,
paySign: pay_data.paySign,
};
that.WXPay(payParams);
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
that.setData({
wechatpayShow: false,
});
that.data.usewechatpayBol = false;
}
},
fail: function (res) {
console.log(res);
},
});
},
WXPay(payParams) {
let that = this;
wx.requestPayment({
timeStamp: payParams.timeStamp,
nonceStr: payParams.nonceStr,
package: payParams.package,
signType: payParams.signType ? payParams.signType : "MD5",
paySign: payParams.paySign,
success: function (res) {
that.giftwechatpay();
that.data.usewechatpayBol = false;
},
fail: function (res) {
wx.showToast({
title: "支付失败请稍后重试",
icon: "none",
duration: 2000,
success: function () {},
fail: function () {},
});
that.data.usewechatpayBol = false;
},
});
},
wechatpayShowCloseBtn() {
this.setData({
wechatpayShow: false,
});
},
giftwechatpay() {
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.reward.index");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
reward_type: this.data.activeNum,
room_id: this.data.room_id,
reward_id: this.data.giftSelectId,
number: this.data.giftmoney,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
wx.showToast({
icon: "none",
title: "打赏成功",
duration: 1500,
});
that.setData({
wechatpayShow: false,
});
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
that.data.giftSelectBol = false;
},
fail: function (res) {
console.log(res.msg);
},
});
},
getmemberid() {
let that = this;
let urlStr = app.getNetAddresss(
"plugin.room.frontend.anchor.get-member-id"
);
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
memberid: res.data.member_id,
});
that.getplayBack();
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
getsdkappid() {
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.im.get-im-sdk");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
let options = {
SDKAppID: res.data.sdkappid, // 接入时需要将0替换为您的即时通信 IM 应用的 SDKAppID
};
if (res.data.sdkappid) {
that.data.SDKAppID = res.data.sdkappid;
}
// 创建 SDK 实例,`TIM.create()`方法对于同一个 `SDKAppID` 只会返回同一份实例
that.data.tim = TIM.create(options); // SDK 实例通常用 tim 表示
that.data.tim.setLogLevel(0);
that.chatEventList(); //加载聊天事件
if (that.data.playerType == "live") {
wx.showLoading({
title: "直播加载中...",
});
that.data.roomObj = wx.createLivePlayerContext(
"liveid_" + that.data.room_id
);
that.getLiveList();
} else if (that.data.playerType == "video") {
if (that.data.memberid || that.data.memberBol) {
that.data.playBackUrl = "plugin.room.frontend.anchor.get-back";
if (that.data.memberid) {
that.getplayBack();
} else {
that.getmemberid();
}
} else {
that.getplayBack();
}
}
that.getinformation(); // 获取屏幕宽度
that.getMyCanvasMessage(); // 获取海报画布宽高
ctx = wx.createCanvasContext("bubble");
that.getTipsContent(); //开启公告栏效果
// that.getGiftList(); //获取礼物列表数据
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
setGoods(e) {
let that = this;
let id = e.currentTarget.dataset.id;
wx.navigateTo({
url:
"/packageA/detail_v2/detail_v2?id=" +
id +
"&liveshow=1&roomid=" +
that.data.room_id,
});
},
//记录进入直播间
comeRoom() {
if (this.data.IMmessage.come == 1) {
this.catComeMessage();
}
if (this.data.IMmessage.welcome == 1) {
this.catWelcomeMessage();
}
},
//创建进入直播间自定义模版
catComeMessage() {
let that = this;
let messageData = {};
let Json = {
memberId: this.data.roomData.userID ? this.data.roomData.userID : "",
nickname: this.data.roomData.userNickname
? this.data.roomData.userNickname
: "",
memberAvatar: this.data.roomData.userAvatar
? this.data.roomData.userAvatar
: "",
};
messageData = {
to: that.data.roomData.groupId,
conversationType: TIM.TYPES.CONV_GROUP,
payload: {
data: "自定义文本", // 用于标识该类型消息
description: JSON.stringify(Json),
extension: "come",
},
};
let message = that.data.tim.createCustomMessage(messageData);
let promise = that.data.tim.sendMessage(message);
let tipsContent = that.data.tipsContent;
promise
.then(function (imResponse) {
// 发送成功
tipsContent.push({
type: "come",
nickname: Json.nickname,
});
that.data.tipsContent = tipsContent;
console.log("xx进入直播间提示成功");
})
.catch(function (imError) {
// 发送失败
wx.showToast({
icon: "none",
title: "进入直播间提示失败:::" + imError,
duration: 1200,
});
console.warn("sendMessage error:", imError);
});
},
//创建 进入直播间欢迎文字 自定义模版
catWelcomeMessage() {
let that = this;
let messageData = {};
let Json = {
content: this.data.IMmessage.welcome_content,
};
messageData = {
to: that.data.roomData.groupId,
conversationType: TIM.TYPES.CONV_GROUP,
payload: {
data: "自定义文本", // 用于标识该类型消息
description: JSON.stringify(Json),
extension: "welcome",
},
};
let message = that.data.tim.createCustomMessage(messageData);
let promise = that.data.tim.sendMessage(message);
let messageList = that.data.messageList;
promise
.then(function (imResponse) {
// 发送成功
messageList.push({
content: Json.content,
});
that.setData({
messageList,
messagesTop: messageList.length * 1000,
});
console.log("进入直播间自动回复成功提示:::");
})
.catch(function (imError) {
// 发送失败
wx.showToast({
icon: "none",
title: "进入直播间自动回复提示失败:::" + imError,
duration: 1200,
});
console.warn("sendMessage error:", imError);
});
},
activeRoomSet() {
let that = this;
if (this.data.IMmessage) {
if (
this.data.IMmessage.now_goods &&
this.data.IMmessage.now_goods.goods_id
) {
//当前讲解商品
that.setData({
explainingGoods: this.data.IMmessage.now_goods,
});
}
if (this.data.IMmessage.room_ban == 1) {
//禁入直播间
that.setData({
picturemodeshow: false,
});
wx.showModal({
title: "提示",
content: "您已被禁入直播间",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
return;
}
if (this.data.IMmessage.chat_ban == 1) {
wx.showModal({
title: "提示",
content: "您已经被禁言",
showCancel: false,
success(res) {},
});
that.setData({
room_ban: true,
});
return;
}
}
//废弃改为IM自定义模板发送信息
// let urlStr = app.getNetAddresss("plugin.room.frontend.live.come-room");
// app._postNetWork({
// url: urlStr,
// showToastIn: false,
// data: {
// room_id: that.data.room_id
// },
// success: function(resdata) {
// var res = resdata.data;
// if (res.result == 1) {
// if (res.data.now_goods && res.data.now_goods.goods_id) {
// that.setData({
// explainingGoods: res.data.now_goods
// })
// }
// if (res.data.room_ban == 1) {
// that.setData({
// picturemodeshow: false
// })
// wx.showModal({
// title: '提示',
// content: '您已被禁入直播间',
// showCancel: false,
// success(res) {
// if (res.confirm) {
// wx.redirectTo({
// url: '/packageD/directSeeding/liveList/liveList'
// })
// }
// }
// })
// return
// }
// if (res.data.chat_ban == 1) {
// wx.showModal({
// title: '提示',
// content: '您已经被禁言',
// showCancel: false,
// success(res) {
// if (res.confirm) {
// }
// }
// })
// that.setData({
// room_ban: true
// })
// return
// }
// } else {
// }
// },
// fail: function(res) {
// console.log(res.msg)
// }
// });
},
getLiveList() {
let that = this;
let urlStr = app.getNetAddresss(
"plugin.room.frontend.live-list.get-live-list"
);
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
status: 3,
page: 1,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
total_page: res.data.last_page
});
let LiveListData = res.data.data;
let LiveArray = [
{
id: that.data.room_id,
changeloadBol: false,
},
];
if (LiveListData.length > 0) {
LiveListData.forEach((x) => {
if (x.id != that.data.room_id) {
LiveArray.push({
id: x.id,
avatar: x.avatar,
banner: x.banner,
cover: x.cover,
changeloadBol: false,
});
}
});
that.setData({
liveListData: LiveArray,
last_room_id: that.data.room_id,
});
} else {
that.setData({
liveListData: [
{
id: that.data.room_id,
},
],
last_room_id: that.data.room_id,
});
}
that.getData(0); //获取数据
that.getPoster(); //加载海报
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
getplayBack() {
let that = this;
let urlStr = app.getNetAddresss(that.data.playBackUrl);
let json = {};
if (this.data.memberid) {
json = {
member_id: this.data.memberid,
page: 1,
};
} else {
json = {
page: 1,
};
}
app._postNetWork({
url: urlStr,
showToastIn: false,
data: json,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
total_page: res.data.last_page,
});
let playBackData = res.data.data;
let playBackArray = [
{
id: that.data.room_id,
backid: that.data.backid,
changeloadBol: false,
},
];
if (playBackData.length > 0) {
playBackData.forEach((x) => {
if (x.id != that.data.backid) {
playBackArray.push({
id: x.room_id,
backid: x.id,
avatar: x.avatar,
banner: x.banner,
cover: x.cover,
changeloadBol: false,
});
}
});
that.setData({
liveListData: playBackArray,
last_backid: that.data.backid,
});
} else {
that.setData({
liveListData: [
{
id: that.data.room_id,
backid: that.data.backid,
},
],
last_backid: that.data.backid,
});
}
that.getBackData(0);
that.getPoster(); //加载海报
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
liveChange(e) {
// 清理定时器
this.data.rewardTimeOut = null;
// console.log('clearInterval')
clearInterval(this.data.rewardTimeOut);
let realIndex = e.detail.current;
console.log(realIndex);
this.quitGroup();
let that = this;
that.setData({
loadingImg: true,
loadingMessage: "海报生成中",
});
if (realIndex == that.data.liveListData.length - 2) {
that.getMoreData();
}
for (let i = 0; i < this.data.liveListData.length; i++) {
that.setData({
["liveListData[" + i + "].changeloadBol"]: false,
});
}
if (that.data.playerType == "live") {
that.setData({
room_id: that.data.liveListData[realIndex].id,
changeAnchor: true,
isLivePK: false,
livePKData: {}
});
that.getData(realIndex); //获取数据
// that.getAnchorPopup(); //加载主播弹窗数据
that.getPoster(); //加载海报
that.data.roomObj = wx.createLivePlayerContext(
"liveid_" + that.data.room_id
);
if (this.data.pkTimer) {
// console.log('clearInterval')
clearInterval(this.data.pkTimer);
this.data.pkTimer = null;
}
} else {
that.setData({
room_id: that.data.liveListData[realIndex].id,
backid: that.data.liveListData[realIndex].backid,
changeAnchor: true,
});
that.getBackData(realIndex); //获取数据
// that.getAnchorPopup(); //加载主播弹窗数据
that.getPoster(); //加载
}
//清除聊天
that.setData({
messageList: [],
messagesTop: 0,
});
that.data.tipsContent = [];
that.data.giftListContent = [];
that.setData({
tipsContentMsssage: "",
giftListmessage: {},
});
that.data.catMessagebol = true;
that.setData({
likeNumBol: true,
});
},
getBackData(index) {
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.room-back");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
back_id: this.data.backid,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
console.log(res.data);
that.setData({
shownum: res.data.like_num ? res.data.like_num : 0,
roomData: res.data,
id: res.data.member_id,
view_num: res.data.view_num,
IMmessage: res.data.message,
luck_number: res.data.luck_number || 0,
close_reward: res.data.close_reward || 0,
close_chat: res.data.close_chat || 0,
mode_button: res.data.mode_button || 0
});
if (res.data.is_concern == 1) {
that.setData({
focusBol: false,
});
} else {
that.setData({
focusBol: true,
});
}
that.activeRoomSet();
if (res.data.IM == 1) {
setTimeout(() => {
that.chatLogin();
}, 1000);
}
if (that.data.last_backid == that.data.backid) {
that.setData({
"liveListData[0].avatar": res.data.avatar,
"liveListData[0].cover": res.data.cover,
"liveListData[0].banner": res.data.banner,
});
}
if (index !== undefined) {
that.setData({
["liveListData[" + index + "].changeloadBol"]: true,
});
}
// that.data.tipsContent = [];
// that.data.giftListContent = [];
// that.setData({
// tipsContentMsssage: "",
// giftListmessage: {}
// })
clearTimeout(timer_1);
clearTimeout(timer_2);
clearTimeout(timer_3);
that.getGiftEffect(); //开启礼物效果
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
getMoreData() {
const that = this;
let json = {};
let api = "";
let urlStr = "";
that.data.isLoadMore = false; // 防止多次请求分页数据
if (this.data.page >= this.data.total_page) {
return;
} else {
this.data.page = this.data.page + 1;
if (this.data.playerType == "live") {
api = "plugin.room.frontend.live-list.get-live-list";
json = {
status: 3,
page: this.data.page,
};
} else {
api = that.data.playBackUrl;
if (this.data.memberid) {
json = {
member_id: this.data.memberid,
page: this.data.page,
};
} else {
json = {
page: this.data.page,
};
}
}
urlStr = app.getNetAddresss(api);
app._postNetWork({
url: urlStr,
showToastIn: false,
data: json,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
if (that.data.playerType == "live") {
let LiveListData = res.data.data;
let LiveArray = that.data.liveListData;
if (LiveListData.length > 0) {
LiveListData.forEach((x) => {
if (x.id != that.data.last_room_id) {
LiveArray.push({
id: x.id,
avatar: x.avatar,
banner: x.banner,
cover: x.cover,
changeloadBol: false,
});
}
});
that.setData({
liveListData: LiveArray,
});
}
} else {
let playBackData = res.data.data;
let playBackArray = that.data.liveListData;
if (playBackData.length > 0) {
playBackData.forEach((x) => {
if (x.id != that.data.last_backid) {
playBackArray.push({
id: x.room_id,
backid: x.id,
avatar: x.avatar,
banner: x.banner,
changeloadBol: false,
});
}
});
that.setData({
liveListData: playBackArray,
});
}
}
} else {
that.setData({
page: that.data.page - 1,
isLoadMore: false,
});
return;
}
},
fail: function (res) {
console.log(res.msg);
},
});
}
},
// 获取屏幕宽度
getinformation() {
try {
const res = wx.getSystemInfoSync();
let windowHeight = res.windowHeight;
let windowWidth = res.windowWidth;
this.setData({
heightauto: windowHeight + "px",
widthauto: windowWidth + "px",
});
this.data.screeheight = windowHeight;
} catch (e) {
// Do something when catch error
}
},
//购物公告栏效果
getTipsContent() {
this.startMove();
},
//礼物效果
getGiftEffect() {
let that = this;
const gift = wx.createSelectorQuery();
gift.selectAll("#gift_screen .li").boundingClientRect();
gift.selectViewport().scrollOffset();
gift.exec(function (res) {
let widthAll = 0;
let widthArray = res[0] ? res[0] : [];
widthArray.forEach(function (item, index) {
widthAll += item.width;
});
that.data.firstwidth = widthArray[0].width;
const giftwidth = wx.createSelectorQuery();
giftwidth.select("#gift_screen").boundingClientRect();
giftwidth.selectViewport().scrollOffset();
giftwidth.exec(function (res) {
let width = res[0].width;
that.setData({
giftwidth: width,
widthAll: widthAll < width ? width : widthAll,
giftScreenLeft: width,
});
timer_3 = setTimeout(() => {
that.setData({
giftScreenLeftBol: false,
});
that.giftListRoll();
}, 1000);
});
});
},
// 获取海报画布宽高
getMyCanvasMessage() {
wx.getSystemInfo({
success: (res) => {
canvasDpr = wx.getSystemInfoSync().pixelRatio;
if (res.windowWidth * 2 < 750) {
unit = res.windowWidth / 620;
} else {
unit = res.windowWidth / 750;
}
myCanvasWidth = 620 * canvasDpr * unit;
myCanvasHeight = 883 * canvasDpr * unit;
this.setData({
canvasWidth: parseInt(myCanvasWidth),
canvasHeight: parseInt(myCanvasHeight),
});
},
});
},
//主播弹窗数据
getAnchorPopup() {
// 防止多次请求
if (clicktag == 0) {
clicktag = 1;
setTimeout(function () {
clicktag = 0;
}, 2000);
}
wx.showLoading({
title: "加载中",
});
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.anchor-popup");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
},
success: function (resdata) {
wx.hideLoading();
var res = resdata.data;
if (res.result == 1) {
that.setData({
anchorPopupData: res.data,
changeAnchor: false,
});
if (res.data.is_concern == 1) {
that.setData({
focusBol: false,
});
} else {
that.setData({
focusBol: true,
});
}
that.setData({
showUser: true,
shade: true,
});
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
wx.hideLoading();
console.log(res.msg);
},
});
},
//预先下载图片数据
downImg() {
let that = this;
if (this.data.postData.avatar) {
wx.downloadFile({
url: this.data.postData.avatar, // 服务器返回的图片地址
success: (res) => {
that.setData({
"postData.avatar": res.tempFilePath,
});
if (that.data.postData.cover) {
wx.downloadFile({
url: that.data.postData.cover, // 服务器返回的图片地址
success: (res) => {
that.setData({
"postData.cover": res.tempFilePath,
});
// 获取图片信息
wx.getImageInfo({
src: that.data.postData.cover,
success(res) {
that.setData({
"postData.imgData": res,
});
if (that.data.postData.m_avatar) {
wx.downloadFile({
url: that.data.postData.m_avatar, // 服务器返回的图片地址
success: (res) => {
that.setData({
"postData.m_avatar": res.tempFilePath,
});
if (that.data.postData.qr_code) {
wx.downloadFile({
url: that.data.postData.qr_code, // 服务器返回的图片地址
success: (res) => {
that.setData({
"postData.qr_code": res.tempFilePath,
});
if (that.data.postData.shop_logo) {
wx.downloadFile({
url: that.data.postData.shop_logo, // 服务器返回的图片地址
success: (res) => {
that.setData({
"postData.shop_logo": res.tempFilePath,
});
if(that.data.roomData.is_share_word != 1){
//没有开启自定义分享语设置
that.getAvaterInfo();
}
},
fail: function (res) {
that.setData({
loadingMessage:
"海报生成失败,商城图标下载失败",
});
// 失败回调
console.log(res, "失败");
},
});
} else {
that.setData({
"postData.shop_logo": "",
});
if(that.data.roomData.is_share_word != 1){
//没有开启自定义分享语设置
that.getAvaterInfo();
}
}
},
fail: function (res) {
// 失败回调
console.log(res, "失败");
that.setData({
loadingMessage:
"海报生成失败,小程序二维码下载失败",
});
},
});
}
},
fail: function (res) {
// 失败回调
that.setData({
loadingMessage:
"海报生成失败,用户头像图片下载失败",
});
console.log(res, "失败");
},
});
}
},
});
// res.tempFilePath是网络图片的本地地址
},
fail: function (res) {
// 失败回调
that.setData({
loadingMessage: "海报生成失败,直播封面图片下载失败",
});
console.log(res, "失败");
},
});
}
// res.tempFilePath是网络图片的本地地址
},
fail: function (res) {
that.setData({
loadingMessage: "海报生成失败,主播头像图片下载失败",
});
// 失败回调
console.log(res, "失败");
},
});
}
},
//获取海报
getPoster() {
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live-list.room-post");
let json = {};
if (that.data.room_id) {
json.id = this.data.room_id;
}
if (that.data.playerType) {
json.playerType = this.data.playerType;
}
if (that.data.backid) {
json.backid = this.data.backid;
}
if (that.data.memberid) {
json.memberid = this.data.memberid;
}
app._postNetWork({
url: urlStr,
showToastIn: false,
data: json,
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
postData: res.data,
});
that.downImg(); //预先加载画布所需图片
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
smallWindowClose1(){
this.data.smallWindowIn = true;
// console.log(this.data.rewardTimeOut,'进入小窗onhide的时候不清除定时器smallWindowClosesmallWindowClosesmallWindowClosesmallWindowClose')
},
smallWindowClose(){
// 播放器退出小窗
this.data.smallWindowIn = false;
// console.log(this.data.rewardTimeOut,'退出小窗smallWindowClosesmallWindowClosesmallWindowClosesmallWindowClose')
},
statechange(e) {
let code = e.detail.code;
// console.log("llll:::", code,'rewardTimeOut',this.data.rewardTimeOut,'code_id',this.data.code_id);
// 观看奖励 一分钟后请求接口
if(code == "2004" && this.data.code_id){
if(!this.data.rewardTimeOut){
// console.log('llll:::直播请求定时器')
this.data.rewardTimeOut = setInterval(() => {
this.rewardLive();
}, 60000);
}
}
if(code == "2006" && this.data.code_id){
// 直播结束但是如果在pk则不取消定时器
if(!this.data.isLivePK){
this.data.rewardTimeOut = null;
// console.log('clearInterval')
clearInterval(this.data.rewardTimeOut);
}
}
if (code == "2002" || code == "2002") {
wx.hideLoading({});
}
},
// 观看奖励请求
rewardLive(){
// var mytime=new Date().toLocaleTimeString();
// wx.showToast({
// title: mytime,
// icon:'none',
// duration:1000
// })
let urlStr = app.getNetAddresss("plugin.room.frontend.live.room-view");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
code_id: this.data.code_id,
room_id: this.data.room_id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
console.log('成功');
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
error(e) {
this.data.rewardTimeOut = null;
// console.log('clearInterval')
clearInterval(this.data.rewardTimeOut);
wx.hideLoading({});
wx.showModal({
title: "提示",
content: "错误提示" + e.detail.errMsg + "(返回直播列表)",
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
console.log("kkkk:::", e);
},
statechangePK(e){
let code = e.detail.code;
// console.log("拉取连麦:::", code,'rewardTimeOut',this.data.rewardTimeOut,'code_id',this.data.code_id);
if(code == "2004" && this.data.code_id){
if(!this.data.rewardTimeOut){
this.data.rewardTimeOut = setInterval(() => {
this.rewardLive();
}, 60000);
}
}
if (code == "2002" || code == "2002") {
wx.hideLoading({});
}
},
errorPK(e) {
this.data.rewardTimeOut = null;
// console.log('clearInterval')
clearInterval(this.data.rewardTimeOut);
wx.hideLoading({});
wx.showToast({
title: '拉取连麦失败',
icon: 'success',
duration: 2000
});
console.log("拉取连麦失败:::", e);
},
//退出群组
quitGroup() {
let that = this;
if (that.data.lastGroupId) {
let promise = that.data.tim.quitGroup(that.data.lastGroupId);
promise
.then(function (imResponse) {
console.log(imResponse.data.groupID); // 退出成功的群 ID
})
.catch(function (imError) {
console.warn("quitGroup error:", imError); // 退出群组失败的相关信息
});
}
clearTimeout(this.data.giftEffectsTime);
},
//获取群详细资料
chatJoinGroup() {
let that = this;
that.data.lastGroupId = that.data.roomData.groupId;
let promise = that.data.tim.joinGroup({
groupID: that.data.roomData.groupId,
type: TIM.TYPES.GRP_CHATROOM,
});
promise
.then(function (imResponse) {
switch (imResponse.data.status) {
case TIM.TYPES.JOIN_STATUS_WAIT_APPROVAL:
break; // 等待管理员同意
case TIM.TYPES.JOIN_STATUS_SUCCESS: // 加群成功
console.log(imResponse.data.group); // 加入的群组资料
break;
default:
break;
}
that.comeRoom();
that.data.imReadly = false;
})
.catch(function (imError) {
that.comeRoom();
that.data.imReadly = false;
console.warn("joinGroup error:", imError); // 申请加群失败的相关信息
});
},
//查询我的个人信息
chatMyProfile() {
let that = this;
let promise = that.data.tim.getMyProfile();
promise
.then(function (imResponse) {
console.log(imResponse.data); // 个人资料 - Profile 实例
let myData = imResponse.data;
if (!myData.nick) {
that.changeMyProfile();
}
})
.catch(function (imError) {
console.warn("getMyProfile error:", imError); // 获取个人资料失败的相关信息
});
},
//修改我的个人信息
changeMyProfile() {
let that = this;
let promise = that.data.tim.updateMyProfile({
nick: that.data.roomData.userNickname,
avatar: that.data.roomData.userAvatar,
});
promise
.then(function (imResponse) {
console.log(imResponse.data); // 更新资料成功
})
.catch(function (imError) {
console.warn("updateMyProfile error:", imError); // 更新资料失败的相关信息
});
},
//领取营销活动
activityDataBtn(e) {
if (this.data.activityDataBtnBol) {
return false;
}
this.data.activityDataBtnBol = true;
let id = e.currentTarget.dataset.id;
let index = e.currentTarget.dataset.index;
if (this.data.activityDataArray[index].activityData.status == 2) {
return false;
}
let that = this;
let urlStr = app.getNetAddresss(
"plugin.room.frontend.live.member-activity"
);
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
activity_id: id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
let activitymessage = res.data;
if (activitymessage.balanceBonus == 1) {
that.setData({
["activityDataArray[" +
index +
"].activityData.balanceBonusStatus"]: 2,
});
} else {
that.setData({
["activityDataArray[" +
index +
"].activityData.balanceBonusStatus"]: 3,
});
}
let activityList =
that.data.activityDataArray[index].activityData.activityList;
if (activitymessage.coupon == 1) {
activityList.forEach((val, idx) => {
activityList[idx].status = 2;
});
that.setData({
["activityDataArray[" +
index +
"].activityData.activityList"]: activityList,
});
} else {
activityList.forEach((val, idx) => {
activityList[idx].status = 3;
});
that.setData({
["activityDataArray[" +
index +
"].activityData.activityList"]: activityList,
});
}
if (activitymessage.loveBonus == 1) {
that.setData({
["activityDataArray[" +
index +
"].activityData.loveBonusStatus"]: 2,
});
} else {
that.setData({
["activityDataArray[" +
index +
"].activityData.loveBonusStatus"]: 3,
});
}
if (activitymessage.packetBonus == 1) {
that.setData({
["activityDataArray[" +
index +
"].activityData.packetBonusStatus"]: 2,
});
} else {
that.setData({
["activityDataArray[" +
index +
"].activityData.packetBonusStatus"]: 3,
});
}
if (activitymessage.pointBonus == 1) {
that.setData({
["activityDataArray[" +
index +
"].activityData.pointBonusStatus"]: 2,
});
} else {
that.setData({
["activityDataArray[" +
index +
"].activityData.pointBonusStatus"]: 3,
});
}
that.setData({
["activityDataArray[" + index + "].activityData.status"]: 2,
});
that.data.activityDataBtnBol = false;
} else {
that.data.activityDataBtnBol = false;
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
//聊天事件
chatEventList() {
let that = this;
// 监听事件,例如:
that.data.tim.on(TIM.EVENT.SDK_READY, function (event) {
// 收到离线消息和会话列表同步完毕通知,接入侧可以调用 sendMessage 等需要鉴权的接口
that.data.sendMessageReadly = false;
that.chatMyProfile();
// that.chatJoinGroup()
// event.name - TIM.EVENT.SDK_READY
});
that.data.tim.on(TIM.EVENT.MESSAGE_RECEIVED, function (event) {
//防止重新接受两条信息
if (
event.data[0].type == "TIMCustomElem" &&
event.data[0].payload &&
event.data[0].payload.extension == "customText"
) {
if (that.data.lasttime == event.data[0].time) {
return;
} else {
that.data.lasttime = event.data[0].time;
}
}
let message = event.data;
let tipsContent = that.data.tipsContent;
let giftListContent = that.data.giftListContent;
let roomMemberContent = that.data.roomMemberContent;
message.forEach(function (val, index) {
let conversationType = val.conversationType;
//判断消息来源群或者个人
if (conversationType == TIM.TYPES.CONV_GROUP) {
let data = val;
//后台发送过来的消息处理
if (data.from == "administrator") {
if (data.payload.extension == "end") {
wx.showModal({
title: "提示",
content: "直播已经结束",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
} else if (data.payload.extension == "explain_goods") {
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
that.setData({
explainingGoods: json,
});
}
} else if (data.payload.extension == "cancel_explain") {
that.setData({
"explainingGoods.goods_id": "",
});
} else if (data.payload.extension == "chat_reply") {
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
let member_id = json.member_id;
if (that.data.roomData.userID == member_id) {
wx.showModal({
title: "提示",
content: "您已经解除禁言",
showCancel: false,
success(res) {},
});
that.setData({
room_ban: false,
});
}
}
} else if (data.payload.extension == "chat_ban") {
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
let member_id = json.member_id;
if (that.data.roomData.userID == member_id) {
wx.showModal({
title: "提示",
content: "您已经被禁言",
showCancel: false,
success(res) {},
});
that.setData({
room_ban: true,
});
}
}
} else if (data.payload.extension == "room_ban") {
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
let member_id = json.member_id;
if (that.data.roomData.userID == member_id) {
that.setData({
picturemodeshow: false,
});
wx.showModal({
title: "提示",
content: "您已被禁入直播间",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
}
}
} else if (data.payload.extension == "ban") {
wx.showModal({
title: "提示",
content: "直播已经封禁",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
} else if (data.payload.extension == "welcome") {
// if (data.payload.description) {
// let json = JSON.parse(data.payload.description);
// let messageList = that.data.messageList;
// messageList.push({
// content: json.content
// })
// that.setData({
// messageList,
// messagesTop: messageList.length * 1000
// })
// }
} else if (data.payload.extension == "leave") {
wx.showModal({
title: "提示",
content: "主播暂时离开",
showCancel: false,
success(res) {},
});
} else if (data.payload.extension == "online") {
wx.showModal({
title: "提示",
content: "主播重新连接",
showCancel: false,
success(res) {
if (res.confirm) {
that.data.roomObj.play({
success() {
wx.showToast({
icon: "none",
title: "正在重新启动播放",
duration: 1500,
});
},
fail() {
wx.showToast({
icon: "none",
title: "重新启动播放失败",
duration: 1500,
});
},
});
}
},
});
} else if (data.payload.extension == "reward") {
//打赏
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
if (json.show_effect == 1) {
//开启特效
let specialList = that.data.specialList;
specialList.push({
nickname: json.nickname,
reward_name: "送主播" + json.reward_name,
img: json.avatar,
effect_time: json.effect_time,
effect_type: json.effect_type,
effect_gif: `${json.effect_gif}?v=${Date.now()}` //防止gif第二次取缓存不播放
});
that.setData({specialList});
if (that.data.specialList.length <= 1) that.giftEffectsTimer();
} else {
giftListContent.push({
nickname: json.nickname,
avatar: json.avatar,
reward_name: "送主播" + json.reward_name,
reward_icon: json.reward_icon,
});
that.data.giftListContent = giftListContent;
}
}
} else if (data.payload.extension == "virtual_view_num") {
//观看人数
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
console.log(json);
that.setData({
view_num: json.view_num,
});
}
} else if (data.payload.extension == "concern") {
//关注
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
tipsContent.push({
type: "concern",
nickname: json.nickname,
});
that.data.tipsContent = tipsContent;
}
} else if (data.payload.extension == "buy") {
//正在买
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
tipsContent.push({
type: "buy",
nickname: json.nickname,
count: json.count,
});
that.data.tipsContent = tipsContent;
}
} else if (data.payload.extension == "come") {
//进入直播间
// if (data.payload.description) {
// let json = JSON.parse(data.payload.description);
// tipsContent.push({
// type: "come",
// nickname: json.nickname
// })
// that.data.tipsContent = tipsContent;
// }
} else if (data.payload.extension == "room_member") {
//进入活动
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
roomMemberContent.push(json);
that.data.roomMemberContent = roomMemberContent;
}
that.getroomMember(that.data.roomMemberContent.length - 1);
} else if (data.type == "TIMCustomElem") {
if (data.payload.extension == "open_chat") {
//开启评论
that.setData({
close_chat: 0
});
} else if (data.payload.extension == "close_chat") {
//开启评论
that.setData({
close_chat: 1
});
} else if (data.payload.extension == "open_reward") {
//开启评论
that.setData({
close_reward: 0
});
} else if (data.payload.extension == "close_reward") {
//开启评论
that.setData({
close_reward: 1
});
}
}
} else if (data.type == "TIMTextElem") {
// let messageList = that.data.messageList;
// messageList.push({
// nick: data.nick,
// id: data.from,
// text: data.payload.text
// })
// that.setData({
// messageList,
// messagesTop: messageList.length * 1000
// })
} else if (data.type == "TIMCustomElem") {
//自定义类型解析
console.log("有信息了======",JSON.parse(data.payload.description));
if(data.payload.extension == "customPkGroup"){
that.data.startPKTime = Date.parse(new Date()) / 1000;
that.data.pkTimer = setInterval(function() {
that.GetRTime();
}, 1000);
that.setData({
livePKData: JSON.parse(data.payload.description),
livePKSrc: that.data.roomData.play_url_rtmp.match(/(\S*)\/live\//)[1]+'/live/' + JSON.parse(data.payload.description).streamid,
isLivePK: true,
});
} else if (data.payload.extension == "customQuitPkGroup") {
// 结束连麦
that.setData({
livePKData: {},
livePKSrc: "",
isLivePK: false,
PKTimed: "00:00:00"
});
// console.log('clearInterval')
clearInterval(that.data.pkTimer);
} else if (data.payload.extension == "customText") {
let messageList = that.data.messageList;
let messageListData = JSON.parse(data.payload.description);
if (messageListData && messageListData.memberLevelName) {
messageListData.memberLevelName = messageListData.memberLevelName.substr(
0,
2
);
}
messageList.push(messageListData);
that.setData({
messageList,
messagesTop: messageList.length * 1000,
});
} else if (data.payload.extension == "come") {
//进入直播间
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
tipsContent.push({
type: "come",
nickname: json.nickname,
});
that.data.tipsContent = tipsContent;
}
} else if (data.payload.extension == "welcome") {
if (data.payload.description) {
let json = JSON.parse(data.payload.description);
let messageList = that.data.messageList;
messageList.push({
content: json.content,
});
that.setData({
messageList,
messagesTop: messageList.length * 1000,
});
}
}
}
}
// else if (conversationType == TIM.TYPES.CONV_C2C) {
// }
});
// 收到推送的单聊、群聊、群提示、群系统通知的新消息,可通过遍历 event.data 获取消息列表数据并渲染到页面
// event.name - TIM.EVENT.MESSAGE_RECEIVED
// event.data - 存储 Message 对象的数组 - [Message]
});
that.data.tim.on(TIM.EVENT.MESSAGE_REVOKED, function (event) {
// 收到消息被撤回的通知
// event.name - TIM.EVENT.MESSAGE_REVOKED
// event.data - 存储 Message 对象的数组 - [Message] - 每个 Message 对象的 isRevoked 属性值为 true
});
that.data.tim.on(TIM.EVENT.CONVERSATION_LIST_UPDATED, function (event) {
// 收到会话列表更新通知,可通过遍历 event.data 获取会话列表数据并渲染到页面
// event.name - TIM.EVENT.CONVERSATION_LIST_UPDATED
// event.data - 存储 Conversation 对象的数组 - [Conversation]
});
that.data.tim.on(TIM.EVENT.GROUP_LIST_UPDATED, function (event) {
// 收到群组列表更新通知,可通过遍历 event.data 获取群组列表数据并渲染到页面
// event.name - TIM.EVENT.GROUP_LIST_UPDATED
// event.data - 存储 Group 对象的数组 - [Group]
});
that.data.tim.on(TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED, function (event) {
// 收到新的群系统通知
// event.name - TIM.EVENT.GROUP_SYSTEM_NOTICE_RECEIVED
// event.data.type - 群系统通知的类型,详情请参见 GroupSystemNoticePayload 的 operationType 枚举值说明
// event.data.message - Message 对象,可将 event.data.message.content 渲染到到页面
});
that.data.tim.on(TIM.EVENT.PROFILE_UPDATED, function (event) {
// 收到自己或好友的资料变更通知
// event.name - TIM.EVENT.PROFILE_UPDATED
// event.data - 存储 Profile 对象的数组 - [Profile]
});
that.data.tim.on(TIM.EVENT.BLACKLIST_UPDATED, function (event) {
// 收到黑名单列表更新通知
// event.name - TIM.EVENT.BLACKLIST_UPDATED
// event.data - 存储 userID 的数组 - [userID]
});
that.data.tim.on(TIM.EVENT.ERROR, function (event) {
// 收到 SDK 发生错误通知,可以获取错误码和错误信息
// event.name - TIM.EVENT.ERROR
// event.data.code - 错误码
// event.data.message - 错误信息
});
that.data.tim.on(TIM.EVENT.SDK_NOT_READY, function (event) {
// 收到 SDK 进入 not ready 状态通知,此时 SDK 无法正常工作
// event.name - TIM.EVENT.SDK_NOT_READY
});
that.data.tim.on(TIM.EVENT.KICKED_OUT, function (event) {
// 收到被踢下线通知
// event.name - TIM.EVENT.KICKED_OUT
// event.data.type - 被踢下线的原因,例如:
// - TIM.TYPES.KICKED_OUT_MULT_ACCOUNT 多实例登录被踢
// - TIM.TYPES.KICKED_OUT_MULT_DEVICE 多终端登录被踢
// - TIM.TYPES.KICKED_OUT_USERSIG_EXPIRED 签名过期被踢
wx.showToast({
icon: "none",
title: "您的IM被踢下线了",
duration: 2000,
});
});
},
//im的营销活动提交
roomMemberBtn(e) {
if (this.data.roomMemberBtnBol) {
return false;
}
this.data.roomMemberBtnBol = true;
let id = e.currentTarget.dataset.id;
let index = e.currentTarget.dataset.index;
if (this.data.roomMemberContentArray[index].activityData.status == 2) {
return false;
}
let that = this;
let urlStr = app.getNetAddresss(
"plugin.room.frontend.live.room-member-activity"
);
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
activity_id: id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
let activitymessage = res.data;
if (activitymessage.balanceBonus == 1) {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.balanceBonusStatus"]: 2,
});
} else {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.balanceBonusStatus"]: 3,
});
}
let activityList =
that.data.roomMemberContentArray[index].activityData.activityList;
if (activitymessage.coupon == 1) {
activityList.forEach((val, idx) => {
activityList[idx].status = 2;
});
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.activityList"]: activityList,
});
} else {
activityList.forEach((val, idx) => {
activityList[idx].status = 3;
});
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.activityList"]: activityList,
});
}
if (activitymessage.loveBonus == 1) {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.loveBonusStatus"]: 2,
});
} else {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.loveBonusStatus"]: 3,
});
}
if (activitymessage.packetBonus == 1) {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.packetBonusStatus"]: 2,
});
} else {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.packetBonusStatus"]: 3,
});
}
if (activitymessage.pointBonus == 1) {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.pointBonusStatus"]: 2,
});
} else {
that.setData({
["roomMemberContentArray[" +
index +
"].activityData.pointBonusStatus"]: 3,
});
}
that.setData({
["roomMemberContentArray[" + index + "].activityData.status"]: 2,
});
that.data.roomMemberBtnBol = false;
} else {
that.data.roomMemberBtnBol = false;
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
//im的营销活动
getroomMember(first_index) {
let that = this;
let roomMemberContent = that.data.roomMemberContent[first_index];
let roomMemberContentArray = that.data.roomMemberContentArray;
// let roomMemberTimeArray = that.data.roomMemberTimeArray;
if (roomMemberContent) {
let activity = roomMemberContent;
let activityList = [];
// let startTime = 0;
if (activity.coupon && activity.coupon.coupon_id) {
activity.coupon.coupon_id.forEach((val, index) => {
activityList.push({
coupon_id: activity.coupon.coupon_id[index],
coupon_name: activity.coupon.coupon_name[index],
coupon_several: activity.coupon.coupon_several[index],
status: 1,
});
});
}
// if (activity.liveTime) {
// startTime = activity.liveTime * 60 * 1000;
// }
activity.activityList = activityList;
activity.pointBonusStatus = 1;
activity.loveBonusStatus = 1;
activity.balanceBonusStatus = 1;
activity.packetBonusStatus = 1;
activity.status = 1;
activity.showactivity = false;
roomMemberContentArray.push({
activityData: activity,
});
// if (startTime) {
// let activityTime = null;
// activityTime = setTimeout(function() {
// that.setData({
// ['roomMemberContentArray[' + first_index + '].activityData.showactivity']: true
// })
// }, startTime)
// roomMemberTimeArray.push(activityTime)
// }
that.setData({
roomMemberContentArray: roomMemberContentArray,
// roomMemberTimeArray: roomMemberTimeArray
});
that.setData({
["roomMemberContentArray[" +
first_index +
"].activityData.showactivity"]: true,
});
}
},
logout() {
let that = this;
let promise = that.data.tim.logout();
promise
.then(function (imResponse) {
console.log(imResponse.data); // 登出成功
})
.catch(function (imError) {
console.warn("logout error:", imError);
});
},
//聊天登录
chatLogin() {
let that = this;
let promise = that.data.tim.login({
userID: that.data.roomData.userID.toString(),
userSig: that.data.roomData.userSig,
});
promise
.then(function (imResponse) {
console.log(imResponse.data); // 登录成功
that.chatJoinGroup();
})
.catch(function (imError) {
console.warn("login error:", imError); // 登录失败的相关信息
});
},
getGiftList() {
wx.showLoading({
title: "加载中",
});
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.reward-list");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
giftListData: res.data.list,
giftMemberData: res.data.member,
giftType: res.data.type ? res.data.type : {},
showGift: true,
shade: true,
});
// let giftMemberData = that.data.giftMemberData;
let giftType = that.data.giftType;
if (giftType && giftType.integral == 1) {
that.setData({
activeNum: 1,
});
} else if (giftType && giftType.balance == 1) {
that.setData({
activeNum: 2,
});
} else if (giftType && giftType.love == 1) {
that.setData({
activeNum: 3,
});
}
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
wx.hideLoading();
},
fail: function (res) {
wx.hideLoading();
console.log(res.msg);
},
});
},
getData(index) {
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.room");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
id: this.data.room_id,
password: this.data.passwordVal,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
if (res.data.purview == 2) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "密码错误,是否重新输入密码?",
success(res) {
if (res.confirm) {
if (index !== undefined) {
that.setData({
passwordIndex: index,
});
}
that.setData({
passwordShow: true,
});
} else if (res.cancel) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
return;
} else if (res.data.purview == 3) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "需要密码访问,是否输入密码?",
success(res) {
if (res.confirm) {
if (index !== undefined) {
that.setData({
passwordIndex: index,
});
}
that.setData({
passwordShow: true,
});
} else if (res.cancel) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
return;
} else if (res.data.purview == 4) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "没有访问权限",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
that.setData({
passwordShow: false,
});
return;
} else {
that.setData({
passwordShow: false,
});
}
if (res.data.status == 4) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "直播已经结束",
showCancel: false,
success(res_1) {
if (res_1.confirm) {
if (res.data && res.data.back_id) {
wx.navigateTo({
url:
"/packageD/directSeeding/livePage/livePage?id=" +
that.data.room_id +
"&playerType=video" +
"&backid=" +
res.data.back_id,
});
} else {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
}
},
});
return;
} else if (res.data.status == 1) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "直播等待审核中,请稍后再来",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
return;
} else if (res.data.status == 2) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "等待直播中,请稍后再来",
showCancel: false,
success(res) {
if (res.confirm) {
if(this.data.code_id){
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList?cd="+this.data.code_id,
});
}else{
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
}
},
});
return;
}
if (res.data.online_status && res.data.online_status == "forbid") {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "抱歉,该直播间被禁用了",
showCancel: false,
success(res) {
if (res.confirm) {
wx.redirectTo({
url: "/packageD/directSeeding/liveList/liveList",
});
}
},
});
return;
} else if (
res.data.online_status &&
res.data.online_status == "inactive"
) {
wx.hideToast({});
wx.showModal({
title: "提示",
content: "抱歉,该主播暂时离开",
showCancel: false,
success(res) {},
});
}
that.setData({
shownum: res.data.like_num ? res.data.like_num : 0,
roomData: res.data,
id: res.data.member_id,
view_num: res.data.view_num,
roomMemberContentArray: [],
roomMemberContent: [],
IMmessage: res.data.message,
luck_number: res.data.luck_number || 0,
close_reward: res.data.close_reward || 0,
close_chat: res.data.close_chat || 0,
mode_button: res.data.mode_button || 0
});
if (that.data.last_room_id == that.data.room_id) {
that.setData({
"liveListData[0].avatar": res.data.avatar,
"liveListData[0].cover": res.data.cover,
"liveListData[0].banner": res.data.banner,
});
}
if (res.data.voice_status) {
that.setData({
livePKData: res.data.voice_anchor,
livePKSrc: res.data.voice_anchor.play_url.play_url_rtmp,
isLivePK: true
});
that.data.startPKTime = res.data.voice_anchor.start_time||Date.parse(new Date()) / 1000;
that.data.pkTimer = setInterval(function() {
that.GetRTime();
}, 1000);
}
if (res.data.is_concern == 1) {
that.setData({
focusBol: false,
});
} else {
that.setData({
focusBol: true,
});
}
that.activeRoomSet();
if (res.data.IM == 1) {
setTimeout(() => {
that.chatLogin();
}, 1000);
}
// for (let k = 0; k < that.data.roomMemberTimeArray.length; k++) {
// clearTimeout(that.data.roomMemberTimeArray[k]);
// }
// that.data.roomMemberTimeArray = []
if (index !== undefined) {
that.setData({
["liveListData[" + index + "].changeloadBol"]: true,
});
}
for (let j = 0; j < that.data.activityTimeArray.length; j++) {
clearTimeout(that.data.activityTimeArray[j]);
}
that.data.activityTimeArray = [];
if (res.data.view_activity == 1) {
let activityArray = res.data.activity;
let activityDataArray = [];
let activityTimeArray = that.data.activityTimeArray;
for (let i = 0; i < activityArray.length; i++) {
let activity = activityArray[i];
let activityList = [];
let startTime = 0;
if (activity.coupon && activity.coupon.coupon_id) {
activity.coupon.coupon_id.forEach((val, index) => {
activityList.push({
coupon_id: activity.coupon.coupon_id[index],
coupon_name: activity.coupon.coupon_name[index],
coupon_several: activity.coupon.coupon_several[index],
status: 1,
});
});
}
if (activity.liveTime) {
startTime = activity.liveTime * 60 * 1000;
}
activity.activityList = activityList;
activity.pointBonusStatus = 1;
activity.loveBonusStatus = 1;
activity.balanceBonusStatus = 1;
activity.packetBonusStatus = 1;
activity.status = 1;
activity.showactivity = false;
activityDataArray.push({
activityData: activity,
});
if (startTime) {
let activityTime = null;
activityTime = setTimeout(function () {
that.setData({
["activityDataArray[" +
i +
"].activityData.showactivity"]: true,
});
}, startTime);
activityTimeArray.push(activityTime);
}
}
that.setData({
activityTimeArray: activityTimeArray,
activityDataArray: activityDataArray,
});
}
// that.data.tipsContent = [];
// that.data.giftListContent = [];
// that.setData({
// tipsContentMsssage: "",
// giftListmessage: {}
// })
clearTimeout(timer_1);
clearTimeout(timer_2);
clearTimeout(timer_3);
that.getGiftEffect(); //开启礼物效果
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
passwordLiveBtn() {
if (this.data.passwordIndex !== undefined) {
this.getData(this.data.passwordIndex);
} else {
this.getData(0);
}
},
//查看优惠券
goCoupon() {
wx.navigateTo({
url: "/packageA/member/coupon_v2/coupon_v2",
});
},
//跳转积分
goIntegral() {
wx.navigateTo({
url: "/packageB/member/integral/integral",
});
},
//查看爱心值
goLoveindex() {
wx.navigateTo({
url: "/packageB/member/love/Love_index/Love_index",
});
},
//查看余额
gobalance() {
wx.navigateTo({
url: "/packageA/member/balance/balance/balance",
});
},
//是否取消关注
followBtn() {
if (this.data.focusBol) {
this.addConcern();
} else {
this.cancelConcern();
}
},
addConcern() {
//添加关注
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.concern");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
member_id: this.data.id,
room_id: this.data.room_id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
wx.showToast({
icon: "none",
title: "关注成功!",
duration: 1500,
});
that.setData({
focusBol: false,
});
that.newMedia(2);
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
cancelConcern() {
//取消关注
let that = this;
let urlStr = app.getNetAddresss(
"plugin.room.frontend.anchor.cancel-concern"
);
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
member_id: this.data.id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
wx.showToast({
icon: "none",
title: "取消关注!",
duration: 1500,
});
that.setData({
focusBol: true,
});
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
//跳转个人主页
goHomePage() {
wx.navigateTo({
url:
"/packageD/directSeeding/anchorDetail/anchorDetail?id=" + this.data.id,
});
},
//跳转店铺
goPage(e) {
let roleid = e.currentTarget.dataset.roleid;
let shopid = e.currentTarget.dataset.shopid;
if (roleid == 1) {
wx.navigateTo({
url: "/packageC/o2o/o2oStore/o2oStore?store_id=" + shopid,
});
} else if (roleid == 2) {
wx.navigateTo({
url: "/packageA/member/supplier/SupplierShop/SupplierShop?id=" + shopid,
});
} else if (roleid == 3) {
wx.navigateTo({
url: "/packageC/hotel/HotelHome/HotelHome?id=" + shopid,
});
} else {
wx.reLaunch({
url: "/packageG/index/index",
});
}
},
//跳转购物车
goGood(e) {
let id = e.currentTarget.dataset.id;
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.check-goods");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
goods_id: id,
room_id: that.data.room_id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
showGoodLift: false,
shade: false,
});
wx.navigateTo({
url:
"/packageA/detail_v2/detail_v2?id=" +
id +
"&liveshow=1&roomid=" +
that.data.room_id,
});
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
//礼物选择
giftSelect(e) {
let id = e.currentTarget.dataset.id;
let index = e.currentTarget.dataset.index;
this.setData({
giftSelectId: id,
});
this.data.giftSelectNUm = index;
},
//打赏
rewardBtn() {
if (!this.data.activeNum) {
wx.showToast({
icon: "none",
title: "请选取礼物支付类型",
duration: 1500,
});
}
let that = this;
that.data.usewechatpayBol = false;
if (this.data.giftSelectBol) {
return false;
}
if (!this.data.giftSelectId) {
wx.showToast({
icon: "none",
title: "请先选取礼物",
duration: 1500,
});
return false;
} else if (
this.data.activeNum == 1 &&
(!this.data.giftMemberData.credit1 ||
this.data.giftMemberData.credit1 <= 0 ||
Number(this.data.giftMemberData.credit1) <
Number(
this.data.giftListData[this.data.giftSelectNUm].credit1_number
))
) {
wx.showToast({
icon: "none",
title: this.data.giftMemberData.credit1_name
? this.data.giftMemberData.credit1_name + "不足"
: "积分不足",
duration: 1500,
});
return false;
} else if (
this.data.activeNum == 2 &&
(!this.data.giftMemberData.credit2 ||
this.data.giftMemberData.credit2 <= 0 ||
Number(this.data.giftMemberData.credit2) <
Number(
this.data.giftListData[this.data.giftSelectNUm].credit2_number
))
) {
// wx.showToast({
// icon: 'none',
// title: '余额不足',
// duration: 1500
// })
let money = Number(
this.data.giftListData[this.data.giftSelectNUm].credit2_number
);
if (!money || money <= 0) {
wx.showToast({
icon: "none",
title: "打赏的礼物金额价值必须大于零",
duration: 1500,
});
return false;
}
that.setData({
giftmoney: money,
wechatpayShow: true,
showGift: false,
shade: false,
});
that.data.giftSelectBol = false;
return false;
} else if (
this.data.activeNum == 3 &&
(!this.data.giftMemberData.love ||
this.data.giftMemberData.love <= 0 ||
Number(this.data.giftMemberData.love) <
Number(this.data.giftListData[this.data.giftSelectNUm].love_number))
) {
wx.showToast({
icon: "none",
title: this.data.giftMemberData.love_name
? this.data.giftMemberData.love_name + "不足"
: "爱心值不足",
duration: 1500,
});
return false;
}
this.data.giftSelectBol = true;
let urlStr = app.getNetAddresss("plugin.room.frontend.reward.index");
let num = this.data.activeNum;
let number = 0;
if (num == 1) {
number = this.data.giftListData[this.data.giftSelectNUm].credit1_number;
} else if (num == 2) {
number = this.data.giftListData[this.data.giftSelectNUm].credit2_number;
} else if (num == 3) {
number = this.data.giftListData[this.data.giftSelectNUm].love_number;
}
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
reward_type: this.data.activeNum,
room_id: this.data.room_id,
reward_id: this.data.giftSelectId,
number: number,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
wx.showToast({
icon: "none",
title: "打赏成功",
duration: 1500,
});
if (num == 1) {
that.setData({
"giftMemberData.credit1": Number(
that.data.giftMemberData.credit1 - number
).toFixed(2),
});
} else if (num == 2) {
that.setData({
"giftMemberData.credit2": Number(
that.data.giftMemberData.credit2 - number
).toFixed(2),
});
} else if (num == 3) {
that.setData({
"giftMemberData.love": Number(
that.data.giftMemberData.love - number
).toFixed(2),
});
}
that.setData({
showGift: false,
shade: false,
});
} else {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
that.data.giftSelectBol = false;
},
fail: function (res) {
console.log(res.msg);
},
});
},
giftListRoll: function () {
let that = this;
that.setData({
giftScreenLeft: -this.data.firstwidth,
});
this.giftListRoll_2();
},
giftListRoll_2() {
let that = this;
timer_1 = setTimeout(() => {
that.setData({
giftScreenLeftBol: true,
});
that.setData({
giftScreenLeft: that.data.giftwidth,
});
timer_2 = setTimeout(() => {
that.setData({
giftScreenLeftBol: false,
});
that.setData({
giftScreenLeft: -that.data.firstwidth,
});
if (that.data.giftListContent.length > 0) {
that.setData({
giftListmessage: that.data.giftListContent.shift(),
});
} else {
that.setData({
giftListmessage: {},
});
}
that.giftListRoll_2();
}, 200);
}, 6000); // 滚动不需要停顿则将2000改成动画持续时间
},
getlikeNum() {
let that = this;
let urlStr = app.getNetAddresss("plugin.room.frontend.live.likes");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result == 1) {
that.setData({
shownum: that.data.shownum + 1,
});
that.newMedia(1);
} else {
// wx.showToast({
// icon: 'none',
// title: res.msg,
// duration: 1500
// })
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
clickHandler: function () {
if (this.data.likeNumBol) {
this.getlikeNum();
this.setData({
likeNumBol: false,
});
}
// this.setData({
// shownum: this.data.shownum + 1
// })
this.likeClick();
},
startMove() {
if (this.data.tipsContent.length > 0) {
this.data.tipsopacityBol = !this.data.tipsopacityBol;
}
setTimeout(() => {
if (this.data.tipsopacityBol) {
if (this.data.tipsContent.length > 0) {
this.setData({
tipsContentMsssage: this.data.tipsContent.shift(),
});
this.setData({
tipsopacity: 1,
});
} else {
this.setData({
tipsopacity: 0,
});
}
} else {
this.setData({
tipsopacity: 0,
});
}
this.startMove();
}, 2000); // 滚动不需要停顿则将2000改成动画持续时间
},
likeClick() {
const image = "../../../image/directSeeding/zb_like_icon.png";
const anmationData = {
id: new Date().getTime(),
timer: 0,
opacity: 0.5,
pathData: this.generatePathData(),
image: image,
factor: {
speed: 0.006, // 运动速度,值越小越慢
t: 0, // 贝塞尔函数系数
},
};
if (Object.keys(queue).length > 0) {
queue[anmationData.id] = anmationData;
} else {
queue[anmationData.id] = anmationData;
this.bubbleAnimate();
}
},
getRandom(min, max) {
return Math.random() * (max - min) + min;
},
getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
},
/**获取图片路径 */
generatePathData() {
let width = this.data.width,
height = this.data.height;
const p0 = {
x: 0.65 * width,
y: height,
};
const p1 = {
x: this.getRandom(0.22 * width, 0.33 * width),
y: this.getRandom(0.5 * height, 0.75 * height),
};
const p2 = {
x: this.getRandom(0, 0.88 * width),
y: this.getRandom(0.25 * height, 0.5 * height),
};
const p3 = {
x: this.getRandom(0, 0.88 * width),
y: this.getRandom(0, 0.125 * height),
};
return [p0, p1, p2, p3];
},
updatePath(data, factor) {
const p0 = data[0];
const p1 = data[1];
const p2 = data[2];
const p3 = data[3];
const t = factor.t;
/*计算多项式系数 (下同)*/
const cx1 = 3 * (p1.x - p0.x);
const bx1 = 3 * (p2.x - p1.x) - cx1;
const ax1 = p3.x - p0.x - cx1 - bx1;
const cy1 = 3 * (p1.y - p0.y);
const by1 = 3 * (p2.y - p1.y) - cy1;
const ay1 = p3.y - p0.y - cy1 - by1;
const x = ax1 * (t * t * t) + bx1 * (t * t) + cx1 * t + p0.x;
const y = ay1 * (t * t * t) + by1 * (t * t) + cy1 * t + p0.y;
return {
x,
y,
};
},
bubbleAnimate() {
// let width = this.data.width;
let height = this.data.height;
Object.keys(queue).forEach((key) => {
const anmationData = queue[+key];
const { x, y } = this.updatePath(
anmationData.pathData,
anmationData.factor
);
const speed = anmationData.factor.speed;
anmationData.factor.t += speed;
var curWidth = 30;
curWidth = (height - y) / 1.5;
curWidth = Math.min(30, curWidth);
var curAlpha = anmationData.opacity;
curAlpha = y / height;
curAlpha = Math.min(1, curAlpha);
ctx.globalAlpha = curAlpha;
ctx.drawImage(anmationData.image, x, y, curWidth, curWidth);
if (anmationData.factor.t > 1) {
delete queue[anmationData.id];
}
});
ctx.draw();
if (Object.keys(queue).length > 0) {
timer_4 = setTimeout(() => {
this.bubbleAnimate();
}, 20);
} else {
clearTimeout(timer_4);
ctx.draw(); // 清空画面
}
},
//跳转举报
liveReportBtn() {
let that = this;
this.setData({
pauseBol: false,
});
setTimeout(function () {
wx.navigateTo({
url:
"/packageD/directSeeding/liveReport/liveReport?id=" +
that.data.room_id,
});
}, 500);
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
let language = wx.getStorageSync("langIndex");
this.setData({ language: language.en });
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
console.log('onshow:Sssssssssssssssssssssssss');
this.data.activityDataBtnBol = false;
this.data.roomMemberBtnBol = false;
this.data.catMessagebol = true;
this.setData({
pauseBol: true,
});
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
// 清理定时器
// console.log('onhide,clearInterval',this.data.smallWindowIn)
if(!this.data.smallWindowIn){
// console.log('clearInterval,直播不是在小窗,清除定时器')
clearInterval(this.data.rewardTimeOut);
this.data.rewardTimeOut = null;
}else{
console.log('直播在小窗,不清除定时器');
}
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
//推出登录
this.quitGroup();
this.quitroom();
setTimeout(() => {
this.logout();
}, 80);
clearTimeout(timer);
clearTimeout(timer_1);
if (this.data.pkTimer) {
// console.log('clearInterval')
clearInterval(this.data.pkTimer);
this.data.pkTimer = null;
}
},
quitroom() {
let urlStr = app.getNetAddresss("plugin.room.frontend.live.quit-room");
app._postNetWork({
url: urlStr,
showToastIn: false,
data: {
room_id: this.data.room_id,
},
success: function (resdata) {
var res = resdata.data;
if (res.result != 1) {
wx.showToast({
icon: "none",
title: res.msg,
duration: 1500,
});
}
},
fail: function (res) {
console.log(res.msg);
},
});
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {},
/**
* 用户点击右上角分享
*/
onShareTimeline: function () {
var value = wx.getStorageSync("yz_uid");
var mid = "";
let shareImg = this.data.roomData.cover;
if (value) {
mid = value;
}
if (this.data.playerType == "live") {
let json = {
title:
"欢迎进入" +
this.data.roomData.nickname +
"的" +
this.data.roomData.title +
"直播间!",
path:
"/packageD/directSeeding/livePage/livePage?id=" +
this.data.room_id +
"&playerType=live" +
"&mid=" +
mid,
};
if (shareImg) {
json.imageUrl = shareImg;
}
return json;
} else if (this.data.playerType == "video") {
let url =
"id=" +
this.data.room_id +
"&playerType=video&backid=" +
this.data.backid +
"&mid=" +
mid;
if (this.data.memberid) {
url =
"id=" +
this.data.room_id +
"&playerType=video&backid=" +
this.data.backid +
"&memberid=" +
this.data.memberid +
"&mid=" +
mid;
}
let json = {
title:
"欢迎进入" +
this.data.roomData.nickname +
"的" +
this.data.roomData.title +
"直播间!",
query: url,
};
if (shareImg) {
json.imageUrl = shareImg;
}
return json;
}
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
var value = wx.getStorageSync("yz_uid");
var mid = "";
let shareImg = this.data.roomData.cover;
if (value) {
mid = value;
}
if (this.data.playerType == "live") {
let json = {
title:
"欢迎进入" +
this.data.roomData.nickname +
"的" +
this.data.roomData.title +
"直播间!",
path:
"/packageD/directSeeding/livePage/livePage?id=" +
this.data.room_id +
"&playerType=live" +
"&mid=" +
mid,
};
if(this.options.newMedia && this.options.newMedia==1){
json.path = json.path+"&newMedia=1";
}
if (shareImg) {
json.imageUrl = shareImg;
}
console.log(json);
return json;
} else if (this.data.playerType == "video") {
let url =
"/packageD/directSeeding/livePage/livePage?id=" +
this.data.room_id +
"&playerType=video&backid=" +
this.data.backid +
"&mid=" +
mid;
if (this.data.memberid) {
url =
"/packageD/directSeeding/livePage/livePage?id=" +
this.data.room_id +
"&playerType=video&backid=" +
this.data.backid +
"&memberid=" +
this.data.memberid +
"&mid=" +
mid;
}
let json = {
title:
"欢迎进入" +
this.data.roomData.nickname +
"的" +
this.data.roomData.title +
"直播间!",
path: url,
};
if(this.options.newMedia && this.options.newMedia==1){
json.path = json.path+"&newMedia=1";
}
if (shareImg) {
json.imageUrl = shareImg;
}
console.log(json);
return json;
}
},
/**
* 将焦点给到 input在真机上不能获取input焦点
*/
//清空聊天
clearSend() {
this.data.catMessagebol = true;
this.setData({
inputInfo: "",
});
},
//发送聊天
sendBtn() {
if (this.data.room_ban) {
wx.showToast({
icon: "none",
title: "您已经被禁言",
duration: 1500,
});
return;
}
if (this.data.inputInfo) {
this.setData({
shade: false,
mainCommentShow: false,
});
//发送普通聊天
// this.sendmessage(this.data.inputInfo)
if (this.data.catMessagebol) {
this.catMessage("text", this.data.inputInfo);
} else {
wx.showToast({
icon: "none",
title: "聊天正在发送中......",
duration: 1500,
});
}
this.data.catMessagebol = false;
} else {
wx.showToast({
icon: "none",
title: "发送消息不能为空",
duration: 1500,
});
this.setData({
chatInputBottom:0
});
}
},
//创建聊天模版
catMessage(type, text) {
let that = this;
let messageData = {};
let Json = {
memberId: this.data.roomData.userID ? this.data.roomData.userID : "",
nickName: this.data.roomData.userNickname
? this.cutNameLimit(this.data.roomData.userNickname)
: "",
memberAvatar: this.data.roomData.userAvatar
? this.data.roomData.userAvatar
: "",
memberLevel: this.data.roomData.member_level
? this.data.roomData.member_level
: 0,
memberLevelName: this.data.roomData.member_level_name
? this.data.roomData.member_level_name
: 0,
text: text ? text : "",
};
switch (type) {
case "text":
messageData = {
to: that.data.roomData.groupId,
conversationType: TIM.TYPES.CONV_GROUP,
payload: {
data: "自定义文本", // 用于标识该类型消息
description: JSON.stringify(Json),
extension: "customText",
},
};
break;
}
let message = that.data.tim.createCustomMessage(messageData);
let promise = that.data.tim.sendMessage(message);
promise
.then(function (imResponse) {
// 发送成功
if (type == "text") {
console.log(imResponse);
let messageList = that.data.messageList;
messageList.push(Json);
that.setData({
messagesTop: messageList.length * 1000,
messageList,
});
that.clearSend();
that.newMedia(6);
}
})
.catch(function (imError) {
// 发送失败
if (type == "text") {
that.clearSend();
}
wx.showToast({
icon: "none",
title: "聊天发送失败:::" + imError,
duration: 1500,
});
console.warn("sendMessage error:", imError);
});
},
sendmessage(data) {
let that = this;
let message = that.data.tim.createTextMessage({
to: that.data.roomData.groupId,
conversationType: TIM.TYPES.CONV_GROUP,
payload: {
text: data,
},
});
// 2. 发送消息
let promise = that.data.tim.sendMessage(message);
promise
.then(function (imResponse) {
// 发送成功
console.log(imResponse);
let messageList = that.data.messageList;
messageList.push({
nick: that.data.roomData.userNickname,
id: that.data.roomData.userID,
text: data,
});
that.setData({
messagesTop: messageList.length * 1000,
messageList,
});
that.clearSend();
})
.catch(function (imError) {
// 发送失败
console.warn("sendMessage error:", imError);
that.clearSend();
});
},
cutNameLimit(_name) {
if (_name.length > 8) {
return _name.slice(0, 8) + "...";
}
return _name;
},
/**
* input 失去焦点后将 input 的输入内容给到cover-view
*/
blurInput(e) {
this.setData({
inputInfo: e.detail.value,
});
},
bindfocusChatInput(e) {
if(this.data.chatInputBottom != e.detail.height){
this.setData({
chatInputBottom: e.detail.height
});
}
},
showUserBtn() {
if (
this.data.anchorPopupData &&
this.data.anchorPopupData.id &&
!this.data.changeAnchor
) {
this.setData({
showUser: true,
shade: true,
});
} else {
this.getAnchorPopup();
}
},
showUserCloseBtn() {
this.setData({
showUser: false,
shade: false,
});
},
showPosterBtn() {
if(this.data.roomData.is_share_word != 1){
this.setData({
showPoster: true,
shade: true,
});
} else{
//开启了自定义分享语,显示弹窗设置
this.setData({
oldWord: this.data.diyPosterWord,
showPosterWord: true
});
}
},
onClosePosterWord(){
this.setData({
showPosterWord:false
});
},
changePosterWord(event){
this.data.diyPosterWord = event.detail;
},
makePoster(){
if (this.data.diyPosterWord==''||this.data.oldWord != this.data.diyPosterWord) {
this.getAvaterInfo();
this.setData({
showPoster: true,
shade: true,
});
}else {
this.setData({
showPoster: true
});
}
this.setData({
showPosterWord:false
});
},
showPosterClose() {
this.setData({
showPoster: false,
shade: false,
});
},
showGoodLiftBtn() {
this.setData({
showGoodLift: true,
shade: true,
});
},
showGoodLiftCloseBtn() {
this.setData({
showGoodLift: false,
shade: false,
});
},
showGiftCloseBtn() {
this.setData({
showGift: false,
shade: false,
});
},
shadeClose() {
if (this.data.showGoodLift) {
this.setData({
showGoodLift: false,
shade: false,
});
}
if (this.data.showGift) {
this.setData({
showGift: false,
shade: false,
});
}
if (this.data.mainCommentShow) {
this.setData({
mainCommentShow: false,
shade: false,
});
this.clearSend();
}
},
showGiftBtn() {
if (this.data.giftListData.length > 0) {
this.setData({
showGift: true,
shade: true,
});
} else {
this.getGiftList();
}
},
showactivityCloseBtn(e) {
let index = e.currentTarget.dataset.index;
this.setData({
["activityDataArray[" + index + "].activityData.showactivity"]: false,
});
},
showactivityCloseBtn_1(e) {
let index = e.currentTarget.dataset.index;
this.setData({
["roomMemberContentArray[" +
index +
"].activityData.showactivity"]: false,
});
},
showavticeFailBtn() {
this.setData({
showavticeFail: false,
shade: false,
});
},
mainCommentShowBtn() {
if (this.data.imReadly || this.data.sendMessageReadly) {
wx.showToast({
icon: "none",
title: "聊天加载中,请稍后发言",
duration: 1500,
});
return;
}
if (this.data.room_ban) {
wx.showToast({
icon: "none",
title: "您已经被禁言",
duration: 1500,
});
return;
}
this.setData({
mainCommentShow: true,
shade: true,
});
},
GetRTime() {
let PKTime = this.data.startPKTime; //PK开始时间
let NowTime = new Date(); //当前时间
//后台给我的是10位 精确到秒的 所有下面我就除以了1000不要小数点后面的
let t = (NowTime.getTime() / 1000).toFixed(0) - PKTime;
//如果后台给的是毫秒 上面不用除以1000 下面的计算时间也都要除以1000 这里我去掉1000了
let d = Math.floor(t / 60 / 60 / 24); //天 var d=Math.floor(t/1000/60/60/24)
let h = Math.floor((t / 60 / 60) % 24); //时 var h=Math.floor(t/1000/60/60%24)
let m = Math.floor((t / 60) % 60); //分 var m=Math.floor(t/1000/60%60)
let s = Math.floor(t % 60); //秒 var s=Math.floor(t/1000%60)
if (parseInt(d) < 10) d = "0" + d;
if (parseInt(h) < 10) h = "0" + h;
if (parseInt(m) < 10) m = "0" + m;
if (parseInt(s) < 10) s = "0" + s;
if (parseInt(d) >= 1) {
this.setData({
PKTimed: `${d}:${h}:${m}:${s}`
});
} else {
this.setData({
PKTimed: `${h}:${m}:${s}`
});
}
},
getAvaterInfo() {
let statusText =
this.data.postData.status == 2
? "预告"
: this.data.postData.status == 3
? "直播中 "
: "回放";
const ctx = wx.createCanvasContext("myCanvas");
// 画banner图
ctx.fillStyle = "#FFFFFF";
ctx.fillRect(0, 0, this.data.canvasWidth, this.data.canvasHeight);
let headWH = 56 * canvasDpr * unit;
{
let avatarurl_width = headWH; //绘制的头像宽度
let avatarurl_heigth = headWH; //绘制的头像高度
let avatarurl_x = 215 * canvasDpr * unit; //绘制的头像在画布上的位置
let avatarurl_y = 23 * canvasDpr * unit; //绘制的头像在画布上的位置
ctx.save();
ctx.beginPath(); //开始绘制
//先画个圆 前两个参数确定了圆心 x,y 坐标 第三个参数是圆的半径 四参数是绘图方向 默认是false即顺时针
ctx.arc(
avatarurl_width / 2 + avatarurl_x,
avatarurl_heigth / 2 + avatarurl_y,
avatarurl_width / 2,
0,
Math.PI * 2,
false
);
ctx.clip(); //画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
if (this.data.postData.shop_logo) {
ctx.drawImage(
this.data.postData.shop_logo,
avatarurl_x,
avatarurl_y,
avatarurl_width,
avatarurl_heigth
); // 推进去图片必须是https图片
}
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
}
ctx.setFontSize(13 * canvasDpr);
ctx.setFillStyle("#000");
ctx.fillText(
this.data.postData.shop_name,
296 * canvasDpr * unit,
60 * canvasDpr * unit
);
this.drawImg(
ctx,
560 * canvasDpr * unit,
440 * canvasDpr * unit,
this.data.postData.cover,
this.data.postData.imgData.width,
this.data.postData.imgData.height,
30 * canvasDpr * unit,
98 * canvasDpr * unit
);
// ctx.drawImage(this.data.postData.cover, 30 * unit, 98 * unit, 560 * unit, 440 * unit);
{
let x = 437 * canvasDpr * unit,
y = 117 * canvasDpr * unit,
w = 127 * canvasDpr * unit,
h = 42 * canvasDpr * unit,
fillColor = "#ff7200",
r = 10 * canvasDpr;
// if (2 * r > w || 2 * r > h) {
// return false;
// }
ctx.save();
ctx.translate(x, y);
//绘制圆角矩形的各个边
this.drawRoundRectPath(ctx, w, h, r);
ctx.fillStyle = fillColor;
ctx.fill();
ctx.restore();
ctx.setFillStyle("#fff");
ctx.setFontSize(14 * canvasDpr);
if (statusText.length == 2) {
ctx.fillText(
statusText,
474 * canvasDpr * unit,
148 * canvasDpr * unit
);
} else {
ctx.fillText(
statusText,
460 * canvasDpr * unit,
148 * canvasDpr * unit
);
}
}
let headWH_2 = 42 * canvasDpr * unit;
{
let avatarurl_width = headWH_2; //绘制的头像宽度
let avatarurl_heigth = headWH_2; //绘制的头像高度
let avatarurl_x = 52 * canvasDpr * unit; //绘制的头像在画布上的位置
let avatarurl_y = 117 * canvasDpr * unit; //绘制的头像在画布上的位置
ctx.save();
ctx.beginPath(); //开始绘制
//先画个圆 前两个参数确定了圆心 x,y 坐标 第三个参数是圆的半径 四参数是绘图方向 默认是false即顺时针
ctx.arc(
avatarurl_width / 2 + avatarurl_x,
avatarurl_heigth / 2 + avatarurl_y,
avatarurl_width / 2,
0,
Math.PI * 2,
false
);
ctx.clip(); //画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
ctx.drawImage(
this.data.postData.avatar,
avatarurl_x,
avatarurl_y,
avatarurl_width,
avatarurl_heigth
); // 推进去图片必须是https图片
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
}
{
let text = this.data.postData.nickname; //这是要绘制的文本';
let chr = text.split(""); //这个方法是将一个字符串分割成字符串数组
let temp = "";
let row = [];
ctx.setFontSize(28 * canvasDpr * unit);
ctx.setFillStyle("#fff");
for (let a = 0; a < chr.length; a++) {
if (ctx.measureText(temp).width < 160 * canvasDpr) {
temp += chr[a];
} else {
a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
row.push(temp);
temp = "";
}
}
row.push(temp); //如果数组长度大于2 则截取前两个
if (row.length > 2) {
let rowCut = row.slice(0, 2);
let rowPart = rowCut[1];
let test = "";
let empty = [];
for (let a = 0; a < rowPart.length; a++) {
if (ctx.measureText(test).width < 306 * canvasDpr * unit) {
test += rowPart[a];
} else {
break;
}
}
empty.push(test);
let group = empty[0] + "...";
//这里只显示两行,超出的用...表示
rowCut.splice(1, 1, group);
row = rowCut;
}
for (let b = 0; b < row.length; b++) {
ctx.fillText(
row[b],
108 * canvasDpr * unit,
146 * canvasDpr * unit + b * (28 * canvasDpr * unit)
);
}
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
}
// ctx.setFontSize(13)
// ctx.setFillStyle("#fff")
// ctx.fillText(this.data.postData.nickname, 108 * unit, 146 * unit)
ctx.save();
{
let text = this.data.postData.title; //这是要绘制的文本';
let chr = text.split(""); //这个方法是将一个字符串分割成字符串数组
let temp = "";
let row = [];
ctx.setFontSize(28 * canvasDpr * unit);
ctx.setFillStyle("#333333");
for (let a = 0; a < chr.length; a++) {
if (ctx.measureText(temp).width < 160 * canvasDpr) {
temp += chr[a];
} else {
a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
row.push(temp);
temp = "";
}
}
row.push(temp); //如果数组长度大于2 则截取前两个
if (row.length > 2) {
let rowCut = row.slice(0, 2);
let rowPart = rowCut[1];
let test = "";
let empty = [];
for (let a = 0; a < rowPart.length; a++) {
if (ctx.measureText(test).width < 306 * canvasDpr * unit) {
test += rowPart[a];
} else {
break;
}
}
empty.push(test);
let group = empty[0] + "...";
//这里只显示两行,超出的用...表示
rowCut.splice(1, 1, group);
row = rowCut;
}
for (let b = 0; b < row.length; b++) {
ctx.fillText(
row[b],
41 * canvasDpr * unit,
620 * canvasDpr * unit + b * (28 * canvasDpr * unit)
);
}
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
ctx.setFontSize(12 * canvasDpr);
ctx.setFillStyle("#ff7200");
ctx.fillText(
"直播时间 " + this.data.postData.live_time,
36 * canvasDpr * unit,
760 * canvasDpr * unit
);
}
let headWH_3 = 48 * canvasDpr * unit;
{
let avatarurl_width = headWH_3; //绘制的头像宽度
let avatarurl_heigth = headWH_3; //绘制的头像高度
let avatarurl_x = 35 * canvasDpr * unit; //绘制的头像在画布上的位置
// let avatarurl_y = 763 * canvasDpr * unit; //绘制的头像在画布上的位置
let avatarurl_y = 787 * canvasDpr * unit; //绘制的头像在画布上的位置
ctx.save();
ctx.beginPath(); //开始绘制
//先画个圆 前两个参数确定了圆心 x,y 坐标 第三个参数是圆的半径 四参数是绘图方向 默认是false即顺时针
ctx.arc(
avatarurl_width / 2 + avatarurl_x,
avatarurl_heigth / 2 + avatarurl_y,
avatarurl_width / 2,
0,
Math.PI * 2,
false
);
ctx.clip(); //画好了圆 剪切 原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内 这也是我们要save上下文的原因
ctx.drawImage(
this.data.postData.m_avatar,
avatarurl_x,
avatarurl_y,
avatarurl_width,
avatarurl_heigth
); // 推进去图片必须是https图片
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
}
{
let text = this.data.roomData.is_share_word == 1&&this.data.diyPosterWord!='' ? this.data.diyPosterWord:(this.data.postData.m_nickname + "的分享");//这是要绘制的文本';
let chr = text.split(""); //这个方法是将一个字符串分割成字符串数组
let temp = "";
let row = [];
ctx.setFontSize(28 * canvasDpr * unit);
ctx.setFillStyle("#666666");
for (let a = 0; a < chr.length; a++) {
// 160
if (ctx.measureText(temp).width < 230 * canvasDpr) {
temp += chr[a];
} else {
a--; //这里添加了a-- 是为了防止字符丢失,效果图中有对比
row.push(temp);
temp = "";
}
}
row.push(temp); //如果数组长度大于2 则截取前两个
if (row.length > 2&&this.data.roomData.is_share_word != 1) {
let rowCut = row.slice(0, 2);
let rowPart = rowCut[1];
let test = "";
let empty = [];
for (let a = 0; a < rowPart.length; a++) {
if (ctx.measureText(test).width < 306 * canvasDpr * unit) {
test += rowPart[a];
} else {
break;
}
}
empty.push(test);
let group = empty[0] + "...";
//这里只显示两行,超出的用...表示
rowCut.splice(1, 1, group);
row = rowCut;
}
for (let b = 0; b < row.length; b++) {
// ctx.fillText(
// row[b],
// 94 * canvasDpr * unit,
// 796 * canvasDpr * unit + b * (28 * canvasDpr * unit)
// );
ctx.fillText(
row[b],
94 * canvasDpr * unit,
820 * canvasDpr * unit + b * (28 * canvasDpr * unit)
);
}
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
}
// ctx.setFontSize(13)
// ctx.setFillStyle("#666666")
// ctx.fillText(this.data.postData.m_nickname + '的分享', 94 * unit, 796 * unit)
ctx.save();
ctx.drawImage(
this.data.postData.qr_code,
408 * canvasDpr * unit,
561 * canvasDpr * unit,
180 * canvasDpr * unit,
180 * canvasDpr * unit
);
ctx.restore(); //恢复之前保存的绘图上下文 恢复之前保存的绘图上下午即状态 还可以继续绘制
ctx.setFontSize(12 * canvasDpr);
ctx.setFillStyle("#333");
ctx.fillText(
"长按保存图片",
430 * canvasDpr * unit,
780 * canvasDpr * unit
);
ctx.draw(false, this.toimage());
},
drawRoundRectPath(cxt, width, height, radius) {
cxt.beginPath(0);
//从右下角顺时针绘制弧度从0到1/2PI
cxt.arc(width - radius, height - radius, radius, 0, Math.PI / 2);
//矩形下边线
cxt.lineTo(radius, height);
//左下角圆弧弧度从1/2PI到PI
cxt.arc(radius, height - radius, radius, Math.PI / 2, Math.PI);
//矩形左边线
cxt.lineTo(0, radius);
//左上角圆弧弧度从PI到3/2PI
cxt.arc(radius, radius, radius, Math.PI, (Math.PI * 3) / 2);
//上边线
cxt.lineTo(width - radius, 0);
//右上角圆弧
cxt.arc(width - radius, radius, radius, (Math.PI * 3) / 2, Math.PI * 2);
//右边线
cxt.lineTo(width, height - radius);
cxt.closePath();
},
drawImg(ctx, cWidth, cHeight, imgPath, imgWidth, imgHeight, x, y) {
console.log("cWidth", cWidth);
console.log("cHeight", cHeight);
console.log("imgWidth", imgWidth);
console.log("imgHeight", imgHeight);
let dWidth = cWidth / imgWidth; // canvas与图片的宽度比例
let dHeight = cHeight / imgHeight; // canvas与图片的高度比例
if (
(imgWidth > cWidth && imgHeight > cHeight) ||
(imgWidth < cWidth && imgHeight < cHeight)
) {
if (dWidth > dHeight) {
ctx.drawImage(
imgPath,
0,
(imgHeight - cHeight / dWidth) / 2,
imgWidth,
cHeight / dWidth,
x,
y,
cWidth,
cHeight
);
} else {
ctx.drawImage(
imgPath,
(imgWidth - cWidth / dHeight) / 2,
0,
cWidth / dHeight,
imgHeight,
x,
y,
cWidth,
cHeight
);
}
} else {
if (imgWidth < cWidth) {
ctx.drawImage(
imgPath,
0,
(imgHeight - cHeight / dWidth) / 2,
imgWidth,
cHeight / dWidth,
x,
y,
cWidth,
cHeight
);
} else {
ctx.drawImage(
imgPath,
(imgWidth - cWidth / dHeight) / 2,
0,
cWidth / dHeight,
imgHeight,
x,
y,
cWidth,
cHeight
);
}
}
},
toimage() {
// wx.hideLoading()
this.setData({
showBtn: true,
});
let that = this;
setTimeout(() => {
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: this.data.canvasWidth,
height: this.data.canvasHeight,
destWidth: this.data.canvasWidth * 4,
destHeight: this.data.canvasHeight * 4,
canvasId: "myCanvas",
success: function (res) {
console.log(res);
var tempFilePath = res.tempFilePath;
that.setData({
ithumb: tempFilePath,
loadingImg: false,
});
},
fail: function (res) {
console.log(res);
},
});
}, 1500);
},
saveShareImg: function () {
wx.showLoading({
title: "保存中",
});
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: this.data.canvasWidth,
height: this.data.canvasHeight,
destWidth: this.data.canvasWidth * 4,
destHeight: this.data.canvasHeight * 4,
canvasId: "myCanvas",
success: function (res) {
console.log(res);
wx.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success(result) {
wx.showToast({
title: "图片保存成功",
icon: "success",
duration: 2000,
});
wx.hideLoading();
},
fail: (res) => {
wx.hideLoading();
},
});
},
});
},
giftSelsectBtn(e) {
let num = e.currentTarget.dataset.type;
if (num == 1) {
this.setData({
activeNum: 1,
});
} else if (num == 2) {
this.setData({
activeNum: 2,
});
} else if (num == 3) {
this.setData({
activeNum: 3,
});
}
},
backRightBtn() {
wx.navigateBack({
delta: 1,
fail() {
wx.navigateTo({
url: "/packageG/index/index",
});
},
});
},
cloneLuckDraw(){
this.setData({
luck_number: 0
});
},
gotoLuckDraw(){
wx.navigateTo({
url: '/packageH/newDraw/luckyDraw/luckyDraw'
});
},
cloneADbtn(e){
let datas = e.currentTarget.dataset;
if(datas.tag == '1'){
this.setData({
isShowADLook: false
});
}
if(datas.tag == '2'){
this.setData({
isShowADPut: false
});
}
},
gotoUrl(e){
let datas = e.currentTarget.dataset;
if (datas.name == "advertisingPutAD") {
//投放广告按钮
if (!datas.iser) {
wx.navigateTo({url: '/packageH/Advertising/advertisingApply/advertisingApply' });//还不是广告主,跳转申请页
} else {
wx.navigateTo({url: '/packageH/Advertising/advertisingPutAD/advertisingPutAD?tag=live&id='+ datas.id });
}
return;
}
wx.navigateTo({url: '/packageH/Advertising/advertisingList/advertisingList?tag=live&id='+ datas.id });
},
gotoPKLiver(e){
let datas = e.currentTarget.dataset;
if(datas.id) wx.navigateTo({url:"/packageD/directSeeding/livePage/livePage?id=" + datas.id +"&playerType=live",});
},
giftEffectsTimer(){
//打赏礼物特效定时器
let timer = Number(this.data.specialList[0].effect_time)>0?Number(this.data.specialList[0].effect_time)*1000:2000; //特效周期,后台设置,单位/秒
this.data.giftEffectsTime = setTimeout(() => {
this.data.specialList.splice(0, 1); //特效gif周期到了删除
this.setData({
specialList: this.data.specialList
});
if (this.data.specialList.length > 0) {
this.giftEffectsTimer();
} else {
clearTimeout(this.data.giftEffectsTime);
}
}, timer);
},
//新媒体插件
newMedia(behavioral){
//behavioral 1点赞2关注3阅读4转发5收藏6评论
if(!this.options.newMedia || this.options.newMedia!=1) return;
let urlStr = app.getNetAddresss("plugin.new-media-advertising.frontend.media-advertisingt.root-behavioral-reward");
app._getNetWork({
url: urlStr,
data: {behavioral,advertisingt_id:this.options.id},
success: (resdata) => {}
});
}
});