import Group from 'zrender/src/container/Group'; import EControl from '../element/EControl'; import EMouse from './EMouse'; import {isShowThePrdType} from '../../utils/handlePath'; import deviceType from '../../constant/deviceType'; import ELampFilament from './ELampFilament'; import EControlSwitch from './EControlSwitch'; import EFoldbackMode from './EFoldbackMode'; import EDeviceStatus from './EDeviceStatus'; import EModeStatus from './EModeStatus'; import EUnmanned from './EUnmanned'; import EAxle from './EAxle'; export default class SaidLamp extends Group { constructor(model, style) { super(); this.z = 20; this._code = model.code; this._type = model._type; this.zlevel = model.zlevel; this.model = model; this.style = style; this.deviceStyle = style[model._type]; if (this.deviceStyle) { this.isShowShape = true; if (isShowThePrdType(model.prdType, this.deviceStyle.displayCondition) || model.previewOrMapDraw) { this.create(); this.createMouseEvent(); this.setState(model); } if (model.previewOrMapDraw) { this.setShowMode(); } } } create() { const model = this.model; const lampDevice = ['LeuControl', 'IntersiteControl', 'CenterCommunication', 'AtsControl', 'LocalControl', 'ChainControl', 'Maintain', 'PowerSupply', 'MaintenanceLamps', 'ZcCommunication', 'SwitchFault']; if (lampDevice.includes(this._type)) { this.control = new EControl({ zlevel: this.zlevel, z: this.z, arc: { shape: { cx: model.position.x, cy: model.position.y, r: this.deviceStyle.lamp.radiusR }, subType: 'Control', lineWidth: this.deviceStyle.lamp.lineWidth || 0, fill: this.deviceStyle.lamp.controlColor, stroke: this.deviceStyle.lamp.strokeColor }, text: { position: [0, 0], x: model.position.x, y: model.position.y + this.deviceStyle.lamp.radiusR + this.deviceStyle.text.distance, fontWeight: this.deviceStyle.text.fontWeight, fontSize: this.deviceStyle.text.fontSize, fontFamily: this.style.fontFamily, text: model.name, textFill: '#fff', textAlign: 'middle', textVerticalAlign: 'top' }, style: this.style }); this.add(this.control); } else if (this._type === 'LampFilament') { this.control = new ELampFilament({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, _subType: 'LampFilament', width: this.deviceStyle.width, fill: this.deviceStyle.defaultColor }); this.add(this.control); } else if (this._type === 'ControlSwitch') { this.control = new EControlSwitch({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, _subType: 'ControlSwitch', width: this.deviceStyle.width, fill: this.deviceStyle.defaultColor }); this.add(this.control); } else if (this._type === 'FaultStatusGroup') { this.control = new EDeviceStatus({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, mfNum: model.mfNum, pfNum: model.pfNum, style: this.style }); this.add(this.control); } else if (this._type === 'ReturnModeGroup') { this.control = new EFoldbackMode({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, width: this.deviceStyle.rectWidth, style: this.style }); this.add(this.control); } else if (this._type === 'ModeStatusGroup') { this.control = new EModeStatus({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, style: this.style }); this.add(this.control); } else if (this._type === 'Axle') { this.control = new EAxle({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, style: this.style }); this.add(this.control); } else if (this._type === 'NoOneReturn') { if (this.deviceStyle.showShape === 'Unmanned') { this.control = new EUnmanned({ zlevel: this.zlevel, z: this.z, x: model.position.x, y: model.position.y, _subType: 'Unmanned', width: this.style.NoOneReturn.width, fill: this.style.NoOneReturn.defaultColor }); this.add(this.control); } else { this.control = new EControl({ zlevel: this.zlevel, z: this.z, arc: { shape: { cx: model.position.x, cy: model.position.y, r: this.deviceStyle.lamp.radiusR }, subType: 'Control', lineWidth: 0, fill: this.deviceStyle.lamp.controlColor }, text: { position: [0, 0], x: model.position.x, y: model.position.y + this.deviceStyle.lamp.radiusR + this.deviceStyle.text.distance, fontWeight: this.deviceStyle.text.fontWeight, fontSize: this.deviceStyle.text.fontSize, fontFamily: this.style.fontFamily, text: model.name, textFill: '#fff', textAlign: 'middle', textVerticalAlign: 'top' }, style: this.style }); this.add(this.control); } } } // 设置状态 setState(model) { if (!this.isShowShape) return; if (model._type === deviceType.PowerSupply && model.name.includes('2')) { this.control && this.control.setControlColor(this.deviceStyle.lamp.offColor); this.control && this.control.setControlStroke(this.deviceStyle.lamp.strokeColor, 1); } else if ((model._type === deviceType.AtsControl || model._type === deviceType.LocalControl || model._type === deviceType.ChainControl) && model.name.includes('B')) { this.control && this.control.setControlColor(this.deviceStyle.lamp.offColor); } } createMouseEvent() { if (this.deviceStyle.mouseOverStyle) { this.mouseEvent = new EMouse(this); this.add(this.mouseEvent); this.on('mouseout', (e) => { this.mouseEvent.mouseout(e); }); this.on('mouseover', (e) => { this.mouseEvent.mouseover(e); }); } } getShapeTipPoint() { if (this.control) { var distance = 2; var rect = this.control.getBoundingRect(); return { x: rect.x + rect.width / 2, y: rect.y - distance }; } return null; } setShowMode() { const showMode = this.model.showMode; if (this.deviceStyle) { const showConditions = this.deviceStyle.displayCondition; if (showConditions === '01' || showMode === showConditions) { this.control && this.control.show(); } else { this.control && this.control.hide(); } } } setShowStation(stationCode) { if (!stationCode || this.model.stationCode === stationCode) { this.control && this.control.show(); this.isShowShape = true; this.setState(this.model); } else { this.control && this.control.hide(); this.isShowShape = false; } } setControlColor(color, flag) { this.control && this.control.getControl().stopAnimation(false); this.control && this.control.setControlColor(color); if (flag) { this.control && this.control.getControl().animateStyle(true) .when(0, { fill: this.style.backgroundColor }) .when(1000, { fill: color }) .when(2000, { fill: this.style.backgroundColor }) .start(); } } }