This repository has been archived on 2024-07-11. You can view files and clone it, but cannot push or open issues or pull requests.
yoshop-wechat/pages/live/index.js
2020-08-28 10:50:12 +08:00

230 lines
5.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const App = getApp();
// 工具类
import Util from '../../utils/util.js';
// 直播状态
const LiveStatus = {
101: {
'name': '直播中',
'value': 101,
},
102: {
'name': '未开始',
'value': 102,
},
103: {
'name': '已结束',
'value': 103,
},
104: {
'name': '禁播',
'value': 104,
},
105: {
'name': '暂停中',
'value': 105,
},
106: {
'name': '异常',
'value': 106,
},
107: {
'name': '已过期',
'value': 107,
},
};
Page({
/**
* 页面的初始数据
*/
data: {
scrollHeight: 0,
list: [], // 列表数据
page: 1, // 当前页码
isLoading: true, // 是否正在加载中
isLastPage: false, // 当前是最后一页
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
let _this = this;
// 设置列表容器高度
_this.setListHeight();
// 获取直播间列表
_this.getLiveRoomList();
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 获取直播间列表
*/
getLiveRoomList(isPage, page) {
let _this = this;
App._get('live.room/lists', {
page: page || 1
}, result => {
let resList = result.data.list,
dataList = _this.data.list;
if (isPage == true) {
_this.setData({
'list.data': dataList.data.concat(resList.data),
isLoading: false,
});
} else {
_this.setData({
list: resList,
isLoading: false,
isLastPage: false,
});
}
// 刷新直播间状态 (体验不佳, 暂不使用)
// _this.setLiveStatusText(resList);
});
},
/**
* 刷新直播间状态
* mix: 因livePlayer.getLiveStatus接口需要间隔1分钟频率轮询, 用户二次进入时体验不佳, 暂不调用
*/
setLiveStatusText(list) {
// 引用直播组件
const livePlayer = requirePlugin('live-player-plugin');
let _this = this;
let startIndex = _this.data.list.data.length - list.data.length;
list.data.forEach((itm, idx) => {
let index = startIndex + idx;
let item = _this.data.list.data[index];
let dataKey = 'list.data[' + index + ']';
// 首次获取立马返回直播状态往后间隔1分钟或更慢的频率去轮询获取直播状态
livePlayer.getLiveStatus({
room_id: item['room_id']
})
.then(res => {
// 101: 直播中, 102: 未开始, 103: 已结束, 104: 禁播, 105: 暂停中, 106: 异常107已过期
let liveStatus = res.liveStatus,
liveStatusText1 = LiveStatus[liveStatus]['name'],
liveStatusText2 = liveStatusText1;
if (liveStatus == 101) {
liveStatusText1 = '正在直播中';
} else if (liveStatus == 102) {
liveStatusText1 = _this.semanticStartTime(item.start_time) + ' 开播';
}
_this.setData({
[dataKey + '.live_status']: liveStatus,
[dataKey + '.live_status_text_1']: liveStatusText1,
[dataKey + '.live_status_text_2']: liveStatusText2,
// test
// [dataKey + '.test']: `test: ${item['room_id']}`,
});
console.log(`getLiveStatus: ${item['room_id']}`);
})
.catch(err => {
console.log(`getLiveStatus: ${item['room_id']}`);
});
});
return list;
},
/**
* 语义化开播时间
*/
semanticStartTime(startTime) {
// 转换为 YYYYMMDD 格式
let startTimeObj = new Date(Util.format_date(startTime));
let $startDate = Util.dateFormat("YYYYmmdd", startTimeObj);
// 获取今天的 YYYY-MM-DD 格式
let $todyDate = Util.dateFormat("YYYYmmdd", new Date());
// 获取明天的 YYYY-MM-DD 格式
var tomorrowTimeObj = new Date();
tomorrowTimeObj.setTime(tomorrowTimeObj.getTime() + 24 * 60 * 60 * 1000);
let $tomorrowDate = Util.dateFormat("YYYYmmdd", tomorrowTimeObj);
// 使用IF当作字符串判断是否相等
if ($startDate == $todyDate) {
return Util.dateFormat('今天HH:MM', startTimeObj);
} else if ($startDate == $tomorrowDate) {
return Util.dateFormat('明天HH:MM', startTimeObj);
}
// 常规日期格式
return Util.dateFormat('mm/dd HH:MM', startTimeObj);
},
/**
* 下拉到底加载数据
*/
onPageDown() {
let _this = this;
// 已经是最后一页
if (_this.data.page >= _this.data.list.last_page) {
_this.setData({
isLastPage: true
});
return false;
}
// 加载下一页列表
_this.getLiveRoomList(true, ++_this.data.page);
},
/**
* 设置列表容器高度
*/
setListHeight() {
let _this = this,
systemInfo = wx.getSystemInfoSync();
_this.setData({
scrollHeight: systemInfo.windowHeight * 0.98
});
},
/**
* 进入直播间
*/
onTargetLiveRoomIndex(e) {
let roomId = e.currentTarget.dataset.id;
let customParams = {
path: 'pages/index/index',
referee_id: App.getUserId(), // 分销推荐人
};
wx.navigateTo({
url: `plugin-private://wx2b03c6e691cd7370/pages/live-player-plugin?room_id=${roomId}&custom_params=${encodeURIComponent(JSON.stringify(customParams))}`
});
},
/**
* 分享当前页面
*/
onShareAppMessage() {
return {
title: '直播列表',
path: "/pages/live/index?" + App.getShareUrlParams()
};
},
/**
* 分享到朋友圈
* 本接口为 Beta 版本,暂只在 Android 平台支持,详见分享到朋友圈 (Beta)
* https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share-timeline.html
*/
onShareTimeline() {
return {
title: '直播列表',
path: "/pages/live/index?" + App.getShareUrlParams()
};
},
})