fengxiang
2017-12-29 f01d6b7e6bf8132524c1c2821fdcbbc5ca548369
设备型号完成
8 files modified
110 ■■■■■ changed files
src/app/core/entity/grid.ts 22 ●●●● patch | view | raw | blame | history
src/app/core/enum/types.enum.ts 2 ●●● patch | view | raw | blame | history
src/app/routes/devices/version/add-or-edit/add-or-edit.component.html 6 ●●●● patch | view | raw | blame | history
src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts 16 ●●●●● patch | view | raw | blame | history
src/app/routes/devices/version/version.component.html 6 ●●●● patch | view | raw | blame | history
src/app/routes/devices/version/version.component.ts 53 ●●●●● patch | view | raw | blame | history
src/app/routes/devices/version/version.service.ts 4 ●●●● patch | view | raw | blame | history
src/app/shared/shared.module.ts 1 ●●●● patch | view | raw | blame | history
src/app/core/entity/grid.ts
@@ -1,10 +1,11 @@
import { Type } from '@angular/core';
import { Column } from '@core/entity/grid';
import { Types } from '@core/enum/types.enum';
export interface Column {
   text?: string;
   name?: string;
   width?: string;
   sort?: boolean;
   sort?: string;
   isSort?: boolean;
   type?: DataType;
}
export interface DataType {
@@ -18,8 +19,21 @@
    total?: number;
    data?: any[];
    queryParams?: string;
    orderByClause?: string;
    getOrderByClause ?(): string;
}
export class Grid<T> implements PageBean {
    getOrderByClause(): string {
        const orderby = this.sorts.map( (fn) => {
          return this.columns.find( (col: Column) => {
                 return fn === col.name;
           } );
        }).map( (col: Column) => {
            const sort = col.sort.startsWith('asc') ? 'asc' : 'desc' ;
            return col.name + '||' + sort;
        }).join('|||');
        return  encodeURI(orderby);
    }
    title = '';
    pageIndex = 0; // 页码
    pageSize = 10; // 每页几行数据
@@ -27,14 +41,14 @@
    total = 0;
    queryParams = '';   
    pages = 0; // 总页数
    queryMap?: any = {};
    size  = 0;  // 当前页数据条数
    sorts?: any[] = [];
    loading = false;
    indeterminate = false;
    allChecked = false;
    selectedIndexs?: number[] = []; // 被选中序列号
    columns?: Column[] = [];    
    checkAll(value: boolean) {
        this.data.forEach(
            row => {row['checked'] = value; }
src/app/core/enum/types.enum.ts
@@ -1,3 +1,3 @@
export enum Types {
    Date, json
    Date, Json
}
src/app/routes/devices/version/add-or-edit/add-or-edit.component.html
@@ -6,7 +6,7 @@
    <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>
    <div nz-form-control nz-col [nzSpan]="7" nzHasFeedback>
      <input nz-input formControlName="{{ cols.name.name }}" maxlength="20" />
    </div>
    <div nz-form-label nz-col [nzSpan]="4">
@@ -23,8 +23,8 @@
      <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]="'选择时间'"
      <div nz-form-control nz-col [nzSpan]="7" nzHasFeedback>
        <nz-datepicker nzSize="large"  style="width: 90%;" formControlName="{{ cols.createTime.name }}" nzShowTime  [nzPlaceHolder]="'选择时间'"
        [nzFormat]="'YYYY-MM-DD HH:mm:ss'" ></nz-datepicker>
      </div>
      <div nz-form-label nz-col [nzSpan]="4">
src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts
@@ -42,8 +42,22 @@
        for (const i in this.validateForm.controls) {
          this.validateForm.controls[ i ].disable();
        } 
       const isModified =  Object.keys(value).some(
          (key: string) => {
              return this.data[key] !== value[key];
          }
        );
        // 未作修改
        if (!isModified) {
          this.close();
          return;
        }
        this.isSaving = true;
        this.data = value;
        Object.keys(this.data).forEach( (key: string) => {
              if ( value[key] != null ) {
                   this.data[key] = value[key];
              }
        } );
        this.subject.next( this );
      }else {
          for (const i in this.validateForm.controls) {
src/app/routes/devices/version/version.component.html
@@ -22,10 +22,9 @@
              [nzTotal]="grid.total"
              [(nzPageIndex)]="grid.pageIndex"
              [(nzPageSize)]="grid.pageSize"
              [nzLoading]="versionService.loading"
              [nzLoading]="grid.loading"
              [nzShowTotal]="true"
              (nzPageIndexChange)="load()"
              (nzDataChange)="dataChange($event)">
              (nzPageIndexChange)="load()">
              <thead nz-thead>
                  <tr>
                    <th nz-th [nzCheckbox]="true">
@@ -34,6 +33,7 @@
                    <th nz-th *ngFor="let col of grid.columns"
                     [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}" >
                           <span>{{ col.text }}</span>
                           <nz-table-sort *ngIf="col.isSort"   [(nzValue)]="col.sort" (nzValueChange)="sort(col.name,$event)"></nz-table-sort>
                    </th>
                    <th nz-th><span>操作</span></th>
                  </tr>
src/app/routes/devices/version/version.component.ts
@@ -12,6 +12,7 @@
import { VersionService } from 'app/routes/devices/version/version.service';
import { Types } from '@core/enum/types.enum';
import { Column, Grid, PageBean } from '@core/entity/grid';
import { filter } from 'rxjs/operators/filter';
export interface DeviceVersion {
  createTime?: Column|any;
@@ -38,7 +39,8 @@
       },
       version: {
        text: '型号',
        width: '18%'
        width: '18%',
        isSort: true
      },
      createTime: {
          text: '创建时间',
@@ -46,7 +48,8 @@
          type: {
            name: Types.Date,
            format: 'YYYY-MM-DD HH:mm:ss'
          }
          },
          isSort: true
      },
      description: {
          text: '备注',
@@ -77,26 +80,28 @@
  queryTextChanged($event) {
      this.queryTextStream.next(this.queryMap.value);
  }
  load(reload: boolean = false) {
  load(reload: boolean = false) {
    if (reload) {
      this.grid.pageIndex = 1 ;
    }
    // 延时加载避免ExpressionChangedAfterItHasBeenCheckedError
    setTimeout(() => {
      this.grid.loading = true;
     }, 1);
    this.versionService.getPagingList(this.grid, this.queryMap.value).subscribe(
       (res: PageBean) => {
            this.grid.loading = true;
            if (res != null && res.data != null) {
              this.grid.initData(res);
              this.grid.refreshStatus();
              setTimeout(() => {
                this.grid.loading = false;
               }, 1);
            }
       }
    );
  }
  edit() {
    // this.modalHelper.static(VersionEditComponent, { user }).subscribe(() => {
    //   this.load(true);
    //   this.msgSrv.success('安装用户修改成功!');
    // });
  }
// rowData为null时,为新增
  addOrModify(data) {
    if ( data == null) {
@@ -108,7 +113,7 @@
      this.versionService.save(ret.data).subscribe(
         ( res: any) => {
            if (res.code === 1) {
              this.load(true);
              this.load();
              ret.close();
              this.msgSrv.success('设备型号保存成功!');
            }
@@ -121,7 +126,7 @@
    this.versionService.delete( ...id ).subscribe(
      ( res: any) => {
         if (res.code === 1) {
           this.load(true);
           this.load();
           this.msgSrv.success('设备型号删除成功!');
         }
      }
@@ -138,24 +143,26 @@
       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);
                  const id = this.grid.data[index].id;
                  return Number.parseInt(id);
              }
          );
          this.delete( ...ids );
       }
    });
  }
  dataChange(res: any) {
  }
  sort(field: string, value: any) {
    // this.sortMap = {};
    // this.sortMap[field] = value;
    // this.q.sorter = value ? `${field}_${value}` : '';
    // this.load(true);
  sort(field: string, value: string) {
    // 删除当前field
    this.grid.sorts = this.grid.sorts.filter(
       (fn: string) => {
          return fn !== field;
       }
     );
     // 如果value不为null,在排序数组最后加上filed
     if ( value != null ) {
        this.grid.sorts.push(field);
     }
     this.load();
  }
  reset(ls: any[]) {
src/app/routes/devices/version/version.service.ts
@@ -15,7 +15,6 @@
      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();
@@ -23,7 +22,8 @@
      example.or().andLike({name: 'name', value: '%' + queryText + '%'});
      example.or().andEqualTo({name: 'version', value: queryText});
    }
    const param: PageBean = {pageSize: page.pageSize, pageIndex: page.pageIndex, queryParams: example.getSqlParam()};
    const param: PageBean = {pageSize: page.pageSize, pageIndex: page.pageIndex,
      queryParams: example.getSqlParam(), orderByClause: page.getOrderByClause()};
    return this.http.get(this.urls.edit, param);
  }
  public save(data: any): Observable<any> {
src/app/shared/shared.module.ts
@@ -27,6 +27,7 @@
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';
import 'rxjs/add/operator/filter';
import {
    // LoggerModule,