diff --git a/api/server.js b/api/server.js index 0dcef90..cbef05c 100644 --- a/api/server.js +++ b/api/server.js @@ -1,6 +1,7 @@ import express from 'express'; import { PrismaClient } from './prisma/generated/client/index.js'; import { Decimal } from '@prisma/client/runtime/library.js'; +import cors from 'cors'; // Import new routers import empleadosRouter from './routes/empleados/empleados.js'; @@ -8,6 +9,12 @@ import asistenciasRouter from './routes/asistencias/asistencias.js'; import tareasRouter from './routes/tareas/tareas.js'; import planillasRouter from './routes/planillas/planillas.js'; + + + + +// Resto del código + BigInt.prototype.toJSON = function () { return this.toString(); }; Decimal.prototype.toJSON = function () { return this.toString(); }; @@ -15,6 +22,11 @@ const prisma = new PrismaClient(); export const app = express(); app.use(express.json()); + +app.use(cors({ + origin: ['http://localhost:5173', 'https://planilla.interno.com'], + credentials: true +})); // Mount new routers app.use('/api/empleados', empleadosRouter); app.use('/api/asistencias', asistenciasRouter); diff --git a/ui/src/main.js b/ui/src/main.js index 512107d..d21dd70 100644 --- a/ui/src/main.js +++ b/ui/src/main.js @@ -5,9 +5,18 @@ import router from './router' import App from './App.vue' import './style.css' // Tailwind o tus estilos globales + + + const app = createApp(App) + +app.use(cors({ + origin: 'https://planilla.interno.com', + credentials: true // si usás cookies/sesiones +})); + app.use(createPinia()) app.use(router) diff --git a/ui/src/stores/useEmpleados.js b/ui/src/stores/useEmpleados.js index 60d0d3d..d4ee599 100644 --- a/ui/src/stores/useEmpleados.js +++ b/ui/src/stores/useEmpleados.js @@ -1,12 +1,84 @@ -import { defineStore } from 'pinia' +import { defineStore } from 'pinia'; +import apiClient from '../apiClient'; // ← asegurate que tenga baseURL y headers + +// Valor por defecto para el empleado activo +const getDefaultEmpleado = () => ({ + id: null, + created_at: null, + updated_at: null, + name: '', + cedula: null, + ubicacion: '.', // default del schema + grupo_estudio: null, + empleado: true, // marcamos que SÍ es empleado + avatar_url: null, + telefono: null, + idciat: null, + // Ojo: asistencias, tareasRealizadas y planillas se manejan en otras stores + // No sé la forma exacta de esos arrays; se cargan aparte. +}); + +export const useEmpleadosStore = defineStore('empleados', { + state: () => ({ + empleados: [], + currentEmpleado: getDefaultEmpleado(), + }), -export const useEmpleados = defineStore('empleados', { - state: () => ({ empleados: [] }), actions: { - // placeholder para cargar/crear empleados - async fetchAll () { - // simulamos fetch - this.empleados = [] + // ────────── CRUD básico ────────── + async fetchEmpleados () { + try { + const { data } = await apiClient.get('/api/empleados'); + this.empleados = data; + } catch (err) { + console.error('Error al traer empleados:', err); + } + }, + + async fetchEmpleadoById (id) { + try { + const { data } = await apiClient.get(`/api/empleados/${id}`); + this.currentEmpleado = data; + } catch (err) { + console.error(`Error al traer empleado ${id}:`, err); + this.currentEmpleado = getDefaultEmpleado(); + } + }, + + async createEmpleado (empleadoData) { + try { + await apiClient.post('/api/empleados', empleadoData); + await this.fetchEmpleados(); + } catch (err) { + console.error('Error creando empleado:', err); + throw err; // para que el form muestre feedback + } + }, + + async updateEmpleado (id, empleadoData) { + try { + await apiClient.put(`/api/empleados/${id}`, empleadoData); + await this.fetchEmpleados(); + this.clearCurrentEmpleado(); + } catch (err) { + console.error(`Error actualizando empleado ${id}:`, err); + throw err; + } + }, + + async deleteEmpleado (id) { + try { + await apiClient.delete(`/api/empleados/${id}`); + await this.fetchEmpleados(); + } catch (err) { + console.error(`Error eliminando empleado ${id}:`, err); + throw err; + } + }, + + // ────────── helpers ────────── + clearCurrentEmpleado () { + this.currentEmpleado = getDefaultEmpleado(); }, }, -}) +}); diff --git a/ui/src/views/empleados/EmpleadosIndex.vue b/ui/src/views/empleados/EmpleadosIndex.vue index 14e39cc..b363741 100644 --- a/ui/src/views/empleados/EmpleadosIndex.vue +++ b/ui/src/views/empleados/EmpleadosIndex.vue @@ -1,5 +1,6 @@