From 309d1f9d649daa08bb9b068af014749f6d4a5bce Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Fri, 06 Jul 2018 14:00:45 +0800
Subject: [PATCH] 设备和监控点父页面 筛选条件不予 编辑页面联动

---
 src/app/routes/devices/basic-info/device-edit/device-edit.component.ts |  174 +++++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 135 insertions(+), 39 deletions(-)

diff --git a/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts b/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
index 8158269..2c35a62 100644
--- a/src/app/routes/devices/basic-info/device-edit/device-edit.component.ts
+++ b/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);
+  }
 }

--
Gitblit v1.8.0