openatc-components 0.1.22 → 0.1.24

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