fengxiang
2018-07-06 309d1f9d649daa08bb9b068af014749f6d4a5bce
src/app/routes/passport/login/login.component.ts
@@ -1,16 +1,22 @@
import { error } from 'selenium-webdriver';
import { HttpErrorResponse } from '@angular/common/http';
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 { Component, OnDestroy, Inject, Optional } 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 { ReuseTabService } from '@delon/abc';
import { environment } from '@env/environment';
import { CookieService } from 'angular2-cookie/services/cookies.service';
import { debounce } from 'rxjs/operators';
@Component({
    selector: 'passport-login',
    templateUrl: './login.component.html',
    styleUrls: [ './login.component.less' ],
    providers: [ SocialService ]
    providers: [ SocialService, CookieService]
})
export class UserLoginComponent implements OnDestroy {
@@ -25,6 +31,8 @@
        public msg: NzMessageService,
        private settingsService: SettingsService,
        private socialService: SocialService,
        @Optional() @Inject(ReuseTabService) private reuseTabService: ReuseTabService,
        private loginService: LoginService,
        @Inject(DA_SERVICE_TOKEN) private tokenService: ITokenService) {
        this.form = fb.group({
            userName: [null, [Validators.required, Validators.minLength(5)]],
@@ -33,6 +41,8 @@
            captcha: [null, [Validators.required]],
            remember: [true]
        });
        // let nowTime = new Date();
        // nowTime.setDate(nowTime.getDate()+1);
    }
    // region: fields
@@ -75,28 +85,44 @@
            this.captcha.markAsDirty();
            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 !== '123456') {
                    this.error = `账户或密码错误`;
                    return;
        this.loginService.validate(this.userName.value, this.password.value).subscribe(
                (res: Authorization) => {
                    this.validateError['password_incorrect'] = false;
                    this.validateError['account_expired'] = false;
                    this.validateError['server_offline'] = false;
                   if (res.token != null) {
                        // 清空路由复用信息
                       this.reuseTabService.clear();
                       this.tokenService.set({
                           token: res.token,
                           name: this.userName.value,
                           time: +new Date
                       });
                       this.validateError = {};
                       this.router.navigate(['/']);
                   }
                },
                (err: HttpErrorResponse) => {
                    if (!!err) {
                        const errMsg = err.error;
                        console.log(errMsg);
                        if (errMsg.status === 401 && errMsg.errorCode === 10) {
                            this.validateError['password_incorrect'] = true;
                            this.loading = false;
                       } else if (errMsg.status === 401 && errMsg.errorCode === 12) {
                           this.validateError['account_expired'] = true;
                           this.loading = false;
                       } else if (!errMsg.status  && !errMsg.errorCode) {
                           this.validateError['server_offline'] = true;
                           this.loading = false;
                       }
                    }
                }
            }
           );
            this.tokenService.set({
                token: '123456789',
                name: this.userName.value,
                email: `cipchk@qq.com`,
                id: 10000,
                time: +new Date
            });
            this.router.navigate(['/']);
        }, 1000);
    }
    public validateError: {[s: string]: boolean} = {};
    // region: social
    open(type: string, openType: SocialOpenType = 'href') {