388 lines
12 KiB
JavaScript
388 lines
12 KiB
JavaScript
import store from '@/store/index.js'
|
||
import $http from '@/config/requestConfig.js';
|
||
const bgm = uni.getBackgroundAudioManager();
|
||
// const bgm = uni.createInnerAudioContext();
|
||
|
||
bgm.musicList = [] // 播放目录
|
||
bgm.src = ''
|
||
bgm.htimes = 0 // 历史播放秒数
|
||
bgm.cTime = 0
|
||
bgm.title = ''
|
||
bgm.interval=null // 存储定时器
|
||
bgm.loop = true;
|
||
bgm.coverImgUrl = ''
|
||
bgm.oldIndex = 0 // 前面一首的播放索引
|
||
bgm.playIndex = 0
|
||
bgm.playing = false // 播放进行时
|
||
store.state.userInfo.playIndex !== undefined ? bgm.playIndex = store.state.userInfo.playIndex : bgm.playIndex = 0
|
||
var music = {
|
||
//
|
||
//mute 表示是否是播放,,默认不播放
|
||
playBgm({mute=false}){
|
||
// console.log(bgm.musicList,'src')
|
||
if (!bgm) return;
|
||
if(mute){
|
||
bgm.pause()
|
||
}else{
|
||
|
||
// bgm.src = bgm.musicList[bgm.playIndex].url
|
||
// 判断播放列表是否空
|
||
if(bgm.musicList.length == 0){
|
||
uni.showModal({
|
||
title: '提示',
|
||
showCancel:false,
|
||
confirmText:'好的',
|
||
content: '请先选择要播放的音频',
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
console.log('用户点击确定');
|
||
} else if (res.cancel) {
|
||
console.log('用户点击取消');
|
||
}
|
||
}
|
||
});
|
||
return
|
||
}
|
||
// 没有就添加添加url到播放器,播放新的
|
||
if(bgm.src == ''){
|
||
console.log(bgm.playIndex,'播放的索引',store.state.userInfo.playIndex,'播放的时长',store.state.userInfo.playTimes)
|
||
store.commit('setUserInfo',{'playTitle': bgm.musicList[bgm.playIndex].chapterName})
|
||
store.commit('setUserInfo',{'fengImg': bgm.musicList[bgm.playIndex].images})
|
||
store.commit('setUserInfo',{'playingInfo': bgm.musicList[bgm.playIndex]})
|
||
console.log(store.state.userInfo,'chapterName',bgm.playIndex)
|
||
store.state.userInfo.playTimes ? bgm.htimes = store.state.userInfo.playTimes : ''
|
||
this.getChartUrl()
|
||
// 获取历史秒数
|
||
|
||
}else{
|
||
|
||
}
|
||
}
|
||
bgm.onPause(()=>{
|
||
console.log('暂停背景音乐');
|
||
this.saveTimes()
|
||
clearInterval(bgm.interval)
|
||
store.commit('setUserInfo',{'playFlag': false})
|
||
|
||
})
|
||
bgm.onPlay(() => {
|
||
store.commit('setUserInfo',{'playFlag': true})
|
||
console.log('开始播放音乐#######');
|
||
uni.hideLoading()
|
||
|
||
bgm.interval = setInterval(()=>{
|
||
console.log('存一次')
|
||
this.saveIndex()
|
||
},180000)
|
||
})
|
||
bgm.onError((res) => {
|
||
console.log(res)
|
||
uni.showModal({
|
||
title: '提示',
|
||
showCancel:false,
|
||
confirmText:'好的',
|
||
content: '音频路径异常,请联系管理员',
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
console.log('用户点击确定');
|
||
}
|
||
}
|
||
});
|
||
return
|
||
})
|
||
bgm.onTimeUpdate((res) =>{
|
||
// this.currentTime = Math.max(0, this.videoContext.currentTime)
|
||
setTimeout(()=>{
|
||
store.commit('setUserInfo',{'currentTime': Math.max(0, bgm.currentTime)})
|
||
},1000)
|
||
})
|
||
bgm.onWaiting(() => {
|
||
// 加载时
|
||
uni.showLoading()
|
||
console.log('加载时')
|
||
})
|
||
bgm.onCanplay(() => {
|
||
// 可以播放时
|
||
// console.log('可以播放时')
|
||
uni.hideLoading()
|
||
// this.saveIndex()
|
||
console.log('历史播放进度,秒数', bgm.htimes)
|
||
bgm.seek(bgm.htimes)
|
||
bgm.htimes = 0 // 重置播放秒数
|
||
// store.commit('setUserInfo',{'duration':bgm.duration})
|
||
// store.commit('setUserInfo',{'playTitle': bgm.title})
|
||
// store.commit('setUserInfo',{'fengImg': bgm.coverImgUrl})
|
||
// store.commit('setUserInfo',{'playFlag': true})
|
||
// store.commit('setUserInfo',{'playingInfo': bgm.musicList[bgm.playIndex]})
|
||
console.log(store.state.userInfo.playingInfo,'chapterName2222',bgm.playIndex)
|
||
})
|
||
bgm.onEnded(() => {
|
||
console.log('播放完毕了',bgm.playing)
|
||
store.commit('setUserInfo',{'playFlag': false})
|
||
this.setPlayIndex('next') // 下一首
|
||
})
|
||
},
|
||
// 添加播放列表
|
||
setList(list,op,playindex){
|
||
bgm.musicList = list
|
||
bgm.oldIndex = bgm.playIndex // 暂存上一个播放得index
|
||
console.log('地址异常报错前index:',bgm.oldIndex)
|
||
playindex ? bgm.playIndex = playindex : bgm.playIndex = 0
|
||
|
||
// console.log(bgm.playIndex,'playindex')
|
||
store.commit('setUserInfo',{'playingInfo': {}})
|
||
this.getListenRate(bgm.musicList[0], op)
|
||
// if(op == 'autoPlay'){
|
||
// store.commit('setUserInfo',{'playTimes': 0})
|
||
// if(bgm._options.src == ''){
|
||
// // this.getChartUrl()
|
||
// this.playBgm({mute:false})
|
||
// console.log('playBgm')
|
||
// }else{
|
||
// this.getChartUrl() // 获取对应的播放路径
|
||
// // console.log('getChartUrl')
|
||
// }
|
||
// }
|
||
},
|
||
// 获取线上听书进度
|
||
getListenRate(val,op){
|
||
let data = {
|
||
bookId: val.bookid,
|
||
userId: store.state.userInfo.id,
|
||
}
|
||
$http.request({
|
||
url: "book/listening/getReadRate",
|
||
method: "POST", // POST、GET、PUT、DELETE,具体说明查看官方文档
|
||
data,
|
||
header: { //默认 无 说明:请求头
|
||
'Content-Type': 'application/json'
|
||
},
|
||
}).then(res => {
|
||
console.log(res,'历史记录')
|
||
if(res.readRate.chapterId){
|
||
var item = res.readRate
|
||
// 有听书进度时
|
||
bgm.playIndex = bgm.musicList.findIndex(function(info){
|
||
// console.log(info,'info')
|
||
if(item.chapterId == info.chapterId && item.bookId == info.bookid ){
|
||
return info;
|
||
}
|
||
})
|
||
store.commit('setUserInfo',{'playingInfo':bgm.musicList[bgm.playIndex] })
|
||
console.log('线上的播放index是:',bgm.playIndex)
|
||
console.log('线上的播放index是:', store.state.userInfo.playingInfo)
|
||
}else{
|
||
// 没有听书进度
|
||
}
|
||
|
||
if(op == 'autoPlay'){
|
||
store.commit('setUserInfo',{'playTimes': 0})
|
||
if(bgm._options.src == ''){
|
||
// this.getChartUrl()
|
||
this.playBgm({mute:false})
|
||
console.log('playBgm')
|
||
}else{
|
||
this.getChartUrl() // 获取对应的播放路径
|
||
// console.log('getChartUrl')
|
||
}
|
||
}
|
||
})
|
||
},
|
||
// 获取章节url
|
||
getChartUrl(){
|
||
// bgm.stop()
|
||
let data = {
|
||
'userId': store.state.userInfo.id,
|
||
'bookid': bgm.musicList[bgm.playIndex].bookid,
|
||
'chapterid': bgm.musicList[bgm.playIndex].chapterId
|
||
}
|
||
console.log(data,'data')
|
||
$http.post('book/bookchaptercontent/appBooksChapterContent', data)
|
||
// $http.post('book/bookchaptercontent/getCatal', data)
|
||
.then(res => {
|
||
console.log(res,'res')
|
||
if(res.code == 0){
|
||
// bgm.stop()
|
||
// 有听权限时
|
||
if(res.bookCatalogue[0].url){ // 空值url:null
|
||
bgm.src = res.bookCatalogue[0].url
|
||
// bgm.title = res.bookCatalogue[0].name
|
||
// bgm.coverImgUrl = res.image
|
||
// store.commit('setUserInfo',{'playIndex': bgm.playIndex})
|
||
// store.commit('setUserInfo',{'playTitle': bgm.title})
|
||
// store.commit('setUserInfo',{'playingInfo':bgm.musicList[bgm.playIndex] })
|
||
// store.commit('setUserInfo',{'fengImg': bgm.coverImgUrl})
|
||
// bgm.pause()
|
||
// this.setCoverImg(bgm.musicList[bgm.playIndex].images)
|
||
}else{
|
||
// bgm.src = ''
|
||
// bgm.title = ''
|
||
// bgm.coverImgUrl = '../../static/icon/fengziIcon.jpg'
|
||
// this.setCoverImg('../../static/icon/x1.jpg')
|
||
// bgm.stop()
|
||
bgm.playIndex = bgm.oldIndex
|
||
console.log('地址异常报错后index:',bgm.playIndex)
|
||
store.commit('setUserInfo',{'playIndex': bgm.playIndex})
|
||
store.commit('setUserInfo',{'playingInfo':bgm.musicList[bgm.playIndex] })
|
||
uni.showToast({
|
||
title:'音频地址异常',
|
||
icon:'error',
|
||
duration:2000
|
||
})
|
||
// store.commit('setUserInfo',{'playFlag': false})
|
||
}
|
||
|
||
}
|
||
console.log(res.bookCatalogue,'单章节信息')
|
||
}).catch((e)=>{
|
||
console.log(e,'e')
|
||
// bgm.pause()
|
||
bgm.playIndex = bgm.oldIndex
|
||
// bgm.stop()
|
||
// store.commit('setUserInfo',{'playFlag': false})
|
||
|
||
uni.showModal({
|
||
title: '提示',
|
||
cancelText: '暂不购买',
|
||
confirmText:'立即购买',
|
||
content: '抱歉!当前章节不支持试听,购买后可收听',
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
console.log('用户点击确定');
|
||
uni.navigateTo({
|
||
url: '../bookShop/settlementBook?type=2&list=' + data.bookid
|
||
});
|
||
}
|
||
}
|
||
});
|
||
|
||
// uni.showModal({
|
||
// title: '提示',
|
||
// confirmText:'知道了',
|
||
// content: '当前书籍音频功能未开通,请联系管理员',
|
||
// success: function (res) {
|
||
// if (res.confirm) {
|
||
// console.log('用户点击确定');
|
||
// }
|
||
// }
|
||
// });
|
||
|
||
})
|
||
},
|
||
// 存储播放信息
|
||
saveIndex(){
|
||
console.log(bgm.playIndex,'存储得index')
|
||
store.commit('setUserInfo',{'playIndex': bgm.playIndex})
|
||
store.commit('setUserInfo',{'duration':bgm.duration})
|
||
store.commit('setUserInfo',{'playTitle': bgm.title})
|
||
store.commit('setUserInfo',{'fengImg': bgm.coverImgUrl})
|
||
store.commit('setUserInfo',{'playFlag': true})
|
||
store.commit('setUserInfo',{'playingInfo': bgm.musicList[bgm.playIndex]})
|
||
store.commit('setUserInfo',{'playTimes': bgm.currentTime})
|
||
this.saveRate(bgm.musicList[bgm.playIndex])
|
||
},
|
||
// 存储播放(本地)
|
||
saveTimes(){
|
||
store.commit('setUserInfo',{'playTimes': bgm.currentTime})
|
||
},
|
||
// 存储播放进度(线上)
|
||
saveRate(val){
|
||
console.log(val,'要存储的播放信息',)
|
||
$http.post('book/listening/save', {
|
||
'userId': store.state.userInfo.id,
|
||
'bookId': val.bookid,
|
||
'chapterId': val.chapterId,
|
||
'chapterName': val.chapterName,
|
||
//'precent': bgm.currentTime
|
||
'precent': Math.ceil(bgm.currentTime),
|
||
//'contentId'
|
||
'loadAnimate':'none', // 请求加载动画
|
||
})
|
||
.then(res => {
|
||
if(res.code == 0){
|
||
console.log(res,'存储完成')
|
||
}
|
||
}).catch((e)=>{})
|
||
},
|
||
// 设置播放index
|
||
setPlayIndex(opName){ // 切换音频
|
||
if(opName == 'next'){ // 下一首
|
||
if(bgm.playIndex == bgm.musicList.length - 1){
|
||
uni.showToast({
|
||
title:'列表播放完毕~~',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
bgm.oldIndex = bgm.playIndex
|
||
bgm.playIndex += 1
|
||
console.log('下一首',bgm.playIndex,bgm.oldIndex, store.state.userInfo.playIndex)
|
||
// bgm.stop()
|
||
this.getChartUrl() // 获取章节url
|
||
//this.playBgm({'mute':false})
|
||
// store.commit('setUserInfo',{'playFlag': false})
|
||
|
||
}else{ // 上一首
|
||
if(bgm.playIndex == 0){
|
||
uni.showToast({
|
||
title:'没有上一首了~',
|
||
icon: 'none'
|
||
})
|
||
return
|
||
}
|
||
bgm.oldIndex = bgm.playIndex
|
||
bgm.playIndex -= 1
|
||
console.log('上一首',bgm.playIndex)
|
||
this.getChartUrl() // 获取章节url
|
||
|
||
}
|
||
},
|
||
// 设置封面图片
|
||
setCoverImg(url){
|
||
// console.log(bgm.coverImgUrl,'bgm.coverImgUrl')
|
||
bgm.coverImgUrl = url
|
||
},
|
||
// 获取封面图片
|
||
getCoverImg(){
|
||
// console.log(bgm.coverImgUrl,'bgm.coverImgUrl')
|
||
return bgm.coverImgUrl
|
||
},
|
||
// 获取播放列表
|
||
// getLibList(){
|
||
// return bgm.musicList
|
||
// },
|
||
|
||
// 播放单曲
|
||
setOneMusic(item){
|
||
console.log(item,'item')
|
||
// 显示播放组件
|
||
store.commit('setUserInfo',{'playVisible': true})
|
||
uni.setStorage({
|
||
key: 'playVisible',
|
||
data: true,
|
||
success: function () {
|
||
console.log('success');
|
||
}
|
||
});
|
||
bgm.htimes = 0
|
||
bgm.oldIndex = bgm.playIndex
|
||
bgm.playIndex = bgm.musicList.findIndex(function(info){
|
||
// console.log(info,'info')
|
||
if(item.chapterId == info.chapterId && item.bookid == info.bookid ){
|
||
return info;
|
||
}
|
||
})
|
||
console.log(bgm.playIndex,'bgm.playIndex')
|
||
this.getChartUrl()
|
||
|
||
},
|
||
|
||
// 关闭音频
|
||
setCloseBgm(){
|
||
bgm.stop()
|
||
}
|
||
|
||
}
|
||
module.exports = {music,bgm}
|
||
|