feat(mejoras): 14 mejoras al CRM Frasa
Fase 1 - UI: dark mode, skeletons, toasts Fase 2 - Filtros: avanzados Mi día, búsqueda global Ctrl+K Fase 3 - Datos: export Excel, notas apartados, auditoría Fase 4 - Dashboard: gráficas vendedor + métricas uso Fase 5 - Responsive: tablets optimizadas Fase 6 - PWA: IndexedDB offline, push notifications Backend: 3 tablas nuevas, 6 services, 6 endpoints nuevos 721 API tests + fronts verdes.
This commit is contained in:
@@ -93,10 +93,24 @@ import {
|
||||
resetRolesEndpoint,
|
||||
obtenerAccionesEndpoint,
|
||||
} from '../controllers/config.controller.js'
|
||||
import { crearNotaEndpoint, listarNotasEndpoint } from '../controllers/notas.controller.js'
|
||||
import { listarAuditoriaEndpoint } from '../controllers/auditoria.controller.js'
|
||||
import { buscarEndpoint } from '../controllers/buscar.controller.js'
|
||||
import {
|
||||
miTableroEndpoint,
|
||||
metricasUsoEndpoint,
|
||||
requireAdminOrCoordinador,
|
||||
} from '../controllers/reporte-mi-tablero.controller.js'
|
||||
import {
|
||||
suscribirEndpoint,
|
||||
desuscribirEndpoint,
|
||||
vapidKeyEndpoint,
|
||||
} from '../controllers/push.controller.js'
|
||||
|
||||
export const apiRouter = Router()
|
||||
|
||||
apiRouter.get('/health', health)
|
||||
apiRouter.get('/buscar', buscarEndpoint)
|
||||
|
||||
apiRouter.post('/auth/login', loginEndpoint)
|
||||
apiRouter.get('/auth/me', meEndpoint)
|
||||
@@ -163,6 +177,9 @@ apiRouter.post('/apartados/:itemId/estado', cambiarEstadoApartadoEndpoint)
|
||||
// el cliente ligado al apartado (se crea la ficha mínima si aún no existe)
|
||||
apiRouter.get('/apartados/:itemId/documentos', listarDocumentosApartado)
|
||||
apiRouter.post('/apartados/:itemId/documentos', uploadDocumentosApartado.array('archivos', 10), subirDocumentosApartado)
|
||||
// Notas del apartado
|
||||
apiRouter.post('/apartados/:id/notas', crearNotaEndpoint)
|
||||
apiRouter.get('/apartados/:id/notas', listarNotasEndpoint)
|
||||
|
||||
apiRouter.get('/mi-dia/resumen', resumenMiDiaEndpoint)
|
||||
|
||||
@@ -185,6 +202,10 @@ apiRouter.patch('/usuarios/me/monday', actualizarVinculoMondayEndpoint)
|
||||
apiRouter.patch('/usuarios/:id/rol', actualizarRolEndpoint)
|
||||
|
||||
apiRouter.get('/reportes/resumen', resumenReportes)
|
||||
// Tablero personal del vendedor: métricas, conversión, ventas, origen, desarrollos
|
||||
apiRouter.get('/reportes/mi-tablero', miTableroEndpoint)
|
||||
// Métricas de uso (admin/coordinador): leads por usuario, tasa de descarte, actividades
|
||||
apiRouter.get('/reportes/metricas-uso', requireAdminOrCoordinador, metricasUsoEndpoint)
|
||||
|
||||
// Estado del modo local (banner del front): salud de Monday + cola de sync
|
||||
apiRouter.get('/sistema/estado', estadoSistema)
|
||||
@@ -202,6 +223,9 @@ apiRouter.post('/ai/documents', subirDocumento)
|
||||
apiRouter.get('/ai/documents', listarDocumentosIA)
|
||||
apiRouter.delete('/ai/documents/:id', eliminarDocumento)
|
||||
|
||||
// ── Auditoría (admin) ────────────────────────────────────────────────
|
||||
apiRouter.get('/auditoria', requireAdmin, listarAuditoriaEndpoint)
|
||||
|
||||
// ── Configuración (admin) ──────────────────────────────────────────────
|
||||
apiRouter.get('/config/sistema', requireAdmin, obtenerConfigsEndpoint)
|
||||
apiRouter.patch('/config/sistema', requireAdmin, actualizarConfigsEndpoint)
|
||||
@@ -211,3 +235,8 @@ apiRouter.get('/config/usuarios', requireAdmin, obtenerUsuariosEndpoint)
|
||||
apiRouter.patch('/config/usuarios/:id', requireAdmin, actualizarUsuarioEndpoint)
|
||||
apiRouter.post('/config/reset-roles', requireAdmin, resetRolesEndpoint)
|
||||
apiRouter.get('/config/acciones', obtenerAccionesEndpoint)
|
||||
|
||||
// ── Push notifications ──────────────────────────────────────────────
|
||||
apiRouter.get('/push/vapid-key', vapidKeyEndpoint)
|
||||
apiRouter.post('/push/suscribir', suscribirEndpoint)
|
||||
apiRouter.post('/push/desuscribir', desuscribirEndpoint)
|
||||
|
||||
Reference in New Issue
Block a user