Atlas: Phase A Integrations-Konzept + Cockpit + End-Screen

- Integrations-Konzept dokumentiert (App/docs/integration-konzept.md)
- Module-IDs vereinheitlicht: sim-XX -> semantische IDs (klima/heli/fluss/logistik/...)
- class_modules um current_level + quiz_enabled Spalten erweitert
- modules.php liefert dynamisch aus module_info, inkl. forcedLevel, quizEnabled,
  play_url, dueDate; neuer Filter ?module_id=X fuer einzeln
- schueler.html Cockpit: komplett API-first, teacher_started-Sektion als
  Auftrags-Block, neue IDs, Sprachregel 4a (Starten statt Spielen)
- teacher.html: Hardcoded ALL_MODS entfernt, laedt dynamisch
- Design-System: .ggs-endscreen-Komponente fuer einheitliche Modul-Abschluesse
- index.html Landing-Links gefixt: App/modul-X -> modul-X, V1-HTMLs auf
  Front-Controller-Routen (fluss, heli-game, stadt)
- 6 Inbox-Auftraege an Instanzen (Klima/Heli/Fluss/Logistik/Lehrplan/Glossar)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-23 11:42:19 +02:00
parent b94658f57c
commit b356c79134
14 changed files with 1266 additions and 101 deletions
+11 -8
View File
@@ -419,16 +419,19 @@ async function loadModuleMatrix() {
}
// === KLASSEN-SIMULATION ===
var ALL_MODS = [
{id:'sim-05',icon:'🌡️',name:'Klimawächter 2D'},{id:'sim-05-3d',icon:'🌊',name:'Klimawächter 3D'},
{id:'sim-07',icon:'🌋',name:'Erdbeben'},{id:'sim-09',icon:'⚡',name:'Energiemix'},
{id:'sim-10',icon:'👕',name:'Lieferketten'},{id:'sim-11',icon:'🌴',name:'Regenwald'},
{id:'sim-12',icon:'🏞️',name:'Flussmanagement'},{id:'sim-13',icon:'🏗️',name:'Stadt & Raumplanung'},{id:'sim-14',icon:'🚁',name:'Helikopter-Navigation'}
];
function showStartSim() {
// ALL_MODS wird zur Laufzeit aus /api/modules?class_id=... geholt — kein Hardcode.
var ALL_MODS = [];
async function loadAllMods() {
if (ALL_MODS.length || !currentClassId) return ALL_MODS;
var r = await api('modules?class_id=' + currentClassId);
if (Array.isArray(r)) ALL_MODS = r.filter(function(m){return m.status!=='archiv';});
return ALL_MODS;
}
async function showStartSim() {
await loadAllMods();
var sel = document.getElementById('ss-module');
sel.innerHTML = '';
ALL_MODS.forEach(function(m) { var o=document.createElement('option'); o.value=m.id; o.textContent=m.icon+' '+m.name; sel.appendChild(o); });
ALL_MODS.forEach(function(m) { var o=document.createElement('option'); o.value=m.id; o.textContent=(m.icon||'')+' '+m.name; sel.appendChild(o); });
document.getElementById('ss-ends').value = '';
showModal('modal-startsim');
}