From 2073d936e230c6c64e694645dabc1aab944be2a8 Mon Sep 17 00:00:00 2001 From: Ricardo Gonzalez Date: Fri, 29 May 2026 22:38:52 -0500 Subject: [PATCH] Epics table: barra de progreso (% HUs completadas) + removida columna Asignado MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - epicProgress computed: agrupa HUs por _epicCode, calcula % completadas - getEpicProgress(epic): resuelve progreso para cada épica - Barra visual con colores: verde=100%, azul=>0%, gris=0% --- src/views/DashboardView.vue | 43 ++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/src/views/DashboardView.vue b/src/views/DashboardView.vue index ccb540b..874234a 100644 --- a/src/views/DashboardView.vue +++ b/src/views/DashboardView.vue @@ -539,6 +539,32 @@ watch( { immediate: true } ) +// ─── Epic progress bar ─────────────────────────────── +const epicProgress = computed(() => { + const map = new Map() + for (const hu of workItems.userStories) { + const epicCode = hu._epicCode || '' + if (!epicCode) continue + if (!map.has(epicCode)) map.set(epicCode, { total: 0, done: 0 }) + const entry = map.get(epicCode)! + entry.total++ + const s = String(hu.status ?? '').toLowerCase() + if (['done', 'completed', 'closed', 'finalizado', '5', 'true'].includes(s)) { + entry.done++ + } + } + const result: Record = {} + for (const [code, { total, done }] of map) { + result[code] = total > 0 ? Math.round((done / total) * 100) : 0 + } + return result +}) + +function getEpicProgress(epic: any): number { + const code = epic._epicCode + return code ? epicProgress.value[code] ?? 0 : 0 +} + const statusVariant = (status: unknown) => { const s = String(status ?? '').toLowerCase() if (['done', 'completed', 'closed', 'finalizado'].includes(s)) return 'secondary' @@ -771,8 +797,7 @@ const statusLabel = (status: unknown) => { {{ t('users.role') }} {{ t('dashboard.title') }} Desc - {{ t('dashboard.assignedTo') }} - {{ t('dashboard.status') }} + Progreso @@ -792,9 +817,17 @@ const statusLabel = (status: unknown) => { - - - {{ statusLabel(epic.status || '') }} + +
+
+
+
+ {{ getEpicProgress(epic) }}% +