e2750980d182c135384dd3b691b2d28e297b7145..a2bd66a59a51c84100474d1ce3eb79d7ed3b754e
2018-07-31 fengxiang
Merge branch 'master' of http://blit.7drlb.com:8888/r/screen_demo2
a2bd66 diff | tree
2018-07-31 fengxiang
日历完善,设备相关功能开发
eef69f diff | tree
2 files added
12 files modified
469 ■■■■■ changed files
src/app/routes/devices/basic-info/device-edit/device-edit.component.html 5 ●●●●● patch | view | raw | blame | history
src/app/routes/devices/basic-info/device-edit/device-edit.component.ts 6 ●●●●● patch | view | raw | blame | history
src/app/routes/enterprise-management/enterprise-data/enterprise-data.component.ts 2 ●●●●● patch | view | raw | blame | history
src/app/routes/home-page/home-page/home-page.component.html 2 ●●● patch | view | raw | blame | history
src/app/routes/home-page/home-page/home-page.component.ts 2 ●●●●● patch | view | raw | blame | history
src/app/routes/operation/device-status/device-status.component.html 169 ●●●●● patch | view | raw | blame | history
src/app/routes/reports/query2/query2.component.ts 1 ●●●● patch | view | raw | blame | history
src/app/routes/statistics/calendar/aqi-detail/aqi-detail.component.html 85 ●●●●● patch | view | raw | blame | history
src/app/routes/statistics/calendar/aqi-detail/aqi-detail.component.ts 21 ●●●●● patch | view | raw | blame | history
src/app/routes/statistics/calendar/calendar.component.html 76 ●●●● patch | view | raw | blame | history
src/app/routes/statistics/calendar/calendar.component.ts 90 ●●●●● patch | view | raw | blame | history
src/app/routes/statistics/statistics.module.ts 7 ●●●● patch | view | raw | blame | history
src/app/routes/systems/organization/organization-config/organization-config.component.ts 1 ●●●● patch | view | raw | blame | history
src/app/routes/systems/organization/organization-list/organization-list.component.ts 2 ●●●●● patch | view | raw | blame | history
src/app/routes/devices/basic-info/device-edit/device-edit.component.html
@@ -110,13 +110,14 @@
            组织:                  
          </span>
          <nz-select style="width: 240px;" [(ngModel)]="configMap.orgId" (ngModelChange)="setOrgId($event)" [nzPlaceHolder]="'选择 组织(输入名称搜索)'"
            nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'无法找到'" >
            nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'无法找到'"
            [nzDisabled]="!isEditState">
            <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
            </nz-option>
          </nz-select>
          &nbsp;
        <button nz-button type="button" (click)="close()">关闭</button>
        <button nz-button [nzType]="'primary'" (click)="save(null,validateForm.value,validateForm.valid)" [nzLoading]="isSaving">
        <button nz-button *ngIf="isEditState" [nzType]="'primary'" (click)="save(null,validateForm.value,validateForm.valid)" [nzLoading]="isSaving">
          <span>
            保存
            <span *ngIf="isSaving">中</span>
src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
@@ -13,6 +13,7 @@
import { ExampleService } from '@business/services/util/example.service';
import { Observable } from 'rxjs/Observable';
import { OrganizationService } from '@business/services/http/organization.service';
import { debug } from 'util';
@Component({
  selector: 'app-device-edit',
@@ -20,6 +21,7 @@
  styles: []
})
export class DeviceEditComponent implements OnInit {
  public isEditState = true;
  public monitorPoints: any [] = [];
  public professions: any [] = [];
  public deviceVersions: any [] = [];
@@ -80,6 +82,10 @@
    this.validateForm = this.formBuilder.group(
      validates
    );
    if(!this.isEditState){
        this.validateForm.disable();
    }
    this.validateForm
    this.orgSelectChange();
    const control = this.validateForm.controls['monitorPointId'];
    control.valueChanges.subscribe(value => {
src/app/routes/enterprise-management/enterprise-data/enterprise-data.component.ts
@@ -206,7 +206,6 @@
            // 监测项目 tree click 事件
            this.treeClickStream.debounceTime(1).subscribe( event => {
                const data = event.node.data;  
                // console.log(data);
                if (data.id === -1) {
                    const children = data.children;
                    // 全选状态
@@ -582,7 +581,6 @@
          this.reloadChartTitle();
          // 清空数据
          this.grid.data = [];
          console.log(lineChartCriteria);
          this.http.post('/report/line-chart', lineChartCriteria).subscribe(
            (res: ResultBean<{[key: string]: Array<Array<number>>}>) => {
               if (res.code === 1) {
src/app/routes/home-page/home-page/home-page.component.html
@@ -173,7 +173,7 @@
                            </th>
                            <th nz-th class="text-right">
                                <span>数值({{selectedApiSortedItem.unit}})</span>
                                <nz-table-sort (nzValueChange)="aqiSortedTableSort('sum',$event)"></nz-table-sort>
                                <nz-table-sort (nzValueChange)="aqiSortedTableSort('avg',$event)"></nz-table-sort>
                            </th>
                        </tr>
                    </thead>
src/app/routes/home-page/home-page/home-page.component.ts
@@ -163,7 +163,6 @@
                        this.aqiData = aqiData;
                        this.aqiDataLoading = false;
                    }
                    console.log(this.aqiData);
                }
            );
    }
@@ -396,7 +395,6 @@
                        // windDirData = windDirData.length >  2 ? windDirData.substr(1) : windDirData;
                        if(index == 0 ) {
                            const windDirName = this.winToChName(windDirData);
                            console.log(windDirName);
                            windDirsData.push(
                                {
                                    value: windDirName,
src/app/routes/operation/device-status/device-status.component.html
@@ -1,72 +1,109 @@
<div class="content__title">
        <h1>
            设备状态
            <small>设备状态显示:正常,离线</small>
        </h1>
    <h1>
        设备状态
        <small>设备状态显示:正常,离线</small>
    </h1>
</div>
<nz-card [nzBordered]="false">
    <nz-spin [nzSpinning]="false">
        <nz-row nzGutter="8">
            <div nz-col nzXs="24" nzSm="12" nzMd="8" class="mb-md">
                <div nz-row nzType="flex" nzAlign="middle" class="bg-primary rounded-md">
                    <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                        <div style="height: 40px;" class="h2 mt0">
                            2598
                        </div>
                        <p class="text-nowrap mb0">设备总数</p>
                    </div>
                </div>
            </div>
            <div nz-col nzXs="24" nzSm="12" nzMd="8" class="mb-md">
                <div nz-row nzType="flex" nzAlign="middle" class="bg-success rounded-md">
                    <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                        <div style="height: 40px;" class="h2 mt0">
                            2510
                        </div>
                        <p class="text-nowrap mb0">在线设备</p>
                    </div>
                </div>
            </div>
            <div nz-col nzXs="24" nzSm="12" nzMd="8" class="mb-md">
                <div nz-row nzType="flex" nzAlign="middle" class="bg-orange rounded-md">
                    <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                        <div style="height: 40px;" class="h2 mt0">
                            88
                        </div>
                        <p class="text-nowrap mb0">离线设备</p>
                    </div>
                </div>
            </div>
        </nz-row>
    </nz-spin>
</nz-card>
<nz-card [nzBordered]="false">
    <div nz-row class="mb-sm">
        <div nz-col [nzSpan]="4">
            <button nz-button (click)="addOrModify($event)" [nzType]="'primary'" [nzSize]="'large'">
                <i class="anticon anticon-plus"></i>
                <span>新建</span>
            </button>
            <ng-container *ngIf="selectedRows.length > 0">
                <button nz-button [nzSize]="'large'" (click)="deleteSelected()">批量删除</button>
            </ng-container>
        </div>
        <div nz-col [nzSpan]="7">
            <span style="padding: 5px 10px;">
                组织:
            </span>
            <nz-select style="width: 79%;" [(ngModel)]="queryMap.orgId" (ngModelChange)="setOrgId($event)" [nzPlaceHolder]="'选择 组织(输入名称搜索)'"
                nzAllowClear [nzFilter]="false" nzShowSearch (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'无法找到'">
                <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
                </nz-option>
            </nz-select>
        </div>
        <div nz-col [nzSpan]="7">
            <span style="padding: 5px 10px;">
                监控站:
            </span>
            <nz-select style="width: 75%;" [(ngModel)]="queryMap.mpointId" (ngModelChange)="setMpointId($event)" [nzPlaceHolder]="'选择 监控站名称(输入名称搜索)'"
                nzAllowClear [nzFilter]="false" nzShowSearch (nzSearchChange)="monitorPointChange($event)" [nzNotFoundContent]="'无法找到'">
                <nz-option *ngFor="let option of monitorPoints" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
                </nz-option>
            </nz-select>
        </div>
        <div nz-col [nzSpan]="6">
            <nz-input [ngStyle]="{'width': '240px','float':'right'}" [(ngModel)]="queryText" name="" [nzPlaceHolder]="'请输入设备名称或设备mac'"
                (keyup)="queryTextChanged($event)" (change)="queryTextChanged($event)"></nz-input>
        </div>
    </div>
    <nz-card [nzBordered]="false">
        <div nz-row class="mb-sm">
            <div  nz-col [nzSpan]="4">
                    <button nz-button (click)="addOrModify($event)" [nzType]="'primary'" [nzSize]="'large'">
                        <i class="anticon anticon-plus"></i><span>新建</span>
                    </button>
                    <ng-container *ngIf="selectedRows.length > 0">
                    <button nz-button [nzSize]="'large'" (click)="deleteSelected()">批量删除</button>
                    </ng-container>
            </div>
            <div  nz-col [nzSpan]="7">
                  <span style="padding: 5px 10px;">
                    组织:
                  </span>
                  <nz-select style="width: 79%;" [(ngModel)]="queryMap.orgId" (ngModelChange)="setOrgId($event)" [nzPlaceHolder]="'选择 组织(输入名称搜索)'"
                    nzAllowClear [nzFilter]="false" nzShowSearch  (nzSearchChange)="orgSelectChange($event)" [nzNotFoundContent]="'无法找到'" >
                    <nz-option *ngFor="let option of orgOptions" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
                    </nz-option>
                  </nz-select>
            </div>
            <div  nz-col [nzSpan]="7">
                    <span style="padding: 5px 10px;">
                            监控站:
                          </span>
                          <nz-select style="width: 75%;" [(ngModel)]="queryMap.mpointId" (ngModelChange)="setMpointId($event)" [nzPlaceHolder]="'选择 监控站名称(输入名称搜索)'"
                          nzAllowClear [nzFilter]="false" nzShowSearch (nzSearchChange)="monitorPointChange($event)" [nzNotFoundContent]="'无法找到'" >
                            <nz-option *ngFor="let option of monitorPoints" [nzLabel]="option.name" [nzValue]="option.id" [nzDisabled]="option.disabled">
                            </nz-option>
                          </nz-select>
            </div>
            <div  nz-col [nzSpan]="6">
                    <nz-input [ngStyle]="{'width': '240px','float':'right'}" [(ngModel)]="queryText" name=""  [nzPlaceHolder]="'请输入设备名称或设备mac'"
                    (keyup)="queryTextChanged($event)" (change)="queryTextChanged($event)" ></nz-input>
            </div>
        </div>
        <div class="mb-md">
                <nz-alert *ngIf="selectedRows.length > 0" [nzType]="'info'" [nzShowIcon]="true">
                    <span alert-body>
                        已选择<strong class="text-primary">{{selectedRows.length}}</strong>项
                    </span>
                </nz-alert>
        </div>
    <simple-table #simpleTable  [data]="listUrl" [extraParams]="extraParams"  [columns]="columns" [showTotal]="true"
    [reqReName]="{pi: 'pageIndex',ps: 'pageSize'}"  (checkboxChange)="checkboxChange($event)" [ps]="10" [resReName]="{list: 'data',total: 'total'}">
    <ng-template st-row="state-badge" let-item let-index="index">
    <div class="mb-md">
        <nz-alert *ngIf="selectedRows.length > 0" [nzType]="'info'" [nzShowIcon]="true">
            <span alert-body>
                已选择
                <strong class="text-primary">{{selectedRows.length}}</strong>项
            </span>
        </nz-alert>
    </div>
    <simple-table #simpleTable [data]="listUrl" [extraParams]="extraParams" [columns]="columns" [showTotal]="true" [reqReName]="{pi: 'pageIndex',ps: 'pageSize'}"
        (checkboxChange)="checkboxChange($event)" [ps]="10" [resReName]="{list: 'data',total: 'total'}">
        <ng-template st-row="state-badge" let-item let-index="index">
            <ng-container [ngSwitch]="item.state">
                    <span *ngSwitchCase="'0'">
                         <nz-badge [nzStatus]="'success'" [nzText]="'正常'"></nz-badge>
                    </span>
                    <span *ngSwitchCase="'1'">
                         <nz-badge [nzStatus]="'processing'" [nzText]="'轻度'"></nz-badge>
                    </span>
                    <span *ngSwitchCase="'2'">
                            <nz-badge [nzStatus]="'warning'" [nzText]="'中度'"></nz-badge>
                    </span>
                    <span *ngSwitchCase="'3'">
                            <nz-badge [nzStatus]="'error'" [nzText]="'严重'"></nz-badge>
                    </span>
                    <span *ngSwitchDefault>
                            <nz-badge [nzStatus]="'default'" [nzText]="'离线'"></nz-badge>
                    </span>
                <span *ngSwitchCase="'0'">
                    <nz-badge [nzStatus]="'success'" [nzText]="'正常'"></nz-badge>
                </span>
                <span *ngSwitchCase="'1'">
                    <nz-badge [nzStatus]="'processing'" [nzText]="'轻度'"></nz-badge>
                </span>
                <span *ngSwitchCase="'2'">
                    <nz-badge [nzStatus]="'warning'" [nzText]="'中度'"></nz-badge>
                </span>
                <span *ngSwitchCase="'3'">
                    <nz-badge [nzStatus]="'error'" [nzText]="'严重'"></nz-badge>
                </span>
                <span *ngSwitchDefault>
                    <nz-badge [nzStatus]="'default'" [nzText]="'离线'"></nz-badge>
                </span>
            </ng-container>
        </ng-template>
    </simple-table>
    </nz-card>
</nz-card>
src/app/routes/reports/query2/query2.component.ts
@@ -262,7 +262,6 @@
        // 监测项目 tree click 事件
        this.treeClickStream.debounceTime(1).subscribe( event => {
            const data = event.node.data;
            // console.log(data);
            if (data.id === -1) {
                const children = data.children;
                // 全选状态
src/app/routes/statistics/calendar/aqi-detail/aqi-detail.component.html
New file
@@ -0,0 +1,85 @@
<div class="modal-header">
    <div class="modal-title">{{formatDate}}&nbsp;&nbsp;污染数据</div>
</div>
<nz-row nzGutter="8">
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-primary rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.quality }}
                    </div>
                    <p class="text-nowrap mb0">空气质量</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-success rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.CO }}&nbsp;<small>ug/m3</small>
                    </div>
                    <p class="text-nowrap mb0">一氧化碳</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-orange rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.O3 }}&nbsp;<small>mg/m3</small>
                    </div>
                    <p class="text-nowrap mb0">臭氧</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-pink rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.NO2 }}&nbsp;<small>mg/m3</small>
                    </div>
                    <p class="text-nowrap">二氧化氮</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-primary rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.AQI }}
                    </div>
                    <p class="text-nowrap mb0">AQI</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-success rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.SO2 }}&nbsp;<small>mg/m3</small>
                    </div>
                    <p class="text-nowrap mb0">二氧化硫</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-orange rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.PM10 }}&nbsp;<small>mg/m3</small>
                    </div>
                    <p class="text-nowrap mb0">PM10</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-pink rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">
                        {{ dayData.data.PM2_5 }}&nbsp;<small>mg/m3</small>
                    </div>
                    <p class="text-nowrap">PM2.5</p>
                </div>
            </div>
        </div>
</nz-row>
src/app/routes/statistics/calendar/aqi-detail/aqi-detail.component.ts
New file
@@ -0,0 +1,21 @@
import { Component, OnInit } from '@angular/core';
import { _HttpClient } from '@delon/theme';
import { Moment } from 'moment';
@Component({
  selector: 'app-aqi-detail',
  templateUrl: './aqi-detail.component.html',
})
export class AqiDetailComponent implements OnInit {
    public dayData;
    public selectedMoment:Moment;
    constructor(
        private http: _HttpClient
    ) { }
    public get formatDate(): string {
        return this.selectedMoment.format('YYYY-MM-DD');
    }
    ngOnInit() {
    }
}
src/app/routes/statistics/calendar/calendar.component.html
@@ -1,11 +1,17 @@
<div class="content__title">
    <h1>
        污染日志
        <small>包含历史污染数据</small>
    </h1>
</div>
<div nz-row [nzGutter]="24" style="padding: 20px">
    <div nz-col nzXs="24"   nzMd="24">
        <div nz-form-control nz-col [nzSm]="20">
            <nz-card [nzBordered]="false">
                <nz-calendar [nzLocale]="'zh-cn'" >
                    <ng-template #dateCell let-day>
                        <div *ngIf="!isExpire(day.date)" style="width: 80px;height: 80px;display: block;position: absolute;" (click)="calendarClick(day.date)">
                        <div *ngIf="!isExpire(day.date) && isCellExist(day.date)" style="width: 80px;height: 80px;display: block;position: absolute;" (click)="calendarClick(day.date)">
                                <nz-badge [nzStatus]="calendarDayCells[day.date|date:'dd']['status']" [nzText]="calendarDayCells[day.date|date:'dd']['statusName']" ></nz-badge>
                                <!-- <nz-badge [nzStatus]="'success'" [nzText]="'Sunday'" *ngIf="(day.date|date:'EEE')==='Sun'"></nz-badge>
                                {{day.date|date:'EEE'}}
@@ -16,72 +22,6 @@
                </nz-calendar>
            </nz-card>
        </div>
    </div>
    <div nz-col nzXs="24" nzSm="12" nzMd="24" nzLg="15">
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-primary rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">100</div>
                    <p class="text-nowrap mb0">AQI</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-success rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">30 ℃</div>
                    <p class="text-nowrap mb0">温度</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-orange rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">2.5</div>
                    <p class="text-nowrap mb0">风向</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-pink rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">78 mg/m³</div>
                    <p class="text-nowrap">PM2.5</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-primary rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">100</div>
                    <p class="text-nowrap mb0">AQI</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-success rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">30 ℃</div>
                    <p class="text-nowrap mb0">温度</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-orange rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">2.5</div>
                    <p class="text-nowrap mb0">风向</p>
                </div>
            </div>
        </div>
        <div nz-col nzXs="24" nzSm="12" nzMd="6" class="mb-md">
            <div nz-row nzType="flex" nzAlign="middle" class="bg-pink rounded-md">
                <div nz-col nzSpan="24" class="p-md text-white" style="height: 90px;text-align: center;">
                    <div style="height: 40px;" class="h2 mt0">78 mg/m³</div>
                    <p class="text-nowrap">PM2.5</p>
                </div>
            </div>
        </div>
    </div>
    </div>
</div>
src/app/routes/statistics/calendar/calendar.component.ts
@@ -1,9 +1,11 @@
import { Component, OnInit, OnDestroy } from '@angular/core';
import { NzMessageService } from 'ng-zorro-antd';
import { _HttpClient } from '@delon/theme';
import { _HttpClient, ModalHelper } from '@delon/theme';
import { HttpClient } from '@angular/common/http';
import * as moment from 'moment';
import { DeviceService } from '@business/services/http/device.service';
import { TimeUnits } from '@business/enum/types.enum';
import { AqiDetailComponent } from './aqi-detail/aqi-detail.component';
@Component({
    selector: 'statistics-calender',
@@ -25,6 +27,7 @@
        private deviceService: DeviceService,
        private http: _HttpClient,
        public msg: NzMessageService,
        private modalHelper: ModalHelper,
        private http2: HttpClient) {
    }
@@ -37,22 +40,93 @@
                data: {}
            }
        }
        // console.log(this.calendarDayCells);
        const startTime = this.getPeriodDate(new Date(),TimeUnits.DAY,'start');
        const endTime = this.getPeriodDate(new Date(),TimeUnits.HOUR,'end');
        this.http.get(
            'demo/get-dayaqis',{
                startTime: startTime,
                endTime: endTime
            }
        ).subscribe(
            (res: any[]) => {
                if(!!res && res.length >0) {
                    Object.keys(this.calendarDayCells).forEach(
                        (key) => {
                            const index = Number(key) -1;
                            if(res.length > index){
                             const data = res[index];
                                 if(!!data) {
                                    const aqiJson = JSON.parse(data.aqi_json);
                                    const cell = this.calendarDayCells[key];
                                    cell.data = aqiJson;
                                    cell.statusName = aqiJson.quality;
                                    switch(aqiJson.quality) {
                                        case '优' : cell.status = 'success';break;
                                        case '良' : cell.status = 'success';break;
                                        case '轻度污染' : cell.status = 'warning';break;
                                        case '中度污染' : cell.status = 'warning';break;
                                        case '重度污染' : cell.status = 'error';break;
                                        default: cell.status = 'success';break;
                                    }
                                 }
                            }
                        }
                    );
                }
            }
        );
    }
    private getPeriodDate(value: Date , timeUnit: TimeUnits,type?: 'start'|'end' ): Date {
        let month = 0;
        let day = 1;
        let hour = 0;
        let minute = 0;
        let second = 0;
        let millisecond = 0;
        if ('end' === type) {
            month = 11;
            day = 31;
            hour = 23;
            minute = 59;
            second = 59;
            millisecond = 999;
        }
        const mo = moment(value);
        switch ( timeUnit ) {
            case TimeUnits.MONTH:
            mo.month(month).date(day).hour(hour).minute(minute).second(second).millisecond(millisecond); break;
            case TimeUnits.DAY:
            mo.date(day).hour(hour).minute(minute).second(second).millisecond(millisecond); break;
            case TimeUnits.HOUR:
            mo.hour(hour).minute(minute).second(second).millisecond(millisecond); break;
            case TimeUnits.MINUTE:
            mo.minute(minute).second(second).millisecond(millisecond); break;
            // case TimeUnits.MINUTE:
            // mo.second(second).millisecond(millisecond); break;
        }
        return mo.toDate();
    }
    ngOnDestroy(): void {
    }
    // 日历单元格 被点击
    calendarClick(mo: moment.Moment) {
        console.log(mo.format('DD'));
        // console.log(mo.format('DD'));
        const dayKey = mo.format('DD');
        const selectedMoment = mo;
        const dayData = this.calendarDayCells[dayKey];
        if( !!dayData ) {
            this.modalHelper.open( AqiDetailComponent, { dayData,selectedMoment }).subscribe(
                res => {}
            );
        }
    }
    public isExpire(mo: moment.Moment):boolean {
        //  console.log(moment().valueOf());
        //  console.log(mo.valueOf());
        //  console.log(moment().valueOf() < mo.valueOf());
         return moment().valueOf() < mo.valueOf();
    }
    public isCellExist(mo: moment.Moment):boolean {
         return !!this.calendarDayCells[mo.format('DD')];
    }
    loadCalendar(event) {
        console.log(event);
        // console.log(event);
    }
}
src/app/routes/statistics/statistics.module.ts
@@ -9,6 +9,7 @@
import { CalendarComponent } from './calendar/calendar.component';
import { MonitorpointComponent } from './monitorpoint/monitorpoint.component';
import { NzCalendarModule } from 'ng-zorro-antd';
import { AqiDetailComponent } from './calendar/aqi-detail/aqi-detail.component';
const routes: Routes = [
  {
@@ -21,7 +22,9 @@
  }
];
const COMPONENT_NOROUNT = [];
const COMPONENT_NOROUNT = [
  AqiDetailComponent,
];
@NgModule({
  imports: [
@@ -38,7 +41,7 @@
      ...COMPONENT_NOROUNT,
      AnalysisComponent,
      CalendarComponent,
      MonitorpointComponent
      MonitorpointComponent,
  ],
  entryComponents: COMPONENT_NOROUNT
})
src/app/routes/systems/organization/organization-config/organization-config.component.ts
@@ -64,7 +64,6 @@
      const alarmLevels = alarmConfigValue.alarmLevels;
      const alarmLevelsGroupsConfig = {};
      Object.keys(alarmLevels).forEach(key => {
        let increment = alarmLevels[key].increment;
        increment = increment == null || increment.length !== 3 ? [0, 0, 0] : increment;
        const incrementArray = this.formBuilder.array([
src/app/routes/systems/organization/organization-list/organization-list.component.ts
@@ -239,7 +239,6 @@
                        this.organizationService.handle = 'screen' ;
                        this.organizationService.data = row;
                        this.organizationService.config['resultBean'] = res;
                        console.log(res);
                        this.organizationService.title = '配置大屏布局';
                      }
                   }
@@ -257,7 +256,6 @@
                  this.organizationService.handle = 'unit' ;
                  this.organizationService.data = row;
                  this.organizationService.config['resultBean'] = res;
                  console.log(res);
                  this.organizationService.title = '配置显示单位';
                }
             }