11 files added
8 files modified
| | |
| | | .DS_Store |
| | | Thumbs.db |
| | | .angulardoc.json |
| | | yarn.lock |
| | | |
New file |
| | |
| | | import { Type } from '@angular/core'; |
| | | import { Types } from '@core/enum/types.enum'; |
| | | export interface Column { |
| | | text?: string; |
| | | name?: string; |
| | | value?: any; |
| | | width?: string; |
| | | sort?: boolean; |
| | | type?: DataType; |
| | | } |
| | | export interface DataType { |
| | | name: Types; |
| | | format?: any; |
| | | } |
| | | // 作为http来回传递参数 |
| | | export interface PageBean { |
| | | pageIndex?: number ; // 页码 |
| | | pageSize?: number ; // 一页多少条 |
| | | total?: number; |
| | | data?: any[]; |
| | | queryParams?: string; |
| | | } |
| | | export class Grid implements PageBean { |
| | | title = ''; |
| | | pageIndex = 0; // 页码 |
| | | pageSize = 10; // 每页几行数据 |
| | | data: any[] = []; |
| | | total = 0; |
| | | queryParams = ''; |
| | | pages = 0; // 总页数 |
| | | queryMap?: any = {}; |
| | | size = 0; // 当前页数据条数 |
| | | sorts?: any[] = []; |
| | | indeterminate = false; |
| | | allChecked = false; |
| | | selectedIndexs?: number[] = []; // 被选中序列号 |
| | | columns?: Column[] = []; |
| | | |
| | | checkAll(value: boolean) { |
| | | this.data.forEach( |
| | | row => {row.checked = value;} |
| | | ) |
| | | this.refreshStatus(); |
| | | } |
| | | getData():any[]{ |
| | | return this.data; |
| | | } |
| | | initData(pageData: {data?: any[], total?: number}) { |
| | | if ( pageData != null && pageData.data != null) { |
| | | let index = 0; |
| | | this.data = pageData.data.map(row => { |
| | | row['index'] = index++; |
| | | return row; |
| | | }); |
| | | this.total = pageData.total; |
| | | } |
| | | } |
| | | refreshStatus() { |
| | | const data = this.data; |
| | | 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( |
| | | row => { |
| | | return row['index'] != null ? row['index'] : 0; |
| | | } |
| | | ); |
| | | this.selectedIndexs = this.selectedIndexs == null ? [] : this.selectedIndexs; |
| | | } |
| | | constructor(config: object) { |
| | | if (config != null) { |
| | | const keys = Object.getOwnPropertyNames(config); |
| | | for (const index in keys) { |
| | | const key = keys[index]; |
| | | if (this[key] != null) { |
| | | this[key] = config[key]; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | public setColumns(obj: Object) { |
| | | this.columns = this.objectToArray(obj); |
| | | } |
| | | private objectToArray(obj: Object): any[] { |
| | | const arr = []; |
| | | const keys = Object.getOwnPropertyNames(obj); |
| | | for (const index in keys) { |
| | | const key = keys[index]; |
| | | const item = obj[key]; |
| | | if ( item['name'] == null) { |
| | | item['name'] = key; |
| | | } |
| | | arr.push(item); |
| | | } |
| | | return arr; |
| | | } |
| | | } |
New file |
| | |
| | | export enum Types { |
| | | Date,json |
| | | } |
New file |
| | |
| | | import { NgModule } from '@angular/core'; |
| | | import { CommonModule } from '@angular/common'; |
| | | import { TyepHandlePipe } from './tyep-handle.pipe'; |
| | | import { DateService } from '@core/services/date.service'; |
| | | |
| | | @NgModule({ |
| | | imports: [ |
| | | CommonModule |
| | | ], |
| | | declarations: [TyepHandlePipe], |
| | | exports: [TyepHandlePipe], |
| | | providers: [DateService] |
| | | }) |
| | | export class PipeModule { } |
New file |
| | |
| | | import { DatePipe } from '@angular/common/src/pipes/date_pipe'; |
| | | import { Types } from './../enum/types.enum'; |
| | | |
| | | import { Pipe, PipeTransform } from '@angular/core'; |
| | | import { TranslateService } from '@ngx-translate/core'; |
| | | import { NzDatePipe } from 'ng-zorro-antd/src/util/nz-date.pipe'; |
| | | import { DateService } from '@core/services/date.service'; |
| | | import { Column } from '@core/entity/grid'; |
| | | |
| | | |
| | | |
| | | @Pipe({ |
| | | name: 'tyepHandle' |
| | | }) |
| | | export class TyepHandlePipe implements PipeTransform { |
| | | constructor(private dateService: DateService) { |
| | | } |
| | | |
| | | 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); |
| | | } |
| | | return value; |
| | | } |
| | | private transformHandle(value:any,type: Types,format:any):any{ |
| | | switch(type){ |
| | | case Types.Date: |
| | | return this.dateService.date_format(value,format); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | |
| | | import { Injectable } from '@angular/core'; |
| | | import { Column } from '@core/entity/grid'; |
| | | |
| | | export class Criteria{ |
| | | 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;//'||' |
| | | this.conditions.push(condition+split+colName+split+ values.join(split)); |
| | | } |
| | | public andLike(col:Column): Criteria{ |
| | | this.addCondition('andLike',col.name,col.value); |
| | | return this; |
| | | } |
| | | public andEqualTo(col:Column): Criteria{ |
| | | this.addCondition('andEqualTo',col.name,col.value); |
| | | return this; |
| | | } |
| | | } |
| | | |
| | | @Injectable() |
| | | export class ExampleService { |
| | | private static OR_SPLIT = "or|"; |
| | | private static CRITERIA_SPLIT = "|||"; |
| | | private criterion: Criteria[]=[]; |
| | | |
| | | public getSqlParam():string{ |
| | | let whereSql = ''; |
| | | for(let cri of this.criterion){ |
| | | const conditions = cri.getConditions(); |
| | | whereSql += ExampleService.OR_SPLIT+conditions.join(ExampleService.CRITERIA_SPLIT); |
| | | } |
| | | return encodeURI(whereSql); |
| | | } |
| | | constructor() { } |
| | | public or(){ |
| | | const cri = new Criteria(); |
| | | this.criterion.push(cri); |
| | | return cri; |
| | | } |
| | | } |
New file |
| | |
| | | import { Injectable } from '@angular/core'; |
| | | |
| | | @Injectable() |
| | | export class ToolsService { |
| | | |
| | | } |
| | |
| | | |
| | | import { ToolsService } from './../../core/services/tools.service'; |
| | | import { NgModule } from '@angular/core'; |
| | | import { CommonModule } from '@angular/common'; |
| | | import { BasicInfoComponent } from './basic-info/basic-info.component'; |
| | | import { VersionComponent } from './version/version.component'; |
| | | import { MonitorPointComponent } from './monitor-point/monitor-point.component'; |
| | | import {RouterModule, Routes} from '@angular/router'; |
| | | import { SharedModule } from '@shared/shared.module'; |
| | | import { VersionService } from 'app/routes/devices/version/version.service'; |
| | | import { Version } from '@angular/compiler/src/util'; |
| | | 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'; |
| | | |
| | | const COMPONENTS_NOROUNT = [ AddOrEditComponent ]; |
| | | |
| | | const routes: Routes = [ |
| | | { |
| | |
| | | |
| | | @NgModule({ |
| | | imports: [ |
| | | //管道模块必须当前模块导入 |
| | | PipeModule, |
| | | CommonModule, |
| | | SharedModule, |
| | | RouterModule.forChild(routes) |
| | | ], |
| | | declarations: [ |
| | | BasicInfoComponent, |
| | | VersionComponent, |
| | | MonitorPointComponent |
| | | ] |
| | | MonitorPointComponent, |
| | | ...COMPONENTS_NOROUNT, |
| | | AddOrEditComponent |
| | | ], |
| | | providers: [ToolsService, VersionService, _HttpClient], |
| | | entryComponents: COMPONENTS_NOROUNT |
| | | }) |
| | | export class DevicesModule { } |
New file |
| | |
| | | <p> |
| | | add-or-edit works! |
| | | </p> |
New file |
| | |
| | | import { Component, OnInit } from '@angular/core'; |
| | | |
| | | @Component({ |
| | | selector: 'app-add-or-edit', |
| | | templateUrl: './add-or-edit.component.html', |
| | | styles: [] |
| | | }) |
| | | export class AddOrEditComponent implements OnInit { |
| | | |
| | | constructor() { } |
| | | |
| | | ngOnInit() { |
| | | } |
| | | |
| | | } |
| | |
| | | <p> |
| | | version works1! |
| | | </p> |
| | | <pro-header [title]="grid.title"></pro-header> |
| | | <nz-card [nzBordered]="false"> |
| | | <div class="mb-md"> |
| | | <button nz-button (click)="add()" [nzType]="'primary'" [nzSize]="'large'"> |
| | | <i class="anticon anticon-plus"></i><span>新建</span> |
| | | </button> |
| | | <ng-container *ngIf="grid.selectedIndexs.length > 0"> |
| | | <button nz-button [nzSize]="'large'" (click)="remove()">批量删除</button> |
| | | </ng-container> |
| | | <nz-input [ngStyle]="{'width': '280px','float':'right'}" [(ngModel)]="queryMap.value" name="" [nzPlaceHolder]="queryMap.text" |
| | | (change)="queryTextChanged($event)" ></nz-input> |
| | | </div> |
| | | <div class="mb-md"> |
| | | <nz-alert *ngIf="grid.selectedIndexs.length > 0" [nzType]="'info'" [nzShowIcon]="true"> |
| | | <span alert-body> |
| | | 已选择<strong class="text-primary">{{grid.selectedIndexs.length}}</strong>项 |
| | | </span> |
| | | </nz-alert> |
| | | </div> |
| | | <nz-table #nzTable |
| | | [nzAjaxData]="grid.data" |
| | | [nzTotal]="grid.total" |
| | | [(nzPageIndex)]="grid.pageIndex" |
| | | [(nzPageSize)]="grid.pageSize" |
| | | [nzLoading]="http.loading" |
| | | [nzShowTotal]="true" |
| | | (nzPageIndexChange)="load()" |
| | | (nzDataChange)="dataChange($event)"> |
| | | <thead nz-thead> |
| | | <tr> |
| | | <th nz-th [nzCheckbox]="true"> |
| | | <label nz-checkbox [(ngModel)]="grid.allChecked" [nzIndeterminate]="grid.indeterminate" (ngModelChange)="grid.checkAll($event)"></label> |
| | | </th> |
| | | <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> |
| | | </th> |
| | | </tr> |
| | | </thead> |
| | | <tbody nz-tbody> |
| | | <tr nz-tbody-tr *ngFor="let row of nzTable.data"> |
| | | <td nz-td [nzCheckbox]="true"> |
| | | <label nz-checkbox [(ngModel)]="row.checked" (ngModelChange)="grid.refreshStatus($event)"></label> |
| | | </td> |
| | | <td nz-td *ngFor="let col of grid.columns" |
| | | [ngStyle]="{'width':col.width,'text-align':col['align'] === undefined?'left':col.align}"> |
| | | <span [ngSwitch]="col.type"> |
| | | <!-- 要使用管道,无法自动生成 --> |
| | | <span *ngSwitchDefault> {{ row[col.name]|tyepHandle:col }} </span> |
| | | <!-- 要使用管道,无法自动生成 --> |
| | | </span> |
| | | </td> |
| | | </tr> |
| | | </tbody> |
| | | </nz-table> |
| | | </nz-card> |
| | | |
| | |
| | | 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 { ModalHelper } from '@delon/theme'; |
| | | import { HttpClient } from '@angular/common/http'; |
| | | import { environment } from '../../../../environments/environment'; |
| | | import { DateService } from '@core/services/date.service'; |
| | | import { VersionService } from 'app/routes/devices/version/version.service'; |
| | | 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; |
| | | } |
| | | @Component({ |
| | | selector: 'app-version', |
| | | templateUrl: './version.component.html', |
| | |
| | | }) |
| | | export class VersionComponent implements OnInit { |
| | | |
| | | constructor() { } |
| | | grid: Grid = new Grid(null); |
| | | queryMap = { text: '请输入名称或型号', value: ''}; |
| | | queryTextStream: Subject<string> = new Subject<string>(); |
| | | private initPage() { |
| | | const columns: DeviceVersion = { |
| | | name: { |
| | | text: '名称', |
| | | width: '22%' |
| | | }, |
| | | version: { |
| | | text: '型号', |
| | | width: '22%' |
| | | }, |
| | | createTime: { |
| | | text: '创建时间', |
| | | width: '22%', |
| | | type: { |
| | | name: Types.Date, |
| | | format: 'YYYY-MM-DD HH:mm:ss' |
| | | } |
| | | }, |
| | | description: { |
| | | text: '备注', |
| | | width: '22%' |
| | | } |
| | | }; |
| | | this.grid.title = '设备型号'; |
| | | this.grid.setColumns(columns); |
| | | this.grid.pageSize = 10; |
| | | } |
| | | constructor( |
| | | public http: HttpClient, |
| | | private versionService: VersionService, |
| | | public dateSrv: DateService, |
| | | public msgSrv: NzMessageService, |
| | | private modalHelper: ModalHelper, |
| | | private toolsService: ToolsService) {} |
| | | |
| | | ngOnInit() { |
| | | this.initPage(); |
| | | this.queryTextStream |
| | | .debounceTime(1000) |
| | | .distinctUntilChanged() |
| | | .subscribe(queryText => { |
| | | this.load(); |
| | | }); |
| | | } |
| | | queryTextChanged($event) { |
| | | // tslint:disable-next-line:no-debugger |
| | | debugger; |
| | | this.queryTextStream.next(this.queryText); |
| | | } |
| | | load(reload: boolean = false) { |
| | | if (reload) { |
| | | this.grid.pageIndex = 1 ; |
| | | } |
| | | this.versionService.getPagingList(this.grid, this.queryText).subscribe( |
| | | (res: PageBean) => { |
| | | if (res.total > 0 && res.data != null) { |
| | | this.grid.initData(res); |
| | | this.grid.refreshStatus(); |
| | | } |
| | | } |
| | | ); |
| | | } |
| | | |
| | | edit() { |
| | | // this.modalHelper.static(VersionEditComponent, { user }).subscribe(() => { |
| | | // this.load(true); |
| | | // 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); |
| | | }); |
| | | } |
| | | |
| | | remove() { |
| | | |
| | | } |
| | | |
| | | |
| | | dataChange(res: any) { |
| | | |
| | | } |
| | | |
| | | sort(field: string, value: any) { |
| | | // this.sortMap = {}; |
| | | // this.sortMap[field] = value; |
| | | // this.q.sorter = value ? `${field}_${value}` : ''; |
| | | // this.load(true); |
| | | } |
| | | |
| | | reset(ls: any[]) { |
| | | for (const item of ls) item.value = false; |
| | | this.load(true); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | import { DeviceVersion } from './version.service'; |
| | | import { ExampleService } from './../../../core/services/example.service'; |
| | | import { _HttpClient } from '@delon/theme'; |
| | | import { environment } from './../../../../environments/environment.prod'; |
| | | import { RouteConfigLoadStart } from '@angular/router'; |
| | | import { Injectable } from '@angular/core'; |
| | | import { equal } from 'assert'; |
| | | import { Observable } from 'rxjs/Observable'; |
| | | 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' |
| | | }; |
| | | constructor(private http: _HttpClient) { } |
| | | public getPagingList(page: PageBean, queryText: string): Observable<PageBean> { |
| | | const example = new ExampleService(); |
| | | 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()}; |
| | | return this.http.get(this.urls.edit, param); |
| | | } |
| | | } |
| | |
| | | import { DevicesModule } from './devices/devices.module'; |
| | | import { _HttpClient } from '@delon/theme'; |
| | | import { NgModule } from '@angular/core'; |
| | | import { RouterModule } from '@angular/router'; |
| | | import { SharedModule } from '@shared/shared.module'; |
| | |
| | | import { DashboardAnalysisComponent } from './dashboard/analysis/analysis.component'; |
| | | import { DashboardMonitorComponent } from './dashboard/monitor/monitor.component'; |
| | | import { DashboardWorkplaceComponent } from './dashboard/workplace/workplace.component'; |
| | | import { CoreModule } from '@core/core.module'; |
| | | |
| | | @NgModule({ |
| | | imports: [ |
| | |
| | | DashboardV1Component, |
| | | DashboardAnalysisComponent, |
| | | DashboardMonitorComponent, |
| | | DashboardWorkplaceComponent, |
| | | DashboardWorkplaceComponent |
| | | ], |
| | | exports: [ |
| | | RouterModule |
| | | ], |
| | | providers: [ |
| | | _HttpClient |
| | | ] |
| | | }) |
| | | |
New file |
| | |
| | | // 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'; |
| | |
| | | AdImageModule, |
| | | AdUtilsModule |
| | | } from '@delon/abc'; |
| | | import { _HttpClient } from '@delon/theme/services/http/http.client'; |
| | | import { CoreModule } from '@core/core.module'; |
| | | const ABCMODULES = [ |
| | | AdAvatarListModule, |
| | | AdChartsModule, |
| | |
| | | providers: [ |
| | | // ng-zorro-antd Services |
| | | NzNotificationService, |
| | | NzMessageService |
| | | NzMessageService |
| | | ] |
| | | }; |
| | | } |
| | |
| | | production: true, |
| | | hmr: false, |
| | | useHash: true, |
| | | SERVER_BASH_URL: 'http://47.96.171.62:8080/screen_api_v2' |
| | | SERVER_BASH_URL: 'http://localhost:8001' |
| | | }; |
| | |
| | | "moduleResolution": "node", |
| | | "emitDecoratorMetadata": true, |
| | | "experimentalDecorators": true, |
| | | "noUnusedLocals": false, |
| | | "noUnusedParameters": false, |
| | | "target": "es5", |
| | | "typeRoots": [ |
| | | "node_modules/@types" |