import { ToolsService } from '@business/services/util/tools.service';
|
import { OperateUserService } from '@business/services/http/operate-user.service';
|
import { VersionService } from '@business/services/http/version.service';
|
import { MonitorPointService } from '@business/services/http/monitor-point.service';
|
import { NzModalSubject } from 'ng-zorro-antd';
|
import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
|
import { DeviceService } from '@business/services/http/device.service';
|
import { Component, OnInit } from '@angular/core';
|
import { Device, MonitorPoint} from '@business/entity/data';
|
import { _Validators } from '@delon/abc';
|
import { PageBean, ResultBean } from '@business/entity/grid';
|
import { _HttpClient } from '@delon/theme';
|
import { environment } from '@env/environment';
|
import { ExampleService } from '@business/services/util/example.service';
|
import { Observable } from 'rxjs/Observable';
|
import { OrganizationService } from '@business/services/http/organization.service';
|
|
@Component({
|
selector: 'app-device-edit',
|
templateUrl: './device-edit.component.html',
|
styles: []
|
})
|
export class DeviceEditComponent implements OnInit {
|
public monitorPoints: any [] = [];
|
public professions: any [] = [];
|
public deviceVersions: any [] = [];
|
public operateUsers: any [] = [];
|
public isSaving = false;
|
public configMap: {orgId?: number, mpointId?: number, mpoint?: MonitorPoint} = {orgId: null};
|
public orgOptions = [];
|
constructor(
|
private subject: NzModalSubject,
|
private formBuilder: FormBuilder,
|
private monitorPointService: MonitorPointService,
|
private versionService: VersionService,
|
private operateUserService: OperateUserService,
|
private deviceService: DeviceService,
|
private http: _HttpClient,
|
private organizationService: OrganizationService
|
) { }
|
data: Device;
|
// 原始数据记录
|
originalData: Device = {};
|
orgId: number = null;
|
validateForm: FormGroup;
|
ngOnInit() {
|
console.log(this.configMap);
|
if (!!this.data) {
|
Object.assign(this.originalData, this.data);
|
}
|
const data = this.data;
|
this.monitorPointChange(null);
|
this.deviceVersionChange(null);
|
this.operateUserChange(null);
|
this.professionChange();
|
if (this.data.createTime == null) {
|
this.data.createTime = new Date().getTime();
|
}
|
if (!!this.configMap.mpointId
|
&& !!this.data.monitorPoint
|
&& !data.longitude
|
&& !data.latitude) {
|
data.longitude = this.data.monitorPoint.longitude;
|
data.latitude = this.data.monitorPoint.latitude;
|
}
|
data.monitorPointId = !!data.monitorPointId ? data.monitorPointId : this.configMap.mpointId;
|
const validates: Device = {
|
name: [data.name, [Validators.required]],
|
mac: [data.mac, [Validators.required], [this.macAsyncValidator]],
|
deviceVersionId: [data.deviceVersionId],
|
monitorPointId: [data.monitorPointId],
|
professionId: [data.professionId],
|
operateUserId: [data.operateUserId],
|
address: [data.address],
|
id: [data.id],
|
longitude: [data.longitude],
|
latitude: [data.latitude],
|
createTime: [data.createTime],
|
installTime: [data.installTime]
|
};
|
this.validateForm = this.formBuilder.group(
|
validates
|
);
|
this.orgSelectChange();
|
const control = this.validateForm.controls['monitorPointId'];
|
control.valueChanges.subscribe(value => {
|
const mpoint = ToolsService.getObjById<MonitorPoint>(value, this.monitorPoints);
|
this.resetCoor(mpoint);
|
});
|
}
|
macAsyncValidator = (control: FormControl): any => {
|
return Observable.create(observer => {
|
// 编辑状态,mac未改变
|
if (!!this.originalData && this.originalData.mac === control.value) {
|
observer.next(null);
|
observer.complete();
|
} else {
|
const exampleService = new ExampleService();
|
exampleService.or().andEqualTo({name: 'mac', value: control.value});
|
this.deviceService.countByExample(exampleService).subscribe(
|
res => {
|
if (!!res.code && !!res.data) {
|
observer.next({ error: true, duplicated: true });
|
} else {
|
observer.next(null);
|
}
|
observer.complete();
|
}
|
);
|
}
|
|
});
|
}
|
close() {
|
this.subject.destroy();
|
}
|
save($event, value, valid) {
|
const _prevent = !!$event ? $event.preventDefault() : null ;
|
if (valid) {
|
this.isSaving = true;
|
this.data = value;
|
this.subject.next( this );
|
} else {
|
ToolsService.markAsDirty(this.validateForm);
|
}
|
}
|
professionChange() {
|
this.http.get<ResultBean<any[]>>(environment.SERVER_BASH_URL + 'profession/getall').subscribe(
|
result => {
|
if (!!result.code) {
|
this.professions = result.data;
|
}
|
}
|
);
|
}
|
monitorPointChange(text?: string) {
|
const pageBean: PageBean = {pageIndex: 0, pageSize: 100};
|
const orgId = this.configMap.orgId;
|
const example = new ExampleService();
|
text = !!text && !!text.trim() ? text : null;
|
example.or()
|
.andEqualTo({name: 'organizationId', value: this.configMap.orgId})
|
.andEqualTo({name: 'name', value: text});
|
this.monitorPointService.getPageByExample(pageBean, example).subscribe(
|
(res: PageBean) => {
|
if (res != null && res.data != null) {
|
this.monitorPoints = res.data;
|
}
|
const monitorPoint = this.data.monitorPoint;
|
if (monitorPoint != null && text == null) {
|
const hasSelectedValue = this.monitorPoints.some(
|
(item: any) => {
|
return item.id === monitorPoint.id;
|
}
|
);
|
if ( !hasSelectedValue ) {
|
this.monitorPoints.push(monitorPoint);
|
}
|
}
|
}
|
);
|
}
|
deviceVersionChange(text) {
|
const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
|
this.versionService.getPagingList(pageBean, text).subscribe(
|
(res: PageBean) => {
|
if (res != null && res.data != null) {
|
this.deviceVersions = res.data;
|
}
|
const deviceVersion = this.data.deviceVersion;
|
if (deviceVersion != null && text == null) {
|
const hasSelectedValue = this.deviceVersions.some(
|
(item: any) => {
|
return item.id === deviceVersion.id;
|
}
|
);
|
if ( !hasSelectedValue ) {
|
this.deviceVersions.push(deviceVersion);
|
}
|
}
|
}
|
);
|
}
|
operateUserChange(text) {
|
const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
|
this.operateUserService.getPagingList(pageBean, text).subscribe(
|
(res: PageBean) => {
|
if (res != null && res.data != null) {
|
this.operateUsers = res.data;
|
}
|
const operateUser = this.data.operateUser;
|
if (operateUser != null && text == null) {
|
const hasSelectedValue = this.operateUsers.some(
|
(item: any) => {
|
return item.id === operateUser.id;
|
}
|
);
|
if ( !hasSelectedValue ) {
|
this.operateUsers.push(operateUser);
|
}
|
}
|
}
|
);
|
}
|
orgSelectChange(text?: string) {
|
const pageBean: PageBean = {pageIndex: 0, pageSize: 20};
|
this.organizationService.getPagingList(pageBean, text).subscribe(
|
(res: PageBean) => {
|
if (res != null && res.data != null) {
|
this.orgOptions = res.data;
|
}
|
}
|
);
|
}
|
setOrgId(orgId: number) {
|
this.configMap.mpointId = null;
|
this.monitorPointChange();
|
this.clearMpoint();
|
}
|
clearMpoint() {
|
ToolsService.setValueToControl(this.validateForm, 'monitorPointId', null);
|
this.resetCoor();
|
}
|
resetCoor(mpoint?: MonitorPoint) {
|
const longitude = !!mpoint ? mpoint.longitude : null;
|
const latitude = !!mpoint ? mpoint.latitude : null;
|
ToolsService.setValueToControl(this.validateForm, 'longitude', longitude);
|
ToolsService.setValueToControl(this.validateForm, 'latitude', latitude);
|
}
|
}
|