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 --> <!-- Tab Content -->
<div class="p-8"> <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 --> <!-- Trainingszeiten -->
<div v-if="activeTab === 'training'"> <div v-if="activeTab === 'training'">
<h2 class="text-2xl font-display font-bold text-gray-900 mb-6">Trainingszeiten & Trainingsort</h2> <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" class="p-6 bg-gray-50 rounded-lg border border-gray-200"
> >
<h3 class="text-lg font-semibold text-gray-900 mb-4 capitalize"> <h3 class="text-lg font-semibold text-gray-900 mb-4 capitalize">
{{ key.replace(/([A-Z])/g, ' $1').trim() }} {{ formatPositionName(key) }}
</h3> </h3>
<div class="grid sm:grid-cols-2 gap-4"> <div class="grid sm:grid-cols-2 gap-4">
<div> <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" 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 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> <div>
<label class="block text-sm font-medium text-gray-700 mb-2">Telefon</label> <label class="block text-sm font-medium text-gray-700 mb-2">Telefon</label>
<input <input
@@ -399,6 +485,7 @@ const successMessage = ref('')
const activeTab = ref('training') const activeTab = ref('training')
const config = ref({ const config = ref({
verein: { name: '', strasse: '', plz: '', ort: '', useVorsitzenderAddress: true },
training: { ort: {}, zeiten: [] }, training: { ort: {}, zeiten: [] },
trainer: [], trainer: [],
mitgliedschaft: [], mitgliedschaft: [],
@@ -407,6 +494,7 @@ const config = ref({
}) })
const tabs = [ const tabs = [
{ id: 'verein', label: 'Verein', icon: Settings },
{ id: 'training', label: 'Training', icon: Calendar }, { id: 'training', label: 'Training', icon: Calendar },
{ id: 'trainer', label: 'Trainer', icon: UsersIcon }, { id: 'trainer', label: 'Trainer', icon: UsersIcon },
{ id: 'mitgliedschaft', label: 'Mitgliedschaft', icon: CreditCard }, { id: 'mitgliedschaft', label: 'Mitgliedschaft', icon: CreditCard },
@@ -489,6 +577,18 @@ const removeMembership = (index) => {
config.value.mitgliedschaft.splice(index, 1) 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(() => { onMounted(() => {
loadConfig() loadConfig()
}) })

View File

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

View File

@@ -94,30 +94,30 @@
"email": "j.dichmann@gmx.de" "email": "j.dichmann@gmx.de"
}, },
"stellvertreter": { "stellvertreter": {
"vorname": "", "vorname": "Jürgen",
"nachname": "", "nachname": "Kratz",
"strasse": "", "strasse": "",
"plz": "", "plz": "",
"ort": "", "ort": "",
"telefon": "", "telefon": "06101-43221",
"email": "" "email": ""
}, },
"kassenwart": { "kassenwart": {
"vorname": "", "vorname": "Olaf",
"nachname": "", "nachname": "Nüßlein",
"strasse": "", "strasse": "",
"plz": "", "plz": "",
"ort": "", "ort": "",
"telefon": "", "telefon": "06101-47469",
"email": "" "email": ""
}, },
"schriftfuehrer": { "schriftfuehrer": {
"vorname": "", "vorname": "Jürgen",
"nachname": "", "nachname": "Dichmann",
"strasse": "", "strasse": "",
"plz": "", "plz": "",
"ort": "", "ort": "",
"telefon": "", "telefon": "06101-4992227",
"email": "" "email": ""
}, },
"sportwart": { "sportwart": {
@@ -146,5 +146,4 @@
"email": "tsschulz@tsschulz.de" "email": "tsschulz@tsschulz.de"
} }
} }
} }