From dd57ee1fb3c32f09a20e30ea4967a54c472bd271 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Sun, 19 Oct 2025 04:02:13 -0600 Subject: [PATCH] Feat: Agregar vista expandida de ResumenMuestra MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Implementación completa de vista detallada para muestras: Componentes nuevos: - ResumenMuestraExpandido: Vista no compacta con valores claramente visibles - ModalResumenExpandido: Modal reutilizable para mostrar vista expandida Integraciones: - Calculadora SCAA: Usa vista expandida en paso 3 - Página de sesión: * Long press en móvil (500ms) en header del accordion * Botón expandir en desktop cerca del título * Vibración háptica en móvil al activar Características: - Grid responsivo de intensidades afectivas - Puntajes destacados (Σ y SCAA) con colores según valor - Visualización clara de penalizaciones - Diseño adaptativo móvil/desktop --- .../components/cata/ModalAsignacionRapida.vue | 17 +- .../components/cata/ModalResumenExpandido.vue | 72 +++ .../cata/ResumenMuestraExpandido.vue | 437 ++++++++++++++++++ nuxt4/app/pages/cata/sesion.vue | 100 +++- 4 files changed, 608 insertions(+), 18 deletions(-) create mode 100644 nuxt4/app/components/cata/ModalResumenExpandido.vue create mode 100644 nuxt4/app/components/cata/ResumenMuestraExpandido.vue diff --git a/nuxt4/app/components/cata/ModalAsignacionRapida.vue b/nuxt4/app/components/cata/ModalAsignacionRapida.vue index d124994..f0f6eaf 100644 --- a/nuxt4/app/components/cata/ModalAsignacionRapida.vue +++ b/nuxt4/app/components/cata/ModalAsignacionRapida.vue @@ -155,20 +155,9 @@ - -
-

- Vista Previa -

-
- -
-
- - -
-

Esta es una muestra de ejemplo para calcular el SCAA Score

-

Los valores descriptivos y organolépticos están ocultos

+ +
+
diff --git a/nuxt4/app/components/cata/ModalResumenExpandido.vue b/nuxt4/app/components/cata/ModalResumenExpandido.vue new file mode 100644 index 0000000..83209ea --- /dev/null +++ b/nuxt4/app/components/cata/ModalResumenExpandido.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/nuxt4/app/components/cata/ResumenMuestraExpandido.vue b/nuxt4/app/components/cata/ResumenMuestraExpandido.vue new file mode 100644 index 0000000..03e8b1c --- /dev/null +++ b/nuxt4/app/components/cata/ResumenMuestraExpandido.vue @@ -0,0 +1,437 @@ + + + + + diff --git a/nuxt4/app/pages/cata/sesion.vue b/nuxt4/app/pages/cata/sesion.vue index d049ced..c2ed150 100644 --- a/nuxt4/app/pages/cata/sesion.vue +++ b/nuxt4/app/pages/cata/sesion.vue @@ -167,10 +167,25 @@ > @@ -203,6 +218,13 @@ /> + + + @@ -383,6 +405,37 @@ const toggleSubcategoria = (subcategoria: Subcategoria) => { actualizarSubcategorias(actuales) } +// Modal de vista expandida +const mostrarModalExpandido = ref(false) +const muestraExpandida = ref(null) + +// Abrir vista expandida +const abrirVistaExpandida = (muestra: Muestra) => { + muestraExpandida.value = muestra + mostrarModalExpandido.value = true +} + +// Long press en móvil +let longPressTimer: NodeJS.Timeout | null = null +const LONG_PRESS_DURATION = 500 // ms + +const onTouchStart = (event: TouchEvent, muestra: Muestra) => { + longPressTimer = setTimeout(() => { + // Vibrar si está disponible + if (navigator.vibrate) { + navigator.vibrate(50) + } + abrirVistaExpandida(muestra) + }, LONG_PRESS_DURATION) +} + +const onTouchEnd = () => { + if (longPressTimer) { + clearTimeout(longPressTimer) + longPressTimer = null + } +} + // Formatear fecha const formatearFecha = (fecha: string): string => { const date = new Date(fecha) @@ -535,6 +588,45 @@ onMounted(() => { background-color: color-mix(in srgb, var(--cata-primary) 10%, transparent); } +/* Wrapper de resumen con botón expandir */ +.resumen-wrapper { + position: relative; + display: flex; + align-items: center; + gap: 0.5rem; + width: 100%; +} + +.boton-expandir { + flex-shrink: 0; + padding: 0.5rem; + border-radius: 0.375rem; + background-color: color-mix(in srgb, var(--cata-primary) 10%, transparent); + border: 1px solid color-mix(in srgb, var(--cata-primary) 30%, transparent); + color: var(--cata-primary); + transition: all 0.2s ease; + cursor: pointer; + align-items: center; + justify-content: center; +} + +.boton-expandir:hover { + background-color: color-mix(in srgb, var(--cata-primary) 20%, transparent); + transform: scale(1.05); +} + +.boton-expandir:active { + transform: scale(0.95); +} + +.dark .boton-expandir { + background-color: color-mix(in srgb, var(--cata-primary) 15%, transparent); +} + +.dark .boton-expandir:hover { + background-color: color-mix(in srgb, var(--cata-primary) 25%, transparent); +} + /* Floating action button */ .floating-action { position: fixed;