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:
@@ -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,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) {
|
||||
|
||||
Reference in New Issue
Block a user