4.8 KiB
Admin Dashboard Event-Handler Fixes
Problem
Das Admin Dashboard hatte mehrfache Event-Handler-Registrierungen, die dazu führten, dass bei einem Klick 3 Dinge gleichzeitig geöffnet wurden.
Ursache
Das Template templates/admin.html lud 4 verschiedene JavaScript-Dateien gleichzeitig:
admin.js- Haupt-Admin-Funktionalitätenadmin-dashboard.js- Dashboard-spezifische Funktionenadmin-live.js- Live-Updates und Echtzeit-Funktionalitätenadmin-system.js- System-Management-Funktionen
Alle diese Dateien registrierten Event-Listener für dieselben Button-IDs:
system-status-btnanalytics-btnmaintenance-btnadd-user-btnadd-printer-btn- usw.
Lösung
-
Neue konsolidierte JavaScript-Datei:
static/js/admin-unified.js- Kombiniert alle Admin-Funktionalitäten in einer einzigen Klasse
AdminDashboard - Verhindert mehrfache Event-Listener-Registrierung durch
eventListenersAttachedFlag - Verwendet Event-Delegation für dynamische Elemente
- Implementiert
preventDefault()undstopPropagation()zur Event-Bubble-Verhinderung
- Kombiniert alle Admin-Funktionalitäten in einer einzigen Klasse
-
Template-Update:
templates/admin.html- Entfernte die 4 separaten JavaScript-Includes
- Ersetzte durch einen einzigen Include:
admin-unified.js - Entfernte redundante Inline-JavaScript-Event-Handler
-
Sichere Event-Listener-Registrierung:
addEventListenerSafe(selector, event, handler) { const element = document.querySelector(selector); if (element && !element.dataset.listenerAttached) { element.addEventListener(event, handler); element.dataset.listenerAttached = 'true'; } } -
Event-Delegation für dynamische Elemente:
document.addEventListener('click', (e) => { if (e.target.closest('.edit-user-btn')) { e.preventDefault(); e.stopPropagation(); // Handler-Code } }); -
Vollständige Benutzer-Management-Implementierung:
- ✅ Benutzer erstellen: Modal mit Formular + API-Call zu
/api/admin/users(POST) - ✅ Benutzer bearbeiten: Modal vorausgefüllt + API-Call zu
/api/admin/users/{id}(PUT) - ✅ Benutzer löschen: Bestätigungsdialog + API-Call zu
/api/admin/users/{id}(DELETE) - ✅ Benutzer laden: API-Call zu
/api/admin/users/{id}(GET) für Bearbeitungsformular - ✅ Vollständige Validierung: E-Mail, Passwort, Duplikatprüfung
- ✅ Live-Feedback: Loading-Zustände, Erfolgs-/Fehlermeldungen
- ✅ Automatische UI-Updates: Seite wird nach Änderungen neu geladen
- ✅ Benutzer erstellen: Modal mit Formular + API-Call zu
-
Backend-API-Routen hinzugefügt:
- ✅
GET /api/admin/users/{id}- Einzelnen Benutzer laden - ✅
PUT /api/admin/users/{id}- Benutzer aktualisieren - ✅ Bestehende Routen:
POST /api/admin/users,DELETE /api/admin/users/{id}
- ✅
Verbesserungen
- ✅ Keine mehrfachen Event-Ausführungen mehr
- ✅ Saubere Event-Handler-Verwaltung
- ✅ Bessere Performance durch weniger JavaScript-Dateien
- ✅ Konsistente API-Aufrufe
- ✅ Zentralisierte Fehlerbehandlung
- ✅ Live-Updates ohne Konflikte
- ✅ Vollständige Benutzer-Verwaltung funktional
- ✅ Responsive Modals mit modernem Design
- ✅ Echte Datenbankoperationen mit Validierung
Testing
Nach den Änderungen sollte jeder Klick im Admin Dashboard nur eine Aktion auslösen und die Benutzer-Verwaltung vollständig funktionieren:
✅ Funktionale Tests bestanden:
- "Neuer Benutzer" Button → Öffnet Modal zum Erstellen
- "Bearbeiten" Button → Öffnet vorausgefülltes Modal
- "Löschen" Button → Bestätigungsdialog + Löschung
- Formular-Validierung → E-Mail-Format, Pflichtfelder
- API-Integration → Echte Backend-Calls mit Fehlerbehandlung
- UI-Feedback → Loading-Spinner, Erfolgs-/Fehlermeldungen
Betroffene Dateien
- ✅
static/js/admin-unified.js(NEU - AKTIV) - ✅
templates/admin.html(GEÄNDERT) - ✅
app.py(API-Routen hinzugefügt) - ❌
static/js/admin.js(ENTFERNT - 06.01.2025) - ❌
static/js/admin-dashboard.js(ENTFERNT - 06.01.2025) - ❌
static/js/admin-live.js(ENTFERNT - 06.01.2025) - ❌
static/js/admin-system.js(ENTFERNT - 06.01.2025) - ❌
static/js/admin-consolidated.js(ENTFERNT - 06.01.2025)
Cleanup-Status
🧹 Aufräumarbeiten abgeschlossen:
- Alle veralteten JavaScript-Dateien wurden entfernt
- Template wurde bereinigt
- Nur noch eine einzige Admin-JavaScript-Datei aktiv
- Keine Event-Handler-Konflikte mehr möglich
User-Management Status
🎯 Benutzer-Verwaltung vollständig implementiert:
- Hinzufügen, Bearbeiten, Löschen funktional
- Backend-API vollständig
- Frontend-Modals mit Validierung
- Live-Updates und Fehlerbehandlung
- Production-ready Implementation
Datum
06.01.2025 - Mercedes-Benz TBA Marienfelde - MYP System