From 780f76a3e8dd68abe6b007006f85a76991ea2c54 Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Mon, 16 Apr 2018 13:40:28 +0800
Subject: [PATCH] Merge branch 'develop' of http://blit.7drlb.com:8888/r/screen-frontend into develop
---
src/app/routes/systems/organization/organization-list/organization-list.component.ts | 4
src/app/routes/report/report.component.html | 11
src/app/routes/systems/registration/registration.component.ts | 72 ++++++
src/app/routes/systems/systems.module.ts | 7
src/app/routes/report/report.component.ts | 111 +++++++++
src/app/routes/reports/demo/demo.component.ts | 164 ++++++++++++--
src/app/routes/reports/excel/excel.component.html | 44 ++-
src/app/routes/reports/excel/excel.component.ts | 133 ++++++++++-
src/app/routes/systems/organization/organization-list/organization-list.component.html | 2
src/assets/app-data.json | 7
src/app/routes/reports/demo/demo.component.html | 66 ++++-
src/app/routes/systems/registration/registration.component.html | 27 ++
12 files changed, 563 insertions(+), 85 deletions(-)
diff --git a/src/app/routes/report/report.component.html b/src/app/routes/report/report.component.html
index 42bf6e2..624bb1b 100644
--- a/src/app/routes/report/report.component.html
+++ b/src/app/routes/report/report.component.html
@@ -12,7 +12,7 @@
<div class="t_bg">
<img src="./assets/img/logo.png">
- <h1>{{title}}������������������������</h1>
+ <h1>{{title}}������������������</h1>
<div class="container">
<div class="title">
<div class="title_left"></div>
@@ -25,6 +25,10 @@
</div>
</div>
+
+
+
+
<div class="content">
<div *ngFor="let item of items;let i = index">
<div class="{{i % 2 == 0 ? 'left' : 'right'}}">
@@ -34,8 +38,8 @@
<div class="text_t_right"></div>
<div class="clear_fix"></div>
</div>
- <p class="text1">���������������{{item.monitorPointAddress}}</p>
- <p class="text1">���������������������{{item.deviceCount}}���</p>
+ <p *ngIf="item.monitorPointId" class="text1">���������������{{item.monitorPointAddress}}</p>
+ <p class="text1">������������������{{item.deviceCount}}���</p>
<div class="clear_fix"></div>
</div>
</div>
@@ -48,6 +52,7 @@
<div *ngFor="let i of sensorArr">
<div id="mydiv{{i}}" style="height: 485.35px; width: 1000px"></div>
</div>
+ <!-- <div id="pieChar" style="height: 485.35px; width: 1000px"></div> -->
</div>
<div class="bg" *ngIf="!spinning">
diff --git a/src/app/routes/report/report.component.ts b/src/app/routes/report/report.component.ts
index 64d1127..4fcfc16 100644
--- a/src/app/routes/report/report.component.ts
+++ b/src/app/routes/report/report.component.ts
@@ -2,7 +2,6 @@
import {NzMessageService, NzModalService} from 'ng-zorro-antd';
import {Component, OnInit, Injector} from '@angular/core';
import {HttpClient} from '@angular/common/http';
-import {ActivatedRoute} from '@angular/router';
import * as echarts from 'echarts';
import * as $ from 'jquery';
@@ -69,7 +68,6 @@
constructor(
public injector: Injector,
public http: HttpClient,
- public activeRoute: ActivatedRoute,
public msgSrv: NzMessageService
) {
for (let index = 0; index < 30; index++) {
@@ -77,8 +75,93 @@
}
}
+ private pieCharOption: any = {
+ title: {
+ text: 'AQI������������������������',
+ x: 'center'
+ },
+ tooltip: {
+ trigger: 'item',
+ formatter: "{a} <br/>{b}: {c} ({d}%)"
+ },
+ legend: {
+ //x : 'center',
+ top: '10%',
+ data: ['PM 2.5', 'PM 10', '���������������CO���', '���������������SO������', '���������O������', '���������������NO������']
+ },
+ graphic: [{
+ type: 'text',
+ left: '24%',
+ top: '49%',
+ style: {
+ text: '������������'
+ }
+ }, {
+ type: 'text',
+ left: '74%',
+ top: '49%',
+ style: {
+ text: '{b}'
+ }
+ }
+ ],
+ series: [
+ {
+ name: '������������',
+ type: 'pie',
+ radius: ['30%', '50%'],
+ center: ['25%', '50%'],
+ label: {
+ normal: {
+ formatter: "{b}:{d}%"
+ }
+ },
+ labelLine: {
+ normal: {
+ show: true
+ }
+ },
+ data: [
+ {value: 100, name: 'PM 2.5'},
+ {value: 100, name: 'PM 10'},
+ {value: 200, name: '���������������CO���'},
+ {value: 200, name: '���������������SO������'},
+ {value: 100, name: '���������O������'},
+ {value: 100, name: '���������������NO������'}
+ ]
+ },
+ {
+ name: '������������',
+ type: 'pie',
+ radius: ['30%', '50%'],
+ center: ['75%', '50%'],
+ label: {
+ normal: {
+ formatter: "{b}:{d}%",
+ }
+ },
+ labelLine: {
+ normal: {
+ show: true,
+ }
+ },
+ data: [
+ {value: 0, name: 'PM 2.5'},
+ {value: 0, name: 'PM 10'},
+ {value: 100, name: '���������������CO���'},
+ {value: 100, name: '���������������SO������'},
+ {value: 100, name: '���������O������'},
+ {value: 100, name: '���������������NO������'}
+
+ ]
+ }
+ ]
+ };
+
ngOnInit() {
- this.activeRoute.queryParams.subscribe(params => {
+ const params = JSON.parse(sessionStorage.getItem("queryParams"));
+ if (!!params) {
+ localStorage.removeItem("queryParams");
const items = this.items = JSON.parse(params.items);
const timeType = params.type;
this.http.get(environment.SERVER_BASH_URL + 'report/compare', {params: params}).subscribe((res: any) => {
@@ -87,6 +170,7 @@
} else {
const option = this.echartOption;
const sensors = res.data.sensors;
+ const deviceCounts = res.data.deviceCounts;
const timeArr = this.timeArr;
const label = timeArr[this.typeArr.indexOf(timeType)];
option.xAxis.data = res.data.times;
@@ -105,11 +189,15 @@
}
for (let i = 0; i < items.length; i++) {
this.title = items[i].formatTime;
- const legendName = items[i].formatTime + label + (items[i].mac ? items[i].deviceName : items[i].monitorPointName);
+ items[i].deviceCount = deviceCounts[i];
+ if (!items[i].monitorPointid) {
+ items[i].monitorPointName = items[i].areaName
+ }
+ const legendName = items[i].formatTime + label + (items[i].mac ? '������:' + items[i].deviceName : (items[i].monitorPointid ? '���������:' + items[i].monitorPointName : items[i].areaName));
option.legend.data[i] = legendName;
option.series.push({
name: legendName,
- data: res.data.datas[i]['data' + i][0][sensorKey],
+ data: res.data.datas[i][sensorKey],
type: params.reportType,
smooth: true,
itemStyle: {
@@ -134,8 +222,19 @@
for (let i = 0; i < title.length; i++) {
this.title += title[i] + timeArr[i];
}
+ if (sensors.length % 2 == 0) {
+ this.pieCharOption.backgroundColor = 'rgba(0,0,0,0)';
+ } else {
+ this.pieCharOption.backgroundColor = 'rgba(23,133,23,0.06)';
+ }
+// const myChart = echarts.init(document.getElementById('pieChar'));
+// myChart.setOption(this.pieCharOption, true);
+// window.onresize = myChart.resize;
}
});
- });
+ } else {
+ this.msgSrv.error("������������������������������������");
+ setTimeout("window.close();", 1000);
+ }
}
}
diff --git a/src/app/routes/reports/demo/demo.component.html b/src/app/routes/reports/demo/demo.component.html
index a88f325..529fe8e 100644
--- a/src/app/routes/reports/demo/demo.component.html
+++ b/src/app/routes/reports/demo/demo.component.html
@@ -2,22 +2,34 @@
<nz-card [nzBordered]="false">
<form nz-form (ngSubmit)="reportQuery()" [nzLayout]="'inline'">
<div nz-row [nzGutter]="24">
- <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-col [nzSpan]="5" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label> ��� ���</label>
+ <label> ��� ���</label>
</div>
<div nz-form-control class="flex-1">
- <nz-select [nzMode]="'multiple'" [(ngModel)]="query.sensorKey" name="sensorKey" [nzSize]="'large'" [nzPlaceHolder]="'���������'">
+ <!-- <nz-select [nzMode]="'multiple'" [(ngModel)]="query.sensorKeys" name="sensorKeys" [nzSize]="'large'" [nzPlaceHolder]="'���������'">
<nz-option *ngFor="let option of sensorOptions" [nzLabel]="option.name" [nzValue]="option.sensorKey + '-' + option.name + '-' + option.unit"></nz-option>
- </nz-select>
+ </nz-select> -->
+ <nz-popover [nzPlacement]="'bottomLeft'" [nzTrigger]="'hover'">
+ <nz-input [nzType]="'input'" nz-popover [ngModel]="sensorNames" name="sensorKeys" [nzReadonly]="true" [nzPlaceHolder]="'��������� ������'">
+ <ng-template #suffix>
+ <i class="anticon anticon-down ant-cascader-picker-arrow "></i>
+ </ng-template>
+ </nz-input>
+ <ng-template #nzTemplate>
+ <div [ngStyle]="{'width': '240px', 'height': '240px', 'overflow-y' :'auto'}">
+ <nz-tree [nzNodes]="sensorOptions" (nzActivate)="onTreeClickSelect($event)" (nzDeactivate)="onTreeClickSelect($event)" [nzCheckable]="true" (nzCheck)="onSensorSelect($event)"></nz-tree>
+ </div>
+ </ng-template>
+ </nz-popover>
</div>
</div>
</div>
- <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-col [nzSpan]="5" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label nz-form-item-required>������</label>
+ <label nz-form-item-required>��� ���</label>
</div>
<div nz-form-control class="flex-1">
<nz-select [(ngModel)]="timeType" name="timeType" [nzSize]="'large'" [nzPlaceHolder]="'���������'">
@@ -26,7 +38,7 @@
</div>
</div>
</div>
- <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-col [nzSpan]="5" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
<label nz-form-item-required>������</label>
@@ -38,7 +50,7 @@
</div>
</div>
</div>
- <div nz-col [nzSpan]="6" class="mb-md" *ngIf="items.length < 2">
+ <div nz-col [nzSpan]="5" class="mb-md" *ngIf="items.length < 2">
<button nz-button type="button" [nzType]="'primary'" [nzSize]="'large'" (click)="addItem()">
<!-- <i class="anticon anticon-plus"></i> -->
<i class="anticon anticon-plus-circle-o"></i>
@@ -49,43 +61,55 @@
</div>
<div nz-row [nzGutter]="24" *ngFor="let item of items;let i = index">
- <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-col [nzSpan]="5" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label nz-form-item-required>���������</label>
+ <label nz-form-item-required>���������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-select [(ngModel)]="item.monitorPoint" name="monitorPoint{{item.id}}" nzAllowClear [nzPlaceHolder]="'���������'" [nzFilter]="false" [nzSize]="'large'"
- (nzSearchChange)="searchChange($event,i)" [nzNotFoundContent]="'������������'" (ngModelChange)="monitorPointChange($event,i)" nzShowSearch>
- <nz-option *ngFor="let option of monitorPointOptions" [nzLabel]="option['name']" [nzValue]="option"> </nz-option>
+ <nz-cascader (nzLoad)="areaLazyLoad($event,i)" [nzPlaceHolder]="'��������� ���/���/���'" [nzAllowClear]="false" [nzChangeOnSelect]="true" (nzSelect)="regionChange($event,i)">
+ </nz-cascader>
+ </div>
+ </div>
+ </div>
+
+ <div nz-col [nzSpan]="5" class="mb-md">
+ <div nz-form-item class="d-flex">
+ <div nz-form-label>
+ <label>���������</label>
+ </div>
+ <div nz-form-control class="flex-1">
+ <nz-select [(ngModel)]="item.monitorPoint" name="monitorPoint{{item.id}}" [nzPlaceHolder]="'��������� ���������'" [nzSize]="'large'"
+ [nzNotFoundContent]="'������������'" (ngModelChange)="monitorPointChange($event,i)" nzShowSearch nzAllowClear>
+ <nz-option *ngFor="let option of item.monitorPointOptions" [nzLabel]="option['name']" [nzValue]="option"> </nz-option>
</nz-select>
</div>
</div>
</div>
- <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-col [nzSpan]="5" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label> ������</label>
+ <label> ��� ���</label>
</div>
<div nz-form-control class="flex-1">
- <nz-select [(ngModel)]="item.device" name="mac{{item.id}}" [nzSize]="'large'" nzAllowClear [nzPlaceHolder]="'���������'">
+ <nz-select [(ngModel)]="item.device" name="mac{{item.id}}" [nzSize]="'large'" [nzPlaceHolder]="'��������� ������'" [nzNotFoundContent]="'������������'" nzShowSearch nzAllowClear>
<nz-option *ngFor="let option of item.deviceOptions" [nzLabel]="option.name" [nzValue]="option" ></nz-option>
</nz-select>
</div>
</div>
</div>
- <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-col [nzSpan]="5" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
<label nz-form-item-required>������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-datepicker style="width: 100%;" [(ngModel)]="item.time" name="time{{item.id}}" [nzPlaceHolder]="'���������'" [nzFormat]="timeType.format" [nzDisabledDate]="_disabledDate"
+ <nz-datepicker style="width: 100%;" [(ngModel)]="item.time" name="time{{item.id}}" [nzPlaceHolder]="'��������� ������'" [nzFormat]="timeType.format" [nzDisabledDate]="_disabledDate"
[nzMode]="timeType.value=='hour'||timeType.value=='day'?'day':'month'" [nzShowTime]="timeType.value=='hour'?true:false" [nzSize]="'large'"></nz-datepicker>
</div>
</div>
</div>
- <div nz-col [nzSpan]="6" class="mb-md" *ngIf="items.length > 1">
+ <div nz-col [nzSpan]="4" class="mb-md" *ngIf="items.length > 1">
<button nz-button type="button" [nzType]="'danger'" [nzSize]="'large'" (click)="items.splice(i, 1)">
<i class="anticon anticon-minus-circle-o dynamic-delete-button"></i>
<span>������������������</span>
@@ -95,7 +119,9 @@
<div nz-row [nzGutter]="24">
<div nz-col [nzSpan]="6" class="mb-md">
- <button nz-button type="submit" [nzType]="'primary'" [nzSize]="'large'">������</button>
+ <button nz-button type="submit" [nzType]="'primary'" [nzSize]="'large'">
+ <a target="_blank" [routerLink]="['/report']" (click)="reportQuery()">������</a>
+ </button>
<!-- <button nz-button type="reset" [nzSize]="'large'" class="mx-sm" (click)="load()">������</button> -->
</div>
</div>
diff --git a/src/app/routes/reports/demo/demo.component.ts b/src/app/routes/reports/demo/demo.component.ts
index 37cf5ed..305c4b6 100644
--- a/src/app/routes/reports/demo/demo.component.ts
+++ b/src/app/routes/reports/demo/demo.component.ts
@@ -3,7 +3,10 @@
import {NzMessageService} from 'ng-zorro-antd';
import {Component, OnInit} from '@angular/core';
import {HttpClient} from '@angular/common/http';
-import {Router} from '@angular/router';
+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-demo',
@@ -25,19 +28,27 @@
{value: 'bar', label: '���������'},
{value: 'line', label: '���������'}
];
- public monitorPointOptions = [];
- public items = [{
+
+ public items: any[] = [{
id: 0,
monitorPoint: null,
device: null,
time: null,
+ monitorPointOptions: [],
deviceOptions: []
}];
+
+ 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 router: Router,
+ private areacodeService: AreacodeService,
public msgSrv: NzMessageService
) {
this.timeType = this.typeOptions[1];
@@ -49,9 +60,52 @@
if (res.code === 0) {
this.msgSrv.error(res.message);
} else {
- this.sensorOptions = res.data;
+ this.sensorOptions.push({id: -1, name: '������', isExpanded: true, children: 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);
}
addItem() {
@@ -61,23 +115,70 @@
monitorPoint: null,
device: null,
time: null,
+ monitorPointOptions: [],
deviceOptions: []
});
}
- searchChange(searchText, i) {
- if (searchText) {
- const query = encodeURI(searchText);
- if (query) {
- this.http.get(environment.SERVER_BASH_URL + '/monitor-point/list/' + query).subscribe((res: any) => {
- if (res.code === 0) {
- this.msgSrv.error(res.message);
- } else {
- this.monitorPointOptions = res.data;
+ 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}, i) {
+ let name = '';
+ let areaName = '';
+ const option = event.option;
+ this.items[i].monitorPoint = null;
+ this.items[i].areaCode = null;
+ this.items[i].device = null;
+
+ switch (event.index) {
+ case 0:
+ name = 'provinceCode';
+ this.items[i].provinceCode = option.value;
+ this.items[i].cityCode = null;
+ areaName = option.label;
+ break;
+ case 1:
+ name = 'cityCode';
+ this.items[i].cityCode = option.value;
+ areaName = option.parent.label + '/' + option.label;
+ break;
+ case 2:
+ name = 'areaCode';
+ this.items[i].areaCode = option.value;
+ areaName = option.parent.parent.label + '/' + option.parent.label + '/' + option.label;
+ break;
+ }
+ this.items[i].areaName = areaName;
+ 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.items[i].monitorPointOptions = res.data;
+ }
+ });
}
monitorPointChange(value, i) {
@@ -103,24 +204,30 @@
let validate = true;
const queryItems = [];
for (let i = 0; i < this.items.length; i++) {
+ let areaName = '';
let item = this.items[i];
let queryItem: any = {};
- if (item.monitorPoint && item.time) {
+ if ((!!item.time) && (item.monitorPointOptions.length > 0)) {
for (var key in item) {
if (item[key]) {
queryItem[key] = item[key];
}
}
- queryItem.monitorPointId = queryItem.monitorPoint.id;
- queryItem.monitorPointName = queryItem.monitorPoint.name;
- queryItem.monitorPointAddress = queryItem.monitorPoint.address;
- delete queryItem.monitorPoint;
+ if (queryItem.monitorPoint) {
+ queryItem.monitorPointId = queryItem.monitorPoint.id;
+ queryItem.monitorPointName = queryItem.monitorPoint.name;
+ queryItem.monitorPointAddress = queryItem.monitorPoint.address;
+ delete queryItem.monitorPoint;
+ }
+ delete queryItem.monitorPointOptions;
if (queryItem.device) {
queryItem.mac = queryItem.device.mac;
queryItem.deviceName = queryItem.device.name;
delete queryItem.device;
}
- queryItem.deviceCount = queryItem.deviceOptions.length;
+ if (queryItem.deviceOptions && queryItem.deviceOptions.length > 0) {
+ queryItem.deviceCount = queryItem.deviceOptions.length;
+ }
delete queryItem.deviceOptions;
queryItem.formatTime = this.dateSrv.date_format(queryItem.time, this.timeType.format);
delete queryItem.time;
@@ -131,14 +238,21 @@
}
}
if (validate && this.timeType && query.reportType) {
- if (query.sensorKey && query.sensorKey.length > 0) {
- query.sensors = JSON.stringify(query.sensorKey);
+ if (this._sensors) {
+ const sensors = [];
+ for (var key in this._sensors) {
+ sensors.push(this._sensors[key]);
+ }
+ if (sensors.length > 0) {
+ query.sensors = JSON.stringify(sensors);
+ }
}
query.items = JSON.stringify(queryItems);
query.type = this.timeType.value;
- this.router.navigate(['report'], {queryParams: query});
+ sessionStorage.setItem("queryParams", JSON.stringify(query));
} else {
this.msgSrv.error('���������������������������������������');
+ return false;
}
}
}
diff --git a/src/app/routes/reports/excel/excel.component.html b/src/app/routes/reports/excel/excel.component.html
index 6ba33e1..4c8d63d 100644
--- a/src/app/routes/reports/excel/excel.component.html
+++ b/src/app/routes/reports/excel/excel.component.html
@@ -5,23 +5,43 @@
<div nz-col [nzSpan]="6" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label> ������</label>
+ <label>������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-select [(ngModel)]="query.sensorKey" name="sensorKey" [nzSize]="'large'" [nzPlaceHolder]="'���������'" [nzMode]="'multiple'">
- <nz-option *ngFor="let option of sensorOptions" [nzLabel]="option.name" [nzValue]="option.sensorKey + '-' + option.name + '-' + option.unit" ></nz-option>
- </nz-select>
+ <nz-popover [nzPlacement]="'bottomLeft'" [nzTrigger]="'hover'">
+ <nz-input [nzType]="'input'" nz-popover [ngModel]="sensorNames" name="sensorKeys" [nzReadonly]="true" [nzPlaceHolder]="'��������� ������'">
+ <ng-template #suffix>
+ <i class="anticon anticon-down ant-cascader-picker-arrow "></i>
+ </ng-template>
+ </nz-input>
+ <ng-template #nzTemplate>
+ <div [ngStyle]="{'width': '240px', 'height': '240px', 'overflow-y' :'auto'}">
+ <nz-tree [nzNodes]="sensorOptions" (nzActivate)="onTreeClickSelect($event)" (nzDeactivate)="onTreeClickSelect($event)" [nzCheckable]="true" (nzCheck)="onSensorSelect($event)"></nz-tree>
+ </div>
+ </ng-template>
+ </nz-popover>
</div>
</div>
</div>
<div nz-col [nzSpan]="6" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label nz-form-item-required>���������</label>
+ <label nz-form-item-required>���������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-select [(ngModel)]="query.monitorPointId" name="monitorPoint" nzAllowClear [nzPlaceHolder]="'���������'" [nzFilter]="false" [nzSize]="'large'"
- (nzSearchChange)="searchChange($event)" [nzNotFoundContent]="'������������'" (ngModelChange)="monitorPointChange($event)" nzShowSearch>
+ <nz-cascader (nzLoad)="areaLazyLoad($event)" [nzPlaceHolder]="'��������� ���/���/���'" [nzAllowClear]="false" [nzChangeOnSelect]="true" (nzSelect)="regionChange($event)">
+ </nz-cascader>
+ </div>
+ </div>
+ </div>
+ <div nz-col [nzSpan]="6" class="mb-md">
+ <div nz-form-item class="d-flex">
+ <div nz-form-label>
+ <label>���������</label>
+ </div>
+ <div nz-form-control class="flex-1">
+ <nz-select [(ngModel)]="query.monitorPointId" name="monitorPoint" [nzPlaceHolder]="'��������� ���������'" [nzSize]="'large'"
+ [nzNotFoundContent]="'������������'" (ngModelChange)="monitorPointChange($event)" nzShowSearch nzAllowClear>
<nz-option *ngFor="let option of monitorPointOptions" [nzLabel]="option['name']" [nzValue]="option['id']"> </nz-option>
</nz-select>
</div>
@@ -33,7 +53,7 @@
<label>������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-select [(ngModel)]="query.mac" name="mac" [nzSize]="'large'" nzAllowClear [nzPlaceHolder]="'���������'" >
+ <nz-select [(ngModel)]="query.mac" name="mac" [nzSize]="'large'" [nzPlaceHolder]="'��������� ������'" [nzNotFoundContent]="'������������'" nzShowSearch nzAllowClear>
<nz-option *ngFor="let option of deviceOptions" [nzLabel]="option.name" [nzValue]="option.mac" ></nz-option>
</nz-select>
</div>
@@ -45,7 +65,7 @@
<div nz-col [nzSpan]="6" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label nz-form-item-required>������</label>
+ <label>������</label>
</div>
<div nz-form-control class="flex-1">
<nz-select [(ngModel)]="timeType" name="timeType" [nzSize]="'large'" [nzPlaceHolder]="'���������'">
@@ -60,7 +80,7 @@
<label nz-form-item-required>���������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-datepicker style="width: 100%;" [(ngModel)]="query.time" name="time" [nzPlaceHolder]="'���������'" [nzSize]="'large'" [nzFormat]="timeType.format"
+ <nz-datepicker style="width: 100%;" [(ngModel)]="query.time" name="time" [nzPlaceHolder]="'��������� ������'" [nzSize]="'large'" [nzFormat]="timeType.format"
[nzMode]="timeType.value=='hour'||timeType.value=='day'?'day':'month'" [nzShowTime]="timeType.value=='hour'?true:false"></nz-datepicker>
</div>
</div>
@@ -68,10 +88,10 @@
<div nz-col [nzSpan]="6" class="mb-md">
<div nz-form-item class="d-flex">
<div nz-form-label>
- <label > ���</label>
+ <label >���������</label>
</div>
<div nz-form-control class="flex-1">
- <nz-datepicker style="width: 100%;" [(ngModel)]="query.timeb" name="timeb" [nzPlaceHolder]="'���������'" [nzSize]="'large'" [nzFormat]="timeType.format"
+ <nz-datepicker style="width: 100%;" [(ngModel)]="query.timeb" name="timeb" [nzPlaceHolder]="'��������� ������'" [nzSize]="'large'" [nzFormat]="timeType.format"
[nzMode]="timeType.value=='hour'||timeType.value=='day'?'day':'month'" [nzShowTime]="timeType.value=='hour'?true:false"></nz-datepicker>
</div>
</div>
diff --git a/src/app/routes/reports/excel/excel.component.ts b/src/app/routes/reports/excel/excel.component.ts
index a6fce42..5d882ba 100644
--- a/src/app/routes/reports/excel/excel.component.ts
+++ b/src/app/routes/reports/excel/excel.component.ts
@@ -4,6 +4,10 @@
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',
@@ -23,10 +27,18 @@
{value: 'hour', label: '���', format: 'YYYY-MM-DD HH'}
];
+ 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];
@@ -39,24 +51,106 @@
if (res.code === 0) {
this.msgSrv.error(res.message);
} else {
- this.sensorOptions = res.data;
+ this.sensorOptions.push({id: -1, name: '������', isExpanded: true, children: res.data});
}
});
}
- searchChange(searchText) {
- if (searchText) {
- const query = encodeURI(searchText);
- if (query) {
- this.http.get(environment.SERVER_BASH_URL + '/monitor-point/list/' + query).subscribe((res: any) => {
- if (res.code === 0) {
- this.msgSrv.error(res.message);
- } else {
- this.monitorPointOptions = 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;
+ this.query.mac = 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;
+ }
+ });
}
monitorPointChange(value) {
@@ -75,15 +169,22 @@
reportQuery() {
const query = this.query;
- if (this.timeType && query.monitorPointId && query.time) {
+ 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);
}
- if (query.sensorKey && query.sensorKey.length > 0) {
- query.sensors = JSON.stringify(query.sensorKey);
- }
query.type = this.timeType.value;
+ if (this._sensors) {
+ const sensors = [];
+ for (var 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]) {
@@ -92,7 +193,7 @@
}
window.location.href = url + '_token=' + this.tokenService.get().token;
} else {
- this.msgSrv.error('������������������');
+ this.msgSrv.error('������������������������������������������������������������');
}
}
}
diff --git a/src/app/routes/systems/organization/organization-list/organization-list.component.html b/src/app/routes/systems/organization/organization-list/organization-list.component.html
index 033bdb6..e1ed4eb 100644
--- a/src/app/routes/systems/organization/organization-list/organization-list.component.html
+++ b/src/app/routes/systems/organization/organization-list/organization-list.component.html
@@ -58,6 +58,8 @@
<nz-popconfirm [nzTitle]="'������������������'+grid.title+'���?'" [nzOkText]="'Yes'" [nzCancelText]="'No'" (nzOnConfirm)="delete(row.id)" >
<a nz-popconfirm>������</a>
</nz-popconfirm>
+ <span nz-table-divider></span>
+ <a [routerLink]="['/systems/registration']" (click)="registration(row)">���������</a>
</td>
</tr>
</tbody>
diff --git a/src/app/routes/systems/organization/organization-list/organization-list.component.ts b/src/app/routes/systems/organization/organization-list/organization-list.component.ts
index abe84f8..b1f794a 100644
--- a/src/app/routes/systems/organization/organization-list/organization-list.component.ts
+++ b/src/app/routes/systems/organization/organization-list/organization-list.component.ts
@@ -227,4 +227,8 @@
this.organizationService.title = '������������';
});
}
+
+ registration(row){
+ sessionStorage.setItem("organization", JSON.stringify(row));
+ }
}
diff --git a/src/app/routes/systems/registration/registration.component.html b/src/app/routes/systems/registration/registration.component.html
new file mode 100644
index 0000000..b9ac9c9
--- /dev/null
+++ b/src/app/routes/systems/registration/registration.component.html
@@ -0,0 +1,27 @@
+<div class="content__title">
+ <h1>���������������({{organization.name}})</h1>
+</div>
+<nz-card [nzBordered]="false">
+ <div class="mb-md">
+ <button nz-button [nzType]="'primary'" [nzSize]="'large'" (click)="isVisible=true">
+ <i class="anticon anticon-plus"></i><span>������</span>
+ </button>
+ </div>
+ <simple-table #simpleTable [data]="dataUrl" [extraParams]="extraParams" [columns]="columns" [showTotal]="true" [ps]="10" [reqReName]="{pi: 'pageIndex',ps: 'pageSize'}" [resReName]="{list: 'data',total: 'total'}">
+ </simple-table>
+</nz-card>
+
+<nz-modal [nzVisible]="isVisible" [nzTitle]="'���������������'" [nzContent]="modalContent" (nzOnCancel)="isVisible=false" (nzOnOk)="registrationOk()">
+ <ng-template #modalContent>
+ <form nz-form >
+ <div nz-form-item nz-row>
+ <div nz-form-label nz-col [nzSm]="6" [nzXs]="24">
+ <label nz-form-item-required>������������</label>
+ </div>
+ <div nz-col [nzSm]="14" [nzXs]="24">
+ <nz-datepicker style="width: 100%;" [(ngModel)]="_date" name='_date' [nzFormat]="'YYYY-MM-DD'" [nzDisabledDate]="_disabledDate" [nzAllowClear]="false"></nz-datepicker>
+ </div>
+ </div>
+ </form>
+ </ng-template>
+</nz-modal>
diff --git a/src/app/routes/systems/registration/registration.component.ts b/src/app/routes/systems/registration/registration.component.ts
new file mode 100644
index 0000000..7a00abc
--- /dev/null
+++ b/src/app/routes/systems/registration/registration.component.ts
@@ -0,0 +1,72 @@
+import {environment} from "../../../../environments/environment";
+import {Component, OnInit, ViewChild} from '@angular/core';
+import {SimpleTableColumn} from "@delon/abc";
+import {_HttpClient} from '@delon/theme';
+import {Subject} from "rxjs";
+import * as moment from 'moment';
+import {NzMessageService} from "ng-zorro-antd";
+@Component({
+ selector: 'app-registration',
+ templateUrl: './registration.component.html',
+})
+export class RegistrationComponent implements OnInit {
+ constructor(
+ public msgSrv: NzMessageService,
+ private http: _HttpClient
+ ) {}
+
+ @ViewChild('simpleTable') simpleTable: {load: Function};
+
+ dataUrl = environment.SERVER_BASH_URL + 'machineactivate/list';
+
+ queryTextStream: Subject<string> = new Subject<string>();
+
+ extraParams: any = {};
+ organization: any = {};
+ columns: SimpleTableColumn[] = [
+ {title: '���������', index: 'activationCode'},
+ {
+ title: '������������', index: 'isUsed', format: function(machineActivate) {
+ return machineActivate.isUsed == 1 ? '���' : '���';
+ }
+ },
+ {
+ title: '������������', type: 'date', index: 'createTime', format: function(machineActivate) {
+ return moment(machineActivate.createTime).format('YYYY-MM-DD HH:mm:ss');
+ }
+ },
+ {
+ title: '������������', type: 'date', index: 'expireDate', format: function(machineActivate) {
+ return moment(machineActivate.expireDate).format('YYYY-MM-DD');
+ }
+ },
+ ];
+ isVisible: boolean = false;
+ _date = new Date(Date.now() + 3600 * 24 * 1 * 1000);
+
+ ngOnInit() {
+ const organization = this.organization = JSON.parse(sessionStorage.getItem("organization"));
+ this.extraParams.organizationId = organization.id;
+ this.queryTextStream.debounceTime(900).distinctUntilChanged().subscribe(value => {
+ this.load();
+ });
+ }
+
+ load() {
+ this.simpleTable.load();
+ }
+
+ _disabledDate(current: Date): boolean {
+ return current && current.getTime() < Date.now();
+ }
+
+ registrationOk() {
+ this.http.get(environment.SERVER_BASH_URL + '/machineactivate/machine', {organizationId: this.organization.id, expireDate: moment(this._date).format('YYYY-MM-DD')}).subscribe((res: any) => {
+ if (res.code == 1 && res.data == 1) {
+ this.isVisible = false;
+ this.msgSrv.success('������������������������');
+ this.load();
+ }
+ });
+ }
+}
diff --git a/src/app/routes/systems/systems.module.ts b/src/app/routes/systems/systems.module.ts
index d1f3d49..37edebf 100644
--- a/src/app/routes/systems/systems.module.ts
+++ b/src/app/routes/systems/systems.module.ts
@@ -15,6 +15,7 @@
import { AreacodeService } from '@business/services/http/areacode.service';
import { OrganizationConfigComponent } from './organization/organization-config/organization-config.component';
import { OrganizationListComponent } from './organization/organization-list/organization-list.component';
+import { RegistrationComponent } from "./registration/registration.component";
import { SensorsService } from '@business/services/http/sensors.service';
import { BusinessModule } from '@business/business.module';
@@ -23,7 +24,8 @@
path: '',
children: [
{ path: 'account', component: AccountComponent },
- { path: 'organization', component: OrganizationComponent }
+ { path: 'organization', component: OrganizationComponent },
+ { path: 'registration', component: RegistrationComponent }
]
}
];
@@ -45,7 +47,8 @@
AccountEditComponent,
OrganizationComponent,
OrganizationConfigComponent,
- OrganizationListComponent
+ OrganizationListComponent,
+ RegistrationComponent
],
providers: [ToolsService, SensorsService, OrganizationService, _HttpClient, FormBuilder, AreacodeService],
entryComponents: COMPONENTS_NOROUNT
diff --git a/src/assets/app-data.json b/src/assets/app-data.json
index 9877414..1e7d1a2 100644
--- a/src/assets/app-data.json
+++ b/src/assets/app-data.json
@@ -79,7 +79,12 @@
{
"text": "������������",
"link": "/systems/organization"
- }
+ },
+ {
+ "text": "���������������",
+ "link": "/systems/registration",
+ "hide": true
+ }
]
}
]
--
Gitblit v1.8.0