diff --git a/src/jmapNew/shape/LcControl/index.js b/src/jmapNew/shape/LcControl/index.js index 985bea40d..3072dba26 100644 --- a/src/jmapNew/shape/LcControl/index.js +++ b/src/jmapNew/shape/LcControl/index.js @@ -6,73 +6,73 @@ import EControl from '../element/EControl'; import EMouse from './EMouse'; export default class LcControl 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.create(); - this.createMouseEvent(); - this.setState(model); - } + 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.create(); + this.createMouseEvent(); + this.setState(model); + } - create() { - const model = this.model; - this.control = new EControl({ - zlevel: this.zlevel, - z: this.z, - arc: { - shape: { - cx: model.position.x, - cy: model.position.y, - r: this.style.LcControl.lamp.radiusR - }, - lineWidth: 0, - fill: this.style.LcControl.lamp.controlColor - }, - text: { - position: [0, 0], - x: model.position.x, - y: model.position.y + this.style.LcControl.lamp.radiusR + this.style.LcControl.text.distance, - fontWeight: this.style.LcControl.text.fontWeight, - fontSize: this.style.LcControl.text.fontSize, - fontFamily: this.style.fontFamily, - text: model.name, - textFill: '#fff', - textAlign: 'middle', - textVerticalAlign: 'top' - }, - style: this.style - }); + create() { + const model = this.model; + this.control = new EControl({ + zlevel: this.zlevel, + z: this.z, + arc: { + shape: { + cx: model.position.x, + cy: model.position.y, + r: this.style.LcControl.lamp.radiusR + }, + lineWidth: 0, + fill: this.style.LcControl.lamp.controlColor + }, + text: { + position: [0, 0], + x: model.position.x, + y: model.position.y + this.style.LcControl.lamp.radiusR + this.style.LcControl.text.distance, + fontWeight: this.style.LcControl.text.fontWeight, + fontSize: this.style.LcControl.text.fontSize, + fontFamily: this.style.fontFamily, + text: model.name, + textFill: '#fff', + textAlign: 'middle', + textVerticalAlign: 'top' + }, + style: this.style + }); - this.add(this.control); - } + this.add(this.control); + } - // 设置状态 - setState(model) { - } + // 设置状态 + setState(model) { + } - createMouseEvent() { - if (this.style.LcControl.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); }); - } - } + createMouseEvent() { + if (this.style.LcControl.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; - } + 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; + } } diff --git a/src/views/mapsystem/plugin/delayBox.vue b/src/views/mapsystem/plugin/delayBox.vue index bd8afc4c4..ef36dd91b 100644 --- a/src/views/mapsystem/plugin/delayBox.vue +++ b/src/views/mapsystem/plugin/delayBox.vue @@ -1,7 +1,8 @@ @@ -10,16 +11,21 @@ import DelayInfo from './delayInfo'; export default { name: 'DelayBox', + components: { + DelayInfo + }, data() { return { delayShow: false, - delayInfoList: [] + stationList: [] }; }, - methods: { - doShow() { - + watch: { + '$store.state.map.stationList': function(val) { + this.stationList = val; } + }, + methods: { } }; diff --git a/src/views/mapsystem/plugin/delayInfo.vue b/src/views/mapsystem/plugin/delayInfo.vue index 6286d23d9..d6a9bdba2 100644 --- a/src/views/mapsystem/plugin/delayInfo.vue +++ b/src/views/mapsystem/plugin/delayInfo.vue @@ -1,19 +1,72 @@ diff --git a/src/views/newMap/newMapdraft/index.vue b/src/views/newMap/newMapdraft/index.vue index 10e6faf08..23f634044 100644 --- a/src/views/newMap/newMapdraft/index.vue +++ b/src/views/newMap/newMapdraft/index.vue @@ -137,7 +137,6 @@ export default { this.setDelayUnlockStatus(response.data, '00'); this.initAutoSaveTask(); }).catch((error) => { - console.log(error); this.$message.error(this.$t('tip.failedLoadMap')); this.endViewLoading(); }); diff --git a/src/views/newMap/newMapdraft/mapoperate/config/list.vue b/src/views/newMap/newMapdraft/mapoperate/config/list.vue index 94b054d41..8355620ea 100644 --- a/src/views/newMap/newMapdraft/mapoperate/config/list.vue +++ b/src/views/newMap/newMapdraft/mapoperate/config/list.vue @@ -68,6 +68,7 @@ filterable :placeholder="item.placeholder" :disabled="item.disabled" + :clearable="item.clearable" > { - const leftSection = value ? this.$store.getters['map/getDeviceByCode'](value) : ''; - if (leftSection && (leftSection.points[1].x !== this.editModel.points[0].x || leftSection.points[1].y !== this.editModel.points[0].y )) { + const leftSection = value ? this.$store.getters['map/getDeviceByCode'](value) : null; + if (leftSection && !(this.checkPointsCoincide(leftSection.points[leftSection.points.length - 1], this.editModel.points[0].x) || this.checkPointsCoincide(leftSection.points[leftSection.points.length - 1], this.oldPoint[0]) )) { callback(new Error(this.$t('rules.theLeftEndOfTheSelectedAssociatedSectionIsNotAdjacent'))); } else { callback(); } }; var validateRightSection = (rule, value, callback) => { - const rightSection = value ? this.$store.getters['map/getDeviceByCode'](value) : ''; - if (rightSection && (rightSection.points[0].x !== this.editModel.points[1].x || rightSection.points[0].y !== this.editModel.points[1].y )) { + const rightSection = value ? this.$store.getters['map/getDeviceByCode'](value) : null; + if (rightSection && !(this.checkPointsCoincide(rightSection.points[0], this.editModel.points[this.editModel.points.length - 1]) || this.checkPointsCoincide(rightSection.points[0], this.oldPoint[this.oldPoint.length - 1]))) { callback(new Error(this.$t('rules.theRightEndOfTheSelectedAssociatedSectionIsNotAdjacent'))); } else { callback(); @@ -598,6 +600,12 @@ export default { }, isLeftSectionButtonShow() { return this.field === 'leftSection'; + }, + isRightSectionButtonShow() { + return this.field === 'rightSection'; + }, + hasAssociatedSection() { + return this.editModel.type === '01' || this.editModel.type === '03'; } }, watch: { @@ -647,16 +655,20 @@ export default { if (!this.fieldS) { // 判断是否激活选择站台 if (selected && selected._type.toUpperCase() === 'Section'.toUpperCase()) { if (this.field === 'leftSection') { - this.editModel.leftSectionCode = selected.code; - this.activeName = 'first'; - this.field = ''; - this.$emit('fieldSelect', ''); + if (selected.type === '01' || selected.type === '03') { + this.editModel.leftSectionCode = selected.code; + this.activeName = 'first'; + this.field = ''; + this.$emit('fieldSelect', ''); + } return; } else if (this.field === 'rightSection') { - this.editModel.rightSectionCode = selected.code; - this.activeName = 'first'; - this.field = ''; - this.$emit('fieldSelect', ''); + if ((selected.type === '01' || selected.type === '03')) { + this.editModel.rightSectionCode = selected.code; + this.activeName = 'first'; + this.field = ''; + this.$emit('fieldSelect', ''); + } return; } this.$refs.dataform.resetFields(); @@ -667,6 +679,8 @@ export default { this.editModel.isSegmentation = selected.isSegmentation || false; this.editModel.points = JSON.parse(JSON.stringify(selected.points)); this.oldPoint = JSON.parse(JSON.stringify(selected.points)); + this.oldLeftSectionCode = selected.leftSectionCode; + this.oldRightSectionCode = selected.rightSectionCode; this.editModel.lengthFact = selected.lengthFact || 0; this.addModel.splitOffsetMax = Math.sqrt(new JTriangle(selected.points[0], selected.points[selected.points.length - 1]).abspowz); @@ -902,6 +916,10 @@ export default { edit() { this.$refs['dataform'].validate((valid) => { if (valid) { + if (this.editModel.type === '03' && this.editModel.leftSectionCode && this.editModel.rightSectionCode) { + this.$messageBox('道岔区段应仅有一侧关联区段!'); + return; + } const models = []; const model = deepAssign(this.editModel, {_type: 'Section'}); // 修改元素model model.leftStopPointOffset = Number(model.leftStopPointOffset); @@ -933,11 +951,50 @@ export default { this.fieldS = ''; this.$emit('updateMapModel', models); this.oldPoint = JSON.parse(JSON.stringify(model.points)); + this.oldLeftSectionCode = model.leftSectionCode; + this.oldRightSectionCode = model.rightSectionCode; } else { this.$message('还有属性未填写,修改未生效!'); } }); }, + handleAssociatedSectionChange(model) { // 处理因该区段关联区段改变影响的区段数据 + const models = []; + if (model.leftSectionCode !== this.oldLeftSectionCode) { + const editLeftSection = this.getSectionByCode(model.leftSectionCode); + const oldEditLeftSection = this.getSectionByCode(this.oldLeftSectionCode); + if (editLeftSection) { + editLeftSection.rightSectionCode = model.code; + models.push(editLeftSection); + } + if (oldEditLeftSection) { + oldEditLeftSection.rightSectionCode = ''; + models.push(oldEditLeftSection); + } + } + if (model.rightSectionCode !== this.oldRightSectionCode) { + const editRightSection = this.getSectionByCode(model.rightSectionCode); + const oldEditRightSection = this.getSectionByCode(this.oldRightSectionCode); + if (editRightSection) { + editRightSection.leftSectionCode = model.code; + models.push(editRightSection); + } + if (oldEditRightSection) { + oldEditRightSection.leftSectionCode = ''; + models.push(oldEditRightSection); + } + } + return models; + }, + getSectionByCode(code) { // 根据sectionCode 获取深拷贝的section对象 + if (code) { + const section = deepAssign({}, this.$store.getters['map/getDeviceByCode'](code) || {}); + if (JSON.stringify(section) !== '{}') { + return section; + } + } + return null; + }, // 删除对象 deleteObj() { const models = []; @@ -1170,6 +1227,12 @@ export default { } } }); + }, + checkPointsCoincide(point1, point2) { // 校验两点是否重合 + if (point1 && point2) { + return point1.x === point2.x && point1.y === point2.y; + } + return false; } } };