From 4a4c7f1db802b8e316c4c72ba59f69c3f8f8281c Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Mon, 29 Jan 2018 15:24:08 +0800
Subject: [PATCH] 去除mock前保存

---
 src/app/routes/routes.module.ts                    |    4 
 src/app/routes/passport/login/login.component.less |   75 +++++++++++++++
 src/app/routes/routes-routing.module.ts            |    8 +
 src/app/app.module.ts                              |    3 
 src/app/routes/passport/login/login.component.ts   |  141 ++++++++++++++++++++++++++++
 src/app/routes/passport/login/login.component.html |   54 ++++++++++
 src/app/layout/passport/passport.component.html    |    2 
 7 files changed, 283 insertions(+), 4 deletions(-)

diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 3061d6f..6bcec65 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -55,8 +55,7 @@
     ],
     providers: [
         { provide: LOCALE_ID, useValue: 'zh-Hans' }, 
-        // TODO ������������������������       
-        //{ provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true},    
+        { provide: HTTP_INTERCEPTORS, useClass: SimpleInterceptor, multi: true},    
         { provide: HTTP_INTERCEPTORS, useClass: DefaultInterceptor, multi: true},    
         { provide: ALAIN_I18N_TOKEN, useClass: I18NService, multi: false },
         StartupService,
diff --git a/src/app/layout/passport/passport.component.html b/src/app/layout/passport/passport.component.html
index 187cf13..492b7eb 100644
--- a/src/app/layout/passport/passport.component.html
+++ b/src/app/layout/passport/passport.component.html
@@ -6,7 +6,7 @@
                 <span class="title">ng-alain</span>
             </a>
         </div>
-        <p class="desc">���������������������������������������������������������������������������</p>
+        <p class="desc"></p>
     </div>
     <router-outlet></router-outlet>
     <global-footer [links]="links">
diff --git a/src/app/routes/passport/login/login.component.html b/src/app/routes/passport/login/login.component.html
new file mode 100644
index 0000000..76283cd
--- /dev/null
+++ b/src/app/routes/passport/login/login.component.html
@@ -0,0 +1,54 @@
+<form nz-form [formGroup]="form" (ngSubmit)="submit()" role="form">
+    <nz-alert *ngIf="error" [nzType]="'error'" [nzMessage]="error" [nzShowIcon]="true" class="mb-lg"></nz-alert>
+    <div nz-form-item>
+        <div nz-form-control [nzValidateStatus]="userName">
+            <nz-input formControlName="userName" [nzPlaceHolder]="'admin'" [nzSize]="'large'">
+                <ng-template #prefix>
+                    <i class="anticon anticon-user"></i>
+                </ng-template>
+            </nz-input>
+            <ng-container *ngIf="userName.dirty || userName.touched">
+                <p nz-form-explain *ngIf="userName.errors?.required">���������������������</p>
+                <p nz-form-explain *ngIf="userName.errors?.minlength">������������������</p>
+            </ng-container>
+        </div>
+    </div>
+    <div nz-form-item>
+        <div nz-form-control [nzValidateStatus]="password">
+            <nz-input formControlName="password" [nzPlaceHolder]="'888888'" [nzType]="'password'" [nzSize]="'large'">
+                <ng-template #prefix>
+                    <i class="anticon anticon-lock"></i>
+                </ng-template>
+            </nz-input>
+            <div nz-form-explain *ngIf="(password.dirty || password.touched) && password.errors?.required">������������������</div>
+        </div>
+    </div>
+    <div nz-form-item nz-row>
+        <div nz-col [nzSpan]="12">
+            <label nz-checkbox formControlName="remember">
+                <span>������������</span>
+            </label>
+        </div>
+        <div nz-col [nzSpan]="12" class="text-right">
+            <a class="forgot" (click)="msg.error('���������������')">���������������</a>
+        </div>
+    </div>
+    <div nz-form-item>
+        <button nz-button [nzType]="'primary'" [nzLoading]="loading" [nzSize]="'large'" class="ant-btn__block">
+            <span>������</span>
+        </button>
+    </div>
+</form>
+<div class="other">
+    ������������������
+    <nz-tooltip [nzTitle]="'in fact Auth0 via window'">
+        <span nz-tooltip class="icon-alipay" (click)="open('auth0', 'window')"></span>
+    </nz-tooltip>
+    <nz-tooltip [nzTitle]="'in fact Github via redirect'">
+        <span nz-tooltip class="icon-taobao" (click)="open('github')"></span>
+    </nz-tooltip>
+    <nz-tooltip [nzTitle]="'���������������'">
+        <span nz-tooltip class="icon-weibo" (click)="open('weibo', 'window')"></span>
+    </nz-tooltip>
+    <a class="register" routerLink="/passport/register">������������</a>
+</div>
diff --git a/src/app/routes/passport/login/login.component.less b/src/app/routes/passport/login/login.component.less
new file mode 100644
index 0000000..601a0a3
--- /dev/null
+++ b/src/app/routes/passport/login/login.component.less
@@ -0,0 +1,75 @@
+@import '~@delon/theme/styles/antd/themes/default.less';
+
+:host {
+	display: block;
+	width: 368px;
+	margin: 0 auto;
+
+	::ng-deep {
+		.tabs {
+			padding: 0 2px;
+			margin: 0 -2px;
+			.ant-tabs-tab {
+				font-size: 16px;
+				line-height: 24px;
+			}
+			.ant-input-affix-wrapper .ant-input:not(:first-child) {
+				padding-left: 34px;
+			}
+		}
+
+		.ant-tabs .ant-tabs-bar {
+			border-bottom: 0;
+			margin-bottom: 24px;
+			text-align: center;
+		}
+
+		.ant-form-item {
+			margin-bottom: 24px;
+        }
+
+        .icon-alipay, .icon-taobao, .icon-weibo {
+            display: inline-block;
+            width: 24px;
+            height: 24px;
+            background: url('https://gw.alipayobjects.com/zos/rmsportal/itDzjUnkelhQNsycranf.svg');
+            margin-left: 16px;
+            vertical-align: middle;
+            cursor: pointer;
+        }
+
+        .icon-alipay {
+            background-position: -24px 0;
+
+            &:hover {
+                background-position: 0 0;
+            }
+        }
+
+        .icon-taobao {
+            background-position: -24px -24px;
+
+            &:hover {
+                background-position: 0 -24px;
+            }
+        }
+
+        .icon-weibo {
+            background-position: -24px -48px;
+
+            &:hover {
+                background-position: 0 -48px;
+            }
+        }
+
+        .other {
+            text-align: left;
+            margin-top: 24px;
+            line-height: 22px;
+
+            .register {
+            float: right;
+            }
+        }
+	}
+}
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..678152b
--- /dev/null
+++ b/src/app/routes/passport/login/login.component.ts
@@ -0,0 +1,141 @@
+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,
+        @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;
+        }
+        // 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.tokenService.set({
+                token: '123456789',
+                name: this.userName.value,
+                email: `cipchk@qq.com`,
+                id: 10000,
+                time: +new Date
+            });
+            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$);
+    }
+}
diff --git a/src/app/routes/routes-routing.module.ts b/src/app/routes/routes-routing.module.ts
index 891e3f5..918d7de 100644
--- a/src/app/routes/routes-routing.module.ts
+++ b/src/app/routes/routes-routing.module.ts
@@ -10,6 +10,7 @@
 import { DashboardAnalysisComponent } from './dashboard/analysis/analysis.component';
 import { DashboardMonitorComponent } from './dashboard/monitor/monitor.component';
 import { DashboardWorkplaceComponent } from './dashboard/workplace/workplace.component';
+import { UserLoginComponent } from 'app/routes/passport/login/login.component';
 
 
 const routes: Routes = [
@@ -29,6 +30,13 @@
             { path: 'sensors', loadChildren: './sensors/sensors.module#SensorsModule' },
             { path: 'systems', loadChildren: './systems/systems.module#SystemsModule' },
         ]
+    },    // passport
+    {
+        path: 'passport',
+        component: LayoutPassportComponent,
+        children: [
+            { path: 'login', component: UserLoginComponent }
+        ]
     },
     { path: '**', redirectTo: 'dashboard' }
 ];
diff --git a/src/app/routes/routes.module.ts b/src/app/routes/routes.module.ts
index 4afdeaf..c89de5e 100644
--- a/src/app/routes/routes.module.ts
+++ b/src/app/routes/routes.module.ts
@@ -1,3 +1,4 @@
+import { UserLoginComponent } from './passport/login/login.component';
 import { DateService } from '@business/services/util/date.service';
 import { _HttpClient } from '@delon/theme';
 import { NgModule } from '@angular/core';
@@ -29,7 +30,8 @@
         DashboardV1Component,
         DashboardAnalysisComponent,
         DashboardMonitorComponent,
-        DashboardWorkplaceComponent
+        DashboardWorkplaceComponent,
+        UserLoginComponent
     ],
     providers: [
         _HttpClient,

--
Gitblit v1.8.0