Verbessere die Sortierlogik in der Mitgliederliste für Namen, Nachnamen und Geburtstage mit robusteren Vergleichen
Some checks failed
Code Analysis (JS/Vue) / analyze (push) Failing after 52s

This commit is contained in:
Torsten Schulz (local)
2026-02-14 02:42:43 +01:00
parent 8f444c59eb
commit e665495003

View File

@@ -764,17 +764,45 @@ const sortedMembers = computed(() => {
if (!Array.isArray(members.value)) return [] if (!Array.isArray(members.value)) return []
const arr = [...members.value] const arr = [...members.value]
if (sortMode.value === 'name') { if (sortMode.value === 'name') {
arr.sort((a, b) => (a.name || '').localeCompare(b.name || '')) arr.sort((a, b) => {
const an = (a.name || '').toLocaleLowerCase()
const bn = (b.name || '').toLocaleLowerCase()
return an.localeCompare(bn)
})
} else if (sortMode.value === 'lastname') { } else if (sortMode.value === 'lastname') {
arr.sort((a, b) => (a.lastName || '').localeCompare(b.lastName || '')) arr.sort((a, b) => {
// Fallback: lastName, dann firstName
const al = (a.lastName || a.name?.split(' ').slice(-1)[0] || '').toLocaleLowerCase()
const bl = (b.lastName || b.name?.split(' ').slice(-1)[0] || '').toLocaleLowerCase()
if (al === bl) {
const af = (a.firstName || a.name?.split(' ')[0] || '').toLocaleLowerCase()
const bf = (b.firstName || b.name?.split(' ')[0] || '').toLocaleLowerCase()
return af.localeCompare(bf)
}
return al.localeCompare(bl)
})
} else if (sortMode.value === 'birthday') { } else if (sortMode.value === 'birthday') {
arr.sort((a, b) => { arr.sort((a, b) => {
if (!a.birthday) return 1 // Robust: akzeptiere YYYY-MM-DD, DD.MM.YYYY, ggf. nur MM-TT
if (!b.birthday) return -1 function parseBirthday(val) {
// Nur Tag und Monat vergleichen if (!val) return null
const [ay, am, ad] = a.birthday.split('-') if (val.includes('-')) {
const [by, bm, bd] = b.birthday.split('-') const parts = val.split('-')
return (am + ad).localeCompare(bm + bd) if (parts.length === 3) return { m: parts[1].padStart(2, '0'), d: parts[2].padStart(2, '0') }
} else if (val.includes('.')) {
const parts = val.split('.')
if (parts.length >= 2) return { d: parts[0].padStart(2, '0'), m: parts[1].padStart(2, '0') }
}
return null
}
const ad = parseBirthday(a.birthday)
const bd = parseBirthday(b.birthday)
if (!ad && !bd) return 0
if (!ad) return 1
if (!bd) return -1
// Monat zuerst, dann Tag
if (ad.m === bd.m) return ad.d.localeCompare(bd.d)
return ad.m.localeCompare(bd.m)
}) })
} }
return arr return arr