feat: Dashboard-Enhancements – Filter, Checkboxen, Animationen
CI - Build & Test / Backend (.NET) (push) Successful in 25s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 17s
CI - Build & Test / Security Check (push) Successful in 3s

- IrisPanel: Task-Zahlen aus OperationsStore, Suggestions als Array, Chat via console.log
- OperationsFeed: Filter-Pills filtern Feed-Items, TransitionGroup-Animationen
- AgendaPanel: Checkboxen mit localStorage-Persistenz (nexus-agenda-done)
- ActiveInitiatives: Cards hover-scale, Klick-Handler, Progress-Bars animiert
- RecentlyFinished: Chips klickbar + a11y (role, tabindex, keyup)
- DashboardView: fade-in Animation, Custom-Scrollbar
- VERSION: 0.1.0 initial
- Deploy-Workflow: Version-Bump-Semantik (major=x.0.0, minor=1.x.0, patch=1.0.x)
This commit is contained in:
2026-06-09 19:51:25 +02:00
parent 635e43457d
commit 13d4c2f157
6 changed files with 171 additions and 39 deletions
@@ -1,5 +1,5 @@
<script setup lang="ts">
import { ref } from 'vue'
import { ref, onMounted } from 'vue'
import { CheckCircle2, Circle, AlertTriangle } from '@lucide/vue'
interface AgendaItem {
@@ -9,6 +9,8 @@ interface AgendaItem {
overdue?: boolean
}
const STORAGE_KEY = 'nexus-agenda-done'
const agendaToday = ref<AgendaItem[]>([
{ text: 'Teammeeting', time: '14:00' },
{ text: 'Deutsch lernen', time: '18:00' },
@@ -25,9 +27,48 @@ const agendaOverdue = ref<AgendaItem[]>([
{ text: 'Hangfire konfigurieren', overdue: true },
])
function loadDoneStates() {
try {
const raw = localStorage.getItem(STORAGE_KEY)
if (!raw) return
const keys: string[] = JSON.parse(raw)
const set = new Set(keys)
const sections = [
{ items: agendaToday.value, prefix: 'today' },
{ items: agendaTomorrow.value, prefix: 'tomorrow' },
{ items: agendaOverdue.value, prefix: 'overdue' },
]
for (const { items, prefix } of sections) {
items.forEach((item, i) => {
if (set.has(`${prefix}-${i}`)) item.done = true
})
}
} catch { /* ignore malformed storage */ }
}
function saveDoneStates() {
const keys: string[] = []
const sections = [
{ items: agendaToday.value, prefix: 'today' },
{ items: agendaTomorrow.value, prefix: 'tomorrow' },
{ items: agendaOverdue.value, prefix: 'overdue' },
]
for (const { items, prefix } of sections) {
items.forEach((item, i) => {
if (item.done) keys.push(`${prefix}-${i}`)
})
}
localStorage.setItem(STORAGE_KEY, JSON.stringify(keys))
}
function toggleAgendaItem(item: AgendaItem) {
item.done = !item.done
saveDoneStates()
}
onMounted(() => {
loadDoneStates()
})
</script>
<template>