Update package-lock.json and package.json to include 'globals' dependency and improve code formatting in various components for better readability.
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 54s
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 54s
This commit is contained in:
@@ -15,54 +15,70 @@
|
||||
<button
|
||||
v-for="jahr in verfuegbareJahre"
|
||||
:key="jahr"
|
||||
@click="selectedYear = jahr"
|
||||
:class="[
|
||||
'px-4 py-2 rounded-lg font-medium transition-colors',
|
||||
selectedYear === jahr
|
||||
? 'bg-primary-600 text-white'
|
||||
: 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-300'
|
||||
]"
|
||||
@click="selectedYear = jahr"
|
||||
>
|
||||
{{ jahr }}
|
||||
</button>
|
||||
<button
|
||||
@click="selectedYear = 'alle'"
|
||||
:class="[
|
||||
'px-4 py-2 rounded-lg font-medium transition-colors',
|
||||
selectedYear === 'alle'
|
||||
? 'bg-primary-600 text-white'
|
||||
: 'bg-white text-gray-700 hover:bg-gray-100 border border-gray-300'
|
||||
]"
|
||||
@click="selectedYear = 'alle'"
|
||||
>
|
||||
Alle Jahre
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Ergebnisse -->
|
||||
<div v-if="filteredResults.length > 0" class="space-y-8">
|
||||
<div
|
||||
v-if="filteredResults.length > 0"
|
||||
class="space-y-8"
|
||||
>
|
||||
<div
|
||||
v-for="jahr in sortedJahre"
|
||||
:key="jahr"
|
||||
class="bg-white rounded-xl shadow-lg p-6"
|
||||
>
|
||||
<h2 class="text-2xl font-display font-bold text-gray-900 mb-6 flex items-center">
|
||||
<Trophy :size="28" class="text-primary-600 mr-3" />
|
||||
<Trophy
|
||||
:size="28"
|
||||
class="text-primary-600 mr-3"
|
||||
/>
|
||||
{{ jahr }}
|
||||
</h2>
|
||||
|
||||
<!-- Besondere Bemerkungen -->
|
||||
<div v-if="sortedGroupedResults[jahr]?.bemerkungen" class="mb-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg">
|
||||
<p class="text-yellow-800 font-medium">{{ sortedGroupedResults[jahr].bemerkungen }}</p>
|
||||
<div
|
||||
v-if="sortedGroupedResults[jahr]?.bemerkungen"
|
||||
class="mb-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg"
|
||||
>
|
||||
<p class="text-yellow-800 font-medium">
|
||||
{{ sortedGroupedResults[jahr].bemerkungen }}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Kategorien -->
|
||||
<div v-if="sortedGroupedResults[jahr]?.kategorien" class="space-y-6">
|
||||
<div
|
||||
v-if="sortedGroupedResults[jahr]?.kategorien"
|
||||
class="space-y-6"
|
||||
>
|
||||
<div
|
||||
v-for="(kategorieData, kategorie) in sortedGroupedResults[jahr].kategorien"
|
||||
:key="kategorie"
|
||||
class="border-l-4 border-primary-600 pl-4"
|
||||
>
|
||||
<h3 class="text-xl font-semibold text-gray-900 mb-4">{{ kategorie }}</h3>
|
||||
<h3 class="text-xl font-semibold text-gray-900 mb-4">
|
||||
{{ kategorie }}
|
||||
</h3>
|
||||
|
||||
<div class="grid gap-3">
|
||||
<div
|
||||
@@ -89,21 +105,30 @@
|
||||
{{ ergebnis.platz }}
|
||||
</div>
|
||||
<div class="flex items-center gap-2">
|
||||
<div v-if="ergebnis.imageFilename1" class="flex-shrink-0">
|
||||
<div
|
||||
v-if="ergebnis.imageFilename1"
|
||||
class="flex-shrink-0"
|
||||
>
|
||||
<img
|
||||
:src="`/api/personen/${ergebnis.imageFilename1}?width=40&height=40`"
|
||||
:alt="ergebnis.spieler1"
|
||||
class="w-10 h-10 rounded-full object-cover border-2 border-gray-300 cursor-pointer hover:border-primary-500 transition-colors"
|
||||
loading="lazy"
|
||||
@click="openLightbox(ergebnis.imageFilename1, ergebnis.spieler1)"
|
||||
/>
|
||||
>
|
||||
</div>
|
||||
<div>
|
||||
<span class="font-semibold text-gray-900">
|
||||
{{ ergebnis.spieler1 }}
|
||||
</span>
|
||||
<span v-if="ergebnis.spieler2" class="text-gray-600">
|
||||
<span v-if="ergebnis.imageFilename2" class="ml-2 inline-flex items-center gap-2">
|
||||
<span
|
||||
v-if="ergebnis.spieler2"
|
||||
class="text-gray-600"
|
||||
>
|
||||
<span
|
||||
v-if="ergebnis.imageFilename2"
|
||||
class="ml-2 inline-flex items-center gap-2"
|
||||
>
|
||||
/
|
||||
<img
|
||||
:src="`/api/personen/${ergebnis.imageFilename2}?width=40&height=40`"
|
||||
@@ -111,10 +136,13 @@
|
||||
class="w-10 h-10 rounded-full object-cover border-2 border-gray-300 cursor-pointer hover:border-primary-500 transition-colors"
|
||||
loading="lazy"
|
||||
@click="openLightbox(ergebnis.imageFilename2, ergebnis.spieler2)"
|
||||
/>
|
||||
>
|
||||
{{ ergebnis.spieler2 }}
|
||||
</span>
|
||||
<span v-else class="text-gray-600">
|
||||
<span
|
||||
v-else
|
||||
class="text-gray-600"
|
||||
>
|
||||
/ {{ ergebnis.spieler2 }}
|
||||
</span>
|
||||
</span>
|
||||
@@ -131,26 +159,48 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-else class="text-center py-12 bg-white rounded-xl shadow-lg">
|
||||
<Trophy :size="48" class="text-gray-400 mx-auto mb-4" />
|
||||
<p class="text-gray-600">Keine Ergebnisse für das ausgewählte Jahr gefunden.</p>
|
||||
<div
|
||||
v-else
|
||||
class="text-center py-12 bg-white rounded-xl shadow-lg"
|
||||
>
|
||||
<Trophy
|
||||
:size="48"
|
||||
class="text-gray-400 mx-auto mb-4"
|
||||
/>
|
||||
<p class="text-gray-600">
|
||||
Keine Ergebnisse für das ausgewählte Jahr gefunden.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Statistik -->
|
||||
<div class="mt-12 bg-gradient-to-r from-primary-600 to-primary-700 rounded-xl p-8 text-white">
|
||||
<h3 class="text-2xl font-display font-bold mb-6">Statistik</h3>
|
||||
<h3 class="text-2xl font-display font-bold mb-6">
|
||||
Statistik
|
||||
</h3>
|
||||
<div class="grid md:grid-cols-3 gap-6">
|
||||
<div class="text-center">
|
||||
<div class="text-3xl font-bold mb-2">{{ verfuegbareJahre.length }}</div>
|
||||
<div class="text-primary-100">Jahre mit Meisterschaften</div>
|
||||
<div class="text-3xl font-bold mb-2">
|
||||
{{ verfuegbareJahre.length }}
|
||||
</div>
|
||||
<div class="text-primary-100">
|
||||
Jahre mit Meisterschaften
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-3xl font-bold mb-2">{{ totalWinners }}</div>
|
||||
<div class="text-primary-100">Einzelgewinner</div>
|
||||
<div class="text-3xl font-bold mb-2">
|
||||
{{ totalWinners }}
|
||||
</div>
|
||||
<div class="text-primary-100">
|
||||
Einzelgewinner
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center">
|
||||
<div class="text-3xl font-bold mb-2">{{ totalDoubles }}</div>
|
||||
<div class="text-primary-100">Doppelgewinner</div>
|
||||
<div class="text-3xl font-bold mb-2">
|
||||
{{ totalDoubles }}
|
||||
</div>
|
||||
<div class="text-primary-100">
|
||||
Doppelgewinner
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -159,7 +209,10 @@
|
||||
<div class="mt-8 text-center">
|
||||
<div class="bg-white rounded-xl shadow-lg p-8 border-l-4 border-primary-600">
|
||||
<h3 class="text-2xl font-display font-bold text-gray-900 mb-4 flex items-center justify-center">
|
||||
<Trophy :size="32" class="text-primary-600 mr-3" />
|
||||
<Trophy
|
||||
:size="32"
|
||||
class="text-primary-600 mr-3"
|
||||
/>
|
||||
Herzlichen Glückwunsch!
|
||||
</h3>
|
||||
<p class="text-lg text-gray-700 leading-relaxed">
|
||||
@@ -176,19 +229,32 @@
|
||||
<div
|
||||
v-if="lightboxImage"
|
||||
class="fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-90 p-4"
|
||||
@click="closeLightbox"
|
||||
tabindex="0"
|
||||
@click="closeLightbox"
|
||||
@keydown="handleLightboxKeydown"
|
||||
>
|
||||
<div class="relative max-w-5xl max-h-full" @click.stop>
|
||||
<div
|
||||
class="relative max-w-5xl max-h-full"
|
||||
@click.stop
|
||||
>
|
||||
<!-- Close Button -->
|
||||
<button
|
||||
@click="closeLightbox"
|
||||
class="absolute top-4 right-4 text-white hover:text-gray-300 z-10 bg-black bg-opacity-50 rounded-full p-3"
|
||||
aria-label="Schließen"
|
||||
@click="closeLightbox"
|
||||
>
|
||||
<svg class="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
||||
<svg
|
||||
class="w-8 h-8"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M6 18L18 6M6 6l12 12"
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
@@ -196,9 +262,11 @@
|
||||
:src="`/api/personen/${lightboxImage.filename}`"
|
||||
:alt="lightboxImage.name"
|
||||
class="max-w-[90%] max-h-[90vh] object-contain mx-auto"
|
||||
/>
|
||||
>
|
||||
<div class="mt-4 text-white text-center">
|
||||
<h3 class="text-xl font-semibold">{{ lightboxImage.name }}</h3>
|
||||
<h3 class="text-xl font-semibold">
|
||||
{{ lightboxImage.name }}
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user