@@ -639,6 +659,7 @@ const userDescriptiveAnswer = ref('')
const descriptiveGradingResult = ref(null)
const descriptiveHistory = ref([])
const gradingError = ref('')
+const usedDescriptiveNormalGrading = ref(false)
// OCR state
const ocrFileInput = ref(null)
@@ -807,6 +828,26 @@ function submitTextAnswerWithAi() {
submitDescriptiveGrading()
}
+function submitDescriptiveNormalGrading() {
+ if (showFeedback.value || !userDescriptiveAnswer.value.trim()) return
+
+ const userClean = userDescriptiveAnswer.value.trim().replace(/\s+/g, '').toLowerCase()
+ const correctAnswers = (currentQuestion.value.correctAnswerStr || '')
+ .split(';;')
+ .map(ans => ans.trim().replace(/\s+/g, '').toLowerCase())
+
+ isCorrect.value = correctAnswers.includes(userClean)
+
+ const key = `${currentQuestion.value.source}_${currentQuestion.value.id}`
+ if (isCorrect.value && !scoredQuestions.value[key]) {
+ scoredQuestions.value[key] = true
+ score.value++
+ }
+
+ usedDescriptiveNormalGrading.value = true
+ showFeedback.value = true
+}
+
async function submitDescriptiveGrading() {
const q = currentQuestion.value
if (!q || !userDescriptiveAnswer.value.trim() || gradingDescriptive.value) return
@@ -1006,6 +1047,11 @@ const isDescriptiveQuestion = computed(() => {
return ans === '주관식' || ans.length > 8 || ans.includes(' ') || ans.includes('및') || ans.includes('와')
})
+const hasStoredCorrectAnswer = computed(() => {
+ const ans = currentQuestion.value?.correctAnswerStr?.trim()
+ return !!ans && ans !== '주관식'
+})
+
const isPdf = computed(() => {
const url = currentQuestion.value.imageUrl
if (!url) return false
@@ -1403,6 +1449,7 @@ interface QuestionState {
isCorrect: boolean
userDescriptiveAnswer: string
descriptiveGradingResult: DescriptiveGradingRecord | null
+ usedDescriptiveNormalGrading: boolean
}
const questionStates = ref>({})
@@ -1414,7 +1461,8 @@ function saveCurrentState() {
showFeedback: showFeedback.value,
isCorrect: isCorrect.value,
userDescriptiveAnswer: userDescriptiveAnswer.value,
- descriptiveGradingResult: descriptiveGradingResult.value
+ descriptiveGradingResult: descriptiveGradingResult.value,
+ usedDescriptiveNormalGrading: usedDescriptiveNormalGrading.value
}
}
@@ -1430,6 +1478,7 @@ function loadState(index: number) {
isCorrect.value = state.isCorrect
userDescriptiveAnswer.value = state.userDescriptiveAnswer || ''
descriptiveGradingResult.value = state.descriptiveGradingResult || null
+ usedDescriptiveNormalGrading.value = state.usedDescriptiveNormalGrading || false
} else {
selectedChoiceIndex.value = -1
userTextAnswer.value = ''
@@ -1440,6 +1489,7 @@ function loadState(index: number) {
descriptiveGradingResult.value = null
uploadedOcrImageBase64.value = ''
ocrResultText.value = null
+ usedDescriptiveNormalGrading.value = false
}
loadGradingHistory()
}
@@ -1477,6 +1527,7 @@ function resetQuiz() {
userTextAnswer.value = ''
userOXAnswer.value = ''
questionStates.value = {}
+ scoredQuestions.value = {}
}
const togglingBookmark = ref(false)