fengxiang
2018-07-05 9200567a17b5a567ed14529fa0208618b4867938
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;
  public get selectedCount(): number {
     let selectedCount = 0;
     this.grid.data.forEach(
       item => {
         if (item['checked']) {
          selectedCount++;
         }
      }
    );
    // 如果value不为null,在排序数组最后加上filed
    if (value != null) {
      this.grid.sorts.push(field);
     return selectedCount;
    }
    this.load();
  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);
  }
}