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 -->
|
||||
<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()
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user