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, // 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. // dort läuft die Prüfung). Wiederherstellen beim Mount, bei jeder Änderung sichern.
if (props.mode === 'full') {
const pruefKey = `${props.topic}::${props.baustein}` 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) const c = getPruef(pruefKey)
if (c) { if (c) {
pruefMessages.value = c.messages pruefMessages.value = c.messages
@@ -109,13 +117,10 @@ if (props.mode === 'full') {
scoreVorFrage.value = c.scoreVorFrage scoreVorFrage.value = c.scoreVorFrage
streakVorFrage.value = c.streakVorFrage streakVorFrage.value = c.streakVorFrage
} }
// watch sichert live; cacheSave() in pruefSenden fängt spät (post-unmount) eintreffende Antworten.
watch( watch(
[pruefMessages, pruefPhase, aktuelleFrage, letztesFeedback, scoreVorFrage, streakVorFrage], [pruefMessages, pruefPhase, aktuelleFrage, letztesFeedback, scoreVorFrage, streakVorFrage],
() => setPruef(pruefKey, { cacheSave,
messages: pruefMessages.value, phase: pruefPhase.value,
aktuelleFrage: aktuelleFrage.value, letztesFeedback: letztesFeedback.value,
scoreVorFrage: scoreVorFrage.value, streakVorFrage: streakVorFrage.value,
}),
{ deep: true }, { deep: true },
) )
} }
@@ -158,10 +163,11 @@ async function pruefSenden(payload, onOk) {
if (run !== pruefRun) return if (run !== pruefRun) return
onOk(res) onOk(res)
applyPruefung(res) applyPruefung(res)
cacheSave() // auch wenn die Komponente schon unmountet ist (Watcher tot)
pruefScroll() pruefScroll()
nextTick(() => pruefInputEl.value?.focus()) nextTick(() => pruefInputEl.value?.focus())
} catch { } 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 { } finally {
if (run === pruefRun) pruefLoading.value = false if (run === pruefRun) pruefLoading.value = false
} }