From 4e90f6f7b22dc550c572e87f9b40d3fdc81e3d4e Mon Sep 17 00:00:00 2001 From: Ricardo Gonzalez Date: Thu, 28 May 2026 23:49:41 -0500 Subject: [PATCH] users: AG Grid reemplazado por tabla nativa paginada + QA indicators - UsersView: tabla nativa con busqueda, paginacion (15/page), iniciales - UsersView: eliminada dependencia ag-grid (mantenida en bundle por otros modulos) - DashboardView: QA metrics con desglose auto/parcial/manual - DashboardView: seccion expandible con planes QA detallados - qa-analyzer: fix field name automatizable - ToDo: K-09 eliminada --- src/services/qa-analyzer.ts | 3 +- src/views/DashboardView.vue | 64 +++++++++++- src/views/UsersView.vue | 203 +++++++++++++++++++++--------------- 3 files changed, 182 insertions(+), 88 deletions(-) diff --git a/src/services/qa-analyzer.ts b/src/services/qa-analyzer.ts index f143925..70db9fb 100644 --- a/src/services/qa-analyzer.ts +++ b/src/services/qa-analyzer.ts @@ -4,10 +4,11 @@ import db from '@/services/db' export interface QATestCase { type: string description: string - automatable: 'SÍ' | 'PARCIAL' | 'MANUAL' + automatizable: string tool: string } + export interface HUQAPlan { huTitle: string huId: string diff --git a/src/views/DashboardView.vue b/src/views/DashboardView.vue index bca73e4..bb62638 100644 --- a/src/views/DashboardView.vue +++ b/src/views/DashboardView.vue @@ -4,7 +4,7 @@ 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, Info, AlertTriangle, Plus, Brain, Sparkles, Loader2, CheckCircle2, XCircle, Send } from 'lucide-vue-next' +import { Activity, FileText, Layers, Clock, Info, AlertTriangle, Plus, Brain, Sparkles, Loader2, CheckCircle2, XCircle, Send, ChevronDown } from 'lucide-vue-next' import { Button } from '@/components/ui/button' import HuDrafts from '@/components/HuDrafts.vue' import AiProjectChat from '@/components/AiProjectChat.vue' @@ -38,6 +38,22 @@ const qaPlans = ref([]) const generatingQA = ref(null) const expandedQA = ref(null) +const qaMetrics = computed(() => { + const plans = qaPlans.value + let auto = 0, manual = 0, parcial = 0, totalCases = 0 + for (const p of plans) { + const plan = parseQAPlan(p) + if (!plan) continue + for (const tc of plan.testCases) { + totalCases++ + if (tc.automatizable === 'SÍ') auto++ + else if (tc.automatizable === 'MANUAL') manual++ + else parcial++ + } + } + return { total: plans.length, auto, manual, parcial, totalCases } +}) + async function loadQAPlans(projectId: number) { qaPlans.value = await getQAPlans(projectId) } @@ -58,6 +74,10 @@ function parseQAPlan(record: any): HUQAPlan | null { try { return JSON.parse(record.plan) as HUQAPlan } catch { return null } } +function toggleQAExpand(id: string) { + expandedQA.value = expandedQA.value === id ? null : id +} + function qaBadgeColor(a: string) { if (a === 'SÍ') return 'text-green-600 border-green-300' if (a === 'MANUAL') return 'text-red-600 border-red-300' @@ -284,8 +304,13 @@ const statusLabel = (status: unknown) => { -
{{ qaPlans.length }}
-

Planes QA generados

+
{{ qaMetrics.total }}
+

Planes QA · {{ qaMetrics.totalCases }} casos

+
+ {{ qaMetrics.auto }} auto + {{ qaMetrics.parcial }} parcial + {{ qaMetrics.manual }} manual +
@@ -441,6 +466,39 @@ const statusLabel = (status: unknown) => { + + + + + + Planes QA · {{ qaPlans.length }} + + + +
+
+ {{ p.huTitle }} + +
+
+ +
+
+
+
+ diff --git a/src/views/UsersView.vue b/src/views/UsersView.vue index 8b0ce82..788cdd5 100644 --- a/src/views/UsersView.vue +++ b/src/views/UsersView.vue @@ -1,13 +1,20 @@