/* admin-screens2.jsx — management tables */ function Toolbar({ filters, onNew, newLabel }) { return (
{filters && filters.map((f, i) => )}
{onNew && }
); } /* ============ Seitenverwaltung ============ */ function AdminPages({ go }) { return (
go('builder')} newLabel="Neue Seite" />
{ADMIN_PAGES.map(p => ( ))}
SeiteRouteStatusSpracheVersionSektionenWidgets
{p.title}{p.id} · {p.by} {p.route} {p.lang.map(l => {l})} v{p.ver} {p.sections} {p.widgets}
); } /* ============ Wiki-Verwaltung ============ */ function AdminWiki() { const rows = WIKI_CATS.flatMap(c => c.arts.map(a => ({ cat: c.name.de, t: a.t.de, en: !!a.t.en, min: a.min }))); return (
{}} newLabel="Neuer Artikel" />
{rows.map((r, i) => ( ))}
ArtikelKategorieENLesedauerStatus
{r.t} {r.cat} {r.en ? DE · EN : fehlt} {r.min} min
); } /* ============ Kursverwaltung ============ */ function AdminKurse() { const rows = COURSE_CATEGORIES.flatMap(c => c.courses.map(co => ({ cat: c.label, tint: c.tint, ...co }))); return (
{}} newLabel="Neuer Kurs" />
{rows.map((r, i) => ( ))}
KursBereichLevelEinheitenDauer
{r.t} {r.cat} {r.lvl} {r.units} {r.dur}
); } /* ============ Shop-Links ============ */ function AdminShopLinks() { return (
{}} newLabel="Neuer Link" />
{SHOP.map((s, i) => ( ))}
ProduktPreisZiel-URLTracking-KeyStatus
{s.name} {s.price} shop.ext/{s.id} trk_{s.id}_01
); } /* ============ Medienbibliothek ============ */ function AdminMedia() { const media = [ { n: 'hero-rekrut.jpg', s: '1,8 MB', d: '1920×1080' }, { n: 'packliste-cover.jpg', s: '820 KB', d: '1600×900' }, { n: 'fitness-lauf.jpg', s: '1,1 MB', d: '1600×1067' }, { n: 'alpha-paket.png', s: '440 KB', d: '1200×800' }, { n: 'kalender-icon.svg', s: '12 KB', d: 'vektor' }, { n: 'dienstgrade.pdf', s: '2,4 MB', d: 'pdf · 6 S.' }, { n: 'mental-fokus.jpg', s: '960 KB', d: '1500×1000' }, { n: 'shop-banner.jpg', s: '1,3 MB', d: '1920×640' }, ]; return (
{media.map((m, i) => (
{m.d === 'vektor' || m.n.endsWith('.pdf') ? : }
{m.n} {m.d} · {m.s}
))}
); } /* ============ Übersetzungen ============ */ function AdminTranslations() { const rows = [ { key: 'home.hero.title', de: 'Bereit für deinen Dienststart.', en: 'Ready for your service start.', ok: true }, { key: 'home.hero.cta1', de: 'Vorbereitung starten', en: 'Start preparation', ok: true }, { key: 'wiki.title', de: 'Wiki & Orientierung', en: 'Wiki & orientation', ok: true }, { key: 'wiki.packliste.lead', de: 'Was mit muss, was bleibt zuhause.', en: '', ok: false }, { key: 'shop.alpha.desc', de: 'Komplettpaket: alle Checklisten …', en: '', ok: false }, { key: 'footer.disclaimer', de: 'Inoffizielles, privates Angebot …', en: 'Unofficial, private offer …', ok: true }, ]; return (
{rows.map((r, i) => ( ))}
SchlüsselDeutschEnglischStatus
{r.key} {r.de} {r.en || '— fehlt —'} {r.ok ? vollständig : offen}
); } /* ============ Nutzerrollen ============ */ function AdminRoles() { const lvl = ['—', 'teilw.', 'voll']; return (

Team

{TEAM.length} Nutzer
{TEAM.map((u, i) => ( ))}
NameRolleE-MailZuletzt aktiv
{u.name} {u.role} {u.mail}@rekruten-schmiede.de {u.last}

Rechte-Matrix

{ROLES.map(r => )} {PERM_MODULES.map(m => ( {PERM_MATRIX[m].map((p, i) => ( ))} ))}
Modul{r}
{m}{lvl[p]}
); } Object.assign(window, { AdminPages, AdminWiki, AdminKurse, AdminShopLinks, AdminMedia, AdminTranslations, AdminRoles });