From 3d49dbbd9a5e15d14fc0a4388b17c19c0ac2e5f7 Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Fri, 13 Jul 2018 11:06:06 +0800 Subject: [PATCH] Merge branch 'master' of http://blit.7drlb.com:8888/r/screen_demo2 --- src/app/routes/routes.module.ts | 8 src/app/routes/statistics/calendar/calendar.component.ts | 56 ++ src/app/routes/statistics/analysis/analysis.component.html | 45 + src/app/routes/statistics/analysis/analysis.component.ts | 56 ++ src/app/routes/routes-routing.module.ts | 9 src/app/routes/statistics/analysis/analysis.component.less | 389 +++++++++++++++ src/app/routes/statistics/calendar/calendar.component.html | 45 + src/assets/app-data.json | 6 src/app/routes/statistics/monitorpoint/monitorpoint.component.html | 45 + src/app/routes/statistics/monitorpoint/monitorpoint.component.less | 389 +++++++++++++++ src/app/routes/statistics/calendar/calendar.component.less | 389 +++++++++++++++ src/app/routes/statistics/monitorpoint/monitorpoint.component.ts | 56 ++ 12 files changed, 1,488 insertions(+), 5 deletions(-) diff --git a/src/app/routes/routes-routing.module.ts b/src/app/routes/routes-routing.module.ts index 7cec853..6846a3e 100644 --- a/src/app/routes/routes-routing.module.ts +++ b/src/app/routes/routes-routing.module.ts @@ -15,6 +15,9 @@ import { ForecastingWarningComponent } from './forecasting-warning/forecasting-warning.component'; import { PollutionManagementComponent } from 'app/routes/pollution/management/management.component'; +import { MonitorpointComponent } from 'app/routes/statistics/monitorpoint/monitorpoint.component'; +import { CalendarComponent } from 'app/routes/statistics/calendar/calendar.component'; +import { AnalysisComponent } from 'app/routes/statistics/analysis/analysis.component'; const routes: Routes = [ { @@ -38,7 +41,11 @@ { path: 'reports', loadChildren: './reports/reports.module#ReportsModule' }, { path: 'forecasting-warning', component: ForecastingWarningComponent }, - { path: 'pollution/management', component: PollutionManagementComponent } + { path: 'pollution/management', component: PollutionManagementComponent }, + + { path: 'statistics/monitorpoint', component: MonitorpointComponent }, + { path: 'statistics/calendar', component: CalendarComponent }, + { path: 'statistics/analysis', component: AnalysisComponent } ] }, // passport { diff --git a/src/app/routes/routes.module.ts b/src/app/routes/routes.module.ts index 2653f7a..42d8ebe 100644 --- a/src/app/routes/routes.module.ts +++ b/src/app/routes/routes.module.ts @@ -15,6 +15,9 @@ import { ForecastingWarningComponent } from './forecasting-warning/forecasting-warning.component'; import { ReportComponent } from './report/report.component'; import { PollutionManagementComponent } from './pollution/management/management.component'; +import { MonitorpointComponent } from './statistics/monitorpoint/monitorpoint.component'; +import { CalendarComponent } from './statistics/calendar/calendar.component'; +import { AnalysisComponent } from './statistics/analysis/analysis.component'; // Statics import 'rxjs/add/observable/throw'; @@ -40,7 +43,10 @@ UserLoginComponent, ReportComponent, ForecastingWarningComponent, - PollutionManagementComponent + PollutionManagementComponent, + MonitorpointComponent, + CalendarComponent, + AnalysisComponent ], providers: [ _HttpClient, diff --git a/src/app/routes/statistics/analysis/analysis.component.html b/src/app/routes/statistics/analysis/analysis.component.html new file mode 100644 index 0000000..9f31405 --- /dev/null +++ b/src/app/routes/statistics/analysis/analysis.component.html @@ -0,0 +1,45 @@ + +<div nz-row [nzGutter]="24"> + <div nz-col nzXs="24" nzSm="24" nzMd="24" nzLg="24"> + <nz-card [nzLoading]="loading" [nzBordered]="false" nzTitle="������������������" [nzBodyStyle]="{'padding.px': 24}" class="sales-card" style="min-height: 482px;"> + <ng-template #extra> + <div class="sales-card-extra"> + <div class="sales-type-radio"> + <nz-radio-group [(ngModel)]="salesType" (ngModelChange)="changeSaleType()" [nzSize]="'large'"> + <label nz-radio-button [nzValue]="'1'"><span>PM2.5</span></label> + <label nz-radio-button [nzValue]="'2'"><span>PM10</span></label> + <label nz-radio-button [nzValue]="'3'"><span>SO2</span></label> + <label nz-radio-button [nzValue]="'4'"><span>NO3</span></label> + <label nz-radio-button [nzValue]="'5'"><span>O3</span></label> + <label nz-radio-button [nzValue]="'6'"><span>CO</span></label> + </nz-radio-group> + </div> + </div> + </ng-template> + <ng-template #body> + <h4 class="margin:8px 0 32px 0;">������������������</h4> + + <nz-table #keyTable [nzDataSource]="data.searchData" [nzPageSize]="5" nzSize="small"> + <thead nz-thead> + <tr> + <th nz-th><span>������</span></th> + <th nz-th><span>������������</span></th> + <th nz-th class="text-right"> + <span>������������ mg/m3</span> + <nz-table-sort (nzValueChange)="sort('count',$event)"></nz-table-sort> + </th> + </tr> + </thead> + <tbody nz-tbody> + <tr nz-tbody-tr *ngFor="let i of keyTable.data"> + <td nz-td>{{i.index}}</td> + <td nz-td><a (click)="msg.success(i.point)">{{i.point}}</a></td> + <td nz-td class="text-right">{{i.value}}</td> + </tr> + </tbody> + </nz-table> + </ng-template> + </nz-card> + </div> +</div> + diff --git a/src/app/routes/statistics/analysis/analysis.component.less b/src/app/routes/statistics/analysis/analysis.component.less new file mode 100644 index 0000000..c732176 --- /dev/null +++ b/src/app/routes/statistics/analysis/analysis.component.less @@ -0,0 +1,389 @@ +@import '~@delon/theme/styles/antd/themes/default.less'; +@import '~@delon/abc/utils/utils.less'; + +:host ::ng-deep { + .page-header { + display: flex; + .avatar { + flex: 0 1 72px; + margin-bottom: 8px; + .ant-avatar { + border-radius: 72px; + display: block; + width: 72px; + height: 72px; + } + } + .desc { + position: relative; + top: 4px; + margin-left: 24px; + flex: 1 1 auto; + color: @text-color-secondary; + line-height: 22px; + .desc-title { + font-size: 20px; + line-height: 28px; + font-weight: 500; + color: @heading-color; + margin-bottom: 12px; + } + } + } + + .page-extra { + .clearfix(); + float: right; + & > div { + padding: 0 32px; + position: relative; + float: left; + & > p:first-child { + color: @text-color-secondary; + font-size: @font-size-base; + line-height: 22px; + margin-bottom: 4px; + } + & > p { + color: @heading-color; + font-size: 30px; + line-height: 38px; + margin: 0; + & > span { + color: @text-color-secondary; + font-size: 20px; + } + } + &:after { + background-color: @border-color-split; + position: absolute; + top: 8px; + right: 0; + width: 1px; + height: 40px; + content: ""; + } + } + & > div:last-child { + padding-right: 0; + &:after { + display: none; + } + } + } + + .project-list { + .ant-card-meta-description { + color: @text-color-secondary; + height: 44px; + line-height: 22px; + overflow: hidden; + } + .card-title { + font-size: 0; + a { + color: @heading-color; + margin-left: 12px; + line-height: 24px; + height: 24px; + display: inline-block; + vertical-align: top; + font-size: @font-size-base; + &:hover { + color: @primary-color; + } + } + } + + .project-grid { + width: 33.33%; + } + + .project-item { + display: flex; + margin-top: 8px; + overflow: hidden; + font-size: 12px; + height: 20px; + line-height: 20px; + .textOverflow(); + a { + color: @text-color-secondary; + display: inline-block; + flex: 1 1 0; + .textOverflow(); + &:hover { + color: @primary-color; + } + } + .datetime { + color: @disabled-color; + flex: 0 0 auto; + float: right; + } + } + } + + .activities { + padding: 0 24px 8px; + .username { + color: @text-color; + } + .event { + font-weight: normal; + } + } + + .members { + a { + display: block; + margin: 12px 0; + line-height: 24px; + height: 24px; + .textOverflow(); + .member { + font-size: @font-size-base; + color: @text-color; + line-height: 24px; + max-width: 100px; + vertical-align: top; + margin-left: 12px; + transition: all .3s; + display: inline-block; + .textOverflow(); + } + &:hover { + span { + color: @primary-color; + } + } + } + } + + .datetime { + color: @disabled-color; + } + + .links { + padding: 20px 0 8px 24px; + font-size: 0; + > a { + color: rgba(0, 0, 0, 0.65); + display: inline-block; + font-size: 14px; + margin-bottom: 13px; + width: 25%; + } + } + + @media screen and (max-width: @screen-xl) and (min-width: @screen-lg) { + .active-card { + margin-bottom: 24px; + } + .members { + margin-bottom: 0; + } + .page-extra { + margin-left: -44px; + & > div { + padding: 0 16px; + } + } + } + + @media screen and (max-width: @screen-lg) { + .active-card { + margin-bottom: 24px; + } + .members { + margin-bottom: 0; + } + .page-extra { + float: none; + margin-right: 0; + & > div { + padding: 0 16px; + text-align: left; + &:after { + display: none; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .page-extra { + margin-left: -16px; + } + } + + @media screen and (max-width: @screen-sm) { + .page-header { + display: block; + .desc { + margin-left: 0; + } + } + .page-extra { + & > div { + float: none; + } + } + } + + @media screen and (max-width: @screen-xs) { + .project-list { + .project-grid { + width: 100%; + } + } + } + + + + .icon-group { + transition: color 0.32s; + color: @text-color-secondary; + cursor: pointer; + margin-left: 16px; + &:hover { + color: @text-color; + } + } + + .rank-list { + padding: 0px 32px 32px 72px; + ul { + margin-top: 25px; + } + li { + zoom: 1; + margin-top: 16px; + display: flex; + justify-content: space-between; + .icon { + background-color: #f5f5f5; + border-radius: 20px; + display: inline-block; + font-size: 12px; + font-weight: 600; + margin-right: 24px; + height: 20px; + line-height: 20px; + width: 20px; + text-align: center; + } + .active { + background-color: #314659; + color: #fff; + } + } + } + + .sales-extra { + display: inline-block; + margin-right: 24px; + a { + margin-left: 24px; + } + } + + .sales-card { + .bar { + padding: 0px 0px 32px 32px; + } + .rank { + padding: 0 32px 32px 72px; + } + .ant-tabs-tab { + padding-top: 16px; + padding-bottom: 14px; + line-height: 24px; + } + + .ant-tabs-extra-content { + padding-right: 24px; + line-height: 55px; + } + + .ant-card-head { + position: relative; + } + } + + .sales-card-extra { + height: 68px; + } + + .sales-type-radio { + position: absolute; + left: 24px; + bottom: 15px; + } + + .offline-card { + .ant-tabs-ink-bar { + bottom: auto; + } + .ant-tabs-bar { + border-bottom: none; + } + .ant-tabs-nav-container-scrolling { + padding-left: 40px; + padding-right: 40px; + } + .ant-tabs-tab-prev-icon:before { + position: relative; + left: 6px; + } + .ant-tabs-tab-next-icon:before { + position: relative; + right: 6px; + } + } + + .trend-text { + margin-left: 8px; + color: @heading-color; + } + + @media screen and (max-width: @screen-lg) { + .sales-extra { + display: none; + } + + .rank-list { + li { + span:first-child { + margin-right: 8px; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .rank-title { + margin-top: 16px; + } + + .sales-card .bar { + padding: 16px; + } + } + + @media screen and (max-width: @screen-sm) { + .sales-extra-wrap { + display: none; + } + + .sales-card { + .ant-tabs-content { + padding-top: 30px; + } + } + } + + .ant-table-pagination { + margin-bottom: 0; + } +} diff --git a/src/app/routes/statistics/analysis/analysis.component.ts b/src/app/routes/statistics/analysis/analysis.component.ts new file mode 100644 index 0000000..1640b6e --- /dev/null +++ b/src/app/routes/statistics/analysis/analysis.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { NzMessageService } from 'ng-zorro-antd'; +import { _HttpClient } from '@delon/theme'; +import { HttpClient } from '@angular/common/http'; +import * as moment from 'moment'; +import { DeviceService } from '@business/services/http/device.service'; + +@Component({ + selector: 'statistics-analysis', + templateUrl: './analysis.component.html', + styleUrls: ['./analysis.component.less'], + providers: [DeviceService] +}) +export class AnalysisComponent implements OnInit, OnDestroy { + + data: any = {}; + + constructor( + private deviceService: DeviceService, + private http: _HttpClient, + public msg: NzMessageService, + private http2: HttpClient) { + } + + ngOnInit() { + const searchData = []; + for (let i = 0; i < 50; i += 1) { + searchData.push({ + index: i + 1, + point: `������������-${i}`, + value: Math.floor(Math.random() * 100) + }); + } + + this.data = { + searchData: searchData + }; + } + + 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; + } + }) + ]; + } +} diff --git a/src/app/routes/statistics/calendar/calendar.component.html b/src/app/routes/statistics/calendar/calendar.component.html new file mode 100644 index 0000000..9f31405 --- /dev/null +++ b/src/app/routes/statistics/calendar/calendar.component.html @@ -0,0 +1,45 @@ + +<div nz-row [nzGutter]="24"> + <div nz-col nzXs="24" nzSm="24" nzMd="24" nzLg="24"> + <nz-card [nzLoading]="loading" [nzBordered]="false" nzTitle="������������������" [nzBodyStyle]="{'padding.px': 24}" class="sales-card" style="min-height: 482px;"> + <ng-template #extra> + <div class="sales-card-extra"> + <div class="sales-type-radio"> + <nz-radio-group [(ngModel)]="salesType" (ngModelChange)="changeSaleType()" [nzSize]="'large'"> + <label nz-radio-button [nzValue]="'1'"><span>PM2.5</span></label> + <label nz-radio-button [nzValue]="'2'"><span>PM10</span></label> + <label nz-radio-button [nzValue]="'3'"><span>SO2</span></label> + <label nz-radio-button [nzValue]="'4'"><span>NO3</span></label> + <label nz-radio-button [nzValue]="'5'"><span>O3</span></label> + <label nz-radio-button [nzValue]="'6'"><span>CO</span></label> + </nz-radio-group> + </div> + </div> + </ng-template> + <ng-template #body> + <h4 class="margin:8px 0 32px 0;">������������������</h4> + + <nz-table #keyTable [nzDataSource]="data.searchData" [nzPageSize]="5" nzSize="small"> + <thead nz-thead> + <tr> + <th nz-th><span>������</span></th> + <th nz-th><span>������������</span></th> + <th nz-th class="text-right"> + <span>������������ mg/m3</span> + <nz-table-sort (nzValueChange)="sort('count',$event)"></nz-table-sort> + </th> + </tr> + </thead> + <tbody nz-tbody> + <tr nz-tbody-tr *ngFor="let i of keyTable.data"> + <td nz-td>{{i.index}}</td> + <td nz-td><a (click)="msg.success(i.point)">{{i.point}}</a></td> + <td nz-td class="text-right">{{i.value}}</td> + </tr> + </tbody> + </nz-table> + </ng-template> + </nz-card> + </div> +</div> + diff --git a/src/app/routes/statistics/calendar/calendar.component.less b/src/app/routes/statistics/calendar/calendar.component.less new file mode 100644 index 0000000..c732176 --- /dev/null +++ b/src/app/routes/statistics/calendar/calendar.component.less @@ -0,0 +1,389 @@ +@import '~@delon/theme/styles/antd/themes/default.less'; +@import '~@delon/abc/utils/utils.less'; + +:host ::ng-deep { + .page-header { + display: flex; + .avatar { + flex: 0 1 72px; + margin-bottom: 8px; + .ant-avatar { + border-radius: 72px; + display: block; + width: 72px; + height: 72px; + } + } + .desc { + position: relative; + top: 4px; + margin-left: 24px; + flex: 1 1 auto; + color: @text-color-secondary; + line-height: 22px; + .desc-title { + font-size: 20px; + line-height: 28px; + font-weight: 500; + color: @heading-color; + margin-bottom: 12px; + } + } + } + + .page-extra { + .clearfix(); + float: right; + & > div { + padding: 0 32px; + position: relative; + float: left; + & > p:first-child { + color: @text-color-secondary; + font-size: @font-size-base; + line-height: 22px; + margin-bottom: 4px; + } + & > p { + color: @heading-color; + font-size: 30px; + line-height: 38px; + margin: 0; + & > span { + color: @text-color-secondary; + font-size: 20px; + } + } + &:after { + background-color: @border-color-split; + position: absolute; + top: 8px; + right: 0; + width: 1px; + height: 40px; + content: ""; + } + } + & > div:last-child { + padding-right: 0; + &:after { + display: none; + } + } + } + + .project-list { + .ant-card-meta-description { + color: @text-color-secondary; + height: 44px; + line-height: 22px; + overflow: hidden; + } + .card-title { + font-size: 0; + a { + color: @heading-color; + margin-left: 12px; + line-height: 24px; + height: 24px; + display: inline-block; + vertical-align: top; + font-size: @font-size-base; + &:hover { + color: @primary-color; + } + } + } + + .project-grid { + width: 33.33%; + } + + .project-item { + display: flex; + margin-top: 8px; + overflow: hidden; + font-size: 12px; + height: 20px; + line-height: 20px; + .textOverflow(); + a { + color: @text-color-secondary; + display: inline-block; + flex: 1 1 0; + .textOverflow(); + &:hover { + color: @primary-color; + } + } + .datetime { + color: @disabled-color; + flex: 0 0 auto; + float: right; + } + } + } + + .activities { + padding: 0 24px 8px; + .username { + color: @text-color; + } + .event { + font-weight: normal; + } + } + + .members { + a { + display: block; + margin: 12px 0; + line-height: 24px; + height: 24px; + .textOverflow(); + .member { + font-size: @font-size-base; + color: @text-color; + line-height: 24px; + max-width: 100px; + vertical-align: top; + margin-left: 12px; + transition: all .3s; + display: inline-block; + .textOverflow(); + } + &:hover { + span { + color: @primary-color; + } + } + } + } + + .datetime { + color: @disabled-color; + } + + .links { + padding: 20px 0 8px 24px; + font-size: 0; + > a { + color: rgba(0, 0, 0, 0.65); + display: inline-block; + font-size: 14px; + margin-bottom: 13px; + width: 25%; + } + } + + @media screen and (max-width: @screen-xl) and (min-width: @screen-lg) { + .active-card { + margin-bottom: 24px; + } + .members { + margin-bottom: 0; + } + .page-extra { + margin-left: -44px; + & > div { + padding: 0 16px; + } + } + } + + @media screen and (max-width: @screen-lg) { + .active-card { + margin-bottom: 24px; + } + .members { + margin-bottom: 0; + } + .page-extra { + float: none; + margin-right: 0; + & > div { + padding: 0 16px; + text-align: left; + &:after { + display: none; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .page-extra { + margin-left: -16px; + } + } + + @media screen and (max-width: @screen-sm) { + .page-header { + display: block; + .desc { + margin-left: 0; + } + } + .page-extra { + & > div { + float: none; + } + } + } + + @media screen and (max-width: @screen-xs) { + .project-list { + .project-grid { + width: 100%; + } + } + } + + + + .icon-group { + transition: color 0.32s; + color: @text-color-secondary; + cursor: pointer; + margin-left: 16px; + &:hover { + color: @text-color; + } + } + + .rank-list { + padding: 0px 32px 32px 72px; + ul { + margin-top: 25px; + } + li { + zoom: 1; + margin-top: 16px; + display: flex; + justify-content: space-between; + .icon { + background-color: #f5f5f5; + border-radius: 20px; + display: inline-block; + font-size: 12px; + font-weight: 600; + margin-right: 24px; + height: 20px; + line-height: 20px; + width: 20px; + text-align: center; + } + .active { + background-color: #314659; + color: #fff; + } + } + } + + .sales-extra { + display: inline-block; + margin-right: 24px; + a { + margin-left: 24px; + } + } + + .sales-card { + .bar { + padding: 0px 0px 32px 32px; + } + .rank { + padding: 0 32px 32px 72px; + } + .ant-tabs-tab { + padding-top: 16px; + padding-bottom: 14px; + line-height: 24px; + } + + .ant-tabs-extra-content { + padding-right: 24px; + line-height: 55px; + } + + .ant-card-head { + position: relative; + } + } + + .sales-card-extra { + height: 68px; + } + + .sales-type-radio { + position: absolute; + left: 24px; + bottom: 15px; + } + + .offline-card { + .ant-tabs-ink-bar { + bottom: auto; + } + .ant-tabs-bar { + border-bottom: none; + } + .ant-tabs-nav-container-scrolling { + padding-left: 40px; + padding-right: 40px; + } + .ant-tabs-tab-prev-icon:before { + position: relative; + left: 6px; + } + .ant-tabs-tab-next-icon:before { + position: relative; + right: 6px; + } + } + + .trend-text { + margin-left: 8px; + color: @heading-color; + } + + @media screen and (max-width: @screen-lg) { + .sales-extra { + display: none; + } + + .rank-list { + li { + span:first-child { + margin-right: 8px; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .rank-title { + margin-top: 16px; + } + + .sales-card .bar { + padding: 16px; + } + } + + @media screen and (max-width: @screen-sm) { + .sales-extra-wrap { + display: none; + } + + .sales-card { + .ant-tabs-content { + padding-top: 30px; + } + } + } + + .ant-table-pagination { + margin-bottom: 0; + } +} diff --git a/src/app/routes/statistics/calendar/calendar.component.ts b/src/app/routes/statistics/calendar/calendar.component.ts new file mode 100644 index 0000000..77ed98b --- /dev/null +++ b/src/app/routes/statistics/calendar/calendar.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { NzMessageService } from 'ng-zorro-antd'; +import { _HttpClient } from '@delon/theme'; +import { HttpClient } from '@angular/common/http'; +import * as moment from 'moment'; +import { DeviceService } from '@business/services/http/device.service'; + +@Component({ + selector: 'statistics-calender', + templateUrl: './calendar.component.html', + styleUrls: ['./calendar.component.less'], + providers: [DeviceService] +}) +export class CalendarComponent implements OnInit, OnDestroy { + + data: any = {}; + + constructor( + private deviceService: DeviceService, + private http: _HttpClient, + public msg: NzMessageService, + private http2: HttpClient) { + } + + ngOnInit() { + const searchData = []; + for (let i = 0; i < 50; i += 1) { + searchData.push({ + index: i + 1, + point: `������������-${i}`, + value: Math.floor(Math.random() * 100) + }); + } + + this.data = { + searchData: searchData + }; + } + + 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; + } + }) + ]; + } +} diff --git a/src/app/routes/statistics/monitorpoint/monitorpoint.component.html b/src/app/routes/statistics/monitorpoint/monitorpoint.component.html new file mode 100644 index 0000000..9f31405 --- /dev/null +++ b/src/app/routes/statistics/monitorpoint/monitorpoint.component.html @@ -0,0 +1,45 @@ + +<div nz-row [nzGutter]="24"> + <div nz-col nzXs="24" nzSm="24" nzMd="24" nzLg="24"> + <nz-card [nzLoading]="loading" [nzBordered]="false" nzTitle="������������������" [nzBodyStyle]="{'padding.px': 24}" class="sales-card" style="min-height: 482px;"> + <ng-template #extra> + <div class="sales-card-extra"> + <div class="sales-type-radio"> + <nz-radio-group [(ngModel)]="salesType" (ngModelChange)="changeSaleType()" [nzSize]="'large'"> + <label nz-radio-button [nzValue]="'1'"><span>PM2.5</span></label> + <label nz-radio-button [nzValue]="'2'"><span>PM10</span></label> + <label nz-radio-button [nzValue]="'3'"><span>SO2</span></label> + <label nz-radio-button [nzValue]="'4'"><span>NO3</span></label> + <label nz-radio-button [nzValue]="'5'"><span>O3</span></label> + <label nz-radio-button [nzValue]="'6'"><span>CO</span></label> + </nz-radio-group> + </div> + </div> + </ng-template> + <ng-template #body> + <h4 class="margin:8px 0 32px 0;">������������������</h4> + + <nz-table #keyTable [nzDataSource]="data.searchData" [nzPageSize]="5" nzSize="small"> + <thead nz-thead> + <tr> + <th nz-th><span>������</span></th> + <th nz-th><span>������������</span></th> + <th nz-th class="text-right"> + <span>������������ mg/m3</span> + <nz-table-sort (nzValueChange)="sort('count',$event)"></nz-table-sort> + </th> + </tr> + </thead> + <tbody nz-tbody> + <tr nz-tbody-tr *ngFor="let i of keyTable.data"> + <td nz-td>{{i.index}}</td> + <td nz-td><a (click)="msg.success(i.point)">{{i.point}}</a></td> + <td nz-td class="text-right">{{i.value}}</td> + </tr> + </tbody> + </nz-table> + </ng-template> + </nz-card> + </div> +</div> + diff --git a/src/app/routes/statistics/monitorpoint/monitorpoint.component.less b/src/app/routes/statistics/monitorpoint/monitorpoint.component.less new file mode 100644 index 0000000..c732176 --- /dev/null +++ b/src/app/routes/statistics/monitorpoint/monitorpoint.component.less @@ -0,0 +1,389 @@ +@import '~@delon/theme/styles/antd/themes/default.less'; +@import '~@delon/abc/utils/utils.less'; + +:host ::ng-deep { + .page-header { + display: flex; + .avatar { + flex: 0 1 72px; + margin-bottom: 8px; + .ant-avatar { + border-radius: 72px; + display: block; + width: 72px; + height: 72px; + } + } + .desc { + position: relative; + top: 4px; + margin-left: 24px; + flex: 1 1 auto; + color: @text-color-secondary; + line-height: 22px; + .desc-title { + font-size: 20px; + line-height: 28px; + font-weight: 500; + color: @heading-color; + margin-bottom: 12px; + } + } + } + + .page-extra { + .clearfix(); + float: right; + & > div { + padding: 0 32px; + position: relative; + float: left; + & > p:first-child { + color: @text-color-secondary; + font-size: @font-size-base; + line-height: 22px; + margin-bottom: 4px; + } + & > p { + color: @heading-color; + font-size: 30px; + line-height: 38px; + margin: 0; + & > span { + color: @text-color-secondary; + font-size: 20px; + } + } + &:after { + background-color: @border-color-split; + position: absolute; + top: 8px; + right: 0; + width: 1px; + height: 40px; + content: ""; + } + } + & > div:last-child { + padding-right: 0; + &:after { + display: none; + } + } + } + + .project-list { + .ant-card-meta-description { + color: @text-color-secondary; + height: 44px; + line-height: 22px; + overflow: hidden; + } + .card-title { + font-size: 0; + a { + color: @heading-color; + margin-left: 12px; + line-height: 24px; + height: 24px; + display: inline-block; + vertical-align: top; + font-size: @font-size-base; + &:hover { + color: @primary-color; + } + } + } + + .project-grid { + width: 33.33%; + } + + .project-item { + display: flex; + margin-top: 8px; + overflow: hidden; + font-size: 12px; + height: 20px; + line-height: 20px; + .textOverflow(); + a { + color: @text-color-secondary; + display: inline-block; + flex: 1 1 0; + .textOverflow(); + &:hover { + color: @primary-color; + } + } + .datetime { + color: @disabled-color; + flex: 0 0 auto; + float: right; + } + } + } + + .activities { + padding: 0 24px 8px; + .username { + color: @text-color; + } + .event { + font-weight: normal; + } + } + + .members { + a { + display: block; + margin: 12px 0; + line-height: 24px; + height: 24px; + .textOverflow(); + .member { + font-size: @font-size-base; + color: @text-color; + line-height: 24px; + max-width: 100px; + vertical-align: top; + margin-left: 12px; + transition: all .3s; + display: inline-block; + .textOverflow(); + } + &:hover { + span { + color: @primary-color; + } + } + } + } + + .datetime { + color: @disabled-color; + } + + .links { + padding: 20px 0 8px 24px; + font-size: 0; + > a { + color: rgba(0, 0, 0, 0.65); + display: inline-block; + font-size: 14px; + margin-bottom: 13px; + width: 25%; + } + } + + @media screen and (max-width: @screen-xl) and (min-width: @screen-lg) { + .active-card { + margin-bottom: 24px; + } + .members { + margin-bottom: 0; + } + .page-extra { + margin-left: -44px; + & > div { + padding: 0 16px; + } + } + } + + @media screen and (max-width: @screen-lg) { + .active-card { + margin-bottom: 24px; + } + .members { + margin-bottom: 0; + } + .page-extra { + float: none; + margin-right: 0; + & > div { + padding: 0 16px; + text-align: left; + &:after { + display: none; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .page-extra { + margin-left: -16px; + } + } + + @media screen and (max-width: @screen-sm) { + .page-header { + display: block; + .desc { + margin-left: 0; + } + } + .page-extra { + & > div { + float: none; + } + } + } + + @media screen and (max-width: @screen-xs) { + .project-list { + .project-grid { + width: 100%; + } + } + } + + + + .icon-group { + transition: color 0.32s; + color: @text-color-secondary; + cursor: pointer; + margin-left: 16px; + &:hover { + color: @text-color; + } + } + + .rank-list { + padding: 0px 32px 32px 72px; + ul { + margin-top: 25px; + } + li { + zoom: 1; + margin-top: 16px; + display: flex; + justify-content: space-between; + .icon { + background-color: #f5f5f5; + border-radius: 20px; + display: inline-block; + font-size: 12px; + font-weight: 600; + margin-right: 24px; + height: 20px; + line-height: 20px; + width: 20px; + text-align: center; + } + .active { + background-color: #314659; + color: #fff; + } + } + } + + .sales-extra { + display: inline-block; + margin-right: 24px; + a { + margin-left: 24px; + } + } + + .sales-card { + .bar { + padding: 0px 0px 32px 32px; + } + .rank { + padding: 0 32px 32px 72px; + } + .ant-tabs-tab { + padding-top: 16px; + padding-bottom: 14px; + line-height: 24px; + } + + .ant-tabs-extra-content { + padding-right: 24px; + line-height: 55px; + } + + .ant-card-head { + position: relative; + } + } + + .sales-card-extra { + height: 68px; + } + + .sales-type-radio { + position: absolute; + left: 24px; + bottom: 15px; + } + + .offline-card { + .ant-tabs-ink-bar { + bottom: auto; + } + .ant-tabs-bar { + border-bottom: none; + } + .ant-tabs-nav-container-scrolling { + padding-left: 40px; + padding-right: 40px; + } + .ant-tabs-tab-prev-icon:before { + position: relative; + left: 6px; + } + .ant-tabs-tab-next-icon:before { + position: relative; + right: 6px; + } + } + + .trend-text { + margin-left: 8px; + color: @heading-color; + } + + @media screen and (max-width: @screen-lg) { + .sales-extra { + display: none; + } + + .rank-list { + li { + span:first-child { + margin-right: 8px; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .rank-title { + margin-top: 16px; + } + + .sales-card .bar { + padding: 16px; + } + } + + @media screen and (max-width: @screen-sm) { + .sales-extra-wrap { + display: none; + } + + .sales-card { + .ant-tabs-content { + padding-top: 30px; + } + } + } + + .ant-table-pagination { + margin-bottom: 0; + } +} diff --git a/src/app/routes/statistics/monitorpoint/monitorpoint.component.ts b/src/app/routes/statistics/monitorpoint/monitorpoint.component.ts new file mode 100644 index 0000000..ce51a87 --- /dev/null +++ b/src/app/routes/statistics/monitorpoint/monitorpoint.component.ts @@ -0,0 +1,56 @@ +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { NzMessageService } from 'ng-zorro-antd'; +import { _HttpClient } from '@delon/theme'; +import { HttpClient } from '@angular/common/http'; +import * as moment from 'moment'; +import { DeviceService } from '@business/services/http/device.service'; + +@Component({ + selector: 'statistics-monitorpoint', + templateUrl: './monitorpoint.component.html', + styleUrls: ['./monitorpoint.component.less'], + providers: [DeviceService] +}) +export class MonitorpointComponent implements OnInit, OnDestroy { + + data: any = {}; + + constructor( + private deviceService: DeviceService, + private http: _HttpClient, + public msg: NzMessageService, + private http2: HttpClient) { + } + + ngOnInit() { + const searchData = []; + for (let i = 0; i < 50; i += 1) { + searchData.push({ + index: i + 1, + point: `������������-${i}`, + value: Math.floor(Math.random() * 100) + }); + } + + this.data = { + searchData: searchData + }; + } + + 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; + } + }) + ]; + } +} diff --git a/src/assets/app-data.json b/src/assets/app-data.json index 75b4660..ec77c1c 100644 --- a/src/assets/app-data.json +++ b/src/assets/app-data.json @@ -69,13 +69,13 @@ "icon": "icon-note", "children": [{ "text": "������������", - "link": "/" + "link": "/statistics/analysis" }, { "text": "������������", - "link": "/" + "link": "/statistics/calendar" }, { "text": "������������������", - "link": "/" + "link": "/statistics/monitorpoint" }] }, { -- Gitblit v1.8.0