// pages/peoblem_report/peoblem_report.js import { routers, viewImage, sharePage, isFn, getGlobalVal, formatDateTime, formateNumber, formatDate } from '../../utils/util.js' import { FindProblemPictureDetail } from '../../utils/api.js' const { navigateTo, redirectTo, navigateBack } = routers() const { globalData } = getApp() const { baseImgUrl, thumbnail } = globalData const app = getApp() const { formatNumber } = require('../../utils/util.js') Page({ /** * 页面的初始数据 */ data: { baseImgUrl, thumbnail, voiceKeyIndex:-1, imgNum:3, isPlay:0, times:0, isMusic:0, isEnd:0, voiceKeyList:[] }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { this.setData(options); this.getData(); }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady: function () { }, /** * 生命周期函数--监听页面显示 */ onShow: function () { }, /** * 生命周期函数--监听页面隐藏 */ onHide: function () { let pages = getCurrentPages(); const {isMusic,voiceKeyList, voiceKeyIndex}=this.data console.log( '生命周期函数--监听页面隐藏'+isMusic) // this.setData({isEnd:1}) // this.innerAudioContext.destroy(); if(isMusic){ this.stopPlay() // this.innerAudioContext.onStop(() => { this.innerAudioContext.stop(); clearInterval(this.setIntervalAudio) this.pauseAudio(voiceKeyList, voiceKeyIndex) // }) } }, /** * 生命周期函数--监听页面卸载 */ onUnload: function () { const {isMusic,voiceKeyList, voiceKeyIndex}=this.data console.log( '生命周期函数--监听页面卸载'+isMusic) // this.setData({isEnd:1}) // this.innerAudioContext.destroy(); if(isMusic){ this.stopPlay() // this.innerAudioContext.onStop(() => { this.innerAudioContext.stop(); clearInterval(this.setIntervalAudio) this.pauseAudio(voiceKeyList, voiceKeyIndex) // }) } }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function () { }, /** * 页面上拉触底事件的处理函数 */ onReachBottom: function () { }, /** * 用户点击右上角分享 */ onShareAppMessage: function () { if (app.sharePageDefaultCtl) { return app.sharePageDefaultCtl() } }, //查看图片 viewImageCtl: app.viewImageCtl, // 获取难题详情 // getPuzzleReport:function(){ // const postData = { fn: this.getPuzzleReport, param: { ...arguments } } // const { problemPictureId, nodes, answerNodes } = this.data; // const fn = res => { // const { derverFileKey, problemFeedbackVideoPath, problemPictureId, problemPicturePath, recommendedQuestions, similarQuestions, teacherMessage} = res.data; // const correctListTemp = (res => { // for (let i in res) { // if (res[i].question.indexOf("img") != -1){ // res[i].question = res[i].question.replace(/\ { // for (let i in res) { // if (res[i].analysis.indexOf("img") != -1) { // res[i].analysis = res[i].analysis.replace(/\ { const { derverFileKey, problemFeedbackVideoPath, problemPictureId, problemPicturePath, recommendedQuestions, similarQuestions, teacherMessage,fileKeys,voiceKeyList } = res.data; const voiceListTemp = (res => { for (let i in res) { res[i].voiceType = 0 res[i].durationNum = 0; res[i].progress = 0; res[i].isHands = false; // res[i].audioTotal = formatNumber(Math.floor(voiceList[i].duration / 60)) + ':' + formatNumber(Math.floor(voiceList[i].duration % 60)); } return res })(voiceKeyList) const correctListTemp = (res => { for (let i in res) { if (res[i].question.indexOf("img") != -1) { res[i].question = res[i].question.replace(/\ { for (let i in res) { if (res[i].analysis.indexOf("img") != -1) { res[i].analysis = res[i].analysis.replace(/\ { this.setData({ isLoaded: true }) if (isFn(cb)) cb() }) }, /** * 开始计时 */ startSetInter: function () { let time = 1000; var that = this; let { times,isEnd} = this.data; // console.log(times) var setTime = this.data.times + 1 console.log(setTime) that.setData({ times: setTime,imgNum:setTime }) that.data.setInter = setTimeout(this.startSetInter, time); if (setTime>2) { that.endSetInter(); if(setTime==3&&!isEnd){ setTimeout( function () { that.startSetInter() }, 1000) } } }, /** * 结束计时 */ endSetInter:function(){ var that = this; clearTimeout(that.data.setInter) that.setData({ times: 0}) }, /** * 结束计时 */ stopPlay:function(){ var that = this; that.endSetInter(); that.setData({ imgNum:3}) console.log('结束') }, /** * 音频控制按钮 */ audioCtl: function (e) { const { index } = e.currentTarget.dataset const { voiceKeyList, voiceKeyIndex} = this.data const { voiceType } = voiceKeyList[index]; this.setData({isMusic:1}) var that=this // console.log(index,voiceKeyIndex,voiceType) if (index == voiceKeyIndex) { if (voiceType == 1) { console.log('1---停止') that.stopPlay() if (this.innerAudioContext) this.innerAudioContext.stop() } else if (voiceType == 2) { console.log('1---播放') if (this.innerAudioContext) this.innerAudioContext.play() } else { this.audioManager() } } else { const temp = {} temp['voiceKeyIndex'] = index this.setData(temp) this.audioManager() } }, /** * 开始播放语音 */ playAudio: function (voiceKeyList, voiceKeyIndex) { const { voiceKey, voiceType, durationNum, duration, progress } = voiceKeyList[voiceKeyIndex]; console.log('开始播放语音') this.startSetInter() const temp = {} temp[`voiceKeyList[${voiceKeyIndex}].voiceType`] = 1; temp[`voiceKeyList[${voiceKeyIndex}].isHands`] = true; this.setData(temp) let d = voiceType == 2 ? durationNum - 1 : duration if (this.setIntervalAudio) { clearInterval(this.setIntervalAudio) } // console.log(d) this.setIntervalAudio = setInterval(() => { if (d > 0) { d-- temp[`voiceKeyList[${voiceKeyIndex}].durationNum`] = d temp[`voiceKeyList[${voiceKeyIndex}].progress`] = Math.floor((duration - d) / duration * 100) this.setData(temp) } else { clearInterval(this.setIntervalAudio) } }, 1000) }, /** * 暂停播放语音 */ pauseAudio: function (voiceKeyList, voiceKeyIndex) { console.log('2---停止') const {isEnd}=this.data this.setData({isEnd:!isEnd}) const temp = {} temp[`voiceKeyList[${voiceKeyIndex}].voiceType`] = 2 this.setData(temp) }, /** * 结束播放语音 */ endAudio: function (voiceKeyList, voiceKeyIndex, listIndex) { console.log('3---停止') const {isEnd}=this.data this.setData({isEnd:!isEnd}) const { voiceKey, voiceType, durationNum, duration, progress } = voiceKeyList[voiceKeyIndex] this.stopPlay() const temp = {} temp[`voiceKeyList[${voiceKeyIndex}].voiceType`] = 0 temp[`voiceKeyList[${voiceKeyIndex}].duration`] = duration temp[`voiceKeyList[${voiceKeyIndex}].progress`] = 0 temp[`voiceKeyList[${voiceKeyIndex}].isHands`] = false; this.setData(temp) }, /** * 语音播放管理器 */ audioManager: function () { const { voiceKeyList, voiceKeyIndex, baseImgUrl } = this.data if (this.innerAudioContext) { this.innerAudioContext.destroy() clearInterval(this.setIntervalAudio) for (const i in voiceKeyList) { const temp = {}; temp[`voiceKeyList[${i}].voiceType`] = 0; this.setData(temp) } } const { voiceKey } = voiceKeyList[voiceKeyIndex] if (!voiceKey) return this.innerAudioContext = wx.createInnerAudioContext() this.innerAudioContext.autoplay = true this.innerAudioContext.src = baseImgUrl+voiceKey console.log(baseImgUrl + voiceKey) this.innerAudioContext.onPlay(() => { this.playAudio(voiceKeyList, voiceKeyIndex) }) this.innerAudioContext.onStop(() => { clearInterval(this.setIntervalAudio) this.pauseAudio(voiceKeyList, voiceKeyIndex) }) this.innerAudioContext.onEnded(() => { this.innerAudioContext.destroy() clearInterval(this.setIntervalAudio) this.endAudio(voiceKeyList, voiceKeyIndex) }) this.innerAudioContext.onError(res => { console.log(res) wx.showToast({ title: '播放语音失败', icon: 'none' }) }) }, /** * 结束语音 */ nextAudio: function () { const { voiceKeyList, voiceKeyIndex} = this.data; this.stopPlay() if (voiceKeyIndex != -1 && listIndex != -1) { const { voiceKey, voiceType, durationNum, duration, progress } = voiceKeyList[voiceKeyIndex] const temp = {} temp[`voiceKeyList[${voiceKeyIndex}].voiceType`] = 0 temp[`voiceKeyList[${voiceKeyIndex}].duration`] = duration temp[`voiceKeyList[${voiceKeyIndex}].progress`] = 0 if (this.innerAudioContext) this.innerAudioContext.pause() this.setData(temp) } } })