fengxiang
2018-07-31 a2bd66a59a51c84100474d1ce3eb79d7ed3b754e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import { Component, OnInit, OnDestroy } from '@angular/core';
import { NzMessageService } from 'ng-zorro-antd';
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',
    templateUrl: './calendar.component.html',
    styleUrls: ['./calendar.component.less'],
    providers: [DeviceService]
})
export class CalendarComponent implements OnInit, OnDestroy {
 
    data: any = {};
    public calendarDayCells:{
       [key : string] : {
         'status': string,
         'statusName': string,
         'data': {}
       }
    } = {};
    constructor(
        private deviceService: DeviceService,
        private http: _HttpClient,
        public msg: NzMessageService,
        private modalHelper: ModalHelper,
        private http2: HttpClient) {
    }
 
    ngOnInit() {
        const day = Number(moment().format('DD'));
        for(let index = 1;index <= day; index++) {
            this.calendarDayCells[('0'+index).slice(-2)] = {
                status: 'processing',
                statusName: '加载中',
                data: {}
            }
        }
        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'));
        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 {
         return moment().valueOf() < mo.valueOf();
    }
    public isCellExist(mo: moment.Moment):boolean {
         return !!this.calendarDayCells[mo.format('DD')];
    }
    loadCalendar(event) {
        // console.log(event);
    }
}