Files
medicine_app/utils/music.js
2024-05-22 13:42:15 +08:00

472 lines
14 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.
import store from '@/store/index.js'
import $http from '@/config/requestConfig.js';
// #ifdef APP-PLUS
const bgm = uni.getBackgroundAudioManager();
// #endif
// #ifdef H5
const bgm = {};
// #endif
// 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].chapter})
store.commit('setUserInfo',{'fengImg': bgm.musicList[bgm.playIndex].bookImage})
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 : ''
// 设置默认原生播放组件的显示标题和图片
// bgm.title = bgm.musicList[bgm.playIndex].chapter
bgm.title = '正在播放'
console.log('应该显示的title',bgm.musicList[bgm.playIndex].chapter)
// bgm.artist = '暂无'
//bgm.singer = '暂无'
bgm.coverImgUrl = 'https://www.nuttyreading.com/images/logo.png'
bgm.image = 'https://www.nuttyreading.com/images/logo.png'
this.getChartUrl()
// 获取历史秒数
}else{
}
}
bgm.onPause(()=>{
console.log('暂停背景音乐');
bgm.title = '未在播放'
this.saveTimes()
clearInterval(bgm.interval)
bgm.interval = null
bgm.playing = false
store.commit('setUserInfo',{'playFlag': false})
})
bgm.onPlay(() => {
store.commit('setUserInfo',{'playFlag': true})
bgm.playing = true
console.log('开始播放音乐#######');
store.commit('setUserInfo',{'playingInfo': bgm.musicList[bgm.playIndex]})
//console.log(store.state.userInfo.playingInfo,'chapterName2222')
uni.hideLoading()
// 第一次存储
//this.saveIndex()
//this.saveRate(bgm.musicList[bgm.playIndex])
// end
bgm.interval = setInterval(()=>{
console.log('存一次')
this.saveIndex()
store.commit('setUserInfo',{'playTimes': bgm.currentTime}) // 本地存储
this.saveRate(bgm.musicList[bgm.playIndex]) // 线上存储
},180000)
})
bgm.onError((res) => {
console.log(res)
bgm.playing = false
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()
this.saveRate(bgm.musicList[bgm.playIndex])
// console.log('历史播放进度,秒数', bgm.htimes)
bgm.seek(bgm.htimes)
bgm.title = '正在播放'
console.log('应该显示的title', bgm.musicList[bgm.playIndex].chapter)
bgm.artist = '暂无'
//bgm.singer = '暂无'
bgm.coverImgUrl = 'https://www.nuttyreading.com/images/logo.png'
bgm.image = 'https://www.nuttyreading.com/images/logo.png'
// console.log(bgm,'bgm')
})
bgm.onEnded(() => {
bgm.htimes = 0 // 重置播放秒数
bgm.playing = false
console.log('播放完毕了',bgm.playing)
store.commit('setUserInfo',{'playFlag': false})
this.setPlayIndex('next') // 下一首
})
bgm.onPrev(() => {
console.log('点了上一曲')
if(bgm.playIndex - 1 >= 0){
this.setPlayIndex('prve') // 上一首
}else{
console.log('没有上一首了')
}
})
bgm.onNext(() => {
console.log('点了下一曲')
if(bgm.playIndex + 1 <= bgm.musicList.length){
this.setPlayIndex('next') // 下一首
}else{
console.log('没有下一首了,到头了')
}
})
},
// 添加播放列表
setList(list,op,playindex,time){
if(bgm.interval){
console.log('存在定时器,清空')
clearInterval(bgm.interval)
bgm.interval = null
}
console.log(time,'time',playindex,'playindex')
bgm.musicList = list
//console.log(bgm.musicList,'bgm.musicList')
bgm.oldIndex = bgm.playIndex // 暂存上一个播放得index
// console.log('地址异常报错前index:',bgm.oldIndex)
// playindex ? bgm.playIndex = playindex : bgm.playIndex = 0
store.commit('setUserInfo',{'playingInfo': {}})
if(playindex){
bgm.playIndex = playindex
console.log(playindex,'传值了')
if(time){ // 如果传了历史播放秒数
bgm.htimes = time
}else{
// console.log('重置播放秒数')
bgm.htimes = 0
}
}else{
console.log('---------')
bgm.htimes = 0
bgm.playIndex = 0
}
if(op == 'autoPlay'){
store.commit('setUserInfo',{'playTimes': 0})
if(bgm._options.src == ''){
// this.getChartUrl()
// console.log(bgm,'+++++++++++')
this.playBgm({mute:false})
}else{
console.log(bgm, '----')
this.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是', 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].id
}
console.log(data,'data')
$http.post('book/bookchaptercontent/getBooksCatalogue', data)
// $http.post('book/bookchaptercontent/getCatal', data)
.then(res => {
console.log(res,'鉴权结果')
if(res.code == 0){
if(res.jq==false ){
store.commit('setUserInfo',{'playFlag': false})
if(bgm.interval){
console.log('存在定时器,清空')
clearInterval(bgm.interval)
bgm.interval = null
}
// 鉴权失败
if(res.product == null){
uni.showModal({
title: '提示',
confirmText:'好的',
content: '您还未拥有此书哦~',
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
}
}
});
}else{
uni.showModal({
title: '提示',
cancelText: '暂不购买',
confirmText:'立即购买',
content: '抱歉!该章节需要购买后才可以听哦~',
success: function (res1) {
if (res1.confirm) {
console.log('用户点击确定',res.product);
uni.navigateTo({
url: '../bookShop/commodityDetail?id=' + res.product
});
}
}
});
}
}
// bgm.stop()
// 有听权限时
if(res.chapter.voices != null && res.chapter.voices != ''){ // 空值url:null
// 先清除定时器
clearInterval(bgm.interval)
bgm.interval = null
bgm.src = res.chapter.voices
store.commit('setUserInfo',{'playIndex': bgm.playIndex})
store.commit('setUserInfo',{'playingInfo':bgm.musicList[bgm.playIndex] })
}else{
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})
}
}
}).catch((e)=>{
console.log(e,'e')
console.log('异常')
// bgm.pause()
bgm.playIndex = bgm.oldIndex
store.commit('setUserInfo',{'playFlag': false})
if(bgm.interval){
console.log('存在定时器,清空')
clearInterval(bgm.interval)
bgm.interval = null
}
})
},
// 本地存储播放信息
saveIndex(){
console.log(bgm.playIndex,'存储得index')
store.commit('setUserInfo',{'playIndex': bgm.playIndex})
store.commit('setUserInfo',{'duration':bgm.duration})
store.commit('setUserInfo',{'playTitle': bgm.musicList[bgm.playIndex].chapter})
store.commit('setUserInfo',{'fengImg': bgm.musicList[bgm.playIndex].bookImage})
// store.commit('setUserInfo',{'playFlag': true})
store.commit('setUserInfo',{'playingInfo': bgm.musicList[bgm.playIndex]})
uni.setStorage({
key: 'playingInfo',
data: bgm.musicList[bgm.playIndex],
success: function () {
console.log('success');
}
});
},
// 存储播放(本地)
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.id,
'chapterName': val.chapter,
'precent': Math.ceil(bgm.currentTime),
'loadAnimate':'none', // 请求加载动画
})
.then(res => {
console.log(res,'线上存储进度')
if(res.code == 0){
console.log(res,'存储完成')
}
}).catch((e)=>{
console.log(e,'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()
bgm.htimes = 0
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)
bgm.htimes = 0
this.getChartUrl() // 获取章节url
}
},
// 设置封面图片
setCoverImg(url){
// console.log(bgm.coverImgUrl,'bgm.coverImgUrl')
bgm.coverImgUrl = url
},
// 获取封面图片
getCoverImg(){
// console.log(bgm.coverImgUrl,'bgm.coverImgUrl')
return bgm.coverImgUrl
},
// 播放单曲
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.id == info.id && item.bookId == info.bookId ){
return info;
}
})
console.log(bgm.playIndex,'bgm.playIndex')
this.getChartUrl()
},
// 关闭音频
setCloseBgm(){
if(bgm.interval){
console.log('存在定时器,清空')
clearInterval(bgm.interval)
bgm.interval = null
bgm.stop()
}
}
}
module.exports = {music,bgm}