Improve admin navigation and local API reachability

This commit is contained in:
AzuTear
2026-06-17 13:24:41 +02:00
parent 953257bcef
commit 4a211189f0
11 changed files with 330 additions and 23 deletions
@@ -2,7 +2,9 @@
import { computed } from 'vue'
import Column from 'primevue/column'
import DataTable from 'primevue/datatable'
import { RouterLink } from 'vue-router'
import AdminPageHeader from '../../components/admin/AdminPageHeader.vue'
import Card from '../../components/ui/Card.vue'
import { useAwardsStore } from '../../stores/awards'
@@ -11,10 +13,55 @@ const store = useAwardsStore()
const metrics = computed(() => store.admin.metrics)
const activities = computed(() => store.admin.activities)
const topCategories = computed(() => store.admin.topCategories)
const quickActions = computed(() => [
{
label: 'Offene Reviews',
value: store.adminSeasonDetail.pendingNominations.length,
to: '/admin/reviews',
hint: 'Freitext-Nominierungen bearbeiten',
},
{
label: 'Offene Risk Flags',
value: store.admin.riskFlags.length,
to: '/admin/risk',
hint: 'auffaellige Muster pruefen',
},
{
label: 'Kategorien pflegen',
value: store.adminSeasonDetail.categories.length,
to: '/admin/seasons',
hint: 'Texte, Limits und Sortierung',
},
{
label: 'Kandidatenbasis',
value: store.adminSeasonDetail.candidates.length,
to: '/admin/candidates',
hint: 'Kandidaten schnell aktualisieren',
},
])
</script>
<template>
<div class="space-y-6">
<AdminPageHeader
eyebrow="Dashboard"
title="Was braucht gerade Aufmerksamkeit?"
description="Das Dashboard zeigt dir zuerst die offenen Arbeitsstapel und fuehrt dich mit Quick Actions direkt in den passenden Bereich."
/>
<div class="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
<RouterLink
v-for="item in quickActions"
:key="item.label"
:to="item.to"
class="block rounded-[28px] border border-violet-100 bg-white/80 p-6 text-slate-800 shadow-[0_18px_50px_rgba(168,145,214,0.1)] transition hover:-translate-y-0.5 hover:border-violet-200 hover:bg-violet-50/50"
>
<p class="text-xs font-semibold uppercase tracking-[0.22em] text-violet-500">{{ item.label }}</p>
<strong class="mt-4 block text-4xl text-violet-800">{{ item.value }}</strong>
<p class="mt-2 text-sm leading-6 text-slate-500">{{ item.hint }}</p>
</RouterLink>
</div>
<div class="grid gap-5 lg:grid-cols-4">
<Card
v-for="metric in metrics"