From 967080bdbda0610b320e88a945ce175d38d19494 Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Wed, 13 Aug 2025 11:08:57 +0200 Subject: [PATCH] Enhance bulk date input handling in EventForm component to support German date format (DD.MM.YYYY) and provide user feedback for invalid entries. --- src/components/EventForm.vue | 57 +++++++++++++++++++++++++++++------- 1 file changed, 46 insertions(+), 11 deletions(-) diff --git a/src/components/EventForm.vue b/src/components/EventForm.vue index 75850da..7bf26e1 100644 --- a/src/components/EventForm.vue +++ b/src/components/EventForm.vue @@ -35,8 +35,8 @@ -
Mehrere Daten mit Komma oder Zeilenumbruch trennen
+ placeholder="Mehrere Daten, z.B. 27.03.2025,03.04.2025 oder je Zeile ein Datum"> +
Format: TT.MM.JJJJ (optional weiterhin JJJJ-MM-TT). Trennen mit Komma oder Zeilenumbruch.
@@ -217,15 +217,50 @@ export default { alsoOnHomepage: this.onHomepage ? 1 : 0 }; if (this.dateMode === 'bulk' && this.bulkDates) { - // Split by comma or newline, trim, filter valid dates - const dates = this.bulkDates.split(/,|\n/).map(d => d.trim()).filter(d => /^\d{4}-\d{2}-\d{2}$/.test(d)); - const results = []; - for (const date of dates) { - const payload = { ...basePayload, date }; - const response = await axios.post('/events', payload); - results.push(response.data); - } - this.$emit('saved', results); + // Aufteilen und deutsche Datumsformate (TT.MM.JJJJ) sowie ISO (JJJJ-MM-TT) akzeptieren + const parts = this.bulkDates.split(/,|\n/).map(d => d.trim()).filter(d => d.length > 0); + const isoDates = []; + const invalid = []; + const pad = n => n.toString().padStart(2, '0'); + for (const p of parts) { + // dd.mm.yyyy + let m = p.match(/^(\d{1,2})\.(\d{1,2})\.(\d{4})$/); + if (m) { + const dd = parseInt(m[1], 10); + const mm = parseInt(m[2], 10); + const yyyy = parseInt(m[3], 10); + // einfache Plausibilitätsprüfung + if (mm >= 1 && mm <= 12 && dd >= 1 && dd <= 31) { + isoDates.push(`${yyyy}-${pad(mm)}-${pad(dd)}`); + continue; + } else { + invalid.push(p); + continue; + } + } + // ISO yyyy-mm-dd + if (/^\d{4}-\d{2}-\d{2}$/.test(p)) { + isoDates.push(p); + } else { + invalid.push(p); + } + } + if (isoDates.length === 0) { + alert('Keine gültigen Datumsangaben erkannt. Erlaubt: TT.MM.JJJJ oder JJJJ-MM-TT'); + return; + } + if (invalid.length > 0) { + // Hinweis für Benutzer über ignorierte Werte + console.warn('Ungültige Datumsangaben ignoriert:', invalid); + alert('Folgende Einträge wurden ignoriert: ' + invalid.join(', ')); + } + const results = []; + for (const date of isoDates) { + const payload = { ...basePayload, date }; + const response = await axios.post('/events', payload); + results.push(response.data); + } + this.$emit('saved', results); } else { let response; if (this.eventData.id) {