diff --git a/src/lang/es.js b/src/lang/es.js index 6e7566e..6bf89dc 100644 --- a/src/lang/es.js +++ b/src/lang/es.js @@ -133,11 +133,18 @@ export default { title:'Historial de cambios', description: 'Lista de los cambios realizados al sistema.', }, + certification_name: 'Nombre de certificación', + certification_type: 'Tipo de certificación', clear: 'Limpiar', close:"Cerrar", confirm:'Confirmar', copyright:'Todos los derechos reservados.', contact:'Contacto', + cost: 'Costo', + courses: { + title: 'Cursos', + description: 'Gestión de cursos de capacitación' + }, create: 'Crear', created: 'Registro creado', created_at: 'Fecha creación', @@ -174,6 +181,7 @@ export default { degreeType: 'Tipo de grado', deleted:'Registro eliminado', description:'Descripción', + duration: 'Duración', details:'Detalles', disable:'Deshabilitar', disabled:'Deshabilitado', @@ -184,6 +192,7 @@ export default { title:'Correo', verification:'Verificar correo' }, + exam_date: 'Fecha de examen', employees: { create: { title: 'Crear empleado', @@ -400,6 +409,7 @@ export default { updated_at:'Fecha actualización', updateFail:'Error al actualizar', unreaded:'No leído', + url: 'URL', user:'Usuario', users:{ academic: { diff --git a/src/layouts/AdminLayout.vue b/src/layouts/AdminLayout.vue index ffdba34..18bfcda 100644 --- a/src/layouts/AdminLayout.vue +++ b/src/layouts/AdminLayout.vue @@ -88,11 +88,6 @@ onMounted(() => { name="Solicitud de Cursos" to="admin.courses.request" /> - { - + diff --git a/src/pages/Courses/Assignamment.vue b/src/pages/Courses/Assignamment.vue index c354288..e4f9489 100644 --- a/src/pages/Courses/Assignamment.vue +++ b/src/pages/Courses/Assignamment.vue @@ -1,281 +1,218 @@ - - - - - Asignación de Cursos a Personal - Asigna cursos aprobados al personal seleccionado + + + + + + + + Asigna cursos aprobados al personal seleccionado + + + + + + + + + Curso Seleccionado + + + + {{ course.name }} + + {{ course.department?.name }} • {{ course.cost }} {{ course.cost_currency }} + + + {{ course.description }} + + + + + Cargando información del curso... - - - - - - - Seleccionar Curso Aprobado + + + + + Asignar a usuarios - - - - {{ selectedCourseDisplay }} - - - - - - + + {{ users.every(u => u.selected) ? 'Deseleccionar todo' : 'Seleccionar todo' }} + + - - + + - - + - {{ course.name }} - - {{ course.area }} • {{ formatCurrency(course.cost) }} - + + + + {{ user.name }} {{ user.paternal }} {{ user.maternal }} + + + {{ user.email }} - - - - - Asignar a personal - - - {{ personnel.every(p => p.selected) ? 'Deseleccionar todo' : 'Seleccionar todo' }} - - - - - - - - - - - - {{ person.name }} - - - - - - - - {{ selectedPersonnelCount }} persona(s) seleccionada(s) - + + {{ selectedUsersCount }} usuario(s) seleccionado(s) + - - - - - - Fecha de Inicio - - - - - - - - - - + + + + + + - - - - Fecha de Fin - - - - - - - - - - + + - - - - Fecha de Examen - - - - - - - - - - - + + + Notificar + + - - - - - Guardar - - - - - Notificar - - - - - + diff --git a/src/pages/Courses/Index.vue b/src/pages/Courses/Index.vue index e3724db..2618039 100644 --- a/src/pages/Courses/Index.vue +++ b/src/pages/Courses/Index.vue @@ -1,187 +1,124 @@ - - - Gestión de Solicitudes de Capacitación - Administra y aprueba las solicitudes de cursos de capacitación - + + {{ $t('courses.title') }} + {{ $t('courses.description') }} + + - - - - - - - - Área - Nombre del Curso - Costo Unitario - Url - Opciones - - - - - - - - {{ course.area }} - - + + + searcher.search(x)"> + + - - - - {{ course.courseName }} - - + + + searcher.pagination(page)"> + + + + + + + + - - - - {{ formatCurrency(course.unitCost) }} - - + + + + + {{ model.department.name }} + + + {{ model.name }} + {{ model.cost }} {{ model.currency }} + + + Ver curso + + - + + + + {{ model.status_ek }} + + + + + + + + + + + + + - - - - Ver curso - - + + + + + No se encontraron cursos + Intenta ajustar los filtros de búsqueda + + + + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - Mostrando {{ courses.length }} solicitudes - - - - - - Pendientes: {{ courses.filter(c => c.status === 'pending').length }} - - - - Aprobadas: {{ courses.filter(c => c.status === 'approved').length }} - - - - Rechazadas: {{ courses.filter(c => c.status === 'rejected').length }} - - - - - + + diff --git a/src/pages/Courses/Modals/Show.vue b/src/pages/Courses/Modals/Show.vue new file mode 100644 index 0000000..720bb9a --- /dev/null +++ b/src/pages/Courses/Modals/Show.vue @@ -0,0 +1,114 @@ + + + + + + + + + + + + {{ $t('details') }} + + + {{ $t('name') }}: + {{ model.name }} + + + {{ $t('certification_type') }}: + {{ model.certification_type ?? '-' }} + + + {{ $t('cost') }}: + {{ model.cost }} {{ model.cost_currency }} + + + {{ $t('duration') }}: + {{ model.duration ?? '-' }} días + + + {{ $t('description') }}: + {{ model.description ?? '-' }} + + + {{ $t('url') }}: + + {{ model.url }} + + + + {{ $t('certification_name') }}: + {{ model.certification_name ?? '-' }} + + + {{ $t('status') }}: + + {{ model.status_ek }} + + + + {{ $t('department') }}: + {{ model.department?.name ?? '-' }} + + + {{ $t('created_at') }}: + {{ getDateTime(model.created_at) }} + + + {{ $t('updated_at') }}: + {{ getDateTime(model.updated_at) }} + + + + + + \ No newline at end of file diff --git a/src/pages/Courses/Module.js b/src/pages/Courses/Module.js new file mode 100644 index 0000000..535f301 --- /dev/null +++ b/src/pages/Courses/Module.js @@ -0,0 +1,21 @@ +import { lang } from '@Lang/i18n'; +import { hasPermission } from '@Plugins/RolePermission.js'; + +// Ruta API +const apiTo = (name, params = {}) => route(`courses.admin.${name}`, params) + +// Ruta visual +const viewTo = ({ name = '', params = {}, query = {} }) => view({ name: `admin.courses.${name}`, params, query }) + +// Obtener traducción del componente +const transl = (str) => lang(`courses.${str}`) + +// Determina si un usuario puede hacer algo no en base a los permisos +const can = (permission) => hasPermission(`courses.${permission}`) + +export { + can, + viewTo, + apiTo, + transl +} \ No newline at end of file diff --git a/src/router/Index.js b/src/router/Index.js index 76b22fb..a1c43b3 100644 --- a/src/router/Index.js +++ b/src/router/Index.js @@ -172,7 +172,7 @@ const router = createRouter({ component: () => import('@Pages/Courses/Index.vue'), }, { - path: 'assignamment', + path: ':id/assignamment', name: 'admin.courses.assignamment', component: () => import('@Pages/Courses/Assignamment.vue'), },
Asigna cursos aprobados al personal seleccionado
Administra y aprueba las solicitudes de cursos de capacitación
{{ $t('courses.description') }} +
No se encontraron cursos
Intenta ajustar los filtros de búsqueda
+ {{ $t('details') }} +
+ {{ $t('name') }}: + {{ model.name }} +
+ {{ $t('certification_type') }}: + {{ model.certification_type ?? '-' }} +
+ {{ $t('cost') }}: + {{ model.cost }} {{ model.cost_currency }} +
+ {{ $t('duration') }}: + {{ model.duration ?? '-' }} días +
+ {{ $t('description') }}: + {{ model.description ?? '-' }} +
+ {{ $t('url') }}: + + {{ model.url }} + +
+ {{ $t('certification_name') }}: + {{ model.certification_name ?? '-' }} +
+ {{ $t('status') }}: + + {{ model.status_ek }} + +
+ {{ $t('department') }}: + {{ model.department?.name ?? '-' }} +
+ {{ $t('created_at') }}: + {{ getDateTime(model.created_at) }} +
+ {{ $t('updated_at') }}: + {{ getDateTime(model.updated_at) }} +