Enhance bulk date input handling in EventForm component to support German date format (DD.MM.YYYY) and provide user feedback for invalid entries.

This commit is contained in:
Torsten Schulz (local)
2025-08-13 11:08:57 +02:00
parent 67e9a70ba0
commit 967080bdbd

View File

@@ -35,8 +35,8 @@
<td><label for="bulkDates">Bulk-Daten:</label></td>
<td>
<textarea id="bulkDates" v-model="bulkDates"
placeholder="Mehrere Daten, z.B. 2025-08-13,2025-08-20 oder je Zeile ein Datum"></textarea>
<div style="font-size: 0.9em; color: #888;">Mehrere Daten mit Komma oder Zeilenumbruch trennen</div>
placeholder="Mehrere Daten, z.B. 27.03.2025,03.04.2025 oder je Zeile ein Datum"></textarea>
<div style="font-size: 0.9em; color: #888;">Format: TT.MM.JJJJ (optional weiterhin JJJJ-MM-TT). Trennen mit Komma oder Zeilenumbruch.</div>
</td>
</tr>
<tr v-if="dateMode === 'weekday' || dateMode === 'interval'">
@@ -217,10 +217,45 @@ 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));
// 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 dates) {
for (const date of isoDates) {
const payload = { ...basePayload, date };
const response = await axios.post('/events', payload);
results.push(response.data);