feat(tournament): add sourceUrl field and implement repair logic for tournaments
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 16m19s
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 16m19s
This commit is contained in:
@@ -544,6 +544,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else-if="parsed && parsed.parsedData" class="workspace-detail calendar-entry-detail">
|
||||
<div class="selected-tournament-strip">
|
||||
<div class="selected-tournament-main">
|
||||
<span class="selected-tournament-label">Aktives Turnier</span>
|
||||
<strong>{{ parsed.parsedData.title || '–' }}</strong>
|
||||
</div>
|
||||
<div class="selected-tournament-meta">
|
||||
<span>{{ parsed.parsedData.termin || '–' }}</span>
|
||||
<span v-if="calendarEntryLocationLabel">{{ calendarEntryLocationLabel }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="calendar-entry-empty">
|
||||
<h3>Kalendereintrag geöffnet</h3>
|
||||
<p>Für dieses Turnier sind noch keine Konkurrenzen hinterlegt. Importiere eine Ausschreibung als PDF, sobald du Teilnehmer oder Ergebnisse verwalten möchtest.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="workspace-detail empty-workspace">
|
||||
<div class="empty-workspace-card">
|
||||
<h3>Kein aktives Turnier ausgewählt</h3>
|
||||
@@ -995,6 +1011,9 @@ export default {
|
||||
const placeLine = places.find((entry) => /^PLZ\s*\/\s*Ort:/i.test(entry || ''));
|
||||
return placeLine ? placeLine.replace(/^PLZ\s*\/\s*Ort:/i, '').trim() : '';
|
||||
},
|
||||
calendarEntryLocationLabel() {
|
||||
return (this.parsed?.parsedData?.austragungsorte || []).filter(Boolean).join(' · ');
|
||||
},
|
||||
registrationDeadlineAt() {
|
||||
const deadlines = [
|
||||
...(this.parsed?.parsedData?.meldeschluesse || []),
|
||||
@@ -1648,6 +1667,7 @@ export default {
|
||||
const response = await apiClient.post(`/official-tournaments/${this.currentClub}/suggestions/${suggestion.id}/save`);
|
||||
await Promise.all([this.loadSuggestions(), this.loadList()]);
|
||||
this.uploadedId = String(response.data.id);
|
||||
await this.reload();
|
||||
this.workspaceTab = 'saved';
|
||||
} catch (error) { this.suggestionError = getSafeErrorMessage(error, 'Der Vorschlag konnte nicht gespeichert werden.'); }
|
||||
},
|
||||
@@ -2229,6 +2249,10 @@ export default {
|
||||
.empty-workspace-card { max-width: 540px; text-align: center; color: #516074; }
|
||||
.empty-workspace-card h3 { margin: 0 0 .45rem; color: #17366d; }
|
||||
.empty-workspace-card p { margin: 0; }
|
||||
.calendar-entry-detail { min-height: 220px; }
|
||||
.calendar-entry-empty { padding: 2.5rem 1rem; text-align: center; color: #516074; }
|
||||
.calendar-entry-empty h3 { margin: 0 0 .45rem; color: #17366d; }
|
||||
.calendar-entry-empty p { max-width: 640px; margin: 0 auto; }
|
||||
.overview-header { display: flex; justify-content: space-between; gap: 1rem; align-items: flex-start; flex-wrap: wrap; }
|
||||
.overview-main { display: flex; flex-direction: column; gap: .9rem; flex: 1; min-width: min(100%, 520px); }
|
||||
.workflow-badges { display: flex; flex-wrap: wrap; gap: .45rem; }
|
||||
|
||||
Reference in New Issue
Block a user