Connect Vorstand page to config and add Einstellungen to CMS overview

This commit is contained in:
Torsten Schulz (local)
2025-10-21 16:47:55 +02:00
parent d5a181e0c8
commit 228e2e9f07
40 changed files with 523 additions and 522 deletions

View File

@@ -55,6 +55,22 @@
</p>
</NuxtLink>
<!-- Einstellungen -->
<NuxtLink
to="/cms/einstellungen"
class="bg-white p-6 rounded-xl shadow-lg border border-gray-100 hover:shadow-xl transition-all group"
>
<div class="flex items-center mb-4">
<div class="w-12 h-12 bg-orange-100 rounded-lg flex items-center justify-center group-hover:bg-orange-600 transition-colors">
<Settings :size="24" class="text-orange-600 group-hover:text-white" />
</div>
<h2 class="ml-4 text-xl font-semibold text-gray-900">Einstellungen</h2>
</div>
<p class="text-gray-600">
Training, Trainer, Mitgliedschaft & Vorstand
</p>
</NuxtLink>
<!-- Benutzerverwaltung (nur für Admin) -->
<NuxtLink
v-if="authStore.role === 'admin'"
@@ -77,7 +93,7 @@
</template>
<script setup>
import { Newspaper, Calendar, Users, UserCog } from 'lucide-vue-next'
import { Newspaper, Calendar, Users, UserCog, Settings } from 'lucide-vue-next'
const authStore = useAuthStore()

View File

@@ -11,44 +11,112 @@
Unser engagiertes Vorstandsteam leitet den Harheimer TC mit Herz und Sachverstand.
</p>
<div class="grid md:grid-cols-2 gap-8 not-prose">
<div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<div v-if="config" class="grid md:grid-cols-2 gap-8 not-prose">
<!-- Vorsitzender -->
<div v-if="config.vorstand.vorsitzender.vorname" class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Vorsitzender</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">Roger Dichmann</h4>
<h4 class="text-lg font-semibold text-primary-600 mb-3">
{{ config.vorstand.vorsitzender.vorname }} {{ config.vorstand.vorsitzender.nachname }}
</h4>
<div class="space-y-1 text-gray-600">
<p>Reginastr. 46</p>
<p>60437 Frankfurt</p>
<p>Tel. 06101-9953015</p>
<p v-if="config.vorstand.vorsitzender.strasse">{{ config.vorstand.vorsitzender.strasse }}</p>
<p v-if="config.vorstand.vorsitzender.plz">{{ config.vorstand.vorsitzender.plz }} {{ config.vorstand.vorsitzender.ort }}</p>
<p v-if="config.vorstand.vorsitzender.telefon">Tel. {{ config.vorstand.vorsitzender.telefon }}</p>
<p v-if="config.vorstand.vorsitzender.email">
<a :href="`mailto:${config.vorstand.vorsitzender.email}`" class="text-primary-600 hover:underline">
{{ config.vorstand.vorsitzender.email }}
</a>
</p>
</div>
</div>
<div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Stellvertreter des Vorsitzenden</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">Jürgen Kratz</h4>
<!-- Stellvertreter -->
<div v-if="config.vorstand.stellvertreter.vorname" class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Stellvertreter</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">
{{ config.vorstand.stellvertreter.vorname }} {{ config.vorstand.stellvertreter.nachname }}
</h4>
<div class="space-y-1 text-gray-600">
<p>Bürgerstr. 68</p>
<p>60437 Frankfurt</p>
<p>Tel. 06101-43221</p>
<p v-if="config.vorstand.stellvertreter.strasse">{{ config.vorstand.stellvertreter.strasse }}</p>
<p v-if="config.vorstand.stellvertreter.plz">{{ config.vorstand.stellvertreter.plz }} {{ config.vorstand.stellvertreter.ort }}</p>
<p v-if="config.vorstand.stellvertreter.telefon">Tel. {{ config.vorstand.stellvertreter.telefon }}</p>
<p v-if="config.vorstand.stellvertreter.email">
<a :href="`mailto:${config.vorstand.stellvertreter.email}`" class="text-primary-600 hover:underline">
{{ config.vorstand.stellvertreter.email }}
</a>
</p>
</div>
</div>
<div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<!-- Kassenwart -->
<div v-if="config.vorstand.kassenwart.vorname" class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Kassenwart</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">Olaf Nüßlein</h4>
<h4 class="text-lg font-semibold text-primary-600 mb-3">
{{ config.vorstand.kassenwart.vorname }} {{ config.vorstand.kassenwart.nachname }}
</h4>
<div class="space-y-1 text-gray-600">
<p>Am Eschbachtal 52</p>
<p>60437 Frankfurt</p>
<p>Tel. 06101-47469</p>
<p v-if="config.vorstand.kassenwart.strasse">{{ config.vorstand.kassenwart.strasse }}</p>
<p v-if="config.vorstand.kassenwart.plz">{{ config.vorstand.kassenwart.plz }} {{ config.vorstand.kassenwart.ort }}</p>
<p v-if="config.vorstand.kassenwart.telefon">Tel. {{ config.vorstand.kassenwart.telefon }}</p>
<p v-if="config.vorstand.kassenwart.email">
<a :href="`mailto:${config.vorstand.kassenwart.email}`" class="text-primary-600 hover:underline">
{{ config.vorstand.kassenwart.email }}
</a>
</p>
</div>
</div>
<div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<!-- Schriftführer -->
<div v-if="config.vorstand.schriftfuehrer.vorname" class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Schriftführer</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">Jürgen Dichmann</h4>
<h4 class="text-lg font-semibold text-primary-600 mb-3">
{{ config.vorstand.schriftfuehrer.vorname }} {{ config.vorstand.schriftfuehrer.nachname }}
</h4>
<div class="space-y-1 text-gray-600">
<p>In der Fuchskaut 4</p>
<p>60437 Frankfurt</p>
<p>Tel. 06101-4992227</p>
<p v-if="config.vorstand.schriftfuehrer.strasse">{{ config.vorstand.schriftfuehrer.strasse }}</p>
<p v-if="config.vorstand.schriftfuehrer.plz">{{ config.vorstand.schriftfuehrer.plz }} {{ config.vorstand.schriftfuehrer.ort }}</p>
<p v-if="config.vorstand.schriftfuehrer.telefon">Tel. {{ config.vorstand.schriftfuehrer.telefon }}</p>
<p v-if="config.vorstand.schriftfuehrer.email">
<a :href="`mailto:${config.vorstand.schriftfuehrer.email}`" class="text-primary-600 hover:underline">
{{ config.vorstand.schriftfuehrer.email }}
</a>
</p>
</div>
</div>
<!-- Sportwart -->
<div v-if="config.vorstand.sportwart.vorname" class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Sportwart</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">
{{ config.vorstand.sportwart.vorname }} {{ config.vorstand.sportwart.nachname }}
</h4>
<div class="space-y-1 text-gray-600">
<p v-if="config.vorstand.sportwart.strasse">{{ config.vorstand.sportwart.strasse }}</p>
<p v-if="config.vorstand.sportwart.plz">{{ config.vorstand.sportwart.plz }} {{ config.vorstand.sportwart.ort }}</p>
<p v-if="config.vorstand.sportwart.telefon">Tel. {{ config.vorstand.sportwart.telefon }}</p>
<p v-if="config.vorstand.sportwart.email">
<a :href="`mailto:${config.vorstand.sportwart.email}`" class="text-primary-600 hover:underline">
{{ config.vorstand.sportwart.email }}
</a>
</p>
</div>
</div>
<!-- Jugendwart -->
<div v-if="config.vorstand.jugendwart.vorname" class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
<h3 class="text-xl font-display font-bold text-gray-900 mb-2">Jugendwart</h3>
<h4 class="text-lg font-semibold text-primary-600 mb-3">
{{ config.vorstand.jugendwart.vorname }} {{ config.vorstand.jugendwart.nachname }}
</h4>
<div class="space-y-1 text-gray-600">
<p v-if="config.vorstand.jugendwart.strasse">{{ config.vorstand.jugendwart.strasse }}</p>
<p v-if="config.vorstand.jugendwart.plz">{{ config.vorstand.jugendwart.plz }} {{ config.vorstand.jugendwart.ort }}</p>
<p v-if="config.vorstand.jugendwart.telefon">Tel. {{ config.vorstand.jugendwart.telefon }}</p>
<p v-if="config.vorstand.jugendwart.email">
<a :href="`mailto:${config.vorstand.jugendwart.email}`" class="text-primary-600 hover:underline">
{{ config.vorstand.jugendwart.email }}
</a>
</p>
</div>
</div>
</div>
@@ -58,6 +126,23 @@
</template>
<script setup>
import { ref, onMounted } from 'vue'
const config = ref(null)
const loadConfig = async () => {
try {
const response = await $fetch('/api/config')
config.value = response.config
} catch (error) {
console.error('Fehler beim Laden der Config:', error)
}
}
onMounted(() => {
loadConfig()
})
useHead({
title: 'Vorstand - Harheimer TC',
})