Fügt die Möglichkeit hinzu, Teilnehmer aus dem heutigen Trainingstag zu laden, einschließlich der Logik zur Überprüfung, ob heute ein Trainingstag stattfindet. Implementiert die Methode zum Laden der Teilnehmer und optimiert die Benutzeroberfläche mit einem neuen Button für diese Funktion.

This commit is contained in:
Torsten Schulz (local)
2025-09-21 17:44:39 +02:00
parent 3c65fed994
commit 21c19298da

View File

@@ -57,6 +57,9 @@
</option>
</select>
<button @click="addParticipant">Hinzufügen</button>
<button v-if="hasTrainingToday" @click="loadParticipantsFromTraining" class="training-btn">
📅 Aus Trainingstag laden
</button>
</div>
</div>
</section>
@@ -327,6 +330,7 @@ export default {
matches: [],
showKnockout: false,
showParticipants: false, // Kollaps-Status für Teilnehmerliste
hasTrainingToday: false, // Gibt es einen Trainingstag heute?
editingResult: {
matchId: null, // aktuell bearbeitetes Match
set: null, // aktuell bearbeitete SatzNummer
@@ -583,12 +587,36 @@ export default {
const d = await apiClient.get(`/tournament/${this.currentClub}`);
this.dates = d.data;
console.log('Loaded tournaments:', this.dates);
// Prüfe, ob es einen Trainingstag heute gibt
await this.checkTrainingToday();
} catch (error) {
console.error('Fehler beim Laden der Turniere:', error);
this.dates = [];
}
},
async checkTrainingToday() {
try {
const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD Format
const response = await apiClient.get(`/diary/${this.currentClub}`);
console.log('Training check response:', response.data);
// Die API gibt alle Trainingstage zurück, filtere nach heute
const trainingData = response.data;
if (Array.isArray(trainingData)) {
this.hasTrainingToday = trainingData.some(training => training.date === today);
} else {
this.hasTrainingToday = false;
}
console.log('Training today:', this.hasTrainingToday);
} catch (error) {
console.error('Fehler beim Prüfen des Trainingstags:', error);
this.hasTrainingToday = false;
}
},
async createTournament() {
try {
const r = await apiClient.post('/tournament', {
@@ -1050,6 +1078,90 @@ export default {
this.showParticipants = !this.showParticipants;
},
async loadParticipantsFromTraining() {
try {
const today = new Date().toISOString().split('T')[0]; // YYYY-MM-DD Format
const response = await apiClient.get(`/diary/${this.currentClub}`);
console.log('Training response:', response.data);
console.log('Looking for date:', today);
// Die API gibt alle Trainingstage zurück, filtere nach heute
const trainingData = response.data;
if (Array.isArray(trainingData)) {
console.log('Available training dates:', trainingData.map(t => t.date));
// Finde den Trainingstag für heute
const todayTraining = trainingData.find(training => training.date === today);
console.log('Today training found:', todayTraining);
if (todayTraining) {
// Lade die Teilnehmer für diesen Trainingstag über die Participant-API
const participantsResponse = await apiClient.get(`/participants/${todayTraining.id}`);
console.log('Participants response:', participantsResponse.data);
const participants = participantsResponse.data;
if (participants && participants.length > 0) {
// Lade die Member-Details für jeden Teilnehmer
const trainingParticipants = [];
for (const participant of participants) {
try {
// Lade Member-Details über die Member-API
const memberResponse = await apiClient.get(`/clubmembers/get/${this.currentClub}/true`);
const member = memberResponse.data.find(m => m.id === participant.memberId);
if (member) {
trainingParticipants.push({
clubMemberId: participant.memberId,
member: member
});
}
} catch (memberError) {
console.error('Fehler beim Laden der Member-Details:', memberError);
}
}
if (trainingParticipants.length > 0) {
// Füge alle Trainingsteilnehmer zum Turnier hinzu
for (const participant of trainingParticipants) {
await this.addParticipantFromTraining(participant);
}
// Lade Turnierdaten neu
await this.loadTournamentData();
} else {
alert('Keine gültigen Teilnehmer im heutigen Trainingstag gefunden!');
}
} else {
alert('Keine Teilnehmer im heutigen Trainingstag gefunden!');
}
} else {
alert('Kein Trainingstag für heute gefunden!');
}
} else {
alert('Kein Trainingstag für heute gefunden!');
}
} catch (error) {
console.error('Fehler beim Laden der Trainingsteilnehmer:', error);
alert('Fehler beim Laden der Trainingsteilnehmer: ' + (error.response?.data?.error || error.message));
}
},
async addParticipantFromTraining(participant) {
try {
await apiClient.post('/tournament/participant', {
clubId: this.currentClub,
tournamentId: this.selectedDate,
participant: participant.clubMemberId
});
} catch (error) {
console.error('Fehler beim Hinzufügen des Teilnehmers:', error);
// Ignoriere Fehler, da Teilnehmer möglicherweise bereits existiert
}
},
getMatchDisplayText(player1Id, player2Id, groupId) {
const liveResult = this.getMatchLiveResult(player1Id, player2Id, groupId);
if (!liveResult) return '-';
@@ -1314,6 +1426,26 @@ button {
display: flex;
gap: 0.5rem;
align-items: center;
flex-wrap: wrap;
}
.training-btn {
background-color: #28a745;
color: white;
border: none;
padding: 0.5rem 1rem;
border-radius: 4px;
cursor: pointer;
font-size: 0.9em;
transition: background-color 0.2s ease;
}
.training-btn:hover {
background-color: #218838;
}
.training-btn:active {
background-color: #1e7e34;
}
.no-match {