diff --git a/Android/.gradle/8.11.1/executionHistory/executionHistory.bin b/Android/.gradle/8.11.1/executionHistory/executionHistory.bin index 260049b2..3e7e6123 100644 Binary files a/Android/.gradle/8.11.1/executionHistory/executionHistory.bin and b/Android/.gradle/8.11.1/executionHistory/executionHistory.bin differ diff --git a/Android/.gradle/8.11.1/executionHistory/executionHistory.lock b/Android/.gradle/8.11.1/executionHistory/executionHistory.lock index bf590ed9..cf93e9a5 100644 Binary files a/Android/.gradle/8.11.1/executionHistory/executionHistory.lock and b/Android/.gradle/8.11.1/executionHistory/executionHistory.lock differ diff --git a/Android/.gradle/8.11.1/fileHashes/fileHashes.bin b/Android/.gradle/8.11.1/fileHashes/fileHashes.bin index 93a0149b..fa3abd6c 100644 Binary files a/Android/.gradle/8.11.1/fileHashes/fileHashes.bin and b/Android/.gradle/8.11.1/fileHashes/fileHashes.bin differ diff --git a/Android/.gradle/8.11.1/fileHashes/fileHashes.lock b/Android/.gradle/8.11.1/fileHashes/fileHashes.lock index a4d7a568..4ecc1973 100644 Binary files a/Android/.gradle/8.11.1/fileHashes/fileHashes.lock and b/Android/.gradle/8.11.1/fileHashes/fileHashes.lock differ diff --git a/Android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/Android/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 474a1966..595e71e7 100644 Binary files a/Android/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/Android/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/Android/.gradle/buildOutputCleanup/outputFiles.bin b/Android/.gradle/buildOutputCleanup/outputFiles.bin index 7500ecb9..b6baca21 100644 Binary files a/Android/.gradle/buildOutputCleanup/outputFiles.bin and b/Android/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/Android/.gradle/file-system.probe b/Android/.gradle/file-system.probe index b5c9cdcb..27e586fc 100644 Binary files a/Android/.gradle/file-system.probe and b/Android/.gradle/file-system.probe differ diff --git a/Android/simpleDemo/ai_jlyh_app.keystore b/Android/simpleDemo/ai_jlyh_app.keystore new file mode 100644 index 00000000..ff21037b Binary files /dev/null and b/Android/simpleDemo/ai_jlyh_app.keystore differ diff --git a/Android/simpleDemo/build.gradle b/Android/simpleDemo/build.gradle index 6fe916e8..8a79f54e 100644 --- a/Android/simpleDemo/build.gradle +++ b/Android/simpleDemo/build.gradle @@ -20,7 +20,7 @@ android { config { keyAlias 'ai_jlyh_app' keyPassword 'Kup9dayLY#*' - storeFile file('ai_jlyh_app.jks') + storeFile file('ai_jlyh_app.keystore') storePassword 'Kup9dayLY#*' v1SigningEnabled true v2SigningEnabled true diff --git a/Android/simpleDemo/test.jks b/Android/simpleDemo/test.jks deleted file mode 100644 index d3423a50..00000000 Binary files a/Android/simpleDemo/test.jks and /dev/null differ diff --git a/Android/simpleDemo/ai_jlyh_app.jks b/certificate/android/ai_jlyh_app.jks similarity index 100% rename from Android/simpleDemo/ai_jlyh_app.jks rename to certificate/android/ai_jlyh_app.jks diff --git a/certificate/android/ai_jlyh_app.keystore b/certificate/android/ai_jlyh_app.keystore new file mode 100644 index 00000000..ff21037b Binary files /dev/null and b/certificate/android/ai_jlyh_app.keystore differ diff --git a/certificate/android/ai_jlyh_app.keystore.old b/certificate/android/ai_jlyh_app.keystore.old new file mode 100644 index 00000000..1e8849e4 Binary files /dev/null and b/certificate/android/ai_jlyh_app.keystore.old differ diff --git a/certificate/android/ai_jlyh_app.p12 b/certificate/android/ai_jlyh_app.p12 new file mode 100644 index 00000000..1f788ed2 Binary files /dev/null and b/certificate/android/ai_jlyh_app.p12 differ diff --git a/certificate/android/密码.txt b/certificate/android/密码.txt new file mode 100644 index 00000000..00bb04ec --- /dev/null +++ b/certificate/android/密码.txt @@ -0,0 +1,2 @@ +包名:cn.com.jlbank.ai +证书密码:Kup9dayLY#* \ No newline at end of file diff --git a/certificate/android/转换命令.txt b/certificate/android/转换命令.txt new file mode 100644 index 00000000..f513de36 --- /dev/null +++ b/certificate/android/转换命令.txt @@ -0,0 +1,9 @@ +# 先生成p12文件 +keytool -importkeystore -srckeystore ai_jlyh_app.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore ai_jlyh_app.p12 + +# 用p12生成keystore +keytool -v -importkeystore -srckeystore ai_jlyh_app.p12 -srcstoretype PKCS12 -destkeystore ai_jlyh_app.keystore -deststoretype JKS +# 迁移到行业标准格式 PKCS12 +keytool -importkeystore -srckeystore ai_jlyh_app.keystore -destkeystore ai_jlyh_app.keystore -deststoretype pkcs12 + +keytool -v -list -keystore ai_jlyh_app.keystore \ No newline at end of file diff --git a/src/api/common.js b/src/api/common.js index 61154a68..7b3a4a92 100644 --- a/src/api/common.js +++ b/src/api/common.js @@ -157,6 +157,38 @@ export function downloadVoiceFile(url) { }); }); } + + +export function getAudioByText(data) { + const token = getToken(); + const header = { + "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", + }; + if (token) + header['summary'] = token + let baseUrl = get_base_url(); + + return new Promise((resolve, reject) => { + uni.request({ + url: `${baseUrl}/trastudy/traStdyInfo/readContent`, + header, + method:"POST", + data, + responseType: "arraybuffer", + success(result) { + if(result.statusCode === 200){ + resolve(result.data) + }else{ + reject(new Error(result)) + } + }, + fail(error) { + reject(new Error(error)); + } + }); + }); +} + // 对象存储预览 /traoss/tras3/show/{文件ID} export function previewFile(id, responseType = 'arraybuffer') { const token = getToken(); diff --git a/src/api/socket.js b/src/api/socket.js index 454df64a..40957666 100644 --- a/src/api/socket.js +++ b/src/api/socket.js @@ -155,6 +155,9 @@ export default class WebSocketUtil { } else { console.error('WebSocket连接未打开,无法发送消息'); this.triggerEvent('error', new Error('WebSocket连接未打开')); + setTimeout(()=>{ + this.send(message) + },500) } return this; } diff --git a/src/components/markdown-preview/markdown-preview.vue b/src/components/markdown-preview/markdown-preview.vue index dca192d6..6dd32d5c 100644 --- a/src/components/markdown-preview/markdown-preview.vue +++ b/src/components/markdown-preview/markdown-preview.vue @@ -5,10 +5,7 @@ diff --git a/src/pages/course/components/chartFour.vue b/src/pages/course/components/chartFour.vue index 2c930ba6..17d70295 100644 --- a/src/pages/course/components/chartFour.vue +++ b/src/pages/course/components/chartFour.vue @@ -14,7 +14,7 @@ {{props.score}}分 - + {{ item.gradeDimensName }} diff --git a/src/pages/course/components/chartThree.vue b/src/pages/course/components/chartThree.vue index d5889b59..44e0160a 100644 --- a/src/pages/course/components/chartThree.vue +++ b/src/pages/course/components/chartThree.vue @@ -17,7 +17,7 @@ {{props.score}}分 - + {{ item.gradeDimensName }} diff --git a/src/pages/course/components/talkingItem.vue b/src/pages/course/components/talkingItem.vue index b2d61564..edc1b881 100644 --- a/src/pages/course/components/talkingItem.vue +++ b/src/pages/course/components/talkingItem.vue @@ -185,7 +185,7 @@ import { watch, unref, ref, toRefs, computed, nextTick,onMounted } from 'vue' import ImagePreview from '@/components/image-preview/image-preview.vue' import VideoPreview from '@/components/image-preview/video-preview.vue' -import { downloadVoiceFile, uploadVoiceFile, } from "@/api/common.js" +import { downloadVoiceFile, uploadVoiceFile, getAudioByText } from "@/api/common.js" import { studyParagraphOverApi, getAskAboutRawApi } from "@/api/study.js" import ChartFour from "./chartFour.vue" import ChartThree from "./chartThree.vue" @@ -373,6 +373,8 @@ const audioCacheObj = computed(() => storageStore.audioObj) teachNo: unref(teacherInfo)?.teacherNo, // 必填 content: _content } + + let _url = '/trastudy/traStdyInfo/readContent?' + Object.keys(_params).map(t=>{ return encodeURIComponent(t) + '=' + encodeURIComponent(_params[t]) }).join('&') @@ -384,6 +386,19 @@ 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) @@ -401,6 +416,19 @@ const audioCacheObj = computed(() => storageStore.audioObj) }) } } + const saveFile = (buffer,filePath, cb = ()=>{}) => { + let fileManager = uni.getFileSystemManager() + fileManager.writeFile({ + filePath: filePath, + data: buffer, + encoding: 'binary', + success: cb, + file: ()=>{ + voiceLoading.value = false + console.log('文件保存失败!') + } + }) + } const initVoice = (readType = 'qns', item, isplay=false) => { if(unref(dataInfo).talkingVoice){ itemVoice.value = unref(dataInfo).talkingVoice diff --git a/src/pages/course/study.vue b/src/pages/course/study.vue index 7ae7e1d7..dfe9dd51 100644 --- a/src/pages/course/study.vue +++ b/src/pages/course/study.vue @@ -176,13 +176,8 @@ const flagVal = ref('1') const isUploadingVoice = ref(false) // 初始化数据 const getData = async (flag) => { - // if(flag === flagVal.value){ - // flagVal.value = '2' - // }else{ - // return - // } try{ - await initsocketTask() + initsocketTask() const { body } = await getCourseStudyInfoApi({crsId: crsId.value}) teacherList.value = body.teacheList.map(t=>({ ...t, @@ -192,8 +187,8 @@ const getData = async (flag) => { if(body.stdyProgressFlag === 'N'){ step.value = 1 }else{ + choiceTeacher.value = body.choiceTeacher if(startPgrphId.value){ - choiceTeacher.value = body.choiceTeacher sendMessage({ "commond" : 'STDY', "body" : { @@ -201,7 +196,6 @@ const getData = async (flag) => { teacherNo: choiceTeacher.value } }) - step.value = 2 return } common.show('提示', '系统检测到您已存在学习记录,要继续学习吗?',true, '重新学习','继续学习').then((res) => { @@ -209,7 +203,6 @@ const getData = async (flag) => { // 继续学习 , 获取学习历史接口 // 滚动到最下面 scrollToBottomNow() - choiceTeacher.value = body.choiceTeacher sendMessage({ "commond" : 'STDY', "body" : { @@ -374,7 +367,6 @@ const getGraphInfoUnStudy = (flag = 0) => { if(!_body.chatBody) { return } - console.log('prgh', _body) if(Number(_body.bodyTyp) === 7){ common.show('恭喜你已学完全部知识点', '有什么心得跟我们分享吗?',true, '取消','去评论').then((res) => { if(res) { @@ -587,8 +579,20 @@ const stdyId = ref('') const stdyBatch = ref('') const logId = ref('') // ws 初始化逻辑 -const initsocketTask = async () => { - await socketStore.creatSocket() +const initsocketTask = () => { + socketStore.creatSocket() + unref(SocketObj).on('open', (res)=>{ + if(startPgrphId.value){ + sendMessage({ + "commond" : 'STDY', + "body" : { + crsId: crsId.value, + teacherNo: choiceTeacher.value + } + }) + step.value = 2 + } + }) unref(SocketObj).on('message', (res)=>{ const { rtnCode, body, commond } = JSON.parse(res.data) if(rtnCode === '0000'){ @@ -597,6 +601,7 @@ const initsocketTask = async () => { stdyBatch.value = body.stdyBatch || '' logId.value = body.logId || '' getGraphInfoUnStudy(1) + step.value = 2 } }else{ // if(['0005', 'QQ0005'].includes(res.rtnCode)) { @@ -622,13 +627,14 @@ onLoad((params) => { crsNum.value = params.crsNum||''; imageId.value = params.imgId || '' startPgrphId.value = params.pgrphId||''; - getData('1'); + console.log('onLoad') }); const showTalkingModel = ref(false) // 录音 -// onMounted(()=>{ -// getData('1'); -// }) +onMounted(()=>{ + getData('1'); + console.log('onMounted') +}) onHide(()=>{ if(watchFlag.value === 1) return changePlayItemId('') @@ -638,8 +644,9 @@ onHide(()=>{ }).finally(() => {}) }) onShow(()=>{ + console.log('onShow') if(watchFlag.value === 1) return - socketStore.createSocket() + getData('1'); }) const watchFlag = ref(1) onUnload(()=>{ diff --git a/src/pages/index/components/question.vue b/src/pages/index/components/question.vue index d8cb585e..f6e9a8df 100644 --- a/src/pages/index/components/question.vue +++ b/src/pages/index/components/question.vue @@ -15,9 +15,17 @@ + @@ -29,17 +37,16 @@ - - - - - + + +