openatc-components 0.0.84 → 0.0.89

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.
Files changed (120) hide show
  1. package/config/index.js +2 -3
  2. package/package/kisscomps/components/Channelization/Channelization.vue +544 -0
  3. package/package/kisscomps/components/Channelization/index.js +2 -0
  4. package/package/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +498 -0
  5. package/package/kisscomps/components/ChannelizationWithInterface/index.js +2 -0
  6. package/package/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +249 -0
  7. package/package/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -0
  8. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -0
  9. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +176 -0
  10. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -0
  11. package/package/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +48 -0
  12. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +182 -0
  13. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +222 -0
  14. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +191 -0
  15. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +78 -0
  16. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +433 -0
  17. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +195 -0
  18. package/package/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +71 -0
  19. package/package/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +940 -0
  20. package/package/kisscomps/components/DrawChannelization/drawsvg/index.vue +119 -0
  21. package/package/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +563 -0
  22. package/package/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +157 -0
  23. package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.check.vue +191 -0
  24. package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.syncOper.vue +331 -0
  25. package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +157 -0
  26. package/package/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -0
  27. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +43 -0
  28. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -0
  29. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -0
  30. package/package/kisscomps/components/DrawChannelization/index.js +2 -0
  31. package/package/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -0
  32. package/package/kisscomps/components/KanBan/kanban.vue +1 -1
  33. package/package/kisscomps/components/MessageBox/index.vue +96 -0
  34. package/package/kisscomps/components/SchemeConfig/SchemeConfig.vue +6 -2
  35. package/package/kisscomps/index.js +4 -0
  36. package/package/kissui.min.js +1 -1
  37. package/package.json +6 -5
  38. package/src/api/cross.js +33 -0
  39. package/src/i18n/language/en.js +77 -2
  40. package/src/i18n/language/zh.js +77 -2
  41. package/src/icons/svg/custom-BRTlane.svg +40 -0
  42. package/src/icons/svg/custom-bicyclelane.svg +7 -0
  43. package/src/icons/svg/custom-buslane.svg +40 -0
  44. package/src/icons/svg/custom-detector.svg +12 -0
  45. package/src/icons/svg/custom-east-bottom.svg +32 -0
  46. package/src/icons/svg/custom-east-top.svg +32 -0
  47. package/src/icons/svg/custom-ewped.svg +35 -0
  48. package/src/icons/svg/custom-motorway.svg +7 -0
  49. package/src/icons/svg/custom-nonmotorizedlane.svg +40 -0
  50. package/src/icons/svg/custom-north-left.svg +32 -0
  51. package/src/icons/svg/custom-north-right.svg +32 -0
  52. package/src/icons/svg/custom-pedcrossing.svg +7 -0
  53. package/src/icons/svg/custom-peddetector.svg +17 -0
  54. package/src/icons/svg/custom-pedeastward.svg +9 -0
  55. package/src/icons/svg/custom-pedestrian.svg +7 -0
  56. package/src/icons/svg/custom-pednorthward.svg +9 -0
  57. package/src/icons/svg/custom-pedsouthward.svg +9 -0
  58. package/src/icons/svg/custom-pedwestward.svg +9 -0
  59. package/src/icons/svg/custom-secondcrossing.svg +7 -0
  60. package/src/icons/svg/custom-sectionpedestrian.svg +7 -0
  61. package/src/icons/svg/custom-snped.svg +35 -0
  62. package/src/icons/svg/custom-south-left.svg +32 -0
  63. package/src/icons/svg/custom-south-right.svg +32 -0
  64. package/src/icons/svg/custom-straightahead.svg +7 -0
  65. package/src/icons/svg/custom-tramlane.svg +40 -0
  66. package/src/icons/svg/custom-turnaround.svg +7 -0
  67. package/src/icons/svg/custom-turnleft.svg +7 -0
  68. package/src/icons/svg/custom-turnright.svg +7 -0
  69. package/src/icons/svg/custom-vehiclebranch.svg +40 -0
  70. package/src/icons/svg/custom-vehiclemainroad.svg +41 -0
  71. package/src/icons/svg/custom-west-bottom.svg +32 -0
  72. package/src/icons/svg/custom-west-top.svg +32 -0
  73. package/src/icons/svg/custom-xlped.svg +14 -0
  74. package/src/icons/svg/custom-xpedestrian.svg +7 -0
  75. package/src/icons/svg/custom-xrped.svg +14 -0
  76. package/src/kisscomps/components/Channelization/Channelization.vue +544 -0
  77. package/src/kisscomps/components/Channelization/index.js +2 -0
  78. package/src/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +498 -0
  79. package/src/kisscomps/components/ChannelizationWithInterface/index.js +2 -0
  80. package/src/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +249 -0
  81. package/src/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -0
  82. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -0
  83. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +176 -0
  84. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -0
  85. package/src/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +48 -0
  86. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +182 -0
  87. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +222 -0
  88. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +191 -0
  89. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +78 -0
  90. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +433 -0
  91. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +195 -0
  92. package/src/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +71 -0
  93. package/src/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +940 -0
  94. package/src/kisscomps/components/DrawChannelization/drawsvg/index.vue +119 -0
  95. package/src/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +563 -0
  96. package/src/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +157 -0
  97. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.check.vue +191 -0
  98. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.syncOper.vue +331 -0
  99. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +157 -0
  100. package/src/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -0
  101. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +43 -0
  102. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -0
  103. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -0
  104. package/src/kisscomps/components/DrawChannelization/index.js +2 -0
  105. package/src/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -0
  106. package/src/kisscomps/components/KanBan/kanban.vue +1 -1
  107. package/src/kisscomps/components/MessageBox/index.vue +96 -0
  108. package/src/kisscomps/components/SchemeConfig/SchemeConfig.vue +6 -2
  109. package/src/kisscomps/index.js +4 -0
  110. package/src/main.js +3 -0
  111. package/src/router/index.js +7 -0
  112. package/src/store/index.js +2 -2
  113. package/src/store/modules/globalParam.js +67 -16
  114. package/src/utils/RingDataModel.js +11 -0
  115. package/src/views/customchannelization.vue +50 -0
  116. package/src/views/intersection.vue +8 -2
  117. package/src/views/schemeconfig.vue +2 -2
  118. package/static/apiconfig.json +15 -0
  119. package/static/styles/channelizatioon.scss +365 -0
  120. package/static/styles/common.scss +1 -0
@@ -0,0 +1,544 @@
1
+ /**
2
+ * Copyright (c) 2020 kedacom
3
+ * OpenATC is licensed under Mulan PSL v2.
4
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
5
+ * You may obtain a copy of Mulan PSL v2 at:
6
+ * http://license.coscl.org.cn/MulanPSL2
7
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
8
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
9
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
10
+ * See the Mulan PSL v2 for more details.
11
+ **/
12
+ <template>
13
+ <div class="show-channelization" :class="{
14
+ 'superlargeCrossImg': bodyDomWidth <= 1680 && bodyDomWidth > 1440,
15
+ 'largeCrossImg': bodyDomWidth <= 1440 && bodyDomWidth > 1280,
16
+ 'middleCrossImg': bodyDomWidth <= 1280 && bodyDomWidth > 960,
17
+ 'smallCrossImg': bodyDomWidth <= 960 && bodyDomWidth > 720,
18
+ 'miniCrossImg': bodyDomWidth <= 720 && bodyDomWidth > 650,
19
+ 'superminiCrossImg': bodyDomWidth <= 650 && bodyDomWidth > 450,
20
+ 'transMiddleCrossImg': bodyDomWidth <= 450 && bodyDomWidth > 350,
21
+ 'transMiddleCrossImg2': bodyDomWidth <= 350 && bodyDomWidth > 300,
22
+ 'transMiddleCrossImg3': bodyDomWidth <= 300 && bodyDomWidth > 260,
23
+ 'transMiniCrossImg': bodyDomWidth <= 260,
24
+ 'changePaddingBottom': true }">
25
+ <ChannelizationElements
26
+ ref="channelizationElements"
27
+ UsageMode="show"
28
+ :allitem="allitem"
29
+ :CrossMapVisible="CrossMapVisible"
30
+ :CrossMapData="CrossMapData"
31
+ :isSeletable="isSeletable"
32
+ :Motorways="LanePhaseData"
33
+ :Pedwalk="sidewalkPhaseData"
34
+ :Countdown="Countdown"
35
+ :CountdownList="phaseCountdownList"
36
+ :Detector="DetectorData"
37
+ :isHasPhase="isHasPhase"
38
+ />
39
+ </div>
40
+ </template>
41
+
42
+ <script>
43
+ // import { mapState, mapGetters } from 'vuex'
44
+ import ChannelizationElements from '../DrawChannelization/drawsvg/channelizationElements'
45
+ // import { getIframdevid } from '../../../utils/auth.js'
46
+ import { getChannelizatonChart } from '../../../api/cross'
47
+
48
+ export default {
49
+ name: 'channelization',
50
+ components: {
51
+ ChannelizationElements
52
+ },
53
+ computed: {
54
+ // ...mapState({
55
+ // curOpenatcAgentid: state => state.globalParam.curOpenatcAgentid
56
+ // })
57
+ // ,
58
+ // ...mapGetters([
59
+ // 'isfromatc'
60
+ // ])
61
+ },
62
+ props: {
63
+ crossStatusData: {
64
+ type: Object
65
+ },
66
+ detectorStatusData: {
67
+ type: Object
68
+ },
69
+ AgentId: {
70
+ type: String,
71
+ default: '0'
72
+ }
73
+ },
74
+ watch: {
75
+ crossStatusData: {
76
+ handler: function (val) {
77
+ // 路口状态数据
78
+ this.statusData = JSON.parse(JSON.stringify(val))
79
+ this.phaseStatusList = val.phase
80
+ this.overlapStatusList = val.overlap
81
+ if (val.control === 1 || val.control === 2 || val.control === 3) {
82
+ // 黄闪、全红、关灯属于特殊控制,优先级最高,直接改变灯色,不用判断phase里的type,也不需要考虑跟随相位的灯色优先级
83
+ this.SpecialControl(val)
84
+ return
85
+ }
86
+ if (!val.phase && !this.overlapStatusList) {
87
+ // 非特殊控制,相位和跟随相位不存在的情况下,灯色恢复默认
88
+ this.handleSpecialControlStatus('默认')
89
+ return
90
+ }
91
+ this.curPhase = val.current_phase
92
+ this.isHasPhase = true
93
+ this.createPhaseStatusMap()
94
+ this.createOverlapPhaseStatusMap()
95
+ this.getLanePhaseStatusData()
96
+ this.getpedStatus()
97
+ this.getCurPhaseCountdown()
98
+ },
99
+ // 深度观察监听
100
+ deep: true
101
+ },
102
+ detectorStatusData: {
103
+ handler: function (detectorsStatus) {
104
+ // 检测器状态数据
105
+ this.detectorStatusList = detectorsStatus.detector
106
+ this.pedDetectorStatusList = detectorsStatus.io
107
+ this.createDetectorStatusMap()
108
+ this.getDetectorStatus()
109
+ },
110
+ deep: true
111
+ },
112
+ AgentId: {
113
+ handler: function (val) {
114
+ // 平台设备切换时,重载当前路口保存的渠化配置
115
+ this.load('all')
116
+ },
117
+ deep: true
118
+ }
119
+ },
120
+ data () {
121
+ return {
122
+ isSeletable: false,
123
+ bodyDomWidth: 352,
124
+ bodyDomSize: {
125
+ width: 1920,
126
+ height: 1080
127
+ },
128
+ CrossMapVisible: true, // 控制底图显示隐藏
129
+ CrossMapData: {
130
+ svgstr: '',
131
+ imgfilesrc: ''
132
+ }, // 管理底图数据
133
+ Motorways: [],
134
+ Texts: [],
135
+ Pedwalk: [],
136
+ Countdown: [],
137
+ Detector: [],
138
+ allitem: {
139
+ x: 435,
140
+ y: 325,
141
+ w: 870,
142
+ h: 650,
143
+ angle: 0
144
+ },
145
+ LanePhaseData: [], // 车道相位数据
146
+ // overlapLanePhaseData: [], // 车道跟随相位数据
147
+ curPhase: [], // 当前相位列表
148
+ phaseStatusList: [], // 相位状态列表
149
+ phaseStatusMap: new Map(), // 相位状态映射
150
+ phaseCountdownList: [], // 相位倒计时列表
151
+ overlapPhaseStatusMap: new Map(), // 跟随相位状态映射
152
+ ColorMap: new Map([[0, '#828282'], [1, '#ff2828'], [2, '#f7b500'], [3, '#77fb65'], [4, '#77fb65'], [5, '#f7b500']]), // 当前相位状态 --- 0:关灯, 1:红, 2:黄, 3:绿, 4:绿闪, 5:黄闪
153
+ SidewalkColorMap: new Map([[0, '#828282'], [1, '#e24b4b'], [3, '#7bd66b']]),
154
+ phaseControlColorMap: new Map([['黄闪', '#f7b500'], ['全红', '#ff2828'], ['关灯', '#828282'], ['默认', '#fff']]),
155
+ sidewalkPhaseData: [], // 行人相位
156
+ isHasPhase: true, // 是否有相位状态数据
157
+
158
+ detectorStatusList: [], // 车辆检测器状态列表
159
+ pedDetectorStatusList: [], // 行人检测器状态列表
160
+ detectorStatusMap: new Map(), // 车辆检测器状态映射
161
+ pedDetectorStatusMap: new Map(), // 行人检测器状态映射
162
+ DetectorData: [], // 检测器数据(包括车辆和行人)
163
+ DetectorColorMap: new Map([[0, 'transparent'], [1, '#00CCFF'], [2, '#FF0000']]) // 检测器状态填充颜色定义 0: 低电平 无车, 1: 高电平 有车, 2: 故障
164
+ }
165
+ },
166
+ methods: {
167
+ createPhaseStatusMap () {
168
+ // 生成相位id和相位状态对应数据结构
169
+ this.phaseStatusList.map(phase => {
170
+ let phaseId = phase.id
171
+ let phaseInfo = {
172
+ type: phase.type,
173
+ phaseCountdown: phase.countdown,
174
+ pedtype: phase.pedtype
175
+ }
176
+ this.phaseStatusMap.set(phaseId, phaseInfo)
177
+ })
178
+ },
179
+ createOverlapPhaseStatusMap () {
180
+ if (this.overlapStatusList) {
181
+ this.overlapStatusList.map(phase => {
182
+ let phaseId = phase.id
183
+ let phaseInfo = {
184
+ type: phase.type,
185
+ phaseCountdown: phase.countdown,
186
+ pedtype: phase.pedtype
187
+ }
188
+ this.overlapPhaseStatusMap.set(phaseId, phaseInfo)
189
+ })
190
+ }
191
+ },
192
+ getLanePhaseStatusData () {
193
+ let curLanePhaseData = []
194
+ for (let i = 0; i < this.LanePhaseData.length; i++) {
195
+ let curPhaseStatus
196
+ if (this.LanePhaseData[i].phasetype === 'phase') {
197
+ curPhaseStatus = this.phaseStatusMap.get(this.LanePhaseData[i].phaseid)
198
+ }
199
+ if (this.LanePhaseData[i].phasetype === 'overlap') {
200
+ curPhaseStatus = this.overlapPhaseStatusMap.get(this.LanePhaseData[i].phaseid)
201
+ }
202
+ // if (!curPhaseStatus) continue // 没有关联相位的车道不显示
203
+ let data
204
+ if (curPhaseStatus) {
205
+ data = {
206
+ ...this.LanePhaseData[i],
207
+ type: curPhaseStatus.type,
208
+ color: this.ColorMap.get(curPhaseStatus.type),
209
+ phaseCountdown: curPhaseStatus.phaseCountdown,
210
+ flag: 'phase' // 车道相位数据标识
211
+ }
212
+ } else {
213
+ // 没有关联的,或者没有对应状态的,车道显示默认白色
214
+ data = {
215
+ ...this.LanePhaseData[i],
216
+ type: undefined,
217
+ color: '#fff',
218
+ flag: 'phase' // 车道相位数据标识
219
+ }
220
+ }
221
+ curLanePhaseData.push(data)
222
+ }
223
+ this.LanePhaseData = JSON.parse(JSON.stringify(curLanePhaseData))
224
+ // console.log(this.LanePhaseData)
225
+ },
226
+ getpedStatus () {
227
+ // 行人相位状态
228
+ let curPedStatus = []
229
+ for (let i = 0; i < this.sidewalkPhaseData.length; i++) {
230
+ let curPhaseStatus
231
+ if (this.sidewalkPhaseData[i].phasetype === 'phase') {
232
+ curPhaseStatus = this.phaseStatusMap.get(this.sidewalkPhaseData[i].phaseid)
233
+ }
234
+ if (this.sidewalkPhaseData[i].phasetype === 'overlap') {
235
+ curPhaseStatus = this.overlapPhaseStatusMap.get(this.sidewalkPhaseData[i].phaseid)
236
+ }
237
+ // if (!curPhaseStatus) continue
238
+ let data
239
+ if (curPhaseStatus) {
240
+ data = {
241
+ ...this.sidewalkPhaseData[i],
242
+ pedtype: curPhaseStatus.pedtype,
243
+ color: this.SidewalkColorMap.get(curPhaseStatus.pedtype),
244
+ flag: 'ped' // 行人相位数据标识
245
+ }
246
+ } else {
247
+ // 接口没有对应的状态
248
+ data = {
249
+ ...this.sidewalkPhaseData[i],
250
+ pedtype: undefined,
251
+ color: '#fff',
252
+ flag: 'ped' // 行人相位数据标识
253
+ }
254
+ }
255
+ curPedStatus.push(data)
256
+ }
257
+ this.sidewalkPhaseData = JSON.parse(JSON.stringify(curPedStatus))
258
+ // this.Pedwalk = JSON.parse(JSON.stringify(this.sidewalkPhaseData))
259
+ },
260
+ getCurPhaseCountdown () {
261
+ // 获取当前相位倒计时颜色
262
+ let phaseCountdownList = []
263
+ this.curPhase.forEach(curP => {
264
+ this.phaseStatusList.forEach(phaseInfo => {
265
+ if (phaseInfo.id === curP) {
266
+ let countdownObj = {}
267
+ countdownObj.id = phaseInfo.id
268
+ countdownObj.phaseCountdown = phaseInfo.countdown
269
+ countdownObj.phaseCountdownColor = this.ColorMap.get(phaseInfo.type)
270
+ phaseCountdownList.push(countdownObj)
271
+ }
272
+ })
273
+ })
274
+ this.phaseCountdownList = JSON.parse(JSON.stringify(phaseCountdownList))
275
+ // console.log(this.phaseCountdownList)
276
+ },
277
+ // 加载
278
+ load (type) {
279
+ this.getChannelizatonChart().then((channelizatondata) => {
280
+ let savedTemp = JSON.parse(JSON.stringify(channelizatondata))
281
+ for (const [key, value] of Object.entries(savedTemp)) {
282
+ if (key === 'vehile') {
283
+ this.Motorways = value
284
+ }
285
+ if (key === 'text') {
286
+ this.Texts = value
287
+ }
288
+ if (key === 'ped') {
289
+ this.Pedwalk = value
290
+ }
291
+ if (key === 'countdown') {
292
+ this.Countdown = value
293
+ }
294
+ if (key === 'detector') {
295
+ this.Detector = value.filter(ele => ele.detailtype === 'detector')
296
+ }
297
+ if (key === 'crossMap') {
298
+ this.CrossMapData = JSON.parse(JSON.stringify(value))
299
+ if (value.type === 'vectorgraph') {
300
+ // svg底图,只加载底图870*650区域范围内的元素
301
+ let { svgstr, ...allitem } = value
302
+ this.allitem = allitem
303
+ } else {
304
+ this.allitem = {
305
+ x: 435,
306
+ y: 325,
307
+ w: 870,
308
+ h: 650,
309
+ angle: 0
310
+ }
311
+ }
312
+ }
313
+ }
314
+ this.isSeletable = false
315
+ // 从接口得到所有渠化车道和人行道数据
316
+ this.LanePhaseData = JSON.parse(JSON.stringify(this.Motorways))
317
+ this.sidewalkPhaseData = JSON.parse(JSON.stringify(this.Pedwalk))
318
+ this.DetectorData = JSON.parse(JSON.stringify(this.Detector))
319
+ })
320
+ },
321
+ // 重置
322
+ handleReset () {
323
+ this.Texts = []
324
+ this.Motorways = []
325
+ this.Countdown = []
326
+ this.phaseCountdownList = []
327
+ this.Pedwalk = []
328
+ this.Detector = []
329
+ this.CrossMapData = {
330
+ svgstr: '',
331
+ imgfilesrc: ''
332
+ }
333
+ this.LanePhaseData = []
334
+ this.sidewalkPhaseData = []
335
+ this.DetectorData = []
336
+ this.isHasPhase = true
337
+ },
338
+ getChannelizatonChart () {
339
+ // let agentid = getIframdevid()
340
+ // 路口已设置渠化,则总览默认显示渠化路口,未设置显示模版路口
341
+ // if (this.isfromatc === true) {
342
+ // this.$store.dispatch('SetShowHomePage', 'Graphical')
343
+ // }
344
+ this.handleReset()
345
+ return new Promise((resolve, reject) => {
346
+ getChannelizatonChart(this.AgentId).then(data => {
347
+ if (!data.data.success) {
348
+ // let parrenterror = getMessageByCode(data.data.code, this.$i18n.locale)
349
+ // if (data.data.data) {
350
+ // // 子类型错误
351
+ // let childErrorCode = data.data.data.errorCode
352
+ // if (childErrorCode) {
353
+ // let childerror = getMessageByCode(data.data.data.errorCode, this.$i18n.locale)
354
+ // this.$message.error(parrenterror + ',' + childerror)
355
+ // }
356
+ // } else {
357
+ // this.$message.error(parrenterror)
358
+ // }
359
+ return
360
+ }
361
+ if (JSON.stringify(data.data.data) === '{}') return
362
+ // if (this.isfromatc === true) {
363
+ // this.$store.dispatch('SetShowHomePage', 'Channelization')
364
+ // }
365
+ this.handleReset()
366
+ let channelizatondata = data.data.data
367
+ resolve(channelizatondata)
368
+ })
369
+ })
370
+ },
371
+ SpecialControl (data) {
372
+ switch (data.control) {
373
+ case 1: this.handleSpecialControlStatus('黄闪')
374
+ break
375
+ case 2: this.handleSpecialControlStatus('全红')
376
+ break
377
+ case 3: this.handleSpecialControlStatus('关灯')
378
+ break
379
+ default: this.handleSpecialControlStatus('默认')
380
+ }
381
+ },
382
+ handleSpecialControlStatus (Control) {
383
+ this.$refs.channelizationElements.resetPhaseStatus()
384
+ // 控制黄闪、全红、关灯、默认情况下的车道相位颜色和倒计时颜色
385
+ if (Control === '默认') {
386
+ // 倒计时恢复默认颜色
387
+ this.phaseCountdownList.forEach(item => {
388
+ item.phaseCountdown = ''
389
+ item.id = ''
390
+ item.phaseCountdownColor = '#fff'
391
+ })
392
+ }
393
+ if (this.LanePhaseData.length) {
394
+ const LanePhaseData = this.LanePhaseData.map(data => ({
395
+ ...data,
396
+ color: this.phaseControlColorMap.get(Control)
397
+ }))
398
+ this.LanePhaseData = JSON.parse(JSON.stringify(LanePhaseData))
399
+ }
400
+ if (this.sidewalkPhaseData.length) {
401
+ const sidewalkPhaseData = this.sidewalkPhaseData.map(data => ({
402
+ ...data,
403
+ color: this.phaseControlColorMap.get(Control)
404
+ }))
405
+ this.sidewalkPhaseData = JSON.parse(JSON.stringify(sidewalkPhaseData))
406
+ }
407
+ this.isHasPhase = false
408
+ },
409
+ createDetectorStatusMap () {
410
+ if (this.detectorStatusList) {
411
+ this.detectorStatusList.map(detector => {
412
+ let detectorId = detector.id
413
+ let detectorInfo = {
414
+ state: detector.state
415
+ }
416
+ this.detectorStatusMap.set(detectorId, detectorInfo)
417
+ })
418
+ }
419
+ if (this.pedDetectorStatusList) {
420
+ this.pedDetectorStatusList.map(peddetector => {
421
+ let peddetectorId = peddetector.id
422
+ let peddetectorInfo = {
423
+ state: peddetector.state
424
+ }
425
+ this.pedDetectorStatusMap.set(peddetectorId, peddetectorInfo)
426
+ })
427
+ }
428
+ // console.log(this.detectorStatusMap)
429
+ // console.log(this.pedDetectorStatusMap)
430
+ },
431
+ getDetectorStatus () {
432
+ let curDetectorData = []
433
+ for (let i = 0; i < this.DetectorData.length; i++) {
434
+ let curDetectorStatus
435
+ let curDetectortype = this.DetectorData[i].detectortype
436
+ if (curDetectortype === 1) {
437
+ // 车辆检测器
438
+ curDetectorStatus = this.detectorStatusMap.get(this.DetectorData[i].detectorid)
439
+ }
440
+ if (curDetectortype === 2) {
441
+ // 行人检测器
442
+ curDetectorStatus = this.pedDetectorStatusMap.get(this.DetectorData[i].detectorid)
443
+ }
444
+ // if (!curDetectorStatus) continue // 没有关联检测器不显示
445
+ let data
446
+ if (curDetectorStatus) {
447
+ data = {
448
+ ...this.DetectorData[i],
449
+ state: curDetectorStatus.state,
450
+ fillcolor: this.DetectorColorMap.get(curDetectorStatus.state),
451
+ flag: curDetectortype === 1 ? 'detector' : 'peddetector' // 车道相位数据标识
452
+ }
453
+ } else {
454
+ // 没有关联检测器的填充透明
455
+ data = {
456
+ ...this.DetectorData[i],
457
+ state: undefined,
458
+ fillcolor: 'transparent',
459
+ flag: curDetectortype === 1 ? 'detector' : 'peddetector' // 车道相位数据标识
460
+ }
461
+ }
462
+ curDetectorData.push(data)
463
+ }
464
+ this.DetectorData = JSON.parse(JSON.stringify(curDetectorData))
465
+ },
466
+ getParentSize () {
467
+ // 获取最外层dom尺寸,适配准备
468
+ var _this = this
469
+ this.$nextTick(function () {
470
+ if (this.$el.parentElement === null || this.$el.parentElement === undefined) return
471
+ this.bodyDomSize.width = this.$el.parentElement.clientWidth
472
+ this.bodyDomWidth = this.bodyDomSize.width
473
+ window.addEventListener('resize', () => {
474
+ // 定义窗口大小变更通知事件
475
+ _this.bodyDomSize.width = _this.$el.parentElement.clientWidth
476
+ this.bodyDomWidth = this.bodyDomSize.width
477
+ console.log('resize this.bodyDomSize.width', _this.bodyDomSize.width)
478
+ }, false)
479
+ })
480
+ }
481
+ },
482
+ created () {
483
+ this.load()
484
+ },
485
+ mounted () {
486
+ this.getParentSize()
487
+ },
488
+ destroyed () {
489
+ this.handleReset()
490
+ }
491
+ }
492
+ </script>
493
+
494
+ <style lang="css" rel="stylesheet/scss">
495
+ .show-channelization {
496
+ position: relative;
497
+ }
498
+ .superlargeCrossImg {
499
+ zoom: 1;
500
+ }
501
+ .largeCrossImg {
502
+ zoom: 0.9;
503
+
504
+ }
505
+ .middleCrossImg {
506
+ zoom: 0.8;
507
+ }
508
+ .smallCrossImg {
509
+ zoom: 0.65;
510
+ }
511
+ .miniCrossImg {
512
+ zoom: 0.5;
513
+ }
514
+ .superminiCrossImg {
515
+ zoom: 0.45;
516
+ }
517
+ .minimumCrossImg {
518
+ zoom: 0.35;
519
+ }
520
+ .transMiddleCrossImg {
521
+ -webkit-transform-origin-y: 0;
522
+ transform: scale(0.55);
523
+ margin-top: 3%;
524
+ padding: 0PX;
525
+ }
526
+ .transMiddleCrossImg2 {
527
+ -webkit-transform-origin-y: 0;
528
+ transform: scale(0.38);
529
+ margin-top: -1.5%;
530
+ padding: 0PX;
531
+ }
532
+ .transMiddleCrossImg3 {
533
+ -webkit-transform-origin-y: 0;
534
+ transform: scale(0.32);
535
+ margin-top: -1%;
536
+ padding: 0PX;
537
+ }
538
+ .transMiniCrossImg {
539
+ -webkit-transform-origin-y: 0;
540
+ transform: scale(0.28);
541
+ margin-top: -1.6%;
542
+ padding: 0PX;
543
+ }
544
+ </style>
@@ -0,0 +1,2 @@
1
+ import Channelization from './Channelization.vue'
2
+ export default Channelization