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 @@
-
+
{{voiceTime}}
@@ -45,7 +45,7 @@