openatc-components 0.5.15 → 0.5.17

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 (390) hide show
  1. package/.babelrc +18 -18
  2. package/.editorconfig +9 -9
  3. package/.eslintignore +5 -5
  4. package/.eslintrc.js +31 -31
  5. package/.postcssrc.js +10 -10
  6. package/README.md +30 -30
  7. package/build/build.js +41 -41
  8. package/build/check-versions.js +54 -54
  9. package/build/package.config.js +58 -58
  10. package/build/package.dev.config.js +107 -107
  11. package/build/package.prod.config.js +160 -160
  12. package/build/utils.js +101 -101
  13. package/build/vue-loader.conf.js +22 -22
  14. package/build/webpack.base.conf.js +120 -120
  15. package/build/webpack.dev.conf.js +95 -95
  16. package/build/webpack.prod.conf.js +149 -149
  17. package/config/prod.env.js +5 -5
  18. package/config/test.env.js +7 -7
  19. package/index.html +12 -12
  20. package/package/kisscomps/components/Channelization/Channelization.vue +585 -585
  21. package/package/kisscomps/components/ChannelizationFlowStatistic/ChannelizationFlowStatistic.vue +360 -360
  22. package/package/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +518 -518
  23. package/package/kisscomps/components/CommonKanban/CommonKanban.vue +132 -132
  24. package/package/kisscomps/components/DirectionListConfiguration/DirectionListConfiguration.vue +2 -2
  25. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-east-bottom.vue +41 -41
  26. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-east-top.vue +60 -60
  27. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-ewped.vue +105 -105
  28. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-north-left.vue +60 -60
  29. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-north-right.vue +60 -60
  30. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-snped.vue +105 -105
  31. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-south-left.vue +60 -60
  32. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-south-right.vue +60 -60
  33. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-west-bottom.vue +60 -60
  34. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-west-top.vue +60 -60
  35. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-xlped.vue +30 -30
  36. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-xrped.vue +30 -30
  37. package/package/kisscomps/components/DirectionListConfiguration/svg/pedSvg.vue +78 -78
  38. package/package/kisscomps/components/DrawChannelization/drawsvg/basicCoordInfo.vue +181 -181
  39. package/package/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +255 -255
  40. package/package/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -152
  41. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -91
  42. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +194 -194
  43. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -108
  44. package/package/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +51 -51
  45. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +236 -236
  46. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +247 -247
  47. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +210 -210
  48. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +72 -72
  49. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +368 -368
  50. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +230 -230
  51. package/package/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +74 -74
  52. package/package/kisscomps/components/DrawChannelization/drawsvg/index.vue +144 -144
  53. package/package/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +707 -707
  54. package/package/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +172 -172
  55. package/package/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -99
  56. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +87 -87
  57. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -32
  58. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -20
  59. package/package/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -278
  60. package/package/kisscomps/components/ExpendConfig/ExpendConfig.vue +118 -118
  61. package/package/kisscomps/components/FaultDetailModal/FaultDetailModal.vue +178 -178
  62. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/CrossRoadsSvg.vue +629 -629
  63. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/CustomRoadsSvg.vue +46 -46
  64. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionEWSvg.vue +447 -447
  65. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionSNSvg.vue +341 -341
  66. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampEastSvg.vue +497 -497
  67. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampNorthSvg.vue +353 -353
  68. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampSouthSvg.vue +359 -359
  69. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampWestSvg.vue +443 -443
  70. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkSvg.vue +1190 -1190
  71. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeEastRoadsSvg.vue +498 -498
  72. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeNorthRoadsSvg.vue +484 -484
  73. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeSouthRoadsSvg.vue +488 -488
  74. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeWestRoadsSvg.vue +566 -566
  75. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LCrossRoadsSvg.vue +640 -640
  76. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeEastRoadsSvg.vue +497 -497
  77. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeNorthRoadsSvg.vue +486 -486
  78. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeSouthRoadsSvg.vue +490 -490
  79. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeWestRoadsSvg.vue +575 -575
  80. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/refreshSvg.vue +63 -63
  81. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/busMapSvg.vue +50 -50
  82. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/eastBusSvg.vue +167 -167
  83. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/northBusSvg.vue +168 -168
  84. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/southBusSvg.vue +168 -168
  85. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/westBusSvg.vue +169 -169
  86. package/package/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/rampPhaseIconSvg.vue +122 -122
  87. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.json +196 -196
  88. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.left.json +196 -196
  89. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.json +16 -0
  90. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.left.json +115 -115
  91. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/rampPos.json +52 -52
  92. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/sidePos.json +16 -0
  93. package/package/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +534 -534
  94. package/package/kisscomps/components/KanBan/kanban.vue +231 -231
  95. package/package/kisscomps/components/MessageBox/index.vue +96 -96
  96. package/package/kisscomps/components/OverviewComponent/index.vue +22 -48
  97. package/package/kisscomps/components/PatternOptimize/PatternOptimize.vue +329 -329
  98. package/package/kisscomps/components/PatternWalkSvg/PatternWalkSvg.vue +423 -423
  99. package/package/kisscomps/components/PhaseDirectionSelect/PhaseDirectionSelect.vue +126 -126
  100. package/package/kisscomps/components/PhaseDirectionText/PhaseDirectionText.vue +106 -106
  101. package/package/kisscomps/components/PhaseLegend/PhaseLegend.vue +286 -286
  102. package/package/kisscomps/components/PhaseMarker/index.js +6 -6
  103. package/package/kisscomps/components/PhaseMarker/phasemarker.vue +215 -215
  104. package/package/kisscomps/components/PhaseMarker/svg/patternSvg.vue +121 -121
  105. package/package/kisscomps/components/PhaseMarker/svg/phase.vue +60 -60
  106. package/package/kisscomps/components/PhaseMarker/svg/phaseCount.vue +62 -62
  107. package/package/kisscomps/components/PhaseMarker/svg/phaseCountCycle.vue +62 -62
  108. package/package/kisscomps/components/PhaseMarker/svg/phaseSvg.vue +117 -117
  109. package/package/kisscomps/components/PhasePedSelect/index.vue +206 -206
  110. package/package/kisscomps/components/SchemeConfig/SchemeConfig.vue +7 -30
  111. package/package/kisscomps/components/SchemeConfig/azimuthlocking/index.vue +365 -365
  112. package/package/kisscomps/components/SchemeConfig/azimuthlocking/utils.js +92 -92
  113. package/package/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +214 -214
  114. package/package/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +235 -235
  115. package/package/kisscomps/components/SchemeConfig/manualControlModal/index.vue +235 -235
  116. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/controlModelGroup.vue +131 -131
  117. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/othersIcon.vue +151 -151
  118. package/package/kisscomps/components/SchemeConfig/priorityControl/index.vue +215 -215
  119. package/package/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -163
  120. package/package/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +308 -308
  121. package/package/kisscomps/components/SchemeConfig/tentativeplancontrolmodal/index.vue +0 -19
  122. package/package/kisscomps/components/SchemeConfig/utils/thirdPartypermission.js +95 -95
  123. package/package/kisscomps/components/SelectCrossPhase/index.vue +1 -1
  124. package/package/kisscomps/components/StageOptimize/StageOptimize.vue +367 -367
  125. package/package/kisscomps/components/StageOptimize/index.js +2 -2
  126. package/package/kisscomps/components/StageStatus/StageStatus.vue +341 -341
  127. package/package/kisscomps/components/SvgIcon/SvgIcon.vue +53 -53
  128. package/package/kisscomps/components/XiaoKanban/DirSelector.vue +356 -356
  129. package/package/kisscomps/components/XiaoKanban/index.vue +122 -122
  130. package/package/kisscomps/components/overView/index.vue +7 -30
  131. package/package/kisscomps/components/patternConfig/index.vue +4 -12
  132. package/package/kisscomps/components/patternConfig/pattern/planChart/model/coordinationModel.js +665 -665
  133. package/package/kisscomps/components/patternConfig/planContent.vue +604 -604
  134. package/package/kisscomps/components/patternConfig/planMenu.vue +329 -329
  135. package/package/kisscomps/components/patternConfig/utils.js +84 -152
  136. package/package/kisscomps/index.js +6 -2
  137. package/package/kissui.js +216608 -0
  138. package/package/kissui.min.js +1 -1
  139. package/package.json +1 -1
  140. package/pnpm-lock.yaml +16362 -0
  141. package/src/App.vue +20 -24
  142. package/src/EdgeMgr/EdgeModelBase.js +16 -16
  143. package/src/EdgeMgr/controller/crossDiagramMgr.js +125 -125
  144. package/src/api/authapi.js +31 -31
  145. package/src/api/config.js +21 -21
  146. package/src/api/control.js +110 -110
  147. package/src/api/device.js +135 -135
  148. package/src/api/fault.js +66 -66
  149. package/src/api/index.js +24 -24
  150. package/src/api/login.js +46 -46
  151. package/src/api/optimize.js +72 -72
  152. package/src/api/passwdAssest.js +101 -101
  153. package/src/api/permission.js +33 -33
  154. package/src/api/route.js +171 -171
  155. package/src/assets/font/LICENSE.txt +202 -202
  156. package/src/assets/font/font.css +6 -6
  157. package/src/i18n/index.js +26 -26
  158. package/src/i18n/language/en.js +113 -27
  159. package/src/i18n/language/index.js +31 -25
  160. package/src/i18n/language/ru.js +1563 -0
  161. package/src/i18n/language/zh.js +113 -27
  162. package/src/icons/index.js +20 -20
  163. package/src/icons/svg/azimuthlocking.svg +26 -26
  164. package/src/icons/svg/bendi.svg +110 -110
  165. package/src/icons/svg/bujin.svg +36 -36
  166. package/src/icons/svg/connectBlue.svg +7 -7
  167. package/src/icons/svg/currentvolume.svg +0 -0
  168. package/src/icons/svg/custom-BRTlane.svg +40 -40
  169. package/src/icons/svg/custom-buslane.svg +40 -40
  170. package/src/icons/svg/custom-detector.svg +12 -12
  171. package/src/icons/svg/custom-east-bottom.svg +32 -32
  172. package/src/icons/svg/custom-east-top.svg +32 -32
  173. package/src/icons/svg/custom-ewped.svg +35 -35
  174. package/src/icons/svg/custom-nonmotorizedlane.svg +40 -40
  175. package/src/icons/svg/custom-north-left.svg +32 -32
  176. package/src/icons/svg/custom-north-right.svg +32 -32
  177. package/src/icons/svg/custom-peddetector.svg +17 -17
  178. package/src/icons/svg/custom-snped.svg +35 -35
  179. package/src/icons/svg/custom-south-left.svg +32 -32
  180. package/src/icons/svg/custom-south-right.svg +32 -32
  181. package/src/icons/svg/custom-tramlane.svg +40 -40
  182. package/src/icons/svg/custom-vehiclebranch.svg +40 -40
  183. package/src/icons/svg/custom-vehiclemainroad.svg +41 -41
  184. package/src/icons/svg/custom-west-bottom.svg +32 -32
  185. package/src/icons/svg/custom-west-top.svg +32 -32
  186. package/src/icons/svg/custom-xlped.svg +14 -14
  187. package/src/icons/svg/custom-xrped.svg +14 -14
  188. package/src/icons/svg/cutRed.svg +7 -7
  189. package/src/icons/svg/cycle.svg +0 -0
  190. package/src/icons/svg/dingzhouqi.svg +34 -34
  191. package/src/icons/svg/ganyingkongzhi.svg +30 -30
  192. package/src/icons/svg/guandeng.svg +81 -81
  193. package/src/icons/svg/huangshan.svg +71 -71
  194. package/src/icons/svg/maincontrol.svg +0 -0
  195. package/src/icons/svg/manualcontrolbackground.svg +51 -51
  196. package/src/icons/svg/manualcontrolbackground1.svg +62 -62
  197. package/src/icons/svg/manualcontrolbackgrounden.svg +62 -62
  198. package/src/icons/svg/model.svg +0 -0
  199. package/src/icons/svg/phasediff.svg +0 -0
  200. package/src/icons/svg/prioritycontrol.svg +21 -21
  201. package/src/icons/svg/quanhong.svg +86 -86
  202. package/src/icons/svg/shanghe.svg +11 -11
  203. package/src/icons/svg/shoudong.svg +103 -103
  204. package/src/icons/svg/tentativeplan.svg +28 -28
  205. package/src/icons/svg/time.svg +0 -0
  206. package/src/icons/svg/wuxianlan.svg +46 -46
  207. package/src/icons/svg/xiala.svg +11 -11
  208. package/src/icons/svg/xingrenguojie.svg +33 -33
  209. package/src/icons/svg/xitong.svg +89 -89
  210. package/src/icons/svg/youxian.svg +41 -41
  211. package/src/icons/svg/zizhukongzhi.svg +43 -43
  212. package/src/kisscomps/components/Channelization/Channelization.vue +585 -585
  213. package/src/kisscomps/components/ChannelizationFlowStatistic/ChannelizationFlowStatistic.vue +360 -360
  214. package/src/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +518 -518
  215. package/src/kisscomps/components/CommonKanban/CommonKanban.vue +132 -132
  216. package/src/kisscomps/components/DirectionListConfiguration/DirectionListConfiguration.vue +2 -2
  217. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-east-bottom.vue +41 -41
  218. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-east-top.vue +60 -60
  219. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-ewped.vue +105 -105
  220. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-north-left.vue +60 -60
  221. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-north-right.vue +60 -60
  222. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-snped.vue +105 -105
  223. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-south-left.vue +60 -60
  224. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-south-right.vue +60 -60
  225. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-west-bottom.vue +60 -60
  226. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-west-top.vue +60 -60
  227. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-xlped.vue +30 -30
  228. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-xrped.vue +30 -30
  229. package/src/kisscomps/components/DirectionListConfiguration/svg/pedSvg.vue +78 -78
  230. package/src/kisscomps/components/DrawChannelization/drawsvg/basicCoordInfo.vue +181 -181
  231. package/src/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +255 -255
  232. package/src/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -152
  233. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -91
  234. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +194 -194
  235. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -108
  236. package/src/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +51 -51
  237. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +236 -236
  238. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +247 -247
  239. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +210 -210
  240. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +72 -72
  241. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +368 -368
  242. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +230 -230
  243. package/src/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +74 -74
  244. package/src/kisscomps/components/DrawChannelization/drawsvg/index.vue +144 -144
  245. package/src/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +707 -707
  246. package/src/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +172 -172
  247. package/src/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -99
  248. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +87 -87
  249. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -32
  250. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -20
  251. package/src/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -278
  252. package/src/kisscomps/components/ExpendConfig/ExpendConfig.vue +118 -118
  253. package/src/kisscomps/components/FaultDetailModal/FaultDetailModal.vue +178 -178
  254. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/CrossRoadsSvg.vue +629 -629
  255. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/CustomRoadsSvg.vue +46 -46
  256. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionEWSvg.vue +447 -447
  257. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionSNSvg.vue +341 -341
  258. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampEastSvg.vue +497 -497
  259. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampNorthSvg.vue +353 -353
  260. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampSouthSvg.vue +359 -359
  261. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampWestSvg.vue +443 -443
  262. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkSvg.vue +1190 -1190
  263. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeEastRoadsSvg.vue +498 -498
  264. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeNorthRoadsSvg.vue +484 -484
  265. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeSouthRoadsSvg.vue +488 -488
  266. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeWestRoadsSvg.vue +566 -566
  267. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LCrossRoadsSvg.vue +640 -640
  268. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeEastRoadsSvg.vue +497 -497
  269. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeNorthRoadsSvg.vue +486 -486
  270. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeSouthRoadsSvg.vue +490 -490
  271. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeWestRoadsSvg.vue +575 -575
  272. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/refreshSvg.vue +63 -63
  273. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/busMapSvg.vue +50 -50
  274. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/eastBusSvg.vue +167 -167
  275. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/northBusSvg.vue +168 -168
  276. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/southBusSvg.vue +168 -168
  277. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/westBusSvg.vue +169 -169
  278. package/src/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/rampPhaseIconSvg.vue +122 -122
  279. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.json +196 -196
  280. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.left.json +196 -196
  281. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.json +16 -0
  282. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.left.json +115 -115
  283. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/rampPos.json +52 -52
  284. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/sidePos.json +16 -0
  285. package/src/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +534 -534
  286. package/src/kisscomps/components/KanBan/kanban.vue +231 -231
  287. package/src/kisscomps/components/MessageBox/index.vue +96 -96
  288. package/src/kisscomps/components/OverviewComponent/index.vue +22 -48
  289. package/src/kisscomps/components/PatternOptimize/PatternOptimize.vue +329 -329
  290. package/src/kisscomps/components/PatternWalkSvg/PatternWalkSvg.vue +423 -423
  291. package/src/kisscomps/components/PhaseDirectionSelect/PhaseDirectionSelect.vue +126 -126
  292. package/src/kisscomps/components/PhaseDirectionText/PhaseDirectionText.vue +106 -106
  293. package/src/kisscomps/components/PhaseLegend/PhaseLegend.vue +286 -286
  294. package/src/kisscomps/components/PhaseMarker/index.js +6 -6
  295. package/src/kisscomps/components/PhaseMarker/phasemarker.vue +215 -215
  296. package/src/kisscomps/components/PhaseMarker/svg/patternSvg.vue +121 -121
  297. package/src/kisscomps/components/PhaseMarker/svg/phase.vue +60 -60
  298. package/src/kisscomps/components/PhaseMarker/svg/phaseCount.vue +62 -62
  299. package/src/kisscomps/components/PhaseMarker/svg/phaseCountCycle.vue +62 -62
  300. package/src/kisscomps/components/PhaseMarker/svg/phaseSvg.vue +117 -117
  301. package/src/kisscomps/components/PhasePedSelect/index.vue +206 -206
  302. package/src/kisscomps/components/SchemeConfig/SchemeConfig.vue +7 -30
  303. package/src/kisscomps/components/SchemeConfig/azimuthlocking/index.vue +365 -365
  304. package/src/kisscomps/components/SchemeConfig/azimuthlocking/utils.js +92 -92
  305. package/src/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +214 -214
  306. package/src/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +235 -235
  307. package/src/kisscomps/components/SchemeConfig/manualControlModal/index.vue +235 -235
  308. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/controlModelGroup.vue +131 -131
  309. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/othersIcon.vue +151 -151
  310. package/src/kisscomps/components/SchemeConfig/priorityControl/index.vue +215 -215
  311. package/src/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -163
  312. package/src/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +308 -308
  313. package/src/kisscomps/components/SchemeConfig/tentativeplancontrolmodal/index.vue +0 -19
  314. package/src/kisscomps/components/SchemeConfig/utils/thirdPartypermission.js +95 -95
  315. package/src/kisscomps/components/SelectCrossPhase/index.vue +1 -1
  316. package/src/kisscomps/components/StageOptimize/StageOptimize.vue +367 -367
  317. package/src/kisscomps/components/StageOptimize/index.js +2 -2
  318. package/src/kisscomps/components/StageStatus/StageStatus.vue +341 -341
  319. package/src/kisscomps/components/SvgIcon/SvgIcon.vue +53 -53
  320. package/src/kisscomps/components/XiaoKanban/DirSelector.vue +356 -356
  321. package/src/kisscomps/components/XiaoKanban/index.vue +122 -122
  322. package/src/kisscomps/components/overView/index.vue +7 -30
  323. package/src/kisscomps/components/patternConfig/index.vue +4 -12
  324. package/src/kisscomps/components/patternConfig/pattern/planChart/model/coordinationModel.js +665 -665
  325. package/src/kisscomps/components/patternConfig/planContent.vue +604 -604
  326. package/src/kisscomps/components/patternConfig/planMenu.vue +329 -329
  327. package/src/kisscomps/components/patternConfig/utils.js +84 -152
  328. package/src/kisscomps/index.js +6 -2
  329. package/src/lib/publicjs/ArryListUtil.js +38 -38
  330. package/src/lib/publicjs/HttpurlMgr.js +45 -45
  331. package/src/lib/publicjs/KissApi.js +158 -158
  332. package/src/lib/publicjs/KissWSSub/Heartcheck.js +128 -128
  333. package/src/lib/publicjs/KissWSSub/KissWsSub.js +91 -91
  334. package/src/lib/publicjs/KissWSSub/KissWsSubByType.js +152 -152
  335. package/src/lib/publicjs/KissWSSub/SimuWsSubByType.js +44 -44
  336. package/src/lib/publicjs/KissWSSub/Sub.js +51 -51
  337. package/src/lib/publicjs/KissWSSub/SubChannel.js +119 -119
  338. package/src/lib/publicjs/basecomponents.js +65 -65
  339. package/src/lib/publicjs/localStorage.js +112 -112
  340. package/src/lib/publicjs/objdeepcopy.js +32 -32
  341. package/src/lib/publicjs/pageScroll.js +30 -30
  342. package/src/lib/publicjs/passwdAssest.js +101 -101
  343. package/src/lib/publicjs/styleclassfactory.js +32 -32
  344. package/src/store/index.js +26 -26
  345. package/src/store/modules/globalParam.js +67 -67
  346. package/src/utils/ControlFormat.js +14 -36
  347. package/src/utils/RingDataModel.js +335 -335
  348. package/src/utils/auth.js +199 -199
  349. package/src/utils/conflictList.js +87 -87
  350. package/src/utils/dateFormat.js +41 -41
  351. package/src/utils/fault.js +20 -72
  352. package/src/utils/faultcode.js +130 -182
  353. package/src/utils/index.js +69 -69
  354. package/src/utils/pedphasedesc.js +80 -105
  355. package/src/utils/phaseList.js +203 -203
  356. package/src/utils/phasedesc.js +133 -115
  357. package/src/utils/responseMessage.js +24 -21
  358. package/src/utils/validate.js +43 -43
  359. package/src/views/home.1.vue +479 -479
  360. package/src/views/home.vue +93 -93
  361. package/src/views/intersection2.vue +328 -328
  362. package/src/views/overView.vue +63 -63
  363. package/src/views/patternConfig.vue +2 -2
  364. package/src/views/schemeconfig.vue +1 -1
  365. package/static/styles/channelizatioon.scss +433 -433
  366. package/static/styles/common.scss +30 -30
  367. package/static/styles/commonkanban.scss +168 -168
  368. package/static/styles/dark/index.scss +2 -2
  369. package/static/styles/dark/theme/element-dark.scss +44 -44
  370. package/static/styles/index.scss +84 -84
  371. package/static/styles/intersection.scss +180 -180
  372. package/static/styles/light/index.scss +2 -2
  373. package/static/styles/light/theme/element-light.scss +44 -44
  374. package/static/styles/patternConfig.scss +56 -56
  375. package/static/styles/phasePedSelect.scss +71 -71
  376. package/static/styles/stages.scss +57 -57
  377. package/static/styles/xiaokanban.scss +61 -61
  378. package/static/token.json +2 -2
  379. package/test/e2e/custom-assertions/elementCount.js +27 -27
  380. package/test/e2e/nightwatch.conf.js +46 -46
  381. package/test/e2e/runner.js +48 -48
  382. package/test/e2e/specs/test.js +19 -19
  383. package/test/unit/.eslintrc +7 -7
  384. package/test/unit/jest.conf.js +30 -30
  385. package/test/unit/setup.js +3 -3
  386. package/test/unit/specs/HelloWorld.spec.js +11 -11
  387. package/package/kisscomps/components/OptimizeKanban/index.js +0 -2
  388. package/package/kisscomps/components/OptimizeKanban/index.vue +0 -369
  389. package/package/kisscomps/components/StageOptimize/index.vue +0 -310
  390. package/src/node_modules/.package_versions.json +0 -1
@@ -1,707 +1,707 @@
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="lane-edit-panel">
14
- <!-- 车道编辑面板 -->
15
- <div class="vehile" v-if="Data.icontype === 'vehile'">
16
- <div class="edit-id">
17
- <span style="margin-right: 3px;">
18
- {{$t('openatccomponents.channelizationmap.vehiclelane') + ':'}}
19
- </span>
20
- <span>{{Data.id}}</span>
21
- </div>
22
- <div class="directions">
23
- <div class="tittle">{{$t('openatccomponents.channelizationmap.laneturn')}}</div>
24
- <div class="each-icon" v-for="(item, index) in directionList" :key="index">
25
- <div class="single-icon"
26
- @click="selectDire(item.id)"
27
- :class="preselectDirection.indexOf(item.id) !== -1 ? 'single-icon-select' : ''">
28
- <svg-icon :icon-class="item.iconclass" className="direction-icon"></svg-icon>
29
- </div>
30
- <div class="single-icon-name">{{item.name}}</div>
31
- </div>
32
- </div>
33
-
34
- <div class="position">
35
- <div class="tittle">{{$t('openatccomponents.channelizationmap.position')}}</div>
36
- <div class="position-options">
37
- <el-radio-group v-model="lanePosition" @change="selectLanePos">
38
- <el-radio :label="1">{{$t('openatccomponents.channelizationmap.eastward')}}</el-radio>
39
- <el-radio :label="2">{{$t('openatccomponents.channelizationmap.westward')}}</el-radio>
40
- <el-radio :label="3">{{$t('openatccomponents.channelizationmap.southward')}}</el-radio>
41
- <el-radio :label="4">{{$t('openatccomponents.channelizationmap.northward')}}</el-radio>
42
- <el-radio :label="5">{{$t('openatccomponents.channelizationmap.NE')}}</el-radio>
43
- <el-radio :label="6">{{$t('openatccomponents.channelizationmap.SE')}}</el-radio>
44
- <el-radio :label="7">{{$t('openatccomponents.channelizationmap.SW')}}</el-radio>
45
- <el-radio :label="8">{{$t('openatccomponents.channelizationmap.NW')}}</el-radio>
46
- </el-radio-group>
47
- </div>
48
- </div>
49
-
50
- <div class="lane-types">
51
- <div class="tittle">{{$t('openatccomponents.channelizationmap.lanetype')}}</div>
52
- <div class="each-icon" v-for="(item, index) in lanetypeList" :key="index">
53
- <div class="single-icon"
54
- @click="selectLanetype(item.id)"
55
- :class="preselectLanetype === item.id ? 'single-icon-select' : ''">
56
- <svg-icon :icon-class="item.iconclass" className="type-icon"></svg-icon>
57
- </div>
58
- <div class="single-icon-name">{{item.name}}</div>
59
- </div>
60
- <div v-if="Data.controltype !== 0 && Data.controltype !== 1">
61
- <el-switch
62
- :value="flip"
63
- @change="handleChangeFilp"
64
- :active-text="$t('openatccomponents.channelizationmap.flipdisplay')">
65
- </el-switch>
66
- </div>
67
- </div>
68
-
69
- <div class="phase-associated">
70
- <div class="tittle">{{$t('openatccomponents.channelizationmap.phaseassociated')}}</div>
71
- <!-- 相位仅可以关联选择,不可修改 -->
72
- <PhaseAssociatedComponent
73
- :editData="Data"
74
- @selectPhaseNew="selectPhaseNew" />
75
- </div>
76
- <div class="overlap-associated">
77
- <div class="tittle">{{$t('openatccomponents.channelizationmap.overlapassociated')}}</div>
78
- <OverlapAssociatedComponent :editData="Data"
79
- @selectPhaseNew="selectPhaseNew"/>
80
- </div>
81
- </div>
82
-
83
- <!-- 行人编辑面板 -->
84
- <div class="ped" v-if="Data.icontype === 'ped'">
85
- <div class="edit-id">
86
- <span style="margin-right: 3px;">
87
- {{$t('openatccomponents.channelizationmap.sidewalk') + ':'}}
88
- </span>
89
- <span>{{Data.id}}</span>
90
- </div>
91
- <div class="ped-type">
92
- <div class="tittle">{{$t('openatccomponents.channelizationmap.pedestriantype')}}</div>
93
- <div class="each-icon" v-for="(item, index) in pedestriantypeList" :key="index">
94
- <div class="single-icon"
95
- @click="selectPedType(item.id)"
96
- :class="Data.iconpedtypeid === item.id ? 'single-icon-select' : ''">
97
- <svg-icon :icon-class="item.iconclass" className="ped-icon"></svg-icon>
98
- </div>
99
- <div class="single-icon-name">{{item.name}}</div>
100
- </div>
101
- </div>
102
- <div class="ped-position">
103
- <div class="tittle">{{$t('openatccomponents.channelizationmap.position')}}</div>
104
- <div class="each-icon" v-for="(item, index) in pedPosList" :key="index">
105
- <div class="single-icon"
106
- @click="selectPedPos(item.id)"
107
- :class="Data.iconpedposition === item.id ? 'single-icon-select' : ''">
108
- <svg-icon :icon-class="item.iconclass" className="ped-icon"></svg-icon>
109
- </div>
110
- <div class="single-icon-name">{{item.name}}</div>
111
- </div>
112
- </div>
113
- <div class="phase-associated">
114
- <div class="tittle">{{$t('openatccomponents.channelizationmap.phaseassociated')}}</div>
115
- <!-- 相位仅可以关联选择,不可修改 -->
116
- <PhaseAssociatedComponent
117
- :editData="Data"
118
- @selectPhaseNew="selectPhaseNew" />
119
- </div>
120
- <div class="overlap-associated">
121
- <div class="tittle">{{$t('openatccomponents.channelizationmap.overlapassociated')}}</div>
122
- <OverlapAssociatedComponent :editData="Data"
123
- @selectPhaseNew="selectPhaseNew"/>
124
- </div>
125
- </div>
126
-
127
- <!-- 检测器编辑面板 -->
128
- <div class="detector" v-if="Data.icontype === 'detector' && Data.detailtype === 'detector'">
129
- <div class="edit-id">
130
- <span style="margin-right: 3px;">
131
- {{$t('openatccomponents.channelizationmap.detector') + ':'}}
132
- </span>
133
- <span>{{Data.id}}</span>
134
- </div>
135
- <div class="detector-type">
136
- <div class="tittle">{{$t('openatccomponents.channelizationmap.detectortype')}}</div>
137
- <div class="each-icon" v-for="(item, index) in detectortypeList" :key="index">
138
- <div class="single-icon"
139
- @click="selectDetectorType(item.id)"
140
- :class="Data.detectortype === item.id ? 'single-icon-select' : ''">
141
- <svg-icon :icon-class="item.iconclass" className="ped-icon"></svg-icon>
142
- </div>
143
- <div class="single-icon-name">{{item.name}}</div>
144
- </div>
145
- </div>
146
- <div class="detector-associated">
147
- <div class="tittle">{{$t('openatccomponents.channelizationmap.detectorassociated')}}</div>
148
- <DetectorAssociatedComponent :editData="Data"
149
- @selectAssociatedDetector="selectAssociatedDetector"/>
150
- </div>
151
- <div class="detector-threshold" v-if="Data.detectortype === 1">
152
- <div class="tittle">{{$t('openatccomponents.channelizationmap.detectorthreshold')}}</div>
153
- <el-form
154
- ref="threshold"
155
- label-position="left"
156
- label-width="130px">
157
- <el-form-item
158
- :label="$t('openatccomponents.channelizationmap.occupancythreshold') + ':'">
159
- <!-- <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
160
- :value="occupancythreshold" size="mini"
161
- @change="handleChangeOccuthreshold" />
162
- <span class="detector-threshold-formtext">%</span> -->
163
- <el-select :value="occupancythreshold" @change="handleChangeOccuthreshold">
164
- <el-option
165
- v-for="item in occupResholdOptions"
166
- :key="item.value"
167
- :label="item.label"
168
- :value="item.value">
169
- </el-option>
170
- </el-select>
171
- </el-form-item>
172
- <el-form-item
173
- :label="$t('openatccomponents.channelizationmap.saturationthreshold') + ':'">
174
- <!-- <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
175
- :value="flowsaturationthreshold" size="mini"
176
- @change="handleChangeFlowthreshold" />
177
- <span class="detector-threshold-formtext">%</span> -->
178
- <el-select :value="minflowsaturationthreshold" @change="handleChangeMinFlowthreshold">
179
- <el-option
180
- v-for="item in minflowResholdOptions"
181
- :key="item.value"
182
- :label="item.label"
183
- :value="item.value"
184
- :disabled="item.disabled">
185
- </el-option>
186
- </el-select>
187
- <span class="flow-separator">-</span>
188
- <el-select :value="maxflowsaturationthreshold" @change="handleChangeMaxFlowthreshold">
189
- <el-option
190
- v-for="item in maxflowResholdOptions"
191
- :key="item.value"
192
- :label="item.label"
193
- :value="item.value"
194
- :disabled="item.disabled">
195
- </el-option>
196
- </el-select>
197
- </el-form-item>
198
- </el-form>
199
- </div>
200
- <div class="detector-associated">
201
- <div class="tittle">{{$t('openatccomponents.channelizationmap.laneassociated')}}</div>
202
- <el-select filterable clearable :value="Data.associatedlaneid" @change="handleAssociatedLaneid">
203
- <el-option
204
- v-for="id in AssociatedLaneidOptions"
205
- :key="'Laneid' + id"
206
- :label="id"
207
- :value="id">
208
- </el-option>
209
- </el-select>
210
- </div>
211
- </div>
212
- <div class="basic-coord" v-if="JSON.stringify(Data) !== '{}' && Data.icontype !== 'countdown' && Data.icontype !== 'crossmap'">
213
- <div class="tittle">{{$t('openatccomponents.channelizationmap.basicinfo')}}</div>
214
- <BasicCoordInfo :drawingObjInfo="Data" @handleChangeBasicCoord="handleChangeBasicCoord" />
215
- </div>
216
- <div class="delete-drawed-item" v-if="JSON.stringify(Data) !== '{}' && Data.detailtype !== 'detectorChart'">
217
- <el-button type="primary" @click="handledelete" v-if="Data.icontype !== 'crossmap'">{{$t('openatccomponents.channelizationmap.delete')}}</el-button>
218
- <el-button type="primary" @click="handleClone" v-if="Data.icontype !== 'countdown' && Data.icontype !== 'crossmap'">{{$t('openatccomponents.channelizationmap.clone')}}</el-button>
219
- </div>
220
- </div>
221
- </template>
222
- <script>
223
- import PhaseAssociatedComponent from './phaseAssociatedComponent.vue'
224
- import OverlapAssociatedComponent from './overlapAssociatedComponent'
225
- import DetectorAssociatedComponent from './detectorAssociatedComponent.vue'
226
- import BasicCoordInfo from './basicCoordInfo'
227
- export default {
228
- name: 'lane-edit-panel',
229
- components: {
230
- PhaseAssociatedComponent,
231
- OverlapAssociatedComponent,
232
- DetectorAssociatedComponent,
233
- BasicCoordInfo
234
- },
235
- data () {
236
- return {
237
- iconObj: {},
238
- preselectDirection: [1], // 预选方向
239
- preselectPedType: [1], // 预选行人类型
240
- directionList: [], // 业务下方向选择列表(非机动车没有掉头)
241
- allDirectionsList: [{
242
- id: 1,
243
- key: 'straightahead',
244
- iconclass: 'custom-straightahead',
245
- name: this.$t('openatccomponents.channelizationmap.straightahead')
246
- }, {
247
- id: 2,
248
- key: 'turnleft',
249
- iconclass: 'custom-turnleft',
250
- name: this.$t('openatccomponents.channelizationmap.turnleft')
251
- }, {
252
- id: 3,
253
- key: 'turnright',
254
- iconclass: 'custom-turnright',
255
- name: this.$t('openatccomponents.channelizationmap.turnright')
256
- }, {
257
- id: 4,
258
- key: 'turnaround',
259
- iconclass: 'custom-turnaround',
260
- name: this.$t('openatccomponents.channelizationmap.turnaround')
261
- }],
262
- pedestriantypeList: [{
263
- id: 1,
264
- key: 'pedestrian',
265
- iconclass: 'custom-pedestrian',
266
- name: this.$t('openatccomponents.channelizationmap.pedestrian')
267
- }, {
268
- id: 2,
269
- key: 'secondcrossing',
270
- iconclass: 'custom-secondcrossing',
271
- name: this.$t('openatccomponents.channelizationmap.secondcrossing')
272
- }, {
273
- id: 3,
274
- key: 'xpedestrian',
275
- iconclass: 'custom-xpedestrian',
276
- name: this.$t('openatccomponents.channelizationmap.xpedestrian')
277
- }, {
278
- id: 4,
279
- key: 'sectionpedestrian',
280
- iconclass: 'custom-sectionpedestrian',
281
- name: this.$t('openatccomponents.channelizationmap.sectionpedestrian')
282
- }],
283
- preselectLanetype: 0,
284
- flip: false, // 默认车道类型图标不反转,正向为西
285
- lanetypeList: [{
286
- id: 0, // id对于controltype
287
- key: 'vehiclemainroad',
288
- iconclass: 'custom-vehiclemainroad',
289
- name: this.$t('openatccomponents.channelizationmap.vehiclemainroad')
290
- }, {
291
- id: 1,
292
- key: 'vehiclebranch',
293
- iconclass: 'custom-vehiclebranch',
294
- name: this.$t('openatccomponents.channelizationmap.vehiclebranch')
295
- }, {
296
- id: 6,
297
- key: 'nonmotorizedlane',
298
- iconclass: 'custom-nonmotorizedlane',
299
- name: this.$t('openatccomponents.channelizationmap.nonmotorizedlane')
300
- }, {
301
- id: 3,
302
- key: 'buslane',
303
- iconclass: 'custom-buslane',
304
- name: this.$t('openatccomponents.channelizationmap.buslane')
305
- }, {
306
- id: 4,
307
- key: 'BRTlane',
308
- iconclass: 'custom-BRTlane',
309
- name: this.$t('openatccomponents.channelizationmap.BRTlane')
310
- }, {
311
- id: 5,
312
- key: 'tramlane',
313
- iconclass: 'custom-tramlane',
314
- name: this.$t('openatccomponents.channelizationmap.tramlane')
315
- }],
316
- lanePosition: 1, // 方位默认东向
317
- pedPosList: [], // 当前显示的方位列表,由类型决定
318
- pedCrossingPosList: [{
319
- id: 1,
320
- key: 'pedeastward',
321
- iconclass: 'custom-pedeastward',
322
- name: this.$t('openatccomponents.channelizationmap.eastward')
323
- }, {
324
- id: 2,
325
- key: 'pedwestward',
326
- iconclass: 'custom-pedwestward',
327
- name: this.$t('openatccomponents.channelizationmap.westward')
328
- }, {
329
- id: 3,
330
- key: 'pedsouthward',
331
- iconclass: 'custom-pedsouthward',
332
- name: this.$t('openatccomponents.channelizationmap.southward')
333
- }, {
334
- id: 4,
335
- key: 'pednorthward',
336
- iconclass: 'custom-pednorthward',
337
- name: this.$t('openatccomponents.channelizationmap.northward')
338
- }],
339
- pedSecondCrossingPosList: [{
340
- id: 5,
341
- key: 'east-top',
342
- iconclass: 'custom-east-top',
343
- name: this.$t('openatccomponents.channelizationmap.etped')
344
- }, {
345
- id: 6,
346
- key: 'east-bottom',
347
- iconclass: 'custom-east-bottom',
348
- name: this.$t('openatccomponents.channelizationmap.ebped')
349
- }, {
350
- id: 7,
351
- key: 'west-top',
352
- iconclass: 'custom-west-top',
353
- name: this.$t('openatccomponents.channelizationmap.wtped')
354
- }, {
355
- id: 8,
356
- key: 'west-bottom',
357
- iconclass: 'custom-west-bottom',
358
- name: this.$t('openatccomponents.channelizationmap.wbped')
359
- }, {
360
- id: 9,
361
- key: 'south-left',
362
- iconclass: 'custom-south-left',
363
- name: this.$t('openatccomponents.channelizationmap.slped')
364
- }, {
365
- id: 10,
366
- key: 'south-right',
367
- iconclass: 'custom-south-right',
368
- name: this.$t('openatccomponents.channelizationmap.srped')
369
- }, {
370
- id: 11,
371
- key: 'north-left',
372
- iconclass: 'custom-north-left',
373
- name: this.$t('openatccomponents.channelizationmap.nlped')
374
- }, {
375
- id: 12,
376
- key: 'north-right',
377
- iconclass: 'custom-north-right',
378
- name: this.$t('openatccomponents.channelizationmap.nrped')
379
- }],
380
- pedObliqueCrossingPosList: [{
381
- id: 13,
382
- key: 'xrped',
383
- iconclass: 'custom-xrped',
384
- name: this.$t('openatccomponents.channelizationmap.xrped')
385
- }, {
386
- id: 14,
387
- key: 'xlped',
388
- iconclass: 'custom-xlped',
389
- name: this.$t('openatccomponents.channelizationmap.xlped')
390
- }],
391
- pedSectionCrossingPosList: [{
392
- id: 15,
393
- key: 'snped',
394
- iconclass: 'custom-snped',
395
- name: this.$t('openatccomponents.channelizationmap.snped')
396
- }, {
397
- id: 16,
398
- key: 'ewped',
399
- iconclass: 'custom-ewped',
400
- name: this.$t('openatccomponents.channelizationmap.ewped')
401
- }],
402
- detectortypeList: [{
403
- id: 1,
404
- key: 'vehiclemainroad',
405
- iconclass: 'custom-detector',
406
- name: this.$t('openatccomponents.channelizationmap.vehicledetector')
407
- }, {
408
- id: 2,
409
- key: 'vehiclebranch',
410
- iconclass: 'custom-peddetector',
411
- name: this.$t('openatccomponents.channelizationmap.pedestriandetector')
412
- }],
413
- occupResholdOptions: [],
414
- minflowResholdOptions: [],
415
- maxflowResholdOptions: [],
416
- occupancythreshold: 80,
417
- minflowsaturationthreshold: 30,
418
- maxflowsaturationthreshold: 70,
419
- AssociatedLaneidOptions: []
420
- }
421
- },
422
- watch: {
423
- Data: {
424
- handler: function (data) {
425
- this.iconObj = JSON.parse(JSON.stringify(data))
426
- this.initDirOptions()
427
- if (data.icondireid !== undefined) {
428
- this.preselectDirection = JSON.parse(JSON.stringify(data.icondireid))
429
- }
430
- if (data.controltype !== undefined) {
431
- this.preselectLanetype = data.controltype
432
- }
433
- if (data.lanePosition !== undefined) {
434
- this.lanePosition = data.lanePosition
435
- }
436
- if (data.occupancythreshold !== undefined) {
437
- this.occupancythreshold = data.occupancythreshold
438
- }
439
- if (data.minflowsaturationthreshold !== undefined) {
440
- this.minflowsaturationthreshold = data.minflowsaturationthreshold
441
- }
442
- if (data.maxflowsaturationthreshold !== undefined) {
443
- this.maxflowsaturationthreshold = data.maxflowsaturationthreshold
444
- }
445
- if (data.flip !== undefined) {
446
- this.flip = data.flip
447
- }
448
- if (this.Data.icontype === 'detector' && this.Data.detailtype === 'detector') {
449
- this.handleDetectorSettings()
450
- }
451
- this.getCurPedPosList(data.iconpedtypeid)
452
- },
453
- deep: true
454
- }
455
- },
456
- props: {
457
- Data: {
458
- type: Object
459
- },
460
- Motorways: {
461
- type: Array
462
- }
463
- },
464
- methods: {
465
- initDirOptions () {
466
- this.directionList = JSON.parse(JSON.stringify(this.allDirectionsList))
467
- },
468
- selectDire (value) {
469
- let index = this.iconObj.icondireid.indexOf(value)
470
- if (index === -1) {
471
- this.iconObj.icondireid.push(value)
472
- } else {
473
- this.iconObj.icondireid.splice(index, 1)
474
- }
475
- this.$emit('handleChooseDire', this.iconObj)
476
- },
477
- selectLanetype (id) {
478
- this.iconObj.controltype = id
479
- this.$emit('changeIconDataByType', this.iconObj, ['controltype'])
480
- },
481
- selectPedType (value) {
482
- this.iconObj.iconpedtypeid = value
483
- this.getCurPedPosList(value)
484
- // 默认选择第一方位
485
- this.iconObj.iconpedposition = this.pedPosList[0].id
486
- this.$emit('handleChoosePed', this.iconObj)
487
- },
488
- selectDetectorType (value) {
489
- if (this.iconObj.detectortype !== undefined && this.iconObj.detectortype !== value) {
490
- this.iconObj.detectorid = undefined
491
- }
492
- this.iconObj.detectortype = value
493
- this.$emit('changeIconDataByType', this.iconObj, ['detectortype', 'detectorid'])
494
- if (value === 2) {
495
- // 行人检测器没有阈值设置
496
- this.iconObj.occupancythreshold = undefined
497
- this.iconObj.minflowsaturationthreshold = undefined
498
- this.iconObj.maxflowsaturationthreshold = undefined
499
- this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold', 'minflowsaturationthreshold', 'maxflowsaturationthreshold'])
500
- }
501
- },
502
- selectPedPos (value) {
503
- this.iconObj.iconpedposition = value
504
- this.$emit('handleChoosePed', this.iconObj)
505
- },
506
- handledelete () {
507
- this.$emit('deleteItem', this.iconObj)
508
- },
509
- selectLanePos (value) {
510
- this.iconObj.lanePosition = value
511
- this.$emit('changeIconDataByType', this.iconObj, ['lanePosition'])
512
- },
513
- selectPhase (phaseid, direction) {
514
- // 关联相位的同时,会修改相位方向
515
- this.iconObj.phaseid = phaseid
516
- this.iconObj.phaselabel = `P${phaseid}`
517
- this.iconObj.direction = direction
518
- this.$emit('changeIconDataByType', this.iconObj, ['phaseid', 'phaselabel', 'direction'])
519
- },
520
- selectPhaseNew (phaseid, phasetype) {
521
- // 仅关联相位,不修改原相位
522
- this.iconObj.phasetype = phasetype
523
- this.iconObj.phaseid = phaseid
524
- if (phasetype === 'phase') {
525
- this.iconObj.phaselabel = `P${phaseid}`
526
- }
527
- if (phasetype === 'overlap') {
528
- this.iconObj.phaselabel = `OP${phaseid}`
529
- }
530
- this.$emit('changeIconDataByType', this.iconObj, ['phaseid', 'phaselabel', 'phasetype'])
531
- },
532
- handleDisassociatePhase (deletePhaseid) {
533
- this.$emit('handleDisassociatePhase', deletePhaseid)
534
- },
535
- selectAssociatedDetector (detectorid) {
536
- // 仅关联检测器,不修改
537
- this.iconObj.detectorid = detectorid
538
- this.$emit('changeIconDataByType', this.iconObj, ['detectorid'])
539
- },
540
- handleChangeOccuthreshold (occupancythreshold) {
541
- if (occupancythreshold === undefined) {
542
- this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
543
- this.occupancythreshold = 80
544
- return
545
- }
546
- this.occupancythreshold = occupancythreshold
547
- this.iconObj.occupancythreshold = occupancythreshold
548
- this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold'])
549
- },
550
- handleChangeMinFlowthreshold (minflowsaturationthreshold) {
551
- if (minflowsaturationthreshold === undefined) {
552
- this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
553
- this.minflowsaturationthreshold = 30
554
- return
555
- }
556
- this.minflowsaturationthreshold = minflowsaturationthreshold
557
- this.iconObj.minflowsaturationthreshold = minflowsaturationthreshold
558
- this.$emit('changeIconDataByType', this.iconObj, ['minflowsaturationthreshold'])
559
- this.handleDisabledMaxflowOption()
560
- },
561
- handleDisabledMinflowOption () {
562
- // 此处需要排他,恢复上次置灰到默认值
563
- this.minflowResholdOptions = this.minflowResholdOptions.map(option => ({
564
- label: option.label,
565
- value: option.value
566
- }))
567
- // 控制流量饱和度最小阈值的禁用范围
568
- for (let i = 0; i < this.minflowResholdOptions.length; i++) {
569
- if (this.minflowResholdOptions[i].value >= this.maxflowsaturationthreshold) {
570
- this.minflowResholdOptions[i].disabled = true
571
- }
572
- }
573
- },
574
- handleChangeMaxFlowthreshold (maxflowsaturationthreshold) {
575
- if (maxflowsaturationthreshold === undefined) {
576
- this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
577
- this.maxflowsaturationthreshold = 70
578
- return
579
- }
580
- this.maxflowsaturationthreshold = maxflowsaturationthreshold
581
- this.iconObj.maxflowsaturationthreshold = maxflowsaturationthreshold
582
- this.$emit('changeIconDataByType', this.iconObj, ['maxflowsaturationthreshold'])
583
- this.handleDisabledMinflowOption()
584
- },
585
- handleDisabledMaxflowOption () {
586
- // 此处需要排他,恢复上次置灰到默认值
587
- this.maxflowResholdOptions = this.maxflowResholdOptions.map(option => ({
588
- label: option.label,
589
- value: option.value
590
- }))
591
- // 控制流量饱和度最大阈值的禁用范围
592
- for (let i = 0; i < this.maxflowResholdOptions.length; i++) {
593
- if (this.maxflowResholdOptions[i].value <= this.minflowsaturationthreshold) {
594
- this.maxflowResholdOptions[i].disabled = true
595
- }
596
- }
597
- },
598
- getCurPedPosList (iconpedtypeid) {
599
- // 方位根据行人类型显示
600
- switch (iconpedtypeid) {
601
- case 1: this.pedPosList = JSON.parse(JSON.stringify(this.pedCrossingPosList))
602
- break
603
- case 2: this.pedPosList = JSON.parse(JSON.stringify(this.pedSecondCrossingPosList))
604
- break
605
- case 3: this.pedPosList = JSON.parse(JSON.stringify(this.pedObliqueCrossingPosList))
606
- break
607
- case 4: this.pedPosList = JSON.parse(JSON.stringify(this.pedSectionCrossingPosList))
608
- break
609
- }
610
- },
611
- handleChangeFilp (value) {
612
- this.iconObj.flip = value
613
- this.$emit('changeIconDataByType', this.iconObj, ['flip'])
614
- },
615
- createResholdSelectOptions () {
616
- for (let i = 5; i < 100; i = i + 5) {
617
- let option = {
618
- label: i + '%',
619
- value: i
620
- }
621
- this.occupResholdOptions.push(option)
622
- if (i <= this.minflowsaturationthreshold) {
623
- option.disabled = true
624
- }
625
- this.maxflowResholdOptions.push(option)
626
- }
627
- for (let i = 5; i < 100; i = i + 5) {
628
- let option = {
629
- label: i + '%',
630
- value: i
631
- }
632
- if (i >= this.maxflowsaturationthreshold) {
633
- option.disabled = true
634
- }
635
- this.minflowResholdOptions.push(option)
636
- }
637
- },
638
- handleChangeBasicCoord (basicCoord) {
639
- // 基础信息面板修改
640
- this.iconObj.x = basicCoord.x
641
- this.iconObj.y = basicCoord.y
642
- this.iconObj.angle = basicCoord.angle
643
- this.$emit('changeIconDataByType', this.iconObj, ['x', 'y', 'angle'])
644
- if (basicCoord.keyid !== undefined) {
645
- this.iconObj.keyid = basicCoord.keyid
646
- this.$emit('changeIconDataByType', this.iconObj, ['keyid'])
647
- }
648
- if (basicCoord.laneid !== undefined) {
649
- this.iconObj.laneid = basicCoord.laneid
650
- this.$emit('changeIconDataByType', this.iconObj, ['laneid'])
651
- }
652
- },
653
- handleClone () {
654
- this.$emit('cloneItem', this.iconObj)
655
- },
656
- handleDetectorSettings () {
657
- this.handleDisabledMinflowOption()
658
- this.handleDisabledMaxflowOption()
659
- this.getAssociatedLaneidOptions()
660
- },
661
- handleAssociatedLaneid (value) {
662
- // 检测器关联车道索引
663
- this.iconObj.associatedlaneid = value
664
- this.$emit('changeIconDataByType', this.iconObj, ['associatedlaneid'])
665
- },
666
- getAssociatedLaneidOptions () {
667
- // 获取当前所有车道的id(即索引)
668
- let ids = this.Motorways.map(ele => ele.id)
669
- ids.sort(function (a, b) {
670
- return a - b
671
- })
672
- this.AssociatedLaneidOptions = ids
673
- }
674
- },
675
- created () {
676
- this.createResholdSelectOptions()
677
- },
678
- mounted () {
679
- if (JSON.stringify(this.Data) === '{}') return
680
- this.iconObj = JSON.parse(JSON.stringify(this.Data))
681
- if (this.Data.icondireid !== undefined) {
682
- this.preselectDirection = JSON.parse(JSON.stringify(this.Data.icondireid))
683
- }
684
- if (this.Data.controltype !== undefined) {
685
- this.preselectLanetype = this.Data.controltype
686
- }
687
- if (this.Data.lanePosition !== undefined) {
688
- this.lanePosition = this.Data.lanePosition
689
- }
690
- if (this.Data.occupancythreshold !== undefined) {
691
- this.occupancythreshold = this.Data.occupancythreshold
692
- }
693
- if (this.Data.minflowsaturationthreshold !== undefined) {
694
- this.minflowsaturationthreshold = this.Data.minflowsaturationthreshold
695
- }
696
- if (this.Data.maxflowsaturationthreshold !== undefined) {
697
- this.maxflowsaturationthreshold = this.Data.maxflowsaturationthreshold
698
- }
699
- if (this.Data.flip !== undefined) {
700
- this.flip = this.Data.flip
701
- }
702
- this.getCurPedPosList(this.Data.iconpedtypeid)
703
- }
704
- }
705
- </script>
706
- <style scoped>
707
- </style>
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="lane-edit-panel">
14
+ <!-- 车道编辑面板 -->
15
+ <div class="vehile" v-if="Data.icontype === 'vehile'">
16
+ <div class="edit-id">
17
+ <span style="margin-right: 3px;">
18
+ {{$t('openatccomponents.channelizationmap.vehiclelane') + ':'}}
19
+ </span>
20
+ <span>{{Data.id}}</span>
21
+ </div>
22
+ <div class="directions">
23
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.laneturn')}}</div>
24
+ <div class="each-icon" v-for="(item, index) in directionList" :key="index">
25
+ <div class="single-icon"
26
+ @click="selectDire(item.id)"
27
+ :class="preselectDirection.indexOf(item.id) !== -1 ? 'single-icon-select' : ''">
28
+ <svg-icon :icon-class="item.iconclass" className="direction-icon"></svg-icon>
29
+ </div>
30
+ <div class="single-icon-name">{{item.name}}</div>
31
+ </div>
32
+ </div>
33
+
34
+ <div class="position">
35
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.position')}}</div>
36
+ <div class="position-options">
37
+ <el-radio-group v-model="lanePosition" @change="selectLanePos">
38
+ <el-radio :label="1">{{$t('openatccomponents.channelizationmap.eastward')}}</el-radio>
39
+ <el-radio :label="2">{{$t('openatccomponents.channelizationmap.westward')}}</el-radio>
40
+ <el-radio :label="3">{{$t('openatccomponents.channelizationmap.southward')}}</el-radio>
41
+ <el-radio :label="4">{{$t('openatccomponents.channelizationmap.northward')}}</el-radio>
42
+ <el-radio :label="5">{{$t('openatccomponents.channelizationmap.NE')}}</el-radio>
43
+ <el-radio :label="6">{{$t('openatccomponents.channelizationmap.SE')}}</el-radio>
44
+ <el-radio :label="7">{{$t('openatccomponents.channelizationmap.SW')}}</el-radio>
45
+ <el-radio :label="8">{{$t('openatccomponents.channelizationmap.NW')}}</el-radio>
46
+ </el-radio-group>
47
+ </div>
48
+ </div>
49
+
50
+ <div class="lane-types">
51
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.lanetype')}}</div>
52
+ <div class="each-icon" v-for="(item, index) in lanetypeList" :key="index">
53
+ <div class="single-icon"
54
+ @click="selectLanetype(item.id)"
55
+ :class="preselectLanetype === item.id ? 'single-icon-select' : ''">
56
+ <svg-icon :icon-class="item.iconclass" className="type-icon"></svg-icon>
57
+ </div>
58
+ <div class="single-icon-name">{{item.name}}</div>
59
+ </div>
60
+ <div v-if="Data.controltype !== 0 && Data.controltype !== 1">
61
+ <el-switch
62
+ :value="flip"
63
+ @change="handleChangeFilp"
64
+ :active-text="$t('openatccomponents.channelizationmap.flipdisplay')">
65
+ </el-switch>
66
+ </div>
67
+ </div>
68
+
69
+ <div class="phase-associated">
70
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.phaseassociated')}}</div>
71
+ <!-- 相位仅可以关联选择,不可修改 -->
72
+ <PhaseAssociatedComponent
73
+ :editData="Data"
74
+ @selectPhaseNew="selectPhaseNew" />
75
+ </div>
76
+ <div class="overlap-associated">
77
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.overlapassociated')}}</div>
78
+ <OverlapAssociatedComponent :editData="Data"
79
+ @selectPhaseNew="selectPhaseNew"/>
80
+ </div>
81
+ </div>
82
+
83
+ <!-- 行人编辑面板 -->
84
+ <div class="ped" v-if="Data.icontype === 'ped'">
85
+ <div class="edit-id">
86
+ <span style="margin-right: 3px;">
87
+ {{$t('openatccomponents.channelizationmap.sidewalk') + ':'}}
88
+ </span>
89
+ <span>{{Data.id}}</span>
90
+ </div>
91
+ <div class="ped-type">
92
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.pedestriantype')}}</div>
93
+ <div class="each-icon" v-for="(item, index) in pedestriantypeList" :key="index">
94
+ <div class="single-icon"
95
+ @click="selectPedType(item.id)"
96
+ :class="Data.iconpedtypeid === item.id ? 'single-icon-select' : ''">
97
+ <svg-icon :icon-class="item.iconclass" className="ped-icon"></svg-icon>
98
+ </div>
99
+ <div class="single-icon-name">{{item.name}}</div>
100
+ </div>
101
+ </div>
102
+ <div class="ped-position">
103
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.position')}}</div>
104
+ <div class="each-icon" v-for="(item, index) in pedPosList" :key="index">
105
+ <div class="single-icon"
106
+ @click="selectPedPos(item.id)"
107
+ :class="Data.iconpedposition === item.id ? 'single-icon-select' : ''">
108
+ <svg-icon :icon-class="item.iconclass" className="ped-icon"></svg-icon>
109
+ </div>
110
+ <div class="single-icon-name">{{item.name}}</div>
111
+ </div>
112
+ </div>
113
+ <div class="phase-associated">
114
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.phaseassociated')}}</div>
115
+ <!-- 相位仅可以关联选择,不可修改 -->
116
+ <PhaseAssociatedComponent
117
+ :editData="Data"
118
+ @selectPhaseNew="selectPhaseNew" />
119
+ </div>
120
+ <div class="overlap-associated">
121
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.overlapassociated')}}</div>
122
+ <OverlapAssociatedComponent :editData="Data"
123
+ @selectPhaseNew="selectPhaseNew"/>
124
+ </div>
125
+ </div>
126
+
127
+ <!-- 检测器编辑面板 -->
128
+ <div class="detector" v-if="Data.icontype === 'detector' && Data.detailtype === 'detector'">
129
+ <div class="edit-id">
130
+ <span style="margin-right: 3px;">
131
+ {{$t('openatccomponents.channelizationmap.detector') + ':'}}
132
+ </span>
133
+ <span>{{Data.id}}</span>
134
+ </div>
135
+ <div class="detector-type">
136
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.detectortype')}}</div>
137
+ <div class="each-icon" v-for="(item, index) in detectortypeList" :key="index">
138
+ <div class="single-icon"
139
+ @click="selectDetectorType(item.id)"
140
+ :class="Data.detectortype === item.id ? 'single-icon-select' : ''">
141
+ <svg-icon :icon-class="item.iconclass" className="ped-icon"></svg-icon>
142
+ </div>
143
+ <div class="single-icon-name">{{item.name}}</div>
144
+ </div>
145
+ </div>
146
+ <div class="detector-associated">
147
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.detectorassociated')}}</div>
148
+ <DetectorAssociatedComponent :editData="Data"
149
+ @selectAssociatedDetector="selectAssociatedDetector"/>
150
+ </div>
151
+ <div class="detector-threshold" v-if="Data.detectortype === 1">
152
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.detectorthreshold')}}</div>
153
+ <el-form
154
+ ref="threshold"
155
+ label-position="left"
156
+ label-width="130px">
157
+ <el-form-item
158
+ :label="$t('openatccomponents.channelizationmap.occupancythreshold') + ':'">
159
+ <!-- <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
160
+ :value="occupancythreshold" size="mini"
161
+ @change="handleChangeOccuthreshold" />
162
+ <span class="detector-threshold-formtext">%</span> -->
163
+ <el-select :value="occupancythreshold" @change="handleChangeOccuthreshold">
164
+ <el-option
165
+ v-for="item in occupResholdOptions"
166
+ :key="item.value"
167
+ :label="item.label"
168
+ :value="item.value">
169
+ </el-option>
170
+ </el-select>
171
+ </el-form-item>
172
+ <el-form-item
173
+ :label="$t('openatccomponents.channelizationmap.saturationthreshold') + ':'">
174
+ <!-- <el-input-number :min="0" :max="100" :precision="0" :step="1" :controls="false"
175
+ :value="flowsaturationthreshold" size="mini"
176
+ @change="handleChangeFlowthreshold" />
177
+ <span class="detector-threshold-formtext">%</span> -->
178
+ <el-select :value="minflowsaturationthreshold" @change="handleChangeMinFlowthreshold">
179
+ <el-option
180
+ v-for="item in minflowResholdOptions"
181
+ :key="item.value"
182
+ :label="item.label"
183
+ :value="item.value"
184
+ :disabled="item.disabled">
185
+ </el-option>
186
+ </el-select>
187
+ <span class="flow-separator">-</span>
188
+ <el-select :value="maxflowsaturationthreshold" @change="handleChangeMaxFlowthreshold">
189
+ <el-option
190
+ v-for="item in maxflowResholdOptions"
191
+ :key="item.value"
192
+ :label="item.label"
193
+ :value="item.value"
194
+ :disabled="item.disabled">
195
+ </el-option>
196
+ </el-select>
197
+ </el-form-item>
198
+ </el-form>
199
+ </div>
200
+ <div class="detector-associated">
201
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.laneassociated')}}</div>
202
+ <el-select filterable clearable :value="Data.associatedlaneid" @change="handleAssociatedLaneid">
203
+ <el-option
204
+ v-for="id in AssociatedLaneidOptions"
205
+ :key="'Laneid' + id"
206
+ :label="id"
207
+ :value="id">
208
+ </el-option>
209
+ </el-select>
210
+ </div>
211
+ </div>
212
+ <div class="basic-coord" v-if="JSON.stringify(Data) !== '{}' && Data.icontype !== 'countdown' && Data.icontype !== 'crossmap'">
213
+ <div class="tittle">{{$t('openatccomponents.channelizationmap.basicinfo')}}</div>
214
+ <BasicCoordInfo :drawingObjInfo="Data" @handleChangeBasicCoord="handleChangeBasicCoord" />
215
+ </div>
216
+ <div class="delete-drawed-item" v-if="JSON.stringify(Data) !== '{}' && Data.detailtype !== 'detectorChart'">
217
+ <el-button type="primary" @click="handledelete" v-if="Data.icontype !== 'crossmap'">{{$t('openatccomponents.channelizationmap.delete')}}</el-button>
218
+ <el-button type="primary" @click="handleClone" v-if="Data.icontype !== 'countdown' && Data.icontype !== 'crossmap'">{{$t('openatccomponents.channelizationmap.clone')}}</el-button>
219
+ </div>
220
+ </div>
221
+ </template>
222
+ <script>
223
+ import PhaseAssociatedComponent from './phaseAssociatedComponent.vue'
224
+ import OverlapAssociatedComponent from './overlapAssociatedComponent'
225
+ import DetectorAssociatedComponent from './detectorAssociatedComponent.vue'
226
+ import BasicCoordInfo from './basicCoordInfo'
227
+ export default {
228
+ name: 'lane-edit-panel',
229
+ components: {
230
+ PhaseAssociatedComponent,
231
+ OverlapAssociatedComponent,
232
+ DetectorAssociatedComponent,
233
+ BasicCoordInfo
234
+ },
235
+ data () {
236
+ return {
237
+ iconObj: {},
238
+ preselectDirection: [1], // 预选方向
239
+ preselectPedType: [1], // 预选行人类型
240
+ directionList: [], // 业务下方向选择列表(非机动车没有掉头)
241
+ allDirectionsList: [{
242
+ id: 1,
243
+ key: 'straightahead',
244
+ iconclass: 'custom-straightahead',
245
+ name: this.$t('openatccomponents.channelizationmap.straightahead')
246
+ }, {
247
+ id: 2,
248
+ key: 'turnleft',
249
+ iconclass: 'custom-turnleft',
250
+ name: this.$t('openatccomponents.channelizationmap.turnleft')
251
+ }, {
252
+ id: 3,
253
+ key: 'turnright',
254
+ iconclass: 'custom-turnright',
255
+ name: this.$t('openatccomponents.channelizationmap.turnright')
256
+ }, {
257
+ id: 4,
258
+ key: 'turnaround',
259
+ iconclass: 'custom-turnaround',
260
+ name: this.$t('openatccomponents.channelizationmap.turnaround')
261
+ }],
262
+ pedestriantypeList: [{
263
+ id: 1,
264
+ key: 'pedestrian',
265
+ iconclass: 'custom-pedestrian',
266
+ name: this.$t('openatccomponents.channelizationmap.pedestrian')
267
+ }, {
268
+ id: 2,
269
+ key: 'secondcrossing',
270
+ iconclass: 'custom-secondcrossing',
271
+ name: this.$t('openatccomponents.channelizationmap.secondcrossing')
272
+ }, {
273
+ id: 3,
274
+ key: 'xpedestrian',
275
+ iconclass: 'custom-xpedestrian',
276
+ name: this.$t('openatccomponents.channelizationmap.xpedestrian')
277
+ }, {
278
+ id: 4,
279
+ key: 'sectionpedestrian',
280
+ iconclass: 'custom-sectionpedestrian',
281
+ name: this.$t('openatccomponents.channelizationmap.sectionpedestrian')
282
+ }],
283
+ preselectLanetype: 0,
284
+ flip: false, // 默认车道类型图标不反转,正向为西
285
+ lanetypeList: [{
286
+ id: 0, // id对于controltype
287
+ key: 'vehiclemainroad',
288
+ iconclass: 'custom-vehiclemainroad',
289
+ name: this.$t('openatccomponents.channelizationmap.vehiclemainroad')
290
+ }, {
291
+ id: 1,
292
+ key: 'vehiclebranch',
293
+ iconclass: 'custom-vehiclebranch',
294
+ name: this.$t('openatccomponents.channelizationmap.vehiclebranch')
295
+ }, {
296
+ id: 6,
297
+ key: 'nonmotorizedlane',
298
+ iconclass: 'custom-nonmotorizedlane',
299
+ name: this.$t('openatccomponents.channelizationmap.nonmotorizedlane')
300
+ }, {
301
+ id: 3,
302
+ key: 'buslane',
303
+ iconclass: 'custom-buslane',
304
+ name: this.$t('openatccomponents.channelizationmap.buslane')
305
+ }, {
306
+ id: 4,
307
+ key: 'BRTlane',
308
+ iconclass: 'custom-BRTlane',
309
+ name: this.$t('openatccomponents.channelizationmap.BRTlane')
310
+ }, {
311
+ id: 5,
312
+ key: 'tramlane',
313
+ iconclass: 'custom-tramlane',
314
+ name: this.$t('openatccomponents.channelizationmap.tramlane')
315
+ }],
316
+ lanePosition: 1, // 方位默认东向
317
+ pedPosList: [], // 当前显示的方位列表,由类型决定
318
+ pedCrossingPosList: [{
319
+ id: 1,
320
+ key: 'pedeastward',
321
+ iconclass: 'custom-pedeastward',
322
+ name: this.$t('openatccomponents.channelizationmap.eastward')
323
+ }, {
324
+ id: 2,
325
+ key: 'pedwestward',
326
+ iconclass: 'custom-pedwestward',
327
+ name: this.$t('openatccomponents.channelizationmap.westward')
328
+ }, {
329
+ id: 3,
330
+ key: 'pedsouthward',
331
+ iconclass: 'custom-pedsouthward',
332
+ name: this.$t('openatccomponents.channelizationmap.southward')
333
+ }, {
334
+ id: 4,
335
+ key: 'pednorthward',
336
+ iconclass: 'custom-pednorthward',
337
+ name: this.$t('openatccomponents.channelizationmap.northward')
338
+ }],
339
+ pedSecondCrossingPosList: [{
340
+ id: 5,
341
+ key: 'east-top',
342
+ iconclass: 'custom-east-top',
343
+ name: this.$t('openatccomponents.channelizationmap.etped')
344
+ }, {
345
+ id: 6,
346
+ key: 'east-bottom',
347
+ iconclass: 'custom-east-bottom',
348
+ name: this.$t('openatccomponents.channelizationmap.ebped')
349
+ }, {
350
+ id: 7,
351
+ key: 'west-top',
352
+ iconclass: 'custom-west-top',
353
+ name: this.$t('openatccomponents.channelizationmap.wtped')
354
+ }, {
355
+ id: 8,
356
+ key: 'west-bottom',
357
+ iconclass: 'custom-west-bottom',
358
+ name: this.$t('openatccomponents.channelizationmap.wbped')
359
+ }, {
360
+ id: 9,
361
+ key: 'south-left',
362
+ iconclass: 'custom-south-left',
363
+ name: this.$t('openatccomponents.channelizationmap.slped')
364
+ }, {
365
+ id: 10,
366
+ key: 'south-right',
367
+ iconclass: 'custom-south-right',
368
+ name: this.$t('openatccomponents.channelizationmap.srped')
369
+ }, {
370
+ id: 11,
371
+ key: 'north-left',
372
+ iconclass: 'custom-north-left',
373
+ name: this.$t('openatccomponents.channelizationmap.nlped')
374
+ }, {
375
+ id: 12,
376
+ key: 'north-right',
377
+ iconclass: 'custom-north-right',
378
+ name: this.$t('openatccomponents.channelizationmap.nrped')
379
+ }],
380
+ pedObliqueCrossingPosList: [{
381
+ id: 13,
382
+ key: 'xrped',
383
+ iconclass: 'custom-xrped',
384
+ name: this.$t('openatccomponents.channelizationmap.xrped')
385
+ }, {
386
+ id: 14,
387
+ key: 'xlped',
388
+ iconclass: 'custom-xlped',
389
+ name: this.$t('openatccomponents.channelizationmap.xlped')
390
+ }],
391
+ pedSectionCrossingPosList: [{
392
+ id: 15,
393
+ key: 'snped',
394
+ iconclass: 'custom-snped',
395
+ name: this.$t('openatccomponents.channelizationmap.snped')
396
+ }, {
397
+ id: 16,
398
+ key: 'ewped',
399
+ iconclass: 'custom-ewped',
400
+ name: this.$t('openatccomponents.channelizationmap.ewped')
401
+ }],
402
+ detectortypeList: [{
403
+ id: 1,
404
+ key: 'vehiclemainroad',
405
+ iconclass: 'custom-detector',
406
+ name: this.$t('openatccomponents.channelizationmap.vehicledetector')
407
+ }, {
408
+ id: 2,
409
+ key: 'vehiclebranch',
410
+ iconclass: 'custom-peddetector',
411
+ name: this.$t('openatccomponents.channelizationmap.pedestriandetector')
412
+ }],
413
+ occupResholdOptions: [],
414
+ minflowResholdOptions: [],
415
+ maxflowResholdOptions: [],
416
+ occupancythreshold: 80,
417
+ minflowsaturationthreshold: 30,
418
+ maxflowsaturationthreshold: 70,
419
+ AssociatedLaneidOptions: []
420
+ }
421
+ },
422
+ watch: {
423
+ Data: {
424
+ handler: function (data) {
425
+ this.iconObj = JSON.parse(JSON.stringify(data))
426
+ this.initDirOptions()
427
+ if (data.icondireid !== undefined) {
428
+ this.preselectDirection = JSON.parse(JSON.stringify(data.icondireid))
429
+ }
430
+ if (data.controltype !== undefined) {
431
+ this.preselectLanetype = data.controltype
432
+ }
433
+ if (data.lanePosition !== undefined) {
434
+ this.lanePosition = data.lanePosition
435
+ }
436
+ if (data.occupancythreshold !== undefined) {
437
+ this.occupancythreshold = data.occupancythreshold
438
+ }
439
+ if (data.minflowsaturationthreshold !== undefined) {
440
+ this.minflowsaturationthreshold = data.minflowsaturationthreshold
441
+ }
442
+ if (data.maxflowsaturationthreshold !== undefined) {
443
+ this.maxflowsaturationthreshold = data.maxflowsaturationthreshold
444
+ }
445
+ if (data.flip !== undefined) {
446
+ this.flip = data.flip
447
+ }
448
+ if (this.Data.icontype === 'detector' && this.Data.detailtype === 'detector') {
449
+ this.handleDetectorSettings()
450
+ }
451
+ this.getCurPedPosList(data.iconpedtypeid)
452
+ },
453
+ deep: true
454
+ }
455
+ },
456
+ props: {
457
+ Data: {
458
+ type: Object
459
+ },
460
+ Motorways: {
461
+ type: Array
462
+ }
463
+ },
464
+ methods: {
465
+ initDirOptions () {
466
+ this.directionList = JSON.parse(JSON.stringify(this.allDirectionsList))
467
+ },
468
+ selectDire (value) {
469
+ let index = this.iconObj.icondireid.indexOf(value)
470
+ if (index === -1) {
471
+ this.iconObj.icondireid.push(value)
472
+ } else {
473
+ this.iconObj.icondireid.splice(index, 1)
474
+ }
475
+ this.$emit('handleChooseDire', this.iconObj)
476
+ },
477
+ selectLanetype (id) {
478
+ this.iconObj.controltype = id
479
+ this.$emit('changeIconDataByType', this.iconObj, ['controltype'])
480
+ },
481
+ selectPedType (value) {
482
+ this.iconObj.iconpedtypeid = value
483
+ this.getCurPedPosList(value)
484
+ // 默认选择第一方位
485
+ this.iconObj.iconpedposition = this.pedPosList[0].id
486
+ this.$emit('handleChoosePed', this.iconObj)
487
+ },
488
+ selectDetectorType (value) {
489
+ if (this.iconObj.detectortype !== undefined && this.iconObj.detectortype !== value) {
490
+ this.iconObj.detectorid = undefined
491
+ }
492
+ this.iconObj.detectortype = value
493
+ this.$emit('changeIconDataByType', this.iconObj, ['detectortype', 'detectorid'])
494
+ if (value === 2) {
495
+ // 行人检测器没有阈值设置
496
+ this.iconObj.occupancythreshold = undefined
497
+ this.iconObj.minflowsaturationthreshold = undefined
498
+ this.iconObj.maxflowsaturationthreshold = undefined
499
+ this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold', 'minflowsaturationthreshold', 'maxflowsaturationthreshold'])
500
+ }
501
+ },
502
+ selectPedPos (value) {
503
+ this.iconObj.iconpedposition = value
504
+ this.$emit('handleChoosePed', this.iconObj)
505
+ },
506
+ handledelete () {
507
+ this.$emit('deleteItem', this.iconObj)
508
+ },
509
+ selectLanePos (value) {
510
+ this.iconObj.lanePosition = value
511
+ this.$emit('changeIconDataByType', this.iconObj, ['lanePosition'])
512
+ },
513
+ selectPhase (phaseid, direction) {
514
+ // 关联相位的同时,会修改相位方向
515
+ this.iconObj.phaseid = phaseid
516
+ this.iconObj.phaselabel = `P${phaseid}`
517
+ this.iconObj.direction = direction
518
+ this.$emit('changeIconDataByType', this.iconObj, ['phaseid', 'phaselabel', 'direction'])
519
+ },
520
+ selectPhaseNew (phaseid, phasetype) {
521
+ // 仅关联相位,不修改原相位
522
+ this.iconObj.phasetype = phasetype
523
+ this.iconObj.phaseid = phaseid
524
+ if (phasetype === 'phase') {
525
+ this.iconObj.phaselabel = `P${phaseid}`
526
+ }
527
+ if (phasetype === 'overlap') {
528
+ this.iconObj.phaselabel = `OP${phaseid}`
529
+ }
530
+ this.$emit('changeIconDataByType', this.iconObj, ['phaseid', 'phaselabel', 'phasetype'])
531
+ },
532
+ handleDisassociatePhase (deletePhaseid) {
533
+ this.$emit('handleDisassociatePhase', deletePhaseid)
534
+ },
535
+ selectAssociatedDetector (detectorid) {
536
+ // 仅关联检测器,不修改
537
+ this.iconObj.detectorid = detectorid
538
+ this.$emit('changeIconDataByType', this.iconObj, ['detectorid'])
539
+ },
540
+ handleChangeOccuthreshold (occupancythreshold) {
541
+ if (occupancythreshold === undefined) {
542
+ this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
543
+ this.occupancythreshold = 80
544
+ return
545
+ }
546
+ this.occupancythreshold = occupancythreshold
547
+ this.iconObj.occupancythreshold = occupancythreshold
548
+ this.$emit('changeIconDataByType', this.iconObj, ['occupancythreshold'])
549
+ },
550
+ handleChangeMinFlowthreshold (minflowsaturationthreshold) {
551
+ if (minflowsaturationthreshold === undefined) {
552
+ this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
553
+ this.minflowsaturationthreshold = 30
554
+ return
555
+ }
556
+ this.minflowsaturationthreshold = minflowsaturationthreshold
557
+ this.iconObj.minflowsaturationthreshold = minflowsaturationthreshold
558
+ this.$emit('changeIconDataByType', this.iconObj, ['minflowsaturationthreshold'])
559
+ this.handleDisabledMaxflowOption()
560
+ },
561
+ handleDisabledMinflowOption () {
562
+ // 此处需要排他,恢复上次置灰到默认值
563
+ this.minflowResholdOptions = this.minflowResholdOptions.map(option => ({
564
+ label: option.label,
565
+ value: option.value
566
+ }))
567
+ // 控制流量饱和度最小阈值的禁用范围
568
+ for (let i = 0; i < this.minflowResholdOptions.length; i++) {
569
+ if (this.minflowResholdOptions[i].value >= this.maxflowsaturationthreshold) {
570
+ this.minflowResholdOptions[i].disabled = true
571
+ }
572
+ }
573
+ },
574
+ handleChangeMaxFlowthreshold (maxflowsaturationthreshold) {
575
+ if (maxflowsaturationthreshold === undefined) {
576
+ this.$message.error(this.$t('openatccomponents.channelizationmap.checkthreshold'))
577
+ this.maxflowsaturationthreshold = 70
578
+ return
579
+ }
580
+ this.maxflowsaturationthreshold = maxflowsaturationthreshold
581
+ this.iconObj.maxflowsaturationthreshold = maxflowsaturationthreshold
582
+ this.$emit('changeIconDataByType', this.iconObj, ['maxflowsaturationthreshold'])
583
+ this.handleDisabledMinflowOption()
584
+ },
585
+ handleDisabledMaxflowOption () {
586
+ // 此处需要排他,恢复上次置灰到默认值
587
+ this.maxflowResholdOptions = this.maxflowResholdOptions.map(option => ({
588
+ label: option.label,
589
+ value: option.value
590
+ }))
591
+ // 控制流量饱和度最大阈值的禁用范围
592
+ for (let i = 0; i < this.maxflowResholdOptions.length; i++) {
593
+ if (this.maxflowResholdOptions[i].value <= this.minflowsaturationthreshold) {
594
+ this.maxflowResholdOptions[i].disabled = true
595
+ }
596
+ }
597
+ },
598
+ getCurPedPosList (iconpedtypeid) {
599
+ // 方位根据行人类型显示
600
+ switch (iconpedtypeid) {
601
+ case 1: this.pedPosList = JSON.parse(JSON.stringify(this.pedCrossingPosList))
602
+ break
603
+ case 2: this.pedPosList = JSON.parse(JSON.stringify(this.pedSecondCrossingPosList))
604
+ break
605
+ case 3: this.pedPosList = JSON.parse(JSON.stringify(this.pedObliqueCrossingPosList))
606
+ break
607
+ case 4: this.pedPosList = JSON.parse(JSON.stringify(this.pedSectionCrossingPosList))
608
+ break
609
+ }
610
+ },
611
+ handleChangeFilp (value) {
612
+ this.iconObj.flip = value
613
+ this.$emit('changeIconDataByType', this.iconObj, ['flip'])
614
+ },
615
+ createResholdSelectOptions () {
616
+ for (let i = 5; i < 100; i = i + 5) {
617
+ let option = {
618
+ label: i + '%',
619
+ value: i
620
+ }
621
+ this.occupResholdOptions.push(option)
622
+ if (i <= this.minflowsaturationthreshold) {
623
+ option.disabled = true
624
+ }
625
+ this.maxflowResholdOptions.push(option)
626
+ }
627
+ for (let i = 5; i < 100; i = i + 5) {
628
+ let option = {
629
+ label: i + '%',
630
+ value: i
631
+ }
632
+ if (i >= this.maxflowsaturationthreshold) {
633
+ option.disabled = true
634
+ }
635
+ this.minflowResholdOptions.push(option)
636
+ }
637
+ },
638
+ handleChangeBasicCoord (basicCoord) {
639
+ // 基础信息面板修改
640
+ this.iconObj.x = basicCoord.x
641
+ this.iconObj.y = basicCoord.y
642
+ this.iconObj.angle = basicCoord.angle
643
+ this.$emit('changeIconDataByType', this.iconObj, ['x', 'y', 'angle'])
644
+ if (basicCoord.keyid !== undefined) {
645
+ this.iconObj.keyid = basicCoord.keyid
646
+ this.$emit('changeIconDataByType', this.iconObj, ['keyid'])
647
+ }
648
+ if (basicCoord.laneid !== undefined) {
649
+ this.iconObj.laneid = basicCoord.laneid
650
+ this.$emit('changeIconDataByType', this.iconObj, ['laneid'])
651
+ }
652
+ },
653
+ handleClone () {
654
+ this.$emit('cloneItem', this.iconObj)
655
+ },
656
+ handleDetectorSettings () {
657
+ this.handleDisabledMinflowOption()
658
+ this.handleDisabledMaxflowOption()
659
+ this.getAssociatedLaneidOptions()
660
+ },
661
+ handleAssociatedLaneid (value) {
662
+ // 检测器关联车道索引
663
+ this.iconObj.associatedlaneid = value
664
+ this.$emit('changeIconDataByType', this.iconObj, ['associatedlaneid'])
665
+ },
666
+ getAssociatedLaneidOptions () {
667
+ // 获取当前所有车道的id(即索引)
668
+ let ids = this.Motorways.map(ele => ele.id)
669
+ ids.sort(function (a, b) {
670
+ return a - b
671
+ })
672
+ this.AssociatedLaneidOptions = ids
673
+ }
674
+ },
675
+ created () {
676
+ this.createResholdSelectOptions()
677
+ },
678
+ mounted () {
679
+ if (JSON.stringify(this.Data) === '{}') return
680
+ this.iconObj = JSON.parse(JSON.stringify(this.Data))
681
+ if (this.Data.icondireid !== undefined) {
682
+ this.preselectDirection = JSON.parse(JSON.stringify(this.Data.icondireid))
683
+ }
684
+ if (this.Data.controltype !== undefined) {
685
+ this.preselectLanetype = this.Data.controltype
686
+ }
687
+ if (this.Data.lanePosition !== undefined) {
688
+ this.lanePosition = this.Data.lanePosition
689
+ }
690
+ if (this.Data.occupancythreshold !== undefined) {
691
+ this.occupancythreshold = this.Data.occupancythreshold
692
+ }
693
+ if (this.Data.minflowsaturationthreshold !== undefined) {
694
+ this.minflowsaturationthreshold = this.Data.minflowsaturationthreshold
695
+ }
696
+ if (this.Data.maxflowsaturationthreshold !== undefined) {
697
+ this.maxflowsaturationthreshold = this.Data.maxflowsaturationthreshold
698
+ }
699
+ if (this.Data.flip !== undefined) {
700
+ this.flip = this.Data.flip
701
+ }
702
+ this.getCurPedPosList(this.Data.iconpedtypeid)
703
+ }
704
+ }
705
+ </script>
706
+ <style scoped>
707
+ </style>