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 @@
-
-
-
-
-
+
+
+