feat: add number of tables to tournament updates and enhance related UI components
All checks were successful
Deploy tt-tagebuch / deploy (push) Successful in 47s

This commit is contained in:
Torsten Schulz (local)
2026-05-16 00:18:59 +02:00
parent 40bd5e0745
commit f8f1c797e7
13 changed files with 436 additions and 30 deletions

View File

@@ -13,6 +13,10 @@
{{ $t('tournaments.winningSets') }}:
<input type="number" :value="winningSets" @input="$emit('update:winningSets', parseInt($event.target.value))" min="1" />
</label>
<label>
{{ $t('tournaments.numberOfTables') }}:
<input type="number" :value="numberOfTables" @input="$emit('update:numberOfTables', $event.target.value ? parseInt($event.target.value, 10) : null)" min="1" />
</label>
<button @click="$emit('generate-pdf')" class="btn-primary" style="margin-top: 1rem;">{{ $t('tournaments.exportPDF') }}</button>
</div>
<label class="checkbox-item">
@@ -268,6 +272,11 @@ export default {
type: [Number, null],
default: null
}
,
numberOfTables: {
type: [Number, null],
default: null
}
},
data() {
return {
@@ -320,6 +329,7 @@ export default {
'update:newClassIsDoubles',
'update:newClassGender',
'update:newClassMinBirthYear'
, 'update:numberOfTables'
]
,
methods: {

View File

@@ -76,6 +76,7 @@
:tournament-name="currentTournamentName"
:tournament-date="currentTournamentDate"
:winning-sets="currentWinningSets"
:number-of-tables="currentNumberOfTables"
:is-group-tournament="isGroupTournament"
:tournament-classes="tournamentClasses"
:show-classes="showClasses"
@@ -91,6 +92,7 @@
@update:tournamentName="currentTournamentName = $event; updateTournament()"
@update:tournamentDate="currentTournamentDate = $event; updateTournament()"
@update:winningSets="currentWinningSets = $event; updateTournament()"
@update:numberOfTables="currentNumberOfTables = $event; updateTournament()"
@update:isGroupTournament="isGroupTournament = $event; onModusChange()"
@generate-pdf="generatePDF"
@edit-class="editClass"
@@ -316,6 +318,7 @@ export default {
advancingPerGroup: 1,
numberOfGroups: 1,
groupsPerClass: {}, // { classId: numberOfGroups }
currentNumberOfTables: null,
maxGroupSize: null,
isGroupTournament: false,
groups: [],
@@ -459,7 +462,15 @@ export default {
});
}
});
// Beendete Spiele nach unten verschieben (unfertige zuerst)
result.sort((a, b) => {
const aFinished = a.isFinished ? 1 : 0;
const bFinished = b.isFinished ? 1 : 0;
if (aFinished !== bFinished) return aFinished - bFinished;
return 0;
});
return result;
},
@@ -1158,6 +1169,7 @@ export default {
this.currentTournamentDate = tournament.date || '';
this.currentWinningSets = tournament.winningSets || 3;
this.isGroupTournament = tournament.type === 'groups';
this.currentNumberOfTables = Number.isFinite(Number(tournament.numberOfTables)) ? Number(tournament.numberOfTables) : null;
// Defensive: Backend/DB kann (historisch/UI-default) 0/null liefern.
// Für gruppenbasierte Turniere ohne Klassen brauchen wir hier aber eine sinnvolle Zahl,
// sonst sendet die UI später wieder `0` an `/tournament/groups`.
@@ -1516,7 +1528,8 @@ export default {
await apiClient.put(`/tournament/${this.currentClub}/${this.selectedDate}`, {
name: this.currentTournamentName || this.currentTournamentDate,
date: this.currentTournamentDate,
winningSets: this.currentWinningSets
winningSets: this.currentWinningSets,
numberOfTables: this.currentNumberOfTables
});
// Prüfe, ob es einen Trainingstag für das neue Datum gibt
await this.checkTrainingForDate(this.currentTournamentDate);