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

This commit is contained in:
Torsten Schulz (local)
2025-12-20 10:17:16 +01:00
parent 861802b716
commit b20b89d333
72 changed files with 5338 additions and 2008 deletions

View File

@@ -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>