Merge branch 'develop' of https://gitlab.eascs.com/tms-ui/tms-obc-web into develop

This commit is contained in:
wangshiming
2021-12-24 15:37:00 +08:00
4 changed files with 65 additions and 6 deletions

View File

@ -15,7 +15,7 @@ import { EnvironmentService } from '@env/environment.service';
import { NzMessageService } from 'ng-zorro-antd/message'; import { NzMessageService } from 'ng-zorro-antd/message';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root'
}) })
export class CoreService { export class CoreService {
// 获取当前登录用户信息 // 获取当前登录用户信息
@ -24,6 +24,8 @@ export class CoreService {
// 获取当前用户所拥有的菜单 // 获取当前用户所拥有的菜单
public $api_get_current_user_menus = `/scm/cuc/cuc/functionInfo/getUserHaveFunctionsList`; public $api_get_current_user_menus = `/scm/cuc/cuc/functionInfo/getUserHaveFunctionsList`;
position = { lat: '', lng: '' };
constructor(private injector: Injector) {} constructor(private injector: Injector) {}
// 注入路由 // 注入路由
public get router(): Router { public get router(): Router {

View File

@ -13,6 +13,7 @@ import { environment } from '@env/environment';
import { EAEnvironmentService, EAUserService } from '@shared'; import { EAEnvironmentService, EAUserService } from '@shared';
import { Observable, of } from 'rxjs'; import { Observable, of } from 'rxjs';
import { catchError, mergeMap } from 'rxjs/operators'; import { catchError, mergeMap } from 'rxjs/operators';
import { CoreService } from '../core.service';
@Injectable() @Injectable()
export class BusinessInterceptor implements HttpInterceptor { export class BusinessInterceptor implements HttpInterceptor {
@ -21,7 +22,8 @@ export class BusinessInterceptor implements HttpInterceptor {
private eaUserSrv: EAUserService, private eaUserSrv: EAUserService,
@Optional() @Optional()
@Inject(DA_SERVICE_TOKEN) @Inject(DA_SERVICE_TOKEN)
private tokenSrv: ITokenService private tokenSrv: ITokenService,
private coreSrv: CoreService
) {} ) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// 构造新的请求URL // 构造新的请求URL
@ -52,11 +54,16 @@ export class BusinessInterceptor implements HttpInterceptor {
* 附加额外的请求头 * 附加额外的请求头
*/ */
private attachAdditionalHeaders(req: HttpRequest<any>): HttpRequest<any> { private attachAdditionalHeaders(req: HttpRequest<any>): HttpRequest<any> {
let position = {};
if (this.coreSrv.position.lat && this.coreSrv.position.lng) {
position = { lat: this.coreSrv.position.lat.toString(), lng: this.coreSrv.position.lng.toString() };
}
// 附加环境变量 // 附加环境变量
const header: any = { const header: any = {
appId: this.envSrv.env.appId, appId: this.envSrv.env.appId,
tenantId: this.envSrv.env.tenantId, tenantId: this.envSrv.env.tenantId,
enterpriseId: '0' enterpriseId: '0',
...position
}; };
// 附加授权声明 // 附加授权声明

View File

@ -2,7 +2,7 @@ import { HttpClient } from '@angular/common/http';
import { Inject, Injectable } from '@angular/core'; import { Inject, Injectable } from '@angular/core';
import { ACLService } from '@delon/acl'; import { ACLService } from '@delon/acl';
import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme'; import { MenuService, SettingsService, TitleService, _HttpClient } from '@delon/theme';
import { EAUserService } from '@shared'; import { AmapService, EAUserService } from '@shared';
import { NzSafeAny } from 'ng-zorro-antd/core/types'; import { NzSafeAny } from 'ng-zorro-antd/core/types';
import { NzIconService } from 'ng-zorro-antd/icon'; import { NzIconService } from 'ng-zorro-antd/icon';
import { Observable, zip } from 'rxjs'; import { Observable, zip } from 'rxjs';
@ -26,6 +26,7 @@ export class StartupService {
private titleService: TitleService, private titleService: TitleService,
private httpClient: _HttpClient, private httpClient: _HttpClient,
private userSrv: EAUserService, private userSrv: EAUserService,
private amapService: AmapService,
private coreSrv: CoreService private coreSrv: CoreService
) { ) {
iconSrv.addIcon(...ICONS_AUTO, ...ICONS); iconSrv.addIcon(...ICONS_AUTO, ...ICONS);
@ -35,6 +36,12 @@ export class StartupService {
load(): Promise<void> { load(): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
this.amapService.getCurrentPosition().subscribe(res => {
if (res.position) {
this.coreSrv.position = { lat: res.position.lat, lng: res.position.lng };
}
});
let data; let data;
if (this.coreSrv.loginStatus) { if (this.coreSrv.loginStatus) {
// 本地菜单 // 本地菜单
@ -96,7 +103,7 @@ export class StartupService {
const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app)); const appData = this.httpClient.get(`assets/mocks/app-data.json`).pipe(map((res: any) => res.app));
// 用户数据 // 用户数据
const userData = this.httpClient.post(this.userSrv.$api_get_user_by_token,{}).pipe(map((res: any) => res.data)); const userData = this.httpClient.post(this.userSrv.$api_get_user_by_token, {}).pipe(map((res: any) => res.data));
// 菜单数据 // 菜单数据
const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu)); const menuData = this.httpClient.get('assets/mocks/menu-data.json').pipe(map((res: any) => res.data.menu));

View File

@ -1,6 +1,10 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Observable, Subject } from 'rxjs'; import { Observable, Subject, throwError } from 'rxjs';
import AMapLoader from '@amap/amap-jsapi-loader';
import { amapConf } from '@conf/amap.config';
declare var AMap: any; declare var AMap: any;
const CONFIG = amapConf;
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
@ -10,6 +14,7 @@ export class AmapService {
public time = 0; public time = 0;
sub = new Subject<any>(); sub = new Subject<any>();
currentSub = new Subject<any>();
//计算路径驾车最优路线的长度与所需时间 //计算路径驾车最优路线的长度与所需时间
drivingCompute(starts: any[], ends: any[]): Observable<any> { drivingCompute(starts: any[], ends: any[]): Observable<any> {
@ -28,4 +33,42 @@ export class AmapService {
}); });
return this.sub; return this.sub;
} }
getCurrentPosition(): Observable<any> {
AMapLoader.load({
key: CONFIG.key,
version: CONFIG.version,
plugins: [
// 需要使用的的插件列表,如比例尺'AMap.Scale'等
'AMap.PathSimplifier'
],
AMapUI: {
version: CONFIG.AMapUIVersion,
plugins: ['misc/PathSimplifier'] // 需要加载的 AMapUI ui插件
}
})
.then(AMap => {
AMap.plugin('AMap.Geolocation', () => {
let driving = new AMap.Geolocation({
enableHighAccuracy: true, //是否使用高精度定位,默认:true
timeout: 10000, //超过10秒后停止定位默认5s
buttonPosition: 'RB', //定位按钮的停靠位置
buttonOffset: new AMap.Pixel(10, 20), //定位按钮与设置的停靠位置的偏移量默认Pixel(10, 20)
zoomToAccuracy: true //定位成功后是否自动调整地图视野到定位点
});
driving.getCurrentPosition((status: string, result: any) => {
if (status == 'complete') {
this.currentSub.next(result);
} else {
console.log('定位获取失败');
}
});
});
})
.catch(e => {
throwError(e);
});
return this.currentSub;
}
} }