From 032ca75e238cc2f2a96b3bf27532b5a243d9a24a Mon Sep 17 00:00:00 2001 From: 沈斌 <bluelazysb@hotmail.com> Date: Tue, 13 Mar 2018 16:00:41 +0800 Subject: [PATCH] 工作台数据统计页面 --- src/app/routes/dashboard/workplace/workplace.component.ts | 417 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 362 insertions(+), 55 deletions(-) diff --git a/src/app/routes/dashboard/workplace/workplace.component.ts b/src/app/routes/dashboard/workplace/workplace.component.ts index db768ac..a2a21a6 100644 --- a/src/app/routes/dashboard/workplace/workplace.component.ts +++ b/src/app/routes/dashboard/workplace/workplace.component.ts @@ -3,6 +3,8 @@ import { NzMessageService } from 'ng-zorro-antd'; import { getTimeDistance, yuan, fixedZero } from '@delon/abc'; import { _HttpClient } from '@delon/theme'; +import {HttpClient} from '@angular/common/http'; +import * as moment from 'moment'; @Component({ selector: 'app-dashboard-workplace', @@ -10,93 +12,398 @@ styleUrls: ['./workplace.component.less'] }) export class DashboardWorkplaceComponent implements OnInit, OnDestroy { - notice: any[] = []; + + totalDeviceCountList: any[] = []; + totalDeviceCount = 0; + avgDeviceCount: string; + activities: any[] = []; radarData: any[] = []; loading = true; - // region: mock data - links = [ - { - title: '���������', - href: '', - }, - { - title: '���������', - href: '', - }, - { - title: '���������', - href: '', - }, - { - title: '���������', - href: '', - }, - { - title: '���������', - href: '', - }, - { - title: '���������', - href: '', - }, - ]; members = [ { id: 'members-1', - title: '���������������', + title: '������������', logo: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', link: '', }, { id: 'members-2', - title: '���������������', + title: '������������', logo: 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', link: '', }, { id: 'members-3', - title: '������������', + title: '���������', logo: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', link: '', }, { id: 'members-4', - title: '���������������', + title: '���������', logo: 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', link: '', - }, - { - id: 'members-5', - title: '������������������', - logo: 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', - link: '', - }, + } ]; - // endregion - constructor(private http: _HttpClient, public msg: NzMessageService) {} + data: any = {}; + + q: any = { + start: null, + end: null + }; + + rankingListData: any[] = [ + {title: `PM 2.5`, total: 230}, + {title: `PM 10`, total: 175}, + {title: `������������`, total: 123}, + {title: `������������`, total: 92}, + {title: `������`, total: 39}, + {title: `������`, total: 24}, + {title: `������������`, total: 8} + ]; + + constructor( + private http: _HttpClient, + public msg: NzMessageService, + private http2: HttpClient) { + } ngOnInit() { - zip( - this.http.get('/chart'), - this.http.get('/api/notice'), - this.http.get('/api/activities') - ).subscribe(([ chart, notice, activities ]) => { - this.radarData = chart['radarData']; - this.notice = <any []>notice; - this.activities = (<any []>activities).map((item: any) => { - item.template = item.template.split(/@\{([^{}]*)\}/gi).map((key: string) => { - if (item[key]) return `<a>${item[key].name}</a>`; - return key; - }); - return item; + const today = new Date().getTime(); + const fakeDC = [60, 135, 70, 112, 80, 170, 200, 140, 52, 119, 164, 230]; + for (let i = 0; i < 12; i += 1) { + this.totalDeviceCountList.push({ + x: moment(today).subtract(-1*i, 'months').format( + "YYYY-MM" + ), + y: fakeDC[i] }); - this.loading = false; + this.totalDeviceCount += fakeDC[i]; + } + this.avgDeviceCount = (this.totalDeviceCount/12).toFixed(0); + + const alarmData = []; + const alarmData_1 = []; + const alarmData_2 = []; + const alarmData_3 = []; + for (let i = 0; i < 12; i += 1) { + alarmData.push({ x: `${i + 1}���`, y: Math.floor(Math.random() * 1000) + 500 }); + alarmData_1.push({ x: `${i + 1}���`, y: Math.floor(Math.random() * 1000) + 100 }); + alarmData_2.push({ x: `${i + 1}���`, y: Math.floor(Math.random() * 1000) + 200 }); + alarmData_3.push({ x: `${i + 1}���`, y: Math.floor(Math.random() * 1000) + 300 }); + } + + const alertData = []; + const alertData_1 = []; + const alertData_2 = []; + const alertData_3 = []; + for (let i = 0; i < 7; i += 1) { + alertData.push({ x: this.rankingListData[i].title, y: Math.floor(Math.random() * 1000) + 500 }); + alertData_1.push({ x: this.rankingListData[i].title, y: Math.floor(Math.random() * 1000) + 100 }); + alertData_2.push({ x: this.rankingListData[i].title, y: Math.floor(Math.random() * 1000) + 200 }); + alertData_3.push({ x: this.rankingListData[i].title, y: Math.floor(Math.random() * 1000) + 300 }); + } + + const visitData = []; + const beginDay = new Date().getTime(); + + const fakeY = [7, 5, 4, 2, 4, 7, 5, 6, 5, 9, 6, 3, 1, 5, 3, 6, 5]; + for (let i = 0; i < fakeY.length; i += 1) { + visitData.push({ + x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format( + "YYYY-MM-DD" + ), + y: fakeY[i] + }); + } + const visitData2 = []; + const fakeY2 = [1, 6, 4, 8, 3, 7, 2]; + for (let i = 0; i < fakeY2.length; i += 1) { + visitData2.push({ + x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format( + "YYYY-MM-DD" + ), + y: fakeY2[i] + }); + } + + const offlineData = []; + for (let i = 0; i < 10; i += 1) { + offlineData.push({ + name: `������${i}`, + cvr: Math.ceil(Math.random() * 9) / 10 + }); + } + const offlineChartData = []; + for (let i = 0; i < 20; i += 1) { + offlineChartData.push({ + x: new Date().getTime() + 1000 * 60 * 30 * i, + y1: Math.floor(Math.random() * 100) + 10, + y2: Math.floor(Math.random() * 100) + 10 + }); + } + + const radarOriginData = [ + { + name: '������', + ref: 10, + koubei: 8, + output: 4, + contribute: 5, + hot: 7 + }, + { + name: '������', + ref: 3, + koubei: 9, + output: 6, + contribute: 3, + hot: 1 + }, + { + name: '������', + ref: 4, + koubei: 1, + output: 6, + contribute: 5, + hot: 7 + } + ]; + + const radarData = []; + const radarTitleMap = { + ref: '������', + koubei: '������', + output: '������', + contribute: '������', + hot: '������' + }; + radarOriginData.forEach(item => { + Object.keys(item).forEach(key => { + if (key !== 'name') { + radarData.push({ + name: item.name, + label: radarTitleMap[key], + value: item[key] + }); + } + }); + }); + const searchData = []; + for (let i = 0; i < 50; i += 1) { + searchData.push({ + index: i + 1, + keyword: `���������������-${i}`, + count: Math.floor(Math.random() * 1000), + range: Math.floor(Math.random() * 100), + status: Math.floor((Math.random() * 10) % 2) + }); + } + var res = { + alarmData: alarmData, + alarmData_1: alarmData_1, + alarmData_2: alarmData_2, + alarmData_3: alarmData_3, + + alertData: alertData, + alertData_1: alertData_1, + alertData_2: alertData_2, + alertData_3: alertData_3, + + visitData: visitData, + visitData2: visitData2, + + offlineData: offlineData, + offlineChartData: offlineChartData, + radarOriginData: radarOriginData, + radarData: radarData, + searchData: searchData + }; + + res.offlineData.forEach((item: any) => { + item.chart = Object.assign([], res.offlineChartData); + }); + this.data = res; + this.loading = false; + this.changeSaleType(); + + this.radarData = res.radarData; + + const avatars = [ + 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', // Alipay + 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', // Angular + 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', // Ant Design + 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', // Ant Design Pro + 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', // Bootstrap + 'https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png', // React + 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', // Vue + 'https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png' // Webpack + ]; + + var activities = [ + { + id: 'trend-1', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[0], + }, + group: { + name: '���������������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-2', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[1], + }, + group: { + name: '���������������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-3', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[2], + }, + group: { + name: '���������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-4', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[3], + }, + project: { + name: '5 ���������������', + link: 'http://github.com/', + }, + template: '��� @{project} ������������������������', + }, + { + id: 'trend-5', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[4], + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + comment: { + name: '������', + link: 'http://github.com/', + }, + template: '��� @{project} ��������� @{comment}', + }, + { + id: 'trend-6', + updatedAt: new Date(), + user: { + name: '������', + avatar: avatars[5], + }, + group: { + name: '���������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-7', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[3], + }, + project: { + name: '���������������', + link: 'http://github.com/', + }, + template: '��� @{project} ���������������������', + } + ]; + this.activities = activities.map((item: any) => { + item.template = item.template.split(/@\{([^{}]*)\}/gi).map((key: string) => { + if (item[key]) return `<a>${item[key].name}</a>`; + return key; + }); + return item; }); } ngOnDestroy(): void { } + + sort(sortName, sortValue) { + this.data.searchData = [ + ...(<any[]>this.data.searchData).sort((a, b) => { + if (a[ sortName ] > b[ sortName ]) { + return (sortValue === 'ascend') ? 1 : -1; + } else if (a[ sortName ] < b[ sortName ]) { + return (sortValue === 'ascend') ? -1 : 1; + } else { + return 0; + } + }) + ]; + } + + salesType = '0'; + salesPieData: any; + salesTotal = 0; + changeSaleType() { + if(this.salesType == '0') { + this.salesPieData = this.data.alertData; + } else if(this.salesType == '1') { + this.salesPieData = this.data.alertData_1; + } else if(this.salesType == '2') { + this.salesPieData = this.data.alertData_2; + } else if(this.salesType == '3') { + this.salesPieData = this.data.alertData_3; + } + if (this.salesPieData) this.salesTotal = this.salesPieData.reduce((pre, now) => now.y + pre, 0); + } + + handlePieValueFormat(value: any) { + return value + "���"; + } + + _activeTab = 0; + _tabChange(value: any) { + console.log('tab', this._activeTab, value); + } } -- Gitblit v1.8.0