feat(mejoras): 22 mejoras UX en todos los módulos
Mi día: cancelación con motivo, conteo escrituración real, cita sin retroceder, calendario completo Cobranza: MoraDashboard respeta alcance, hoy dinámico, cancelar con motivo Landing: contactos paginados, error vs vacío diferenciado Dashboards: KPI renombrado, drill-down planes activos Chat: historial recarga, preguntas rotativas, error solo toast Transversal: shadow-sm corrupto corregido en 9 archivos 553 API tests + 7 apps construidas
This commit is contained in:
@@ -83,9 +83,9 @@ export default function MiTablero({ alCambiarAcciones }: { alCambiarAcciones: (a
|
||||
detalle={`${conversion.oportunidades} de ${conversion.leads} leads`}
|
||||
/>
|
||||
<KpiCard
|
||||
titulo="Ventas del mes"
|
||||
valor={conversion.vendidos}
|
||||
detalle={`$${(tablero.ventasMes.monto / 1000).toFixed(0)}k MXN · ${tablero.ventasMes.unidades} cotizada(s)`}
|
||||
titulo="Cotizaciones del mes"
|
||||
valor={tablero.ventasMes.unidades}
|
||||
detalle={`$${(tablero.ventasMes.monto / 1000).toFixed(0)}k MXN cotizados`}
|
||||
/>
|
||||
<KpiCard
|
||||
titulo="Actividades abiertas"
|
||||
|
||||
@@ -47,7 +47,7 @@ export default function SeccionEquipo() {
|
||||
{equipo.porVendedor.length === 0 ? (
|
||||
<EstadoVacio mensaje="Sin leads asignados al equipo" />
|
||||
) : (
|
||||
<table className="w-full overflow-hidden rounded-xl border border-[#E5E7EB] bg-white shadow dark:border-[#1E293B] dark:bg-[#1E293B] -sm">
|
||||
<table className="w-full overflow-hidden rounded-xl border border-[#E5E7EB] bg-white shadow-sm dark:border-[#1E293B] dark:bg-[#1E293B]">
|
||||
<thead className="border-b border-[#E5E7EB]">
|
||||
<tr>
|
||||
<th className={CLASE_ENCABEZADO}>Vendedor</th>
|
||||
|
||||
@@ -49,6 +49,7 @@ const RANGOS_DIAS = [7, 30, 90] as const
|
||||
|
||||
/** Rutas de drill-down a otras apps del ecosistema (NGINX las sirve como SPAs aparte) */
|
||||
const RUTA_PLANES_VENCIDOS = '/pay/?vista=todos&status=ACTIVO&sort=atraso&dir=desc'
|
||||
const RUTA_PLANES_ACTIVOS = '/pay/?vista=todos&status=ACTIVO'
|
||||
const RUTA_MI_DIA = '/hoy/'
|
||||
|
||||
/**
|
||||
@@ -194,7 +195,8 @@ export default function TableroGeneral({
|
||||
<KpiCard
|
||||
titulo="Planes activos"
|
||||
valor={resumen.cobranza.planes.activos}
|
||||
detalle={`${resumen.cobranza.planes.liquidados} liquidados · ${resumen.cobranza.planes.cancelados} cancelados`}
|
||||
detalle={`${resumen.cobranza.planes.liquidados} liquidados · ${resumen.cobranza.planes.cancelados} cancelados · click para ver planes`}
|
||||
onClick={() => irAApp(RUTA_PLANES_ACTIVOS)}
|
||||
/>
|
||||
<KpiCard titulo="Actividades abiertas" valor={resumen.actividadesAbiertas} />
|
||||
<KpiCard
|
||||
|
||||
Reference in New Issue
Block a user