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) {