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:
@@ -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 Satz‑Nummer
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user