From 1a30ba4211462589698d26688ec24319e48b740c Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Wed, 11 Jul 2018 15:08:40 +0800 Subject: [PATCH] 提交 --- src/app/routes/passport/login/login.component.ts | 181 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 181 insertions(+), 0 deletions(-) diff --git a/src/app/routes/passport/login/login.component.ts b/src/app/routes/passport/login/login.component.ts new file mode 100644 index 0000000..f856d42 --- /dev/null +++ b/src/app/routes/passport/login/login.component.ts @@ -0,0 +1,181 @@ +import { SettingsService } from '@delon/theme'; +import { Component, OnDestroy, Inject, Optional } from '@angular/core'; +import { Router } from '@angular/router'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { NzMessageService, NzModalService } from 'ng-zorro-antd'; +import { + SocialService, + SocialOpenType, + TokenService, + DA_SERVICE_TOKEN, +} from '@delon/auth'; +import { ReuseTabService } from '@delon/abc'; +import { environment } from '@env/environment'; +import { StartupService } from '@core/startup/startup.service'; + +@Component({ + selector: 'passport-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.less'], + providers: [SocialService], +}) +export class UserLoginComponent implements OnDestroy { + form: FormGroup; + error = ''; + type = 0; + loading = false; + + constructor( + fb: FormBuilder, + private router: Router, + public msg: NzMessageService, + private modalSrv: NzModalService, + private settingsService: SettingsService, + private socialService: SocialService, + @Optional() + @Inject(ReuseTabService) + private reuseTabService: ReuseTabService, + @Inject(DA_SERVICE_TOKEN) private tokenService: TokenService, + private startupSrv: StartupService, + ) { + this.form = fb.group({ + userName: [null, [Validators.required, Validators.minLength(5)]], + password: [null, Validators.required], + mobile: [null, [Validators.required, Validators.pattern(/^1\d{10}$/)]], + captcha: [null, [Validators.required]], + remember: [true], + }); + modalSrv.closeAll(); + } + + // region: fields + + get userName() { + return this.form.controls.userName; + } + get password() { + return this.form.controls.password; + } + get mobile() { + return this.form.controls.mobile; + } + get captcha() { + return this.form.controls.captcha; + } + + // endregion + + switch(ret: any) { + this.type = ret.index; + } + + // region: get captcha + + count = 0; + interval$: any; + + getCaptcha() { + this.count = 59; + this.interval$ = setInterval(() => { + this.count -= 1; + if (this.count <= 0) clearInterval(this.interval$); + }, 1000); + } + + // endregion + + submit() { + this.error = ''; + if (this.type === 0) { + this.userName.markAsDirty(); + this.userName.updateValueAndValidity(); + this.password.markAsDirty(); + this.password.updateValueAndValidity(); + if (this.userName.invalid || this.password.invalid) return; + } else { + this.mobile.markAsDirty(); + this.mobile.updateValueAndValidity(); + this.captcha.markAsDirty(); + this.captcha.updateValueAndValidity(); + if (this.mobile.invalid || this.captcha.invalid) return; + } + // mock http + this.loading = true; + setTimeout(() => { + this.loading = false; + if (this.type === 0) { + if ( + this.userName.value !== 'admin' || + this.password.value !== '888888' + ) { + this.error = `���������������������`; + return; + } + } + + // ������������������������ + this.reuseTabService.clear(); + // ������Token������ + this.tokenService.set({ + token: '123456789', + name: this.userName.value, + email: `cipchk@qq.com`, + id: 10000, + time: +new Date(), + }); + // ������������ StartupService ��������������������� User ��������������������� + // this.startupSrv.load().then(() => this.router.navigate(['/'])); + // ������������������ + this.router.navigate(['/']); + }, 1000); + } + + // region: social + + open(type: string, openType: SocialOpenType = 'href') { + let url = ``; + let callback = ``; + if (environment.production) + callback = 'https://cipchk.github.io/ng-alain/callback/' + type; + else callback = 'http://localhost:4200/callback/' + type; + switch (type) { + case 'auth0': + url = `//cipchk.auth0.com/login?client=8gcNydIDzGBYxzqV0Vm1CX_RXH-wsWo5&redirect_uri=${decodeURIComponent( + callback, + )}`; + break; + case 'github': + url = `//github.com/login/oauth/authorize?client_id=9d6baae4b04a23fcafa2&response_type=code&redirect_uri=${decodeURIComponent( + callback, + )}`; + break; + case 'weibo': + url = `https://api.weibo.com/oauth2/authorize?client_id=1239507802&response_type=code&redirect_uri=${decodeURIComponent( + callback, + )}`; + break; + } + if (openType === 'window') { + this.socialService + .login(url, '/', { + type: 'window', + }) + .subscribe(res => { + if (res) { + this.settingsService.setUser(res); + this.router.navigateByUrl('/'); + } + }); + } else { + this.socialService.login(url, '/', { + type: 'href', + }); + } + } + + // endregion + + ngOnDestroy(): void { + if (this.interval$) clearInterval(this.interval$); + } +} -- Gitblit v1.8.0