From d554d600ba1cb8c64a21ddf4e36de854306b0271 Mon Sep 17 00:00:00 2001 From: kaka-jaques Date: Fri, 2 Sep 2022 22:48:06 -0300 Subject: [PATCH 1/2] BIG UPDATE --- assets/img/unnamed_14.jpg | Bin 0 -> 28761 bytes frontend/main/src/app/app-routing.module.ts | 4 +- frontend/main/src/app/app.component.html | 14 +- frontend/main/src/app/app.module.ts | 4 +- .../forget-password.component.css | 0 .../forget-password.component.html | 1 + .../forget-password.component.spec.ts | 23 ++ .../forget-password.component.ts | 15 + .../main/src/app/login/login.component.css | 290 ++++++++++++++++++ .../main/src/app/login/login.component.html | 62 +++- .../main/src/app/login/login.component.ts | 8 + 11 files changed, 410 insertions(+), 11 deletions(-) create mode 100644 assets/img/unnamed_14.jpg create mode 100644 frontend/main/src/app/forget-password/forget-password.component.css create mode 100644 frontend/main/src/app/forget-password/forget-password.component.html create mode 100644 frontend/main/src/app/forget-password/forget-password.component.spec.ts create mode 100644 frontend/main/src/app/forget-password/forget-password.component.ts diff --git a/assets/img/unnamed_14.jpg b/assets/img/unnamed_14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe69095f5d3efb93e9440672273a925f8708e1d9 GIT binary patch literal 28761 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 -
+ +
-
+
- +
+ +
- + - +
diff --git a/frontend/main/src/app/app.module.ts b/frontend/main/src/app/app.module.ts index de4ebf4..b2c0a74 100644 --- a/frontend/main/src/app/app.module.ts +++ b/frontend/main/src/app/app.module.ts @@ -22,6 +22,7 @@ import { RctQtComponent } from './rct-qt/rct-qt.component'; import { EditComponent } from './edit/edit.component'; import { AboutComponent } from './about/about.component'; import { HttpClientModule } from "@angular/common/http"; +import { ForgetPasswordComponent } from './forget-password/forget-password.component'; @NgModule({ declarations: [ @@ -42,7 +43,8 @@ import { HttpClientModule } from "@angular/common/http"; ShipQtComponent, RctQtComponent, EditComponent, - AboutComponent + AboutComponent, + ForgetPasswordComponent ], imports: [ BrowserModule, diff --git a/frontend/main/src/app/forget-password/forget-password.component.css b/frontend/main/src/app/forget-password/forget-password.component.css new file mode 100644 index 0000000..e69de29 diff --git a/frontend/main/src/app/forget-password/forget-password.component.html b/frontend/main/src/app/forget-password/forget-password.component.html new file mode 100644 index 0000000..7a8de22 --- /dev/null +++ b/frontend/main/src/app/forget-password/forget-password.component.html @@ -0,0 +1 @@ +

forget-password works!

diff --git a/frontend/main/src/app/forget-password/forget-password.component.spec.ts b/frontend/main/src/app/forget-password/forget-password.component.spec.ts new file mode 100644 index 0000000..1de1e2b --- /dev/null +++ b/frontend/main/src/app/forget-password/forget-password.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ForgetPasswordComponent } from './forget-password.component'; + +describe('ForgetPasswordComponent', () => { + let component: ForgetPasswordComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ForgetPasswordComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ForgetPasswordComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/main/src/app/forget-password/forget-password.component.ts b/frontend/main/src/app/forget-password/forget-password.component.ts new file mode 100644 index 0000000..3a98106 --- /dev/null +++ b/frontend/main/src/app/forget-password/forget-password.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-forget-password', + templateUrl: './forget-password.component.html', + styleUrls: ['./forget-password.component.css'] +}) +export class ForgetPasswordComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/frontend/main/src/app/login/login.component.css b/frontend/main/src/app/login/login.component.css index e69de29..ba1e589 100644 --- a/frontend/main/src/app/login/login.component.css +++ b/frontend/main/src/app/login/login.component.css @@ -0,0 +1,290 @@ +@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700,800,900'); + +body{ + font-family: 'Poppins', sans-serif; + font-weight: 300; + font-size: 15px; + line-height: 1.7; + color: #c4c3ca; + background-color: #1f2029; + overflow-x: hidden; +} +a { + cursor: pointer; + transition: all 200ms linear; +} +a:hover { + text-decoration: none; +} +.link { + color: #000000; +} +.link:hover { + color: #ffeba7; +} +p { + font-weight: 500; + font-size: 14px; + line-height: 1.7; +} +h4 { + font-weight: 600; +} +h6 span{ + padding: 0 20px; + text-transform: uppercase; + font-weight: 700; +} +.section{ + position: relative; + width: 100%; + display: block; + background-repeat: no-repeat; + background-size: cover; +} +.full-height{ + min-height: 100vh; +} +[type="checkbox"]:checked, +[type="checkbox"]:not(:checked){ + position: absolute; + left: -9999px; +} +.checkbox:checked + label, +.checkbox:not(:checked) + label{ + position: relative; + display: block; + text-align: center; + width: 60px; + height: 16px; + border-radius: 8px; + padding: 0; + margin: 10px auto; + cursor: pointer; + background-color: #ffeba7; +} +.checkbox:checked + label:before, +.checkbox:not(:checked) + label:before{ + position: absolute; + display: block; + width: 36px; + height: 36px; + border-radius: 50%; + color: #ffeba7; + background-color: #102770; + font-family: 'unicons'; + content: ''; + z-index: 20; + top: -10px; + left: -10px; + line-height: 36px; + text-align: center; + font-size: 24px; + transition: all 0.5s ease; +} +.checkbox:checked + label:before { + transform: translateX(44px) rotate(-270deg); +} + + +.card-3d-wrap { + position: relative; + width: 440px; + max-width: 100%; + height: 400px; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + perspective: 800px; + margin-top: 60px; +} +.card-3d-wrapper { + width: 100%; + height: 100%; + position:absolute; + top: 0; + left: 0; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + transition: all 600ms ease-out; +} +.card-front, .card-back { + width: 100%; + height: 100%; + background-color: #001f3f; + background-position: bottom center; + background-repeat: no-repeat; + background-size: 300%; + position: absolute; + border-radius: 6px; + left: 0; + top: 0; + box-shadow: 10px 10px 5px #1f2029; + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -o-backface-visibility: hidden; + backface-visibility: hidden; +} +.card-back { + transform: rotateY(180deg); +} +.checkbox:checked ~ .card-3d-wrap .card-3d-wrapper { + transform: rotateY(180deg); +} +.center-wrap{ + position: absolute; + width: 100%; + padding: 0 35px; + top: 50%; + left: 0; + transform: translate3d(0, -50%, 35px) perspective(100px); + z-index: 20; + display: block; +} + + +.form-group{ + position: relative; + display: block; + margin: 0; + padding: 0; +} +.form-style { + padding: 13px 20px; + padding-left: 55px; + height: 48px; + width: 100%; + font-weight: 500; + border-radius: 4px; + font-size: 14px; + line-height: 22px; + letter-spacing: 0.5px; + outline: none; + color: #c4c3ca; + background-color: #1f2029; + border: none; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; + box-shadow: 0 4px 8px 0 rgba(21,21,21,.2); +} +.form-style:focus, +.form-style:active { + border: none; + outline: none; + box-shadow: 0 4px 8px 0 rgba(21,21,21,.2); +} +.input-icon { + position: absolute; + top: 0; + left: 18px; + height: 48px; + font-size: 24px; + line-height: 48px; + text-align: left; + color: #ffeba7; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} + +.form-group input:-ms-input-placeholder { + color: #c4c3ca; + opacity: 0.7; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input::-moz-placeholder { + color: #c4c3ca; + opacity: 0.7; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input:-moz-placeholder { + color: #c4c3ca; + opacity: 0.7; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input::-webkit-input-placeholder { + color: #c4c3ca; + opacity: 0.7; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input:focus:-ms-input-placeholder { + opacity: 0; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input:focus::-moz-placeholder { + opacity: 0; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input:focus:-moz-placeholder { + opacity: 0; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} +.form-group input:focus::-webkit-input-placeholder { + opacity: 0; + -webkit-transition: all 200ms linear; + transition: all 200ms linear; +} + +.btn{ + border-radius: 4px; + height: 44px; + font-size: 13px; + font-weight: 600; + text-transform: uppercase; + -webkit-transition : all 200ms linear; + transition: all 200ms linear; + padding: 0 30px; + letter-spacing: 1px; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -moz-align-items: center; + -ms-align-items: center; + align-items: center; + -webkit-justify-content: center; + -moz-justify-content: center; + -ms-justify-content: center; + justify-content: center; + -ms-flex-pack: center; + text-align: center; + border: none; + background-color: #ffeba7; + color: #102770; + box-shadow: 0 8px 24px 0 rgba(255,235,167,.2); +} +.btn:active, +.btn:focus{ + background-color: #102770; + color: #ffeba7; + box-shadow: 0 8px 24px 0 rgba(16,39,112,.2); +} +.btn:hover{ + background-color: #102770; + color: #ffeba7; + box-shadow: 0 8px 24px 0 rgba(16,39,112,.2); +} + + + + +.logo { + position: absolute; + top: 30px; + right: 30px; + display: block; + z-index: 100; + transition: all 250ms linear; +} +.logo img { + height: 26px; + width: auto; + display: block; +} diff --git a/frontend/main/src/app/login/login.component.html b/frontend/main/src/app/login/login.component.html index af459e7..9dcb219 100644 --- a/frontend/main/src/app/login/login.component.html +++ b/frontend/main/src/app/login/login.component.html @@ -1,3 +1,59 @@ -
-
- +
diff --git a/frontend/main/src/app/login/login.component.ts b/frontend/main/src/app/login/login.component.ts index d961b1e..73e69eb 100644 --- a/frontend/main/src/app/login/login.component.ts +++ b/frontend/main/src/app/login/login.component.ts @@ -10,6 +10,10 @@ import { LoginserviceService } from '../loginservice.service'; }) export class LoginComponent implements OnInit { + userReg!:string + nameReg!:string + passwordReg!:string + user!:string password!:string @@ -33,4 +37,8 @@ export class LoginComponent implements OnInit { }); } + register(){ + + } + } From 1559c68e87003fd98129f5959af2ff22931320c2 Mon Sep 17 00:00:00 2001 From: kaka-jaques Date: Fri, 2 Sep 2022 23:14:12 -0300 Subject: [PATCH 2/2] LOGIN COMPONENT --- .../main/src/app/login/login.component.css | 2 +- .../main/src/app/login/login.component.html | 12 +++--- .../main/src/app/login/login.component.ts | 37 ++++++++++++------- frontend/main/src/app/loginservice.service.ts | 6 ++- 4 files changed, 36 insertions(+), 21 deletions(-) diff --git a/frontend/main/src/app/login/login.component.css b/frontend/main/src/app/login/login.component.css index ba1e589..eb3d0e7 100644 --- a/frontend/main/src/app/login/login.component.css +++ b/frontend/main/src/app/login/login.component.css @@ -110,7 +110,7 @@ h6 span{ .card-front, .card-back { width: 100%; height: 100%; - background-color: #001f3f; + background-color: #d9c19e; background-position: bottom center; background-repeat: no-repeat; background-size: 300%; diff --git a/frontend/main/src/app/login/login.component.html b/frontend/main/src/app/login/login.component.html index 9dcb219..7f20a19 100644 --- a/frontend/main/src/app/login/login.component.html +++ b/frontend/main/src/app/login/login.component.html @@ -1,4 +1,4 @@ -
+
@@ -14,12 +14,12 @@
Log In Sign Up

Log In

+ autocomplete="off" [(ngModel)]="user" required>
+ autocomplete="on" [(ngModel)]="password" required>
submit @@ -33,17 +33,17 @@

Log In

Sign Up

+ autocomplete="on" [(ngModel)]="nameReg" required>
+ autocomplete="on" [(ngModel)]="emailReg" required>
+ autocomplete="on" [(ngModel)]="passwordReg" required>
submit diff --git a/frontend/main/src/app/login/login.component.ts b/frontend/main/src/app/login/login.component.ts index 73e69eb..b5bcf16 100644 --- a/frontend/main/src/app/login/login.component.ts +++ b/frontend/main/src/app/login/login.component.ts @@ -10,9 +10,9 @@ import { LoginserviceService } from '../loginservice.service'; }) export class LoginComponent implements OnInit { - userReg!:string + emailReg!:string nameReg!:string - passwordReg!:string + passwordReg!:string user!:string password!:string @@ -24,20 +24,31 @@ export class LoginComponent implements OnInit { } submit():void{ - this.loginService.succeed = true - this.router.navigateByUrl('home'); - this.loginService.logging(this.user, this.password) - .pipe( - catchError((error)=>{ - return of(['Deu erro parcero é isso', 'tu não vai encontrar detalhe aqui','pode sair já...', error, 'só pq sou teu amigo vou deixar esse error ai']) - }) - ) - .subscribe((response)=>{ - console.log('Running...', response); - }); + if(this.user != null && this.password != null){ + this.loginService.succeed = true + this.router.navigateByUrl('home') + this.loginService.logging(this.user, this.password) + .pipe( + catchError((error)=>{ + return of(['Deu erro parcero é isso', 'tu não vai encontrar detalhe aqui','pode sair já...', error, 'só pq sou teu amigo vou deixar esse error ai']) + }) + ) + .subscribe((response)=>{ + console.log('Running...', response); + }); + }else{ + alert('DIGITE TODOS OS CAMPOS OBRIGATÓRIOS!') + } } register(){ + if(this.nameReg != null && this.passwordReg != null && this.emailReg != null){ + this.loginService.succeed = true + this.router.navigateByUrl('home') + this.loginService.registering(this.nameReg, this.nameReg, this.passwordReg) + }else{ + alert('DIGITE TODOS OS CAMPOS OBRIGATÓRIOS!') + } } diff --git a/frontend/main/src/app/loginservice.service.ts b/frontend/main/src/app/loginservice.service.ts index b93f7bb..d638c50 100644 --- a/frontend/main/src/app/loginservice.service.ts +++ b/frontend/main/src/app/loginservice.service.ts @@ -16,7 +16,11 @@ export class LoginserviceService implements CanActivate { logging(user:string, password:string){ this.user = user - return this.http.get(this.TMSLoginAPI+user+password) + return this.http.get(this.TMSLoginAPI+'/'+user+'/'+password) + } + + registering(user:string, password:string, email:string){ + this.user = user } canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable | Promise {