hierarchy: parsear nomenclatura [E05-F04-U02], badges de tipo en dashboard, clean title

This commit is contained in:
2026-05-27 21:59:37 -05:00
parent 9ae2af3ea2
commit cf770a6a44
4 changed files with 195 additions and 30 deletions
+20 -4
View File
@@ -3,6 +3,7 @@ import { computed, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { useProjectsStore } from '@/stores/projects'
import { useWorkItemsStore } from '@/stores/workitems'
import { getTypeLabel, getTypeColor, getTypeIcon } from '@/services/hierarchy'
import { Activity, FileText, Layers, Clock } from 'lucide-vue-next'
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'
import { Badge } from '@/components/ui/badge'
@@ -152,10 +153,16 @@ const statusLabel = (status: unknown) => {
<CardHeader class="p-4 pb-2">
<div class="flex items-start justify-between gap-2">
<div class="flex items-center gap-2 min-w-0">
<span
class="inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-bold"
:class="getTypeColor(epic._itemType)"
>
{{ getTypeIcon(epic._itemType) }} {{ getTypeLabel(epic._itemType) }}
</span>
<span class="font-mono text-xs text-muted-foreground flex-shrink-0">
{{ epic.code || `EP-${epic.id}` }}
</span>
<CardTitle class="text-sm truncate"> {{ epic.name || epic.title || t('dashboard.epicFallback', { id: epic.id }) }}</CardTitle>
<CardTitle class="text-sm truncate">{{ epic._cleanName || epic.name || epic.title || t('dashboard.epicFallback', { id: epic.id }) }}</CardTitle>
</div>
<Badge :variant="statusVariant(epic.status || '')" class="text-xs flex-shrink-0">
{{ statusLabel(epic.status || '') }}
@@ -182,7 +189,8 @@ const statusLabel = (status: unknown) => {
<Table v-if="workItems.userStories.length > 0">
<TableHeader>
<TableRow>
<TableHead class="w-[100px]">{{ t('dashboard.code') }}</TableHead>
<TableHead class="w-[80px]">{{ t('dashboard.code') }}</TableHead>
<TableHead class="w-[60px]">{{ t('users.role') }}</TableHead>
<TableHead>{{ t('dashboard.title') }}</TableHead>
<TableHead class="w-[110px]">{{ t('dashboard.status') }}</TableHead>
<TableHead class="w-[90px] text-right">{{ t('dashboard.priority') }}</TableHead>
@@ -193,8 +201,16 @@ const statusLabel = (status: unknown) => {
<TableCell class="font-mono text-xs text-muted-foreground">
{{ hu.code || `HU-${hu.id}` }}
</TableCell>
<TableCell class="text-sm max-w-[300px] truncate">
{{ hu.title }}
<TableCell>
<span
class="inline-flex items-center rounded px-1 py-0.5 text-[10px] font-bold"
:class="getTypeColor(hu._itemType)"
>
{{ getTypeLabel(hu._itemType) }}
</span>
</TableCell>
<TableCell class="text-sm max-w-[280px] truncate">
{{ hu._cleanTitle || hu.title }}
</TableCell>
<TableCell>
<Badge :variant="statusVariant(hu.status || '')" class="text-xs capitalize">