Veröffentlichen
@@ -109,10 +127,12 @@ const title = 'Admin';
// UI-Bereiche für eingeloggte Nutzer einblenden
document.getElementById('sec-events').style.display = '';
document.getElementById('sec-gallery').style.display = '';
+ document.getElementById('sec-banner').style.display = '';
document.getElementById('sec-publish').style.display = '';
// Direkt Events laden und auf Sektion fokussieren
await loadEvents();
await loadGallery();
+ await loadBanners();
document.getElementById('sec-events').scrollIntoView({ behavior: 'smooth' });
} catch (e) {
const el = document.getElementById('auth-status');
@@ -120,6 +140,7 @@ const title = 'Admin';
// Kein Auto-Redirect, damit keine Schleife entsteht. Login-Button verwenden.
document.getElementById('sec-events').style.display = 'none';
document.getElementById('sec-gallery').style.display = 'none';
+ document.getElementById('sec-banner').style.display = 'none';
document.getElementById('sec-publish').style.display = 'none';
}
}
@@ -366,6 +387,94 @@ const title = 'Admin';
} catch(e){ msg.textContent = 'Fehler: '+e.message }
});
+ // ========== Banner ==========
+ async function loadBanners() {
+ const listEl = document.getElementById('banner-list');
+ listEl.innerHTML = 'Lade...
';
+ try {
+ const data = await api('/api/banners');
+ listEl.innerHTML = '';
+ const bannersList = (data.banners || []).slice();
+ bannersList.sort((a,b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
+
+ bannersList.forEach((banner) => {
+ const card = document.createElement('div');
+ card.className = 'card';
+ const statusText = banner.isActive ? '✓ Aktiv' : '✗ Inaktiv';
+ card.innerHTML = `
+ ${banner.text.substring(0, 60)}${banner.text.length > 60 ? '...' : ''}
+ Von: ${banner.startDate}
+ Bis: ${banner.endDate}
+ ${statusText}
+
+
+
+
`;
+ listEl.appendChild(card);
+ });
+
+ listEl.querySelectorAll('.btn-toggle-banner').forEach(btn => {
+ btn.addEventListener('click', async () => {
+ const id = btn.getAttribute('data-id');
+ if (!id) return;
+ const banner = bannersList.find(b => b.id === id);
+ if (!banner) return;
+ try {
+ await api(`/api/banners/${id}`, {
+ method: 'PUT',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({
+ text: banner.text,
+ startDate: banner.startDate,
+ endDate: banner.endDate,
+ isActive: !banner.isActive
+ })
+ });
+ await loadBanners();
+ } catch(e){ alert('Fehler: '+e.message); }
+ })
+ });
+
+ listEl.querySelectorAll('.btn-del-banner').forEach(btn => {
+ btn.addEventListener('click', async () => {
+ const id = btn.getAttribute('data-id');
+ if (!id) return;
+ if (!confirm('Banner wirklich löschen?')) return;
+ try { await api(`/api/banners/${id}`, { method: 'DELETE' }); await loadBanners(); } catch(e){ alert('Fehler: '+e.message); }
+ })
+ })
+ } catch (e) {
+ listEl.innerHTML = 'Fehler beim Laden
';
+ console.error(e);
+ }
+ }
+
+ document.getElementById('btn-create-banner').addEventListener('click', async () => {
+ const text = (document.getElementById('banner-text')).value.trim();
+ const startDate = (document.getElementById('banner-start')).value.trim();
+ const endDate = (document.getElementById('banner-end')).value.trim();
+ const msg = document.getElementById('banner-create-msg');
+
+ if (!text || !startDate || !endDate) {
+ msg.textContent = 'Bitte alle Felder ausfüllen';
+ return;
+ }
+
+ msg.textContent = 'Erstelle Banner...';
+ try {
+ await api('/api/banners', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ text, startDate, endDate, isActive: true })
+ });
+ msg.textContent = 'Banner erstellt';
+ (document.getElementById('banner-text')).value = '';
+ (document.getElementById('banner-start')).value = '';
+ (document.getElementById('banner-end')).value = '';
+ await loadBanners();
+ } catch(e){ msg.textContent = 'Fehler: '+e.message }
+ });
+
refreshAuth();