Refs #364 añadida interactividad inputs y estilos css

pull/2/head
Alvaro Puente Mella 2024-05-23 13:33:36 +02:00
parent eb19de4c4f
commit 39d5b98aae
3 changed files with 105 additions and 22 deletions

View File

@ -0,0 +1,66 @@
.login {
overflow: hidden;
background-color: rgb(255, 255, 255);
border: 1px solid grey;
padding: 40px 30px 30px 30px;
border-radius: 10px;
position: absolute;
top: 50%;
left: 50%;
width: 400px;
transform: translate(-50%, -50%);
transition: transform 300ms, box-shadow 300ms;
box-shadow: 5px 10px 10px rgba(2, 128, 144, 0.2);
}
.login::before, .login::after {
content: "";
position: absolute;
width: 600px;
height: 600px;
border-top-left-radius: 40%;
border-top-right-radius: 45%;
border-bottom-left-radius: 35%;
border-bottom-right-radius: 40%;
z-index: -1;
}
.login input {
font-family: "Asap", sans-serif;
display: block;
border-radius: 5px;
font-size: 16px;
background: rgba(230, 230, 230);
width: 100%;
padding: 10px 10px;
margin: 15px -10px;
}
.login button {
font-family: "Asap", sans-serif;
cursor: pointer;
color: #fff;
font-size: 16px;
text-transform: uppercase;
width: 80px;
border: 0;
padding: 10px 0;
margin-top: 10px;
margin-left: -5px;
border-radius: 5px;
background-color: #0084ff;
transition: background-color 300ms;
}
.login button:hover {
background-color: #0271da;
}
.invalid {
border: 1px solid red;
}
.error-message {
color: red;
margin-top: 10px;
}

View File

@ -1,14 +1,9 @@
<div>
<h2>Login</h2>
<form>
<div>
<label for="username">Username:</label>
<input [(ngModel)]="loginObj.username" type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Password:</label>
<input [(ngModel)]="loginObj.password" type="password" id="password" name="password" required>
</div>
<button (click)="onLogin()">Login</button>
<form class="login" (ngSubmit)="onLogin()" #loginForm="ngForm">
<h2>Opengnsys</h2>
<input [(ngModel)]="loginObj.username" type="text" id="username" name="username" placeholder="usuario" required #usernameInput="ngModel" [ngClass]="{'invalid': !usernameInput.valid && usernameInput.touched}">
<input [(ngModel)]="loginObj.password" type="password" id="password" name="password" placeholder="contraseña" required #passwordInput="ngModel" [ngClass]="{'invalid': !passwordInput.valid && passwordInput.touched}">
<button type="submit">Login</button>
<div *ngIf="errorMessage" class="error-message">{{ errorMessage }}</div>
</form>
</div>
</div>

View File

@ -3,7 +3,6 @@ import { Component } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { Router } from '@angular/router';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
@ -14,18 +13,41 @@ export class LoginComponent {
"username": "",
"password": ""
};
errorMessage: string = '';
constructor(private http: HttpClient, private router: Router) { }
onLogin() {
this.http.post('http://127.0.0.1:8080/auth/login', this.loginObj).subscribe((res: any) => {
if(res.token){
localStorage.setItem('loginToken', res.token);
localStorage.setItem('refreshToken', res.refreshToken);
this.router.navigateByUrl('/dashboard');
if (!this.loginObj.username || !this.loginObj.password) {
if (!this.loginObj.username) {
document.getElementById('username')?.classList.add('invalid');
} else {
document.getElementById('username')?.classList.remove('invalid');
}
if (!this.loginObj.password) {
document.getElementById('password')?.classList.add('invalid');
} else {
document.getElementById('password')?.classList.remove('invalid');
}
return;
}
else(
alert("invalid credentials")
)
})
this.http.post('http://127.0.0.1:8080/auth/login', this.loginObj).subscribe({
next: (res: any) => {
if (res.token) {
localStorage.setItem('loginToken', res.token);
localStorage.setItem('refreshToken', res.refreshToken);
this.router.navigateByUrl('/dashboard');
}
},
error: (err) => {
if (err.status === 401) {
this.errorMessage = 'Usuario o contraseña incorrectos';
} else {
this.errorMessage = 'Ha ocurrido un error. Por favor, inténtelo de nuevo.';
}
}
});
}
}