<template>
|
<div class="answer-container w-full h-full flex">
|
<el-scrollbar class="flex-1 mr-4">
|
<ExamInfo class="mb-5" :questionIndex="currentIndex" :activeQuestion="activeQuestion"></ExamInfo>
|
|
<div class="answer-content">
|
<div class="answer-item flex" v-for="item, index in activeQuestion.items" :class="answerState(item)">
|
<div class="answer-icon flex flex-col justify-center items-center flex-shrink-0">{{ item.prefix }}</div>
|
<div class="answer-text text-gray-700">{{ item.content }}</div>
|
</div>
|
</div>
|
|
</el-scrollbar>
|
|
<el-scrollbar class="flex-1 ml-4">
|
<div class="analysis-container">
|
<div class="analysis-item" :class="analysisState">
|
<div class="item-label">您的答案</div>
|
<div class="item-info">{{ activeQuestion.correct ? activeQuestion.correct: '未作答' }}</div>
|
</div>
|
|
<div class="analysis-item analysis-right">
|
<div class="item-label">正确答案</div>
|
<div class="item-info">{{ activeQuestion.right }}</div>
|
</div>
|
|
<div class="analysis-item text-gray-700">
|
<div class="item-label">解析</div>
|
<div class="item-info">Lorem ipsum dolor sit amet consectetur adipisicing elit. Exercitationem beatae possimus
|
nostrum facere inventore aliquid vero fuga minus, mollitia temporibus harum commodi, dolores odio nulla
|
aliquam maiores eligendi quis? Ad.</div>
|
</div>
|
</div>
|
</el-scrollbar>
|
</div>
|
</template>
|
|
<script setup>
|
import { ref, computed } from 'vue';
|
import { storeToRefs } from 'pinia';
|
import ExamInfo from '@/components/ExamInfo/index.vue';
|
import { useExamStore } from '@/store/index.js';
|
|
const examStore = useExamStore();
|
|
const { currentIndex } = storeToRefs(examStore);
|
|
const activeQuestion = ref(examStore.getActiveQuestion);
|
|
const formatAnswer = (answer) => {
|
return answer.split(',');
|
};
|
|
const currentAnswer = formatAnswer(activeQuestion.value.correct);
|
const rightAnswer = formatAnswer(activeQuestion.value.right);
|
|
const answerState = (item) => {
|
const flag1 = currentAnswer.includes(item.prefix);
|
const flag2 = rightAnswer.includes(item.prefix);
|
|
if (flag1 && flag2) {
|
return {
|
right: true
|
};
|
} else {
|
if (currentAnswer.length < rightAnswer.length) {
|
if (!flag1 && flag2) {
|
return {
|
wrong: true
|
};
|
}
|
} else if (currentAnswer.length > rightAnswer.length) {
|
if (flag1 && !flag2) {
|
return {
|
wrong: true
|
};
|
} else if (!flag1 && flag2) {
|
return {
|
right: true
|
};
|
}
|
} else {
|
return {
|
right: flag2,
|
wrong: flag1
|
};
|
}
|
}
|
};
|
|
const analysisState = computed(() => {
|
return {
|
'analysis-right': activeQuestion.value.isRight,
|
'analysis-wrong': !activeQuestion.value.isRight
|
};
|
})
|
|
|
</script>
|
|
<style lang="scss" scoped>
|
.answer-container {
|
--right-color: #67c23a;
|
--wrong-color: #f56c6c;
|
}
|
|
.answer-item {
|
max-width: 500px;
|
border-radius: 10px;
|
border: 1px solid #DCDFE6;
|
overflow: hidden;
|
margin-bottom: 20px;
|
|
&:last-of-type {
|
margin-bottom: 0;
|
}
|
|
.answer-icon {
|
width: 50px;
|
background-color: #F0F2F5;
|
border-right: 1px solid #ffffff;
|
}
|
|
.answer-text {
|
min-height: 50px;
|
padding: 15px 0;
|
margin: 0 10px;
|
}
|
}
|
|
|
.right {
|
border-color: var(--right-color) !important;
|
background-color: rgba($color: #67c23a, $alpha: 0.2) !important;
|
|
.answer-icon {
|
color: #ffffff !important;
|
border-color: var(--right-color) !important;
|
background-color: var(--right-color) !important;
|
}
|
|
.answer-text {
|
color: var(--right-color) !important;
|
}
|
}
|
|
.wrong {
|
border-color: var(--wrong-color) !important;
|
background-color: rgba($color: #f56c6c, $alpha: 0.2) !important;
|
|
.answer-icon {
|
color: #ffffff !important;
|
border-color: var(--wrong-color) !important;
|
background-color: var(--wrong-color) !important;
|
}
|
|
.answer-text {
|
color: var(--wrong-color) !important;
|
}
|
}
|
|
.analysis-item {
|
margin-bottom: 10px;
|
|
.item-label {
|
font-weight: bold;
|
}
|
}
|
|
.analysis-right {
|
color: var(--right-color);
|
}
|
|
.analysis-wrong {
|
color: var(--wrong-color);
|
}
|
</style>
|