From b4f60bc9c5f2f74eee61c2fc2a639618aaf52c2b Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Tue, 27 Feb 2018 16:57:03 +0800
Subject: [PATCH] 更新主题系统版本

---
 src/app/core/net/default.interceptor.ts |   78 ++++++++++++++++++++++----------------
 1 files changed, 45 insertions(+), 33 deletions(-)

diff --git a/src/app/core/net/default.interceptor.ts b/src/app/core/net/default.interceptor.ts
index aaf63a6..5d7b2e0 100644
--- a/src/app/core/net/default.interceptor.ts
+++ b/src/app/core/net/default.interceptor.ts
@@ -1,12 +1,14 @@
 import { Injectable, Injector } from '@angular/core';
 import { Router } from '@angular/router';
-import { HttpInterceptor, HttpRequest, HttpHandler,
+import { HttpInterceptor, HttpRequest, HttpHandler, HttpErrorResponse,
          HttpSentEvent, HttpHeaderResponse, HttpProgressEvent, HttpResponse, HttpUserEvent,
        } from '@angular/common/http';
 import { Observable } from 'rxjs/Observable';
+import { of } from 'rxjs/observable/of';
 import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
-import { catchError } from 'rxjs/operators';
-import { map, mergeMap } from 'rxjs/operators';
+import { mergeMap, catchError } from 'rxjs/operators';
+import { NzMessageService } from 'ng-zorro-antd';
+import { _HttpClient } from '@delon/theme';
 import { environment } from '@env/environment';
 
 /**
@@ -16,54 +18,64 @@
 export class DefaultInterceptor implements HttpInterceptor {
     constructor(private injector: Injector) {}
 
-    private goLogin() {
-        const router = this.injector.get(Router);
-        router.navigate([ '/login' ]);
-        // window.location.reload();
+    get msg(): NzMessageService {
+        return this.injector.get(NzMessageService);
+    }
+
+    private goTo(url: string) {
+        setTimeout(() => this.injector.get(Router).navigateByUrl(url));
+    }
+
+    private handleData(event: HttpResponse<any> | HttpErrorResponse): Observable<any> {
+        // ��������������� `throw` ������������������ `_HttpClient` ��� `end()` ������
+        this.injector.get(_HttpClient).end();
+        // ���������������������������������
+        switch (event.status) {
+            case 200:
+                // ��������������������������������������������������� `status` ��������� `0` ���������������������
+                // ��������� `error_message` ������
+
+                // const body: any = event instanceof HttpResponse && event.body;
+                // if (body && body.status !== 0) {
+                //     this.msg.error(body.error_message);
+                //     // ������������������������������������ Pipe���subscribe ������������������
+                //     // this.http.get('/').subscribe() ���������������
+                //     return ErrorObservable.throw(event);
+                // }
+                break;
+            case 401: // ������������������
+                this.goTo('/passport/login');
+                break;
+            case 403:
+            case 404:
+            case 500:
+                this.goTo(`/${event.status}`);
+                break;
+        }
+        return of(event);
     }
 
     intercept(req: HttpRequest<any>, next: HttpHandler):
         Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
 
-        // TIPS������TOKEN��������������� `@delon/auth` ������
-        // Document: http://ng-alain.com/docs/auth
         // ���������������������������
         let url = req.url;
-        
         if (!url.startsWith('https://') && !url.startsWith('http://')) {
             url = environment.SERVER_URL + url;
         }
+
         const newReq = req.clone({
             url: url
         });
-
         return next.handle(newReq).pipe(
                     mergeMap((event: any) => {
                         // ������������������������������������������������������������������������������������������������HTTP������������������200������������������
-                        if (event instanceof HttpResponse && event.status !== 200) {
-                            // ���������������observer.error ��������������������� `catch`
-                            // return ErrorObservable.create(event);
-                        }
+                        if (event instanceof HttpResponse && event.status === 200)
+                            return this.handleData(event);
                         // ������������������������������������
-                        return Observable.create(observer => observer.next(event));
+                        return of(event);
                     }),
-                    catchError((res: HttpResponse<any>) => {
-                        // ���������������������������������
-                        switch (res.status) {
-                            case 401: // ������������������
-                                this.goLogin();
-                                break;
-                            case 200:
-                                // ������������������������
-                                console.log('������������');
-                                break;
-                            case 404:
-                                // 404
-                                break;
-                        }
-                        // ������������������������������������
-                        return ErrorObservable.create(event);
-                    })
+                    catchError((err: HttpErrorResponse) => this.handleData(err))
                 );
     }
 }

--
Gitblit v1.8.0