This commit is contained in:
team3
2026-06-18 11:54:49 +02:00
parent 59d108a13a
commit af6fb7a9c2

View File

@@ -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.
if (props.mode === 'full') {
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 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
}