From 55da782025f5728051fea9fff49f9e6b6f602a1e Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Thu, 28 Dec 2017 17:31:15 +0800
Subject: [PATCH] 设备信息模块

---
 src/app/routes/devices/devices.module.ts                              |    8 
 src/app/app.module.ts                                                 |    1 
 src/app/shared/shared.module.ts                                       |   10 ++
 src/app/core/i18n/i18n.service.ts                                     |    4 
 src/app/routes/devices/version/version.component.ts                   |   97 ++++++++++++------
 /dev/null                                                             |   15 ---
 src/app/routes/devices/version/version.service.ts                     |   20 ++--
 src/app/routes/devices/version/add-or-edit/add-or-edit.component.html |   48 +++++++++
 src/app/core/entity/grid.ts                                           |   15 +-
 src/app/core/services/example.service.ts                              |    9 -
 src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts   |   48 +++++++++
 src/app/routes/devices/version/version.component.html                 |   14 ++
 src/app/core/pipe/tyep-handle.pipe.ts                                 |   10 +-
 13 files changed, 208 insertions(+), 91 deletions(-)

diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 2d1fc5b..5aeeadf 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -4,7 +4,6 @@
 import { TranslateModule, TranslateLoader, TranslateService } from '@ngx-translate/core';
 import { TranslateHttpLoader } from '@ngx-translate/http-loader';
 import { HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
-
 import { CoreModule } from './core/core.module';
 import { SharedModule } from './shared/shared.module';
 import { AppComponent } from './app.component';
diff --git a/src/app/core/entity/grid.ts b/src/app/core/entity/grid.ts
index b96a8dd..a66711d 100644
--- a/src/app/core/entity/grid.ts
+++ b/src/app/core/entity/grid.ts
@@ -3,7 +3,6 @@
 export interface Column {
    text?: string;
    name?: string;
-   value?: any;
    width?: string;
    sort?: boolean;
    type?: DataType;
@@ -18,13 +17,13 @@
     pageSize?: number ; // ���������������
     total?: number;
     data?: any[];
-    queryParams?: string;    
+    queryParams?: string;
 }
-export class Grid implements PageBean {
+export class Grid<T> implements PageBean {
     title = '';
     pageIndex = 0; // ������
     pageSize = 10; // ������������������
-    data: any[] = [];
+    data: T[] = [];
     total = 0;
     queryParams = '';   
     pages = 0; // ���������
@@ -38,7 +37,7 @@
     
     checkAll(value: boolean) {
         this.data.forEach(
-            row => {row.checked = value; }
+            row => {row['checked'] = value; }
         ); 
         this.refreshStatus();
     }
@@ -57,11 +56,11 @@
     }
     refreshStatus() {
         const data = this.data;
-        const allChecked =   data.every(value => value.checked);
-        const allUnChecked = data.every(value => !value.checked);
+        const allChecked =   data.every(value => value['checked']);
+        const allUnChecked = data.every(value => !value['checked']);
         this.allChecked = allChecked;
         this.indeterminate = (!allChecked) && (!allUnChecked);
-        this.selectedIndexs = data.filter(value => value.checked).map(
+        this.selectedIndexs = data.filter(value => value['checked']).map(
             row => {
                return row['index'] != null ? row['index'] : 0;
             }
diff --git a/src/app/core/i18n/i18n.service.ts b/src/app/core/i18n/i18n.service.ts
index e046d53..9e8fc05 100644
--- a/src/app/core/i18n/i18n.service.ts
+++ b/src/app/core/i18n/i18n.service.ts
@@ -11,8 +11,8 @@
     private _default = 'en';
 
     private _langs = [
-        { code: 'en', text: 'English' },
-        { code: 'zh-CN', text: '������' }
+        { code: 'zh-CN', text: '������' },
+        { code: 'en', text: 'English' }
     ];
 
     constructor(settings: SettingsService,
diff --git a/src/app/core/pipe/tyep-handle.pipe.ts b/src/app/core/pipe/tyep-handle.pipe.ts
index 876b401..a9a8ab3 100644
--- a/src/app/core/pipe/tyep-handle.pipe.ts
+++ b/src/app/core/pipe/tyep-handle.pipe.ts
@@ -19,15 +19,15 @@
   transform(value: any, col?: Column): any {
        const t = Types.Date;
        const type  = col.type;
-       if(type!=null&&type.name!=null){
-         value = this.transformHandle(value,type.name,type.format);
+       if (type != null && type.name != null) {
+         value = this.transformHandle(value, type.name, type.format);
        }
        return value;
   }
-  private transformHandle(value:any,type: Types,format:any):any{
-        switch(type){
+  private transformHandle(value: any, type: Types, format: any): any{
+        switch (type) {
            case Types.Date:
-           return this.dateService.date_format(value,format);
+           return this.dateService.date_format(value, format);
         }
   }
 }
\ No newline at end of file
diff --git a/src/app/core/services/example.service.ts b/src/app/core/services/example.service.ts
index 823a581..9d32660 100644
--- a/src/app/core/services/example.service.ts
+++ b/src/app/core/services/example.service.ts
@@ -1,23 +1,22 @@
 
 import { Injectable } from '@angular/core';
-import { Column } from '@core/entity/grid';
 
 export class  Criteria{
-    private static CONDITION_SPLIT = "||";
+    private static CONDITION_SPLIT = '||';
      private conditions: string[] = [];
      public getConditions(): string[]{
        return this.conditions;
      }
 
      public addCondition(condition: string,colName:string,...values: any[]){
-        const split = Criteria.CONDITION_SPLIT;//'||'
+        const split = Criteria.CONDITION_SPLIT; // '||'
         this.conditions.push(condition+split+colName+split+ values.join(split));
      }
-     public andLike(col:Column): Criteria{
+     public andLike(col: { name: string, value: any}): Criteria{
          this.addCondition('andLike',col.name,col.value);
          return this;
      }
-     public andEqualTo(col:Column): Criteria{
+     public andEqualTo(col: { name: string, value: any}): Criteria{
         this.addCondition('andEqualTo',col.name,col.value);
         return this;
      }
diff --git a/src/app/routes/devices/devices.module.ts b/src/app/routes/devices/devices.module.ts
index efa7913..3e17229 100644
--- a/src/app/routes/devices/devices.module.ts
+++ b/src/app/routes/devices/devices.module.ts
@@ -12,6 +12,7 @@
 import { _HttpClient } from '@delon/theme/services/http/http.client';
 import { AddOrEditComponent } from './version/add-or-edit/add-or-edit.component';
 import { PipeModule } from '@core/pipe/pipe.module';
+import { FormBuilder } from '@angular/forms';
 
 const COMPONENTS_NOROUNT = [ AddOrEditComponent ];
 
@@ -28,7 +29,7 @@
 
 @NgModule({
   imports: [
-    //������������������������������������
+    // ������������������������������������
     PipeModule,
     CommonModule,
     SharedModule,
@@ -38,10 +39,9 @@
     BasicInfoComponent,
     VersionComponent,
     MonitorPointComponent,
-    ...COMPONENTS_NOROUNT,
-    AddOrEditComponent
+    ...COMPONENTS_NOROUNT
   ],
-  providers: [ToolsService, VersionService, _HttpClient],
+  providers: [ToolsService, VersionService, _HttpClient, FormBuilder],
   entryComponents: COMPONENTS_NOROUNT
 })
 export class DevicesModule { }
diff --git a/src/app/routes/devices/version/add-or-edit/add-or-edit.component.html b/src/app/routes/devices/version/add-or-edit/add-or-edit.component.html
index 3ded8dc..fb9bb87 100644
--- a/src/app/routes/devices/version/add-or-edit/add-or-edit.component.html
+++ b/src/app/routes/devices/version/add-or-edit/add-or-edit.component.html
@@ -1,3 +1,45 @@
-<p>
-  add-or-edit works!
-</p>
+<div class="modal-header">
+  <div class="modal-title">{{ data.id != null ? '������' : '������'}} - ������������</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]="4" [nzXs]="24">
+          <label nz-form-item-required>{{ cols.name.text }}</label>
+    </div>
+    <div nz-form-control nz-col [nzSpan]="6" nzHasFeedback>
+      <input nz-input formControlName="{{ cols.name.name }}" maxlength="20" />
+    </div>
+    <div nz-form-label nz-col [nzSpan]="4">
+      <label nz-form-item-required>
+        {{ cols.version.text }}
+      </label>
+    </div>
+     <div nz-form-control nz-col [nzSpan]="3" nzHasFeedback>
+         <nz-input-number formControlName="{{ cols.version.name }}" [nzMin]="1" [nzMax]="100" [nzStep]="1">
+         </nz-input-number>
+    </div>
+  </div> 
+  <div nz-form-item nz-row class="mb-sm">
+      <div nz-form-label nz-col [nzSm]="4" [nzXs]="24">
+            <label nz-form-item-required>{{ cols.createTime.text }}</label>
+      </div>
+      <div nz-form-control nz-col [nzSpan]="6" nzHasFeedback>
+        <nz-datepicker   formControlName="{{ cols.createTime.name }}" nzShowTime  [nzPlaceHolder]="'������������'"
+        [nzFormat]="'YYYY-MM-DD HH:mm:ss'" ></nz-datepicker>
+      </div>
+      <div nz-form-label nz-col [nzSpan]="4">
+        <label>{{ cols.description.text }}</label>
+      </div>
+       <div nz-form-control nz-col [nzSpan]="8" nzHasFeedback>
+        <input nz-input formControlName="{{ cols.description.name }}" maxlength="20" />
+      </div>
+    </div>
+    <div class="modal-footer">
+        <button nz-button type="button" (click)="close()">������</button>
+        <button nz-button [nzType]="'primary'" [nzLoading]="isSaving">               
+               <span >
+                  ������<span *ngIf="isSaving" >���</span>
+               </span>
+        </button>
+    </div>
+</form>
\ No newline at end of file
diff --git a/src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts b/src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts
index ca244f8..b875876 100644
--- a/src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts
+++ b/src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts
@@ -1,4 +1,9 @@
+import { DeviceVersion } from './../version.component';
 import { Component, OnInit } from '@angular/core';
+import { HttpClient } from '@angular/common/http';
+import { NzMessageService, NzModalSubject } from 'ng-zorro-antd';
+import { DateService } from '@core/services/date.service';
+import { FormGroup, FormBuilder, Validators } from '@angular/forms';
 
 @Component({
   selector: 'app-add-or-edit',
@@ -6,10 +11,49 @@
   styles: []
 })
 export class AddOrEditComponent implements OnInit {
+ 
+  cols: DeviceVersion;
 
-  constructor() { }
+  data: DeviceVersion;
+  isSaving = false;
+  validateForm: FormGroup;
+  constructor(    
+    private subject: NzModalSubject,
+    private formBuilder: FormBuilder
+    ) { }
 
   ngOnInit() {
+     const validates: DeviceVersion = {
+          name: [this.data.name, [Validators.required] ],
+          version: [this.data.version == null ? 1 : this.data.version, [Validators.required] ],
+          createTime: [this.data.createTime, [Validators.required] ],
+          description: [this.data.description, [Validators.required] ]
+     };
+     this.validateForm = this.formBuilder.group(
+      validates
+     );
   }
-
+  close() {
+       this.subject.destroy();
+  }
+  save($event, value, valid) {
+      $event.preventDefault();
+      if (valid) {
+        for (const i in this.validateForm.controls) {
+          this.validateForm.controls[ i ].disable();
+        } 
+        this.isSaving = true;
+        this.data = value;
+        this.subject.next( this );
+      }else {
+          for (const i in this.validateForm.controls) {
+          this.validateForm.controls[ i ].markAsDirty();
+         } 
+      }
+  }
+  validate() {
+     for (const i in this.validateForm.controls) {
+       this.validateForm.controls[ i ].markAsDirty();
+     }
+  }
 }
diff --git a/src/app/routes/devices/version/version.component.html b/src/app/routes/devices/version/version.component.html
index 9dc93f3..69d1282 100644
--- a/src/app/routes/devices/version/version.component.html
+++ b/src/app/routes/devices/version/version.component.html
@@ -1,11 +1,11 @@
 <pro-header [title]="grid.title"></pro-header>
 <nz-card [nzBordered]="false">
     	<div class="mb-md">
-                <button nz-button (click)="add()" [nzType]="'primary'" [nzSize]="'large'">
+                <button nz-button (click)="addOrModify()" [nzType]="'primary'" [nzSize]="'large'">
                     <i class="anticon anticon-plus"></i><span>������</span>
                 </button>
                 <ng-container *ngIf="grid.selectedIndexs.length > 0"> &nbsp;
-                <button nz-button [nzSize]="'large'" (click)="remove()">������������</button>
+                <button nz-button [nzSize]="'large'" (click)="deleteSelected()">������������</button>
                 </ng-container>
                 <nz-input [ngStyle]="{'width': '280px','float':'right'}" [(ngModel)]="queryMap.value" name=""  [nzPlaceHolder]="queryMap.text"
                 (keyup)="queryTextChanged($event)" (change)="queryTextChanged($event)" ></nz-input>
@@ -22,7 +22,7 @@
               [nzTotal]="grid.total"
               [(nzPageIndex)]="grid.pageIndex"
               [(nzPageSize)]="grid.pageSize"
-              [nzLoading]="http.loading"
+              [nzLoading]="versionService.loading"
               [nzShowTotal]="true"
               (nzPageIndexChange)="load()"
               (nzDataChange)="dataChange($event)">
@@ -35,6 +35,7 @@
                      [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}" >
                            <span>{{ col.text }}</span>
                     </th>
+                    <th nz-th><span>������</span></th>
                   </tr>
               </thead>
               <tbody nz-tbody>
@@ -50,6 +51,13 @@
                              <!-- ������������������������������������ -->        
                         </span>
                     </td>
+                    <td nz-td>
+                            <a (click)="addOrModify(row)">������</a>
+                            <span nz-table-divider></span>
+                              <nz-popconfirm [nzTitle]="'���������������������������?'" [nzOkText]="'Yes'" [nzCancelText]="'No'" (nzOnConfirm)="delete(row.id)" >
+                                <a nz-popconfirm>������</a>
+                              </nz-popconfirm>
+                     </td>
                 </tr>
               </tbody>
               </nz-table>
diff --git a/src/app/routes/devices/version/version.component.ts b/src/app/routes/devices/version/version.component.ts
index 72fddc4..b6f9849 100644
--- a/src/app/routes/devices/version/version.component.ts
+++ b/src/app/routes/devices/version/version.component.ts
@@ -1,8 +1,10 @@
+import { DataType } from './../../../core/entity/grid';
+import { AddOrEditComponent } from './add-or-edit/add-or-edit.component';
+import { Version } from '@angular/compiler/src/util';
 import { Subject } from 'rxjs/Subject';
-import '../../../rxjs-operators';
 import { ToolsService } from '@core/services/tools.service';
 import { Component, OnInit } from '@angular/core';
-import { NzMessageService } from 'ng-zorro-antd';
+import { NzMessageService, NzModalService } from 'ng-zorro-antd';
 import { ModalHelper } from '@delon/theme';
 import { HttpClient } from '@angular/common/http';
 import { environment } from '../../../../environments/environment';
@@ -11,12 +13,12 @@
 import { Types } from '@core/enum/types.enum';
 import { Column, Grid, PageBean } from '@core/entity/grid';
 
-interface DeviceVersion {
-  createTime: Column;
-  description: Column;
-  id?: Column;
-  name: Column;
-  version: Column;
+export interface DeviceVersion {
+  createTime?: Column|any;
+  description?: Column|any;
+  id?: Column|any;
+  name?: Column|any;
+  version?: Column|any;
 }
 @Component({
   selector: 'app-version',
@@ -24,23 +26,23 @@
   styles: []
 })
 export class VersionComponent implements OnInit {
-
-  grid: Grid = new Grid(null);
+  private version: DeviceVersion;
+  grid: Grid<DeviceVersion> = new Grid(null);
   queryMap = { text: '������������������������', value: ''};
   queryTextStream: Subject<string> = new Subject<string>();
     private initPage() {
-    const columns: DeviceVersion = {
+    this.version = {
        name: {
         text: '������',
-        width: '22%'
+        width: '18%'
        },
        version: {
         text: '������',
-        width: '22%'
+        width: '18%'
       },
       createTime: {
           text: '������������',
-          width: '22%',
+          width: '18%',
           type: {
             name: Types.Date,
             format: 'YYYY-MM-DD HH:mm:ss'
@@ -48,20 +50,20 @@
       },
       description: {
           text: '������',
-          width: '22%'
+          width: '18%'
       }
     };
     this.grid.title = '������������';
-    this.grid.setColumns(columns);
+    this.grid.setColumns(this.version);
     this.grid.pageSize = 10;
   }
   constructor(
-    public http: HttpClient,
     private versionService: VersionService,
-    public dateSrv: DateService,
+    
+    private confirmServ: NzModalService,
     public msgSrv: NzMessageService,
     private modalHelper: ModalHelper,
-    private toolsService: ToolsService) {}
+  ) {}
 
   ngOnInit() {
     this.initPage();
@@ -95,24 +97,53 @@
     //   this.msgSrv.success('���������������������������');
     // });
   }
-
-  add() {
-    // const user = {};
-    // this.modalHelper.static(VersionEditComponent, { user }).subscribe(() => {
-    //   this.load(true);
-    //   this.msgSrv.success('���������������������������');
-    // });
-  }
-
-  delete(user) {
-    this.http.delete(environment.SERVER_BASH_URL + '/user/operate_user/' + user.id).subscribe((res: any) => {
-      this.msgSrv.success('���������������������������');
-      this.load(true);
+// rowData���null���������������
+  addOrModify(data) {
+    if ( data == null) {
+       data = {};
+    }
+    const cols = this.version;
+    this.modalHelper.static(AddOrEditComponent, { cols , data }).subscribe( 
+      ( ret: { data: any, close: Function} ) => {
+      this.versionService.save(ret.data).subscribe(
+         ( res: any) => {
+            if (res.code === 1) {
+              this.load(true);
+              ret.close();
+              this.msgSrv.success('���������������������������');
+            }
+         }
+      );
     });
   }
 
-  remove() {
+  delete(...id: number[]) {
+    this.versionService.delete( ...id ).subscribe(
+      ( res: any) => {
+         if (res.code === 1) {
+           this.load(true);
+           this.msgSrv.success('���������������������������');
+         }
+      }
+   );
+  }
 
+   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) => {
+                  return Number.parseInt(this.grid.data[index].id);
+              }
+          );
+          this.delete( ...ids );
+       }
+    });
   }
 
 
diff --git a/src/app/routes/devices/version/version.service.ts b/src/app/routes/devices/version/version.service.ts
index 43988c2..4b14382 100644
--- a/src/app/routes/devices/version/version.service.ts
+++ b/src/app/routes/devices/version/version.service.ts
@@ -1,4 +1,3 @@
-import { DeviceVersion } from './version.service';
 import { ExampleService } from './../../../core/services/example.service';
 import { _HttpClient } from '@delon/theme';
 import { environment } from './../../../../environments/environment.prod';
@@ -9,19 +8,14 @@
 import {  PageBean } from '@core/entity/grid';
 
 
-export interface DeviceVersion {
-  createTime?: any;
-  description?: string;
-  id?: number;
-  name?: string;
-  version?: number;
-}
-
 @Injectable()
 export class VersionService {
   private urls = {
-      edit: environment.SERVER_BASH_URL + '/device-version/page-list'
+      edit: environment.SERVER_BASH_URL + '/device-version/page-list',
+      save: environment.SERVER_BASH_URL + '/device-version/add-or-modify',
+      delete: environment.SERVER_BASH_URL + '/device-version/delete-by-ids'
   };
+  public loading = this.http.loading;
   constructor(private http: _HttpClient) { }
    public getPagingList(page: PageBean, queryText: string): Observable<PageBean> {
     const example = new ExampleService();
@@ -32,4 +26,10 @@
     const param: PageBean = {pageSize: page.pageSize, pageIndex: page.pageIndex, queryParams: example.getSqlParam()};
     return this.http.get(this.urls.edit, param);
   }
+  public save(data: any): Observable<any> {
+        return this.http.post(this.urls.save, data);
+  }
+  public delete(...ids: number[]): Observable<any> {             
+        return this.http.post(this.urls.delete, ids);
+  }
 }
diff --git a/src/app/rxjs-operators.ts b/src/app/rxjs-operators.ts
deleted file mode 100644
index b1105b7..0000000
--- a/src/app/rxjs-operators.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-// import 'rxjs/Rx'; // adds ALL RxJS statics & operators to Observable
-
-// See node_module/rxjs/Rxjs.js
-// Import just the rxjs statics and operators we need for THIS app.
-
-// Statics
-import 'rxjs/add/observable/throw';
-
-// Operators
-import 'rxjs/add/operator/catch';
-import 'rxjs/add/operator/debounceTime';
-import 'rxjs/add/operator/distinctUntilChanged';
-import 'rxjs/add/operator/map';
-import 'rxjs/add/operator/switchMap';
-import 'rxjs/add/operator/toPromise';
diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts
index 532f5c9..d2f88eb 100644
--- a/src/app/shared/shared.module.ts
+++ b/src/app/shared/shared.module.ts
@@ -17,6 +17,16 @@
 import { I18NService } from '@core/i18n/i18n.service';
 
 // region: zorro modules
+// Statics
+import 'rxjs/add/observable/throw';
+
+// Operators
+import 'rxjs/add/operator/catch';
+import 'rxjs/add/operator/debounceTime';
+import 'rxjs/add/operator/distinctUntilChanged';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/switchMap';
+import 'rxjs/add/operator/toPromise';
 
 import {
     // LoggerModule,

--
Gitblit v1.8.0