Skip to content

TecnoFix v1.4.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 05:28
efd9257

v1.4.0

Alineación del frontend con los cambios de permisos por rol y rutas reales
del backend (auditoría 2026-06-03), más correcciones de UI en diálogos de
cotizaciones.

Añadido

  • Endpoint dedicado de técnicos (GET /users/tecnicos/): los dropdowns de
    técnicos en Órdenes ya no listan todos los usuarios. Como la lectura de usuarios
    pasó a ser solo-admin en el backend, ahora se usa este endpoint ligero
    ([{ id, nombre }], no paginado) accesible a cualquier rol autenticado.
  • Apertura de enlaces externos en la app de escritorio: helper
    openExternalUrl() / handleExternalClick(). En Tauri un <a target="_blank">
    no abre el navegador del sistema; ahora esos enlaces se abren con el plugin
    opener. En web el comportamiento nativo del enlace se conserva.
  • Documento de auditoría de permisos
    (docs/backend-docs/auditoria-permisos-endpoints.md): verificación cruzada
    frontend↔backend del control de acceso por rol de toda la API /api/v1/.

Corregido

  • Rutas de usuarios desalineadas con el backend:
    • cambiar-password/ → reset-password/ (reset de contraseña por admin).
    • activar/ → activate/, desactivar/ → deactivate/.
  • Compatibles de inventario (404): el front llamaba
    /inventario/compatibles/ pero el backend expone
    /inventario/compatibilidades/. Corregido.
  • Visor de PDF — X de cerrar duplicada: DialogContent (shadcn) ya provee su
    propia X; se eliminó el botón X manual del header del PdfPreviewDialog.
  • Diálogo "Autorizar cotización" — responsividad:
    • Ancho w-[95vw] para dejar margen en pantallas medianas/chicas.
    • Stepper: los títulos de paso se ocultan en móvil (hidden sm:inline),
      dejando solo los círculos numerados.
    • Selector de modo de cliente: la fila Label + 3 botones ahora apila en móvil y
      los botones envuelven (flex-wrap) en vez de cortarse.
    • Focus ring recortado: el contenido del ScrollArea se envolvió en un
      contenedor con padding interno para que el anillo de foco de inputs/selects de
      la columna izquierda y la fila superior no se corte contra el overflow-hidden.
  • Login — "¿Olvidaste tu contraseña?": el flujo simulaba el envío sin llamar a
    ningún endpoint (el backend aún no implementa POST /users/auth/password-reset/).
    Se ocultó el acceso para no mostrar un flujo que no hace nada; las vistas quedan
    dormidas para reactivarlas cuando exista la ruta.

Detalles técnicos

Archivo Cambio
src/lib/config.ts + users.tecnicos; rutas reset-password/activate/deactivate; compatibles → compatibilidades
src/api/users.ts + usersApi.tecnicos(); cambiarPassword → resetPassword
src/types/user.ts + interface Tecnico
src/features/ordenes/OrdenesPage.tsx dropdown técnicos vía usersApi.tecnicos()
src/features/ordenes/OrdenDetailPage.tsx idem (conserva enabled: isAdmin)
src/features/users/UsersPage.tsx resetPassword; DialogDescription en diálogos
src/lib/external.ts nuevo — openExternalUrl / handleExternalClick
src/features/cotizaciones/components/ItemWizard.tsx enlace url_producto usa el handler externo
src/features/cotizaciones/CotizacionDetailPage.tsx enlace link_referencia usa el handler externo
src/features/cotizaciones/components/PdfPreviewDialog.tsx eliminada X manual duplicada
src/features/cotizaciones/components/AutorizarCotizacionDialog.tsx responsividad + focus ring
src/features/auth/LoginPage.tsx oculto el flujo de recuperación de contraseña
src-tauri/capabilities/default.json + permiso opener:allow-open-url

Nota de build: el permiso opener:allow-open-url es un cambio de Tauri;
requiere recompilar el lado Rust (npm run tauri dev / build de Windows) para
que la apertura de enlaces externos funcione en la app de escritorio. En web
(npm run dev) no requiere recompilar.