/* 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" />
| Seite | Route | Status | Sprache | Version | Sektionen | Widgets | |
{ADMIN_PAGES.map(p => (
| {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" />
| Artikel | Kategorie | EN | Lesedauer | Status | |
{rows.map((r, i) => (
| {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" />
| Kurs | Bereich | Level | Einheiten | Dauer | |
{rows.map((r, i) => (
| {r.t} |
{r.cat} |
{r.lvl} |
{r.units} |
{r.dur} |
|
))}
);
}
/* ============ Shop-Links ============ */
function AdminShopLinks() {
return (
{}} newLabel="Neuer Link" />
| Produkt | Preis | Ziel-URL | Tracking-Key | Status | |
{SHOP.map((s, i) => (
| {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 (
| Schlüssel | Deutsch | Englisch | Status |
{rows.map((r, i) => (
| {r.key} |
{r.de} |
{r.en || '— fehlt —'} |
{r.ok ? vollständig : offen} |
))}
);
}
/* ============ Nutzerrollen ============ */
function AdminRoles() {
const lvl = ['—', 'teilw.', 'voll'];
return (
| Name | Rolle | E-Mail | Zuletzt aktiv |
{TEAM.map((u, i) => (
| {u.name} |
{u.role} |
{u.mail}@rekruten-schmiede.de |
{u.last} |
))}
| Modul | {ROLES.map(r => {r} | )}
{PERM_MODULES.map(m => (
| {m} |
{PERM_MATRIX[m].map((p, i) => (
{lvl[p]} |
))}
))}
);
}
Object.assign(window, { AdminPages, AdminWiki, AdminKurse, AdminShopLinks, AdminMedia, AdminTranslations, AdminRoles });