Add Vereinsadresse to config with option to use Vorsitzender address, add full address fields for Vorstand

This commit is contained in:
Torsten Schulz (local)
2025-10-21 16:51:37 +02:00
parent c3dbaa0c95
commit 30674c1f49
3 changed files with 121 additions and 16 deletions

View File

@@ -33,6 +33,68 @@
<!-- Tab Content -->
<div class="p-8">
<!-- Vereinsdaten -->
<div v-if="activeTab === 'verein'">
<h2 class="text-2xl font-display font-bold text-gray-900 mb-6">Vereinsdaten</h2>
<div class="space-y-6">
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Vereinsname</label>
<input
v-model="config.verein.name"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div class="p-4 bg-blue-50 rounded-lg border border-blue-200">
<label class="flex items-center cursor-pointer">
<input
v-model="config.verein.useVorsitzenderAddress"
type="checkbox"
class="w-5 h-5 text-primary-600 border-gray-300 rounded focus:ring-primary-500"
/>
<span class="ml-3 text-sm font-medium text-gray-900">
Adresse des 1. Vorsitzenden als Vereinsadresse verwenden
</span>
</label>
<p class="text-xs text-gray-600 mt-2 ml-8">
Wenn deaktiviert, können Sie unten eine separate Vereinsadresse angeben.
</p>
</div>
<div v-if="!config.verein.useVorsitzenderAddress" class="p-6 bg-gray-50 rounded-lg border border-gray-200">
<h3 class="text-lg font-semibold text-gray-900 mb-4">Separate Vereinsadresse</h3>
<div class="grid sm:grid-cols-2 gap-4">
<div class="sm:col-span-2">
<label class="block text-sm font-medium text-gray-700 mb-2">Straße & Hausnummer</label>
<input
v-model="config.verein.strasse"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">PLZ</label>
<input
v-model="config.verein.plz"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Ort</label>
<input
v-model="config.verein.ort"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
</div>
</div>
</div>
</div>
<!-- Trainingszeiten -->
<div v-if="activeTab === 'training'">
<h2 class="text-2xl font-display font-bold text-gray-900 mb-6">Trainingszeiten & Trainingsort</h2>
@@ -316,7 +378,7 @@
class="p-6 bg-gray-50 rounded-lg border border-gray-200"
>
<h3 class="text-lg font-semibold text-gray-900 mb-4 capitalize">
{{ key.replace(/([A-Z])/g, ' $1').trim() }}
{{ formatPositionName(key) }}
</h3>
<div class="grid sm:grid-cols-2 gap-4">
<div>
@@ -335,6 +397,30 @@
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div class="sm:col-span-2">
<label class="block text-sm font-medium text-gray-700 mb-2">Straße & Hausnummer</label>
<input
v-model="position.strasse"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">PLZ</label>
<input
v-model="position.plz"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Ort</label>
<input
v-model="position.ort"
type="text"
class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500"
/>
</div>
<div>
<label class="block text-sm font-medium text-gray-700 mb-2">Telefon</label>
<input
@@ -399,6 +485,7 @@ const successMessage = ref('')
const activeTab = ref('training')
const config = ref({
verein: { name: '', strasse: '', plz: '', ort: '', useVorsitzenderAddress: true },
training: { ort: {}, zeiten: [] },
trainer: [],
mitgliedschaft: [],
@@ -407,6 +494,7 @@ const config = ref({
})
const tabs = [
{ id: 'verein', label: 'Verein', icon: Settings },
{ id: 'training', label: 'Training', icon: Calendar },
{ id: 'trainer', label: 'Trainer', icon: UsersIcon },
{ id: 'mitgliedschaft', label: 'Mitgliedschaft', icon: CreditCard },
@@ -489,6 +577,18 @@ const removeMembership = (index) => {
config.value.mitgliedschaft.splice(index, 1)
}
const formatPositionName = (key) => {
const names = {
'vorsitzender': '1. Vorsitzender',
'stellvertreter': 'Stellvertreter',
'kassenwart': 'Kassenwart',
'schriftfuehrer': 'Schriftführer',
'sportwart': 'Sportwart',
'jugendwart': 'Jugendwart'
}
return names[key] || key
}
onMounted(() => {
loadConfig()
})

View File

@@ -7,12 +7,18 @@
<div class="w-24 h-1 bg-primary-600 mb-8" />
<div class="bg-white p-8 rounded-xl shadow-lg space-y-6">
<div>
<div v-if="config">
<h2 class="text-xl font-display font-bold text-gray-900 mb-2">Angaben gemäß § 5 TMG</h2>
<p class="text-gray-700">
Harheimer Tischtennis-Club 1954 e. V. (HTC)<br />
In der Fuchskaut 4<br />
60437 Frankfurt am Main
{{ config.verein.name }}<br />
<template v-if="config.verein.useVorsitzenderAddress">
{{ config.vorstand.vorsitzender.strasse }}<br />
{{ config.vorstand.vorsitzender.plz }} {{ config.vorstand.vorsitzender.ort }}
</template>
<template v-else>
{{ config.verein.strasse }}<br />
{{ config.verein.plz }} {{ config.verein.ort }}
</template>
</p>
</div>