|
|
|
@ -26,6 +26,9 @@ export default function HomePage() { |
|
|
|
|
|
|
|
|
|
//检查是否为第一次播放,每次切换音频时需要重置
|
|
|
|
|
const [isFirst, setisFirst] = useState(true) |
|
|
|
|
|
|
|
|
|
//是否有操作过播放或者切换(用以判断是否需要自动播放,受限于浏览器规则,用户刚进来时没法自动播放)
|
|
|
|
|
const [played, setPlayed] = useState(false) |
|
|
|
|
|
|
|
|
|
//音频列表
|
|
|
|
|
const [musicList, setmusicList] = useState<any[]>([]) |
|
|
|
@ -34,14 +37,16 @@ export default function HomePage() { |
|
|
|
|
const [isShowList, setisShowList] = useState<boolean>(false) |
|
|
|
|
|
|
|
|
|
//记录列表序号index
|
|
|
|
|
const [listIndex, setlistIndex] = useState(0) |
|
|
|
|
const [listIndex, setlistIndex] = useState(-1) |
|
|
|
|
|
|
|
|
|
//记录音频播放模式
|
|
|
|
|
//0 列表循环
|
|
|
|
|
//1 单曲循环
|
|
|
|
|
//2 定时播放
|
|
|
|
|
const [playMode, setplayMode] = useState<number>(0) |
|
|
|
|
|
|
|
|
|
// 定时播放
|
|
|
|
|
const [playTimer, setPlayTimer] = useState<number>(0) |
|
|
|
|
|
|
|
|
|
//控制定时播放弹窗
|
|
|
|
|
const [isShowRg, setisShowRg] = useState(false) |
|
|
|
|
|
|
|
|
@ -93,7 +98,7 @@ export default function HomePage() { |
|
|
|
|
// resId => 36208
|
|
|
|
|
|
|
|
|
|
//请求音频列表
|
|
|
|
|
axios.post('https:// interapi.jm-kid.com/api/product/resource', { |
|
|
|
|
axios.post('https://interapi.jm-kid.com/api/product/resource', { |
|
|
|
|
timestamp: Date.now(), |
|
|
|
|
prdt_id: prdtId ? prdtId : 5113, |
|
|
|
|
res_type: '03', |
|
|
|
@ -101,62 +106,19 @@ export default function HomePage() { |
|
|
|
|
console.log('产品音频列表获取成功=>', res.data) |
|
|
|
|
setmusicList(res.data.data.StoryResource) |
|
|
|
|
|
|
|
|
|
console.log('PlayType=>', res.data.data.StoryResource[0].PlayType) |
|
|
|
|
//判断播放方式
|
|
|
|
|
if(res.data.data.StoryResource[0].PlayType === 'url'){ |
|
|
|
|
console.log('url播放方式') |
|
|
|
|
const mDesc = { |
|
|
|
|
PrdtTitle: res.data.data.StoryResource[0].ResTitle, |
|
|
|
|
PrdtCover: res.data.data.StoryResource[0].ResCover, |
|
|
|
|
} |
|
|
|
|
setMusicDesc(mDesc) |
|
|
|
|
settestMusic(res.data.data.StoryResource[0].PlayUrl) |
|
|
|
|
setdurantionTime(res.data.data.StoryResource[0].ResDuration) |
|
|
|
|
}else{ |
|
|
|
|
console.log('app播放方式') |
|
|
|
|
//app request for video resource
|
|
|
|
|
axios.post('https://api.jimeikid.com/jiyoumei/system/admin/employee/login', { |
|
|
|
|
"password": "WxBmGKupbl30+v4hfQC8aQ==", |
|
|
|
|
"userName": "VqwgIY4g7s9DanyyqsKP4g==", |
|
|
|
|
}).then((token_res: any) => { |
|
|
|
|
console.log('app token=>', token_res.data.data.token) |
|
|
|
|
|
|
|
|
|
axios.get('https://api.jimeikid.com/jiyoumei/product/app/message/send/history/getPlayInfo',{ |
|
|
|
|
params: { |
|
|
|
|
token: res.data.data.StoryResource[0].ResPwd, |
|
|
|
|
videoId: res.data.data.StoryResource[0].ResVcode |
|
|
|
|
}, |
|
|
|
|
headers: { |
|
|
|
|
authorization: token_res.data.data.token |
|
|
|
|
} |
|
|
|
|
}).then((rres: any) => { |
|
|
|
|
console.log('视频资源请求成功=>', rres.data) |
|
|
|
|
const mDesc = { |
|
|
|
|
PrdtTitle: res.data.data.StoryResource[0].ResTitle, |
|
|
|
|
PrdtCover: res.data.data.StoryResource[0].ResCover, |
|
|
|
|
} |
|
|
|
|
setMusicDesc(mDesc) |
|
|
|
|
console.log('视频资源=>',rres.data.data.body.playInfoList.playInfo[0].playURL) |
|
|
|
|
settestMusic(rres.data.data.body.playInfoList.playInfo[0].playURL) |
|
|
|
|
setdurantionTime(rres.data.data.body.playInfoList.playInfo[0].duration) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
setlistIndex(0) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, []) |
|
|
|
|
|
|
|
|
|
const startTimer = () => { |
|
|
|
|
if (timerId !== null) return; // 如果已经有计时器在运行,则返回
|
|
|
|
|
let id = setInterval(() => { |
|
|
|
|
setSeconds(prevSeconds => prevSeconds + 1); |
|
|
|
|
if (seconds >= selectedDuration - 1) { |
|
|
|
|
videoRef.current = null; |
|
|
|
|
clearInterval(id); |
|
|
|
|
setTimerId(null); |
|
|
|
|
} |
|
|
|
|
}, 1000); |
|
|
|
|
stopTimer() |
|
|
|
|
const id = setTimeout(() => { |
|
|
|
|
setisPlay(false) |
|
|
|
|
setPlayTimer(0) |
|
|
|
|
clearTimeout(id); |
|
|
|
|
setTimerId(null); |
|
|
|
|
// }, playTimer * 1000 * 3);
|
|
|
|
|
}, playTimer * 1000 * 60 * 10); |
|
|
|
|
setTimerId(id); |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -164,32 +126,15 @@ export default function HomePage() { |
|
|
|
|
if (timerId !== null) { |
|
|
|
|
clearInterval(timerId); |
|
|
|
|
setTimerId(null); |
|
|
|
|
setSeconds(0); // 重置秒数
|
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
|
return () => { |
|
|
|
|
if (timerId !== null) { |
|
|
|
|
clearInterval(timerId); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
}, [timerId]); // 只有当 timerId 发生变化时才执行
|
|
|
|
|
|
|
|
|
|
useEffect(()=> { |
|
|
|
|
if(playMode > 2){ |
|
|
|
|
if(selectedDuration !== (playMode - 2) * 600){ |
|
|
|
|
stopTimer() |
|
|
|
|
setSelectedDuration((playMode - 2) * 600) |
|
|
|
|
startTimer() |
|
|
|
|
} |
|
|
|
|
}else if(playMode === 2){ |
|
|
|
|
stopTimer() |
|
|
|
|
} |
|
|
|
|
}, [playMode]) |
|
|
|
|
playTimer && startTimer() |
|
|
|
|
}, [playTimer]) |
|
|
|
|
|
|
|
|
|
useEffect(()=>{ |
|
|
|
|
|
|
|
|
|
isPlay && setPlayed(true) |
|
|
|
|
if(currentTime === durantionTime - 1){ |
|
|
|
|
setcurrentTime(0) |
|
|
|
|
} |
|
|
|
@ -221,115 +166,104 @@ export default function HomePage() { |
|
|
|
|
hls.attachMedia(audio); // 关联 media 元素
|
|
|
|
|
hls.on(HLS.Events.MANIFEST_PARSED, function() { |
|
|
|
|
audio.play(); // 开始播放
|
|
|
|
|
setisFirst(false) |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
}else{ |
|
|
|
|
audio.pause() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
audio.addEventListener('timeupdate', () => { |
|
|
|
|
setcurrentTime(audio.currentTime) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
audio.addEventListener('ended', () => { |
|
|
|
|
console.log('音频播放结束') |
|
|
|
|
setisPlay(false) |
|
|
|
|
if(playMode === 0){ |
|
|
|
|
if(listIndex < musicList.length - 1){ |
|
|
|
|
console.log('下一首,更改listIndex', listIndex) |
|
|
|
|
setlistIndex(listIndex + 1) |
|
|
|
|
}else{ |
|
|
|
|
setlistIndex(0) |
|
|
|
|
} |
|
|
|
|
}else if(playMode === 1){ |
|
|
|
|
|
|
|
|
|
}else if(playMode === 2){ |
|
|
|
|
setplayMode(0) |
|
|
|
|
} |
|
|
|
|
audio.currentTime = 0 |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
audio.addEventListener('error', (res: any) => { |
|
|
|
|
console.log('error', res) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
audio.addEventListener('pause', () => { |
|
|
|
|
setcurrentTime(audio.currentTime) |
|
|
|
|
setisPlay(false) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
audio.addEventListener('play', () => { |
|
|
|
|
setisPlay(true) |
|
|
|
|
}) |
|
|
|
|
}, [isPlay]) |
|
|
|
|
|
|
|
|
|
useEffect(()=>{ |
|
|
|
|
console.log('切换音频', listIndex, musicList) |
|
|
|
|
if(listIndex !== -1 && musicList.length > 0){ |
|
|
|
|
console.log('切换音频', listIndex) |
|
|
|
|
setisPlay(false) |
|
|
|
|
//请求音频列表
|
|
|
|
|
axios.post('https:// interapi.jm-kid.com/api/product/resource', { |
|
|
|
|
timestamp: Date.now(), |
|
|
|
|
prdt_id: reprdtId ? reprdtId : 5113, |
|
|
|
|
res_type: '03', |
|
|
|
|
}).then((res:any) => { |
|
|
|
|
console.log('产品音频列表获取成功=>', res.data) |
|
|
|
|
|
|
|
|
|
//判断播放方式
|
|
|
|
|
if(res.data.data.StoryResource[listIndex].PlayType === 'url'){ |
|
|
|
|
const mDesc = { |
|
|
|
|
PrdtTitle: res.data.data.StoryResource[listIndex].ResTitle, |
|
|
|
|
PrdtCover: res.data.data.StoryResource[listIndex].ResCover, |
|
|
|
|
} |
|
|
|
|
setMusicDesc(mDesc) |
|
|
|
|
settestMusic(res.data.data.StoryResource[listIndex].PlayUrl) |
|
|
|
|
setdurantionTime(res.data.data.StoryResource[listIndex].ResDuration) |
|
|
|
|
setisFirst(true) |
|
|
|
|
setcurrentTime(0) |
|
|
|
|
setisPlay(true) |
|
|
|
|
}else{ |
|
|
|
|
//app request for video resource
|
|
|
|
|
axios.post('https://api.jimeikid.com/jiyoumei/system/admin/employee/login', { |
|
|
|
|
"password": "WxBmGKupbl30+v4hfQC8aQ==", |
|
|
|
|
"userName": "VqwgIY4g7s9DanyyqsKP4g==", |
|
|
|
|
}).then((token_res: any) => { |
|
|
|
|
console.log('app token=>', token_res.data.data.token) |
|
|
|
|
|
|
|
|
|
axios.get('https://api.jimeikid.com/jiyoumei/product/app/message/send/history/getPlayInfo',{ |
|
|
|
|
params: { |
|
|
|
|
token: res.data.data.StoryResource[listIndex].ResPwd, |
|
|
|
|
videoId: res.data.data.StoryResource[listIndex].ResVcode |
|
|
|
|
}, |
|
|
|
|
headers: { |
|
|
|
|
authorization: token_res.data.data.token |
|
|
|
|
} |
|
|
|
|
}).then((rres: any) => { |
|
|
|
|
console.log('视频资源请求成功=>', rres.data) |
|
|
|
|
const mDesc = { |
|
|
|
|
PrdtTitle: res.data.data.StoryResource[listIndex].ResTitle, |
|
|
|
|
PrdtCover: res.data.data.StoryResource[listIndex].ResCover, |
|
|
|
|
} |
|
|
|
|
setMusicDesc(mDesc) |
|
|
|
|
console.log('视频资源=>',rres.data.data.body.playInfoList.playInfo[0].playURL) |
|
|
|
|
settestMusic(rres.data.data.body.playInfoList.playInfo[0].playURL) |
|
|
|
|
setdurantionTime(rres.data.data.body.playInfoList.playInfo[0].duration) |
|
|
|
|
setisFirst(true) |
|
|
|
|
setcurrentTime(0) |
|
|
|
|
setisPlay(true) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
played && setisPlay(false) |
|
|
|
|
//判断播放方式
|
|
|
|
|
if(musicList[listIndex].PlayType === 'url'){ |
|
|
|
|
const mDesc = { |
|
|
|
|
PrdtTitle: musicList[listIndex].ResTitle, |
|
|
|
|
PrdtCover: musicList[listIndex].ResCover, |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
setMusicDesc(mDesc) |
|
|
|
|
settestMusic(musicList[listIndex].PlayUrl) |
|
|
|
|
setdurantionTime(musicList[listIndex].ResDuration) |
|
|
|
|
setisFirst(true) |
|
|
|
|
setcurrentTime(0) |
|
|
|
|
played && setisPlay(true) |
|
|
|
|
}else{ |
|
|
|
|
//app request for video resource
|
|
|
|
|
axios.post('https://api.jimeikid.com/jiyoumei/system/admin/employee/login', { |
|
|
|
|
"password": "WxBmGKupbl30+v4hfQC8aQ==", |
|
|
|
|
"userName": "VqwgIY4g7s9DanyyqsKP4g==", |
|
|
|
|
}).then((token_res: any) => { |
|
|
|
|
console.log('app token=>', token_res.data.data.token) |
|
|
|
|
|
|
|
|
|
axios.get('https://api.jimeikid.com/jiyoumei/product/app/message/send/history/getPlayInfo',{ |
|
|
|
|
params: { |
|
|
|
|
token: musicList[listIndex].ResPwd, |
|
|
|
|
videoId: musicList[listIndex].ResVcode |
|
|
|
|
}, |
|
|
|
|
headers: { |
|
|
|
|
authorization: token_res.data.data.token |
|
|
|
|
} |
|
|
|
|
}).then((rres: any) => { |
|
|
|
|
console.log('视频资源请求成功=>', rres.data) |
|
|
|
|
const mDesc = { |
|
|
|
|
PrdtTitle: musicList[listIndex].ResTitle, |
|
|
|
|
PrdtCover: musicList[listIndex].ResCover, |
|
|
|
|
} |
|
|
|
|
setMusicDesc(mDesc) |
|
|
|
|
console.log('视频资源=>',rres.data.data.body.playInfoList.playInfo[0].playURL) |
|
|
|
|
settestMusic(rres.data.data.body.playInfoList.playInfo[0].playURL) |
|
|
|
|
setdurantionTime(rres.data.data.body.playInfoList.playInfo[0].duration) |
|
|
|
|
setisFirst(true) |
|
|
|
|
setcurrentTime(0) |
|
|
|
|
played && setisPlay(true) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
}, [listIndex]) |
|
|
|
|
|
|
|
|
|
useEffect(()=>{ |
|
|
|
|
if(playMode > 1){ |
|
|
|
|
setisShowRg(true) |
|
|
|
|
useEffect(() => { |
|
|
|
|
const audio = videoRef.current |
|
|
|
|
if (audio) { |
|
|
|
|
audio.addEventListener('timeupdate', timeupdateHandle) |
|
|
|
|
audio.addEventListener('pause', timeupdateHandle) |
|
|
|
|
audio.addEventListener('play', playHandle) |
|
|
|
|
audio.addEventListener('ended', endedHandle) |
|
|
|
|
} |
|
|
|
|
}, [playMode]) |
|
|
|
|
|
|
|
|
|
return () => { |
|
|
|
|
if (audio) { |
|
|
|
|
audio.removeEventListener('timeupdate', timeupdateHandle) |
|
|
|
|
audio.removeEventListener('pause', timeupdateHandle) |
|
|
|
|
audio.removeEventListener('play', playHandle) |
|
|
|
|
audio.removeEventListener('ended', endedHandle) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}, [listIndex, playMode]) |
|
|
|
|
|
|
|
|
|
const endedHandle = () => { |
|
|
|
|
if(playMode === 0){ |
|
|
|
|
setisPlay(false) |
|
|
|
|
if(listIndex < musicList.length - 1){ |
|
|
|
|
setlistIndex(listIndex + 1) |
|
|
|
|
}else{ |
|
|
|
|
setlistIndex(0) |
|
|
|
|
} |
|
|
|
|
videoRef.current.currentTime = 0 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const timeupdateHandle = () => { |
|
|
|
|
setcurrentTime(videoRef.current.currentTime) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const playHandle = () => { |
|
|
|
|
setisPlay(true) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const handleClickList = () => { |
|
|
|
|
setisShowList(true) |
|
|
|
@ -345,7 +279,15 @@ export default function HomePage() { |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<div className='audio_progress_bar'> |
|
|
|
|
<div className="audio_title_wrap"> |
|
|
|
|
<div className='audio_title'>{MusicDesc.PrdtTitle}</div> |
|
|
|
|
|
|
|
|
|
<img |
|
|
|
|
className='audio_btn' |
|
|
|
|
src='https://oss.jm-kid.com/wx_5colorflower/assets/regularPlay.png' |
|
|
|
|
onClick={() => setisShowRg(true)} |
|
|
|
|
></img> |
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
<ConfigProvider |
|
|
|
|
theme={{ |
|
|
|
@ -382,7 +324,7 @@ export default function HomePage() { |
|
|
|
|
/> |
|
|
|
|
</ConfigProvider> |
|
|
|
|
|
|
|
|
|
<audio ref={videoRef}></audio> |
|
|
|
|
<audio ref={videoRef} loop={!!playMode} playsInline></audio> |
|
|
|
|
|
|
|
|
|
<div className='audio_progress_time_bar'> |
|
|
|
|
<div
|
|
|
|
@ -399,23 +341,16 @@ export default function HomePage() { |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div className='audio_operate'> |
|
|
|
|
<img |
|
|
|
|
<img |
|
|
|
|
className='audio_operate_btn0' |
|
|
|
|
src={playMode === 0 ? 'https://oss.jm-kid.com/wx_5colorflower/assets/listPlay.png' : playMode === 1 ? 'https://oss.jm-kid.com/wx_5colorflower/assets/cyclePlay.png' : 'https://oss.jm-kid.com/wx_5colorflower/assets/regularPlay.png'} |
|
|
|
|
onClick={() => { |
|
|
|
|
if(playMode === 0){ |
|
|
|
|
setplayMode(1) |
|
|
|
|
}else if(playMode === 1){ |
|
|
|
|
setplayMode(2) |
|
|
|
|
}else{ |
|
|
|
|
setplayMode(0) |
|
|
|
|
} |
|
|
|
|
}} |
|
|
|
|
src={playMode === 0 ? 'https://oss.jm-kid.com/wx_5colorflower/assets/listPlay.png' : 'https://oss.jm-kid.com/wx_5colorflower/assets/cyclePlay.png'} |
|
|
|
|
onClick={() => setplayMode(m => m ? 0 : 1)} |
|
|
|
|
></img> |
|
|
|
|
<img
|
|
|
|
|
className='audio_operate_btn0' |
|
|
|
|
src='https://oss.jm-kid.com/wx_5colorflower/assets/prev.png' |
|
|
|
|
onClick={() => { |
|
|
|
|
setPlayed(true) |
|
|
|
|
if(listIndex === 0){ |
|
|
|
|
setlistIndex(musicList.length - 1) |
|
|
|
|
}else{ |
|
|
|
@ -432,6 +367,7 @@ export default function HomePage() { |
|
|
|
|
className='audio_operate_btn0' |
|
|
|
|
src='https://oss.jm-kid.com/wx_5colorflower/assets/next.png' |
|
|
|
|
onClick={() => { |
|
|
|
|
setPlayed(true) |
|
|
|
|
if(listIndex < musicList.length - 1){ |
|
|
|
|
setlistIndex(listIndex + 1) |
|
|
|
|
}else{ |
|
|
|
@ -460,8 +396,8 @@ export default function HomePage() { |
|
|
|
|
<RgupHalfScreen |
|
|
|
|
visible={isShowRg} |
|
|
|
|
onClose={() => setisShowRg(false)} |
|
|
|
|
type={playMode} |
|
|
|
|
setType={setplayMode} |
|
|
|
|
playTimer={playTimer} |
|
|
|
|
setPlayTimer={setPlayTimer} |
|
|
|
|
></RgupHalfScreen> |
|
|
|
|
</div> |
|
|
|
|
) |
|
|
|
|