| import {environment} from '../../../../environments/environment'; | 
| import {DateService} from '../../../business/services/util/date.service'; | 
| import {NzMessageService, NzModalService} from 'ng-zorro-antd'; | 
| import {Component, OnInit, Inject} from '@angular/core'; | 
| import {HttpClient} from '@angular/common/http'; | 
| import {ITokenService, DA_SERVICE_TOKEN} from '@delon/auth'; | 
| import {CascaderOption} from 'ng-zorro-antd/src/cascader/nz-cascader.component'; | 
| import {AreacodeService} from '@business/services/http/areacode.service'; | 
| import {NzTreeComponent} from 'ng-tree-antd'; | 
| import {Subject} from 'rxjs/Subject'; | 
|   | 
| @Component({ | 
|   selector: 'app-excel', | 
|   templateUrl: './excel.component.html', | 
|   styles: [] | 
| }) | 
| export class ExcelComponent implements OnInit { | 
|   [x: string]: any; | 
|   public query: any = {}; | 
|   public sensorOptions = []; | 
|   public monitorPointOptions = []; | 
|   public deviceOptions = []; | 
|   public typeOptions = [ | 
|     {value: 'year', label: '年', format: 'YYYY'}, | 
|     {value: 'month', label: '月', format: 'YYYY-MM'}, | 
|     {value: 'day', label: '日', format: 'YYYY-MM-DD'}, | 
|     {value: 'hour', label: '时', format: 'YYYY-MM-DD HH'} | 
|   ]; | 
|   public professionOptions = []; | 
|   | 
|   private treeClickStream: Subject<any> = new Subject<any>(); | 
|   private _sensors: {[key: string]: string} = {}; | 
|   private _sensorNames: string; | 
|   get sensorNames(): string { | 
|     return this._sensorNames; | 
|   } | 
|   | 
|   constructor( | 
|     public http: HttpClient, | 
|     public dateSrv: DateService, | 
|     public msgSrv: NzMessageService, | 
|     private areacodeService: AreacodeService, | 
|     @Inject(DA_SERVICE_TOKEN) public tokenService: ITokenService | 
|   ) { | 
|     this.timeType = this.typeOptions[1]; | 
|   } | 
|   | 
|   ngOnInit() { | 
|     this.query.time = null; | 
|     this.query.timeb = null; | 
|     this.http.get(environment.SERVER_BASH_URL + 'sensor/all').subscribe((res: any) => { | 
|       if (res.code === 0) { | 
|         this.msgSrv.error(res.message); | 
|       } else { | 
|         this.sensorOptions.push({id: -1, name: '全部', isExpanded: true, children: res.data}); | 
|       } | 
|     }); | 
|     this.http.get(environment.SERVER_BASH_URL + 'mobile/profession').subscribe((res: any) => { | 
|       if (res.errno !== 0) { | 
|         this.msgSrv.error(res.message); | 
|       } else { | 
|         this.professionOptions = res.data; | 
|       } | 
|     }); | 
|   } | 
|   | 
|   public onTreeClickSelect(event): void { | 
|     this.treeClickStream.next(event); | 
|   } | 
|   | 
|   public onSensorSelect(event): void { | 
|     const data = event.node.data; | 
|     if (data.id === -1 && data.halfChecked === false) { | 
|       if (!!data.checked) { | 
|         this.sensorOptions[0].children.forEach( | 
|           sensor => { | 
|             this._sensors[sensor.id] = sensor.sensorKey + '-' + sensor.name + '-' + sensor.unit; | 
|           } | 
|         ); | 
|       } else { | 
|         this._sensors = {}; | 
|       } | 
|     } else { | 
|       if (!!data.checked) { | 
|         this._sensors[data.id] = data.sensorKey + '-' + data.name + '-' + data.unit; | 
|       } else { | 
|         delete this._sensors[data.id]; | 
|       } | 
|     } | 
|     this.reloadSensorNames(); | 
|   | 
|   } | 
|   private reloadSensorNames(): void { | 
|     // 异步提升展现速度 | 
|     setTimeout(() => { | 
|       this._sensorNames = ''; | 
|       const sensorNameList = Object.keys(this._sensors).map( | 
|         id => { | 
|           const sensor = this.sensorOptions[0].children.find(item => { | 
|             return Number(id) === Number(item.id); | 
|           }); | 
|           return sensor.name; | 
|         } | 
|       ); | 
|       this._sensorNames = sensorNameList.join(', '); | 
|     }, 1); | 
|   } | 
|   | 
|   public areaLazyLoad(event: {option: CascaderOption, index: number, resolve: (children: CascaderOption[]) => void, reject: () => void}) { | 
|     const index = event['index']; | 
|     const option = event.option; | 
|     switch (index) { | 
|       case -1: | 
|         this.areacodeService.getProvinces().subscribe( | 
|           (res: {label: string, value: string}[]) => { | 
|             event.resolve(res); | 
|           } | 
|         ); break; | 
|       case 0: | 
|         this.areacodeService.getCities(option.value).subscribe( | 
|           (res: {label: string, value: string}[]) => { | 
|             event.resolve(res); | 
|           } | 
|         ); break; | 
|       case 1: | 
|         this.areacodeService.getAreas(option.value).subscribe( | 
|           (res: {label: string, value: string}[]) => { | 
|             event.resolve(res); | 
|           } | 
|         ); break; | 
|     } | 
|   } | 
|   | 
|   public regionChange(event: {option: CascaderOption, index: number}) { | 
|     let name = ''; | 
|     const option = event.option; | 
|     this.query.areaCode = null; | 
|     this.query.monitorPointId = null; | 
|     switch (event.index) { | 
|       case 0: | 
|         name = 'provinceCode'; | 
|         this.query.provinceCode = option.value; | 
|         this.query.cityCode = null; | 
|         break; | 
|       case 1: | 
|         name = 'cityCode'; | 
|         this.query.cityCode = option.value; | 
|         break; | 
|       case 2: | 
|         name = 'areaCode'; | 
|         this.query.areaCode = option.value; | 
|         break; | 
|     } | 
|     this.http.get(environment.SERVER_BASH_URL + 'monitor-point/list/region', {params: {name: name, value: option.value}}).subscribe((res: any) => { | 
|       if (res.code === 0) { | 
|         this.msgSrv.error(res.message); | 
|       } else { | 
|         this.monitorPointOptions = res.data; | 
|       } | 
|     }); | 
|    this.getDevices(); | 
|   | 
|   } | 
|   | 
|   getDevices() { | 
|     this.query.mac = null; | 
|     return this.http.get(environment.SERVER_BASH_URL + 'device/professionId', {params: this.query}).subscribe((res: any) => { | 
|       if (res.code === 0) { | 
|         this.msgSrv.error(res.message); | 
|       } else { | 
|         this.deviceOptions = res.data; | 
|       } | 
|     }); | 
|   } | 
|   | 
|   reportQuery() { | 
|     const query = this.query; | 
|     if (this.monitorPointOptions.length > 0 && query.time) { | 
|       query.time = this.dateSrv.date_format(query.time, this.timeType.format); | 
|       if (query.timeb) { | 
|         query.timeb = this.dateSrv.date_format(query.timeb, this.timeType.format); | 
|       } | 
|       query.type = this.timeType.value; | 
|       delete query.sensors; | 
|       if (this._sensors) { | 
|         const sensors = []; | 
|         for (const key in this._sensors) { | 
|           sensors.push(this._sensors[key]); | 
|         } | 
|         if (sensors.length > 0) { | 
|           query.sensors = JSON.stringify(sensors); | 
|         } | 
|       } | 
|   | 
|       let url = environment.SERVER_BASH_URL + 'report/excel?'; | 
|       for (const a in query) { | 
|         if (query[a]) { | 
|           url += encodeURI(a) + '=' + encodeURI(query[a]) + '&'; | 
|         } | 
|       } | 
|       window.location.href = url + '_token=' + this.tokenService.get().token; | 
|     } else { | 
|       this.msgSrv.error('开始时间为空或者所选区域没有监控站点数据!'); | 
|     } | 
|   } | 
| } |