feat(queue): erweiterte Queue mit Cron-Jobs + Tasks, Prioritäten, Delete/Priority API
CI - Build & Test / Backend (.NET) (push) Successful in 26s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 15s
CI - Build & Test / Security Check (push) Successful in 3s

This commit is contained in:
2026-06-11 15:58:12 +02:00
parent 068b0d31b8
commit 5fb62bef8a
5 changed files with 273 additions and 15 deletions
@@ -8,6 +8,7 @@ import {
ArrowDown,
Trash2,
Zap,
RefreshCw,
} from '@lucide/vue'
import type { QueueItem } from '../../composables/useDashboardData'
import Button from '@/components/ui/button/Button.vue'
@@ -107,6 +108,7 @@ function onDragEnd(): void {
>
<div class="queue-item-body">
<div class="queue-item-head">
<span class="queue-source-badge" :class="item.source">{{ item.source }}</span>
<Badge
variant="outline"
class="text-[7px] font-bold uppercase tracking-wider py-0 px-1.5 border"
@@ -124,8 +126,8 @@ function onDragEnd(): void {
</div>
<div class="queue-actions">
<Button variant="ghost" size="icon" class="h-5 w-5 text-[#6b7385] hover:text-[#e8eaf0]" title="Execute now" @click.stop="emit('executeNow', item.id)">
<Zap :size="12" />
<Button variant="ghost" size="icon" class="h-5 w-5 text-[#6b7385] hover:text-[#e8eaf0]" title="Cycle priority" @click.stop="emit('changePriority', item.id, item.priority === 'high' ? 'medium' : item.priority === 'medium' ? 'low' : 'high')">
<RefreshCw :size="12" />
</Button>
<Button variant="ghost" size="icon" class="h-5 w-5 text-[#6b7385] hover:text-[#e8eaf0]" title="Move up" :disabled="idx === 0" @click.stop="emit('moveUp', item.id)">
<ArrowUp :size="12" />
@@ -257,6 +259,27 @@ function onDragEnd(): void {
color: #6b7385;
}
/* Source badge */
.queue-source-badge {
font-size: 7px;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
padding: 0 4px;
border-radius: 3px;
line-height: 14px;
}
.queue-source-badge.cron {
color: #22c55e;
background: rgba(34, 197, 94, 0.1);
border: 1px solid rgba(34, 197, 94, 0.2);
}
.queue-source-badge.task {
color: #a78bfa;
background: rgba(167, 139, 250, 0.1);
border: 1px solid rgba(167, 139, 250, 0.2);
}
/* Transition */
.queue-expand-enter-active,
.queue-expand-leave-active {