From 0288e80b9da79a0070db04ec5577e0bc2ffc578b Mon Sep 17 00:00:00 2001 From: luis cespedes Date: Tue, 6 May 2025 12:34:07 -0400 Subject: [PATCH] =?UTF-8?q?recuperar=20contrase=C3=B1a=20y=20boton=20expor?= =?UTF-8?q?tar=20a=20excel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../actualizacion-pd.component.html | 15 -- .../pages/ajuste-pd/ajuste-pd.component.html | 32 ++-- src/app/pages/login/login.component.html | 165 ++++++++++++------ src/app/pages/login/login.component.scss | 55 +++++- src/app/pages/login/login.component.ts | 54 ++++++ 5 files changed, 236 insertions(+), 85 deletions(-) diff --git a/src/app/pages/actualizacion-pd/actualizacion-pd.component.html b/src/app/pages/actualizacion-pd/actualizacion-pd.component.html index bfa1211..e5addb0 100644 --- a/src/app/pages/actualizacion-pd/actualizacion-pd.component.html +++ b/src/app/pages/actualizacion-pd/actualizacion-pd.component.html @@ -126,19 +126,4 @@ - - -
- -
diff --git a/src/app/pages/ajuste-pd/ajuste-pd.component.html b/src/app/pages/ajuste-pd/ajuste-pd.component.html index df74e48..14da3c3 100644 --- a/src/app/pages/ajuste-pd/ajuste-pd.component.html +++ b/src/app/pages/ajuste-pd/ajuste-pd.component.html @@ -29,6 +29,22 @@ + + +
+ +
+ -
- -
- + + \ No newline at end of file diff --git a/src/app/pages/login/login.component.html b/src/app/pages/login/login.component.html index a1e14d3..7437513 100644 --- a/src/app/pages/login/login.component.html +++ b/src/app/pages/login/login.component.html @@ -19,69 +19,124 @@
-
-
-

Iniciar Sesión

-
+
+
+ +
+
+
+

Iniciar Sesión

+
-
+ + + - - + + - - + +
+ +
- -
- + +
+ +
+ + + +
+ Recuperar Contraseña +
+ + +
+

Credenciales de prueba:

+

Email: admin@example.com

+

Password: admin123

+
+
- -
- + +
+
+
+

Recuperar Contraseña

+
+ +
+ + + + +
+

Te enviaremos un enlace para restablecer tu contraseña.

+
+ + +
+ +
+ + +
+ +
+
+ + +
+ Volver al Login +
+
- - - - -
- Recuperar Contraseña
- - -
-

Credenciales de prueba:

-

Email: admin@example.com

-

Password: admin123

-
-
diff --git a/src/app/pages/login/login.component.scss b/src/app/pages/login/login.component.scss index 70c9274..3ba06de 100644 --- a/src/app/pages/login/login.component.scss +++ b/src/app/pages/login/login.component.scss @@ -61,7 +61,8 @@ flex: 1; display: flex; justify-content: center; - align-items: center; + align-items: flex-start; /* Cambiado de center a flex-start */ + padding-top: 40px; /* Añadido padding superior */ background-color: #f0f0f0; background-size: cover; background-position: center; @@ -86,6 +87,8 @@ .login-box { width: 360px; max-width: 100%; + margin-top: 2rem; + margin-bottom: 2rem; } .login-card { @@ -93,6 +96,56 @@ border-radius: 4px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); overflow: hidden; + width: 100%; +} + +/* Estilos para el efecto de flip de tarjeta */ +.flip-container { + perspective: 1000px; + width: 100%; + min-height: 410px; /* Aumentamos altura para evitar saltos */ + position: relative; +} + +.flip-container.flip .flipper { + transform: rotateY(180deg); +} + +.flipper { + transition: 0.6s; + transform-style: preserve-3d; + position: relative; + width: 100%; + height: 100%; +} + +.front, .back { + backface-visibility: hidden; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + -webkit-backface-visibility: hidden; /* Asegura compatibilidad con Safari */ + backface-visibility: hidden; +} + +.front { + z-index: 2; + transform: rotateY(0deg); +} + +.back { + transform: rotateY(180deg); +} + +/* Ajuste para los contenedores de recuperación */ +.info-message { + padding: 0 0.5rem; +} + +.recovery-message { + min-height: 30px; } .login-header { diff --git a/src/app/pages/login/login.component.ts b/src/app/pages/login/login.component.ts index e224fa3..64ee72a 100644 --- a/src/app/pages/login/login.component.ts +++ b/src/app/pages/login/login.component.ts @@ -35,10 +35,20 @@ import { AuthService } from '../../services/auth.service'; styleUrl: './login.component.scss' }) export class LoginComponent { + // Login form email: string = ''; password: string = ''; loading: boolean = false; errorMessage: string = ''; + + // Password recovery form + recoveryEmail: string = ''; + recoveryLoading: boolean = false; + recoveryMessage: string = ''; + recoveryStatus: string = 'info'; + + // Control de formularios + showRecovery: boolean = false; constructor( private router: Router, @@ -46,6 +56,24 @@ export class LoginComponent { private messageService: MessageService ) { } + /** + * Cambia entre el formulario de login y recuperación + */ + toggleRecovery(event: Event) { + event.preventDefault(); + this.showRecovery = !this.showRecovery; + this.errorMessage = ''; + this.recoveryMessage = ''; + + // Si estamos cambiando al formulario de recuperación, copiar el email actual + if (this.showRecovery && this.email) { + this.recoveryEmail = this.email; + } + } + + /** + * Proceso de login + */ onLogin() { this.loading = true; this.errorMessage = ''; @@ -71,4 +99,30 @@ export class LoginComponent { }); } + /** + * Proceso de recuperación de contraseña + */ + onRecoverPassword() { + if (!this.recoveryEmail) { + this.recoveryMessage = 'Debes ingresar un email'; + this.recoveryStatus = 'error'; + return; + } + + this.recoveryLoading = true; + this.recoveryMessage = ''; + + // Simulamos la recuperación (en producción, esto llamaría a un servicio real) + setTimeout(() => { + this.recoveryLoading = false; + this.recoveryMessage = 'Hemos enviado un enlace de recuperación a tu email'; + this.recoveryStatus = 'success'; + + this.messageService.add({ + severity: 'success', + summary: 'Email enviado', + detail: 'Se ha enviado un enlace de recuperación a tu correo' + }); + }, 1500); + } }