fengxiang
2018-07-06 309d1f9d649daa08bb9b068af014749f6d4a5bce
src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
@@ -3,12 +3,16 @@
import { VersionService } from '@business/services/http/version.service';
import { MonitorPointService } from '@business/services/http/monitor-point.service';
import { NzModalSubject } from 'ng-zorro-antd';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
import { DeviceService } from '@business/services/http/device.service';
import { Component, OnInit } from '@angular/core';
import { Device} from '@business/entity/data';
import { _Validators } from '@delon/abc';
import { PageBean } from '@business/entity/grid';
import { Device, MonitorPoint} from '@business/entity/data';
import { PageBean, ResultBean } from '@business/entity/grid';
import { _HttpClient } from '@delon/theme';
import { environment } from '@env/environment';
import { ExampleService } from '@business/services/util/example.service';
import { Observable } from 'rxjs/Observable';
import { OrganizationService } from '@business/services/http/organization.service';
@Component({
  selector: 'app-device-edit',
@@ -16,60 +20,127 @@
  styles: []
})
export class DeviceEditComponent implements OnInit {
  public monitorPoints:any [] = [];
  public deviceVersions:any [] = [];
  public operateUsers:any [] = [];
  public monitorPoints: any [] = [];
  public professions: any [] = [];
  public deviceVersions: any [] = [];
  public operateUsers: any [] = [];
  public isSaving = false;
  public configMap: {orgId?: number, mpointId?: number, mpoint?: MonitorPoint} = {orgId: null};
  public orgOptions = [];
  constructor(
    private subject: NzModalSubject,
    private formBuilder: FormBuilder,
    private monitorPointService:MonitorPointService,
    private versionService:VersionService,
    private operateUserService:OperateUserService
    private monitorPointService: MonitorPointService,
    private versionService: VersionService,
    private operateUserService: OperateUserService,
    private deviceService: DeviceService,
    private  http: _HttpClient,
    private organizationService: OrganizationService
  ) { }
  data:Device;
  validateForm:FormGroup;
  data: Device;
  // 原始数据记录
  originalData: Device = {};
  orgId: number = null;
  validateForm: FormGroup;
  ngOnInit() {
    //   console.log(this.configMap);
    if (!!this.data) {
        Object.assign(this.originalData, this.data);
    }
    const data = this.data;
    this.monitorPointChange(null);
    this.deviceVersionChange(null);
    this.operateUserChange(null);
    this.professionChange();
    if (this.data.createTime == null) {
        this.data.createTime = new Date().getTime();
    }
    const validates:Device = {
         name:[data.name,[Validators.required]],
         mac:[data.mac,[Validators.required]],
         deviceVersionId:[data.deviceVersionId],
         monitorPointId:[data.monitorPointId],
         operateUserId:[data.operateUserId],
         address:[data.address],
         id:[data.id],
         longitude:[data.longitude],
         latitude:[data.latitude],
         createTime:[data.createTime],
         installTime:[data.installTime]
    if (!!this.configMap.mpointId
        && !!this.data.monitorPoint
        && !data.longitude
        && !data.latitude) {
            data.longitude = this.data.monitorPoint.longitude;
            data.latitude = this.data.monitorPoint.latitude;
    }
    data.monitorPointId = !!data.monitorPointId ? data.monitorPointId : this.configMap.mpointId;
    const validates: Device = {
         name: [data.name, [Validators.required]],
         mac: [data.mac, [Validators.required], [this.macAsyncValidator]],
         deviceVersionId: [data.deviceVersionId, [Validators.required]],
         monitorPointId: [data.monitorPointId, [Validators.required]],
         professionId: [data.professionId],
         operateUserId: [data.operateUserId],
         address: [data.address],
         id: [data.id],
         longitude: [data.longitude],
         latitude: [data.latitude],
         createTime: [data.createTime],
         installTime: [data.installTime]
    };
    this.validateForm = this.formBuilder.group(
      validates
    );
    this.orgSelectChange();
    const control = this.validateForm.controls['monitorPointId'];
    control.valueChanges.subscribe(value => {
        const mpoint = ToolsService.getObjById<MonitorPoint>(value, this.monitorPoints);
        this.resetCoor(mpoint);
    });
  }
  close(){
  macAsyncValidator = (control: FormControl): any => {
    return Observable.create(observer => {
        // 编辑状态,mac未改变
        if (!!this.originalData && this.originalData.mac === control.value) {
            observer.next(null);
            observer.complete();
        } else {
            const exampleService = new ExampleService();
            exampleService.or().andEqualTo({name: 'mac', value: control.value});
            this.deviceService.countByExample(exampleService).subscribe(
                res => {
                     if (!!res.code && !!res.data) {
                         observer.next({ error: true, duplicated: true });
                     } else {
                        observer.next(null);
                     }
                     observer.complete();
                }
            );
        }
    });
  }
  close() {
     this.subject.destroy();
   }
   save($event, value, valid){
    $event.preventDefault();
    if(valid){
   save($event, value, valid) {
    const _prevent =  !!$event ? $event.preventDefault() : null ;
    if (valid) {
      this.isSaving = true;
      this.data = value;
      this.subject.next( this );
    }else{
    } else {
        ToolsService.markAsDirty(this.validateForm);
    }
   }
   monitorPointChange(text){
    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
    this.monitorPointService.getPagingList(pageBean, text).subscribe(
   professionChange() {
     this.http.get<ResultBean<any[]>>(environment.SERVER_BASH_URL + 'profession/getall').subscribe(
         result => {
             if (!!result.code) {
                 this.professions = result.data;
             }
         }
     );
   }
   monitorPointChange(text?: string) {
    const pageBean: PageBean = {pageIndex: 0, pageSize: 100};
    const orgId = this.configMap.orgId;
    const example = new ExampleService();
    text = !!text && !!text.trim() ? '%' + text + '%' : null;
    example.or()
    .andEqualTo({name: 'organizationId', value: this.configMap.orgId})
    .andLike({name: 'name', value: text});
    this.monitorPointService.getPageByExample(pageBean, example).subscribe(
      (res: PageBean) => {
           if (res != null && res.data != null) {
               this.monitorPoints = res.data;
@@ -81,14 +152,14 @@
                      return item.id === monitorPoint.id;
                   }
               );
               if ( hasSelectedValue ) {
               if ( !hasSelectedValue ) {
                  this.monitorPoints.push(monitorPoint);
               }
           }
      }
   );
   }
   deviceVersionChange(text){
   deviceVersionChange(text) {
    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
    this.versionService.getPagingList(pageBean, text).subscribe(
      (res: PageBean) => {
@@ -102,14 +173,14 @@
                      return item.id === deviceVersion.id;
                   }
               );
               if ( hasSelectedValue ) {
                  this.monitorPoints.push(deviceVersion);
               if ( !hasSelectedValue ) {
                  this.deviceVersions.push(deviceVersion);
               }
           }
      }
   );
   }
   operateUserChange(text){
   operateUserChange(text) {
    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
    this.operateUserService.getPagingList(pageBean, text).subscribe(
      (res: PageBean) => {
@@ -123,11 +194,36 @@
                      return item.id === operateUser.id;
                   }
               );
               if ( hasSelectedValue ) {
                  this.monitorPoints.push(operateUser);
               if ( !hasSelectedValue ) {
                  this.operateUsers.push(operateUser);
               }
           }
      }
   );
   }
   orgSelectChange(text?: string) {
    const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
    this.organizationService.getPagingList(pageBean, text).subscribe(
      (res: PageBean) => {
           if (res != null && res.data != null) {
               this.orgOptions = res.data;
           }
      }
   );
  }
  setOrgId(orgId: number) {
        this.configMap.mpointId = null;
        this.monitorPointChange();
        this.clearMpoint();
  }
  clearMpoint() {
     ToolsService.setValueToControl(this.validateForm, 'monitorPointId', null);
     this.resetCoor();
  }
  resetCoor(mpoint?: MonitorPoint) {
    const longitude =  !!mpoint ?  mpoint.longitude : null;
    const latitude =  !!mpoint ?  mpoint.latitude : null;
    ToolsService.setValueToControl(this.validateForm, 'longitude', longitude);
    ToolsService.setValueToControl(this.validateForm, 'latitude', latitude);
  }
}