import { NzModalService, NzMessageService } from 'ng-zorro-antd'; 
 | 
import { PageBean } from '@business/entity/grid'; 
 | 
import {  Sensor } from '@business/entity/data'; 
 | 
import { ModalHelper } from '@delon/theme'; 
 | 
import { SensorsService } from '@business/services/http/sensors.service'; 
 | 
import { Column, Grid } from '@business/entity/grid'; 
 | 
import { Component, OnInit } from '@angular/core'; 
 | 
import { Subject } from 'rxjs/Subject'; 
 | 
import { SensorEditComponent } from './sensor-edit/sensor-edit.component'; 
 | 
  
 | 
  
 | 
  
 | 
@Component({ 
 | 
  selector: 'app-basic-info', 
 | 
  templateUrl: './basic-info.component.html', 
 | 
  styles: [] 
 | 
}) 
 | 
export class BasicInfoComponent implements OnInit { 
 | 
  
 | 
  
 | 
  grid: Grid<Sensor> = new Grid(null); 
 | 
  queryMap = { text: '请输入名称', value: ''}; 
 | 
  queryTextStream: Subject<string> = new Subject<string>(); 
 | 
    private initPage() { 
 | 
    const sensor: Sensor =  { 
 | 
      name: { 
 | 
        text: '名称', 
 | 
        width: '200px'   
 | 
      }, 
 | 
      sensorKey: { 
 | 
        text: '键值', 
 | 
        width: '60px'   
 | 
      }, 
 | 
      lower: { 
 | 
        text: '下限值', 
 | 
        width: '90px'   
 | 
      }, 
 | 
      upper: { 
 | 
        text: '上限值', 
 | 
        width: '90px'   
 | 
      }, 
 | 
      unit: { 
 | 
        text: '单位', 
 | 
        width: '100px'   
 | 
      }, 
 | 
      description: { 
 | 
        text: '描述' 
 | 
      } 
 | 
    }; 
 | 
    this.grid.title = '传感器'; 
 | 
    this.grid.setColumns(sensor); 
 | 
    this.grid.pageSize = 10; 
 | 
  } 
 | 
  constructor( 
 | 
    private sensorsService: SensorsService, 
 | 
     
 | 
    private confirmServ: NzModalService, 
 | 
    public msgSrv: NzMessageService, 
 | 
    private modalHelper: ModalHelper, 
 | 
  ) {} 
 | 
  
 | 
  ngOnInit() { 
 | 
    this.initPage(); 
 | 
    this.queryTextStream 
 | 
    .debounceTime(500) 
 | 
    .distinctUntilChanged() 
 | 
    .subscribe(queryText => { 
 | 
        this.load(); 
 | 
    }); 
 | 
  } 
 | 
  queryTextChanged($event) { 
 | 
      this.queryTextStream.next(this.queryMap.value); 
 | 
  } 
 | 
  load(reload: boolean = false) {    
 | 
    if (reload) { 
 | 
      this.grid.pageIndex = 1 ; 
 | 
    } 
 | 
    // 延时加载避免ExpressionChangedAfterItHasBeenCheckedError 
 | 
    setTimeout(() => { 
 | 
      this.grid.loading = true; 
 | 
     }, 1); 
 | 
    this.sensorsService.getPagingList(this.grid, this.queryMap.value).subscribe( 
 | 
       (res: PageBean) => { 
 | 
            this.grid.loading = true; 
 | 
            if (res != null && res.data != null) { 
 | 
              this.grid.initData(res); 
 | 
              this.grid.refreshStatus(); 
 | 
              setTimeout(() => { 
 | 
                this.grid.loading = false; 
 | 
               }, 1); 
 | 
            } 
 | 
       } 
 | 
    ); 
 | 
  } 
 | 
  
 | 
// rowData为null时,为新增 
 | 
  addOrModify(d) { 
 | 
    const data = {}; 
 | 
    if ( d != null) { 
 | 
      Object.assign(data, d); 
 | 
    } 
 | 
    this.modalHelper.static(SensorEditComponent, { data }).subscribe(  
 | 
      ( ret: { data: any, close: Function} ) => { 
 | 
      // 修改状态 
 | 
      if (ret.data['index'] != null ) { 
 | 
          const index: number = ret.data['index'] ; 
 | 
          const origData = this.grid.getData()[index]; 
 | 
          const isModified =  Object.keys(origData).some( 
 | 
            (key: string) => { 
 | 
                return ret.data[key] !== origData[key];     
 | 
            }  
 | 
          ); 
 | 
          // 未作修改 
 | 
          if (!isModified) {  
 | 
            ret.close(); 
 | 
            this.msgSrv.success(this.grid.title + '未作任何修改!'); 
 | 
            return; 
 | 
          } 
 | 
      } 
 | 
      this.sensorsService.save(ret.data).subscribe( 
 | 
         ( res: any) => { 
 | 
            if (res.code === 1) { 
 | 
              this.load(); 
 | 
              ret.close(); 
 | 
              this.msgSrv.success(this.grid.title + '保存成功!'); 
 | 
            } 
 | 
         } 
 | 
      ); 
 | 
    }); 
 | 
  } 
 | 
  
 | 
  delete(...id: number[]) { 
 | 
    this.sensorsService.delete( ...id ).subscribe( 
 | 
      ( res: any) => { 
 | 
         if (res.code === 1) { 
 | 
           this.load(); 
 | 
           this.msgSrv.success(this.grid.title + '删除成功!'); 
 | 
         } 
 | 
      } 
 | 
   ); 
 | 
  } 
 | 
  
 | 
   deleteSelected() { 
 | 
    this.confirmServ.confirm({ 
 | 
      title: '批量删除', 
 | 
      content: '注意:数据一旦删除,将不可恢复!', 
 | 
      okText: '确定', 
 | 
      cancelText: '取消' 
 | 
    }).on('onOk', () => { 
 | 
       if (this.grid.selectedIndexs != null && this.grid.selectedIndexs.length > 0) { 
 | 
          const ids = this.grid.selectedIndexs.map( 
 | 
              (index: number) => { 
 | 
                  const id = this.grid.data[index].id; 
 | 
                  return Number.parseInt(id); 
 | 
              } 
 | 
          ); 
 | 
          this.delete( ...ids ); 
 | 
       } 
 | 
    }); 
 | 
  } 
 | 
  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(); 
 | 
  } 
 | 
  
 | 
} 
 |