utn-cli 2.0.97 → 2.0.98
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/package.json +1 -1
- package/templates/backend/servicios/Nucleo/Miscelaneas.js +2 -0
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.css +121 -60
- package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.html +26 -17
- package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.css +6 -0
- package/templates/frontend/src/app/Paginas/Nucleo/contenedor-componentes/contenedor-componentes.component.html +40 -18
- package/templates/frontend/src/index.html +1 -0
package/package.json
CHANGED
|
@@ -825,8 +825,10 @@ class Miscelaneo {
|
|
|
825
825
|
`a`.`Version`, `a`.`FechaDePublicacion`, `a`.`AcuerdoDeNivelDeServicio`, `a`.`DiccionarioDeDatos`, `a`.`Repositorios`,\
|
|
826
826
|
`a`.`EnlaceDelVideo`,`a`.`EnlaceDelManual`\
|
|
827
827
|
, `a`.`Estado`, REGEXP_SUBSTR(`a`.`Repositorios`, '[^,]*front[^,]*') AS `Frontend`\
|
|
828
|
+
, `c`.`Etiqueta`, `c`.`ColorDeLaEtiqueta`\
|
|
828
829
|
FROM `SIGU`.`SIGU_ModulosV2` `a`\
|
|
829
830
|
JOIN `SIGU`.`SIGU_PermisosV2` `b` ON (`a`.`Nombre` = `b`.`Modulo`)\
|
|
831
|
+
LEFT JOIN `SIGU`.`SIGU_ModulosV2InformacionExtra` `c` ON (`a`.`Nombre` = `c`.`Modulo`)\
|
|
830
832
|
WHERE `a`.`Estado` = 'Activo' AND `a`.`Padre` = ? AND `b`.`PermisoId` IN (?)\
|
|
831
833
|
ORDER BY FIELD(a.Nombre, " + ModulosFavoritos + ") DESC, a.Nombre", [Padre, Permisos.map(p => p.PermisoId)]);
|
|
832
834
|
return Modulos.map((linea) => {
|
package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.css
CHANGED
|
@@ -1,93 +1,154 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
bottom: 0;
|
|
4
|
-
right: 0;
|
|
5
|
-
width: 40px;
|
|
6
|
-
height: 40px;
|
|
7
|
-
background: linear-gradient(135deg, transparent 50%, rgba(0, 0, 0, 0.1) 50%);
|
|
8
|
-
pointer-events: none;
|
|
9
|
-
z-index: 1;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.pin-icon {
|
|
13
|
-
position: absolute;
|
|
14
|
-
top: 8px;
|
|
15
|
-
right: 8px;
|
|
16
|
-
font-size: 24px;
|
|
17
|
-
color: #888;
|
|
18
|
-
cursor: pointer;
|
|
19
|
-
z-index: 2;
|
|
20
|
-
transition: color 0.3s;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.pin-icon.pinned {
|
|
24
|
-
color: #222;
|
|
1
|
+
:host {
|
|
2
|
+
display: block;
|
|
25
3
|
}
|
|
26
4
|
|
|
27
5
|
.modulo-card {
|
|
28
6
|
position: relative;
|
|
29
|
-
border: 1px solid #ccc;
|
|
30
|
-
border-radius: 8px;
|
|
31
|
-
padding: 16px;
|
|
32
7
|
width: 300px;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
8
|
+
/* Reduced from 380px */
|
|
9
|
+
height: 220px;
|
|
10
|
+
border-radius: 25px;
|
|
11
|
+
overflow: hidden;
|
|
12
|
+
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);
|
|
13
|
+
border: 1px solid #0B4FCE;
|
|
14
|
+
/* Added border as requested */
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
17
|
+
background-color: #fff;
|
|
36
18
|
display: flex;
|
|
37
19
|
flex-direction: column;
|
|
38
|
-
justify-content: space-between;
|
|
39
20
|
margin: 10px;
|
|
40
|
-
|
|
21
|
+
/* Reduced to previous value */
|
|
41
22
|
}
|
|
42
23
|
|
|
43
24
|
.modulo-card:hover {
|
|
44
|
-
|
|
45
|
-
|
|
25
|
+
transform: translateY(-5px);
|
|
26
|
+
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
|
|
46
27
|
}
|
|
47
28
|
|
|
48
|
-
.modulo-header {
|
|
29
|
+
.modulo-card-header {
|
|
30
|
+
height: 105px;
|
|
31
|
+
/* Increased to reach the bottom of the icon container */
|
|
32
|
+
background-color: #f2f2f2;
|
|
49
33
|
display: flex;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
34
|
+
justify-content: space-between;
|
|
35
|
+
align-items: flex-start;
|
|
36
|
+
/* Align to top instead of center */
|
|
37
|
+
padding: 15px;
|
|
38
|
+
position: relative;
|
|
53
39
|
}
|
|
54
40
|
|
|
55
|
-
.modulo-
|
|
56
|
-
|
|
57
|
-
|
|
41
|
+
.modulo-tipo {
|
|
42
|
+
color: #3e5a7a;
|
|
43
|
+
font-size: 1.2rem;
|
|
44
|
+
font-weight: 500;
|
|
45
|
+
letter-spacing: 1px;
|
|
46
|
+
margin-top: 5px;
|
|
47
|
+
/* Slight adjustment for alignment */
|
|
58
48
|
}
|
|
59
49
|
|
|
60
|
-
.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
50
|
+
.pin-container {
|
|
51
|
+
width: 40px;
|
|
52
|
+
height: 40px;
|
|
53
|
+
background-color: #e6e6e6;
|
|
54
|
+
border-radius: 50%;
|
|
55
|
+
display: flex;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
align-items: center;
|
|
58
|
+
color: #888;
|
|
59
|
+
transition: all 0.3s ease;
|
|
60
|
+
box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.05);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.pin-container.pinned {
|
|
64
64
|
color: #333;
|
|
65
|
+
background-color: #ddd;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
.
|
|
68
|
-
font-size:
|
|
69
|
-
|
|
68
|
+
.pin-icon {
|
|
69
|
+
font-size: 24px;
|
|
70
|
+
transform: rotate(30deg);
|
|
70
71
|
}
|
|
71
72
|
|
|
72
|
-
.
|
|
73
|
-
|
|
73
|
+
.modulo-icon-wrapper {
|
|
74
|
+
position: absolute;
|
|
75
|
+
top: 65px;
|
|
76
|
+
/* Center remains at 65px, so bottom is around 102.5px */
|
|
77
|
+
left: 50%;
|
|
78
|
+
transform: translate(-50%, -50%);
|
|
79
|
+
z-index: 10;
|
|
74
80
|
}
|
|
75
81
|
|
|
76
|
-
.
|
|
77
|
-
|
|
82
|
+
.modulo-icon-container {
|
|
83
|
+
width: 75px;
|
|
84
|
+
height: 75px;
|
|
85
|
+
background-color: #fff;
|
|
86
|
+
border-radius: 50%;
|
|
87
|
+
display: flex;
|
|
88
|
+
justify-content: center;
|
|
89
|
+
align-items: center;
|
|
90
|
+
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
|
|
91
|
+
padding: 10px;
|
|
78
92
|
}
|
|
79
93
|
|
|
80
|
-
.
|
|
81
|
-
|
|
94
|
+
.modulo-icon {
|
|
95
|
+
width: 100%;
|
|
96
|
+
height: 100%;
|
|
97
|
+
object-fit: contain;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.modulo-icon-placeholder {
|
|
101
|
+
width: 40px;
|
|
102
|
+
height: 40px;
|
|
103
|
+
background-color: #eee;
|
|
104
|
+
border-radius: 50%;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.modulo-card-body {
|
|
108
|
+
flex-grow: 1;
|
|
109
|
+
display: flex;
|
|
110
|
+
justify-content: center;
|
|
111
|
+
align-items: center;
|
|
112
|
+
padding: 15px 20px;
|
|
113
|
+
/* Reduced top padding as it doesn't need to clear the overlapping icon anymore */
|
|
114
|
+
text-align: center;
|
|
115
|
+
position: relative;
|
|
82
116
|
}
|
|
83
117
|
|
|
84
118
|
.modulo-descripcion {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
119
|
+
color: #1d3a5f;
|
|
120
|
+
font-size: 1.4rem;
|
|
121
|
+
/* Reduced from 1.6rem */
|
|
122
|
+
font-weight: 700;
|
|
123
|
+
line-height: 1.2;
|
|
124
|
+
margin: 0;
|
|
125
|
+
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
|
|
88
126
|
}
|
|
89
127
|
|
|
90
|
-
.
|
|
91
|
-
|
|
92
|
-
|
|
128
|
+
.esquina {
|
|
129
|
+
position: absolute;
|
|
130
|
+
bottom: 0;
|
|
131
|
+
right: 0;
|
|
132
|
+
width: 20px;
|
|
133
|
+
height: 20px;
|
|
134
|
+
background: linear-gradient(135deg, transparent 50%, rgba(255, 255, 255, 0.5) 50%);
|
|
135
|
+
pointer-events: none;
|
|
93
136
|
}
|
|
137
|
+
|
|
138
|
+
.cintillo-etiqueta {
|
|
139
|
+
position: absolute;
|
|
140
|
+
bottom: 20px;
|
|
141
|
+
right: -42px;
|
|
142
|
+
width: 170px;
|
|
143
|
+
/* Wider to accommodate longer text */
|
|
144
|
+
padding: 5px 0;
|
|
145
|
+
text-align: center;
|
|
146
|
+
color: white;
|
|
147
|
+
font-weight: 800;
|
|
148
|
+
font-size: 0.75rem;
|
|
149
|
+
/* Further reduced to ensure 'ACTUALIZADO' fits completely */
|
|
150
|
+
letter-spacing: 0.5px;
|
|
151
|
+
transform: rotate(-45deg);
|
|
152
|
+
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
|
|
153
|
+
z-index: 5;
|
|
154
|
+
}
|
package/templates/frontend/src/app/Componentes/Nucleo/tarjeta-modulo/tarjeta-modulo.component.html
CHANGED
|
@@ -1,21 +1,30 @@
|
|
|
1
|
-
<div class="modulo-card" (click)="onClick()"
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
<div class="modulo-card" (click)="onClick()">
|
|
2
|
+
<div class="modulo-card-header">
|
|
3
|
+
<span class="modulo-tipo">{{ modulo.Tipo | uppercase }}</span>
|
|
4
|
+
<div class="pin-container" (click)="alternarFavorito($event)" [ngClass]="{ 'pinned': estaEnFavoritos() }">
|
|
5
|
+
<span class="material-icons pin-icon">
|
|
6
|
+
push_pin
|
|
7
|
+
</span>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
@if(modulo.Icono) {
|
|
12
|
+
<div class="modulo-icon-wrapper">
|
|
13
|
+
<div class="modulo-icon-container">
|
|
14
|
+
<img src="{{ modulo.Icono }}" class="modulo-icon" alt="{{ modulo.Descripcion }}" />
|
|
14
15
|
</div>
|
|
15
16
|
</div>
|
|
16
|
-
<p class="modulo-descripcion">{{ modulo.Descripcion }}</p>
|
|
17
|
-
<div class="modulo-info"></div>
|
|
18
|
-
@if(modulo.Tipo === 'Servicio') {
|
|
19
|
-
<div class="esquina"></div>
|
|
20
17
|
}
|
|
18
|
+
|
|
19
|
+
<div class="modulo-card-body" [ngStyle]="{ 'background-color': modulo.Color }">
|
|
20
|
+
<p class="modulo-descripcion">{{ modulo.Descripcion }}</p>
|
|
21
|
+
@if(modulo.Tipo === 'Servicio') {
|
|
22
|
+
<!-- <div class="esquina"></div> -->
|
|
23
|
+
}
|
|
24
|
+
@if(modulo.Etiqueta) {
|
|
25
|
+
<div class="cintillo-etiqueta" [ngStyle]="{ 'background-color': modulo.ColorDeLaEtiqueta || '#4a90e2' }">
|
|
26
|
+
{{ modulo.Etiqueta | uppercase }}
|
|
27
|
+
</div>
|
|
28
|
+
}
|
|
29
|
+
</div>
|
|
21
30
|
</div>
|
|
@@ -43,6 +43,10 @@
|
|
|
43
43
|
border-radius: 50%;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
+
.ColorBlanco {
|
|
47
|
+
color: white;
|
|
48
|
+
}
|
|
49
|
+
|
|
46
50
|
.botonDeNavegacion:hover {
|
|
47
51
|
background-color: rgba(25, 118, 210, 0.1);
|
|
48
52
|
transform: scale(1.1);
|
|
@@ -93,6 +97,7 @@
|
|
|
93
97
|
font-size: 18px;
|
|
94
98
|
background-color: #002f6b;
|
|
95
99
|
color: white;
|
|
100
|
+
display: flex;
|
|
96
101
|
}
|
|
97
102
|
|
|
98
103
|
.encabezado {
|
|
@@ -156,6 +161,7 @@
|
|
|
156
161
|
}
|
|
157
162
|
|
|
158
163
|
.zona-scrollable {
|
|
164
|
+
margin-top: 3px;
|
|
159
165
|
flex-grow: 1;
|
|
160
166
|
overflow-y: auto;
|
|
161
167
|
display: flex;
|
|
@@ -7,41 +7,62 @@
|
|
|
7
7
|
</div>
|
|
8
8
|
<div class="pie-col derecha">
|
|
9
9
|
@if(TienePermiso) {
|
|
10
|
-
<button class="botonDeNavegacion" matTooltip="Salir" (click)="Salir()">
|
|
10
|
+
<button class="botonDeNavegacion" matTooltip="Salir" title="Salir" (click)="Salir()">
|
|
11
11
|
<mat-icon>logout</mat-icon>
|
|
12
12
|
</button>
|
|
13
|
-
<button class="botonDeNavegacion" [matTooltip]="NombreUsuario || 'Perfil'"
|
|
13
|
+
<button class="botonDeNavegacion" [matTooltip]="NombreUsuario || 'Perfil'" [title]="NombreUsuario || 'Perfil'"
|
|
14
|
+
(click)="irAPerfil()">
|
|
14
15
|
<mat-icon>person</mat-icon>
|
|
15
16
|
</button>
|
|
16
17
|
} @else {
|
|
17
|
-
<button class="botonDeNavegacion" matTooltip="Entrar" (click)="Entrar()">
|
|
18
|
+
<button class="botonDeNavegacion" matTooltip="Entrar" title="Entrar" (click)="Entrar()">
|
|
18
19
|
<mat-icon>login</mat-icon>
|
|
19
20
|
</button>
|
|
20
21
|
}
|
|
21
22
|
</div>
|
|
22
23
|
</div>
|
|
23
24
|
|
|
25
|
+
@if(TienePermiso){
|
|
26
|
+
<div class="titulo">
|
|
27
|
+
<div class="pie-col izquierda"></div>
|
|
28
|
+
<div class="pie-col centro">{{ Titulo }}</div>
|
|
29
|
+
<div class="pie-col derecha">
|
|
30
|
+
<button class="botonDeNavegacion ColorBlanco" matTooltip="Ir atrás" title="Ir atrás" (click)="irAtras()">
|
|
31
|
+
<mat-icon>arrow_back</mat-icon>
|
|
32
|
+
</button>
|
|
33
|
+
<button class="botonDeNavegacion ColorBlanco" matTooltip="Ir al menú del módulo" title="Ir al menú del módulo"
|
|
34
|
+
(click)="irAlMenuDeModulo()">
|
|
35
|
+
<mat-icon>menu</mat-icon>
|
|
36
|
+
</button>
|
|
37
|
+
<!-- <button class="botonDeNavegacion" matTooltip="Ir al móudulo padre" title="Ir al móudulo padre" (click)="irAlModuloPadre()">
|
|
38
|
+
<mat-icon>apps</mat-icon>
|
|
39
|
+
</button> -->
|
|
40
|
+
<button class="botonDeNavegacion ColorBlanco" matTooltip="Ir al inicio" title="Ir al inicio"
|
|
41
|
+
(click)="irAlInicio()">
|
|
42
|
+
<mat-icon>home</mat-icon>
|
|
43
|
+
</button>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
}
|
|
24
47
|
<div class="zona-scrollable">
|
|
25
|
-
@if(TienePermiso){
|
|
26
|
-
<div class="titulo">{{ Titulo }}</div>
|
|
27
|
-
}
|
|
28
48
|
<div [ngClass]="claseDelContenedor">
|
|
29
|
-
@if(TienePermiso) {
|
|
49
|
+
<!-- @if(TienePermiso) {
|
|
30
50
|
<div class="botonesDeNavegacion">
|
|
31
|
-
<button class="botonDeNavegacion" matTooltip="Ir atrás" (click)="irAtras()">
|
|
51
|
+
<button class="botonDeNavegacion" matTooltip="Ir atrás" title="Ir atrás" (click)="irAtras()">
|
|
32
52
|
<mat-icon>arrow_back</mat-icon>
|
|
33
53
|
</button>
|
|
34
|
-
<button class="botonDeNavegacion" matTooltip="Ir al menú del módulo"
|
|
54
|
+
<button class="botonDeNavegacion" matTooltip="Ir al menú del módulo" title="Ir al menú del módulo"
|
|
55
|
+
(click)="irAlMenuDeModulo()">
|
|
35
56
|
<mat-icon>menu</mat-icon>
|
|
36
|
-
</button>
|
|
37
|
-
|
|
57
|
+
</button> -->
|
|
58
|
+
<!-- <button class="botonDeNavegacion" matTooltip="Ir al móudulo padre" title="Ir al móudulo padre" (click)="irAlModuloPadre()">
|
|
38
59
|
<mat-icon>apps</mat-icon>
|
|
39
60
|
</button> -->
|
|
40
|
-
|
|
61
|
+
<!-- <button class="botonDeNavegacion" matTooltip="Ir al inicio" title="Ir al inicio" (click)="irAlInicio()">
|
|
41
62
|
<mat-icon>home</mat-icon>
|
|
42
63
|
</button>
|
|
43
64
|
</div>
|
|
44
|
-
}
|
|
65
|
+
} -->
|
|
45
66
|
<div class="contenido">
|
|
46
67
|
@if(TienePermiso){
|
|
47
68
|
<div class="cabecera2">
|
|
@@ -79,7 +100,8 @@
|
|
|
79
100
|
</div>
|
|
80
101
|
</div>
|
|
81
102
|
<div class="pie-col derecha">
|
|
82
|
-
<button class="botonDeNavegacion" matTooltip="Aplicaciones"
|
|
103
|
+
<button class="botonDeNavegacion" matTooltip="Aplicaciones" title="Aplicaciones"
|
|
104
|
+
[matMenuTriggerFor]="menuAplicaciones">
|
|
83
105
|
<mat-icon>keyboard_arrow_up</mat-icon>
|
|
84
106
|
</button>
|
|
85
107
|
|
|
@@ -97,7 +119,7 @@
|
|
|
97
119
|
</mat-menu>
|
|
98
120
|
|
|
99
121
|
@if(TienePermiso) {
|
|
100
|
-
<button class="botonDeNavegacion" matTooltip="Mensajes" (click)="irAMensajes()">
|
|
122
|
+
<button class="botonDeNavegacion" matTooltip="Mensajes" title="Mensajes" (click)="irAMensajes()">
|
|
101
123
|
@if (Mensajes.length > 0) {
|
|
102
124
|
<mat-icon>mark_email_unread</mat-icon>
|
|
103
125
|
} @else {
|
|
@@ -106,16 +128,16 @@
|
|
|
106
128
|
</button>
|
|
107
129
|
}
|
|
108
130
|
@if(EnlaceDelVideo !== '-') {
|
|
109
|
-
<button class="botonDeNavegacion" matTooltip="Vídeo" (click)="irAVideo()">
|
|
131
|
+
<button class="botonDeNavegacion" matTooltip="Vídeo" title="Vídeo" (click)="irAVideo()">
|
|
110
132
|
<mat-icon>live_tv</mat-icon>
|
|
111
133
|
</button>
|
|
112
134
|
}
|
|
113
135
|
@if(EnlaceDelManual !== '-') {
|
|
114
|
-
<button class="botonDeNavegacion" matTooltip="Ayuda" (click)="irAAyuda()">
|
|
136
|
+
<button class="botonDeNavegacion" matTooltip="Ayuda" title="Ayuda" (click)="irAAyuda()">
|
|
115
137
|
<mat-icon>help</mat-icon>
|
|
116
138
|
</button>
|
|
117
139
|
}
|
|
118
|
-
<button class="botonDeNavegacion" matTooltip="Reporte" (click)="irASoporte()">
|
|
140
|
+
<button class="botonDeNavegacion" matTooltip="Reporte" title="Reporte" (click)="irASoporte()">
|
|
119
141
|
<mat-icon>support_agent</mat-icon>
|
|
120
142
|
</button>
|
|
121
143
|
</div>
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
|
|
19
19
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
20
20
|
<script src="https://accounts.google.com/gsi/client" async defer></script>
|
|
21
|
+
<meta description="Universidad Técnica Nacional - SIGU">
|
|
21
22
|
</head>
|
|
22
23
|
|
|
23
24
|
<body>
|