openatc-components 0.3.18 → 0.3.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package/kisscomps/components/ChannelRealtimeIntersection/ChannelRealtimeIntersection.vue +25 -3
- package/package/kisscomps/components/IntersectionMap/crossDirection/crossDiagram.vue +97 -83
- package/package/kissui.min.js +1 -1
- package/package.json +1 -1
- package/src/kisscomps/components/ChannelRealtimeIntersection/ChannelRealtimeIntersection.vue +25 -3
- package/src/kisscomps/components/IntersectionMap/crossDirection/crossDiagram.vue +97 -83
- package/src/views/intersection.vue +77 -8
package/package/kisscomps/components/ChannelRealtimeIntersection/ChannelRealtimeIntersection.vue
CHANGED
|
@@ -19,12 +19,15 @@
|
|
|
19
19
|
:crossStatusData="crossStatusData"
|
|
20
20
|
:agentId="agentId"
|
|
21
21
|
:graphicMode="true"
|
|
22
|
-
:roadDirection="roadDirection"
|
|
22
|
+
:roadDirection="roadDirection"
|
|
23
|
+
:isThirdSignal="isThirdSignal"/>
|
|
23
24
|
</div>
|
|
24
25
|
</template>
|
|
25
26
|
|
|
26
27
|
<script>
|
|
27
28
|
import IntersectionMap from '../IntersectionMap/intersectionmap'
|
|
29
|
+
import { queryDevice } from '../../../api/control.js'
|
|
30
|
+
import { getMessageByCode } from '../../../utils/responseMessage.js'
|
|
28
31
|
|
|
29
32
|
export default {
|
|
30
33
|
name: 'channel-realtime-intersection',
|
|
@@ -77,11 +80,29 @@ export default {
|
|
|
77
80
|
data () {
|
|
78
81
|
return {
|
|
79
82
|
reset: true,
|
|
80
|
-
crossStatusData: {}
|
|
83
|
+
crossStatusData: {},
|
|
84
|
+
isThirdSignal: false
|
|
81
85
|
}
|
|
82
86
|
},
|
|
83
87
|
methods: {
|
|
84
|
-
|
|
88
|
+
getPlatform () {
|
|
89
|
+
queryDevice(this.agentId).then(res => {
|
|
90
|
+
if (!res.data.success) {
|
|
91
|
+
let commomMsg = this.$t('openatc.overview.signalID') + ': ' + this.AgentId
|
|
92
|
+
this.$message.error(getMessageByCode(res.data.code, this.$i18n.locale) + ' - ' + commomMsg)
|
|
93
|
+
return
|
|
94
|
+
}
|
|
95
|
+
this.platform = res.data.data.platform
|
|
96
|
+
if (this.platform !== '' && this.platform !== 'OpenATC') {
|
|
97
|
+
this.isThirdSignal = true
|
|
98
|
+
} else {
|
|
99
|
+
this.isThirdSignal = false
|
|
100
|
+
}
|
|
101
|
+
if (this.thirdSignal) {
|
|
102
|
+
this.isThirdSignal = this.thirdSignal
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
}
|
|
85
106
|
},
|
|
86
107
|
created () {
|
|
87
108
|
},
|
|
@@ -90,6 +111,7 @@ export default {
|
|
|
90
111
|
// 模拟
|
|
91
112
|
// this.crossStatusData = JSON.parse(JSON.stringify(this.channelRealtimeStatusData))
|
|
92
113
|
// }, 3000)
|
|
114
|
+
this.getPlatform()
|
|
93
115
|
this.crossStatusData = JSON.parse(JSON.stringify(this.channelRealtimeStatusData))
|
|
94
116
|
},
|
|
95
117
|
destroyed () {
|
|
@@ -287,64 +287,15 @@ export default {
|
|
|
287
287
|
this.statusData = JSON.parse(JSON.stringify(val))
|
|
288
288
|
// 默认显示相位数据(包括黄闪、全红、关灯状态下,或者匝道,均不做比对跟随相位的处理)
|
|
289
289
|
this.drawDefaultPhaseIcon()
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
// 通道路口图状态数据
|
|
290
|
+
if (this.channelType && !this.isThirdSignal) {
|
|
291
|
+
// 通道路口图状态数据(实时通道展示排除第三方信号机,第三方信号机还是按模版路口一样展示相位状态)
|
|
293
292
|
this.channelStatusList = val.channellamp
|
|
294
293
|
this.createChannelStatusMap()
|
|
295
294
|
this.getChannelPhaseStatus()
|
|
296
295
|
this.getChannelPedStatus()
|
|
297
296
|
return
|
|
298
297
|
}
|
|
299
|
-
|
|
300
|
-
// 模版路口图状态数据
|
|
301
|
-
this.phaseStatusList = val.phase
|
|
302
|
-
this.overlapStatusList = val.overlap
|
|
303
|
-
if (val.control === 1 || val.control === 2 || val.control === 3) {
|
|
304
|
-
// 黄闪、全红、关灯属于特殊控制,优先级最高,直接改变灯色,不用判断phase里的type,也不需要考虑跟随相位的灯色优先级
|
|
305
|
-
if (val.control === 1) {
|
|
306
|
-
this.getYellowFlashColor()
|
|
307
|
-
} else {
|
|
308
|
-
this.SpecialControl(val)
|
|
309
|
-
}
|
|
310
|
-
this.isHasPhase = false
|
|
311
|
-
return
|
|
312
|
-
}
|
|
313
|
-
if (!val.phase && !this.overlapStatusList) {
|
|
314
|
-
// 非特殊控制,相位和跟随相位不存在的情况下,灯色恢复默认
|
|
315
|
-
this.handleSpecialControlStatus('默认')
|
|
316
|
-
this.isHasPhase = false
|
|
317
|
-
return
|
|
318
|
-
}
|
|
319
|
-
if (val.control === 16) {
|
|
320
|
-
// 方向锁定时,相位状态显示与通道无关,显示接口返回的红灯会有歧义,此处特殊处理显示默认白色
|
|
321
|
-
this.handleSpecialControlStatus('方向锁定')
|
|
322
|
-
this.isHasPhase = false
|
|
323
|
-
return
|
|
324
|
-
}
|
|
325
|
-
this.curPhase = val.current_phase
|
|
326
|
-
this.isHasPhase = true
|
|
327
|
-
this.createPhaseStatusMap()
|
|
328
|
-
// 正常情况下,获取车道相位、车道跟随相位、相位倒计时、行人相位、行人跟随相位 的状态
|
|
329
|
-
this.getPhaseStatus()
|
|
330
|
-
this.getOverlapPhaseStatus()
|
|
331
|
-
this.getCurPhaseCountdown()
|
|
332
|
-
this.getBusPhaseStatus()
|
|
333
|
-
if (this.mainType === '100' || this.mainType === '101' || this.mainType === '104') {
|
|
334
|
-
// 城市道路和路段行人过街才显示人行道状态
|
|
335
|
-
this.getpedStatus()
|
|
336
|
-
this.getOverlapPedStatus()
|
|
337
|
-
// 算法对比行人相位与行人跟随相位的状态
|
|
338
|
-
this.comparePedStatus()
|
|
339
|
-
// 算法对比车道相位与车道跟随相位的状态
|
|
340
|
-
this.comparePhaseStatus()
|
|
341
|
-
}
|
|
342
|
-
// console.log('this.phaseStatusMap 相位状态映射', this.phaseStatusMap)
|
|
343
|
-
// console.log('LanePhaseData 车道相位', this.LanePhaseData)
|
|
344
|
-
// console.log('sidewalkPhaseData 行人相位', this.sidewalkPhaseData)
|
|
345
|
-
// console.log('overlapPhaseStatusMap 跟随相位状态映射', this.overlapPhaseStatusMap)
|
|
346
|
-
// console.log('overlapLanePhaseData 车道跟随相位', this.overlapLanePhaseData)
|
|
347
|
-
// console.log('this.overlapsidewalkPhaseData 行人跟随相位', this.overlapsidewalkPhaseData)
|
|
298
|
+
this.handleTempCrossStatus(val)
|
|
348
299
|
},
|
|
349
300
|
// 深度观察监听
|
|
350
301
|
deep: true
|
|
@@ -414,6 +365,56 @@ export default {
|
|
|
414
365
|
}
|
|
415
366
|
},
|
|
416
367
|
methods: {
|
|
368
|
+
handleTempCrossStatus (val) {
|
|
369
|
+
// 模版路口图状态数据
|
|
370
|
+
this.phaseStatusList = val.phase
|
|
371
|
+
this.overlapStatusList = val.overlap
|
|
372
|
+
if (val.control === 1 || val.control === 2 || val.control === 3) {
|
|
373
|
+
// 黄闪、全红、关灯属于特殊控制,优先级最高,直接改变灯色,不用判断phase里的type,也不需要考虑跟随相位的灯色优先级
|
|
374
|
+
if (val.control === 1) {
|
|
375
|
+
this.getYellowFlashColor()
|
|
376
|
+
} else {
|
|
377
|
+
this.SpecialControl(val)
|
|
378
|
+
}
|
|
379
|
+
this.isHasPhase = false
|
|
380
|
+
return
|
|
381
|
+
}
|
|
382
|
+
if (!val.phase && !this.overlapStatusList) {
|
|
383
|
+
// 非特殊控制,相位和跟随相位不存在的情况下,灯色恢复默认
|
|
384
|
+
this.handleSpecialControlStatus('默认')
|
|
385
|
+
this.isHasPhase = false
|
|
386
|
+
return
|
|
387
|
+
}
|
|
388
|
+
if (val.control === 16) {
|
|
389
|
+
// 方向锁定时,相位状态显示与通道无关,显示接口返回的红灯会有歧义,此处特殊处理显示默认白色
|
|
390
|
+
this.handleSpecialControlStatus('方向锁定')
|
|
391
|
+
this.isHasPhase = false
|
|
392
|
+
return
|
|
393
|
+
}
|
|
394
|
+
this.curPhase = val.current_phase
|
|
395
|
+
this.isHasPhase = true
|
|
396
|
+
this.createPhaseStatusMap()
|
|
397
|
+
// 正常情况下,获取车道相位、车道跟随相位、相位倒计时、行人相位、行人跟随相位 的状态
|
|
398
|
+
this.getPhaseStatus()
|
|
399
|
+
this.getOverlapPhaseStatus()
|
|
400
|
+
this.getCurPhaseCountdown()
|
|
401
|
+
this.getBusPhaseStatus()
|
|
402
|
+
if (this.mainType === '100' || this.mainType === '101' || this.mainType === '104') {
|
|
403
|
+
// 城市道路和路段行人过街才显示人行道状态
|
|
404
|
+
this.getpedStatus()
|
|
405
|
+
this.getOverlapPedStatus()
|
|
406
|
+
// 算法对比行人相位与行人跟随相位的状态
|
|
407
|
+
this.comparePedStatus()
|
|
408
|
+
// 算法对比车道相位与车道跟随相位的状态
|
|
409
|
+
this.comparePhaseStatus()
|
|
410
|
+
}
|
|
411
|
+
// console.log('this.phaseStatusMap 相位状态映射', this.phaseStatusMap)
|
|
412
|
+
// console.log('LanePhaseData 车道相位', this.LanePhaseData)
|
|
413
|
+
// console.log('sidewalkPhaseData 行人相位', this.sidewalkPhaseData)
|
|
414
|
+
// console.log('overlapPhaseStatusMap 跟随相位状态映射', this.overlapPhaseStatusMap)
|
|
415
|
+
// console.log('overlapLanePhaseData 车道跟随相位', this.overlapLanePhaseData)
|
|
416
|
+
// console.log('this.overlapsidewalkPhaseData 行人跟随相位', this.overlapsidewalkPhaseData)
|
|
417
|
+
},
|
|
417
418
|
init () {
|
|
418
419
|
this.CrossDiagramMgr = new CrossDiagramMgr()
|
|
419
420
|
this.getRoadDirection()
|
|
@@ -729,40 +730,43 @@ export default {
|
|
|
729
730
|
this.getChannelInfo()
|
|
730
731
|
return
|
|
731
732
|
}
|
|
732
|
-
if (this.channelType) {
|
|
733
|
+
if (this.channelType && !this.isThirdSignal) {
|
|
733
734
|
this.getChannelInfo()
|
|
734
735
|
return
|
|
735
736
|
}
|
|
736
|
-
this.
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
if (!this.isVipRoute && this.mainType === '103') {
|
|
749
|
-
// 获取匝道道路的主路和支路的相位坐标
|
|
750
|
-
this.getRampPhasePos()
|
|
751
|
-
}
|
|
737
|
+
this.getTempCrossInfo(res)
|
|
738
|
+
})
|
|
739
|
+
},
|
|
740
|
+
getTempCrossInfo (res) {
|
|
741
|
+
this.crossInfo = res.data.data.param
|
|
742
|
+
this.crossInfo.phaseList.forEach(cross => this.phaseDirMap.set(cross.id, {direction: cross.direction, peddirection: cross.peddirection}))
|
|
743
|
+
if (this.mainType === '100' || this.mainType === '101' || this.mainType === '104') {
|
|
744
|
+
// 城市道路加载车道相位坐标和人行道坐标
|
|
745
|
+
this.getPhasePos()
|
|
746
|
+
this.getOverlapPhasePos()
|
|
747
|
+
this.getPedPhasePos()
|
|
748
|
+
this.getOverlapPedPhasePos()
|
|
752
749
|
if (!this.isVipRoute) {
|
|
753
|
-
this.
|
|
754
|
-
}
|
|
755
|
-
if (this.isVipRoute && this.isThirdSignal) {
|
|
756
|
-
this.LanePhaseData = this.CrossDiagramMgr.compare(this.LanePhaseData, this.overlapLanePhaseData, 'type', 'nostatus')
|
|
757
|
-
// console.log(this.LanePhaseData)
|
|
758
|
-
this.sidewalkPhaseData = this.CrossDiagramMgr.compare(this.sidewalkPhaseData, this.overlapsidewalkPhaseData, 'pedtype', 'nostatus')
|
|
759
|
-
let allDir = this.LanePhaseData.map(ele => ele.id)
|
|
760
|
-
let allPedDir = this.sidewalkPhaseData.map(ele => ele.id)
|
|
761
|
-
this.inneChoosedDirection = this.choosedDirection.filter(dir => allDir.indexOf(dir) !== -1)
|
|
762
|
-
this.inneChoosedPedDirection = this.choosedPedDirection.filter(dir => allPedDir.indexOf(dir) !== -1)
|
|
763
|
-
this.drawPhaseIcon()
|
|
750
|
+
this.getBusPos()
|
|
764
751
|
}
|
|
765
|
-
}
|
|
752
|
+
}
|
|
753
|
+
if (!this.isVipRoute && this.mainType === '103') {
|
|
754
|
+
// 获取匝道道路的主路和支路的相位坐标
|
|
755
|
+
this.getRampPhasePos()
|
|
756
|
+
}
|
|
757
|
+
if (!this.isVipRoute) {
|
|
758
|
+
this.drawDefaultPhaseIcon()
|
|
759
|
+
}
|
|
760
|
+
if (this.isVipRoute && this.isThirdSignal) {
|
|
761
|
+
this.LanePhaseData = this.CrossDiagramMgr.compare(this.LanePhaseData, this.overlapLanePhaseData, 'type', 'nostatus')
|
|
762
|
+
// console.log(this.LanePhaseData)
|
|
763
|
+
this.sidewalkPhaseData = this.CrossDiagramMgr.compare(this.sidewalkPhaseData, this.overlapsidewalkPhaseData, 'pedtype', 'nostatus')
|
|
764
|
+
let allDir = this.LanePhaseData.map(ele => ele.id)
|
|
765
|
+
let allPedDir = this.sidewalkPhaseData.map(ele => ele.id)
|
|
766
|
+
this.inneChoosedDirection = this.choosedDirection.filter(dir => allDir.indexOf(dir) !== -1)
|
|
767
|
+
this.inneChoosedPedDirection = this.choosedPedDirection.filter(dir => allPedDir.indexOf(dir) !== -1)
|
|
768
|
+
this.drawPhaseIcon()
|
|
769
|
+
}
|
|
766
770
|
},
|
|
767
771
|
getBusPos () {
|
|
768
772
|
// 公交相位信息
|
|
@@ -1071,10 +1075,20 @@ export default {
|
|
|
1071
1075
|
let pedarr = Array.from(map2)
|
|
1072
1076
|
let newarr = []
|
|
1073
1077
|
arr.forEach(ele => {
|
|
1074
|
-
|
|
1078
|
+
ele[1].realdir = [ele[0]]
|
|
1079
|
+
let obj = {
|
|
1080
|
+
...ele[1],
|
|
1081
|
+
realdir: [ele[0]]
|
|
1082
|
+
}
|
|
1083
|
+
newarr.push(obj)
|
|
1075
1084
|
})
|
|
1076
1085
|
pedarr.forEach(ele => {
|
|
1077
|
-
|
|
1086
|
+
ele[1].realdir = [ele[0]]
|
|
1087
|
+
let obj = {
|
|
1088
|
+
...ele[1],
|
|
1089
|
+
realdir: [ele[0]]
|
|
1090
|
+
}
|
|
1091
|
+
newarr.push(obj)
|
|
1078
1092
|
})
|
|
1079
1093
|
// console.log(newarr)
|
|
1080
1094
|
return newarr
|