Add filter option for members with hall key in member management UI. Update member listing logic to reflect filtered results based on hall key status.
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 56s

This commit is contained in:
Torsten Schulz (local)
2026-03-29 15:25:27 +02:00
parent 381ec55fd1
commit 7dea265eef
2 changed files with 38 additions and 8 deletions

View File

@@ -53,6 +53,17 @@
</div>
</div>
<div class="mb-4 flex items-center">
<label class="inline-flex items-center gap-2 text-sm text-gray-700">
<input
v-model="filterHasHallKey"
type="checkbox"
class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded"
>
Nur mit Hallenschlüssel
</label>
</div>
<!-- Loading State -->
<div
v-if="isLoading"
@@ -101,7 +112,7 @@
</thead>
<tbody class="bg-white divide-y divide-gray-200">
<tr
v-for="member in members"
v-for="member in filteredMembers"
:key="member.id"
class="hover:bg-gray-50"
>
@@ -239,7 +250,7 @@
</div>
<div
v-if="members.length === 0"
v-if="filteredMembers.length === 0"
class="text-center py-12 text-gray-500"
>
Keine Mitglieder gefunden.
@@ -252,7 +263,7 @@
class="space-y-4"
>
<div
v-for="member in members"
v-for="member in filteredMembers"
:key="member.id"
class="bg-white p-6 rounded-xl shadow-lg border border-gray-100"
>
@@ -408,7 +419,7 @@
</div>
<div
v-if="members.length === 0"
v-if="filteredMembers.length === 0"
class="text-center py-12 text-gray-500"
>
Keine Mitglieder gefunden.
@@ -769,6 +780,7 @@ const showModal = ref(false)
const editingMember = ref(null)
const errorMessage = ref('')
const viewMode = ref('cards')
const filterHasHallKey = ref(false)
// Bulk import state
const showBulkImportModal = ref(false)
@@ -799,6 +811,11 @@ const canViewContactData = computed(() => {
return authStore.hasRole('vorstand')
})
const filteredMembers = computed(() => {
if (!filterHasHallKey.value) return members.value
return members.value.filter(member => member.hasHallKey)
})
const loadMembers = async () => {
isLoading.value = true
try {

View File

@@ -55,13 +55,23 @@
</div>
<!-- Sortieroptionen -->
<div class="mb-4 flex items-center space-x-2">
<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>
</div>
<label class="inline-flex items-center gap-2 text-sm text-gray-700">
<input
v-model="filterHasHallKey"
type="checkbox"
class="h-4 w-4 text-primary-600 focus:ring-primary-500 border-gray-300 rounded"
>
Nur mit Hallenschlüssel
</label>
</div>
<!-- Loading State -->
@@ -246,7 +256,7 @@
</div>
<div
v-if="members.length === 0"
v-if="sortedMembers.length === 0"
class="text-center py-12 text-gray-500"
>
Keine Mitglieder gefunden.
@@ -412,7 +422,7 @@
</div>
<div
v-if="members.length === 0"
v-if="sortedMembers.length === 0"
class="text-center py-12 text-gray-500"
>
Keine Mitglieder gefunden.
@@ -811,10 +821,13 @@
// ...existing code...
const sortMode = ref('name')
const filterHasHallKey = ref(false)
const sortedMembers = computed(() => {
if (!Array.isArray(members.value)) return []
const arr = [...members.value]
const arr = filterHasHallKey.value
? members.value.filter(member => member.hasHallKey)
: [...members.value]
if (sortMode.value === 'name') {
arr.sort((a, b) => {
// Sortiere nach Vorname Nachname (firstName lastName)