JLBA202505130001_关于吉林银行新建AI智能培训系统的需求_fix: bug
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="item" :class="{'no-touch':qnsTyp === 'ES' && !isDisabled && ['examination', 'practice', 'mistake_in', 'pk_in'].includes(props.mode)}">
|
<view class="item"
|
||||||
|
:class="{'no-touch':qnsTyp === 'ES' && !isDisabled && ['examination', 'practice', 'mistake_in', 'pk_in'].includes(props.mode)}">
|
||||||
<view class="top">
|
<view class="top">
|
||||||
<!-- v-if="!['study'].includes(props.mode)" -->
|
<!-- v-if="!['study'].includes(props.mode)" -->
|
||||||
<view class="type" v-if="!['study_answer','study_result', 'study_record'].includes(props.mode)">{{ subject_type_text }}</view>
|
<view class="type" v-if="!['study_answer','study_result', 'study_record'].includes(props.mode)">
|
||||||
|
{{ subject_type_text }}</view>
|
||||||
<view class="score" v-if="['settlement', 'examination', 'pk_in'].includes(props.mode)">
|
<view class="score" v-if="['settlement', 'examination', 'pk_in'].includes(props.mode)">
|
||||||
{{ item.tgtGrade }}分
|
{{ item.tgtGrade }}分
|
||||||
</view>
|
</view>
|
||||||
<view class="score answerMethod" v-if="['study','examination', 'practice'].includes(props.mode) && qnsTyp === 'ES'">
|
<view class="score answerMethod"
|
||||||
|
v-if="['study','examination', 'practice'].includes(props.mode) && qnsTyp === 'ES'">
|
||||||
{{ answerMethod }}
|
{{ answerMethod }}
|
||||||
</view>
|
</view>
|
||||||
<view class="fl1"></view>
|
<view class="fl1"></view>
|
||||||
@@ -14,18 +17,9 @@
|
|||||||
<!-- 反馈中心 -->
|
<!-- 反馈中心 -->
|
||||||
<slot name="title-right"></slot>
|
<slot name="title-right"></slot>
|
||||||
<view class="mark_and_feedback_div" v-if="['examination', 'practice', 'mistake_in'].includes(props.mode)">
|
<view class="mark_and_feedback_div" v-if="['examination', 'practice', 'mistake_in'].includes(props.mode)">
|
||||||
<image
|
<image v-if="props.mode === 'examination'" :src="markIcon(props.item.mark ? '#e8b531' : '#ABABAB')"
|
||||||
v-if="props.mode === 'examination'"
|
class="img" @click="mark_click()"></image>
|
||||||
:src="markIcon(props.item.mark ? '#e8b531' : '#ABABAB')"
|
<image :src="feedbackIcon()" class="img" @click="feedback_click()" v-if="props.mode !== 'mistake_in'"></image>
|
||||||
class="img"
|
|
||||||
@click="mark_click()"
|
|
||||||
></image>
|
|
||||||
<image
|
|
||||||
:src="feedbackIcon()"
|
|
||||||
class="img"
|
|
||||||
@click="feedback_click()"
|
|
||||||
v-if="props.mode !== 'mistake_in'"
|
|
||||||
></image>
|
|
||||||
</view>
|
</view>
|
||||||
<template v-if="['mistake'].includes(props.mode)">
|
<template v-if="['mistake'].includes(props.mode)">
|
||||||
<view class="expand_button_div" @click="toggleExpand()">
|
<view class="expand_button_div" @click="toggleExpand()">
|
||||||
@@ -34,12 +28,8 @@
|
|||||||
<view class="toggle-text" :class="{ active: !animationState }">展开</view>
|
<view class="toggle-text" :class="{ active: !animationState }">展开</view>
|
||||||
<view class="toggle-text" :class="{ active: animationState }">收起</view>
|
<view class="toggle-text" :class="{ active: animationState }">收起</view>
|
||||||
</view>
|
</view>
|
||||||
<uv-icon
|
<uv-icon class="click_text_icon" name="arrow-right" :class="{ click_text_icon_action: animationState }"
|
||||||
class="click_text_icon"
|
color="#0066FF"></uv-icon>
|
||||||
name="arrow-right"
|
|
||||||
:class="{ click_text_icon_action: animationState }"
|
|
||||||
color="#0066FF"
|
|
||||||
></uv-icon>
|
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
@@ -51,52 +41,30 @@
|
|||||||
<view class="collapse-content" ref="contentRef">
|
<view class="collapse-content" ref="contentRef">
|
||||||
<view class="option_div" v-if="!['study_answer', 'study_result','study_record'].includes(props.mode)">
|
<view class="option_div" v-if="!['study_answer', 'study_result','study_record'].includes(props.mode)">
|
||||||
<template v-if="qnsTyp === 'ES'">
|
<template v-if="qnsTyp === 'ES'">
|
||||||
<questionVue
|
<questionVue :status="subject_data.es_status" :dataInfo="props.item?.my_answer" :isPreview="props.isPreview"
|
||||||
:status="subject_data.es_status"
|
:activeVoiceId="subject_data.qnsId" @buutton_click="questionButtonClick"
|
||||||
:dataInfo="props.item?.my_answer"
|
:button_complete_show="['practice', 'pk_in', 'mistake_in'].includes(props.mode)"></questionVue>
|
||||||
:isPreview="props.isPreview"
|
|
||||||
:activeVoiceId="subject_data.qnsId"
|
|
||||||
@buutton_click="questionButtonClick"
|
|
||||||
:button_complete_show="['practice', 'pk_in', 'mistake_in'].includes(props.mode)"
|
|
||||||
></questionVue>
|
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<radioSubjectItem
|
<radioSubjectItem v-for="(analysisVo, index) in subject_data.itemVos" @click_option="click_option"
|
||||||
v-for="(analysisVo, index) in subject_data.itemVos"
|
:key="index" :analysisVo="analysisVo" :my_answer="item_answer"></radioSubjectItem>
|
||||||
@click_option="click_option"
|
|
||||||
:key="index"
|
|
||||||
:analysisVo="analysisVo"
|
|
||||||
:my_answer="item_answer"
|
|
||||||
></radioSubjectItem>
|
|
||||||
</template>
|
</template>
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view class="option_div_button" v-if="
|
||||||
class="option_div_button"
|
|
||||||
v-if="
|
|
||||||
qnsTyp === 'MU' &&
|
qnsTyp === 'MU' &&
|
||||||
['practice', 'study', 'study_answer', 'study_record', 'pk_in', 'mistake_in'].includes(props.mode) &&
|
['practice', 'study', 'study_answer', 'study_record', 'pk_in', 'mistake_in'].includes(props.mode) &&
|
||||||
!props.isPreview &&
|
!props.isPreview &&
|
||||||
clearResult
|
clearResult
|
||||||
"
|
">
|
||||||
>
|
<uv-button type="primary" class="send_evaluate" :custom-style="customStyle" :throttleTime="300"
|
||||||
<uv-button
|
@click="muBtnClick" :hairline="false">
|
||||||
type="primary"
|
|
||||||
class="send_evaluate"
|
|
||||||
:custom-style="customStyle"
|
|
||||||
:throttleTime="300"
|
|
||||||
@click="muBtnClick"
|
|
||||||
:hairline="false"
|
|
||||||
>
|
|
||||||
确定
|
确定
|
||||||
</uv-button>
|
</uv-button>
|
||||||
</view>
|
</view>
|
||||||
<view
|
<view :class="['analysis_div', props.mode]" v-if="
|
||||||
class="analysis_div"
|
|
||||||
v-if="
|
|
||||||
!clearResult &&
|
!clearResult &&
|
||||||
['study', 'study_answer', 'study_result','study_record', 'mistake', 'settlement', 'practice', 'mistake_in', 'practice_record', 'pk_in'].includes(props.mode)
|
['study', 'study_answer', 'study_result','study_record', 'mistake', 'settlement', 'practice', 'mistake_in', 'practice_record', 'pk_in'].includes(props.mode)
|
||||||
"
|
">
|
||||||
>
|
|
||||||
<view class="analysis_title" v-if="qnsTyp !== 'ES'">
|
<view class="analysis_title" v-if="qnsTyp !== 'ES'">
|
||||||
<view class="success_answer">正确答案:{{ correctResultLabel.join('') }}</view>
|
<view class="success_answer">正确答案:{{ correctResultLabel.join('') }}</view>
|
||||||
<view class="your_answer">
|
<view class="your_answer">
|
||||||
@@ -104,23 +72,17 @@
|
|||||||
<text :class="right_or_wrong_class ? 'success' : 'error'">{{ myResultLabel.join('') }}</text>
|
<text :class="right_or_wrong_class ? 'success' : 'error'">{{ myResultLabel.join('') }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="reference_answer" v-if="qnsTyp === 'ES' && !['study', 'study_answer', 'study_result', 'study_record'].includes(props.mode)">
|
<view class="reference_answer"
|
||||||
|
v-if="qnsTyp === 'ES' && !['study', 'study_answer', 'study_result', 'study_record'].includes(props.mode)">
|
||||||
<view class="reference_answer_title">你的答案:</view>
|
<view class="reference_answer_title">你的答案:</view>
|
||||||
{{ subject_data.anserResult ?? '' }}
|
{{ subject_data.anserResult ?? '' }}
|
||||||
</view>
|
</view>
|
||||||
<esAnalysis
|
<esAnalysis v-if="qnsTyp === 'ES'" :value="subject_data.itemVos[0]" :judgeResult="judgeResultStatus"
|
||||||
v-if="qnsTyp === 'ES'"
|
:anserResult="subject_data.anserResult"></esAnalysis>
|
||||||
:value="subject_data.itemVos[0]"
|
|
||||||
:judgeResult="judgeResultStatus"
|
|
||||||
:anserResult="subject_data.anserResult"
|
|
||||||
></esAnalysis>
|
|
||||||
|
|
||||||
<!-- 问答题专属参考答案 -->
|
<!-- 问答题专属参考答案 -->
|
||||||
<referenceAnswer
|
<referenceAnswer v-if="qnsTyp === 'ES'" :value="subject_data.itemVos[0]"
|
||||||
v-if="qnsTyp === 'ES'"
|
:anserResult="subject_data.itemVos[0]?.itemAnswer"></referenceAnswer>
|
||||||
:value="subject_data.itemVos[0]"
|
|
||||||
:anserResult="subject_data.itemVos[0]?.itemAnswer"
|
|
||||||
></referenceAnswer>
|
|
||||||
<view class="analysis_note" v-if="props.mode !== 'pk_in'">
|
<view class="analysis_note" v-if="props.mode !== 'pk_in'">
|
||||||
试题解析:{{ subject_data?.analyContent }}
|
试题解析:{{ subject_data?.analyContent }}
|
||||||
</view>
|
</view>
|
||||||
@@ -130,15 +92,30 @@
|
|||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, reactive, onMounted, nextTick, computed, getCurrentInstance, watch } from 'vue';
|
import {
|
||||||
|
ref,
|
||||||
|
reactive,
|
||||||
|
onMounted,
|
||||||
|
nextTick,
|
||||||
|
computed,
|
||||||
|
getCurrentInstance,
|
||||||
|
watch
|
||||||
|
} from 'vue';
|
||||||
import radioSubjectItem from './radio-subject-item.vue';
|
import radioSubjectItem from './radio-subject-item.vue';
|
||||||
import esAnalysis from './es-analysis.vue';
|
import esAnalysis from './es-analysis.vue';
|
||||||
import referenceAnswer from './reference-answer.vue';
|
import referenceAnswer from './reference-answer.vue';
|
||||||
import questionVue from './question.vue';
|
import questionVue from './question.vue';
|
||||||
import { markIcon, feedbackIcon } from '@/common/imgSvg';
|
import {
|
||||||
import { SUBJECT_TYPE } from '@/enum.js';
|
markIcon,
|
||||||
|
feedbackIcon
|
||||||
|
} from '@/common/imgSvg';
|
||||||
|
import {
|
||||||
|
SUBJECT_TYPE
|
||||||
|
} from '@/enum.js';
|
||||||
import common from '@/common/common';
|
import common from '@/common/common';
|
||||||
import {ANSWER_METHOD_MAP} from '@/enum'
|
import {
|
||||||
|
ANSWER_METHOD_MAP
|
||||||
|
} from '@/enum'
|
||||||
// 多选的确定按钮的样式
|
// 多选的确定按钮的样式
|
||||||
const customStyle = {
|
const customStyle = {
|
||||||
borderRadius: '16rpx',
|
borderRadius: '16rpx',
|
||||||
@@ -169,7 +146,9 @@
|
|||||||
// 学习: study
|
// 学习: study
|
||||||
// 考试结算页 settlement
|
// 考试结算页 settlement
|
||||||
// 练习记录页 practice_record, 'practice_record'
|
// 练习记录页 practice_record, 'practice_record'
|
||||||
return ['examination', 'practice', 'mistake', 'mistake_in', 'study', 'study_answer', 'study_record', 'settlement', 'practice_record', 'pk_in'].includes(
|
return ['examination', 'practice', 'mistake', 'mistake_in', 'study', 'study_answer', 'study_record',
|
||||||
|
'settlement', 'practice_record', 'pk_in'
|
||||||
|
].includes(
|
||||||
value
|
value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -212,8 +191,9 @@
|
|||||||
(newVal) => {
|
(newVal) => {
|
||||||
// console.log('modelValue', newVal);
|
// console.log('modelValue', newVal);
|
||||||
item_answer.value = typeof newVal === 'string' ? newVal.split(',') : newVal;
|
item_answer.value = typeof newVal === 'string' ? newVal.split(',') : newVal;
|
||||||
},
|
}, {
|
||||||
{ deep: true }
|
deep: true
|
||||||
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
const feedback_click = () => {
|
const feedback_click = () => {
|
||||||
@@ -261,14 +241,15 @@
|
|||||||
const myResultLabel = computed(() => {
|
const myResultLabel = computed(() => {
|
||||||
if (!props.item.anserResult) return ['无'];
|
if (!props.item.anserResult) return ['无'];
|
||||||
const anserResultArray = props.item.anserResult.split(',');
|
const anserResultArray = props.item.anserResult.split(',');
|
||||||
return subject_data.value.itemVos.filter((res) => anserResultArray.includes(res.itemId)).map((res) => res.itemNo);
|
return subject_data.value.itemVos.filter((res) => anserResultArray.includes(res.itemId)).map((res) => res
|
||||||
|
.itemNo);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 判断选项是否完全正确
|
// 判断选项是否完全正确
|
||||||
const right_or_wrong_class = computed(
|
const right_or_wrong_class = computed(
|
||||||
() =>
|
() =>
|
||||||
correctResultLabel.value.length === myResultLabel.value.length &&
|
correctResultLabel.value.length === myResultLabel.value.length &&
|
||||||
myResultLabel.value.every((res) => correctResultLabel.value.includes(res))
|
myResultLabel.value.every((res) => correctResultLabel.value.includes(res))
|
||||||
);
|
);
|
||||||
|
|
||||||
const subject_data = computed({
|
const subject_data = computed({
|
||||||
@@ -316,7 +297,7 @@
|
|||||||
if (item_answer.value.includes(analysisVo.itemId)) {
|
if (item_answer.value.includes(analysisVo.itemId)) {
|
||||||
item_answer.value = item_answer.value.filter((id) => id !== analysisVo.itemId);
|
item_answer.value = item_answer.value.filter((id) => id !== analysisVo.itemId);
|
||||||
modelValue.value = item_answer.value;
|
modelValue.value = item_answer.value;
|
||||||
if (!['study','study_answer', 'study_record'].includes(props.mode)) {
|
if (!['study', 'study_answer', 'study_record'].includes(props.mode)) {
|
||||||
muCheckbox('choose');
|
muCheckbox('choose');
|
||||||
}
|
}
|
||||||
} else if (props.item.qnsTyp === 'SN') {
|
} else if (props.item.qnsTyp === 'SN') {
|
||||||
@@ -330,7 +311,7 @@
|
|||||||
// 多选直接插入
|
// 多选直接插入
|
||||||
item_answer.value.push(analysisVo.itemId);
|
item_answer.value.push(analysisVo.itemId);
|
||||||
modelValue.value = item_answer.value;
|
modelValue.value = item_answer.value;
|
||||||
if (!['study','study_answer', 'study_record'].includes(props.mode)) {
|
if (!['study', 'study_answer', 'study_record'].includes(props.mode)) {
|
||||||
muCheckbox('choose');
|
muCheckbox('choose');
|
||||||
}
|
}
|
||||||
} else if (props.item.qnsTyp === 'JD') {
|
} else if (props.item.qnsTyp === 'JD') {
|
||||||
@@ -369,6 +350,7 @@
|
|||||||
// display: inline-block;
|
// display: inline-block;
|
||||||
// cursor: pointer;
|
// cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-container {
|
.toggle-container {
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 42rpx;
|
height: 42rpx;
|
||||||
@@ -376,6 +358,7 @@
|
|||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
line-height: 42rpx;
|
line-height: 42rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.toggle-text {
|
.toggle-text {
|
||||||
/* 绝对定位使文本重叠 */
|
/* 绝对定位使文本重叠 */
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -393,17 +376,21 @@
|
|||||||
.toggle-text.active {
|
.toggle-text.active {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
transform: translateY(0);
|
transform: translateY(0);
|
||||||
z-index: 1; /* 确保激活文本在上方 */
|
z-index: 1;
|
||||||
|
/* 确保激活文本在上方 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.collapse_wrapper {
|
.collapse_wrapper {
|
||||||
overflow: hidden; /* 关键:隐藏超出部分 */
|
overflow: hidden;
|
||||||
|
/* 关键:隐藏超出部分 */
|
||||||
// height: 0; /* 初始高度为0 */
|
// height: 0; /* 初始高度为0 */
|
||||||
transition: height 0.3s ease-out;
|
transition: height 0.3s ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
.click_text_icon_action {
|
.click_text_icon_action {
|
||||||
transform: rotate(-90deg);
|
transform: rotate(-90deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.click_text_icon {
|
.click_text_icon {
|
||||||
transition: transform 0.3s ease-out;
|
transition: transform 0.3s ease-out;
|
||||||
}
|
}
|
||||||
@@ -421,6 +408,7 @@
|
|||||||
padding: 4rpx;
|
padding: 4rpx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.expand_button_div {
|
.expand_button_div {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -428,9 +416,11 @@
|
|||||||
|
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
}
|
}
|
||||||
|
|
||||||
.option_div {
|
.option_div {
|
||||||
padding-top: 20rpx;
|
padding-top: 20rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.option_div_button {
|
.option_div_button {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 84rpx;
|
height: 84rpx;
|
||||||
@@ -440,20 +430,27 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.analysis_div {
|
.analysis_div {
|
||||||
|
&.study_result {
|
||||||
|
.analysis_title {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.analysis_title {
|
.analysis_title {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin: 32rpx 0 0 0;
|
margin: 32rpx 0 0 0;
|
||||||
|
|
||||||
.success_answer {
|
.success_answer {}
|
||||||
}
|
|
||||||
|
|
||||||
.your_answer {
|
.your_answer {
|
||||||
.success {
|
.success {
|
||||||
color: #15b859;
|
color: #15b859;
|
||||||
}
|
}
|
||||||
|
|
||||||
.error {
|
.error {
|
||||||
color: #f5212d;
|
color: #f5212d;
|
||||||
}
|
}
|
||||||
@@ -470,8 +467,10 @@
|
|||||||
font-style: normal;
|
font-style: normal;
|
||||||
margin-top: 28rpx;
|
margin-top: 28rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.reference_answer {
|
.reference_answer {
|
||||||
white-space: pre-line;
|
white-space: pre-line;
|
||||||
|
|
||||||
.reference_answer_title {
|
.reference_answer_title {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
@@ -480,6 +479,7 @@
|
|||||||
line-height: 30rpx;
|
line-height: 30rpx;
|
||||||
margin: 30rpx 0;
|
margin: 30rpx 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
font-size: 30rpx;
|
font-size: 30rpx;
|
||||||
color: #666666;
|
color: #666666;
|
||||||
@@ -487,15 +487,20 @@
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.item {
|
.item {
|
||||||
// height: 170rpx;
|
// height: 170rpx;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding-bottom: 40rpx;
|
padding-bottom: 40rpx;
|
||||||
user-select: none !important; /* 禁用文本选择 */
|
user-select: none !important;
|
||||||
-webkit-user-select: none !important; /* iOS兼容 */
|
/* 禁用文本选择 */
|
||||||
-webkit-touch-callout: none !important; /* 禁用iOS长按菜单 */
|
-webkit-user-select: none !important;
|
||||||
|
/* iOS兼容 */
|
||||||
|
-webkit-touch-callout: none !important;
|
||||||
|
|
||||||
|
/* 禁用iOS长按菜单 */
|
||||||
.top {
|
.top {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -520,7 +525,8 @@
|
|||||||
color: #333333;
|
color: #333333;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
.answerMethod{
|
|
||||||
|
.answerMethod {
|
||||||
font-size: 22rpx;
|
font-size: 22rpx;
|
||||||
font-family: ArialMT;
|
font-family: ArialMT;
|
||||||
color: #999;
|
color: #999;
|
||||||
|
|||||||
Reference in New Issue
Block a user