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><label for="bulkDates">Bulk-Daten:</label></td>
|
||||||
<td>
|
<td>
|
||||||
<textarea id="bulkDates" v-model="bulkDates"
|
<textarea id="bulkDates" v-model="bulkDates"
|
||||||
placeholder="Mehrere Daten, z.B. 2025-08-13,2025-08-20 oder je Zeile ein Datum"></textarea>
|
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;">Mehrere Daten mit Komma oder Zeilenumbruch trennen</div>
|
<div style="font-size: 0.9em; color: #888;">Format: TT.MM.JJJJ (optional weiterhin JJJJ-MM-TT). Trennen mit Komma oder Zeilenumbruch.</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-if="dateMode === 'weekday' || dateMode === 'interval'">
|
<tr v-if="dateMode === 'weekday' || dateMode === 'interval'">
|
||||||
@@ -217,10 +217,45 @@ export default {
|
|||||||
alsoOnHomepage: this.onHomepage ? 1 : 0
|
alsoOnHomepage: this.onHomepage ? 1 : 0
|
||||||
};
|
};
|
||||||
if (this.dateMode === 'bulk' && this.bulkDates) {
|
if (this.dateMode === 'bulk' && this.bulkDates) {
|
||||||
// Split by comma or newline, trim, filter valid dates
|
// Aufteilen und deutsche Datumsformate (TT.MM.JJJJ) sowie ISO (JJJJ-MM-TT) akzeptieren
|
||||||
const dates = this.bulkDates.split(/,|\n/).map(d => d.trim()).filter(d => /^\d{4}-\d{2}-\d{2}$/.test(d));
|
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 = [];
|
const results = [];
|
||||||
for (const date of dates) {
|
for (const date of isoDates) {
|
||||||
const payload = { ...basePayload, date };
|
const payload = { ...basePayload, date };
|
||||||
const response = await axios.post('/events', payload);
|
const response = await axios.post('/events', payload);
|
||||||
results.push(response.data);
|
results.push(response.data);
|
||||||
|
|||||||
Reference in New Issue
Block a user