-
-
-
+ Iniciar Sesión
-
+
+
+
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);
+ }
}
+
+
-
-
+
- Iniciar Sesión
+
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+ Recuperar Contraseña
+
+ Volver al Login
+
+
-
-
Credenciales de prueba:
-Email: admin@example.com
-Password: admin123
-