From 27cd36be226ca2434f06b1ae9e4d43f1fea639ab Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Mon, 25 Jun 2018 16:40:28 +0800
Subject: [PATCH] 组织配置单位和页面显示

---
 src/app/routes/systems/organization/organization-list/organization-list.component.ts                     |   49 ++
 src/app/business/services/http/sensor-unit.service.ts                                                    |   18 +
 src/app/business/services/http/organization.service.ts                                                   |   16 
 src/app/routes/sensors/sensors.module.ts                                                                 |    4 
 src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.html |  150 ++++++++++
 src/app/routes/systems/organization/organization-list/organization-list.component.html                   |   19 +
 src/app/routes/devices/basic-info/device-edit/device-edit.component.ts                                   |    1 
 src/app/routes/systems/organization/organization.component.html                                          |    2 
 src/app/business/enum/types.enum.ts                                                                      |    6 
 src/app/business/services/util/tools.service.ts                                                          |    7 
 src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.ts       |   83 +++++
 src/app/business/entity/data.ts                                                                          |   20 +
 src/app/routes/systems/systems.module.ts                                                                 |    4 
 src/app/routes/systems/organization/organization-config/organization-config.component.ts                 |    4 
 package.json                                                                                             |    1 
 src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.ts                                   |  135 ++++++++
 src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.html     |   42 ++
 src/app/routes/sensors/basic-info/basic-info.component.html                                              |    2 
 src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.html                                 |   81 +++++
 src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.ts   |  222 ++++++++++++++
 20 files changed, 837 insertions(+), 29 deletions(-)

diff --git a/package.json b/package.json
index 97fcb96..18af71a 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,6 @@
   },
   "license": "MIT",
   "scripts": {
-    "precommit": "npm run lint-staged",
     "ng": "ng",
     "start": "ng serve --host=0.0.0.0",
     "serve:hmr": "ng serve -o --hmr -e=hmr",
diff --git a/src/app/business/entity/data.ts b/src/app/business/entity/data.ts
index c44c39f..2cd044c 100644
--- a/src/app/business/entity/data.ts
+++ b/src/app/business/entity/data.ts
@@ -1,5 +1,5 @@
 import { Column } from '@business/entity/grid';
-import { AlarmStyle, TimeUnits, AreaRange, DeviceDimension } from '@business/enum/types.enum';
+import { AlarmStyle, TimeUnits, AreaRange, DeviceDimension, Operator } from '@business/enum/types.enum';
 
 
 export interface AreaNames {
@@ -167,3 +167,21 @@
   category: string;
   value: number;
 }
+export interface OperatorRule {
+  operator: Operator;
+  value: number;
+}
+export interface SensorUnit {
+  id?: number|any;
+  originalUnitName?: string;
+  name?: string|any;
+  rules?: OperatorRule[]|any;
+  sensorId?: number|any;
+}
+export interface OrganizationSensorUnit {
+  id?: number|any;
+  sensorUnitId?: number|any;
+  sensorUnit?: SensorUnit|any;
+  sensor?: Sensor|any;
+  organizationId?: number|any;
+}
diff --git a/src/app/business/enum/types.enum.ts b/src/app/business/enum/types.enum.ts
index 8ad8cd7..36dd800 100644
--- a/src/app/business/enum/types.enum.ts
+++ b/src/app/business/enum/types.enum.ts
@@ -25,3 +25,9 @@
     PROFESSION= 'PROFESSION',
     NONE= 'NONE'
 }
+export enum Operator {
+    PLUS = 'PLUS', // ���
+    MINUS = 'MINUS', // ���
+    MULTIPLY = 'MULTIPLY', // ���
+    DIVIDE = 'DIVIDE' // ���
+ }
diff --git a/src/app/business/services/http/organization.service.ts b/src/app/business/services/http/organization.service.ts
index 6f3ff0b..20fb068 100644
--- a/src/app/business/services/http/organization.service.ts
+++ b/src/app/business/services/http/organization.service.ts
@@ -1,4 +1,4 @@
-import { Organization, AlarmConfig } from '@business/entity/data';
+import { Organization, AlarmConfig, OrganizationSensorUnit, SensorUnit } from '@business/entity/data';
 import { ExampleService } from '@business/services/util/example.service';
 import { _HttpClient } from '@delon/theme';
 import { environment } from 'environments/environment';
@@ -11,10 +11,10 @@
 
 @Injectable()
 export class OrganizationService {
-  handle: 'list'|'config' = 'list';
-  config: {pageBean: PageBean, resultBean: ResultBean<AlarmConfig>};
+  handle: 'list'|'config'|'unit'|'screen' = 'list';
+  config: {pageBean?: PageBean, resultBean?: ResultBean<AlarmConfig|any>} = {};
   data: Organization;
-  title: '������������'|'������������' = '������������';
+  title: '������������'|'������������������'|'������������������'|'������������������' = '������������';
   private urls = {
       list: environment.SERVER_BASH_URL + '/organization/page-list',
       save: environment.SERVER_BASH_URL + '/organization/add-or-modify',
@@ -40,4 +40,12 @@
   public delete(...ids: number[]): Observable<any> {             
         return this.http.post(this.urls.delete, ids);
   }
+  public getResultBeanData(key: string) {
+        if (!!this.config.resultBean 
+          && !!this.config.resultBean.code 
+          && !!this.config.resultBean.data) {
+          return this.config.resultBean.data[key];
+       }
+       return null;
+  }
 }
diff --git a/src/app/business/services/http/sensor-unit.service.ts b/src/app/business/services/http/sensor-unit.service.ts
new file mode 100644
index 0000000..9e050f8
--- /dev/null
+++ b/src/app/business/services/http/sensor-unit.service.ts
@@ -0,0 +1,18 @@
+import { Injectable } from '@angular/core';
+import { Observable } from 'rxjs/Observable';
+import { SensorUnit } from '@business/entity/data';
+import { _HttpClient } from '@delon/theme';
+import { ResultBean } from '@business/entity/grid';
+
+@Injectable()
+export class SensorUnitService {
+  private urls = {
+    list: 'sensor-unit/gets-bysid',
+  };
+  constructor(
+    private http: _HttpClient
+  ) { }
+  public getListBySensorId(sensorId: number): Observable<ResultBean<SensorUnit[]>> {    
+    return this.http.get( this.urls.list, {  sensorId : sensorId });
+  }
+}
diff --git a/src/app/business/services/util/tools.service.ts b/src/app/business/services/util/tools.service.ts
index 243051f..3478144 100644
--- a/src/app/business/services/util/tools.service.ts
+++ b/src/app/business/services/util/tools.service.ts
@@ -15,6 +15,13 @@
              }
          );
       }
+      public static getValueFormControl(controlSet: FormGroup, name: string) {
+        return controlSet.controls[name].value;
+      }
+      public static setValueToControl(controlSet: FormGroup, name: string, value: any) {
+         controlSet.controls[name].setValue(value);
+         controlSet.controls[name].updateValueAndValidity();
+      }
       public static removePrivate(obj: object) {
             Object.keys(obj).forEach(
                  (key: string) => {
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 fa62a0d..47ec2f0 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
@@ -39,7 +39,6 @@
   originalData: Device = {};
   validateForm: FormGroup;
   ngOnInit() {
-      debugger;
     if (!!this.data) {
         Object.assign(this.originalData, this.data);
     }    
diff --git a/src/app/routes/sensors/basic-info/basic-info.component.html b/src/app/routes/sensors/basic-info/basic-info.component.html
index dcc90d7..c5a31b2 100644
--- a/src/app/routes/sensors/basic-info/basic-info.component.html
+++ b/src/app/routes/sensors/basic-info/basic-info.component.html
@@ -18,7 +18,7 @@
                 </nz-alert>
     </div>
     <nz-table #nzTable
-              [nzAjaxData]="grid.data"              
+              [nzAjaxData]="grid.data"         
               [nzTotal]="grid.total"
               [(nzPageIndex)]="grid.pageIndex"
               [(nzPageSize)]="grid.pageSize"
diff --git a/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.html b/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.html
index 11b8126..e6f6a46 100644
--- a/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.html
+++ b/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.html
@@ -1,3 +1,84 @@
 <div class="modal-header">
     <div class="modal-title">������-���������������</div>
 </div>
+<form [formGroup]="validateForm" (ngSubmit)="save($event,validateForm.value,validateForm.valid)" nz-form [nzType]="'horizontal'">
+    <div nz-form-item nz-row class="mb-sm">
+      <div nz-form-label nz-col [nzSm]="7" [nzXs]="24">
+        <label nz-form-item-required>������</label>
+      </div>
+      <div nz-form-control nz-col [nzSpan]="5" nzHasFeedback>
+           <label>{{ data.name }}</label>
+      </div>
+      <div nz-form-label nz-col [nzSm]="2" [nzXs]="24">
+          <label nz-form-item-required>���������</label>
+      </div>
+      <div nz-form-control nz-col [nzSpan]="5" nzHasFeedback>
+             <label>{{ data.unit }}</label>
+      </div>
+    </div>
+    <div nz-form-item nz-row class="mb-sm">
+      <div nz-form-label nz-col [nzSm]="7" [nzXs]="24">
+        <label nz-form-item-required>������������</label>
+      </div>
+      <div nz-form-control nz-col [nzSpan]="10" nzHasFeedback>
+        <nz-input formControlName="name" maxlength="20" [nzPlaceHolder]="'������'">
+        </nz-input>
+      </div>
+    </div>
+    <div nz-form-item nz-row class="mb-sm">
+      <div nz-form-label nz-col [nzSm]="7" [nzXs]="24">
+        <label nz-form-item-required>������������</label>
+      </div>
+      <div nz-form-control nz-col [nzSpan]="10">
+          <nz-select formControlName="_rule-operator"  style="width: 18%">
+            <nz-option *ngFor="let option of operatorOptions" [nzLabel]="option.label" [nzValue]="option.value">
+            </nz-option>
+          </nz-select>
+          <nz-input-number formControlName="_rule-value" style="width: 20%" [nzMin]="0.000001" maxlength="20" [nzStep]="0.000001"></nz-input-number>  
+          <button nz-button style="left: 1px;" [nzType]="'default'" (click) = "addRule($event)"><i class="anticon anticon-plus"></i></button>           
+      </div>
+    </div>
+    <div nz-form-item nz-row class="mb-sm">
+      <div nz-col [nzSm]="7" [nzXs]="24">
+      </div>
+      <div nz-form-control nz-col [nzSpan]="9" nzHasFeedback>
+        <nz-input  nzReadonly = "true" formControlName="_rules" maxlength="10000" [nzPlaceHolder]="'(���������������������������������)'">
+        </nz-input>        
+      </div>
+      <div nz-col [nzSpan]="3" style="padding-left: 8px;padding-top: 2px;">
+        <button nz-button [nzType]="'default'" (click) = "clearRules($event)"><i class="anticon anticon-close"></i></button>
+      </div>
+    </div>
+    <div nz-row class="mb-sm">
+        <div nz-col [nzSm]="7" [nzXs]="24">
+        </div>
+        <div nz-col [nzSpan]="10" style="text-align:right;">
+          <button nz-button [nzType]="'default'" (click)="reset($event)">������������</button>
+          <button nz-button [nzType]="'primary'" [nzLoading]="isSaving">
+            <span *ngIf="getValueFormControl('id') !== null">������������</span>
+            <span *ngIf="getValueFormControl('id') === null">������������</span>
+          </button>
+        </div>
+    </div>
+  </form>
+  <div nz-row class="mb-sm">
+    <div nz-col [nzSm]="5" [nzXs]="24">
+    </div>
+    <div nz-col [nzSm]="13" [nzXs]="24">
+      <div style="display: block;overflow-y:auto; width:100%;max-height:200px;border: 0;padding: 0;margin: 0">
+      <div *ngFor="let item of dataList" nz-row class="mb-sm" style="padding:4px 0 0 0;border-top: 2px dotted #e9e9e9;">
+        <div nz-col [nzSm]="8" [nzXs]="24">
+           <label>{{item.name}}</label>
+        </div>
+        <div nz-col [nzSm]="8" [nzXs]="24">
+            <label>{{item.rules.replace('{0}','������')}}</label>
+        </div>
+        <div nz-col [nzSm]="8" [nzXs]="24">
+            <a (click)="toEdit(item)">������</a>
+            <span>&nbsp;|&nbsp;</span>
+            <nz-popconfirm [nzTitle]="'���������������?'" [nzOkText]="'Yes'" [nzCancelText]="'No'" (nzOnConfirm)="delete(item.id)" >
+              <a nz-popconfirm>������</a>
+          </nz-popconfirm>
+        </div>
+    </div>    
+  </div>
\ No newline at end of file
diff --git a/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.ts b/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.ts
index 35a0948..2965818 100644
--- a/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.ts
+++ b/src/app/routes/sensors/basic-info/sensor-unit/sensor-unit.component.ts
@@ -1,7 +1,12 @@
 import { Component, OnInit } from '@angular/core';
 import { _HttpClient } from '@delon/theme';
 import { NzModalSubject } from 'ng-zorro-antd';
-import { FormGroup } from '@angular/forms';
+import { FormGroup, Validators, FormBuilder, FormControl } from '@angular/forms';
+import { Sensor, SensorUnit, OperatorRule } from '@business/entity/data';
+import { ToolsService } from '@business/services/util/tools.service';
+import { Operator, ResultCode } from '@business/enum/types.enum';
+import { ResultBean } from '@business/entity/grid';
+import { SensorUnitService } from '@business/services/http/sensor-unit.service';
 
 @Component({
   selector: 'app-sensor-unit',
@@ -10,13 +15,44 @@
 export class SensorUnitComponent implements OnInit {
     public isSaving = false;
     public validateForm: FormGroup;
-    public data: any;
+    public operatorOptions: {label: string, value: Operator} [] = [
+      {label: '���', value: Operator.PLUS},
+      {label: '���', value: Operator.MINUS},
+      {label: '���', value: Operator.MULTIPLY},
+      {label: '���', value: Operator.DIVIDE}
+    ];
+    // public rule = '���';
+    public data: Sensor;
+    public dataList: SensorUnit[] = [];
     constructor(
         private subject: NzModalSubject,
-        private http: _HttpClient
+        private formBuilder: FormBuilder,
+        private http: _HttpClient,
+        private sensorUnitService: SensorUnitService
     ) { }
-
+    loadDataList() {
+      this.sensorUnitService.getListBySensorId(this.data.id).subscribe(
+        res => {
+          if (res.code === 1 ) {
+            this.dataList = res.data;
+          }
+        }
+      );
+    }
     ngOnInit() {
+      this.loadDataList();
+      const validates: SensorUnit  = {
+           id: [null ],
+           sensorId: [this.data.id, [Validators.required] ],
+           name: [null, [Validators.required] ]
+      };
+      validates['_rule-operator'] = [Operator.MULTIPLY];
+      validates['_rule-value'] = 1000;
+      validates['_rules'] =  [null, [Validators.required]];
+      this.validateForm = this.formBuilder.group(
+          validates
+      );
+      // this.validateForm.controls['_rules'].disable();
     }
     save($event, value, valid) {
         $event.preventDefault();
@@ -25,19 +61,100 @@
             this.validateForm.controls[ i ].disable();
           } 
           this.isSaving = true;
-          Object.keys(value).forEach( (key: string) => {
-                // '_'������������������������������
-                if (!key.startsWith('_') && value[key] != null) {
-                     this.data[key] = value[key];
+          ToolsService.removePrivate(value);
+          const sensorUnit: SensorUnit = {};
+          Object.assign(sensorUnit, value);
+          sensorUnit['rules'] = this.rulesToString(this.rules);
+          sensorUnit['originalUnitName'] = this.data.unit;
+          console.log(JSON.stringify(sensorUnit));
+          this.http.post('sensor-unit/add-or-modify', sensorUnit).subscribe(
+            (res: ResultBean<any>) => {
+                if (!!res.code) {
+                  for (const i in this.validateForm.controls) {
+                    this.validateForm.controls[ i ].enable();
+                  }
+                  this.isSaving = false;
+                  this.loadDataList();
+                  this.reset();
                 }
-          } );
+            }
+          );
         } else {
           this.validate(); 
         }
+    }
+    toEdit(item) {      
+        this.reset();
+        this.setValueToControl('id', item.id);
+        this.setValueToControl('name', item.name);
+    }
+    delete(id) {
+      this.http.get('sensor-unit/delete', {id: id}).subscribe(
+          (res: ResultBean<any>) => {
+             if (!!res.code ) {
+               this.loadDataList();
+             }
+          }
+      );
     }
     validate() {
         for (const i in this.validateForm.controls) {
           this.validateForm.controls[ i ].markAsDirty();
         }
      }
+     private rules: OperatorRule[] = [];
+     addRule(event) {
+      event.preventDefault();
+      const rule: OperatorRule = {
+        operator: this.getValueFormControl('_rule-operator'),
+        value: this.getValueFormControl('_rule-value')
+      };
+      this.rules.push(rule);
+      this.setValueToControl('_rules' , this.rulesToString(this.rules, '������'));
+     }
+     rulesToString(rules , dataLabel?: string) {     
+        let rulesString = '' ;
+        dataLabel = dataLabel === undefined ? '{0}' : dataLabel;
+        if (!!this.rules && this.rules.length > 0) {
+            // const dataLabel = '������';
+            rulesString += dataLabel ;
+            this.rules.forEach(rule => {
+              if (!rulesString.endsWith(dataLabel)) {
+                rulesString = '(' + rulesString + ')';
+              }              
+               switch (rule.operator) {
+                  case Operator.PLUS: rulesString += '+' + rule.value + 'd'; break;
+                  case Operator.MINUS: rulesString += '-' + rule.value + 'd'; break;
+                  case Operator.MULTIPLY: rulesString += '*' + rule.value + 'd'; break;
+                  case Operator.DIVIDE: rulesString += '/' + rule.value + 'd'; break;
+               }
+            });
+        }
+        return rulesString;
+     }
+     getValueFormControl(controlName: string) {
+       return ToolsService.getValueFormControl(this.validateForm, controlName);
+     }
+     setValueToControl(controlName: string, value: any) {
+      ToolsService.setValueToControl(this.validateForm, controlName, value);
+     }
+     clearRules(event) {
+      event.preventDefault();
+      this.rules = [];
+      this.setValueToControl('_rules', this.rulesToString(this.rules, '������'));
+     }
+    //  print() {
+    //      debugger;
+    //      console.log(this.validateForm.controls['_rule']);
+    //  }
+    reset(event?: any) {
+      if (!!event) {
+        event.preventDefault();
+      }
+      this.setValueToControl('id', null);
+      this.setValueToControl('name', null);
+      this.setValueToControl('_rules', null);
+      this.setValueToControl('_rule-operator', Operator.MULTIPLY);
+      this.setValueToControl('_rule-value', 1000);
+    }
 }
diff --git a/src/app/routes/sensors/sensors.module.ts b/src/app/routes/sensors/sensors.module.ts
index e69c7de..9412be2 100644
--- a/src/app/routes/sensors/sensors.module.ts
+++ b/src/app/routes/sensors/sensors.module.ts
@@ -9,6 +9,8 @@
 import { FormBuilder } from '@angular/forms';
 import { SensorEditComponent } from './basic-info/sensor-edit/sensor-edit.component';
 import { SensorUnitComponent } from './basic-info/sensor-unit/sensor-unit.component';
+import { ToolsService } from '@business/services/util/tools.service';
+import { SensorUnitService } from '@business/services/http/sensor-unit.service';
 
 const routes: Routes = [
   {
@@ -32,7 +34,7 @@
     SensorUnitComponent,
     SensorEditComponent
   ],
-  providers: [SensorsService, _HttpClient, FormBuilder],
+  providers: [SensorsService, _HttpClient, FormBuilder, ToolsService, SensorUnitService],
   entryComponents: COMPONENTS_NOROUNT
 })
 export class SensorsModule { }
diff --git a/src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.html b/src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.html
new file mode 100644
index 0000000..ecffbf9
--- /dev/null
+++ b/src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.html
@@ -0,0 +1,150 @@
+<nz-tabset [nzTabPosition]="'left'" [(nzSelectedIndex)]="selectedIndex" (nzSelectedIndexChange)="swapTab()">
+    <nz-tab *ngFor="let tab of deviceVersions">
+        <ng-template #nzTabHeading>
+            {{tab.name}}
+        </ng-template>
+        <nz-spin [nzSpinning]="isSpinning">
+            <form nz-form>
+                <nz-card [nzBordered]="false" nzTitle="���������({{surplusSensors.length}})">
+                    <div nz-form-item nz-row>
+                        <ng-container *ngFor="let sensor of surplusSensors,index as i">
+                            <div nz-form-control nz-col [nzSm]="2">
+                                <label>{{ sensor.name }}</label>
+                            </div>
+                            <div nz-form-control nz-col [nzSm]="4">
+                                <nz-dropdown [nzTrigger]="'click'">
+                                    <a class="ant-dropdown-link" nz-dropdown>
+                                        ������
+                                        <i class="anticon anticon-down"></i>
+                                    </a>
+                                    <ul nz-menu>
+                                        <li nz-menu-item>
+                                            <a (click)="moveTo(surplusSensors,i,defaultMonitorItems)">
+                                                ���������
+                                            </a>
+                                        </li>
+                                        <li nz-menu-divider></li>
+                                        <li nz-menu-item (click)="moveTo(surplusSensors,i,coreMonitorItems)" [nzDisable]="isCoreItemsFull">
+                                            ���������
+                                            <span *ngIf="isCoreItemsFull">(������)</span>
+                                        </li>
+                                    </ul>
+                                </nz-dropdown>
+                            </div>
+                        </ng-container>
+                    </div>
+                    <nz-row nzType="flex" nzJustify="end" nzAlign="top">
+                        <nz-col nzSpan="4" >
+                            <button (click)="moveAllto(surplusSensors,defaultMonitorItems)" nz-button>���������������������</button>
+                        </nz-col>
+                    </nz-row>
+                </nz-card>
+                <div nz-form-item nz-row>
+                    <div nz-form-control nz-col [nzSm]="8"></div>
+                    <div nz-form-control nz-col [nzSm]="8">
+                        <label class="display-3">������������ :</label>
+                        <span class="display-3">{{ chartSensorName }}</span>
+                    </div>
+                    <div nz-form-control nz-col [nzSm]="8"></div>
+                </div>
+                <nz-card [nzBordered]="false" nzTitle="���������({{defaultMonitorItems.length}})">
+                    <div *ngFor="let sensor of defaultMonitorItems,index as i" nz-form-item nz-row>
+                        <div nz-form-control nz-col [nzSm]="6">
+                            <label>{{ sensor.name }}</label>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <a (click)="itemUp(defaultMonitorItems,i)">������</a>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <a (click)="itemDown(defaultMonitorItems,i)">������</a>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <a (click)="setChartSensorKey(sensor.sensorKey)">������������</a>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <nz-dropdown [nzTrigger]="'click'">
+                                <a class="ant-dropdown-link" nz-dropdown>
+                                    ������
+                                    <i class="anticon anticon-down"></i>
+                                </a>
+                                <ul nz-menu>
+                                    <li nz-menu-item>
+                                        <a (click)="moveTo(defaultMonitorItems,i,surplusSensors)">
+                                            ���������
+                                        </a>
+                                    </li>
+                                    <li nz-menu-divider></li>
+                                    <li nz-menu-item (click)="moveTo(defaultMonitorItems,i,coreMonitorItems)" [nzDisable]="isCoreItemsFull">
+                                        ���������
+                                        <span *ngIf="isCoreItemsFull">(������)</span>
+                                    </li>
+                                </ul>
+                            </nz-dropdown>
+                        </div>
+                    </div>
+                </nz-card>
+                <nz-card [nzBordered]="false" nzTitle="���������({{coreMonitorItems.length}}/6)">
+                    <div *ngFor="let sensor of coreMonitorItems,index as i" nz-form-item nz-row>
+                        <div nz-form-control nz-col [nzSm]="6">
+                            <label>{{ sensor.name }}</label>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <a (click)="itemUp(coreMonitorItems,i)">������</a>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <a (click)="itemDown(coreMonitorItems,i)">������</a>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <a (click)="setChartSensorKey(sensor.sensorKey)">������������</a>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="3">
+                            <nz-dropdown [nzTrigger]="'click'">
+                                <a class="ant-dropdown-link" nz-dropdown>
+                                    ������
+                                    <i class="anticon anticon-down"></i>
+                                </a>
+                                <ul nz-menu>
+                                    <li nz-menu-item>
+                                        <a (click)="moveTo(coreMonitorItems,i,surplusSensors)">
+                                            ���������
+                                        </a>
+                                    </li>
+                                    <li nz-menu-divider></li>
+                                    <li nz-menu-item (click)="moveTo(coreMonitorItems,i,defaultMonitorItems)">
+                                        ���������
+                                    </li>
+                                </ul>
+                            </nz-dropdown>
+                        </div>
+                    </div>
+                </nz-card>
+                <nz-card [nzBordered]="false" nzTitle="���������({{optionalFixedItems.length}})">
+                        <div nz-form-item nz-row>
+                            <ng-container *ngFor="let sensor of optionalFixedItems,index as i">
+                                <div nz-form-control nz-col [nzSm]="2">
+                                </div>
+                                <div nz-form-control nz-col [nzSm]="4">
+                                    <label nz-checkbox [ngModel]="isFixedSensorSelected(sensor.sensorKey)" 
+                                    (ngModelChange) = "changeFixedItem( $event, sensor)"
+                                    name="fixed_{{sensor.sensorKey}}_selected"></label>
+                                    &nbsp;
+                                    <label>{{ sensor.name }}</label>
+                                </div>
+                            </ng-container>
+                        </div>
+                    </nz-card>
+            </form>
+        </nz-spin>
+    </nz-tab>
+</nz-tabset>
+<footer-toolbar>
+    <label>���������������</label>
+    <span [ngStyle]="{'font-size': '16px','font-weight': 'bold','margin-right':'30px'}">{{ organization.name }}</span>
+    <button nz-button type="button" (click)="backToList()">������</button>
+    <button nz-button [nzType]="'primary'" (click)="save()" [nzLoading]="isSaving">
+        <span>
+            ������
+            <span *ngIf="isSaving">���</span>
+        </span>
+    </button>
+</footer-toolbar>
diff --git a/src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.ts b/src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.ts
new file mode 100644
index 0000000..62ac30c
--- /dev/null
+++ b/src/app/routes/systems/organization/organization-config-screen/organization-config-screen.component.ts
@@ -0,0 +1,222 @@
+import { Component, OnInit } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { NzMessageService } from 'ng-zorro-antd';
+import { OrganizationService } from '@business/services/http/organization.service';
+import { Sensor, Organization } from '@business/entity/data';
+import { ResultBean } from '@business/entity/grid';
+
+@Component({
+  selector: 'app-organization-config-screen',
+  templateUrl: './organization-config-screen.component.html',
+})
+export class OrganizationConfigScreenComponent implements OnInit {
+
+    constructor(
+        private http: _HttpClient,
+        private organizationService: OrganizationService,
+        public msgSrv: NzMessageService
+    ) { }
+    public selectedIndex = 0;
+    public defaultSwapFlag: string;
+    public coreSwapFlag: string;
+    public organization: Organization;
+    public deviceVersions: any[] = [];
+    public addedSensors: any[] = [];
+    // ������������������
+    public surplusSensors: any[] = [];
+    public defaultMonitorItems: any[] = [];
+    public coreMonitorItems: any[] = [];
+    public optionalFixedItems: any[] = [];
+    public fixedMonitorItems: any[] =  [];
+    public chartSensorKey: string;
+    
+    ngOnInit() {
+      this.organization = this.organizationService.data;
+      this.deviceVersions = 
+                !!this.organizationService.getResultBeanData('deviceVersions') ?
+                this.organizationService.getResultBeanData('deviceVersions') : [];
+      const rtdLayout = this.organizationService.getResultBeanData('rtdLayout');
+      const sensorCombs = <any[]>this.organizationService.getResultBeanData('sensorCombs');
+      const optionalFixedItems = <any[]>this.organizationService.getResultBeanData('optionalFixedItems');
+      this.loadPage(rtdLayout, sensorCombs, optionalFixedItems);
+    }
+    swapTab() {
+        const version = this.deviceVersions[this.selectedIndex];
+        this.isSaving = true;
+        this.isSpinning = true;
+        this.http.get('org-layout/rtd-act-config', {orgId: this.organization.id, versionNo: version.version }).subscribe(
+            (res: ResultBean<any>) => {
+                if ( res.code > 0 ) {
+                    const data = res.data;
+                    const rtdLayout = data.rtdLayout;
+                    const sensorCombs = data.sensorCombs;
+                    const optionalFixedItems = data.optionalFixedItems;
+                    this.loadPage(rtdLayout, sensorCombs, optionalFixedItems);
+                    this.isSaving = false;
+                    this.isSpinning = false;
+                }
+            }
+        );
+    }
+    loadPage(rtdLayout: 
+        {chartSensorKey: string,
+         coreMonitorItems: any[], 
+         defaultMonitorItems: any [],
+         optionalFixedItems: any[],
+         fixedMonitorItems: any[]}
+        , sensorCombs: any[], optionalFixedItems: any[]) {
+        this.chartSensorKey = '';
+        this.coreMonitorItems = [];
+        this.defaultMonitorItems = [];
+        this.addedSensors = [];
+        this.surplusSensors = [];
+        this.fixedMonitorItems = [];
+        this.optionalFixedItems = !!optionalFixedItems ? optionalFixedItems : [];
+        if (!!rtdLayout && !!sensorCombs.length) {
+            this.chartSensorKey = rtdLayout.chartSensorKey;
+            this.coreMonitorItems = rtdLayout.coreMonitorItems;
+            this.defaultMonitorItems = rtdLayout.defaultMonitorItems;
+            this.fixedMonitorItems = rtdLayout.fixedMonitorItems;
+            this.addedSensors = [...rtdLayout.coreMonitorItems, ...rtdLayout.defaultMonitorItems];
+            this.surplusSensors = sensorCombs.filter(
+                ( item: any ) => {
+                  return !this.addedSensors.some(
+                      (sen: any) => {
+                          return item.sensorKey === sen.sensorKey;
+                      }
+                  );
+                }
+            );
+        } else {
+          this.surplusSensors = sensorCombs;
+        }
+    }
+    public get haveTaps(): Boolean {
+        return !!this.deviceVersions && !!this.deviceVersions.length;
+    }
+    public get isCoreItemsFull(): Boolean {
+        return this.coreMonitorItems.length >= 6;
+    }
+    public setChartSensorKey(sensorKey) {
+        this.chartSensorKey = sensorKey;
+    }
+    public itemUp(items: any[], index) {
+        if (index !== 0 ) {
+           const tempIndex = index - 1;
+           const temp = items[tempIndex];
+           items[tempIndex] = items[index];
+           items[index] = temp;
+        }
+   }
+   public itemDown(items: any[], index) {
+     if (index < (items.length - 1) ) {             
+        const tempIndex = index + 1;
+        const temp = items[tempIndex];
+        items[tempIndex] = items[index];
+        items[index] = temp;
+     }
+    }
+
+    moveTo(source: any[], sIndex: number, target: any[]) {
+        const temp = source[sIndex];
+        source.splice(sIndex, 1);
+        target.push(temp);
+        // ������������������
+        this.refreshAddedList();
+        this.refreshChartSensorKey();
+    }
+    moveAllto(source: any[],  target: any[]) {
+        const length = source.length;
+        target.push(...source);
+        source.splice(0, length);   
+        this.refreshAddedList();
+        this.refreshChartSensorKey();     
+    }
+    public refreshChartSensorKey() {
+        const isChartKeyRemoved = this.surplusSensors.some(
+            item => {
+                return item.sensorKey === this.chartSensorKey;
+            }
+        );
+        if (isChartKeyRemoved || !this.chartSensorKey) {
+            this.chartSensorKey = null;
+            const length = this.addedSensors.length;
+            if (length > 0) {
+                this.chartSensorKey =  this.addedSensors[length - 1].sensorKey;
+            }
+        }
+    }
+    public get chartSensorName() {
+        const sensor = this.addedSensors.find(
+            item => {
+                return item.sensorKey === this.chartSensorKey;
+            }
+        );
+        return !!sensor ? sensor.name : '';
+    }
+    refreshAddedList() {
+        this.addedSensors = [...this.defaultMonitorItems, ...this.coreMonitorItems];
+    }
+    public isSaving = false;
+    public isSpinning = false;
+    save() {
+         this.isSaving = true;
+         const version = this.deviceVersions[this.selectedIndex].version;
+         const orgId = this.organization.id;
+         if ( !!this.addedSensors.length ) {
+            const rtdLayout = {
+                chartSensorKey: this.chartSensorKey,
+                defaultMonitorItems: this.defaultMonitorItems,
+                coreMonitorItems: this.coreMonitorItems,
+                fixedMonitorItems: this.fixedMonitorItems
+            };
+            const rtdLayoutUpload = {
+                realTimeDeviceLayout : rtdLayout,
+                organizationId: orgId,
+                version: version
+            };            
+            this.http.post('org-layout/rtd-save', rtdLayoutUpload).subscribe(
+                (res: ResultBean<any>) => {
+                    if (res.code > 0 ) {
+                        this.isSaving = false;
+                        this.msgSrv.success('������������');
+                    }
+                }
+            );
+         } else {
+            this.http.get('org-layout/rtd-remove', {orgId: orgId, version: version}).subscribe(
+                (res: ResultBean<any>) => {
+                    if (res.code > 0 ) {
+                        this.isSaving = false;
+                        this.msgSrv.success('������������');
+                    }
+                }
+            );
+         }
+    }
+    isFixedSensorSelected(sensorKey: string) {
+        const isSelected = this.fixedMonitorItems.some( item => {
+            return item.sensorKey === sensorKey;
+        });
+        return isSelected;
+    }
+
+    changeFixedItem(event, sensor) {
+         if (event) {
+            this.fixedMonitorItems.push(sensor);
+         } else {
+            const delteIndex =  this.fixedMonitorItems.findIndex(
+                item => {
+                    return item.sensorKey === sensor.sensorKey;
+                }
+            );
+            if (delteIndex > 0 ) {
+                this.fixedMonitorItems.splice(delteIndex, 1);
+            }           
+         }
+    }
+    backToList() {
+        this.organizationService.handle = 'list';
+        this.organizationService.title = '������������';
+    }
+}
diff --git a/src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.html b/src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.html
new file mode 100644
index 0000000..d4ad476
--- /dev/null
+++ b/src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.html
@@ -0,0 +1,42 @@
+<form nz-form>
+    <ng-container *ngIf="!!osuTowDimList.length; else elseTemplate">
+            <div  *ngFor= "let osuList of osuTowDimList" nz-form-item nz-row>
+                    <ng-container *ngFor="let osu of osuList">
+                        <div  nz-form-label nz-col [nzSm]="3">
+                                <label>{{osu.sensor.description}}</label>
+                        </div>
+                        <div nz-form-control nz-col [nzSm]="4">
+                            <nz-select [nzMode]="'default'" nzAllowClear 
+                            nzPlaceHolder="{{osu.sensor.unit}}(������������)" [(ngModel)]="osu.sensorUnitId" name="sensorUnitId">
+                                <nz-option
+                                    *ngFor="let option of sensorUnitMap[osu.sensor.id]"
+                                    [nzLabel]="option.name"
+                                    [nzValue]="option.id">
+                                    </nz-option>
+                            </nz-select>
+                        </div>
+                    </ng-container>
+                </div>
+    </ng-container>
+    <ng-template #elseTemplate>
+            <div nz-form-item nz-row>
+                    <div  nz-form-label nz-col [nzSm]="24" style="text-align: center;">
+                            <h2>���������������������������������������������������</h2>
+                    </div>
+                </div>
+    </ng-template>
+    
+
+
+</form>
+<footer-toolbar>
+        <label>���������������</label>
+        <span [ngStyle]="{'font-size': '16px','font-weight': 'bold','margin-right':'30px'}">{{ organization.name }}</span>
+        <button nz-button type="button" (click)="backToList()">������</button>
+        <button nz-button [nzType]="'primary'" (click)="save()" [nzLoading]="isSaving">
+            <span>
+                ������
+                <span *ngIf="isSaving">���</span>
+            </span>
+        </button>
+</footer-toolbar>
diff --git a/src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.ts b/src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.ts
new file mode 100644
index 0000000..29678a3
--- /dev/null
+++ b/src/app/routes/systems/organization/organization-config-unit/organization-config-unit.component.ts
@@ -0,0 +1,83 @@
+import { Component, OnInit } from '@angular/core';
+import { _HttpClient } from '@delon/theme';
+import { OrganizationService } from '@business/services/http/organization.service';
+import { Organization, OrganizationSensorUnit } from '@business/entity/data';
+import { ResultBean } from '@business/entity/grid';
+import { NzMessageService } from 'ng-zorro-antd';
+
+@Component({
+  selector: 'app-organization-config-unit',
+  templateUrl: './organization-config-unit.component.html',
+})
+export class OrganizationConfigUnitComponent implements OnInit {
+    public organization: Organization;
+    constructor(
+        private http: _HttpClient,
+        private organizationService: OrganizationService,
+        public msgSrv: NzMessageService
+    ) { }
+    public osuTowDimList: OrganizationSensorUnit[][] = [];
+
+    public originalOsuList: OrganizationSensorUnit[] = [];
+    public osuList: OrganizationSensorUnit[];
+    public sensorUnitMap;
+    ngOnInit() {
+        this.organization = this.organizationService.data;
+        this.sensorUnitMap = <OrganizationSensorUnit []> this.organizationService.config.resultBean.data.sensorUnitMap;
+        const osuList = <OrganizationSensorUnit []> this.organizationService.config.resultBean.data.osuList;
+        this.osuList = osuList;
+        // ������������������
+        osuList.forEach(item => {
+            const osu = {};
+            Object.assign(osu, item);
+            this.originalOsuList.push(osu);
+        });
+        if ( !!osuList ) {
+            for (let index = 0 ; index < osuList.length; index += 3 ) {
+                const osuListTemp: OrganizationSensorUnit[] = [];
+                for (let n = 0 ; n < 3; n++ ) {
+                        const nTemp =  index + n;
+                        if (nTemp < osuList.length ) {
+                            osuListTemp.push(osuList[nTemp]);
+                        }
+                }
+                this.osuTowDimList.push(osuListTemp);
+            }
+        }
+        console.log(this.osuTowDimList);
+    }
+    public isSaving = false;
+    save() {
+        this.isSaving = true;
+        const modifyList = [];
+        // ���������������������
+        this.osuList.forEach(
+            item => {
+                const osu = this.originalOsuList.find(
+                    su => {
+                        return su.sensor.id === item.sensor.id && 
+                        su.sensorUnitId !== item.sensorUnitId;
+                    }
+                );
+                if (!!osu) {
+                    modifyList.push(item);
+                }
+            }
+        );
+        if (!!modifyList.length) {
+            this.http.post('org-sunit/saves', modifyList).subscribe(
+                (res: ResultBean<any>) => {
+                    if (res.code > 0 ) {
+                        this.isSaving = false;
+                        this.msgSrv.success(this.organization.name + ' ���������������');
+                        // this.backToList();
+                    }
+                }
+            );
+        }
+    }
+    backToList() {
+        this.organizationService.handle = 'list';
+        this.organizationService.title = '������������';
+      }
+}
diff --git a/src/app/routes/systems/organization/organization-config/organization-config.component.ts b/src/app/routes/systems/organization/organization-config/organization-config.component.ts
index 607f51d..fe80593 100644
--- a/src/app/routes/systems/organization/organization-config/organization-config.component.ts
+++ b/src/app/routes/systems/organization/organization-config/organization-config.component.ts
@@ -57,7 +57,7 @@
         alarmConfig = this.alarmConfigService.generateAlarmConfig(pageBean.data);
       } else {
         // ������ ������ ���������
-        alarmConfig = this.alarmConfigService.generateAlarmConfig(pageBean.data, resultBean.data);
+        alarmConfig = this.alarmConfigService.generateAlarmConfig(pageBean.data, <AlarmConfig>resultBean.data);
       }
       const alarmConfigValue = alarmConfig.value;
 
@@ -183,7 +183,7 @@
            result => {
               if (result != null && result.code === 1) {
                  this.msgSrv.success(this.organization.name + ' ���������������');
-                 this.backToList();
+                //  this.backToList();
               }
            }
        );
diff --git a/src/app/routes/systems/organization/organization-list/organization-list.component.html b/src/app/routes/systems/organization/organization-list/organization-list.component.html
index e1ed4eb..0bb7324 100644
--- a/src/app/routes/systems/organization/organization-list/organization-list.component.html
+++ b/src/app/routes/systems/organization/organization-list/organization-list.component.html
@@ -51,8 +51,6 @@
                         </span>
                     </td>
                     <td nz-td>
-                            <a (click)="config(row)">������</a>
-                            <span nz-table-divider></span>
                             <a (click)="addOrModify(row)">������</a>
                             <span nz-table-divider></span>
                               <nz-popconfirm [nzTitle]="'������������������'+grid.title+'���?'" [nzOkText]="'Yes'" [nzCancelText]="'No'" (nzOnConfirm)="delete(row.id)" >
@@ -60,6 +58,23 @@
                               </nz-popconfirm>
                             <span nz-table-divider></span>
                             <a [routerLink]="['/systems/registration']" (click)="registration(row)">���������</a>
+                            <span nz-table-divider></span>
+                            <nz-dropdown>
+                                <a class="ant-dropdown-link" nz-dropdown>
+                                  ������ <i class="anticon anticon-down"></i>
+                                </a>
+                                <ul nz-menu>
+                                  <li nz-menu-item>
+                                        <a (click)="configAlarm(row)">������������������</a>
+                                  </li>
+                                  <li nz-menu-item>
+                                        <a (click)="configScreenLayout(row)">������������������</a>
+                                  </li>
+                                  <li nz-menu-item>
+                                        <a (click)="configShowUnit(row)">������������������</a>
+                                  </li>
+                                </ul>
+                              </nz-dropdown>
                      </td>
                 </tr>
               </tbody>
diff --git a/src/app/routes/systems/organization/organization-list/organization-list.component.ts b/src/app/routes/systems/organization/organization-list/organization-list.component.ts
index 38ced8b..3cce5b9 100644
--- a/src/app/routes/systems/organization/organization-list/organization-list.component.ts
+++ b/src/app/routes/systems/organization/organization-list/organization-list.component.ts
@@ -1,11 +1,11 @@
 import { AlarmConfigService } from '@business/services/http/alarm-config.service';
 import { SensorsService } from '@business/services/http/sensors.service';
 import { Router } from '@angular/router';
-import { ModalHelper } from '@delon/theme';
+import { ModalHelper, _HttpClient } from '@delon/theme';
 import { NzModalService, NzMessageService } from 'ng-zorro-antd';
 import { OrganizationService } from '@business/services/http/organization.service';
-import { Grid, Column, PageBean } from '@business/entity/grid';
-import { Organization } from '@business/entity/data';
+import { Grid, Column, PageBean, ResultBean } from '@business/entity/grid';
+import { Organization, OrganizationSensorUnit } from '@business/entity/data';
 import { Component, OnInit } from '@angular/core';
 import { Subject } from 'rxjs/Subject';
 import { Types } from '@business/enum/types.enum';
@@ -95,6 +95,7 @@
     private router: Router,
     private sensorsService: SensorsService,
     private alarmConfigService: AlarmConfigService,
+    private http: _HttpClient
   ) {}
 
   ngOnInit() {
@@ -210,7 +211,7 @@
      }
      this.load();
   }
-  config(row) {
+   configAlarm(row) {
         // ������������������ExpressionChangedAfterItHasBeenCheckedError
         setTimeout(() => {
           this.grid.loading = true;
@@ -219,15 +220,49 @@
       this.sensorsService.getPagingList({pageIndex: 0, pageSize: 0}, null),
       this.alarmConfigService.getByOid( row.id )
     ).subscribe(([pageBean, resultBean]) => {
-      console.log(pageBean);
       this.grid.loading = false;
       this.organizationService.handle = 'config' ;
       this.organizationService.data = row;
       this.organizationService.config = {pageBean, resultBean};
-      this.organizationService.title = '������������';
+      this.organizationService.title = '������������������';
     });
   }
-  
+    configScreenLayout(row) {
+              // ������������������ExpressionChangedAfterItHasBeenCheckedError
+              setTimeout(() => {
+                this.grid.loading = true;
+                }, 1);
+              this.http.get('org-layout/rtd-config', {orgId: row.id}).subscribe(
+                   (res: ResultBean<any>) => {
+                      if ( res.code > 0 ) {
+                        this.grid.loading = false;
+                        this.organizationService.handle = 'screen' ;
+                        this.organizationService.data = row;
+                        this.organizationService.config['resultBean'] = res;
+                        console.log(res);
+                        this.organizationService.title = '������������������';
+                      }
+                   }
+              );
+    }
+    configShowUnit(row) {
+        // ������������������ExpressionChangedAfterItHasBeenCheckedError
+        setTimeout(() => {
+          this.grid.loading = true;
+          }, 1);
+        this.http.get('org-sunit/gets-byoid', {orgId: row.id}).subscribe(
+             (res: ResultBean<any>) => {
+                if ( res.code > 0 ) {
+                  this.grid.loading = false;
+                  this.organizationService.handle = 'unit' ;
+                  this.organizationService.data = row;
+                  this.organizationService.config['resultBean'] = res;
+                  console.log(res);
+                  this.organizationService.title = '������������������';
+                }
+             }
+        );
+    }
   registration(row) {
       sessionStorage.setItem('organization', JSON.stringify(row));
   }
diff --git a/src/app/routes/systems/organization/organization.component.html b/src/app/routes/systems/organization/organization.component.html
index eb4b3db..8e39e35 100644
--- a/src/app/routes/systems/organization/organization.component.html
+++ b/src/app/routes/systems/organization/organization.component.html
@@ -5,6 +5,8 @@
         <ng-template #body>
             <app-organization-list *ngIf="organizationService.handle=='list'"></app-organization-list>
             <app-organization-config *ngIf="organizationService.handle=='config'"></app-organization-config>
+            <app-organization-config-screen *ngIf="organizationService.handle=='screen'"></app-organization-config-screen>
+            <app-organization-config-unit *ngIf="organizationService.handle=='unit'"></app-organization-config-unit>
         </ng-template>
 </nz-card>
   
diff --git a/src/app/routes/systems/systems.module.ts b/src/app/routes/systems/systems.module.ts
index dd8ad35..e3e7ba5 100644
--- a/src/app/routes/systems/systems.module.ts
+++ b/src/app/routes/systems/systems.module.ts
@@ -18,6 +18,8 @@
 import { RegistrationComponent } from './registration/registration.component';
 import { SensorsService } from '@business/services/http/sensors.service';
 import { BusinessModule } from '@business/business.module';
+import { OrganizationConfigScreenComponent } from './organization/organization-config-screen/organization-config-screen.component';
+import { OrganizationConfigUnitComponent } from './organization/organization-config-unit/organization-config-unit.component';
 
 const routes: Routes = [
   {
@@ -48,6 +50,8 @@
     OrganizationComponent,
     OrganizationConfigComponent,
     OrganizationListComponent,
+    OrganizationConfigScreenComponent,
+    OrganizationConfigUnitComponent,
     RegistrationComponent
   ],
   providers: [ToolsService, SensorsService, OrganizationService, _HttpClient, FormBuilder, AreacodeService],

--
Gitblit v1.8.0