From ad264107f6bcc7834b88845a5535515954919eb6 Mon Sep 17 00:00:00 2001 From: "edgar.mendez" Date: Tue, 10 Mar 2026 16:13:26 -0600 Subject: [PATCH] feat: add departments and employees management components - Implement DepartmentsService for CRUD operations on departments. - Create Employees.vue for managing employee listings, including viewing, editing, and deleting employees. - Add EmployeesForm.vue for creating and editing employee details with validation. - Introduce employees.interfaces.ts to define employee-related TypeScript interfaces. - Implement EmployeesService for API interactions related to employees. - Add positions.interface.ts and positions.services.ts for managing job positions. --- src/components/layout/Sidebar.vue | 3 +- .../requisitions/CreateRequisition.vue | 4 +- src/modules/requisitions/Requisitions.vue | 4 +- .../departments/DepartmentDetailModal.vue | 269 +++++++++ .../components/departments/DepartmentForm.vue | 47 +- .../rh/components/departments/Departments.vue | 40 +- .../departments}/departments.interface.ts | 22 + .../departments}/departments.services.ts | 12 +- .../rh/components/employees/Employees.vue | 512 +++++++++++++++++ .../rh/components/employees/EmployeesForm.vue | 533 ++++++++++++++++++ .../employees/employees.interfaces.ts | 144 +++++ .../employees/employees.services.ts | 88 +++ .../rh/components/positions/Positions.vue | 72 ++- .../rh/components/positions/PositionsForm.vue | 76 ++- .../positions}/positions.interface.ts | 9 + .../positions}/positions.services.ts | 2 +- src/router/index.ts | 10 + 17 files changed, 1813 insertions(+), 34 deletions(-) create mode 100644 src/modules/rh/components/departments/DepartmentDetailModal.vue rename src/modules/rh/{types => components/departments}/departments.interface.ts (52%) rename src/modules/rh/{services => components/departments}/departments.services.ts (77%) create mode 100644 src/modules/rh/components/employees/Employees.vue create mode 100644 src/modules/rh/components/employees/EmployeesForm.vue create mode 100644 src/modules/rh/components/employees/employees.interfaces.ts create mode 100644 src/modules/rh/components/employees/employees.services.ts rename src/modules/rh/{types => components/positions}/positions.interface.ts (71%) rename src/modules/rh/{services => components/positions}/positions.services.ts (96%) diff --git a/src/components/layout/Sidebar.vue b/src/components/layout/Sidebar.vue index 0d8a2fc..92fce88 100644 --- a/src/components/layout/Sidebar.vue +++ b/src/components/layout/Sidebar.vue @@ -64,7 +64,8 @@ const menuItems = ref([ icon: 'pi pi-users', items: [ { label: 'Puestos laborales', icon: 'pi pi-user', to: '/rh/positions' }, - { label: 'Departamentos', icon: 'pi pi-briefcase', to: '/rh/departments' } + { label: 'Departamentos', icon: 'pi pi-briefcase', to: '/rh/departments' }, + { label: 'Empleados', icon: 'pi pi-id-card', to: '/rh/employees' } ] }, { diff --git a/src/modules/requisitions/CreateRequisition.vue b/src/modules/requisitions/CreateRequisition.vue index ccc9504..a63c994 100644 --- a/src/modules/requisitions/CreateRequisition.vue +++ b/src/modules/requisitions/CreateRequisition.vue @@ -14,8 +14,8 @@ import Dialog from 'primevue/dialog'; import Toast from 'primevue/toast'; import { useRequisitionStore } from './stores/requisitionStore'; import type { RequisitionItem } from './types/requisition.interfaces'; -import { DepartmentsService } from '@/modules/rh/services/departments.services'; -import type { Department } from '@/modules/rh/types/departments.interface'; +import { DepartmentsService } from '@/modules/rh/components/departments/departments.services'; +import type { Department } from '@/modules/rh/components/departments/departments.interface'; const router = useRouter(); const route = useRoute(); diff --git a/src/modules/requisitions/Requisitions.vue b/src/modules/requisitions/Requisitions.vue index 8494243..dbf1512 100644 --- a/src/modules/requisitions/Requisitions.vue +++ b/src/modules/requisitions/Requisitions.vue @@ -16,8 +16,8 @@ import Dialog from 'primevue/dialog'; import Textarea from 'primevue/textarea'; import { useRequisitionStore } from './stores/requisitionStore'; import type { Requisition } from './types/requisition.interfaces'; -import { DepartmentsService } from '@/modules/rh/services/departments.services'; -import type { Department } from '@/modules/rh/types/departments.interface'; +import { DepartmentsService } from '@/modules/rh/components/departments/departments.services'; +import type { Department } from '@/modules/rh/components/departments/departments.interface'; const router = useRouter(); const toast = useToast(); diff --git a/src/modules/rh/components/departments/DepartmentDetailModal.vue b/src/modules/rh/components/departments/DepartmentDetailModal.vue new file mode 100644 index 0000000..4de7662 --- /dev/null +++ b/src/modules/rh/components/departments/DepartmentDetailModal.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/src/modules/rh/components/departments/DepartmentForm.vue b/src/modules/rh/components/departments/DepartmentForm.vue index 067fd5c..04b55e0 100644 --- a/src/modules/rh/components/departments/DepartmentForm.vue +++ b/src/modules/rh/components/departments/DepartmentForm.vue @@ -34,6 +34,25 @@

+ +
+ + +

+ Seleccione un departamento padre para crear una jerarquía organizacional. Déjelo vacío para departamentos de nivel raíz. +

+
+