From 9eeb562da4efbbd885c6c54c4a3c06b083ec0e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=94=B0=E5=B2=A9?= Date: Wed, 16 Jul 2025 09:32:24 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=8F=98=E9=87=8F=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 ---- .env.production | 3 --- .env.sit | 2 -- .env.sit-ios | 8 -------- .env.uat | 3 --- .env.uat-ios | 8 -------- package.json | 4 +--- src/api/common.js | 2 +- src/common/common.js | 2 -- src/pages/login/login.vue | 3 --- 10 files changed, 2 insertions(+), 37 deletions(-) delete mode 100644 .env.sit-ios delete mode 100644 .env.uat-ios diff --git a/.env.development b/.env.development index 4750d846..83cf2831 100644 --- a/.env.development +++ b/.env.development @@ -2,10 +2,6 @@ ENV = 'development' # 'development' -VITE_APP_ENV = 'AND' - -# base api - # 苗扬 # VITE_APP_BASE_API_Url = 'http://25.64.16.133:9786' diff --git a/.env.production b/.env.production index c5649d8c..22641718 100644 --- a/.env.production +++ b/.env.production @@ -1,8 +1,5 @@ # 生产环境 ENV = 'production' -VITE_APP_ENV = 'AND' - # base api - VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001' diff --git a/.env.sit b/.env.sit index 4b66d147..9623af29 100644 --- a/.env.sit +++ b/.env.sit @@ -1,8 +1,6 @@ # SIT环境 ENV = 'sit' -VITE_APP_ENV = 'AND' # base api - VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002' diff --git a/.env.sit-ios b/.env.sit-ios deleted file mode 100644 index 2bd04f76..00000000 --- a/.env.sit-ios +++ /dev/null @@ -1,8 +0,0 @@ -# SIT环境 -ENV = 'sit' - -VITE_APP_ENV = 'IOS' - -# base api - -VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002' diff --git a/.env.uat b/.env.uat index b953bca8..c0c4b2ff 100644 --- a/.env.uat +++ b/.env.uat @@ -1,8 +1,5 @@ # UAT环境 ENV = 'uat' -VITE_APP_ENV = 'AND' - # base api - VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7003' diff --git a/.env.uat-ios b/.env.uat-ios deleted file mode 100644 index cbf3ee5a..00000000 --- a/.env.uat-ios +++ /dev/null @@ -1,8 +0,0 @@ -# UAT环境 -ENV = 'uat' - -VITE_APP_ENV = 'IOS' - -# base api - -VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7003' diff --git a/package.json b/package.json index 03d35fab..8b55ed63 100644 --- a/package.json +++ b/package.json @@ -11,9 +11,7 @@ "build:app-plus:sit": "uni build -p app-plus --mode sit", "build:app-plus:uat": "uni build -p app-plus --mode uat", "build:app-plus": "uni build -p app-plus", - "build:h5": "uni build", - "build:app-plus:sit:ios": "uni build -p app-plus --mode sit-ios", - "build:app-plus:uat:ios": "uni build -p app-plus --mode uat-ios" + "build:h5": "uni build" }, "dependencies": { "@dcloudio/uni-app": "3.0.0-4060620250520001", diff --git a/src/api/common.js b/src/api/common.js index baf0375f..61154a68 100644 --- a/src/api/common.js +++ b/src/api/common.js @@ -144,7 +144,7 @@ export function downloadVoiceFile(url) { let baseUrl = get_base_url(); return new Promise((resolve, reject) => { uni.downloadFile({ - url: `${baseUrl}${url}`, + url: `${baseUrl}${url}`, header, success(result) { console.log(result) diff --git a/src/common/common.js b/src/common/common.js index 66bd56ba..79695f26 100644 --- a/src/common/common.js +++ b/src/common/common.js @@ -1,6 +1,4 @@ -const _ENV = import.meta.env - function msg(title, duration = 1000) { uni.showToast({ title: title, diff --git a/src/pages/login/login.vue b/src/pages/login/login.vue index 367e527d..6c0ded28 100644 --- a/src/pages/login/login.vue +++ b/src/pages/login/login.vue @@ -145,9 +145,6 @@ onMounted(() => { password.value = loginAccountData.password; } back_state.value = true; - const systemInfo = uni.getSystemInfoSync(); - console.log(systemInfo); - console.log(getPhoneEnvBool('IOS')); }); // 跳进了登录页,禁止返回操作 onBackPress(() => back_state.value); From f32f605479699cd5eab89986e74d4fc99e756a3c Mon Sep 17 00:00:00 2001 From: yanghang Date: Wed, 16 Jul 2025 09:35:32 +0800 Subject: [PATCH 2/5] fix bug --- src/api/study.js | 10 ++ src/pages/course/components/talkingItem.vue | 38 ++++--- src/pages/course/components/touchBtn.vue | 19 ++-- src/pages/course/study.vue | 114 +++++++++++++++++--- 4 files changed, 148 insertions(+), 33 deletions(-) diff --git a/src/api/study.js b/src/api/study.js index df818e4e..ef123a57 100644 --- a/src/api/study.js +++ b/src/api/study.js @@ -156,4 +156,14 @@ export const textChartApi = (data) => { toastErrors: true, data }); +}; + +// 设置学习顾问音色/traStdyTeacher/setStudyTeacher +export const setStudyTeacherApi = (data) => { + return request({ + url: base_url + '/traStdyTeacher/setStudyTeacher', + method: 'post', + toastErrors: true, + data + }); }; \ No newline at end of file diff --git a/src/pages/course/components/talkingItem.vue b/src/pages/course/components/talkingItem.vue index 43b5ec4e..b2d61564 100644 --- a/src/pages/course/components/talkingItem.vue +++ b/src/pages/course/components/talkingItem.vue @@ -3,11 +3,11 @@ @@ -88,11 +88,11 @@ @@ -205,6 +205,10 @@ const audioCacheObj = computed(() => storageStore.audioObj) default: () => ({}), type: Object }, + teacherInfo: { + default: () => ({}), + type: Object + }, activeVoiceId:{ default:'', type: String @@ -239,12 +243,13 @@ const audioCacheObj = computed(() => storageStore.audioObj) } }) - const { type, dataInfo, activeVoiceId, isPlaying, isLast, lastQuestionInfo} = toRefs(props) + const { type, dataInfo, activeVoiceId, isPlaying, isLast, lastQuestionInfo, teacherInfo} = toRefs(props) const emit = defineEmits(['changePlay', 'nextQuestion', 'withdraw', 'finishQuestion']) // 声音播放初始化 const talkVoiceObj = ref(uni.createInnerAudioContext()) talkVoiceObj.value.playbackRate = Number(props.voiceRate) const userInfo = computed(() => getUserInfo()) + const itemVoice = ref('') const showWithdraw = computed(()=>{ let _isMe = unref(lastQuestionInfo).qnsLogId === unref(dataInfo).qnsLogId @@ -253,6 +258,13 @@ const audioCacheObj = computed(() => storageStore.audioObj) }) const voiceLoading = ref(false) + watch(() => props.teacherInfo,(val) => { + itemVoice.value = '' + talkVoiceObj.value.src = '' + },{ + deep: true, + immediate: true + }) watch(() => props.isPlaying,(val) => { if(!val){ talkVoiceObj.value?.pause() @@ -311,7 +323,6 @@ const audioCacheObj = computed(() => storageStore.audioObj) talkVoiceObj.value.src = '' }) talkVoiceObj.value.onError(()=>{ - emit('changePlay', '') talkVoiceObj.value.src = '' }) const pauseVoice = () => { @@ -333,19 +344,20 @@ const audioCacheObj = computed(() => storageStore.audioObj) playVoice() } } - const itemVoice = ref('') const playVoice = (readType = 'pgth') =>{ let _content = showContent.value if(!_content){ common.msg('没有可以播放的文字信息!') return } + emit('changePlay', unref(dataInfo)?.id) // readType 阅读内容类型pgrh段落/qns问题 - emit('changePlay', unref(dataInfo)?.id) if(talkVoiceObj.value.src && talkVoiceObj.value.src === itemVoice.value) { + emit('changePlay', unref(dataInfo)?.id) talkVoiceObj.value.play() return } + talkVoiceObj.value.src = '' if(itemVoice.value){ setTimeout(()=>{ talkVoiceObj.value.src = itemVoice.value @@ -358,14 +370,14 @@ const audioCacheObj = computed(() => storageStore.audioObj) pgrphId: unref(dataInfo)?.pgrphId || '', qnsId: unref(dataInfo)?.qnsId || '', readType: readType, - teachNo: unref(dataInfo)?.userInfo?.teacherNo, // 必填 + teachNo: unref(teacherInfo)?.teacherNo, // 必填 content: _content } let _url = '/trastudy/traStdyInfo/readContent?' + Object.keys(_params).map(t=>{ return encodeURIComponent(t) + '=' + encodeURIComponent(_params[t]) }).join('&') - storageStore.getStorageById('audio', _url, (url)=>{ + storageStore.getStorageById('audio', _url + _params.teachNo, (url)=>{ if(url){ voiceLoading.value = false itemVoice.value = url @@ -381,7 +393,7 @@ const audioCacheObj = computed(() => storageStore.audioObj) itemVoice.value = res.tempFilePath talkVoiceObj.value.src = res.tempFilePath talkVoiceObj.value.play() - storageStore.setStorage('audio', _url, itemVoice.value) + storageStore.setStorage('audio', _url + _params.teachNo, itemVoice.value) }).catch((err)=>{ voiceLoading.value = false }) diff --git a/src/pages/course/components/touchBtn.vue b/src/pages/course/components/touchBtn.vue index 2aa9db6b..6e957d9d 100644 --- a/src/pages/course/components/touchBtn.vue +++ b/src/pages/course/components/touchBtn.vue @@ -13,7 +13,7 @@ placeholderStyle='color:#999999;font-size:26rpx' placeholder="请输入答案"> - + @@ -46,19 +46,26 @@ const proxy = getCurrentInstance() const emit = defineEmits(['uploadVoice', 'submitAnswer','startRecord']) const props = defineProps({ isDisabled:{ - default: Boolean, - type: true + default: true, + type: Boolean }, isLoading:{ + default: false, + type: Boolean + }, + onlyVoice:{ default: false, type: Boolean - } + }, }) -const { isDisabled } = toRefs(props) +const { isDisabled, onlyVoice } = toRefs(props) const isLoadingState = computed(() => props.isLoading) watch(()=>props.isLoading,()=>{},{ deep:true,immediate:true }) +watch(()=>props.onlyVoice,()=>{},{ + deep:true,immediate:true +}) const showTalkingModel = ref(false) const keyboardIsShow = ref(false) const answerValue = ref('') @@ -235,7 +242,7 @@ const showKeyboard = () => { } }else{ uni.showToast({ - title: '请先获取问题信息!', + title: '暂无问题需要回答!', icon: "none", duration:1000 }) diff --git a/src/pages/course/study.vue b/src/pages/course/study.vue index c9c8a447..5c19da10 100644 --- a/src/pages/course/study.vue +++ b/src/pages/course/study.vue @@ -5,7 +5,7 @@ {{chooseRate}}倍 - + @@ -67,6 +67,7 @@ :isPlaying="activeVoiceTalkingItemId === item.id" :voiceRate="chooseRate" :lastQuestionInfo="lastTalkingInfo" + :teacherInfo="choiceTeacherInfo" @changePlay="changePlayItemId" @nextQuestion="nextQuestionSuccess" @withdraw="withdrawNow" @@ -83,6 +84,7 @@ @submitAnswer="submitAnswerNow" @startRecord="changePlayItemId('')" :isLoading="isUploadingVoice" + :onlyVoice="answerOnlyVoice" :isDisabled="((lastTalkingInfo.type||0) !== 4)" /> @@ -103,15 +105,22 @@ - + 设置 - - {{item}} + + + 音色 + + + + + + {{item.teacherName}} + + + + @@ -135,7 +144,8 @@ import { getCourseStudyInfoApi, afreshStudyCourseApi, queryQuestionEvalateApi, - textChartApi + textChartApi, + setStudyTeacherApi } from "@/api/study.js" import common from '@/common/common'; import TalkingItem from '@/pages/course/components/talkingItem.vue' @@ -244,20 +254,38 @@ const showChangeSeekModelNow = () => { } const showBgModel = ref(false) const showChangeBgModelNow = () => { + changePlayItemId() showBgModel.value = true } // 关闭播放状态 const changePlayItemId = (id = '') => { - if(activeVoiceTalkingItemId.value === id){ - activeVoiceTalkingItemId.value = '' - }else{ - activeVoiceTalkingItemId.value = id - } + activeVoiceTalkingItemId.value = id + // if(activeVoiceTalkingItemId.value === id){ + // activeVoiceTalkingItemId.value = '' + // }else{ + // activeVoiceTalkingItemId.value = id + // } } // 选择的教师对象信息 const choiceTeacherInfo = computed(()=>{ return teacherList.value.find(t=> t.teacherNo === choiceTeacher.value) }) + +const changeTeacherVoiceNow = async (item) => { + if(item.teacherNo === choiceTeacher.value) return + try{ + const res = await setStudyTeacherApi({ + stdyId: stdyId.value, + teacherNo: item.teacherNo + }) + console.log(res) + if(res.rtnCode === '0000'){ + choiceTeacher.value = item.teacherNo + showBgModel.value = false + } + }catch{} finally{} +} + // 选择教师语音对象 const activeVoiceTeachNo = ref('') let teacherVoiceObj = uni.createInnerAudioContext() @@ -322,6 +350,11 @@ const isLastPgrph = ref(false) const backRouter = ()=>{ common.redirectTo(`/pages/courseDetail/index?crsId=${crsId.value}&crsNum=${crsNum.value}&from=study`) } + +const answerOnlyVoice = computed(()=>{ + return lastTalkingInfo.value.answerWay === 'V' +}) + // 获取段落 const getGraphInfoUnStudy = (flag = 0) => { console.log(isLastPgrph.value) @@ -1162,6 +1195,10 @@ const chooseRateNow = (item) => { overflow: hidden; border-radius: 32rpx 32rpx 0 0; padding: 58rpx 36rpx; + &.white-bg-box-setting{ + height: auto; + min-height: 400rpx; + } .box-title{ font-size: 32rpx; font-weight: bold; @@ -1178,6 +1215,55 @@ const chooseRateNow = (item) => { color: #06f; } } + .box-items{ + .box-item{ + margin-bottom: 20rpx; + overflow: hidden; + .box-item-title{ + width: 86rpx; + height: 100%; + float: left; + overflow: hidden; + color: #666; + font-size: 28rpx; + } + .box-item-cont{ + display: block; + float: left; + width: calc(100% - 86rpx); + overflow: hidden; + .overlay-voice-item{ + width: 123rpx; + float: left; + position: relative; + margin-bottom: 30rpx; + &:not(:nth-child(3n)){ + margin-right: 100rpx; + } + .overlay-avatar-box{ + width: 123rpx; + height: 123rpx; + border-radius: 50%; + overflow: hidden; + box-shadow: 1rpx 0rpx 5rpx #ccc; + } + .overlay-teacher-name{ + width: 123rpx; + text-align: center; + height: 58rpx; + line-height: 58rpx; + font-size: 28rpx; + } + .overlay-radio-box{ + position: absolute; + left: 100rpx; + top: 5rpx; + pointer-events: none; + } + } + } + } + } } } From 0e7b3232960bd58ef0da13d20f8d7db77d4bbd28 Mon Sep 17 00:00:00 2001 From: yanghang Date: Wed, 16 Jul 2025 11:07:50 +0800 Subject: [PATCH 3/5] =?UTF-8?q?fix=EF=BC=9B=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/course/components/touchBtn.vue | 1 + src/pages/course/study.vue | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pages/course/components/touchBtn.vue b/src/pages/course/components/touchBtn.vue index 6e957d9d..fc90d399 100644 --- a/src/pages/course/components/touchBtn.vue +++ b/src/pages/course/components/touchBtn.vue @@ -188,6 +188,7 @@ const showOverlayTalking = (obj) => { hideOverlayTalking() },59 * 1010) }else{ + showTalkingModel.value = false uni.showToast({ title: '暂无问题需要回答!', icon: "none", diff --git a/src/pages/course/study.vue b/src/pages/course/study.vue index 5c19da10..fa5c4c82 100644 --- a/src/pages/course/study.vue +++ b/src/pages/course/study.vue @@ -823,11 +823,11 @@ const finishQuestionNow = (data) => { } talkingList.value.push(lastTalkingInfo.value) scrollToBottomNow(0) - getQuestionEvalateRequest(_id,data) + getQuestionEvalateRequest(_id, data, 1) }) } // 查询问题回答评分 -const getQuestionEvalateRequest = (id, data) => { +const getQuestionEvalateRequest = (id, data, num) => { if(loadingQstLogId.value){ textChartApi({ processType: 'ANSER-RESULT', @@ -858,8 +858,15 @@ const getQuestionEvalateRequest = (id, data) => { }) scrollToBottomNow() }else{ + // 1分钟之后取消获取报错 + if(num === 30){ + common.msg('获取评分数据失败,请重新提交获取!') + talkingList.value.pop()//删除loading会话 + talkingList.value.pop()//删除完成会话 + return + } setTimeout(()=>{ - getQuestionEvalateRequest(id, data) + getQuestionEvalateRequest(id, data, num+1) }, 2 * 1000) } }) From 216fe5f846c39bb5dbbb8ba4a3100db264f9444b Mon Sep 17 00:00:00 2001 From: yanghang Date: Wed, 16 Jul 2025 16:47:52 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=96=B0=E5=A2=9Eai=E9=97=AE=E7=AD=94?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- .../image-preview/image-preview.vue | 2 +- src/pages/course/study.vue | 6 +- src/pages/index/components/answer.vue | 192 ++++++++++--- src/pages/index/components/question.vue | 7 +- src/pages/index/components/talking-item.vue | 22 +- src/pages/index/dialog.vue | 259 +++++++++++++++++- src/static/images/dialog/history.png | Bin 0 -> 475 bytes src/static/images/dialog/new-dialog.png | Bin 0 -> 795 bytes 9 files changed, 424 insertions(+), 68 deletions(-) create mode 100644 src/static/images/dialog/history.png create mode 100644 src/static/images/dialog/new-dialog.png diff --git a/.env.development b/.env.development index 83cf2831..59b43ae1 100644 --- a/.env.development +++ b/.env.development @@ -3,13 +3,13 @@ ENV = 'development' # 'development' # 苗扬 -# VITE_APP_BASE_API_Url = 'http://25.64.16.133:9786' +VITE_APP_BASE_API_Url = 'http://25.64.16.133:9786' # UAT # VITE_APP_BASE_API_Url = 'http://25.18.122.78:9786' # DEV -VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001' +# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001' # app入口 diff --git a/src/components/image-preview/image-preview.vue b/src/components/image-preview/image-preview.vue index 8e766627..f368c93f 100644 --- a/src/components/image-preview/image-preview.vue +++ b/src/components/image-preview/image-preview.vue @@ -40,7 +40,7 @@ }, mode:{ type: String, - default: 'widthFix' + default: 'aspectFit' }, previewDetail: { default: '', diff --git a/src/pages/course/study.vue b/src/pages/course/study.vue index fa5c4c82..89a2959b 100644 --- a/src/pages/course/study.vue +++ b/src/pages/course/study.vue @@ -587,9 +587,9 @@ const initsocketTask = () => { getGraphInfoUnStudy(1) } }else{ - if(['0005', 'QQ0005'].includes(res.rtnCode)) { - goto_login_fun(); - } + // if(['0005', 'QQ0005'].includes(res.rtnCode)) { + // goto_login_fun(); + // } } }) } diff --git a/src/pages/index/components/answer.vue b/src/pages/index/components/answer.vue index 954c4b33..5abf3473 100644 --- a/src/pages/index/components/answer.vue +++ b/src/pages/index/components/answer.vue @@ -1,55 +1,66 @@ \ No newline at end of file diff --git a/src/pages/index/components/question.vue b/src/pages/index/components/question.vue index d26b6d27..39bb8809 100644 --- a/src/pages/index/components/question.vue +++ b/src/pages/index/components/question.vue @@ -25,7 +25,7 @@ diff --git a/src/pages/index/components/talking-item.vue b/src/pages/index/components/talking-item.vue index 690aa092..b4567334 100644 --- a/src/pages/index/components/talking-item.vue +++ b/src/pages/index/components/talking-item.vue @@ -1,22 +1,36 @@