import { Authorization } from '@business/entity/token';
|
import { LoginService } from './../../../business/services/http/login.service';
|
import { SettingsService } from '@delon/theme';
|
import { Component, OnDestroy, Inject } from '@angular/core';
|
import { Router } from '@angular/router';
|
import { FormGroup, FormBuilder, Validators } from '@angular/forms';
|
import { NzMessageService } from 'ng-zorro-antd';
|
import { SocialService, SocialOpenType, ITokenService, DA_SERVICE_TOKEN } from '@delon/auth';
|
import { environment } from '@env/environment';
|
@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 settingsService: SettingsService,
|
private socialService: SocialService,
|
private loginService:LoginService,
|
@Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {
|
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]
|
});
|
}
|
|
// 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.password.markAsDirty();
|
if (this.userName.invalid || this.password.invalid) return;
|
} else {
|
this.mobile.markAsDirty();
|
this.captcha.markAsDirty();
|
if (this.mobile.invalid || this.captcha.invalid) return;
|
}
|
this.loading = true;
|
this.loginService.validate(this.userName.value,this.password.value).subscribe(
|
(res:Authorization) => {
|
if(res.token!=null){
|
this.tokenService.set({
|
token: res.token,
|
name: this.userName.value,
|
time: +new Date
|
});
|
this.validateError = true;
|
this.router.navigate(['/']);
|
}
|
},
|
(err) => {
|
console.log(err);
|
if(err instanceof ProgressEvent){
|
const error = <ProgressEvent>err;
|
let xmlHttp = error.target;
|
if(xmlHttp instanceof XMLHttpRequest){
|
const xmlHttpRequest = <XMLHttpRequest> xmlHttp;
|
console.log(xmlHttpRequest.response);
|
const response = JSON.parse(xmlHttpRequest.response);
|
if(response.status == 401&&response.errorCode==10){
|
this.validateError = true;
|
this.loading = false;
|
}
|
}
|
}
|
}
|
);
|
|
}
|
public validateError:boolean;
|
// 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$);
|
}
|
}
|