JLBA202505130001_关于吉林银行新建AI智能培训系统的需求_合并冲突

This commit is contained in:
田岩
2026-01-14 16:25:37 +08:00
8 changed files with 74 additions and 31 deletions
+2
View File
@@ -15,8 +15,10 @@ VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7003'
# VITE_APP_BASE_API_Url = 'http://192.168.108.129'
# dev
#VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001'
# sit
#VITE_APP_BASE_API_Url = 'http://25.18.122.91:9786'
+1
View File
@@ -12,4 +12,5 @@ VITE_APP_BASE_H5_API_Url = 'http://25.18.122.91:9786'
# VITE_APP_BASE_H5_API_Url_TRAAPP = 'http://25.64.32.154:9601'
# VITE_APP_BASE_H5_API_Url_TRAAPP = 'http://25.64.32.158:9601'
# VITE_APP_BASE_H5_API_Url_TRASTUDY = 'http://25.64.32.154:9602'
# VITE_APP_BASE_H5_API_Url_TRAASK = 'http://25.64.32.157:9605'
+10 -9
View File
@@ -1,7 +1,8 @@
<template>
<view class="item" :class="{'no-touch':qnsTyp === 'ES' && !isDisabled && ['examination', 'practice', 'mistake_in', 'pk_in'].includes(props.mode)}">
<view class="top">
<view class="type">{{ subject_type_text }}</view>
<!-- v-if="!['study'].includes(props.mode)" -->
<view class="type" v-if="!['study_answer'].includes(props.mode)">{{ subject_type_text }}</view>
<view class="score" v-if="['settlement', 'examination', 'pk_in'].includes(props.mode)">
{{ item.tgtGrade }}
</view>
@@ -40,12 +41,12 @@
</template>
</view>
</view>
<view class="question_text">
<view class="question_text" v-if="!['study_answer'].includes(props.mode)">
{{ subject_data.qnsContent }}
</view>
<view :style="{ height: animationHeight }" :class="{ collapse_wrapper: props.mode === 'mistake' }" ref="wrapperRef">
<view class="collapse-content" ref="contentRef">
<view class="option_div">
<view class="option_div" v-if="!['study_answer'].includes(props.mode)">
<template v-if="qnsTyp === 'ES'">
@@ -72,7 +73,7 @@
class="option_div_button"
v-if="
qnsTyp === 'MU' &&
['practice', 'study', 'pk_in', 'mistake_in'].includes(props.mode) &&
['practice', 'study', 'study_answer', 'pk_in', 'mistake_in'].includes(props.mode) &&
!props.isPreview &&
clearResult
"
@@ -93,7 +94,7 @@
class="analysis_div"
v-if="
!clearResult &&
['study', 'mistake', 'settlement', 'practice', 'mistake_in', 'practice_record', 'pk_in'].includes(props.mode)
['study', 'study_answer', 'mistake', 'settlement', 'practice', 'mistake_in', 'practice_record', 'pk_in'].includes(props.mode)
"
>
<view class="analysis_title" v-if="qnsTyp !== 'ES'">
@@ -103,7 +104,7 @@
<text :class="right_or_wrong_class ? 'success' : 'error'">{{ myResultLabel.join('') }}</text>
</view>
</view>
<view class="reference_answer" v-if="qnsTyp === 'ES'">
<view class="reference_answer" v-if="qnsTyp === 'ES' && !['study', 'study_answer'].includes(props.mode)">
<view class="reference_answer_title">你的答案:</view>
{{ subject_data.anserResult ?? '' }}
</view>
@@ -167,7 +168,7 @@
// 学习: study
// 考试结算页 settlement
// 练习记录页 practice_record, 'practice_record'
return ['examination', 'practice', 'mistake', 'mistake_in', 'study', 'settlement', 'practice_record', 'pk_in'].includes(
return ['examination', 'practice', 'mistake', 'mistake_in', 'study', 'study_answer', 'settlement', 'practice_record', 'pk_in'].includes(
value
);
}
@@ -314,7 +315,7 @@
if (item_answer.value.includes(analysisVo.itemId)) {
item_answer.value = item_answer.value.filter((id) => id !== analysisVo.itemId);
modelValue.value = item_answer.value;
if (!['study'].includes(props.mode)) {
if (!['study','study_answer'].includes(props.mode)) {
muCheckbox('choose');
}
} else if (props.item.qnsTyp === 'SN') {
@@ -328,7 +329,7 @@
// 多选直接插入
item_answer.value.push(analysisVo.itemId);
modelValue.value = item_answer.value;
if (!['study'].includes(props.mode)) {
if (!['study','study_answer'].includes(props.mode)) {
muCheckbox('choose');
}
} else if (props.item.qnsTyp === 'JD') {
+32 -9
View File
@@ -33,11 +33,17 @@
<!-- 加载状态 -->
<CommonLoading color="#06f" v-show="dataInfo.isLoading" />
<!-- 参考答案 -->
<view class="talking-text" v-if="type === 5 && !dataInfo.isLoading" style="overflow: hidden">
<view class="talking-text" v-if="
false
//type === 5
&& !dataInfo.isLoading" style="overflow: hidden">
参考答案:{{ dataInfo.itemAnswer }}
</view>
<!-- 维度信息预览 -->
<view v-if="type === 5 && !dataInfo.isLoading" style="padding-top: 16rpx">
<view v-if="
false
//type === 5
&& !dataInfo.isLoading" style="padding-top: 16rpx">
<ChartFour v-if="dataInfo.evalDimens.length === 4" :dataList="dataInfo.evalDimens"
:score="dataInfo.asrGrade" />
<ChartThree v-if="dataInfo.evalDimens.length === 3" :dataList="dataInfo.evalDimens"
@@ -46,16 +52,17 @@
:score="dataInfo.asrGrade" />
</view>
<!-- 题干/段落内容 -->
<text class="talking-text" v-if="[3, 5, 6, 9].indexOf(type) >= 0 && !dataInfo.isLoading">
<text class="talking-text" v-if="[3,
// 5,
6, 9].indexOf(type) >= 0 && !dataInfo.isLoading">
{{ type === 5 ? '试题解析:' : '' }}{{ showContent }}
</text>
<view class="type-tag" v-if="[4].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'">问答题</view>
<!-- <view class="type-tag" v-if="[4].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'">问答题</view>
<text class="talking-text" v-if="[4].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'">
<!-- 请您思考并作答:<br> -->
{{ showContent }}
</text>
</text> -->
<!-- 试题问题 -->
<Subject v-if="[4, 8].indexOf(type) >= 0 && dataInfo.qnsTyp !== 'ES'" :isPreview="!isLast" :item="subjectInfo"
<Subject v-if="[4, 5, 8].indexOf(type) >= 0 && !dataInfo.isLoading" :isPreview="!isLast" :item="subjectInfo"
:mode="mode" :clearResult="type === 4" @subject_click="subject_click" />
<!-- 试题问题反馈 -->
<!-- <RadioSubjectRequest v-if="[8].indexOf(type) >= 0 && dataInfo.qnsTyp !== 'ES'" :item="dataInfo" :mode="mode" @subject_click="subject_click" /> -->
@@ -324,10 +331,26 @@
return {
...dataInfo.value,
...(dataInfo.value?.traQnsInfoVo || {}),
my_answer: dataInfo.value?.traQnsInfoVo?.anserResult || ''
my_answer: dataInfo.value?.traQnsInfoVo?.anserResult || '',
...(props.type === 5?{
"qnsTyp": "ES",
my_answer: dataInfo.value,
itemVos: [{
...dataInfo.value,
"qnsTyp": "ES",
"qnsId": dataInfo.value.qnsId,
"itemAnswer": dataInfo.value.itemAnswer,
"relKeyword": dataInfo.value.relKeyword,
anserResult:dataInfo.value?.traQnsInfoVo?.anserResult || '',
"evalSettingVos": dataInfo.value?.essayEvalVo,
}]
}:{})
};
});
const mode = ref('study'); // 考试 examination 练习practice 学习study
const mode = computed(()=>{
return props.type == 5 ? 'study_answer' : 'study'
}); // 考试 examination 练习practice 学习study 学习结果study_answer
const imgAddrs = computed(()=>{
return (dataInfo.value.imageAddrs || [])
+8 -7
View File
@@ -10,7 +10,7 @@
placeholder="请输入文字"></uv-input>
</view>
<!-- @click="showTalkingModel = true" -->
<view class="talk-btn-box" v-show="!onlyVoice">
<view class="talk-btn-box" v-show="!onlyVoice && props.answerMethod !== '03'">
<image class="talk-btn-icon" v-show="!keyboardIsShow" src="/src/static/images/course/jianpan.png" mode=""
@click="changeBtn"></image>
<image class="talk-btn-icon" v-show="keyboardIsShow && !answerValue" src="/src/static/images/course/record.png"
@@ -36,7 +36,7 @@
</view>
<view class="btns-box" v-if="transVoiceIng">
<view class="cancel-btn transVoiceIng" @click="closeModel()"></view>
<view class="trans-btn transVoiceIng" @click="sendVoice()"></view>
<view class="trans-btn transVoiceIng" @click="sendVoice()" v-show="props.answerMethod !== '02'"></view>
<view class="send-btn" @click="sendText()">发送</view>
</view>
<view class="btns-box" v-else>
@@ -51,10 +51,10 @@
<image class="btn-box" v-else src="/src/static/images/course/translate-active.png" mode="heightFix"></image>
</view>
</view>
<view :class="['talk-dialog', isOut ? 'is-out' : '']" v-show="!isOutRight">
<view :class="['talk-dialog', isOut ? 'is-out' : '']" v-show="!isOutRight && !transVoiceIng">
<image src="@/static/images/course/voice-white.gif" mode="" class="gif-box"></image>
</view>
<view :class="['talk-dialog talk-textarea' ]" v-show="isOutRight" @click.stop>
<view :class="['talk-dialog talk-textarea' ]" v-show="isOutRight || transVoiceIng" @click.stop>
<view class="trans-loading-box" v-show="transLoading">
<CommonLoading color="#fff" class="loading-box" />
</view>
@@ -231,7 +231,8 @@
}
audioPath.value = res.tempFilePath;
console.log(isOut.value, isOutLeft.value, isOutRight.value)
if (!isOut.value) {
if (!isOut.value && (props.answerMethod !== '02')) {
console.log(11111111111)
if (startFlag.value !== 2) {
closeModel(() => {
nextTick(() => {
@@ -249,7 +250,7 @@
} else if (isOutLeft.value) {
console.log('取消')
closeModel();
} else if (isOutRight.value) {
} else if (isOutRight.value || (props.answerMethod === '02')) {
console.log('转文本')
transLoading.value = true
commonUploadVoiceFile(audioPath.value, '/traapp/voice/voiceChart', {}).then(res => {
@@ -551,7 +552,7 @@
isMoving.value = false;
if (!showTalkingModel.value) return;
//#ifdef APP-PLUS
transVoiceIng.value = isOutRight.value
transVoiceIng.value = isOutRight.value || (props.answerMethod === '02')
stopRecord();
// #endif
+16 -1
View File
@@ -80,6 +80,20 @@
<!-- </view> -->
</scroll-view>
<TouchBtn
v-if="answerMethod !== '03'"
class="talk-btns"
@uploadVoice="uploadRecordNow"
@submitAnswer="submitAnswerNow"
@startRecord="changePlayItemId('')"
:isLoading="isUploadingVoice"
:onlyVoice="answerOnlyVoice"
:canAnswer="testAnswer"
:adjustPosition="true"
:canAnswerText="canAnswerText"
:answerMethod="answerMethod"
:isDisabled="(lastTalkingInfo.type || 0) !== 4 || ['SN', 'MU', 'JD'].includes(lastTalkingInfo.qnsTyp)" />
<TouchBtnOnlyVoice
v-else
class="talk-btns"
@uploadVoice="uploadRecordNow"
@submitAnswer="submitAnswerNow"
@@ -152,6 +166,7 @@ import TalkingItem from '@/pages/course/components/talkingItem.vue'
import ImagePreview from '@/components/image-preview/image-preview.vue'
import PreviewDetail from '@/components/image-preview/preview-detail.vue'
import TouchBtn from '@/pages/course/components/touchBtn.vue'
import TouchBtnOnlyVoice from '@/pages/course/components/touchBtnOnlyVoice.vue'
import badge from '@/components/points-and-badge/badge';
import points from '@/components/points-and-badge/points';
import usePointsAndBadge from '@/components/points-and-badge/usePointsAndBadge';
@@ -406,7 +421,7 @@ const backRouter = () => {
}
const answerOnlyVoice = computed(() => {
return lastTalkingInfo.value.answerWay === 'V'
return lastTalkingInfo.value.answerWay === 'V' || (answerMethod.value === '03')
})
const canAnswerText = computed(() => {
@@ -31,10 +31,10 @@
{{ showContent }}
</text>
<!-- 试题问题 -->
<Subject v-if="[4, 8].indexOf(type) >= 0 && dataInfo.qnsTyp !== 'ES'" :isPreview="!isLast" :item="subjectInfo"
<Subject v-if="[4, 8].indexOf(type) >= 0" :isPreview="!isLast" :item="subjectInfo"
:mode="mode" :clearResult="type === 4" @subject_click="subject_click" />
<esQuestion v-if="[4, 8].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'" @changePlay="changePlay"
:activeVoiceId="activeVoiceId" :dataInfo="esSubjectInfo" />
<!-- <esQuestion v-if="[4, 8].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'" @changePlay="changePlay"
:activeVoiceId="activeVoiceId" :dataInfo="esSubjectInfo" /> -->
<!-- 试题问题反馈 -->
<!-- <RadioSubjectRequest v-if="[8].indexOf(type) >= 0 && dataInfo.qnsTyp !== 'ES'" :item="dataInfo" :mode="mode" @subject_click="subject_click" /> -->
<!-- 段落图片视频预览 -->
@@ -55,14 +55,14 @@
></VideoPreview>
</view>
<!-- 维度信息预览 -->
<view v-if="[4, 8].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'" style="padding-top: 16rpx;">
<!-- <view v-if="[4, 8].indexOf(type) >= 0 && dataInfo.qnsTyp === 'ES'" style="padding-top: 16rpx;">
<ChartFour v-if="esSubjectInfo?.evalSettingVos?.length === 4" :dataList="esSubjectInfo.evalSettingVos"
:score="intrctGrade" />
<ChartThree v-if="esSubjectInfo?.evalSettingVos?.length === 3" :dataList="esSubjectInfo.evalSettingVos"
:score="intrctGrade" />
<ChartFive v-if="esSubjectInfo?.evalSettingVos?.length === 5" :dataList="esSubjectInfo.evalSettingVos"
:score="intrctGrade" />
</view>
</view> -->
<!-- 参考答案 -->
<view class="talking-text" v-if="type === 5 && !dataInfo.isLoading" style="overflow: hidden;">
参考答案{{ dataInfo.itemAnswer }}