From 309d1f9d649daa08bb9b068af014749f6d4a5bce Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Fri, 06 Jul 2018 14:00:45 +0800
Subject: [PATCH] 设备和监控点父页面 筛选条件不予 编辑页面联动
---
src/app/core/net/default.interceptor.ts | 85 +++++++++++++++++++++++++++++++++++-------
1 files changed, 71 insertions(+), 14 deletions(-)
diff --git a/src/app/core/net/default.interceptor.ts b/src/app/core/net/default.interceptor.ts
index e18e15a..982d562 100644
--- a/src/app/core/net/default.interceptor.ts
+++ b/src/app/core/net/default.interceptor.ts
@@ -7,21 +7,62 @@
import { of } from 'rxjs/observable/of';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
import { mergeMap, catchError } from 'rxjs/operators';
-import { NzMessageService } from 'ng-zorro-antd';
+import { NzMessageService, NzModalService } from 'ng-zorro-antd';
import { _HttpClient } from '@delon/theme';
import { environment } from '@env/environment';
+import { LoginService } from '@business/services/http/login.service';
+import { Subject } from 'rxjs/Subject';
+import { error } from 'protractor';
+import { debug } from 'util';
+import {Location} from '@angular/common';
/**
* ������HTTP������������������������������ `app.module.ts`
*/
@Injectable()
export class DefaultInterceptor implements HttpInterceptor {
- constructor(private injector: Injector) {}
-
+ private unLoginHandle: Subject<HttpErrorResponse> = new Subject<HttpErrorResponse>();
+
+ constructor(private injector: Injector) {
+ let isExpireModelShow = false;
+ this.unLoginHandle.debounceTime(1000).delay(1000).filter(
+ () => !isExpireModelShow
+ ).subscribe( (event: HttpErrorResponse) => {
+ isExpireModelShow = true;
+ let errorMsg = '';
+ if (!!event && !!event.error) {
+ const erroCode = !!event.error['errorCode'] ? Number.parseInt(event.error['errorCode']) : 0;
+ switch (erroCode) {
+ case 10: errorMsg = '���������,���������'; break;
+ case 11: errorMsg = '������������,���������������'; break;
+ case 12: errorMsg = '������������,������������������'; break;
+ case 0: errorMsg = '���������������������������'; break;
+ default: errorMsg = '������������,���������������'; break;
+ }
+ }else {
+ errorMsg = '���������������������������';
+ }
+ // ������refresh���������������������
+ this.loginService.clearRefreshToken();
+ this.model.info({
+ maskClosable: false,
+ title: errorMsg,
+ onOk: () => {
+ isExpireModelShow = false;
+ this.goTo('/passport/login');
+ }
+ });
+ });
+ }
+ get loginService(): LoginService {
+ return this.injector.get<LoginService>(LoginService);
+ }
get msg(): NzMessageService {
return this.injector.get(NzMessageService);
}
-
+ get model(): NzModalService {
+ return this.injector.get(NzModalService);
+ }
private goTo(url: string) {
setTimeout(() => this.injector.get(Router).navigateByUrl(url));
}
@@ -30,7 +71,8 @@
// ��������������� `throw` ������������������ `_HttpClient` ��� `end()` ������
// this.injector.get(_HttpClient).end();
// ���������������������������������
- switch (event.status) {
+ const status = !!event.status ? event.status : 401;
+ switch (status) {
case 200:
// ��������������������������������������������������� `status` ��������� `0` ���������������������
// ��������� `error_message` ������
@@ -44,7 +86,10 @@
// }
break;
case 401: // ������������������
- this.goTo('/passport/login');
+ // this.goTo('/passport/login');
+ if (!this.isLoginPage) {
+ this.unLoginHandle.next(<HttpErrorResponse>event);
+ }
break;
case 403:
case 404:
@@ -59,14 +104,16 @@
return of(event);
}
}
-
+ private get isLoginPage(): boolean {
+ return !!location && !!location.hash && location.hash.endsWith('login');
+ }
intercept(req: HttpRequest<any>, next: HttpHandler):
- Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
-
+ Observable<HttpSentEvent | HttpHeaderResponse | HttpProgressEvent | HttpResponse<any> | HttpUserEvent<any>> {
// ���������������������������
let url = req.url;
- if (!url.startsWith('https://') && !url.startsWith('http://')) {
- url = environment.SERVER_URL + url;
+ if (!url.startsWith('https://') && !url.startsWith('http://') && !url.startsWith('assets')) {
+ // url = environment.SERVER_URL + url;
+ url = environment.SERVER_BASH_URL + url;
}
const newReq = req.clone({
@@ -75,12 +122,22 @@
return next.handle(newReq).pipe(
mergeMap((event: any) => {
// ������������������������������������������������������������������������������������������������HTTP������������������200������������������
- if (event instanceof HttpResponse && event.status === 200)
- return this.handleData(event);
+ if (event instanceof HttpResponse && event.status === 200) {
+ // ������token���������������������������
+ if (!this.isLoginPage
+ && !!newReq.headers
+ && !newReq.headers.get('X-Refrsh-Token')
+ && !url.startsWith('assets')) {
+ this.loginService.refreshToken();
+ }
+ return this.handleData(event);
+ }
// ������������������������������������
return of(event);
}),
- catchError((err: HttpErrorResponse) => this.handleData(err))
+ catchError((err: HttpErrorResponse) => {
+ return this.handleData(err);
+ })
);
}
}
--
Gitblit v1.8.0