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.
@@ -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
- if (this.channelType) {
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.crossInfo = res.data.data.param
737
- this.crossInfo.phaseList.forEach(cross => this.phaseDirMap.set(cross.id, {direction: cross.direction, peddirection: cross.peddirection}))
738
- if (this.mainType === '100' || this.mainType === '101' || this.mainType === '104') {
739
- // 城市道路加载车道相位坐标和人行道坐标
740
- this.getPhasePos()
741
- this.getOverlapPhasePos()
742
- this.getPedPhasePos()
743
- this.getOverlapPedPhasePos()
744
- if (!this.isVipRoute) {
745
- this.getBusPos()
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.drawDefaultPhaseIcon()
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
- newarr.push(ele[1])
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
- newarr.push(ele[1])
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