feat(reportes): módulo de Reportes con 10 reportes, filtros y descarga Excel

This commit is contained in:
2026-09-17 07:18:34 +00:00
parent 31f83b0504
commit 8bcb093fec
8 changed files with 1279 additions and 4 deletions

View File

@@ -1,18 +1,23 @@
import { useEffect, useState } from 'react'
import MiTablero from '../components/MiTablero'
import TableroGeneral from '../components/TableroGeneral'
import Reportes from '../components/Reportes'
import type { AccionesTablero } from '../components/comunes'
import { esRolConEquipo } from '../lib/mi-tablero'
import { getMe, getSesion } from '../services/auth'
import DarkModeToggle from '../components/DarkModeToggle'
type Vista = 'mia' | 'general'
type Vista = 'mia' | 'general' | 'reportes'
const VISTAS: { id: Vista; etiqueta: string; clave: string }[] = [
{ id: 'mia', etiqueta: 'Mi tablero', clave: 'mi-tablero' },
{ id: 'general', etiqueta: 'Tablero comercial', clave: 'tablero-comercial' },
{ id: 'reportes', etiqueta: 'Reportes', clave: 'reportes' },
]
/** Roles que ven el módulo de Reportes (datos de todos los vendedores) */
const ROLES_REPORTES = ['admin', 'director_ventas', 'direccion_general']
/**
* Tableros con vista por rol: cada tab se muestra solo si el módulo está
* permitido en la matriz de roles del API (GET /auth/me → modulos). Con un
@@ -34,7 +39,11 @@ export default function DashboardPage() {
.catch(() => {}) // si /me falla se mantiene lo que hubiera
}, [])
const permitidas = VISTAS.filter((v) => permitidos === null || permitidos.includes(v.clave))
const permitidas = VISTAS.filter((v) => {
// Reportes: por rol (los datos son de todos los vendedores)
if (v.id === 'reportes') return ROLES_REPORTES.includes(rol)
return permitidos === null || permitidos.includes(v.clave)
})
const vista: Vista | null =
permitidas.length === 0
? null
@@ -103,6 +112,8 @@ export default function DashboardPage() {
</main>
) : vista === 'mia' ? (
<MiTablero alCambiarAcciones={setAcciones} />
) : vista === 'reportes' ? (
<Reportes />
) : (
<TableroGeneral mostrarEquipo={conEquipo} alCambiarAcciones={setAcciones} />
)}