From 5ad15d5e999b91da4afcc358063f80f95eb66ed9 Mon Sep 17 00:00:00 2001 From: 沈斌 <bluelazysb@hotmail.com> Date: Tue, 13 Mar 2018 16:03:09 +0800 Subject: [PATCH] 工作台数据统计页面 --- src/app/routes/dashboard/workplace/workplace.component.ts | 393 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 339 insertions(+), 54 deletions(-) diff --git a/src/app/routes/dashboard/workplace/workplace.component.ts b/src/app/routes/dashboard/workplace/workplace.component.ts index bb72437..6c5442a 100644 --- a/src/app/routes/dashboard/workplace/workplace.component.ts +++ b/src/app/routes/dashboard/workplace/workplace.component.ts @@ -1,8 +1,10 @@ +import { zip } from 'rxjs/observable/zip'; import { Component, OnInit, OnDestroy } from '@angular/core'; import { NzMessageService } from 'ng-zorro-antd'; import { getTimeDistance, yuan, fixedZero } from '@delon/abc'; -import { getNotice, getActivities } from '../../../../../_mock/api.service'; -import { getFakeChartData } from '../../../../../_mock/chart.service'; +import { _HttpClient } from '@delon/theme'; +import {HttpClient} from '@angular/common/http'; +import * as moment from 'moment'; @Component({ selector: 'app-dashboard-workplace', @@ -10,89 +12,372 @@ 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(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() { - setTimeout(() => { - this.notice = getNotice(); - this.activities = getActivities().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.radarData = getFakeChartData.radarData; - this.loading = false; - }, 500); + 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 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, + + radarOriginData: radarOriginData, + radarData: radarData, + searchData: searchData + }; + + 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 + "���"; + } } -- Gitblit v1.8.0