feat(player-details): enhance player data display with missing data indicators

- Updated the PlayerDetailsDialog component to show a placeholder message when player data is not recorded, improving user experience and clarity.
- Added a new CSS class for missing data to visually differentiate it from available information.
- Enhanced internationalization by adding translation keys for the "data not recorded" message across multiple languages.
This commit is contained in:
Torsten Schulz (local)
2026-02-06 15:28:13 +01:00
parent 566361e46a
commit 26acb588e1
16 changed files with 169 additions and 18 deletions

View File

@@ -10,47 +10,53 @@
<div v-if="!loading && playerData" class="player-details-content">
<table class="player-details-table">
<tbody>
<tr v-if="playerData.name">
<tr>
<td class="label-cell">{{ $t('members.firstName') }} / {{ $t('members.lastName') }}</td>
<td class="value-cell">
<td class="value-cell" v-if="playerData.name">
<button class="copy-button" @click="copyToClipboard(playerData.name)" title="Kopieren">📋</button>
{{ playerData.name }}
</td>
<td class="value-cell missing" v-else>{{ $t('tournaments.dataNotRecorded') }}</td>
</tr>
<tr v-if="playerData.birthDate">
<tr>
<td class="label-cell">{{ $t('members.birthdate') }}</td>
<td class="value-cell">
<td class="value-cell" v-if="playerData.birthDate">
<button class="copy-button" @click="copyToClipboard(formatDate(playerData.birthDate))" title="Kopieren">📋</button>
{{ formatDate(playerData.birthDate) }}
</td>
<td class="value-cell missing" v-else>{{ $t('tournaments.dataNotRecorded') }}</td>
</tr>
<tr v-if="playerData.address">
<td class="label-cell">{{ $t('tournaments.address') }}</td>
<td class="value-cell">
<button class="copy-button" @click="copyToClipboard(playerData.address)" title="Kopieren">📋</button>
{{ playerData.address }}
</td>
</tr>
<tr v-if="playerData.gender && playerData.gender !== 'unknown'">
<tr>
<td class="label-cell">{{ $t('members.gender') }}</td>
<td class="value-cell">
<td class="value-cell" v-if="playerData.gender && playerData.gender !== 'unknown'">
<button class="copy-button" @click="copyToClipboard(formatGender(playerData.gender))" title="Kopieren">📋</button>
{{ formatGender(playerData.gender) }}
</td>
<td class="value-cell missing" v-else>{{ $t('tournaments.dataNotRecorded') }}</td>
</tr>
<tr v-if="playerData.email">
<tr>
<td class="label-cell">{{ $t('tournaments.address') }}</td>
<td class="value-cell" v-if="playerData.address">
<button class="copy-button" @click="copyToClipboard(playerData.address)" title="Kopieren">📋</button>
{{ playerData.address }}
</td>
<td class="value-cell missing" v-else>{{ $t('tournaments.dataNotRecorded') }}</td>
</tr>
<tr>
<td class="label-cell">{{ $t('members.emailAddress') }}</td>
<td class="value-cell">
<td class="value-cell" v-if="playerData.email">
<button class="copy-button" @click="copyToClipboard(playerData.email)" title="Kopieren">📋</button>
{{ playerData.email }}
</td>
<td class="value-cell missing" v-else>{{ $t('tournaments.dataNotRecorded') }}</td>
</tr>
<tr v-if="playerData.phone">
<tr>
<td class="label-cell">{{ $t('members.phoneNumber') }}</td>
<td class="value-cell">
<td class="value-cell" v-if="playerData.phone">
<button class="copy-button" @click="copyToClipboard(playerData.phone)" title="Kopieren">📋</button>
{{ playerData.phone }}
</td>
<td class="value-cell missing" v-else>{{ $t('tournaments.dataNotRecorded') }}</td>
</tr>
</tbody>
</table>
@@ -351,6 +357,12 @@ export default {
opacity: 0.8;
}
.value-cell.missing {
color: #c62828;
font-style: italic;
opacity: 0.85;
}
.no-data {
text-align: center;
padding: 2rem;

View File

@@ -98,6 +98,16 @@
"info": "Information",
"confirm": "Bestätige",
"cancel": "Abbreche"
},
"tournaments": {
"numberOfTables": "Aazahl Tisch",
"table": "Tisch",
"distributeTables": "Freii Tisch verteile",
"distributeTablesResult": "Tischverteilig",
"noFreeTables": "Kei freie Tisch verfüegbar.",
"noAssignableMatches": "Kei Spiel verfüegbar, wo beidi Spieler frei sind.",
"tablesDistributed": "Tisch sind verteilt worde.",
"dataNotRecorded": "No nid erfasst"
}
}

View File

@@ -267,7 +267,15 @@
"events": "Veranstaltungen",
"participations": "Turnierbeteiligungen",
"showEvents": "Gespeicherte Veranstaltungen anzeigen",
"showParticipations": "Turnierbeteiligungen anzeigen"
"showParticipations": "Turnierbeteiligungen anzeigen",
"numberOfTables": "Anzahl Tische",
"table": "Tisch",
"distributeTables": "Freie Tische verteilen",
"distributeTablesResult": "Tischverteilung",
"noFreeTables": "Keine freien Tische verfügbar.",
"noAssignableMatches": "Keine Spiele verfügbar, bei denen beide Spieler frei sind.",
"tablesDistributed": "Tische wurden verteilt.",
"dataNotRecorded": "Noch nicht erfasst"
},
"permissions": {
"title": "Berechtigungsverwaltung",

View File

@@ -671,6 +671,7 @@
"forForwarding": "für Weitermeldung",
"showPlayerDetails": "Spielerdetails anzeigen",
"noPlayerDataAvailable": "Keine Spielerdaten verfügbar",
"dataNotRecorded": "Noch nicht erfasst",
"koRound": "K.-o.-Runde",
"errorUpdatingTournament": "Fehler beim Aktualisieren des Turniers.",
"pleaseEnterDate": "Bitte geben Sie ein Datum ein!",

View File

@@ -98,6 +98,16 @@
"info": "Information",
"confirm": "Confirm",
"cancel": "Cancel"
},
"tournaments": {
"numberOfTables": "Number of tables",
"table": "Table",
"distributeTables": "Distribute free tables",
"distributeTablesResult": "Table distribution",
"noFreeTables": "No free tables available.",
"noAssignableMatches": "No matches available where both players are free.",
"tablesDistributed": "Tables have been distributed.",
"dataNotRecorded": "Not yet recorded"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Information",
"confirm": "Confirm",
"cancel": "Cancel"
},
"tournaments": {
"numberOfTables": "Number of tables",
"table": "Table",
"distributeTables": "Distribute free tables",
"distributeTablesResult": "Table distribution",
"noFreeTables": "No free tables available.",
"noAssignableMatches": "No matches available where both players are free.",
"tablesDistributed": "Tables have been distributed.",
"dataNotRecorded": "Not yet recorded"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Information",
"confirm": "Confirm",
"cancel": "Cancel"
},
"tournaments": {
"numberOfTables": "Number of tables",
"table": "Table",
"distributeTables": "Distribute free tables",
"distributeTablesResult": "Table distribution",
"noFreeTables": "No free tables available.",
"noAssignableMatches": "No matches available where both players are free.",
"tablesDistributed": "Tables have been distributed.",
"dataNotRecorded": "Not yet recorded"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Información",
"confirm": "Confirmar",
"cancel": "Cancelar"
},
"tournaments": {
"numberOfTables": "Número de mesas",
"table": "Mesa",
"distributeTables": "Distribuir mesas libres",
"distributeTablesResult": "Distribución de mesas",
"noFreeTables": "No hay mesas libres disponibles.",
"noAssignableMatches": "No hay partidos disponibles en los que ambos jugadores estén libres.",
"tablesDistributed": "Las mesas han sido distribuidas.",
"dataNotRecorded": "Aún no registrado"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Impormasyon",
"confirm": "Kumpirmahin",
"cancel": "Kanselahin"
},
"tournaments": {
"numberOfTables": "Bilang ng mesa",
"table": "Mesa",
"distributeTables": "Ipamahagi ang mga bakanteng mesa",
"distributeTablesResult": "Pamamahagi ng mesa",
"noFreeTables": "Walang bakanteng mesa.",
"noAssignableMatches": "Walang laban kung saan pareho ang mga manlalaro ay bakante.",
"tablesDistributed": "Ang mga mesa ay naipamahagi na.",
"dataNotRecorded": "Hindi pa naitala"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Information",
"confirm": "Confirmer",
"cancel": "Annuler"
},
"tournaments": {
"numberOfTables": "Nombre de tables",
"table": "Table",
"distributeTables": "Distribuer les tables libres",
"distributeTablesResult": "Distribution des tables",
"noFreeTables": "Aucune table libre disponible.",
"noAssignableMatches": "Aucun match disponible où les deux joueurs sont libres.",
"tablesDistributed": "Les tables ont été distribuées.",
"dataNotRecorded": "Pas encore enregistré"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Informazione",
"confirm": "Conferma",
"cancel": "Annulla"
},
"tournaments": {
"numberOfTables": "Numero di tavoli",
"table": "Tavolo",
"distributeTables": "Distribuire tavoli liberi",
"distributeTablesResult": "Distribuzione dei tavoli",
"noFreeTables": "Nessun tavolo libero disponibile.",
"noAssignableMatches": "Nessuna partita disponibile in cui entrambi i giocatori sono liberi.",
"tablesDistributed": "I tavoli sono stati distribuiti.",
"dataNotRecorded": "Non ancora registrato"
}
}

View File

@@ -98,6 +98,16 @@
"info": "情報",
"confirm": "確認",
"cancel": "キャンセル"
},
"tournaments": {
"numberOfTables": "卓数",
"table": "卓",
"distributeTables": "空き卓を割り当て",
"distributeTablesResult": "卓の割り当て",
"noFreeTables": "空き卓がありません。",
"noAssignableMatches": "両選手が空いている試合がありません。",
"tablesDistributed": "卓が割り当てられました。",
"dataNotRecorded": "未登録"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Informacja",
"confirm": "Potwierdź",
"cancel": "Anuluj"
},
"tournaments": {
"numberOfTables": "Liczba stołów",
"table": "Stół",
"distributeTables": "Rozdziel wolne stoły",
"distributeTablesResult": "Podział stołów",
"noFreeTables": "Brak wolnych stołów.",
"noAssignableMatches": "Brak meczów, w których obaj gracze są wolni.",
"tablesDistributed": "Stoły zostały rozdzielone.",
"dataNotRecorded": "Jeszcze nie wprowadzono"
}
}

View File

@@ -98,6 +98,16 @@
"info": "ข้อมูล",
"confirm": "ยืนยัน",
"cancel": "ยกเลิก"
},
"tournaments": {
"numberOfTables": "จำนวนโต๊ะ",
"table": "โต๊ะ",
"distributeTables": "จัดสรรโต๊ะว่าง",
"distributeTablesResult": "การจัดสรรโต๊ะ",
"noFreeTables": "ไม่มีโต๊ะว่าง",
"noAssignableMatches": "ไม่มีแมตช์ที่ผู้เล่นทั้งสองว่าง",
"tablesDistributed": "จัดสรรโต๊ะเรียบร้อยแล้ว",
"dataNotRecorded": "ยังไม่ได้บันทึก"
}
}

View File

@@ -98,6 +98,16 @@
"info": "Impormasyon",
"confirm": "Kumpirmahin",
"cancel": "Kanselahin"
},
"tournaments": {
"numberOfTables": "Bilang ng mesa",
"table": "Mesa",
"distributeTables": "Ipamahagi ang mga bakanteng mesa",
"distributeTablesResult": "Pamamahagi ng mesa",
"noFreeTables": "Walang bakanteng mesa.",
"noAssignableMatches": "Walang laban kung saan pareho ang mga manlalaro ay bakante.",
"tablesDistributed": "Ang mga mesa ay naipamahagi na.",
"dataNotRecorded": "Hindi pa naitala"
}
}

View File

@@ -98,6 +98,16 @@
"info": "信息",
"confirm": "确认",
"cancel": "取消"
},
"tournaments": {
"numberOfTables": "球台数量",
"table": "球台",
"distributeTables": "分配空闲球台",
"distributeTablesResult": "球台分配",
"noFreeTables": "没有可用的空闲球台。",
"noAssignableMatches": "没有两位选手都空闲的比赛。",
"tablesDistributed": "球台已分配。",
"dataNotRecorded": "尚未录入"
}
}