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;