From 0fbc11e8f936e1e6354c180c9502e0113301cfd3 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Sat, 18 Oct 2025 17:22:18 -0600 Subject: [PATCH] =?UTF-8?q?Feat:=20Implementar=20filtrado=20de=20muestras?= =?UTF-8?q?=20en=20tab=20Impresi=C3=B3n=20Global?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Crear subcategorías dinámicas basadas en las muestras de la sesión - Los filtros en Impresión Global ahora controlan qué muestras se muestran - Filtrar accordionItems según subcategorías activas en impresion-global - Cada muestra aparece como opción de filtro con su nombre o "Muestra #" --- nuxt4/app/pages/cata/sesion.vue | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/nuxt4/app/pages/cata/sesion.vue b/nuxt4/app/pages/cata/sesion.vue index fb96b16..c421bad 100644 --- a/nuxt4/app/pages/cata/sesion.vue +++ b/nuxt4/app/pages/cata/sesion.vue @@ -261,8 +261,8 @@ const tabs = [ }, ] -// Definición de subcategorías por tab -const subcategoriasPorTab = { +// Definición de subcategorías estáticas por tab +const subcategoriasEstaticasPorTab = { 'organoleptica': [ { value: 'fragancia-aroma' as Subcategoria, label: 'Fragancia/Aroma' }, { value: 'sabor' as Subcategoria, label: 'Sabor' }, @@ -282,19 +282,41 @@ const subcategoriasPorTab = { { value: 'impresion-global' as Subcategoria, label: 'Impresión Global' }, ], 'defectos': [], - 'impresion-global': [], } +// Subcategorías dinámicas para Impresión Global (basadas en muestras) +const subcategoriasMuestras = computed(() => { + if (!sesionActiva.value) return [] + + return sesionActiva.value.muestras.map((muestra, index) => ({ + value: `muestra-${muestra.muestraId}` as Subcategoria, + label: muestra.nombre || `Muestra ${index + 1}`, + })) +}) + // Subcategorías disponibles para la tab activa const subcategoriasDisponibles = computed(() => { - return subcategoriasPorTab[tabActiva.value] || [] + if (tabActiva.value === 'impresion-global') { + return subcategoriasMuestras.value + } + return subcategoriasEstaticasPorTab[tabActiva.value] || [] }) // Items del accordion const accordionItems = computed(() => { if (!sesionActiva.value) return [] - return sesionActiva.value.muestras.map((muestra) => ({ + let muestrasAMostrar = sesionActiva.value.muestras + + // Si estamos en impresion-global y hay filtros activos, filtrar muestras + if (tabActiva.value === 'impresion-global' && subcategoriasActivas.value.length > 0) { + muestrasAMostrar = sesionActiva.value.muestras.filter((muestra) => { + const muestraValue = `muestra-${muestra.muestraId}` + return subcategoriasActivas.value.includes(muestraValue as Subcategoria) + }) + } + + return muestrasAMostrar.map((muestra) => ({ label: '', // Usaremos slot #default para el contenido del header value: `muestra-${muestra.muestraId}`, muestra, // Pasar referencia directa sin clonar