diff --git a/package.json b/package.json index f7fe6c3..4d2e6f0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "harheimertc-website", - "version": "1.1.2", + "version": "1.1.3", "description": "Moderne Webseite für den Harheimer Tischtennis Club", "private": true, "type": "module", diff --git a/pages/cms/benutzer.vue b/pages/cms/benutzer.vue index 28dce73..e7ad38b 100644 --- a/pages/cms/benutzer.vue +++ b/pages/cms/benutzer.vue @@ -106,9 +106,31 @@
|
- {{ user.name }}
+ {{ getDisplayName(user) }}
|
@@ -253,7 +275,7 @@
>
- Rollen bearbeiten: {{ editingUser.name }} + Rollen bearbeiten: {{ getDisplayName(editingUser) }}
@@ -350,6 +372,7 @@ const errorMessage = ref('')
const showRoleModal = ref(false)
const editingUser = ref(null)
const selectedRoles = ref([])
+const nameSortMode = ref('firstLast')
const pendingUsers = computed(() => {
return allUsers.value
@@ -364,6 +387,61 @@ const activeUsers = computed(() => {
return allUsers.value.filter(u => u.active === true)
})
+const splitNameParts = (name = '') => {
+ const trimmed = (name || '').trim()
+ if (!trimmed) {
+ return { firstName: '', lastName: '' }
+ }
+
+ if (trimmed.includes(',')) {
+ const [lastNameRaw, ...firstNameRaw] = trimmed.split(',')
+ return {
+ firstName: firstNameRaw.join(',').trim(),
+ lastName: (lastNameRaw || '').trim()
+ }
+ }
+
+ const parts = trimmed.split(/\s+/).filter(Boolean)
+ if (parts.length <= 1) {
+ return { firstName: parts[0] || '', lastName: '' }
+ }
+
+ return {
+ firstName: parts[0],
+ lastName: parts.slice(1).join(' ')
+ }
+}
+
+const getDisplayName = (user) => {
+ const { firstName, lastName } = splitNameParts(user?.name || '')
+
+ if (nameSortMode.value === 'lastFirst') {
+ if (!lastName) {
+ return firstName
+ }
+ return `${lastName}, ${firstName}`.trim()
+ }
+
+ return `${firstName} ${lastName}`.trim()
+}
+
+const sortedActiveUsers = computed(() => {
+ return [...activeUsers.value].sort((a, b) => {
+ const nameA = splitNameParts(a.name)
+ const nameB = splitNameParts(b.name)
+
+ if (nameSortMode.value === 'lastFirst') {
+ const lastNameCompare = nameA.lastName.localeCompare(nameB.lastName, 'de', { sensitivity: 'base' })
+ if (lastNameCompare !== 0) return lastNameCompare
+ return nameA.firstName.localeCompare(nameB.firstName, 'de', { sensitivity: 'base' })
+ }
+
+ const firstNameCompare = nameA.firstName.localeCompare(nameB.firstName, 'de', { sensitivity: 'base' })
+ if (firstNameCompare !== 0) return firstNameCompare
+ return nameA.lastName.localeCompare(nameB.lastName, 'de', { sensitivity: 'base' })
+ })
+})
+
const formatDate = (dateString) => {
return new Date(dateString).toLocaleString('de-DE', {
year: 'numeric',
|