fengxiang
2018-07-05 9200567a17b5a567ed14529fa0208618b4867938
设备型号配置优化
2 files modified
174 ■■■■ changed files
src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.html 86 ●●●●● patch | view | raw | blame | history
src/app/routes/devices/version/version-sensor-config/version-sensor-config.component.ts 88 ●●●● patch | view | raw | blame | history
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>
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);
    }
}