From d0da7962e2bd8d2692d2e314af02b2025914e6b1 Mon Sep 17 00:00:00 2001 From: tdv Date: Thu, 4 Dec 2025 17:24:24 +0200 Subject: [PATCH] fixed update user dto for proper role handling and changed back button in user settings --- .../src/customcompometns/Admincomponent.vue | 20 +++++++++++++++++++ .../src/customcompometns/EditUserDialog.vue | 2 +- .../src/customcompometns/UserSettings.vue | 14 +++++++++---- server/internal/dto/user.go | 2 +- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/management-ui/src/customcompometns/Admincomponent.vue b/management-ui/src/customcompometns/Admincomponent.vue index 74dc469..86a2081 100644 --- a/management-ui/src/customcompometns/Admincomponent.vue +++ b/management-ui/src/customcompometns/Admincomponent.vue @@ -52,6 +52,24 @@ function usernamesFromIds(ids: string[]): string { return ids.map(id => idToName.value.get(String(id))).filter(Boolean).join(', ') } +// ---- NEW: immediate UI updates for Users table ---- +function handleUserUpdated( + row: Users, + payload: { id: string; username: string; role: 'admin' | 'user' } +) { + const idNum = Number(payload.id || row.id) + user_data.value = user_data.value.map(u => + u.id === idNum + ? { ...u, username: payload.username, role: payload.role } + : u + ) +} + +function handleUserDeleted(row: Users) { + const idNum = row.id + user_data.value = user_data.value.filter(u => u.id !== idNum) +} + // ---------------- Devices ---------------- type ApiDeviceUser = { id: number; username: string; role: string } type ApiDevice = { guid: string; name: string; users?: ApiDeviceUser[] } @@ -201,6 +219,8 @@ onBeforeUnmount(() => { :columns="user_columns" :data="user_data" :dropdownComponent="AdminUserDropdonw" + @row-updated="handleUserUpdated" + @row-deleted="handleUserDeleted" /> diff --git a/management-ui/src/customcompometns/EditUserDialog.vue b/management-ui/src/customcompometns/EditUserDialog.vue index 9130178..b6190de 100644 --- a/management-ui/src/customcompometns/EditUserDialog.vue +++ b/management-ui/src/customcompometns/EditUserDialog.vue @@ -92,7 +92,7 @@ function onSave() {
- +
diff --git a/management-ui/src/customcompometns/UserSettings.vue b/management-ui/src/customcompometns/UserSettings.vue index 40de69a..0b9a7a5 100644 --- a/management-ui/src/customcompometns/UserSettings.vue +++ b/management-ui/src/customcompometns/UserSettings.vue @@ -10,6 +10,7 @@ import { computed, onMounted, ref } from 'vue'; import { useRouter } from 'vue-router'; import type { Users } from '@/lib/interfaces'; import { api } from '@/lib/api'; +import { X } from 'lucide-vue-next'; const mode = useColorMode() const modeLabel = computed(() => { @@ -88,11 +89,16 @@ function goBack() {
- - Settings - +
+ + Settings + + +
+
-
diff --git a/server/internal/dto/user.go b/server/internal/dto/user.go index 8e2703f..69ea8b5 100644 --- a/server/internal/dto/user.go +++ b/server/internal/dto/user.go @@ -23,7 +23,7 @@ type CreateUserDto struct { type UpdateUserDto struct { Username string `json:"username,omitempty"` Password string `json:"password,omitempty"` - Role string `json:"role,omitempty" binding:"oneof=admin user"` + Role string `json:"role,omitempty"` } func MapUser(u models.User) UserDto {