From f01d6b7e6bf8132524c1c2821fdcbbc5ca548369 Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Fri, 29 Dec 2017 16:57:22 +0800 Subject: [PATCH] 设备型号完成 --- src/app/routes/devices/version/version.service.ts | 4 +- src/app/routes/devices/version/add-or-edit/add-or-edit.component.html | 6 +- src/app/core/entity/grid.ts | 22 +++++++++-- src/app/routes/devices/version/add-or-edit/add-or-edit.component.ts | 16 +++++++ src/app/core/enum/types.enum.ts | 2 src/app/routes/devices/version/version.component.html | 6 +- src/app/shared/shared.module.ts | 1 src/app/routes/devices/version/version.component.ts | 53 +++++++++++++++----------- 8 files changed, 73 insertions(+), 37 deletions(-) diff --git a/src/app/core/entity/grid.ts b/src/app/core/entity/grid.ts index a66711d..4567923 100644 --- a/src/app/core/entity/grid.ts +++ b/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; } diff --git a/src/app/core/enum/types.enum.ts b/src/app/core/enum/types.enum.ts index e030afe..3fc5a08 100644 --- a/src/app/core/enum/types.enum.ts +++ b/src/app/core/enum/types.enum.ts @@ -1,3 +1,3 @@ export enum Types { - Date, json + Date, Json } 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 fb9bb87..7f8f399 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 @@ -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"> 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 b875876..4e61d6d 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 @@ -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) { diff --git a/src/app/routes/devices/version/version.component.html b/src/app/routes/devices/version/version.component.html index 69d1282..ba633d3 100644 --- a/src/app/routes/devices/version/version.component.html +++ b/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> diff --git a/src/app/routes/devices/version/version.component.ts b/src/app/routes/devices/version/version.component.ts index b6f9849..d8fcc2d 100644 --- a/src/app/routes/devices/version/version.component.ts +++ b/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[]) { diff --git a/src/app/routes/devices/version/version.service.ts b/src/app/routes/devices/version/version.service.ts index 4b14382..d0e65eb 100644 --- a/src/app/routes/devices/version/version.service.ts +++ b/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> { diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index d2f88eb..7bf1fa4 100644 --- a/src/app/shared/shared.module.ts +++ b/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, -- Gitblit v1.8.0