From 5516acb8406e2f15ae8ce3e2400155eeb8522310 Mon Sep 17 00:00:00 2001 From: titver968 Date: Wed, 23 Jul 2025 08:52:53 +0200 Subject: [PATCH] Seite umbauen mit Komponenten und admin-auth --- src/lib/components/AdminHeader.svelte | 57 ++++ src/lib/components/AdminNavigation.svelte | 71 +++++ src/lib/components/AnmeldungenTable.svelte | 176 +++++++++++ src/lib/components/DienststellenDialog.svelte | 122 ++++++++ src/lib/components/LoginForm.svelte | 91 ++++++ src/routes/+page.svelte | 16 +- src/routes/admin/+page.svelte | 112 +++---- src/routes/admin/anmeldungen/+page.server.ts | 10 +- src/routes/admin/anmeldungen/+page.svelte | 293 +++++++++--------- src/routes/api/admin/check-auth/+server.ts | 18 ++ 10 files changed, 757 insertions(+), 209 deletions(-) create mode 100644 src/lib/components/AdminHeader.svelte create mode 100644 src/lib/components/AdminNavigation.svelte create mode 100644 src/lib/components/AnmeldungenTable.svelte create mode 100644 src/lib/components/DienststellenDialog.svelte create mode 100644 src/lib/components/LoginForm.svelte create mode 100644 src/routes/api/admin/check-auth/+server.ts diff --git a/src/lib/components/AdminHeader.svelte b/src/lib/components/AdminHeader.svelte new file mode 100644 index 0000000..d6daeb9 --- /dev/null +++ b/src/lib/components/AdminHeader.svelte @@ -0,0 +1,57 @@ + + + +
+
+
+
+ {#if showBackButton} + + {/if} + +

{title}

+
+ +
+ Admin-Bereich + +
+
+
+
\ No newline at end of file diff --git a/src/lib/components/AdminNavigation.svelte b/src/lib/components/AdminNavigation.svelte new file mode 100644 index 0000000..3478d8d --- /dev/null +++ b/src/lib/components/AdminNavigation.svelte @@ -0,0 +1,71 @@ + + + +
+ {#each navigationItems as item} + +
+
+ {item.icon} +
+
+

+ {item.title} +

+

+ {item.description} +

+
+
+
+ {/each} +
+ + diff --git a/src/lib/components/AnmeldungenTable.svelte b/src/lib/components/AnmeldungenTable.svelte new file mode 100644 index 0000000..8dfe205 --- /dev/null +++ b/src/lib/components/AnmeldungenTable.svelte @@ -0,0 +1,176 @@ + + + +
+ + + + + + + + + + + + + {#each anmeldungen as anmeldung (anmeldung.id)} + + + + + + + + + + + + + + {/each} + +
+ Bewerber + + Noten + + WĂĽnsche + + Dokumente + + Anmeldung + + Aktionen +
+
+ {anmeldung.anrede} {anmeldung.vorname} {anmeldung.nachname} +
+
{anmeldung.email}
+
+
+ {#if anmeldung.noteDeutsch} +
Deutsch: {anmeldung.noteDeutsch}
+ {/if} + {#if anmeldung.noteMathe} +
Mathe: {anmeldung.noteMathe}
+ {/if} + {#if anmeldung.sozialverhalten} +
Sozialverhalten: {anmeldung.sozialverhalten}
+ {/if} +
+
+
+ {#if anmeldung.wunsch1} +
+ 1 + {anmeldung.wunsch1.name} +
+ {/if} + {#if anmeldung.wunsch2} +
+ 2 + {anmeldung.wunsch2.name} +
+ {/if} + {#if anmeldung.wunsch3} +
+ 3 + {anmeldung.wunsch3.name} +
+ {/if} +
+
+ {#if anmeldung.pdfs.length > 0} +
+ {#each anmeldung.pdfs as pdf, index} + + {/each} +
+ {:else} + Keine Dokumente + {/if} +
+ {formatDate(anmeldung.timestamp)} + +
+ + + + + +
+
+
\ No newline at end of file diff --git a/src/lib/components/DienststellenDialog.svelte b/src/lib/components/DienststellenDialog.svelte new file mode 100644 index 0000000..f7850f5 --- /dev/null +++ b/src/lib/components/DienststellenDialog.svelte @@ -0,0 +1,122 @@ + + + + + + +
e.key === 'Enter' && handleCancel()} + role="button" + tabindex="-1" +>
+ + +
+
+ +
+
\ No newline at end of file diff --git a/src/lib/components/LoginForm.svelte b/src/lib/components/LoginForm.svelte new file mode 100644 index 0000000..e5cd5c4 --- /dev/null +++ b/src/lib/components/LoginForm.svelte @@ -0,0 +1,91 @@ + + + +
+
+ + +
+ + {#if error} +
+

{error}

+
+ {/if} + + +
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 4352f19..c2e4afa 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -26,13 +26,14 @@ let dienststellen: any[]; let fileInputKey = 0; - let pdfDatein = []; let noteDeutsch = ''; let noteMathe = ''; let sozialverhalten = ''; let schulklasse = ''; let ablehnungHinweis = ''; let showAblehnungModal = false; + let alter = ''; + let startDatum = ''; $: hideSozialVerhalten = Number(schulklasse) >= 11 && @@ -114,7 +115,7 @@ const deutsch = parseInt(noteDeutsch); const mathe = parseInt(noteMathe); - if (['Gymnasium', 'Gymnasialzweig'].includes(schulart) ) { + if (['Gymnasium', 'KGS_Gymnasialzweig', 'IGS_Gymnasialzweig'].includes(schulart) ) { if (isNaN(deutsch) || isNaN(mathe) || deutsch > 4 && mathe > 4) { ablehnungHinweis = 'Du brauchst mindestens eine 4 in Deutsch oder Mathematik, um dich bewerben zu können. Bewirb dich gern erneut, wenn du die Voraussetzung erfüllst.'; showAblehnungModal = true; @@ -216,9 +217,14 @@ + + +

Startdatum: {startDatum}

@@ -257,7 +263,7 @@ {#key fileInputKey}
- + -
- {#if !eingeloggt} -
-

Admin Login

- - - {#if fehler} -

Falsches Passwort

- {/if} -
- {:else} -
-

Admin-Bereich

-
- - 📝 Anmeldungen anzeigen - - - 🏢 Dienststellen verwalten - - - 🗓 Praktikumzeiträume verwalten - - - 👨‍💼 Passwort ädern - +
+
+ {#if isLoading} +
+
- + +
+ +
- {/if} -
- - \ No newline at end of file + {/if} +
+
\ No newline at end of file diff --git a/src/routes/admin/anmeldungen/+page.server.ts b/src/routes/admin/anmeldungen/+page.server.ts index 7760803..8ee1ea6 100644 --- a/src/routes/admin/anmeldungen/+page.server.ts +++ b/src/routes/admin/anmeldungen/+page.server.ts @@ -1,8 +1,16 @@ +// src/routes/admin/anmeldungen/+page.server.ts import type { PageServerLoad } from './$types'; import { redirect } from '@sveltejs/kit'; export const load: PageServerLoad = async ({ cookies }) => { - if (cookies.get('admin_session') !== 'true') { + // Korrigiere Cookie-Name um konsistent zu sein + const adminAuth = cookies.get('admin-auth'); + + if (adminAuth !== 'authenticated') { throw redirect(303, '/admin'); } + + return { + title: 'Anmeldungen verwalten' + }; }; \ No newline at end of file diff --git a/src/routes/admin/anmeldungen/+page.svelte b/src/routes/admin/anmeldungen/+page.svelte index 6b789ec..3d96885 100644 --- a/src/routes/admin/anmeldungen/+page.svelte +++ b/src/routes/admin/anmeldungen/+page.svelte @@ -1,7 +1,13 @@ + - onMount(ladeAnmeldungen); - + + Anmeldungen verwalten - Admin + -
-

Alle Anmeldungen

- - - - - - - - - - - - - - - - {#each anmeldungen as a} - - - - - - - - - - - - {/each} - -
NameE-MailWunsch DienststelleNote DeutschNote MatheSozialverhaltenDatumDateienAktionen
{a.anrede} {a.vorname} {a.nachname}{a.email} - 1: {a.wunsch1?.name}

- 2: {a.wunsch2?.name}

- 3: {a.wunsch3?.name} -
{a.noteDeutsch || '—'}{a.noteMathe || '—'}{a.sozialverhalten || '—'}{new Date(a.timestamp).toLocaleDateString()} - {#each a.pdfs as pdf} -
  • - - PDF ansehen - -
  • - {/each} -
    -

    -

    - -
    +
    + - +
    + {#if error} +
    +
    +
    + + + +
    +
    +

    Fehler

    +

    {error}

    +
    +
    +
    + {/if} + + {#if isLoading} +
    +
    + Lade Anmeldungen... +
    + {:else if anmeldungen.length === 0} +
    + + + +

    Keine Anmeldungen

    +

    Es sind noch keine Praktikumsanmeldungen eingegangen.

    +
    + {:else} +
    + +
    + {/if} +
    -{#if auswahlDialogOffen} -
    -
    -

    Dienststelle auswählen

    - - - -
    - - -
    -
    -
    +{#if showDialog} + {/if} \ No newline at end of file diff --git a/src/routes/api/admin/check-auth/+server.ts b/src/routes/api/admin/check-auth/+server.ts new file mode 100644 index 0000000..b2bbb27 --- /dev/null +++ b/src/routes/api/admin/check-auth/+server.ts @@ -0,0 +1,18 @@ +// src/routes/api/admin/check-auth/+server.ts +import type { RequestHandler } from './$types'; + +export const GET: RequestHandler = async ({ cookies }) => { + const adminAuth = cookies.get('admin-auth'); + + if (adminAuth === 'authenticated') { + return new Response(JSON.stringify({ authenticated: true }), { + status: 200, + headers: { 'Content-Type': 'application/json' } + }); + } + + return new Response(JSON.stringify({ authenticated: false }), { + status: 401, + headers: { 'Content-Type': 'application/json' } + }); +}; \ No newline at end of file