From 9200567a17b5a567ed14529fa0208618b4867938 Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Thu, 05 Jul 2018 16:03:25 +0800 Subject: [PATCH] 设备型号配置优化 --- src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.html | 86 +++++++++++++++++----------- src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.ts | 88 +++++++++++++++++++++++++---- 2 files changed, 126 insertions(+), 48 deletions(-) diff --git a/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.html b/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.html index b12c73c..39170e9 100644 --- a/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.html +++ b/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.html @@ -1,39 +1,55 @@ <div class="modal-header"> - <div class="modal-title">���������������</div> + <div class="modal-title">���������������</div> </div> -<nz-table #nzTable [nzDataSource]="grid.data" [nzPageSize]="8" - [nzLoading]="grid.loading" [nzShowTotal]="true"> - <thead nz-thead> - <tr> - <th nz-th [nzCheckbox]="true"> - <label nz-checkbox [(ngModel)]="grid.allChecked" [nzIndeterminate]="grid.indeterminate" (ngModelChange)="grid.checkAll($event)"></label> - </th> - <th nz-th *ngFor="let col of grid.columns" [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}"> - <span>{{ col.text }}</span> - <nz-table-sort *ngIf="col.isSort" [(nzValue)]="col.sort" (nzValueChange)="sort(col.name,$event)"></nz-table-sort> - </th> - </tr> - </thead> - <tbody nz-tbody> - <tr nz-tbody-tr *ngFor="let row of nzTable.data"> - <td nz-td [nzCheckbox]="true"> - <label nz-checkbox [(ngModel)]="row.checked" (ngModelChange)="grid.refreshStatus($event)"></label> - </td> - <td nz-td *ngFor="let col of grid.columns" [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}"> - <span [ngSwitch]="col.type"> - <!-- ������������������������������������ --> - <span *ngSwitchDefault> {{ row[col.name]|tyepHandle:col:row }} </span> - <!-- ������������������������������������ --> - </span> - </td> - </tr> - </tbody> -</nz-table> +<nz-row nzGutter="0"> + <nz-col nzSpan="24" style="height: 520px;"> + <nz-table #nzTable [nzDataSource]="gridDataImage" [nzPageSize]="8" [nzLoading]="grid.loading" [nzShowTotal]="true"> + <thead nz-thead> + <tr> + <th nz-th> + </th> + <th nz-th *ngFor="let col of grid.columns;let i = index;" [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}"> + <span>{{ col.text }}</span> + <ng-container *ngIf="i === 0"> + <span> + {{ '('+selectedCount+'/'+grid.data.length+')' }} + </span> + <nz-table-sort [(nzValue)]="col.sort" (nzValueChange)="sort(col.name,$event)"></nz-table-sort> + <nz-dropdown [nzTrigger]="'click'" [nzClickHide]="false"> + <i class="anticon anticon-search ant-table-filter-icon" nz-dropdown></i> + <div nz-dropdown-custom class="custom-filter-dropdown"> + <nz-input [nzPlaceHolder]="'������������'" [ngModel]="searchValue" (ngModelChange)="setSearchValue($event)"></nz-input> + </div> + </nz-dropdown> + </ng-container> + </th> + </tr> + </thead> + <tbody nz-tbody> + <ng-container *ngFor="let row of nzTable.data"> + <tr nz-tbody-tr> + <td nz-td [nzCheckbox]="true"> + <label nz-checkbox [(ngModel)]="row.checked" (ngModelChange)="grid.refreshStatus($event)"></label> + </td> + <td nz-td *ngFor="let col of grid.columns" [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}"> + <span [ngSwitch]="col.type"> + <!-- ������������������������������������ --> + <span *ngSwitchDefault> {{ row[col.name]|tyepHandle:col:row }} </span> + <!-- ������������������������������������ --> + </span> + </td> + </tr> + </ng-container> + </tbody> + </nz-table> + </nz-col> +</nz-row> <div class="modal-footer"> - <button nz-button type="button" (click)="close()">������</button> - <button nz-button [nzType]="'primary'" (click)="save($event,null,null)" [nzLoading]="isSaving"> - <span > - ������<span *ngIf="isSaving" >���</span> - </span> - </button> + <button nz-button type="button" (click)="close()">������</button> + <button nz-button [nzType]="'primary'" (click)="save($event,null,null)" [nzLoading]="isSaving"> + <span> + ������ + <span *ngIf="isSaving">���</span> + </span> + </button> </div> diff --git a/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.ts b/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.ts index 600dd37..793d971 100644 --- a/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.ts +++ b/src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.ts @@ -4,6 +4,8 @@ import { PageBean, Grid } from '@business/entity/grid'; import { Sensor } from '@business/entity/data'; import { Subject } from 'rxjs/Subject'; +import { count } from 'rxjs/operator/count'; +import { debounce } from 'rxjs/operators'; @Component({ selector: 'app-version-sensor-config', @@ -13,8 +15,10 @@ export class VersionSensorConfigComponent implements OnInit { deviceVersionId: number; selectedSensorIds: number[]; + originalOrder: { [key: string]: number} = {}; isSaving = false; grid: Grid<Sensor> = new Grid(null); + public searchValue = ''; private initPage() { const sensor: Sensor = { name: { @@ -44,6 +48,24 @@ this.grid.title = '���������'; this.grid.setColumns(sensor); this.grid.pageSize = 0; + this.subjectStream.debounceTime(500).distinctUntilChanged().subscribe( + name => { + if (!name || !name.trim()) { + this.gridDataImage = this.grid.data; + } else { + this.gridDataImage = this.grid.data.filter( + item => { + name = name.trim().toLowerCase(); + if (!!item.name.toLowerCase().match(name)) { + return true; + } else { + return false; + } + } + ); + } + } + ); } constructor( private subject: NzModalSubject, @@ -54,6 +76,7 @@ this.initPage(); this.load(); } + public gridDataImage = []; load() { // ������������������ExpressionChangedAfterItHasBeenCheckedError setTimeout(() => { @@ -64,6 +87,7 @@ this.grid.loading = true; if (res != null && res.data != null) { this.grid.initData(res); + this.gridDataImage = this.grid.data; this.grid.data.map( (row: any) => { row['checked'] = this.selectedSensorIds.filter( @@ -77,6 +101,9 @@ setTimeout(() => { this.grid.loading = false; }, 1); + this.grid.data.forEach((item, index) => { + this.originalOrder[item.id] = index; + }); } } ); @@ -88,18 +115,53 @@ $event.preventDefault(); this.subject.next( this ); } - - sort(field: string, value: string) { - // ������������field - this.grid.sorts = this.grid.sorts.filter( - (fn: string) => { - return fn !== field; - } - ); - // ������value������null������������������������������filed - if (value != null) { - this.grid.sorts.push(field); - } - this.load(); + public get selectedCount(): number { + let selectedCount = 0; + this.grid.data.forEach( + item => { + if (item['checked']) { + selectedCount++; + } + } + ); + return selectedCount; } + sort(field: string, value: string) { + const data = this.grid.data.sort( + (a, b) => { + let aWeight = 0; + let bWeight = 0; + // debugger; + if (!!value) { + if (value === 'ascend') { + aWeight = a['checked'] ? 1 : 0; + bWeight = b['checked'] ? 1 : 0; + } else { + aWeight = a['checked'] ? 0 : 1; + bWeight = b['checked'] ? 0 : 1; + } + } else { + const idMap = this.originalOrder; + aWeight = idMap[a.id]; + bWeight = idMap[b.id]; + } + return aWeight - bWeight; + } + ); + this.grid.data = data; + this.gridDataImage = []; + setTimeout(() => { + this.gridDataImage = data; + }, 1); + // this.subjectStream.next(null); + // setTimeout(() => { + // this.grid.data = data; + // this.grid.refreshStatus(); + // }, 1); + } + private subjectStream: Subject<string> = new Subject<string> (); + public setSearchValue(name) { + this.searchValue = name; + this.subjectStream.next(name); + } } -- Gitblit v1.8.0