沈斌
2018-07-12 e5641578fc31e1326433b99210e85328f9d8faf7
updates
3 files added
3 files modified
502 ■■■■■ changed files
src/app/routes/pollution/management/management.component.html 45 ●●●●● patch | view | raw | blame | history
src/app/routes/pollution/management/management.component.less 389 ●●●●● patch | view | raw | blame | history
src/app/routes/pollution/management/management.component.ts 56 ●●●●● patch | view | raw | blame | history
src/app/routes/routes-routing.module.ts 5 ●●●● patch | view | raw | blame | history
src/app/routes/routes.module.ts 5 ●●●● patch | view | raw | blame | history
src/assets/app-data.json 2 ●●● patch | view | raw | blame | history
src/app/routes/pollution/management/management.component.html
New file
@@ -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>
src/app/routes/pollution/management/management.component.less
New file
@@ -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;
    }
}
src/app/routes/pollution/management/management.component.ts
New file
@@ -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: 'pollution-management',
    templateUrl: './management.component.html',
    styleUrls: ['./management.component.less'],
    providers: [DeviceService]
})
export class PollutionManagementComponent 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;
                }
            })
        ];
    }
}
src/app/routes/routes-routing.module.ts
@@ -13,6 +13,7 @@
import { ReportComponent } from './report/report.component';
import { UserLoginComponent } from 'app/routes/passport/login/login.component';
import { PollutionManagementComponent } from 'app/routes/pollution/management/management.component';
const routes: Routes = [
    {
@@ -29,7 +30,9 @@
            { path: 'devices', loadChildren: './devices/devices.module#DevicesModule' },
            { path: 'sensors', loadChildren: './sensors/sensors.module#SensorsModule' },
            { path: 'systems', loadChildren: './systems/systems.module#SystemsModule' },
            { path: 'reports', loadChildren: './reports/reports.module#ReportsModule' }
            { path: 'reports', loadChildren: './reports/reports.module#ReportsModule' },
            { path: 'pollution/management', component: PollutionManagementComponent }
        ]
    },    // passport
    {
src/app/routes/routes.module.ts
@@ -13,6 +13,8 @@
import { DashboardMonitorComponent } from './dashboard/monitor/monitor.component';
import { DashboardWorkplaceComponent } from './dashboard/workplace/workplace.component';
import { ReportComponent } from './report/report.component';
import { PollutionManagementComponent } from './pollution/management/management.component';
// Statics
import 'rxjs/add/observable/throw';
@@ -35,7 +37,8 @@
        DashboardMonitorComponent,
        DashboardWorkplaceComponent,
        UserLoginComponent,
        ReportComponent
        ReportComponent,
        PollutionManagementComponent
    ],
    providers: [
        _HttpClient,
src/assets/app-data.json
@@ -57,7 +57,7 @@
            {
              "text": "污染管控",
              "icon": "icon-chemistry",
              "link": "/"
              "link": "/pollution/management"
            },
            {
              "text": "企业污染管理",