diff --git a/components/Navigation.vue b/components/Navigation.vue index bb7d826..3038e31 100644 --- a/components/Navigation.vue +++ b/components/Navigation.vue @@ -230,6 +230,11 @@ class="block px-4 py-2 text-sm text-gray-300 hover:bg-primary-600 hover:text-white transition-colors"> Satzung + + Vereinsmeisterschaften +
Satzung + + Vereinsmeisterschaften + Einstellungen diff --git a/pages/cms/vereinsmeisterschaften.vue b/pages/cms/vereinsmeisterschaften.vue new file mode 100644 index 0000000..7550157 --- /dev/null +++ b/pages/cms/vereinsmeisterschaften.vue @@ -0,0 +1,652 @@ + + + diff --git a/public/data/vereinsmeisterschaften.csv b/public/data/vereinsmeisterschaften.csv index aef0299..80c7547 100644 --- a/public/data/vereinsmeisterschaften.csv +++ b/public/data/vereinsmeisterschaften.csv @@ -1,4 +1,4 @@ -"jahr","kategorie","platz","spieler1","spieler2","bemerkung" +Jahr,Kategorie,Platz,Spieler1,Spieler2,Bemerkung "2024","Einzel","1","Michael Koch","","" "2024","Einzel","2","Olaf Nüßlein","","" "2024","Einzel","3","Bernd Meyer","","" @@ -46,3 +46,4 @@ "2016","Doppel","1","Jürgen Kratz","Matthias Schmidt","" "2016","Doppel","2","André Gilzinger","Bernd Meyer","" "2016","Doppel","3","Sven Baublies","Dagmar Bereksasi","" +"2025","Doppel","1","a","b","" \ No newline at end of file diff --git a/server/api/cms/save-csv.post.js b/server/api/cms/save-csv.post.js new file mode 100644 index 0000000..dc1ae55 --- /dev/null +++ b/server/api/cms/save-csv.post.js @@ -0,0 +1,51 @@ +import fs from 'fs/promises' +import path from 'path' + +export default defineEventHandler(async (event) => { + try { + const { filename, content } = await readBody(event) + + if (!filename || !content) { + throw createError({ + statusCode: 400, + statusMessage: 'Filename und Content sind erforderlich' + }) + } + + // Sicherheitsprüfung: Nur bestimmte Dateien erlauben + const allowedFiles = [ + 'vereinsmeisterschaften.csv', + 'mannschaften.csv', + 'termine.csv' + ] + + if (!allowedFiles.includes(filename)) { + throw createError({ + statusCode: 403, + statusMessage: 'Datei nicht erlaubt' + }) + } + + // Pfad zur Datenverzeichnis + const dataDir = path.join(process.cwd(), 'public', 'data') + const filePath = path.join(dataDir, filename) + + // Sicherstellen, dass das Verzeichnis existiert + await fs.mkdir(dataDir, { recursive: true }) + + // Datei schreiben + await fs.writeFile(filePath, content, 'utf8') + + return { + success: true, + message: 'Datei erfolgreich gespeichert' + } + + } catch (error) { + console.error('Fehler beim Speichern der CSV-Datei:', error) + throw createError({ + statusCode: 500, + statusMessage: 'Fehler beim Speichern der Datei' + }) + } +})