Iterate admin pages with smarter workflows
This commit is contained in:
@@ -21,10 +21,28 @@ const clipCandidates = computed(() => {
|
||||
.filter((candidate) => !search || [candidate.displayName, candidate.channelSlug, candidate.platform].join(' ').toLowerCase().includes(search))
|
||||
})
|
||||
const candidateCategory = computed(() => Object.fromEntries(seasonDetail.value.categories.map((category) => [category.id, category.name])))
|
||||
const clipReviewCount = computed(() => seasonDetail.value.pendingNominations.filter((nomination) => clipCategoryIds.value.has(nomination.categoryId)).length)
|
||||
const clipReadiness = computed(() => [
|
||||
{
|
||||
label: 'Clip-Kategorie existiert',
|
||||
done: clipCategories.value.length > 0,
|
||||
note: clipCategories.value.length > 0 ? `${clipCategories.value.length} Clip-Kategorien gefunden.` : 'Lege mindestens eine Clip-Kategorie an.',
|
||||
},
|
||||
{
|
||||
label: 'Kandidaten vorhanden',
|
||||
done: clipCandidates.value.length > 0,
|
||||
note: clipCandidates.value.length > 0 ? `${clipCandidates.value.length} Clip-Kandidaten gepflegt.` : 'Noch keine Clip-Kandidaten vorhanden.',
|
||||
},
|
||||
{
|
||||
label: 'Review-Restbestand',
|
||||
done: clipReviewCount.value === 0,
|
||||
note: clipReviewCount.value === 0 ? 'Keine offenen Clip-Reviews.' : `${clipReviewCount.value} Clip-Reviews offen.`,
|
||||
},
|
||||
])
|
||||
const stats = computed(() => [
|
||||
{ label: 'Clip-Kategorien', value: clipCategories.value.length, icon: Tags },
|
||||
{ label: 'Clip-Kandidaten', value: clipCandidates.value.length, icon: Users },
|
||||
{ label: 'Offene Reviews', value: seasonDetail.value.pendingNominations.filter((nomination) => clipCategoryIds.value.has(nomination.categoryId)).length, icon: Film },
|
||||
{ label: 'Offene Reviews', value: clipReviewCount.value, icon: Film },
|
||||
])
|
||||
</script>
|
||||
|
||||
@@ -58,16 +76,17 @@ const stats = computed(() => [
|
||||
<p class="text-xs font-semibold uppercase tracking-[0.24em] text-violet-500">Workflow</p>
|
||||
<h2 class="mt-2 font-[Cormorant_Garamond] text-4xl text-violet-800">Was hier geprueft wird</h2>
|
||||
<div class="mt-5 space-y-3">
|
||||
<div class="rounded-2xl border border-violet-100 bg-violet-50/50 p-4">
|
||||
<p class="font-semibold text-slate-900">1. Clip-Kategorien vorhanden?</p>
|
||||
<p class="mt-1 text-sm leading-6 text-slate-500">Kategorien mit “Clip” im Namen werden hier automatisch gebuendelt.</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-violet-100 bg-white/90 p-4">
|
||||
<p class="font-semibold text-slate-900">2. Kandidaten gepflegt?</p>
|
||||
<p class="mt-1 text-sm leading-6 text-slate-500">Ohne Kandidaten kann die Community spaeter keine saubere Clip-Auswahl treffen.</p>
|
||||
<div
|
||||
v-for="item in clipReadiness"
|
||||
:key="item.label"
|
||||
class="rounded-2xl border p-4"
|
||||
:class="item.done ? 'border-emerald-100 bg-emerald-50/40' : 'border-amber-100 bg-amber-50/60'"
|
||||
>
|
||||
<p class="font-semibold text-slate-900">{{ item.label }}</p>
|
||||
<p class="mt-1 text-sm leading-6 text-slate-500">{{ item.note }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-amber-100 bg-amber-50/70 p-4">
|
||||
<p class="font-semibold text-amber-800">3. Backend-Ausbau offen</p>
|
||||
<p class="font-semibold text-amber-800">Naechster Backend-Ausbau</p>
|
||||
<p class="mt-1 text-sm leading-6 text-amber-700">Fuer echte Clip-Moderation brauchen wir spaeter eine ClipSubmission-Admin-API mit Status, Duplikaten und Entscheidung.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user