Enhance ESLint configuration to include support for .mjs and .cjs file types. Update ignored files patterns to ensure proper linting of project files. Refactor Vue component templates for improved readability and maintainability, including consistent formatting and structure across various components. Update error handling in save functions to prevent silent failures.
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 52s
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 52s
This commit is contained in:
@@ -75,20 +75,48 @@
|
||||
<div class="bg-white p-6 rounded-xl shadow-lg border border-gray-100">
|
||||
<div class="flex items-center mb-4">
|
||||
<div class="w-12 h-12 bg-pink-100 rounded-lg flex items-center justify-center">
|
||||
<Calendar :size="20" class="text-pink-600" />
|
||||
<Calendar
|
||||
:size="20"
|
||||
class="text-pink-600"
|
||||
/>
|
||||
</div>
|
||||
<h2 class="ml-4 text-xl font-semibold text-gray-900">Geburtstage (nächste 4 Wochen)</h2>
|
||||
<h2 class="ml-4 text-xl font-semibold text-gray-900">
|
||||
Geburtstage (nächste 4 Wochen)
|
||||
</h2>
|
||||
</div>
|
||||
<div v-if="loadingBirthdays" class="text-sm text-gray-500">Lade...</div>
|
||||
<ul v-else class="space-y-2">
|
||||
<li v-for="b in birthdays" :key="b.name + b.dayMonth" class="flex items-center justify-between p-3 border border-gray-100 rounded-lg">
|
||||
<div
|
||||
v-if="loadingBirthdays"
|
||||
class="text-sm text-gray-500"
|
||||
>
|
||||
Lade...
|
||||
</div>
|
||||
<ul
|
||||
v-else
|
||||
class="space-y-2"
|
||||
>
|
||||
<li
|
||||
v-for="b in birthdays"
|
||||
:key="b.name + b.dayMonth"
|
||||
class="flex items-center justify-between p-3 border border-gray-100 rounded-lg"
|
||||
>
|
||||
<div class="min-w-0">
|
||||
<div class="font-medium text-gray-900 truncate">{{ b.name }}</div>
|
||||
<div class="text-xs text-gray-600">{{ b.dayMonth }}</div>
|
||||
<div class="font-medium text-gray-900 truncate">
|
||||
{{ b.name }}
|
||||
</div>
|
||||
<div class="text-xs text-gray-600">
|
||||
{{ b.dayMonth }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-sm text-gray-500">
|
||||
{{ b.inDays === 0 ? 'Heute' : (b.inDays === 1 ? 'Morgen' : 'in ' + b.inDays + ' Tagen') }}
|
||||
</div>
|
||||
<div class="text-sm text-gray-500">{{ b.inDays === 0 ? 'Heute' : (b.inDays === 1 ? 'Morgen' : 'in ' + b.inDays + ' Tagen') }}</div>
|
||||
</li>
|
||||
<li v-if="birthdays.length === 0" class="text-sm text-gray-600">Keine Geburtstage in den nächsten 4 Wochen.</li>
|
||||
<li
|
||||
v-if="birthdays.length === 0"
|
||||
class="text-sm text-gray-600"
|
||||
>
|
||||
Keine Geburtstage in den nächsten 4 Wochen.
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -57,12 +57,25 @@
|
||||
<!-- Sortieroptionen -->
|
||||
<div class="mb-4 flex items-center justify-between gap-4 flex-wrap">
|
||||
<div class="flex items-center space-x-2">
|
||||
<label for="sortMode" class="text-sm text-gray-700">Sortieren nach:</label>
|
||||
<select id="sortMode" v-model="sortMode" class="px-2 py-1 border rounded">
|
||||
<option value="name">Name (Vorname Nachname)</option>
|
||||
<option value="lastname">Nachname (Nachname Vorname)</option>
|
||||
<option value="birthday">Geburtstag</option>
|
||||
</select>
|
||||
<label
|
||||
for="sortMode"
|
||||
class="text-sm text-gray-700"
|
||||
>Sortieren nach:</label>
|
||||
<select
|
||||
id="sortMode"
|
||||
v-model="sortMode"
|
||||
class="px-2 py-1 border rounded"
|
||||
>
|
||||
<option value="name">
|
||||
Name (Vorname Nachname)
|
||||
</option>
|
||||
<option value="lastname">
|
||||
Nachname (Nachname Vorname)
|
||||
</option>
|
||||
<option value="birthday">
|
||||
Geburtstag
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<label class="inline-flex items-center gap-2 text-sm text-gray-700">
|
||||
<input
|
||||
@@ -135,7 +148,10 @@
|
||||
{{ member.name }}
|
||||
</template>
|
||||
</div>
|
||||
<div v-if="member.birthday" class="text-xs text-gray-500">
|
||||
<div
|
||||
v-if="member.birthday"
|
||||
class="text-xs text-gray-500"
|
||||
>
|
||||
🎂 {{ formatBirthday(member.birthday) }}
|
||||
</div>
|
||||
<div
|
||||
@@ -283,7 +299,10 @@
|
||||
<template v-else>
|
||||
{{ member.name }}
|
||||
</template>
|
||||
<span v-if="member.birthday" class="text-xs text-gray-500 ml-2">
|
||||
<span
|
||||
v-if="member.birthday"
|
||||
class="text-xs text-gray-500 ml-2"
|
||||
>
|
||||
🎂 {{ formatBirthday(member.birthday) }}
|
||||
</span>
|
||||
</h3>
|
||||
@@ -341,30 +360,79 @@
|
||||
<div class="grid sm:grid-cols-2 gap-3 text-gray-600">
|
||||
<template v-if="!(member.showEmail && member.email) && !(member.showPhone && member.phone)">
|
||||
<div class="col-span-2 flex items-center text-gray-500 text-sm italic">
|
||||
<Mail :size="16" class="mr-2" />
|
||||
<Mail
|
||||
:size="16"
|
||||
class="mr-2"
|
||||
/>
|
||||
Kontaktdaten nur für Vorstand sichtbar
|
||||
</div>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div v-if="member.showEmail && member.email" class="flex items-center">
|
||||
<Mail :size="16" class="mr-2 text-primary-600" />
|
||||
<a :href="`mailto:${member.email}`" class="hover:text-primary-600">{{ member.email }}</a>
|
||||
<div
|
||||
v-if="member.showEmail && member.email"
|
||||
class="flex items-center"
|
||||
>
|
||||
<Mail
|
||||
:size="16"
|
||||
class="mr-2 text-primary-600"
|
||||
/>
|
||||
<a
|
||||
:href="`mailto:${member.email}`"
|
||||
class="hover:text-primary-600"
|
||||
>{{ member.email }}</a>
|
||||
</div>
|
||||
<div v-if="member.showPhone && member.phone" class="flex items-center">
|
||||
<Phone :size="16" class="mr-2 text-primary-600" />
|
||||
<a :href="`tel:${member.phone}`" class="hover:text-primary-600">{{ member.phone }}</a>
|
||||
<div
|
||||
v-if="member.showPhone && member.phone"
|
||||
class="flex items-center"
|
||||
>
|
||||
<Phone
|
||||
:size="16"
|
||||
class="mr-2 text-primary-600"
|
||||
/>
|
||||
<a
|
||||
:href="`tel:${member.phone}`"
|
||||
class="hover:text-primary-600"
|
||||
>{{ member.phone }}</a>
|
||||
</div>
|
||||
</template>
|
||||
<!-- Sichtbarkeits-Flags anzeigen -->
|
||||
<div class="col-span-2 flex items-center gap-2 mt-2 text-xs text-gray-500">
|
||||
<span v-if="member.showEmail" title="E-Mail sichtbar">📧</span>
|
||||
<span v-else title="E-Mail verborgen" class="opacity-40">📧</span>
|
||||
<span v-if="member.showPhone" title="Telefon sichtbar">📞</span>
|
||||
<span v-else title="Telefon verborgen" class="opacity-40">📞</span>
|
||||
<span v-if="member.showAddress" title="Adresse sichtbar">🏠</span>
|
||||
<span v-else title="Adresse verborgen" class="opacity-40">🏠</span>
|
||||
<span v-if="member.showBirthday" title="Geburtstag sichtbar">🎂</span>
|
||||
<span v-else title="Geburtstag verborgen" class="opacity-40">🎂</span>
|
||||
<span
|
||||
v-if="member.showEmail"
|
||||
title="E-Mail sichtbar"
|
||||
>📧</span>
|
||||
<span
|
||||
v-else
|
||||
title="E-Mail verborgen"
|
||||
class="opacity-40"
|
||||
>📧</span>
|
||||
<span
|
||||
v-if="member.showPhone"
|
||||
title="Telefon sichtbar"
|
||||
>📞</span>
|
||||
<span
|
||||
v-else
|
||||
title="Telefon verborgen"
|
||||
class="opacity-40"
|
||||
>📞</span>
|
||||
<span
|
||||
v-if="member.showAddress"
|
||||
title="Adresse sichtbar"
|
||||
>🏠</span>
|
||||
<span
|
||||
v-else
|
||||
title="Adresse verborgen"
|
||||
class="opacity-40"
|
||||
>🏠</span>
|
||||
<span
|
||||
v-if="member.showBirthday"
|
||||
title="Geburtstag sichtbar"
|
||||
>🎂</span>
|
||||
<span
|
||||
v-else
|
||||
title="Geburtstag verborgen"
|
||||
class="opacity-40"
|
||||
>🎂</span>
|
||||
</div>
|
||||
<div
|
||||
v-if="member.address"
|
||||
|
||||
@@ -98,22 +98,44 @@
|
||||
|
||||
<!-- Sichtbarkeits-Einstellungen -->
|
||||
<div class="mt-4 border-t border-gray-100 pt-4">
|
||||
<h3 class="text-sm font-medium text-gray-900 mb-2">Sichtbarkeit für andere Mitglieder</h3>
|
||||
<h3 class="text-sm font-medium text-gray-900 mb-2">
|
||||
Sichtbarkeit für andere Mitglieder
|
||||
</h3>
|
||||
<div class="flex flex-col gap-2 text-sm text-gray-700">
|
||||
<label class="inline-flex items-center">
|
||||
<input type="checkbox" class="mr-2" v-model="visibility.showEmail" :disabled="isSaving" />
|
||||
<input
|
||||
v-model="visibility.showEmail"
|
||||
type="checkbox"
|
||||
class="mr-2"
|
||||
:disabled="isSaving"
|
||||
>
|
||||
E-Mail für alle eingeloggten Mitglieder sichtbar
|
||||
</label>
|
||||
<label class="inline-flex items-center">
|
||||
<input type="checkbox" class="mr-2" v-model="visibility.showPhone" :disabled="isSaving" />
|
||||
<input
|
||||
v-model="visibility.showPhone"
|
||||
type="checkbox"
|
||||
class="mr-2"
|
||||
:disabled="isSaving"
|
||||
>
|
||||
Telefonnummer für alle eingeloggten Mitglieder sichtbar
|
||||
</label>
|
||||
<label class="inline-flex items-center">
|
||||
<input type="checkbox" class="mr-2" v-model="visibility.showAddress" :disabled="isSaving" />
|
||||
<input
|
||||
v-model="visibility.showAddress"
|
||||
type="checkbox"
|
||||
class="mr-2"
|
||||
:disabled="isSaving"
|
||||
>
|
||||
Adresse für alle eingeloggten Mitglieder sichtbar
|
||||
</label>
|
||||
<label class="inline-flex items-center">
|
||||
<input type="checkbox" class="mr-2" v-model="visibility.showBirthday" :disabled="isSaving" />
|
||||
<input
|
||||
v-model="visibility.showBirthday"
|
||||
type="checkbox"
|
||||
class="mr-2"
|
||||
:disabled="isSaving"
|
||||
>
|
||||
Geburtstag für alle eingeloggten Mitglieder sichtbar
|
||||
</label>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user