feat(config): modulo Configuraciones admin + permisos por rol

- Tablas ConfiguracionSistema (7 configs) + RolConfiguracion (6 roles)
- Endpoints: config/sistema GET/PATCH, config/roles GET/PATCH,
  config/usuarios GET/PATCH, config/reset-roles POST, config/acciones GET
- modulosDeRol() async con fallback a MATRIZ estatica
- auth/me devuelve acciones[] segun rol del usuario
- saludMonday.estaDisponible() lee modo_local_forzado de DB (cache 30s)
- Landing: vista Configuraciones con 4 tabs (Modo, Roles, Usuarios, Sistema)
- Mi-dia: boton Descartar se deshabilita si !descartar_lead
- 630 API tests + 24 landing tests + 20 mi-dia tests verdes

Seed: npm run seed:config
This commit is contained in:
2026-09-06 09:46:19 +00:00
parent 50e6eca7da
commit b2634f97ab
35 changed files with 2572 additions and 33 deletions

View File

@@ -1,8 +1,13 @@
import { useEffect, useState } from 'react'
import { getSesion } from '../services/auth'
import { getSesion, type UsuarioSesion } from '../services/auth'
interface Props {
usuario?: UsuarioSesion | null
onConfiguraciones?: () => void
}
/** Barra superior: marca a la izquierda, estado de sesión y acceso a configuración a la derecha */
export function Navbar() {
export function Navbar({ usuario, onConfiguraciones }: Props) {
const [conSesion, setConSesion] = useState(() => getSesion() !== null)
useEffect(() => {
@@ -15,6 +20,8 @@ export function Navbar() {
}
}, [])
const esAdmin = usuario?.rol === 'admin'
return (
<header className="sticky top-0 z-10 border-b border-[#E5E7EB] bg-white/95 backdrop-blur">
<div className="mx-auto flex h-14 max-w-[1280px] items-center justify-between px-6">
@@ -33,6 +40,17 @@ export function Navbar() {
/>
{conSesion ? 'Sesión activa' : 'Sin sesión'}
</span>
{esAdmin && onConfiguraciones && (
<button
type="button"
onClick={onConfiguraciones}
title="Configuraciones"
className="flex h-8 w-8 items-center justify-center rounded-lg text-[#64748B] transition-colors hover:bg-[#F1F5F9] hover:text-accent"
aria-label="Abrir configuraciones"
>
⚙
</button>
)}
<a
href="#configuracion"
className="text-sm font-medium text-[#64748B] transition-colors hover:text-accent"