From 9eb9be73181f70514c98251541bf66f41f2fd794 Mon Sep 17 00:00:00 2001 From: Frank Agerholm Date: Sun, 25 Jan 2026 19:47:11 +0100 Subject: [PATCH] frontend: Workload pages --- frontend/app/composables/useAPI.ts | 2 +- frontend/app/layouts/default.vue | 28 +++- frontend/app/pages/login.vue | 6 +- frontend/app/pages/owners/index.vue | 20 ++- frontend/app/pages/servers/index.vue | 26 +++- frontend/app/pages/workentries/create.vue | 149 ++++++++++++++++++++ frontend/app/pages/workentries/search.vue | 159 ++++++++++++++++++++++ frontend/app/utils/auth.ts | 3 + 8 files changed, 372 insertions(+), 21 deletions(-) create mode 100644 frontend/app/pages/workentries/create.vue create mode 100644 frontend/app/pages/workentries/search.vue create mode 100644 frontend/app/utils/auth.ts diff --git a/frontend/app/composables/useAPI.ts b/frontend/app/composables/useAPI.ts index 65a6300..cb93681 100644 --- a/frontend/app/composables/useAPI.ts +++ b/frontend/app/composables/useAPI.ts @@ -26,7 +26,7 @@ export function useApi() { if (status === 401) { console.warn("API returned 401 — logging out") logout() - throw new Error("Deine Sitzung ist abgelaufen. Bitte erneut einloggen.") + return { unauthorized: true } } // 403 → keine Berechtigung diff --git a/frontend/app/layouts/default.vue b/frontend/app/layouts/default.vue index 6b9cc50..54ae58a 100644 --- a/frontend/app/layouts/default.vue +++ b/frontend/app/layouts/default.vue @@ -1,6 +1,8 @@ diff --git a/frontend/app/pages/servers/index.vue b/frontend/app/pages/servers/index.vue index 6a8ce1c..9663444 100644 --- a/frontend/app/pages/servers/index.vue +++ b/frontend/app/pages/servers/index.vue @@ -5,6 +5,7 @@ definePageMeta({ }) import { ref, onMounted } from "vue" +import { isUnauthorized } from "~/utils/auth" const { apiFetch } = useApi() @@ -49,6 +50,10 @@ async function saveEdit(serverId: number) { } }) + if (isUnauthorized(updated)) { + return updated + } + // Liste aktualisieren const idx = servers.value.findIndex(s => s.id === serverId) if (idx !== -1) servers.value[idx] = updated @@ -64,7 +69,11 @@ const owners = ref([]) async function loadOwners() { try { - owners.value = await apiFetch("/owners") + const result = await apiFetch("/owners") + if (isUnauthorized(result)) { + return result + } + owners.value = result } catch (e: any) { error.value = e.message } @@ -73,7 +82,11 @@ async function loadOwners() { async function loadServers() { loading.value = true try { - servers.value = await apiFetch("/servers") + const result = await apiFetch("/servers") + if (isUnauthorized(result)) { + return result + } + servers.value = result } catch (e: any) { error.value = e.message } finally { @@ -93,6 +106,9 @@ async function createServer() { owner_id: newServer.value.owner_id } }) + if (isUnauthorized(server)) { + return server + } servers.value.push(server) newServer.value = { hostname: "", description: "" } @@ -101,9 +117,9 @@ async function createServer() { } } -onMounted(() => { - loadOwners() - loadServers() +onMounted(async () => { + if (isUnauthorized(await loadOwners())) return + if (isUnauthorized(await loadServers())) return }) diff --git a/frontend/app/pages/workentries/create.vue b/frontend/app/pages/workentries/create.vue new file mode 100644 index 0000000..c8e990d --- /dev/null +++ b/frontend/app/pages/workentries/create.vue @@ -0,0 +1,149 @@ + + +