update
This commit is contained in:
@@ -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.
|
||||||
|
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') {
|
if (props.mode === 'full') {
|
||||||
const pruefKey = `${props.topic}::${props.baustein}`
|
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user