diff --git a/src/api/socket.js b/src/api/socket.js index 40957666..f10f1ba3 100644 --- a/src/api/socket.js +++ b/src/api/socket.js @@ -35,6 +35,7 @@ export default class WebSocketUtil { */ init(flag = false) { if(flag) this.reconnectCount = 0 + this.isClose = false; // 手动关闭 // 创建WebSocket连接 this.socketTask = uni.connectSocket({ url: this.url, diff --git a/src/components/image-preview/image-preview.vue b/src/components/image-preview/image-preview.vue index f368c93f..330050b6 100644 --- a/src/components/image-preview/image-preview.vue +++ b/src/components/image-preview/image-preview.vue @@ -156,7 +156,7 @@ position: absolute; left: 50%; top: 50%; - max-width: 100%; + width: 100vw; max-height: 100%; transform: translate(-50%, -50%); } diff --git a/src/components/image-preview/video-preview.vue b/src/components/image-preview/video-preview.vue index 8f65deec..3eb87594 100644 --- a/src/components/image-preview/video-preview.vue +++ b/src/components/image-preview/video-preview.vue @@ -104,8 +104,8 @@ transform: translate(-50%, -50%); } .overlay-box .video-cont-center{ - max-width: 100%; - max-height: 80%; + width: 100vw; + max-height: 100%; position: absolute; top: 50%; left: 50%; diff --git a/src/pages/course/components/talkingItem.vue b/src/pages/course/components/talkingItem.vue index 76700155..96473597 100644 --- a/src/pages/course/components/talkingItem.vue +++ b/src/pages/course/components/talkingItem.vue @@ -367,13 +367,17 @@ const audioCacheObj = computed(() => storageStore.audioObj) },100) }else{ voiceLoading.value = true + let _type = props.type == 2 ? 'ans' : props.type == 3 ? 'pgrh' : props.type == 4 ? 'qns' : '' + let _readId = props.type == 2 ? unref(dataInfo)?.intrctId : props.type == 3 ? unref(dataInfo)?.pgrphId : props.type == 4 ? unref(dataInfo)?.qnsId : '' + console.log(unref(dataInfo)) let _params = { crsId: unref(dataInfo)?.crsId || '', pgrphId: unref(dataInfo)?.pgrphId || '', qnsId: unref(dataInfo)?.qnsId || '', - readType: readType, + readType: _type,// 2 文本回答 3, 段落信息 4 问题信息 teachNo: unref(teacherInfo)?.teacherNo, // 必填 - content: _content + readId: _readId + // content: _content } @@ -388,19 +392,6 @@ const audioCacheObj = computed(() => storageStore.audioObj) talkVoiceObj.value.src = url talkVoiceObj.value.play() }else{ - // getAudioByText(_params).then(res=>{ - // // uni.env.USER_DATA_PATH || - // let filePath = `${'/'}/${dataInfo.value.id}.mp3` - // saveFile(res, filePath, () => { - // voiceLoading.value = false - // itemVoice.value = filePath - // talkVoiceObj.value.src = filePath - // talkVoiceObj.value.play() - // storageStore.setStorage('audio', _url + _params.teachNo, itemVoice.value) - // }) - // }).catch(err=>{ - // console.log(err) - // }) downloadVoiceFile(_url).then(res=>{ if(res?.data){ common.msg(res.data.message) diff --git a/src/pages/course/components/touchBtn.vue b/src/pages/course/components/touchBtn.vue index 6477cf62..3765cae2 100644 --- a/src/pages/course/components/touchBtn.vue +++ b/src/pages/course/components/touchBtn.vue @@ -61,12 +61,23 @@ const props = defineProps({ default: false, type: Boolean }, + canAnswer:{ + default: true, + type: Boolean + }, + canAnswerText:{ + default: '当前状态不能发送内容!', + type: String + }, }) const { isDisabled, onlyVoice } = toRefs(props) const isLoadingState = computed(() => props.isLoading) watch(()=>props.isLoading,()=>{},{ deep:true,immediate:true }) +watch(()=>props.canAnswer,()=>{},{ + deep:true,immediate:true +}) watch(()=>props.onlyVoice,()=>{},{ deep:true,immediate:true }) @@ -87,11 +98,32 @@ const initRecord = () => { // stopRecord() unref(recordObjCom)?.onStop((res, duration)=>{ audioPath.value = res.tempFilePath + showTalkingModel.value = false + if(startFlag.value !== 2){ + common.msg('说话时间太短,没有听清!') + return + } + if(!isOut.value){ + emit('uploadVoice', audioPath.value) + } + }) + unref(recordObjCom).onStart(() => { + startFlag.value = 1 + setTimeout(()=>{ + startFlag.value = 2 + },1000) + let _recordPerm = uni.getAppAuthorizeSetting() + let _state = _recordPerm.microphoneAuthorized + if(_state === 'authorized'){ + showTalkingModel.value = true + } }) } +const startFlag = ref(1) const startRecord = () => { unref(recordObjCom).start({format:'mp3'}) } + const stopRecord = () => { if(unref(recordObjCom).stop){ unref(recordObjCom)?.stop?.() @@ -120,18 +152,21 @@ onMounted(async ()=>{ }) } }else{ - // let _recordPerm = permission.judgeIosPermission('record') - // if(!_recordPerm){ - // common.show('提示信息', '当前页面需要使用的录音权限,是否前往开启?',true, '取消','确定').then((res) => { - // if(res) { - // // 去开启权限 - // permission.gotoAppPermissionSetting() - // }else{ - // // 取消 - // common.navigateBack() - // } - // }) - // } + let _recordPerm = uni.getAppAuthorizeSetting() + let _state = _recordPerm.microphoneAuthorized + if(_state === 'denied'){ + common.show('提示信息', '当前页面需要使用的录音权限,是否前往开启?',true, '取消','确定').then((res) => { + if(res) { + // 去开启权限 + uni.openAppAuthorizeSetting() + }else{ + // 取消 + common.navigateBack() + } + }) + }else if(_state === 'not determined'){ + // startRecord() + } } // #endif }) @@ -154,21 +189,10 @@ const outScreen = computed(()=>{ const recNum = ref(1) const activeNum = ref(1) -const getRecordPermission = async (obj) => { - //#ifdef APP-PLUS - // 安卓端 - // let _recordPerm = await permission.requestAndroidPermission('android.permission.RECORD_AUDIO') - // if(_recordPerm !== 1){ - // permission.gotoAppPermissionSetting() - // return - // } - showOverlayTalking(obj) - // #endif - //#ifndef APP-PLUS - // pc端 - showOverlayTalking(obj) - // #endif +const getRecordPermission = (obj) => { + showOverlayTalking(obj) } +const isMoving = ref(false) const showOverlayTalking = (obj) => { if(isLoadingState.value){ uni.showToast({ @@ -178,10 +202,18 @@ const showOverlayTalking = (obj) => { }) return } + if(!props.canAnswer){ + uni.showToast({ + title: props.canAnswerText, + icon: "none", + duration:1000 + }) + return + } + isMoving.value = true emit('startRecord') recNum.value += 1 if(!isDisabled.value){ - showTalkingModel.value = true touchX.value = obj.changedTouches[0].pageX touchY.value = obj.changedTouches[0].pageY baseY.value = obj.currentTarget.offsetTop @@ -201,29 +233,20 @@ const showOverlayTalking = (obj) => { } } const hideOverlayTalking = (obj) => { + isMoving.value = false if(!showTalkingModel.value) return - if(activeNum.value + 1 === recNum.value){ - showTalkingModel.value = false - //#ifdef APP-PLUS - stopRecord() - // #endif - if(!isOut.value){ - setTimeout(()=>{ - emit('uploadVoice', audioPath.value) - },1000) - } - }else{ - showTalkingModel.value = false - common.msg('录音失败,请重试!') - } - activeNum.value = recNum.value + //#ifdef APP-PLUS + stopRecord() + // #endif } const handleMove = (obj) => { - touchX.value = obj.changedTouches[0].pageX - touchY.value = obj.changedTouches[0].pageY - if(outScreen.value){ - hideOverlayTalking(obj) + if(isMoving.value){ + touchX.value = obj.changedTouches[0].pageX + touchY.value = obj.changedTouches[0].pageY + if(outScreen.value){ + hideOverlayTalking(obj) + } } } // 发送文本 diff --git a/src/pages/course/study.vue b/src/pages/course/study.vue index 30abf488..6c78dcf6 100644 --- a/src/pages/course/study.vue +++ b/src/pages/course/study.vue @@ -85,6 +85,8 @@ @startRecord="changePlayItemId('')" :isLoading="isUploadingVoice" :onlyVoice="answerOnlyVoice" + :canAnswer="testAnswer" + :canAnswerText="'每个问题最多连续发送五次答案!'" :isDisabled="((lastTalkingInfo.type||0) !== 4)" /> diff --git a/src/pages/index/components/question.vue b/src/pages/index/components/question.vue index f6e9a8df..898c50ef 100644 --- a/src/pages/index/components/question.vue +++ b/src/pages/index/components/question.vue @@ -1,6 +1,6 @@