Add Vereinsadresse to config with option to use Vorsitzender address, add full address fields for Vorstand
This commit is contained in:
@@ -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()
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user