panels-origin/web-panel
Alberto Martinez 34c0da30d8 fix(padron): vista previa de documentos, eliminar y reemplazar por tipo (#26)
<!-- CURSOR_AGENT_PR_BODY_BEGIN -->
## Problema
En el expediente del padrón, al ver un documento el navegador lo trataba como descarga (cabeceras `application/octet-stream` + `attachment` y blob sin MIME). No había forma de eliminar archivos cargados y al subir otro del mismo tipo algunos entornos fallaban o no refrescaban bien la lista vigente.

## Cambios
- **API:** los GET de documentos (trabajador, proyecto, empresa) envían el `Content-Type` real del archivo y `Content-Disposition: inline` por defecto (`?disposition=attachment` para forzar descarga).
- **UI:** `DocumentPreviewDialog` pide `disposition=inline` y reconstruye el blob con MIME correcto para que PDF/imagen se vean en el diálogo.
- **Eliminar:** RPC `core.fn_worker_document_delete`, `DELETE /v1/workers/:id/documents/:docId`, permiso `documents.delete` (incluido en `manage_documents`), botón de papelera en vigentes e histórico.
- **Reemplazar:** `fn_worker_document_store` marca como no vigentes **todas** las filas del mismo tipo antes del INSERT; se limpia el `FileUpload` tras subir; filtro `is_current` tolera booleano o `1`.

## Migraciones
- Core: `040-fn-worker-document-delete.sql`, `041-fn-worker-document-store-replace.sql`
- IAM: `006-documents-delete-permission.sql`

## Verificación
Tras aplicar Liquibase, en un trabajador del padrón: abrir ojo en PDF/JPG (debe verse en modal), eliminar un doc de prueba, subir dos veces el mismo tipo (debe quedar una vigente y la anterior en histórico).
<!-- CURSOR_AGENT_PR_BODY_END -->

<div><a href="https://cursor.com/agents/bc-d8a5d34a-ead9-4912-8296-322cff799783?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-d8a5d34a-ead9-4912-8296-322cff799783&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div>
2026-09-16 21:17:39 +00:00
..
assets/css feat: reclasificar gastos sin concepto o cambiar de partida 2026-09-08 20:19:13 +00:00
components fix(padron): vista previa de documentos, eliminar y reemplazar por tipo (#26) 2026-09-16 21:17:39 +00:00
composables merge: #15+#16 gastos, proveedores y almacén 2026-09-08 21:13:02 +00:00
layouts Implement client IAM v2: roles per tenant, CRUD matrix, scope, and panel UI 2026-09-08 18:16:59 +00:00
middleware Implement client IAM v2: roles per tenant, CRUD matrix, scope, and panel UI 2026-09-08 18:16:59 +00:00
pages feat: ver el programa de obra como Gantt (no la grilla de ceros) 2026-09-08 22:12:23 +00:00
plugins Ajustes para nomina y dashboard 2026-08-26 19:02:41 -05:00
public first commit 2026-08-21 16:55:01 -05:00
themes first commit 2026-08-21 16:55:01 -05:00
types Ajustes para nomina y dashboard 2026-08-26 19:02:41 -05:00
utils feat: ver el programa de obra como Gantt (no la grilla de ceros) 2026-09-08 22:12:23 +00:00
.gitignore first commit 2026-08-21 16:55:01 -05:00
app.vue fix(web-panel): unwrap API envelope post-login and improve error screen 2026-09-04 06:56:25 +00:00
nginx.conf first commit 2026-08-21 16:55:01 -05:00
nuxt.config.ts first commit 2026-08-21 16:55:01 -05:00
package-lock.json Ajustes para nomina y dashboard 2026-08-26 19:02:41 -05:00
package.json Ajustes para nomina y dashboard 2026-08-26 19:02:41 -05:00
README.md first commit 2026-08-21 16:55:01 -05:00
tsconfig.json first commit 2026-08-21 16:55:01 -05:00

Nuxt Minimal Starter

Look at the Nuxt documentation to learn more.

Setup

Make sure to install dependencies:

# npm
npm install

# pnpm
pnpm install

# yarn
yarn install

# bun
bun install

Development Server

Start the development server on http://localhost:3000:

# npm
npm run dev

# pnpm
pnpm dev

# yarn
yarn dev

# bun
bun run dev

Production

Build the application for production:

# npm
npm run build

# pnpm
pnpm build

# yarn
yarn build

# bun
bun run build

Locally preview production build:

# npm
npm run preview

# pnpm
pnpm preview

# yarn
yarn preview

# bun
bun run preview

Check out the deployment documentation for more information.