From 720fb660afef02420fd6e6d296ab0a86f82e0ea8 Mon Sep 17 00:00:00 2001 From: "jose.lopez" Date: Mon, 29 Sep 2025 00:55:09 -0600 Subject: [PATCH] Cursos empleados --- src/layouts/AppLayout.vue | 5 + src/pages/Courses/Employee/Index.vue | 93 +++++++++++++++++ src/pages/Courses/Employee/Modals/Show.vue | 114 +++++++++++++++++++++ src/pages/Courses/Employee/Module.js | 21 ++++ src/router/Index.js | 9 ++ 5 files changed, 242 insertions(+) create mode 100644 src/pages/Courses/Employee/Index.vue create mode 100644 src/pages/Courses/Employee/Modals/Show.vue create mode 100644 src/pages/Courses/Employee/Module.js diff --git a/src/layouts/AppLayout.vue b/src/layouts/AppLayout.vue index 4b1c41c..4681d7c 100644 --- a/src/layouts/AppLayout.vue +++ b/src/layouts/AppLayout.vue @@ -48,6 +48,11 @@ onMounted(() => { name="Vacaciones" to="vacations.index" /> + +import { onMounted, ref } from 'vue'; +import { useSearcher } from '@Services/Api'; +import { apiTo } from './Module' + +import IconButton from '@Holos/Button/Icon.vue' +import Table from '@Holos/NewTable.vue'; +import ShowView from './Modals/Show.vue'; + +import GoogleIcon from '@Shared/GoogleIcon.vue'; +import Searcher from '@Holos/Searcher.vue'; + +/** Propiedades */ +const models = ref([]); + +/** Referencias */ +const showModal = ref(false); + +/** Métodos */ +const searcher = useSearcher({ + url: apiTo('index'), + onSuccess: (r) => models.value = r.models, + onError: () => models.value = [] +}); + +/** Ciclos */ +onMounted(() => { + searcher.search(); +}); + + + diff --git a/src/pages/Courses/Employee/Modals/Show.vue b/src/pages/Courses/Employee/Modals/Show.vue new file mode 100644 index 0000000..720bb9a --- /dev/null +++ b/src/pages/Courses/Employee/Modals/Show.vue @@ -0,0 +1,114 @@ + + + \ No newline at end of file diff --git a/src/pages/Courses/Employee/Module.js b/src/pages/Courses/Employee/Module.js new file mode 100644 index 0000000..f510f12 --- /dev/null +++ b/src/pages/Courses/Employee/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.employee.${name}`, params) + +// Ruta visual +const viewTo = ({ name = '', params = {}, query = {} }) => view({ name: `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 6231bee..7c8e177 100644 --- a/src/router/Index.js +++ b/src/router/Index.js @@ -58,6 +58,15 @@ const router = createRouter({ } ] }, + { + path: 'courses', + name: 'courses.index', + meta: { + title: 'Cursos', + icon: 'info', + }, + component: () => import('@Pages/Courses/Employee/Index.vue'), + }, { path: 'profile', name: 'profile.show',