diff --git a/frontend/src/views/social/VocabLessonView.vue b/frontend/src/views/social/VocabLessonView.vue index 6a4f44e..1f29c19 100644 --- a/frontend/src/views/social/VocabLessonView.vue +++ b/frontend/src/views/social/VocabLessonView.vue @@ -2031,7 +2031,15 @@ export default { if (this.sequentialPanelActive) { const list = this.scrambledChapterExamExercises; const idx = list.findIndex((e) => e.id === exerciseId); - if (idx >= 0 && idx < list.length - 1 && this.exerciseResults[exerciseId]) { + const result = this.exerciseResults[exerciseId]; + // Nur bei richtiger Antwort automatisch weiter: Bei Fehler bleibt die Karte sichtbar, + // damit „Falsch“ und die Musterlösung angezeigt werden; Weiter geht es per Nav-Button. + if ( + idx >= 0 + && idx < list.length - 1 + && result + && result.correct + ) { this.exerciseSequentialIndex = idx + 1; } } @@ -2630,15 +2638,38 @@ export default { const all = this._shuffleArray([...correctTexts, ...picked]); return { options: all, useTextAnswer: true }; }, + /** + * Wenn keine Distraktor-Ersetzung läuft (z. B. answerLanguage fehlt), nur die gegebenen + * Optionen mischen. Richtige Antwort bleibt über Optionstext prüfbar (useTextAnswer). + */ + shuffleMcOptionsDisplayOrder(exercise) { + const q = this.getQuestionData(exercise); + if (!q || q.type !== 'multiple_choice' || q.randomizeDistractors === false) { + return null; + } + const options = q.options || []; + if (options.length < 2) { + return null; + } + return { + options: this._shuffleArray(options), + useTextAnswer: true + }; + }, buildMcRandomizedOptions() { this.mcRandomizedOptions = {}; const exercises = this.effectiveExercises; if (!exercises) return; exercises.forEach((ex) => { if (this.getExerciseType(ex) !== 'multiple_choice') return; - const built = this.randomizeMcOptionsIfPossible(ex); - if (built) { - this.mcRandomizedOptions[ex.id] = built; + const fromPool = this.randomizeMcOptionsIfPossible(ex); + if (fromPool) { + this.mcRandomizedOptions[ex.id] = fromPool; + return; + } + const orderOnly = this.shuffleMcOptionsDisplayOrder(ex); + if (orderOnly) { + this.mcRandomizedOptions[ex.id] = orderOnly; } }); },