openatc-components 0.0.94 → 0.0.97

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 (124) 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/SchemeConfig.vue +16 -0
  34. package/package/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +2 -2
  35. package/package/kisscomps/components/SchemeConfig/priorityControl/index.vue +190 -0
  36. package/package/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -0
  37. package/package/kisscomps/index.js +13 -1
  38. package/package/kissui.min.js +1 -1
  39. package/package.json +13 -10
  40. package/src/api/cross.js +33 -0
  41. package/src/i18n/language/en.js +106 -3
  42. package/src/i18n/language/zh.js +106 -3
  43. package/src/icons/svg/custom-BRTlane.svg +40 -0
  44. package/src/icons/svg/custom-bicyclelane.svg +7 -0
  45. package/src/icons/svg/custom-buslane.svg +40 -0
  46. package/src/icons/svg/custom-detector.svg +12 -0
  47. package/src/icons/svg/custom-east-bottom.svg +32 -0
  48. package/src/icons/svg/custom-east-top.svg +32 -0
  49. package/src/icons/svg/custom-ewped.svg +35 -0
  50. package/src/icons/svg/custom-motorway.svg +7 -0
  51. package/src/icons/svg/custom-nonmotorizedlane.svg +40 -0
  52. package/src/icons/svg/custom-north-left.svg +32 -0
  53. package/src/icons/svg/custom-north-right.svg +32 -0
  54. package/src/icons/svg/custom-pedcrossing.svg +7 -0
  55. package/src/icons/svg/custom-peddetector.svg +17 -0
  56. package/src/icons/svg/custom-pedeastward.svg +9 -0
  57. package/src/icons/svg/custom-pedestrian.svg +7 -0
  58. package/src/icons/svg/custom-pednorthward.svg +9 -0
  59. package/src/icons/svg/custom-pedsouthward.svg +9 -0
  60. package/src/icons/svg/custom-pedwestward.svg +9 -0
  61. package/src/icons/svg/custom-secondcrossing.svg +7 -0
  62. package/src/icons/svg/custom-sectionpedestrian.svg +7 -0
  63. package/src/icons/svg/custom-snped.svg +35 -0
  64. package/src/icons/svg/custom-south-left.svg +32 -0
  65. package/src/icons/svg/custom-south-right.svg +32 -0
  66. package/src/icons/svg/custom-straightahead.svg +7 -0
  67. package/src/icons/svg/custom-tramlane.svg +40 -0
  68. package/src/icons/svg/custom-turnaround.svg +7 -0
  69. package/src/icons/svg/custom-turnleft.svg +7 -0
  70. package/src/icons/svg/custom-turnright.svg +7 -0
  71. package/src/icons/svg/custom-vehiclebranch.svg +40 -0
  72. package/src/icons/svg/custom-vehiclemainroad.svg +41 -0
  73. package/src/icons/svg/custom-west-bottom.svg +32 -0
  74. package/src/icons/svg/custom-west-top.svg +32 -0
  75. package/src/icons/svg/custom-xlped.svg +14 -0
  76. package/src/icons/svg/custom-xpedestrian.svg +7 -0
  77. package/src/icons/svg/custom-xrped.svg +14 -0
  78. package/src/kisscomps/components/Channelization/Channelization.vue +546 -0
  79. package/src/kisscomps/components/Channelization/index.js +2 -0
  80. package/src/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +494 -0
  81. package/src/kisscomps/components/ChannelizationWithInterface/index.js +2 -0
  82. package/src/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +249 -0
  83. package/src/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -0
  84. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -0
  85. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +176 -0
  86. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -0
  87. package/src/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +48 -0
  88. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +182 -0
  89. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +222 -0
  90. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +191 -0
  91. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +78 -0
  92. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +433 -0
  93. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +195 -0
  94. package/src/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +71 -0
  95. package/src/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +940 -0
  96. package/src/kisscomps/components/DrawChannelization/drawsvg/index.vue +109 -0
  97. package/src/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +563 -0
  98. package/src/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +157 -0
  99. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.check.vue +191 -0
  100. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.syncOper.vue +331 -0
  101. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +157 -0
  102. package/src/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -0
  103. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +43 -0
  104. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -0
  105. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -0
  106. package/src/kisscomps/components/DrawChannelization/index.js +2 -0
  107. package/src/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -0
  108. package/src/kisscomps/components/KanBan/kanban.vue +1 -1
  109. package/src/kisscomps/components/MessageBox/index.vue +96 -0
  110. package/src/kisscomps/components/SchemeConfig/SchemeConfig.vue +16 -0
  111. package/src/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +2 -2
  112. package/src/kisscomps/components/SchemeConfig/priorityControl/index.vue +190 -0
  113. package/src/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -0
  114. package/src/kisscomps/index.js +13 -1
  115. package/src/main.js +3 -0
  116. package/src/router/index.js +7 -0
  117. package/src/store/index.js +2 -2
  118. package/src/store/modules/globalParam.js +56 -16
  119. package/src/views/customchannelization.vue +49 -0
  120. package/src/views/intersection.vue +17 -9
  121. package/static/apiconfig.json +15 -0
  122. package/static/styles/channelizatioon.scss +365 -0
  123. package/static/styles/common.scss +1 -0
  124. package/static/styles/schemeconfig.scss +52 -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