Frontend Sprint 3+4: Dog-Switcher, Health-Seite, Multi-Dog Tagebuch
- app.js: vollständiger Dog-Switcher (Avatar im Header/Sidebar, Quickpicker bei 3+ Hunden, setActiveDog, localStorage-Persistenz), iOS Ghost-Click Fix, Loading-Guard, Logout State Reset - index.html: Dog-Switcher HTML, Favicon-Links, Sidebar "+ Neu erstellen", Navigation Tab Karte → Gesundheit - health.js (neu): vollständiges Health-Frontend mit Tabs (Impfung, Entwurmung, Tierarzt, Medikament, Gewicht-Kurve, Allergie, Dokument), Ampel-System, KI-Zusammenfassung - dog-profile.js: "+ Weiteren Hund anlegen" Button + _openCreateModal(), Event-Delegation statt direkter Listener (kein Doppelaufruf) - diary.js: Dog-Picker im Formular, Avatar-Reihe auf Karten, Dog-Chips im Detail-Modal, dog_ids im API-Payload - poison.js: Erledigt-Dialog mit Grundauswahl (beseitigt/fehlerhaft/anderes) - api.js: health-Endpoints (list, create, update, delete, upload, ki) - ui.js: confirm() Fix (resolve vor close) - layout.css: Dog-Switcher Styles, scrollbare Sidebar-Nav, User-Item fix - components.css: Health-Styles, Diary Dog-Picker, Ampel-Punkte, Gewicht-SVG - icons/: Favicon-Set (ico, 16px, 32px, 180px, 192px, 512px)
This commit is contained in:
parent
6f48ec581d
commit
d8b9561fff
16 changed files with 1597 additions and 91 deletions
|
|
@ -392,27 +392,56 @@ window.Page_poison = (() => {
|
|||
}
|
||||
});
|
||||
|
||||
document.getElementById('detail-resolve')?.addEventListener('click', async () => {
|
||||
const ok = await UI.modal.confirm({
|
||||
title : 'Meldung als erledigt markieren?',
|
||||
message: 'Das Problem wurde beseitigt oder die Meldung war fehlerhaft.',
|
||||
confirmText: 'Erledigt markieren',
|
||||
});
|
||||
if (!ok) return;
|
||||
try {
|
||||
await API.poison.resolve(r.id);
|
||||
_reports = _reports.filter(x => x.id !== r.id);
|
||||
_markers.splice(_reports.length, 1); // cleanup (wird bei _renderMarkers neu gesetzt)
|
||||
_renderMarkers();
|
||||
_renderList();
|
||||
_updateBadge(_reports.length);
|
||||
UI.toast.success('Meldung als erledigt markiert.');
|
||||
} catch (err) {
|
||||
UI.toast.error(err.message || 'Fehler.');
|
||||
}
|
||||
document.getElementById('detail-resolve')?.addEventListener('click', () => {
|
||||
_showResolveDialog(r);
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// ERLEDIGT-DIALOG — mit Grundauswahl für KI-Analyse
|
||||
// ----------------------------------------------------------
|
||||
function _showResolveDialog(r) {
|
||||
UI.modal.open({
|
||||
title: '✔ Meldung als erledigt markieren',
|
||||
body: `
|
||||
<p style="color:var(--c-text-secondary);margin-bottom:var(--space-4)">
|
||||
Die Meldung wird inaktiv gesetzt. Die Daten bleiben für spätere
|
||||
Musteranalysen gespeichert.
|
||||
</p>
|
||||
<div class="form-group">
|
||||
<label class="form-label">Grund</label>
|
||||
<select class="form-control" id="resolve-grund">
|
||||
<option value="beseitigt">✅ Gefahr wurde beseitigt</option>
|
||||
<option value="fehlerhaft">❌ Meldung war fehlerhaft</option>
|
||||
<option value="anderes">💬 Anderer Grund</option>
|
||||
</select>
|
||||
</div>
|
||||
`,
|
||||
footer: `
|
||||
<button class="btn btn-secondary" id="resolve-cancel">Abbrechen</button>
|
||||
<button class="btn btn-nature" id="resolve-confirm">Erledigt markieren</button>
|
||||
`,
|
||||
});
|
||||
|
||||
document.getElementById('resolve-cancel')
|
||||
?.addEventListener('click', UI.modal.close);
|
||||
|
||||
document.getElementById('resolve-confirm')
|
||||
?.addEventListener('click', async () => {
|
||||
const grund = document.getElementById('resolve-grund')?.value || 'beseitigt';
|
||||
const btn = document.getElementById('resolve-confirm');
|
||||
await UI.asyncButton(btn, async () => {
|
||||
await API.poison.resolve(r.id, { grund });
|
||||
_reports = _reports.filter(x => x.id !== r.id);
|
||||
_renderMarkers();
|
||||
_renderList();
|
||||
_updateBadge(_reports.length);
|
||||
UI.modal.close();
|
||||
UI.toast.success('Meldung als erledigt markiert.');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------
|
||||
// MELDE-FORMULAR
|
||||
// ----------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue