Refactor: Eliminar métricas y estadísticas del UI de catación para simplificar interfaz
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 1m8s

This commit is contained in:
2025-10-18 14:16:55 -06:00
parent 75f56c4ba9
commit af6664c931
2 changed files with 12 additions and 154 deletions

View File

@@ -1,68 +1,14 @@
<template> <template>
<div class="resumen-muestra flex items-center justify-between gap-4 w-full"> <div class="resumen-muestra flex items-center gap-3 w-full">
<!-- Información básica --> <!-- Número de muestra -->
<div class="flex items-center gap-3 flex-1 min-w-0"> <div class="muestra-numero cata-text font-bold text-lg flex-shrink-0">
<div class="muestra-numero cata-text font-bold text-lg"> #{{ muestra.muestraId }}
#{{ muestra.muestraId }}
</div>
<div class="flex-1 min-w-0">
<div class="muestra-nombre cata-text font-semibold truncate">
{{ muestra.nombre }}
</div>
<div class="muestra-stats text-xs cata-text opacity-60 flex items-center gap-2">
<span>Puntaje {{ muestra.puntajeFinal }}</span>
<span class="opacity-40"></span>
<span>{{ porcentajeCompletitud }}% completado</span>
</div>
</div>
</div> </div>
<!-- Indicadores de completitud --> <!-- Nombre de muestra -->
<div class="muestra-indicadores flex items-center gap-2 text-xs"> <div class="flex-1 min-w-0">
<!-- Fragancia/Aroma --> <div class="muestra-nombre cata-text font-semibold truncate">
<div {{ muestra.nombre }}
:class="[
'indicador-badge px-2 py-1 rounded',
tieneFraganciaAroma ? 'bg-success/20 text-success' : 'bg-muted/20 text-muted',
]"
title="Fragancia/Aroma"
>
<span class="hidden sm:inline">F:</span>
{{ intensidadesFormatted.fragancia }}/{{ intensidadesFormatted.aroma }}
</div>
<!-- Sabor -->
<div
:class="[
'indicador-badge px-2 py-1 rounded',
tieneSabor ? 'bg-success/20 text-success' : 'bg-muted/20 text-muted',
]"
title="Sabor"
>
<span class="hidden sm:inline">S:</span>
{{ intensidadesFormatted.sabor }}/{{ intensidadesFormatted.saborResidual }}
</div>
<!-- Acidez -->
<div
:class="[
'indicador-badge px-2 py-1 rounded',
tieneAcidez ? 'bg-success/20 text-success' : 'bg-muted/20 text-muted',
]"
title="Acidez"
>
<span class="hidden sm:inline">Ac:</span>
{{ intensidadesFormatted.acidez }}/{{ intensidadesFormatted.dulzor }}
</div>
</div>
<!-- Barra de progreso -->
<div class="progreso-container hidden md:block w-24">
<div class="progreso-bg h-2 rounded-full bg-muted/20 overflow-hidden">
<div
class="progreso-fill h-full bg-primary transition-all"
:style="{ width: `${porcentajeCompletitud}%` }"
/>
</div> </div>
</div> </div>
</div> </div>
@@ -74,63 +20,24 @@ import type { Muestra } from '~/types/catacion'
interface ResumenMuestraProps { interface ResumenMuestraProps {
/** Muestra a mostrar */ /** Muestra a mostrar */
muestra: Muestra muestra: Muestra
/** Porcentaje de completitud */
porcentajeCompletitud: number
} }
const props = defineProps<ResumenMuestraProps>() defineProps<ResumenMuestraProps>()
// Formatear intensidades para mostrar
const intensidadesFormatted = computed(() => ({
fragancia: props.muestra.intensidades.fragancia.afectiva ?? '-',
aroma: props.muestra.intensidades.aroma.afectiva ?? '-',
sabor: props.muestra.intensidades.sabor.afectiva ?? '-',
saborResidual: props.muestra.intensidades.saborResidual.afectiva ?? '-',
acidez: props.muestra.intensidades.acidez.afectiva ?? '-',
dulzor: props.muestra.intensidades.dulzor.afectiva ?? '-',
}))
// Verificar si las secciones están completas
const tieneFraganciaAroma = computed(() =>
props.muestra.intensidades.fragancia.afectiva !== null &&
props.muestra.intensidades.aroma.afectiva !== null
)
const tieneSabor = computed(() =>
props.muestra.intensidades.sabor.afectiva !== null &&
props.muestra.intensidades.saborResidual.afectiva !== null
)
const tieneAcidez = computed(() =>
props.muestra.intensidades.acidez.afectiva !== null &&
props.muestra.intensidades.dulzor.afectiva !== null
)
</script> </script>
<style scoped> <style scoped>
.resumen-muestra { .resumen-muestra {
min-height: 60px; min-height: 60px;
padding: 0.5rem 0;
} }
.muestra-numero { .muestra-numero {
font-size: 1.25rem; font-size: 1.25rem;
flex-shrink: 0;
}
.indicador-badge {
font-weight: 600;
white-space: nowrap;
flex-shrink: 0;
} }
@media (max-width: 640px) { @media (max-width: 640px) {
.muestra-indicadores { .muestra-numero {
flex-wrap: wrap; font-size: 1rem;
}
.indicador-badge {
font-size: 0.625rem;
padding: 0.25rem 0.5rem;
} }
} }
</style> </style>

View File

@@ -80,26 +80,6 @@
</div> </div>
</div> </div>
<!-- Estadísticas rápidas -->
<div v-if="estadisticasSesion" class="stats-bar flex gap-4 text-xs sm:text-sm">
<div class="stat-item">
<span class="stat-label cata-text opacity-60">Muestras:</span>
<span class="stat-value cata-text font-semibold">{{ estadisticasSesion.totalMuestras }}</span>
</div>
<div class="stat-item">
<span class="stat-label cata-text opacity-60">Completas:</span>
<span class="stat-value cata-text font-semibold">{{ estadisticasSesion.muestrasCompletas }}</span>
</div>
<div class="stat-item">
<span class="stat-label cata-text opacity-60">Progreso:</span>
<span class="stat-value cata-text font-semibold">{{ estadisticasSesion.porcentajeCompletitud }}%</span>
</div>
<div class="stat-item">
<span class="stat-label cata-text opacity-60">Puntaje Prom:</span>
<span class="stat-value cata-text font-semibold">{{ estadisticasSesion.puntajePromedio }}</span>
</div>
</div>
<!-- Menú desplegable --> <!-- Menú desplegable -->
<div v-if="mostrarMenu" class="menu-desplegable mt-4 cata-outline-box p-3 rounded-md"> <div v-if="mostrarMenu" class="menu-desplegable mt-4 cata-outline-box p-3 rounded-md">
<button <button
@@ -163,7 +143,6 @@
<template #default="{ item }"> <template #default="{ item }">
<CataResumenMuestra <CataResumenMuestra
:muestra="item.muestra" :muestra="item.muestra"
:porcentaje-completitud="porcentajeCompletitud(item.muestra)"
/> />
</template> </template>
@@ -210,10 +189,8 @@ const {
error, error,
tabActiva, tabActiva,
accordionAbierto, accordionAbierto,
estadisticasSesion,
exportarSesion, exportarSesion,
eliminarSesionActual, eliminarSesionActual,
porcentajeCompletitud,
} = useCatacion() } = useCatacion()
const { inicializar } = useIndexedDB() const { inicializar } = useIndexedDB()
@@ -351,18 +328,6 @@ const confirmarEliminar = () => {
// Finalizar sesión // Finalizar sesión
const finalizarSesion = () => { const finalizarSesion = () => {
if (!estadisticasSesion.value) return
const { muestrasCompletas, totalMuestras, porcentajeCompletitud } = estadisticasSesion.value
if (porcentajeCompletitud < 100) {
const confirmar = window.confirm(
`La sesión está ${porcentajeCompletitud}% completa (${muestrasCompletas}/${totalMuestras} muestras). ¿Deseas finalizarla de todos modos?`
)
if (!confirmar) return
}
// Exportar automáticamente al finalizar // Exportar automáticamente al finalizar
exportar() exportar()
@@ -417,12 +382,6 @@ onMounted(() => {
border-color: color-mix(in srgb, var(--cata-primary) 30%, transparent); border-color: color-mix(in srgb, var(--cata-primary) 30%, transparent);
} }
.stat-item {
display: flex;
align-items: baseline;
gap: 0.25rem;
}
/* Accordion hover usando color personalizado */ /* Accordion hover usando color personalizado */
:deep(.accordion-trigger:hover) { :deep(.accordion-trigger:hover) {
background-color: color-mix(in srgb, var(--cata-primary) 5%, transparent); background-color: color-mix(in srgb, var(--cata-primary) 5%, transparent);
@@ -477,10 +436,6 @@ onMounted(() => {
padding-bottom: 0.75rem; padding-bottom: 0.75rem;
} }
.stats-bar {
flex-wrap: wrap;
}
.floating-action { .floating-action {
bottom: 1rem; bottom: 1rem;
right: 1rem; right: 1rem;
@@ -494,10 +449,6 @@ onMounted(() => {
padding-bottom: 0.5rem; padding-bottom: 0.5rem;
} }
.stats-bar {
display: none;
}
.floating-action { .floating-action {
bottom: 0.5rem; bottom: 0.5rem;
right: 0.5rem; right: 0.5rem;