openatc-components 0.0.94 → 0.0.95

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