Refactor: mejorar diseño de página informe-ingresos
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s

Cambios realizados:
- Eliminar cards innecesarias que envolvían componentes de métricas
  (TotalesMonetarios, TotalesIngresoCompra, TotalesVerde ya son cards)
- Actualizar estilo del contenedor de filtros al estilo de panorama facturador:
  * Usar clase 'brand-card' y bordes transparentes
  * Header con título y subtítulo estilizados
  * Checkbox 'Incluir anulados' en header
  * Inputs con variables CSS de brand
  * Footer con botón 'Actualizar' estilizado
  * Layout consistente con gap-8

Resultado: diseño más limpio, sin duplicación de cards y
estilo consistente entre páginas.
This commit is contained in:
2025-10-29 17:24:20 -06:00
parent db1a12d100
commit 2e58a16f4d

View File

@@ -1,60 +1,53 @@
<template> <template>
<div class="space-y-6"> <div class="flex flex-col gap-8">
<!-- Filtros --> <!-- Filtros -->
<UCard> <UCard class="brand-card border border-transparent">
<template #header> <template #header>
<div class="flex items-center justify-between"> <div class="flex flex-col gap-3">
<div class="flex items-center gap-2"> <div class="flex flex-wrap items-center justify-between gap-3">
<UIcon name="i-lucide-filter" class="w-5 h-5" /> <div>
<h3 class="text-lg font-semibold">Filtros</h3> <h2 class="text-xl font-bold brand-section-title">Filtros y Configuraciones</h2>
<p class="text-xs text-[var(--brand-text-muted)] mt-1">
Aplicados a ingresos de café
</p>
</div>
<div class="flex items-center gap-2">
<UCheckbox
v-model="filters.incluir_anulados"
label="Incluir anulados"
/>
</div>
</div> </div>
<UButton
@click="applyFilters"
:loading="loading"
icon="i-lucide-search"
color="primary"
size="sm"
>
Aplicar Filtros
</UButton>
</div> </div>
</template> </template>
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4"> <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<!-- Fecha Desde --> <!-- Fecha Desde -->
<div> <div>
<label class="block text-sm font-medium mb-1">Fecha Desde</label> <label class="block text-sm font-medium mb-1 text-[var(--brand-text)]">Fecha Desde</label>
<input <input
v-model="filters.fecha_desde" v-model="filters.fecha_desde"
type="date" type="date"
class="w-full px-3 py-2 border rounded-md dark:bg-gray-800 dark:border-gray-700" class="w-full px-3 py-2 border rounded-md bg-[var(--brand-bg)] border-[var(--brand-border)] text-[var(--brand-text)]"
/> />
</div> </div>
<!-- Fecha Hasta --> <!-- Fecha Hasta -->
<div> <div>
<label class="block text-sm font-medium mb-1">Fecha Hasta</label> <label class="block text-sm font-medium mb-1 text-[var(--brand-text)]">Fecha Hasta</label>
<input <input
v-model="filters.fecha_hasta" v-model="filters.fecha_hasta"
type="date" type="date"
class="w-full px-3 py-2 border rounded-md dark:bg-gray-800 dark:border-gray-700" class="w-full px-3 py-2 border rounded-md bg-[var(--brand-bg)] border-[var(--brand-border)] text-[var(--brand-text)]"
/>
</div>
<!-- Incluir Anulados -->
<div class="flex items-center pt-6">
<UCheckbox
v-model="filters.incluir_anulados"
label="Incluir Anulados"
/> />
</div> </div>
<!-- Granularidad --> <!-- Granularidad -->
<div> <div>
<label class="block text-sm font-medium mb-1">Granularidad</label> <label class="block text-sm font-medium mb-1 text-[var(--brand-text)]">Granularidad</label>
<select <select
v-model="filters.granularidad" v-model="filters.granularidad"
class="w-full px-3 py-2 border rounded-md dark:bg-gray-800 dark:border-gray-700" class="w-full px-3 py-2 border rounded-md bg-[var(--brand-bg)] border-[var(--brand-border)] text-[var(--brand-text)]"
> >
<option value="dia">Día</option> <option value="dia">Día</option>
<option value="semana">Semana</option> <option value="semana">Semana</option>
@@ -94,6 +87,26 @@
</div> </div>
</template> </template>
</UAccordion> </UAccordion>
<template #footer>
<div class="flex flex-col sm:flex-row items-center justify-between gap-3">
<div class="text-xs text-[var(--brand-text-muted)]">
Filtros aplicados al informe de ingresos
</div>
<UButton
:loading="loading"
:disabled="loading"
:ui="{ base: 'bg-[#c08040] text-[#1b1209] border border-[#d99a56] hover:bg-[#d99a56] hover:border-[#f0c07c] disabled:opacity-50 disabled:cursor-not-allowed' }"
size="sm"
@click="applyFilters"
>
<template #leading>
<UIcon name="i-lucide-refresh-cw" :class="{ 'animate-spin': loading }" />
</template>
Actualizar
</UButton>
</div>
</template>
</UCard> </UCard>
<!-- Error Display --> <!-- Error Display -->
@@ -112,30 +125,15 @@
</div> </div>
<!-- Content --> <!-- Content -->
<div v-else-if="data" class="space-y-6"> <div v-else-if="data" class="flex flex-col gap-8">
<!-- Totales Monetarios --> <!-- Totales Monetarios -->
<UCard v-if="pageSections.totalesCafe"> <TotalesMonetarios v-if="pageSections.totalesCafe" :data="data.totalesMonetarios" />
<template #header>
<h3 class="text-lg font-semibold">Totales Monetarios</h3>
</template>
<TotalesMonetarios :data="data.totalesMonetarios" />
</UCard>
<!-- Totales Ingreso y Compra --> <!-- Totales Ingreso y Compra -->
<UCard v-if="pageSections.totalesCafe"> <TotalesIngresoCompra v-if="pageSections.totalesCafe" :data="data.totalesIngresoCompra" />
<template #header>
<h3 class="text-lg font-semibold">Totales de Ingreso y Compra</h3>
</template>
<TotalesIngresoCompra :data="data.totalesIngresoCompra" />
</UCard>
<!-- Totales Verde --> <!-- Totales Verde -->
<UCard v-if="pageSections.totalesVerde"> <TotalesVerde v-if="pageSections.totalesVerde" :data="data.totalesVerde" />
<template #header>
<h3 class="text-lg font-semibold">Totales de Café Verde</h3>
</template>
<TotalesVerde :data="data.totalesVerde" />
</UCard>
<!-- Contadores --> <!-- Contadores -->
<UCard v-if="data.contadores"> <UCard v-if="data.contadores">