From efe936a73370a55d4c3336fb9973a92fcf87efff Mon Sep 17 00:00:00 2001 From: fengxiang <110431245@qq.com> Date: Thu, 08 Mar 2018 09:22:09 +0800 Subject: [PATCH] ts语法修正,报表部分功能实现 --- src/app/routes/systems/organization/organization-config/organization-config.component.ts | 283 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 275 insertions(+), 8 deletions(-) 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 f9fdffa..9919313 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 @@ -1,24 +1,291 @@ -import { Organization } from '@business/entity/data'; -import { Component, OnInit } from '@angular/core'; +import { NzMessageService } from 'ng-zorro-antd'; +import { filter } from 'rxjs/operators'; +import { HttpClient } from '@angular/common/http'; +import { FormGroup, FormBuilder, FormControl, Validators, FormArray, AbstractControl } from '@angular/forms'; +import { Grid, PageBean } from '@business/entity/grid'; +import { Organization, AlarmConfig, AlarmSensorLevel, AlarmConfigValue } from '@business/entity/data'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { OrganizationService } from '@business/services/http/organization.service'; +import { _HttpClient } from '@delon/theme'; +import { AlarmConfigService } from '@business/services/http/alarm-config.service'; +import { AlarmStyle } from '@business/enum/types.enum'; +import { patterns } from '@business/enum/patterns.enum'; +import { ToolsService } from '@business/services/util/tools.service'; @Component({ selector: 'app-organization-config', templateUrl: './organization-config.component.html', - styles: [] + styles: [], + providers: [AlarmConfigService] }) -export class OrganizationConfigComponent implements OnInit { - organization: Organization; +export class OrganizationConfigComponent implements OnInit, OnDestroy { + ngOnDestroy(): void { + this.backToList(); + } + public organization: Organization; + grid: Grid<object> = new Grid<object>(null); + validateForm: FormGroup; constructor( - private organizationService: OrganizationService - ) { - console.log(this.organizationService.data); + private organizationService: OrganizationService, + private alarmConfigService: AlarmConfigService, + private formBuilder: FormBuilder, + private http: _HttpClient, + public msgSrv: NzMessageService + + ) { + this.organization = this.organizationService.data; } ngOnInit() { + this.load(); } + load(reload: boolean = false) { + if (reload) { + this.grid.pageIndex = 1; + } + // ������������������ExpressionChangedAfterItHasBeenCheckedError + setTimeout(() => { + this.grid.loading = true; + }, 1); + const pageBean = this.organizationService.config.pageBean; + let resultBean = this.organizationService.config.resultBean; + resultBean = resultBean == null ? {} : resultBean; + if (pageBean != null && pageBean.data != null) { + this.grid.initData(pageBean); + let alarmConfig: AlarmConfig = null; + if (resultBean == null || resultBean.data == null) { + alarmConfig = this.alarmConfigService.generateAlarmConfig(pageBean.data); + } else { + // ������ ������ ��������� + alarmConfig = this.alarmConfigService.generateAlarmConfig(pageBean.data, resultBean.data); + } + const alarmConfigValue = alarmConfig.value; + + const alarmLevels = alarmConfigValue.alarmLevels; + const alarmLevelsGroupsConfig = {}; + Object.keys(alarmLevels).forEach(key => { + + let increment = alarmLevels[key].increment; + increment = increment == null || increment.length !== 3 ? [0, 0, 0] : increment; + const incrementArray = this.formBuilder.array([ + [increment[0]], + [increment[1]], + [increment[2]] + ]); + let degression = alarmLevels[key].degression; + degression = degression == null || degression.length !== 3 ? [0, 0, 0] : degression; + const degressionArray = + this.formBuilder.array([ + [degression[0]], + [degression[1]], + [degression[2]] + ]); + // ������������������������ + // let _degressionEnable = degression[0] != 0 || degression[1] != 0 || degression[2] != 0; + + const alarmSensorGroup = this.formBuilder.group( + { + degressEnable: [alarmLevels[key].degressEnable], + enable: [alarmLevels[key].enable], + increment: incrementArray, + degression: degressionArray, + }, { validator: this.alarmLevelValidator } + ); + alarmSensorGroup.get('enable').valueChanges.subscribe( + (value: any) => { + if (this._allCheckTriggers <= 0) { + this.refreshIndeterminate(); + } else { + this._allCheckTriggers--; + } + } + ); + alarmLevelsGroupsConfig[key] = alarmSensorGroup; + }); + this.alarmModes.push( + { label: '������', value: AlarmStyle.email, disabled: false }, + { label: '������', value: AlarmStyle.sms, disabled: false }, + { label: '������', value: AlarmStyle.voice, disabled: false }, + { label: '������', value: AlarmStyle.weixin, disabled: false } + ); + const alarmMode = alarmConfigValue.alarmMode; + this.validateForm = this.formBuilder.group({ + alarmLevels: this.formBuilder.group(alarmLevelsGroupsConfig), + alarmMode: this.formBuilder.group( + { + enable: [alarmMode.enable], + level1: [alarmMode.level1], + level2: [alarmMode.level2], + level3: [alarmMode.level3] + } + ), + '_id': alarmConfig.id, + '_allChecked': [] + }); + this.validateForm.statusChanges.subscribe( + item => { + this.setErrorMessage(); + } + ); + this.refreshIndeterminate(); + } + this.refreshHasDegression(false); + // ������������������ExpressionChangedAfterItHasBeenCheckedError + setTimeout(() => { + this.grid.loading = false; + }, 1); + } + alarmModes: { label: string, value: AlarmStyle, disabled: boolean }[] = []; backToList() { this.organizationService.handle = 'list'; this.organizationService.title = '������������'; } + indeterminate: boolean; + checkAll(param) { + const keys = this.grid.data.map( + item => { + return item['sensorKey']; + } + ); + this._allCheckTriggers = 0; + keys.forEach( + (key: string) => { + this._allCheckTriggers++; + this.validateForm.get('alarmLevels.' + key + '.enable').setValue(param); + } + ); + this.refreshIndeterminate(); + } + private _allCheckTriggers = 0; + refreshIndeterminate() { + const keys = this.grid.data.map( + item => { + return item['sensorKey']; + } + ); + const allChecked = keys.every(key => this.validateForm.get('alarmLevels.' + key + '.enable').value); + const allUnChecked = keys.every(key => !this.validateForm.get('alarmLevels.' + key + '.enable').value); + this.indeterminate = (!allChecked) && (!allUnChecked); + } + isSaving = false; + save($event, value, valid) { + $event.preventDefault(); + if (valid) { + this.isSaving = true; + const data: AlarmConfig = { + id: value._id, + organizationId: this.organization.id, + value: value + }; + // ToolsService.removePrivate(data.value); + this.alarmConfigService.save(data).subscribe( + result => { + if (result != null && result.code === 1) { + this.msgSrv.success(this.organization.name + ' ���������������'); + this.backToList(); + } + } + ); + } + } + + setErrorMessage() { + this.errorMessage = ''; + const errObj = this.getLastError(this.validateForm); + if (errObj != null && Object.keys(errObj).length > 0) { + if (errObj['increment']) { + this.errorMessage = '������ ������ ������ ������������'; + } else if (errObj['degression']) { + this.errorMessage = '������������ ������������ ������������ ������������'; + } else if (errObj['pattern'] != null && errObj['pattern']['requiredPattern'] === '^' + patterns.num.toString() + '$') { + this.errorMessage = '���������������������'; + } + } +} + errorMessage = ''; + private removeError(error: 'increment'|'degression', ...controls: AbstractControl[]) { + controls.forEach( + item => { + if (item.hasError(error) && Object.keys(item.errors).length === 1) { + item.setErrors(null); + } + } + ); + } + private addError(error: 'increment'|'degression', ...controls: AbstractControl[]) { + controls.forEach( + item => { + const errs = {}; + errs[error] = true; + item.setErrors(errs); + item.markAsDirty(); + } + ); + } + private alarmLevelValidator = (control: FormControl): { [s: string]: boolean } => { + const enable = control.get('enable').value; + const degressEnable = control.get('degressEnable').value; + const i0 = control.get('increment.0'); + const i1 = control.get('increment.1'); + const i2 = control.get('increment.2'); + const d0 = control.get('degression.0'); + const d1 = control.get('degression.1'); + const d2 = control.get('degression.2'); + // ��������������� ������������������������������ + if (!enable) { + this.removeError('increment', i0, i1, i2); + this.removeError('degression', d0, d1, d2); + return null; + } + const result = {}; + const i0_value = parseInt(i0.value, 10); + const i1_value = parseInt(i1.value, 10); + const i2_value = parseInt(i2.value, 10); + if ((i0_value !== 0 || i1_value !== 0 || i2_value !== 0) && (i0_value >= i1_value || i1_value >= i2_value)) { + this.addError('increment', i0, i1, i2); + result['increment'] = true; + } else { + this.removeError('increment', i0, i1, i2); + } + const d0_value = parseInt(d0.value, 10); + const d1_value = parseInt(d1.value, 10); + const d2_value = parseInt(d2.value, 10); + if (degressEnable && (d0_value !== 0 || d1_value !== 0 || d2_value !== 0) && (d1_value >= d0_value || d2_value >= d1_value)) { + this.addError('degression', d0, d1, d2); + result['degression'] = true; + } else { + this.removeError('degression', d0, d1, d2); + } + return Object.keys(result).length === 0 ? null : result; + } + getLastError(control: FormGroup|FormArray) { + if (control.errors != null) { + return control.errors; + } else { + const controls = Object.values(control.controls); + for (let i = controls.length - 1; i >= 0; i--) { + const c = controls[i]; + if (c.errors != null) { + return c.errors; + } else if (c instanceof FormArray || c instanceof FormGroup) { + const result = this.getLastError(c); + if (result != null) { + return result; + } + } + } + } + } + public hasDegression = false; + public refreshHasDegression(value) { + if (value) { + this.hasDegression = true; + } else { + this.hasDegression = Object.values(this.validateForm.value['alarmLevels']).some( + ( item: any) => { + return item['degressEnable']; + } + ); + } + } } -- Gitblit v1.8.0