修复重新登陆练习错题本bug

This commit is contained in:
田岩
2025-09-17 18:12:18 +08:00
parent f01c1d3376
commit 2fd023428e
12 changed files with 138 additions and 48 deletions
+37 -17
View File
@@ -78,7 +78,10 @@
<view
class="analysis_div"
v-if="!clearResult && ['study', 'mistake', 'settlement', 'practice', 'practice_record'].includes(props.mode)"
v-if="
!clearResult &&
['study', 'mistake', 'settlement', 'practice', 'practice_record'].includes(props.mode)
"
>
<view class="analysis_title" v-if="qnsTyp !== 'ES'">
<view class="success_answer">正确答案:{{ correctResultLabel.join('') }}</view>
@@ -106,7 +109,7 @@
</view>
</template>
<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 esAnalysis from './es-analysis.vue';
import questionVue from './question.vue';
@@ -171,15 +174,31 @@
get: () => props.modelValue,
set: (val) => emit('update:modelValue', val)
});
// result.anserResult
let answerText = props.item?.my_answer || props.item.anserResult || [];
// item_answer 是答题结果,可以是对象 数组 字符串类型
const item_answer = ref(typeof answerText === 'string' ? answerText.split(',') : answerText);
watch(
() => props.modelValue,
(newVal) => {
console.log('modelValue', newVal);
item_answer.value = typeof newVal === 'string' ? newVal.split(',') : newVal;
}
);
watch(
item_answer,
(newVal) => {
console.log('item_answer', newVal);
emit('update:modelValue', newVal);
},
{ deep: true }
);
const feedback_click = () => {
emit('subject_click', 'feedback', props.item);
};
const instance = getCurrentInstance(); // 获取当前组件实例
// 切换展开/折叠状态(兼容H5和App)
@@ -223,7 +242,7 @@
const anserResultArray = props.item.anserResult.split(',');
return subject_data.value.itemVos.filter((res) => anserResultArray.includes(res.itemId)).map((res) => res.itemNo);
});
// 判断选项是否完全正确
const right_or_wrong_class = computed(
() =>
@@ -271,11 +290,11 @@
// 点击答题
const click_option = (analysisVo) => {
if (props.isPreview || !props.clearResult) return;
// 无论什么类型如果表里已经有了,再次点击就是弹出
if (item_answer.value.includes(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'].includes(props.mode)) {
muCheckbox('choose');
}
@@ -283,33 +302,33 @@
// 单选
// 单选插入,并且移除其他
item_answer.value[0] = analysisVo.itemId;
modelValue.value = item_answer.value;
// modelValue.value = item_answer.value;
muCheckbox('choose');
} else if (props.item.qnsTyp === 'MU') {
// 多选题
// 多选直接插入
item_answer.value.push(analysisVo.itemId);
modelValue.value = item_answer.value;
// modelValue.value = item_answer.value;
if (!['study'].includes(props.mode)) {
muCheckbox('choose');
}
} else if (props.item.qnsTyp === 'JD') {
// 判断题
// 判断插入,并且移除其他
item_answer.value = [analysisVo.itemId];
modelValue.value = item_answer.value;
// modelValue.value = item_answer.value;
muCheckbox('choose');
}
};
const muBtnClick = () => {
if(item_answer.value.length === 0){
common.msg('请至少选择一个选项!')
return
if (item_answer.value.length === 0) {
common.msg('请至少选择一个选项!');
return;
}
muCheckbox('answer')
}
muCheckbox('answer');
};
const muCheckbox = (type = 'answer') => {
emit('subject_click', type, {
qnsTyp: props.item.qnsTyp,
@@ -318,6 +337,7 @@
answerItems: subject_data.value.itemVos.filter((t) => item_answer.value.includes(t.itemId))
});
};
// 初始化动画
onMounted(() => {});
</script>