una-nuxt-module 2.1.0 → 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nuxt/unaxt/button.ts +36 -0
- package/.nuxt/unaxt.css +3 -0
- package/dist/module.json +4 -4
- package/dist/module.mjs +145 -48
- package/dist/runtime/components/ui/button/Button.vue +23 -0
- package/dist/runtime/components/ui/button/Button.vue.d.ts +47 -0
- package/dist/runtime/components/ui/button/index.d.ts +7 -0
- package/dist/runtime/components/ui/button/index.js +27 -0
- package/dist/runtime/enums/index.d.ts +0 -1
- package/dist/runtime/enums/index.js +0 -1
- package/dist/runtime/index.css +1 -0
- package/dist/runtime/lib/utils.d.ts +2 -0
- package/dist/runtime/lib/utils.js +5 -0
- package/dist/runtime/pages/401.vue +2 -3
- package/dist/runtime/pages/401.vue.d.ts +2 -0
- package/dist/runtime/pages/403.vue +2 -3
- package/dist/runtime/pages/403.vue.d.ts +2 -0
- package/dist/runtime/pages/ssoCallback.vue +5 -5
- package/dist/runtime/pages/ssoCallback.vue.d.ts +2 -0
- package/dist/runtime/types/index.d.ts +9 -38
- package/dist/types.d.mts +2 -2
- package/package.json +59 -24
- package/dist/module.cjs +0 -5
- package/dist/module.d.ts +0 -14
- package/dist/runtime/assets/scss/styles.css +0 -1016
- package/dist/runtime/components/layout/footer/Footer.vue +0 -16
- package/dist/runtime/components/layout/header/BtnExtendMenu.vue +0 -29
- package/dist/runtime/components/layout/header/Header.vue +0 -7
- package/dist/runtime/components/layout/header/HeaderMenu.vue +0 -41
- package/dist/runtime/components/layout/header/HeaderMenuTabs.vue +0 -102
- package/dist/runtime/components/layout/sidebar/NavCollapse.vue +0 -38
- package/dist/runtime/components/layout/sidebar/NavGroup.vue +0 -9
- package/dist/runtime/components/layout/sidebar/NavItem.vue +0 -25
- package/dist/runtime/components/layout/sidebar/SideBar.vue +0 -74
- package/dist/runtime/components/layout/sidebar/SideBarFooter.vue +0 -69
- package/dist/runtime/components/layout/sidebar/TopSideBarLogo.vue +0 -25
- package/dist/runtime/components/shared/authorization/AuthorizedRenderer.vue +0 -43
- package/dist/runtime/components/shared/buttons/BtnBack.vue +0 -19
- package/dist/runtime/components/shared/buttons/BtnCancel.vue +0 -13
- package/dist/runtime/components/shared/buttons/BtnConfirm.vue +0 -14
- package/dist/runtime/components/shared/containers/JsonViewer.vue +0 -13
- package/dist/runtime/components/shared/dates/DatePicker.vue +0 -91
- package/dist/runtime/components/shared/dialogs/DialogConfirmDelete.vue +0 -32
- package/dist/runtime/components/shared/dialogs/DialogExportTable.vue +0 -44
- package/dist/runtime/components/shared/feedback/LoadingSession.vue +0 -17
- package/dist/runtime/components/shared/feedback/SnackBar.vue +0 -40
- package/dist/runtime/components/shared/forms/FormBuilder/FieldBuilder.vue +0 -251
- package/dist/runtime/components/shared/forms/FormBuilder/FieldSlotMissed.vue +0 -20
- package/dist/runtime/components/shared/forms/FormBuilder/FormBuilder.vue +0 -213
- package/dist/runtime/components/shared/forms/FormBuilder/SteppersBuilder.vue +0 -32
- package/dist/runtime/components/shared/forms/FormBuilder/TabsBuilder.vue +0 -30
- package/dist/runtime/components/shared/forms/FormDialogWrapper.vue +0 -48
- package/dist/runtime/components/shared/forms/FormPageWrapper.vue +0 -19
- package/dist/runtime/components/shared/forms/FormSubmitSection.vue +0 -48
- package/dist/runtime/components/shared/navigation/BreadCrumbs.vue +0 -21
- package/dist/runtime/components/shared/tables/CustomTable.vue +0 -261
- package/dist/runtime/components/shared/tables/CustomTableHeader.vue +0 -25
- package/dist/runtime/components/shared/tables/NoDataMessage.vue +0 -12
- package/dist/runtime/components/shared/tables/TableSearchBar.vue +0 -22
- package/dist/runtime/components/shared/tables/buttons/BtnAdd.vue +0 -25
- package/dist/runtime/components/shared/tables/buttons/BtnDelete.vue +0 -32
- package/dist/runtime/components/shared/tables/buttons/BtnEdit.vue +0 -30
- package/dist/runtime/components/shared/tables/buttons/BtnExport.vue +0 -17
- package/dist/runtime/components/shared/tables/buttons/BtnFilter.vue +0 -21
- package/dist/runtime/components/shared/tables/pagination/ItemsPerPageCombo.vue +0 -24
- package/dist/runtime/components/shared/tables/pagination/ItemsPerPageLabel.vue +0 -5
- package/dist/runtime/components/shared/tables/pagination/PageSelector.vue +0 -16
- package/dist/runtime/components/shared/tables/pagination/PaginationInfo.vue +0 -31
- package/dist/runtime/enums/EVuetifyDateFormats.d.ts +0 -32
- package/dist/runtime/enums/EVuetifyDateFormats.js +0 -30
- package/dist/runtime/layouts/default.vue +0 -31
- package/dist/runtime/layouts/empty.vue +0 -12
- package/dist/types.d.ts +0 -7
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<v-footer color="gray100" rounded class="mx-12">
|
|
4
|
-
<v-row justify="center">
|
|
5
|
-
<v-col cols="6">
|
|
6
|
-
<p class="text-caption text-center">
|
|
7
|
-
{{ $t("Components.Footer.Info[0]") }}
|
|
8
|
-
</p>
|
|
9
|
-
<p class="text-caption text-center">
|
|
10
|
-
{{ $t("Components.Footer.Info[1]") }}
|
|
11
|
-
</p>
|
|
12
|
-
</v-col>
|
|
13
|
-
</v-row>
|
|
14
|
-
</v-footer>
|
|
15
|
-
</div>
|
|
16
|
-
</template>
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-btn
|
|
3
|
-
:icon="extendMenuIcon"
|
|
4
|
-
@click.stop="handleClick"
|
|
5
|
-
class="btnExtendMenu"
|
|
6
|
-
density="compact"
|
|
7
|
-
rounded="lg"
|
|
8
|
-
size="large"
|
|
9
|
-
/>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script lang="ts" setup>
|
|
13
|
-
import { computed } from "vue";
|
|
14
|
-
import { useUiCustomizerStore } from "../../../stores/UiCustomizer";
|
|
15
|
-
|
|
16
|
-
const uiCustomizer = useUiCustomizerStore();
|
|
17
|
-
|
|
18
|
-
const extendMenuIcon = computed(() => {
|
|
19
|
-
return uiCustomizer.isSidebarMinimized ? "mdi-menu-close" : "mdi-menu-open";
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
const handleClick = () => {
|
|
23
|
-
uiCustomizer.toggleSidebar();
|
|
24
|
-
};
|
|
25
|
-
</script>
|
|
26
|
-
|
|
27
|
-
<style>
|
|
28
|
-
.btnExtendMenu{color:rgb(var(--v-theme-darkText),.75)}
|
|
29
|
-
</style>
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-menu :close-on-content-click="false" offset="8, 0">
|
|
3
|
-
<template v-slot:activator="{ props }">
|
|
4
|
-
<v-btn
|
|
5
|
-
append-icon="mdi-chevron-down"
|
|
6
|
-
class="profileBtn"
|
|
7
|
-
color="secondary"
|
|
8
|
-
rounded="lg"
|
|
9
|
-
v-bind="props"
|
|
10
|
-
variant="tonal"
|
|
11
|
-
>
|
|
12
|
-
<div class="d-flex align-center">
|
|
13
|
-
<v-avatar class="mr-sm-2 mr-0 py-2">
|
|
14
|
-
<img :src="photoUrl" />
|
|
15
|
-
</v-avatar>
|
|
16
|
-
<span class="text-subtitle-1 mb-0 d-sm-block d-none">
|
|
17
|
-
{{ fullName }}
|
|
18
|
-
</span>
|
|
19
|
-
</div>
|
|
20
|
-
</v-btn>
|
|
21
|
-
</template>
|
|
22
|
-
<v-sheet rounded="md" width="340">
|
|
23
|
-
<HeaderMenuTabs />
|
|
24
|
-
</v-sheet>
|
|
25
|
-
</v-menu>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
|
-
<script lang="ts" setup>
|
|
29
|
-
import { ref, onMounted } from "vue";
|
|
30
|
-
import { useAuthStore } from "#imports";
|
|
31
|
-
|
|
32
|
-
const authStore = useAuthStore();
|
|
33
|
-
|
|
34
|
-
const photoUrl = ref("");
|
|
35
|
-
const fullName = ref("");
|
|
36
|
-
|
|
37
|
-
onMounted(() => {
|
|
38
|
-
photoUrl.value = authStore.user?.photoUrl as string;
|
|
39
|
-
fullName.value = authStore.user?.fullName as string;
|
|
40
|
-
});
|
|
41
|
-
</script>
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<div class="d-flex align-center pa-5">
|
|
4
|
-
<v-avatar size="50" class="mr-4">
|
|
5
|
-
<img :src="photoUrl" width="50" alt="User" />
|
|
6
|
-
</v-avatar>
|
|
7
|
-
<div>
|
|
8
|
-
<span class="text-h6 mb-0">{{ fullName }}</span>
|
|
9
|
-
<p class="text-caption mb-0">{{ email }}</p>
|
|
10
|
-
<p class="text-caption mb-0">{{ role }}</p>
|
|
11
|
-
</div>
|
|
12
|
-
</div>
|
|
13
|
-
<v-tabs v-model="tabSelected" color="primary" grow>
|
|
14
|
-
<v-tab value="tabProfile" prepend-icon="mdi-account" class="v-text-field">
|
|
15
|
-
Perfil
|
|
16
|
-
</v-tab>
|
|
17
|
-
<v-tab value="tabConfig" prepend-icon="mdi-cog" class="v-text-field">
|
|
18
|
-
Configuración
|
|
19
|
-
</v-tab>
|
|
20
|
-
</v-tabs>
|
|
21
|
-
<perfect-scrollbar>
|
|
22
|
-
<v-window v-model="tabSelected">
|
|
23
|
-
<v-window-item value="tabProfile">
|
|
24
|
-
<v-list class="py-0" aria-label="profile list" aria-busy="true">
|
|
25
|
-
<v-list-item
|
|
26
|
-
@click.stop="navigateTo('/profile')"
|
|
27
|
-
color="primary"
|
|
28
|
-
prepend-icon="mdi-account"
|
|
29
|
-
rounded="0"
|
|
30
|
-
value="View Profile"
|
|
31
|
-
>
|
|
32
|
-
<v-list-item-title class="text-subtitle-2">
|
|
33
|
-
Ver Perfil
|
|
34
|
-
</v-list-item-title>
|
|
35
|
-
</v-list-item>
|
|
36
|
-
|
|
37
|
-
<v-list-item
|
|
38
|
-
@click.stop="authStore.logout()"
|
|
39
|
-
color="primary"
|
|
40
|
-
prepend-icon="mdi-logout"
|
|
41
|
-
rounded="0"
|
|
42
|
-
>
|
|
43
|
-
<v-list-item-title class="text-subtitle-2">
|
|
44
|
-
{{ $t("Actions.CloseSession") }}
|
|
45
|
-
</v-list-item-title>
|
|
46
|
-
</v-list-item>
|
|
47
|
-
</v-list>
|
|
48
|
-
</v-window-item>
|
|
49
|
-
|
|
50
|
-
<v-window-item value="tabConfig">
|
|
51
|
-
<v-list class="py-0" aria-label="profile list" aria-busy="true">
|
|
52
|
-
<v-list-item
|
|
53
|
-
@click.stop="navigateTo('/configuration/preferences')"
|
|
54
|
-
color="primary"
|
|
55
|
-
prepend-icon="mdi-account-cog"
|
|
56
|
-
rounded="0"
|
|
57
|
-
value="Preferencias"
|
|
58
|
-
>
|
|
59
|
-
<v-list-item-title class="text-subtitle-2">
|
|
60
|
-
Preferencias de la cuenta
|
|
61
|
-
</v-list-item-title>
|
|
62
|
-
</v-list-item>
|
|
63
|
-
|
|
64
|
-
<v-list-item
|
|
65
|
-
@click.stop="navigateTo('/configuration/support')"
|
|
66
|
-
color="primary"
|
|
67
|
-
prepend-icon="mdi-help-circle"
|
|
68
|
-
rounded="0"
|
|
69
|
-
value="Soporte"
|
|
70
|
-
>
|
|
71
|
-
<v-list-item-title class="text-subtitle-2">
|
|
72
|
-
Soporte
|
|
73
|
-
</v-list-item-title>
|
|
74
|
-
</v-list-item>
|
|
75
|
-
</v-list>
|
|
76
|
-
</v-window-item>
|
|
77
|
-
</v-window>
|
|
78
|
-
</perfect-scrollbar>
|
|
79
|
-
</div>
|
|
80
|
-
</template>
|
|
81
|
-
|
|
82
|
-
<script lang="ts" setup>
|
|
83
|
-
import { navigateTo } from "#imports";
|
|
84
|
-
import { ref, onMounted } from "vue";
|
|
85
|
-
import { useAuthStore } from "#imports";
|
|
86
|
-
|
|
87
|
-
const authStore = useAuthStore();
|
|
88
|
-
|
|
89
|
-
const tabSelected = ref(null);
|
|
90
|
-
|
|
91
|
-
const photoUrl = ref("");
|
|
92
|
-
const fullName = ref("");
|
|
93
|
-
const email = ref("");
|
|
94
|
-
const role = ref("");
|
|
95
|
-
|
|
96
|
-
onMounted(() => {
|
|
97
|
-
photoUrl.value = authStore.user?.photoUrl as string;
|
|
98
|
-
fullName.value = authStore.user?.fullName as string;
|
|
99
|
-
email.value = authStore.user?.email as string;
|
|
100
|
-
role.value = authStore.user?.mainRole as string;
|
|
101
|
-
});
|
|
102
|
-
</script>
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-list-group no-action>
|
|
3
|
-
<!-- El combo padre -->
|
|
4
|
-
<template v-slot:activator="{ props }">
|
|
5
|
-
<v-list-item
|
|
6
|
-
v-bind="props"
|
|
7
|
-
:value="item?.title"
|
|
8
|
-
rounded
|
|
9
|
-
class="mb-1"
|
|
10
|
-
color="primary"
|
|
11
|
-
:prepend-icon="item?.icon"
|
|
12
|
-
>
|
|
13
|
-
<v-list-item-title class="mr-auto">{{ item?.title }}</v-list-item-title>
|
|
14
|
-
|
|
15
|
-
<v-list-item-subtitle
|
|
16
|
-
v-if="item?.description"
|
|
17
|
-
class="text-caption mt-n1 hide-menu"
|
|
18
|
-
>
|
|
19
|
-
{{ item.description }}
|
|
20
|
-
</v-list-item-subtitle>
|
|
21
|
-
</v-list-item>
|
|
22
|
-
</template>
|
|
23
|
-
|
|
24
|
-
<!-- Se renderizan los elementos hijos -->
|
|
25
|
-
<template v-for="(subitem, i) in item?.children" :key="i">
|
|
26
|
-
<NavCollapse
|
|
27
|
-
v-if="subitem.children"
|
|
28
|
-
:item="subitem"
|
|
29
|
-
:level="(props?.level) as number + 1"
|
|
30
|
-
/>
|
|
31
|
-
<NavItem v-else :item="subitem" :level="(props?.level) as number + 1" />
|
|
32
|
-
</template>
|
|
33
|
-
</v-list-group>
|
|
34
|
-
</template>
|
|
35
|
-
|
|
36
|
-
<script lang="ts" setup>
|
|
37
|
-
const props = defineProps({ item: Object, level: Number });
|
|
38
|
-
</script>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-list-item
|
|
3
|
-
:to="item?.to"
|
|
4
|
-
rounded
|
|
5
|
-
color="primary"
|
|
6
|
-
:disabled="item?.disabled"
|
|
7
|
-
>
|
|
8
|
-
<template v-slot:prepend>
|
|
9
|
-
<v-icon v-if="props.item?.icon" :icon="props.item.icon" />
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<v-list-item-title>{{ item?.title }}</v-list-item-title>
|
|
13
|
-
|
|
14
|
-
<v-list-item-subtitle
|
|
15
|
-
v-if="item?.description"
|
|
16
|
-
class="text-caption mt-n1 hide-menu"
|
|
17
|
-
>
|
|
18
|
-
{{ item.description }}
|
|
19
|
-
</v-list-item-subtitle>
|
|
20
|
-
</v-list-item>
|
|
21
|
-
</template>
|
|
22
|
-
|
|
23
|
-
<script lang="ts" setup>
|
|
24
|
-
const props = defineProps({ item: Object, level: Number });
|
|
25
|
-
</script>
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<v-navigation-drawer
|
|
4
|
-
:rail="uiCustomizer.isSidebarMinimized"
|
|
5
|
-
@mouseleave="isHoveringSideBar = false"
|
|
6
|
-
@mouseover="isHoveringSideBar = true"
|
|
7
|
-
app
|
|
8
|
-
border="darkText"
|
|
9
|
-
class="leftSidebar"
|
|
10
|
-
color="containerBg"
|
|
11
|
-
elevation="0"
|
|
12
|
-
expand-on-hover
|
|
13
|
-
left
|
|
14
|
-
mobile-breakpoint="lg"
|
|
15
|
-
rail-width="60"
|
|
16
|
-
v-model="uiCustomizer.drawSidebar"
|
|
17
|
-
>
|
|
18
|
-
<template v-slot:prepend>
|
|
19
|
-
<div class="d-flex align-center justify-center" style="height: 60px">
|
|
20
|
-
<TopSideBarLogo v-model:open-sidebar="isHoveringSideBar" />
|
|
21
|
-
</div>
|
|
22
|
-
<v-divider :thickness="1" />
|
|
23
|
-
</template>
|
|
24
|
-
|
|
25
|
-
<perfect-scrollbar class="scrollnavbar">
|
|
26
|
-
<v-list
|
|
27
|
-
aria-busy="true"
|
|
28
|
-
aria-label="menu list"
|
|
29
|
-
v-model:opened="openedMenus"
|
|
30
|
-
>
|
|
31
|
-
<template v-for="(item, i) in menuItems" :key="i">
|
|
32
|
-
<NavGroup :item v-if="item?.header" :key="item.title" />
|
|
33
|
-
|
|
34
|
-
<v-divider class="my-3" v-else-if="item?.divider" />
|
|
35
|
-
|
|
36
|
-
<NavCollapse
|
|
37
|
-
:item
|
|
38
|
-
:level="0"
|
|
39
|
-
class="leftPadding"
|
|
40
|
-
v-else-if="item?.children"
|
|
41
|
-
/>
|
|
42
|
-
|
|
43
|
-
<NavItem :item v-else />
|
|
44
|
-
</template>
|
|
45
|
-
</v-list>
|
|
46
|
-
</perfect-scrollbar>
|
|
47
|
-
|
|
48
|
-
<template v-slot:append>
|
|
49
|
-
<SideBarFooter v-model:open-sidebar="isHoveringSideBar" />
|
|
50
|
-
</template>
|
|
51
|
-
</v-navigation-drawer>
|
|
52
|
-
</div>
|
|
53
|
-
</template>
|
|
54
|
-
|
|
55
|
-
<script lang="ts" setup>
|
|
56
|
-
import { ref, shallowRef, watch } from "vue";
|
|
57
|
-
import { storeToRefs } from "pinia";
|
|
58
|
-
import { useAuthorization } from "../../../composables/useAuthorization";
|
|
59
|
-
import { useUiCustomizerStore } from "../../../stores/UiCustomizer";
|
|
60
|
-
|
|
61
|
-
const authorization = useAuthorization();
|
|
62
|
-
const uiCustomizer = useUiCustomizerStore();
|
|
63
|
-
|
|
64
|
-
const isHoveringSideBar = ref(false);
|
|
65
|
-
const openedMenus = ref([]);
|
|
66
|
-
|
|
67
|
-
const menuItems = shallowRef(authorization.getAuthorizedPaths());
|
|
68
|
-
|
|
69
|
-
const uiCustomizerRef = storeToRefs(uiCustomizer);
|
|
70
|
-
|
|
71
|
-
watch(uiCustomizerRef.isSidebarMinimized, (newValue, oldValue) => {
|
|
72
|
-
if (newValue) openedMenus.value = [];
|
|
73
|
-
});
|
|
74
|
-
</script>
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="SideBarFooter pb-4">
|
|
3
|
-
<v-spacer />
|
|
4
|
-
|
|
5
|
-
<v-divider :thickness="1" />
|
|
6
|
-
|
|
7
|
-
<v-list aria-busy="true" aria-label="sidebar footer">
|
|
8
|
-
<!-- Toogle Theme Switcher -->
|
|
9
|
-
<v-list-item rounded>
|
|
10
|
-
<template v-slot:prepend>
|
|
11
|
-
<v-icon :icon="toggleThemeIcon" />
|
|
12
|
-
</template>
|
|
13
|
-
<template v-slot:append>
|
|
14
|
-
<v-switch
|
|
15
|
-
:false-value="ETheme.LIGHT"
|
|
16
|
-
:true-value="ETheme.DARK"
|
|
17
|
-
color="primary"
|
|
18
|
-
hide-details
|
|
19
|
-
v-if="!uiCustomizer.isSidebarMinimized || openSidebar"
|
|
20
|
-
v-model="currentTheme"
|
|
21
|
-
/>
|
|
22
|
-
</template>
|
|
23
|
-
<v-list-item-title>{{ toggleThemeTitle }}</v-list-item-title>
|
|
24
|
-
</v-list-item>
|
|
25
|
-
|
|
26
|
-
<!-- Close Session Button -->
|
|
27
|
-
<v-list-item rounded @click="authStore.logout()">
|
|
28
|
-
<template v-slot:prepend>
|
|
29
|
-
<v-icon icon="mdi-logout" />
|
|
30
|
-
</template>
|
|
31
|
-
<v-list-item-title> {{ $t("Actions.CloseSession") }}</v-list-item-title>
|
|
32
|
-
</v-list-item>
|
|
33
|
-
</v-list>
|
|
34
|
-
</div>
|
|
35
|
-
</template>
|
|
36
|
-
|
|
37
|
-
<script lang="ts" setup>
|
|
38
|
-
import { computed, ref, watch } from "vue";
|
|
39
|
-
import { ETheme } from "../../../enums";
|
|
40
|
-
import { useAuthStore, useI18n } from "#imports";
|
|
41
|
-
import { useUiCustomizerStore } from "../../../stores/UiCustomizer";
|
|
42
|
-
|
|
43
|
-
import { useTheme } from "vuetify";
|
|
44
|
-
|
|
45
|
-
const { t } = useI18n();
|
|
46
|
-
const theme = useTheme();
|
|
47
|
-
const authStore = useAuthStore();
|
|
48
|
-
const uiCustomizer = useUiCustomizerStore();
|
|
49
|
-
|
|
50
|
-
const openSidebar = defineModel<boolean>("openSidebar", { required: true });
|
|
51
|
-
|
|
52
|
-
const currentTheme = ref(ETheme.LIGHT);
|
|
53
|
-
|
|
54
|
-
const toggleThemeTitle = computed(() => {
|
|
55
|
-
return currentTheme.value == ETheme.DARK
|
|
56
|
-
? t("Components.SideBar.SideBarFooter.DarkTheme")
|
|
57
|
-
: t("Components.SideBar.SideBarFooter.LightTheme");
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
const toggleThemeIcon = computed(() => {
|
|
61
|
-
return currentTheme.value == ETheme.DARK
|
|
62
|
-
? "mdi-moon-waning-crescent"
|
|
63
|
-
: "mdi-white-balance-sunny";
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
watch(currentTheme, (newValue, oldValue) => {
|
|
67
|
-
theme.global.name.value = newValue;
|
|
68
|
-
});
|
|
69
|
-
</script>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="d-flex justify-center">
|
|
3
|
-
<NuxtLink to="/" style="text-decoration: none; color: inherit">
|
|
4
|
-
<img
|
|
5
|
-
v-if="!uiCustomizer.isSidebarMinimized || openSidebar"
|
|
6
|
-
alt=""
|
|
7
|
-
height="40"
|
|
8
|
-
src="/images/logos/UNA_LogoType_LogoMark_Red.png"
|
|
9
|
-
/>
|
|
10
|
-
<img
|
|
11
|
-
v-else
|
|
12
|
-
alt=""
|
|
13
|
-
height="25"
|
|
14
|
-
src="/images/logos/UNA_LogoMark_Black.png"
|
|
15
|
-
/>
|
|
16
|
-
</NuxtLink>
|
|
17
|
-
</div>
|
|
18
|
-
</template>
|
|
19
|
-
|
|
20
|
-
<script lang="ts" setup>
|
|
21
|
-
import { useUiCustomizerStore } from "../../../stores/UiCustomizer";
|
|
22
|
-
|
|
23
|
-
const uiCustomizer = useUiCustomizerStore();
|
|
24
|
-
const openSidebar = defineModel<boolean>("openSidebar", { required: true });
|
|
25
|
-
</script>
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<template v-if="renderContent()">
|
|
3
|
-
<slot />
|
|
4
|
-
<div>{{ props }}</div>
|
|
5
|
-
</template>
|
|
6
|
-
</template>
|
|
7
|
-
|
|
8
|
-
<script lang="ts" setup>
|
|
9
|
-
import type { PropType } from "vue";
|
|
10
|
-
import { useAuthorization } from "../../../composables/useAuthorization";
|
|
11
|
-
import type { TAuthorization } from "../../../types";
|
|
12
|
-
|
|
13
|
-
const props = defineProps({
|
|
14
|
-
/** Renderiza si el usuario no tiene la autorización en el recurso. */
|
|
15
|
-
renderIfUnauthorized: { type: Boolean, required: false, default: false },
|
|
16
|
-
/** Autorización a validar en el recurso. */
|
|
17
|
-
authorization: { type: String as PropType<TAuthorization>, required: true },
|
|
18
|
-
/** Recurso a validar. */
|
|
19
|
-
resource: { type: String, required: false },
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Método que valida si el contenido se debe renderizar.
|
|
24
|
-
*/
|
|
25
|
-
const renderContent = (): boolean => {
|
|
26
|
-
const authorization = useAuthorization();
|
|
27
|
-
|
|
28
|
-
// Si el recurso no esta definido por props toma la ruta actual como recurso
|
|
29
|
-
const resource = props.resource ?? authorization.currentResource.value;
|
|
30
|
-
|
|
31
|
-
// Valida si el usuario tiene la autorización en el recurso
|
|
32
|
-
const hasAuthorization = authorization.hasAuthorizationIn({
|
|
33
|
-
authorization: props.authorization,
|
|
34
|
-
resource,
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
if (props.renderIfUnauthorized) {
|
|
38
|
-
return !hasAuthorization;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return hasAuthorization;
|
|
42
|
-
};
|
|
43
|
-
</script>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-btn
|
|
3
|
-
:text="$t('Actions.Back')"
|
|
4
|
-
:to="props.to"
|
|
5
|
-
class="text-none text-subtitle-1"
|
|
6
|
-
color="primary"
|
|
7
|
-
variant="outlined"
|
|
8
|
-
>
|
|
9
|
-
<template v-slot:prepend>
|
|
10
|
-
<v-icon icon="mdi-arrow-left" start size="x-large" class="mx-0" />
|
|
11
|
-
</template>
|
|
12
|
-
</v-btn>
|
|
13
|
-
</template>
|
|
14
|
-
|
|
15
|
-
<script lang="ts" setup>
|
|
16
|
-
const props = defineProps({
|
|
17
|
-
to: { type: String, required: true },
|
|
18
|
-
});
|
|
19
|
-
</script>
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-btn
|
|
3
|
-
:text="$t('Actions.Confirm')"
|
|
4
|
-
@click="emit('on-confirm')"
|
|
5
|
-
color="primary"
|
|
6
|
-
elevation="1"
|
|
7
|
-
prepend-icon="mdi-check"
|
|
8
|
-
variant="flat"
|
|
9
|
-
/>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script lang="ts" setup>
|
|
13
|
-
const emit = defineEmits(["on-confirm"]);
|
|
14
|
-
</script>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="json-container-view">
|
|
3
|
-
<h5>{{ props.title }}:</h5>
|
|
4
|
-
<VueJsonPretty :data />
|
|
5
|
-
</div>
|
|
6
|
-
</template>
|
|
7
|
-
|
|
8
|
-
<script lang="ts" setup>
|
|
9
|
-
const props = defineProps({
|
|
10
|
-
data: { type: Object, default: {} },
|
|
11
|
-
title: { type: String, default: "Data" },
|
|
12
|
-
});
|
|
13
|
-
</script>
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-menu v-model="openCalendar" :close-on-content-click="false">
|
|
3
|
-
<template v-slot:activator="{ props }">
|
|
4
|
-
<v-text-field
|
|
5
|
-
:aria-label="label"
|
|
6
|
-
:disabled="disabled"
|
|
7
|
-
:label="label"
|
|
8
|
-
:readonly="true"
|
|
9
|
-
:required="required"
|
|
10
|
-
:rules="rules"
|
|
11
|
-
:title="title"
|
|
12
|
-
color="primary"
|
|
13
|
-
persistent-placeholder
|
|
14
|
-
v-bind="props"
|
|
15
|
-
v-model="formattedDate"
|
|
16
|
-
variant="outlined"
|
|
17
|
-
/>
|
|
18
|
-
</template>
|
|
19
|
-
|
|
20
|
-
<v-date-picker
|
|
21
|
-
color="primary"
|
|
22
|
-
elevation="4"
|
|
23
|
-
hide-actions
|
|
24
|
-
title=""
|
|
25
|
-
v-model="date"
|
|
26
|
-
>
|
|
27
|
-
<template v-slot:header>
|
|
28
|
-
<div />
|
|
29
|
-
</template>
|
|
30
|
-
|
|
31
|
-
<template v-slot:actions>
|
|
32
|
-
<div class="mt-n10 d-flex justify-space-between w-100">
|
|
33
|
-
<v-btn
|
|
34
|
-
@click="date = null"
|
|
35
|
-
color="primary"
|
|
36
|
-
density="compact"
|
|
37
|
-
text="Borrar"
|
|
38
|
-
/>
|
|
39
|
-
<v-btn
|
|
40
|
-
@click="openCalendar = false"
|
|
41
|
-
color="primary"
|
|
42
|
-
density="compact"
|
|
43
|
-
text="Cerrar"
|
|
44
|
-
/>
|
|
45
|
-
</div>
|
|
46
|
-
</template>
|
|
47
|
-
</v-date-picker>
|
|
48
|
-
</v-menu>
|
|
49
|
-
</template>
|
|
50
|
-
|
|
51
|
-
<script lang="ts" setup>
|
|
52
|
-
import { computed, ref, watch, type PropType } from "vue";
|
|
53
|
-
import { useDate } from "vuetify";
|
|
54
|
-
import type { TVuetifyDateFormat } from "../../../types";
|
|
55
|
-
import { EVuetifyDateFormats } from "../../../enums";
|
|
56
|
-
|
|
57
|
-
const dateFormatter = useDate();
|
|
58
|
-
|
|
59
|
-
const openCalendar = ref(false);
|
|
60
|
-
|
|
61
|
-
const date = defineModel<Date | null>("date", { required: true });
|
|
62
|
-
|
|
63
|
-
const props = defineProps({
|
|
64
|
-
disabled: { type: Boolean, default: false },
|
|
65
|
-
displayFormat: {
|
|
66
|
-
type: String as PropType<TVuetifyDateFormat>,
|
|
67
|
-
required: false,
|
|
68
|
-
default: EVuetifyDateFormats.fullDateWithWeekday,
|
|
69
|
-
},
|
|
70
|
-
label: { type: String, required: true },
|
|
71
|
-
readonly: { type: Boolean, required: false, default: false },
|
|
72
|
-
required: { type: Boolean, required: false, default: false },
|
|
73
|
-
rules: { type: Array as PropType<Array<any>>, required: false, default: [] },
|
|
74
|
-
title: { type: String, required: true },
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
const formattedDate = computed(() => {
|
|
78
|
-
if (date.value) {
|
|
79
|
-
return dateFormatter.format(date.value, props.displayFormat);
|
|
80
|
-
}
|
|
81
|
-
return props.required ? "Seleccione una fecha..." : "";
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
watch(date, () => {
|
|
85
|
-
openCalendar.value = false;
|
|
86
|
-
});
|
|
87
|
-
</script>
|
|
88
|
-
|
|
89
|
-
<style>
|
|
90
|
-
.v-overlay__content:has(>.v-date-picker){min-width:auto!important}.v-picker-title{padding:0!important}
|
|
91
|
-
</style>
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<v-dialog
|
|
3
|
-
v-model="appStatusStore.openDialogDelete"
|
|
4
|
-
persistent
|
|
5
|
-
max-width="500"
|
|
6
|
-
>
|
|
7
|
-
<v-card :title="$t('Components.Dialogs.Delete.Title')" class="py-2">
|
|
8
|
-
<template v-slot:prepend>
|
|
9
|
-
<v-icon icon="mdi-delete" color="error" />
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<template v-slot:actions>
|
|
13
|
-
<div class="d-flex justify-space-between w-100 px-2 pt-4">
|
|
14
|
-
<BtnCancel @on-cancel="handleCancel" />
|
|
15
|
-
<BtnConfirm @on-confirm="emit('on-delete')" />
|
|
16
|
-
</div>
|
|
17
|
-
</template>
|
|
18
|
-
</v-card>
|
|
19
|
-
</v-dialog>
|
|
20
|
-
</template>
|
|
21
|
-
|
|
22
|
-
<script lang="ts" setup>
|
|
23
|
-
import { useAppStatusStore } from "#imports";
|
|
24
|
-
|
|
25
|
-
const appStatusStore = useAppStatusStore();
|
|
26
|
-
|
|
27
|
-
const emit = defineEmits(["on-delete"]);
|
|
28
|
-
|
|
29
|
-
const handleCancel = () => {
|
|
30
|
-
appStatusStore.setOpenDialogDelete(false);
|
|
31
|
-
};
|
|
32
|
-
</script>
|