diff --git a/frontend/src/components/BausteinPanel.vue b/frontend/src/components/BausteinPanel.vue index 7660ed7..26dada3 100644 --- a/frontend/src/components/BausteinPanel.vue +++ b/frontend/src/components/BausteinPanel.vue @@ -98,8 +98,16 @@ let prefetchPromise = null // laufender Hintergrund-Abruf (verhindert Dopp // Session-Cache: Prüfungs-Verlauf pro Baustein über Remounts hinweg halten (nur im Fokus, // dort läuft die Prüfung). Wiederherstellen beim Mount, bei jeder Änderung sichern. +const pruefKey = `${props.topic}::${props.baustein}` +function cacheSave() { + if (props.mode !== 'full') return + setPruef(pruefKey, { + messages: pruefMessages.value, phase: pruefPhase.value, + aktuelleFrage: aktuelleFrage.value, letztesFeedback: letztesFeedback.value, + scoreVorFrage: scoreVorFrage.value, streakVorFrage: streakVorFrage.value, + }) +} if (props.mode === 'full') { - const pruefKey = `${props.topic}::${props.baustein}` const c = getPruef(pruefKey) if (c) { pruefMessages.value = c.messages @@ -109,13 +117,10 @@ if (props.mode === 'full') { scoreVorFrage.value = c.scoreVorFrage streakVorFrage.value = c.streakVorFrage } + // watch sichert live; cacheSave() in pruefSenden fängt spät (post-unmount) eintreffende Antworten. watch( [pruefMessages, pruefPhase, aktuelleFrage, letztesFeedback, scoreVorFrage, streakVorFrage], - () => setPruef(pruefKey, { - messages: pruefMessages.value, phase: pruefPhase.value, - aktuelleFrage: aktuelleFrage.value, letztesFeedback: letztesFeedback.value, - scoreVorFrage: scoreVorFrage.value, streakVorFrage: streakVorFrage.value, - }), + cacheSave, { deep: true }, ) } @@ -158,10 +163,11 @@ async function pruefSenden(payload, onOk) { if (run !== pruefRun) return onOk(res) applyPruefung(res) + cacheSave() // auch wenn die Komponente schon unmountet ist (Watcher tot) pruefScroll() nextTick(() => pruefInputEl.value?.focus()) } catch { - if (run === pruefRun) pruefMessages.value.push({ role: 'assistant', kind: 'fehler', content: 'Hat nicht geklappt — bitte erneut.' }) + if (run === pruefRun) { pruefMessages.value.push({ role: 'assistant', kind: 'fehler', content: 'Hat nicht geklappt — bitte erneut.' }); cacheSave() } } finally { if (run === pruefRun) pruefLoading.value = false }