openatc-components 0.4.68 → 0.4.70

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 (413) 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/BoardCard/BoardCard.vue +133 -133
  21. package/package/kisscomps/components/ChannelRealtimeIntersection/ChannelRealtimeIntersection.vue +123 -123
  22. package/package/kisscomps/components/Channelization/Channelization.vue +585 -585
  23. package/package/kisscomps/components/ChannelizationFlowStatistic/ChannelizationFlowStatistic.vue +360 -360
  24. package/package/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +518 -518
  25. package/package/kisscomps/components/CommonKanban/CommonKanban.vue +132 -132
  26. package/package/kisscomps/components/DirectionListConfiguration/DirectionListConfiguration.vue +456 -456
  27. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-east-bottom.vue +41 -41
  28. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-east-top.vue +60 -60
  29. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-ewped.vue +105 -105
  30. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-north-left.vue +60 -60
  31. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-north-right.vue +60 -60
  32. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-snped.vue +105 -105
  33. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-south-left.vue +60 -60
  34. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-south-right.vue +60 -60
  35. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-west-bottom.vue +60 -60
  36. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-west-top.vue +60 -60
  37. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-xlped.vue +30 -30
  38. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-xrped.vue +30 -30
  39. package/package/kisscomps/components/DirectionListConfiguration/svg/pedSvg.vue +78 -78
  40. package/package/kisscomps/components/DrawChannelization/drawsvg/basicCoordInfo.vue +181 -181
  41. package/package/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +255 -255
  42. package/package/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -152
  43. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -91
  44. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +194 -194
  45. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -108
  46. package/package/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +51 -51
  47. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +236 -236
  48. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +247 -247
  49. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +210 -210
  50. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +72 -72
  51. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +368 -368
  52. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +230 -230
  53. package/package/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +74 -74
  54. package/package/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +1022 -1022
  55. package/package/kisscomps/components/DrawChannelization/drawsvg/index.vue +144 -144
  56. package/package/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +707 -707
  57. package/package/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +172 -172
  58. package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +172 -172
  59. package/package/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -99
  60. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +87 -87
  61. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -32
  62. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -20
  63. package/package/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -278
  64. package/package/kisscomps/components/ExpendConfig/ExpendConfig.vue +118 -118
  65. package/package/kisscomps/components/FaultDetailModal/FaultDetailModal.vue +178 -178
  66. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/CrossRoadsSvg.vue +629 -629
  67. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/CustomRoadsSvg.vue +46 -46
  68. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionEWSvg.vue +447 -447
  69. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionSNSvg.vue +341 -341
  70. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampEastSvg.vue +497 -497
  71. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampNorthSvg.vue +353 -353
  72. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampSouthSvg.vue +359 -359
  73. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampWestSvg.vue +443 -443
  74. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkClickSvg.vue +1302 -1302
  75. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkSvg.vue +1190 -1190
  76. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeEastRoadsSvg.vue +498 -498
  77. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeNorthRoadsSvg.vue +484 -484
  78. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeSouthRoadsSvg.vue +488 -488
  79. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeWestRoadsSvg.vue +566 -566
  80. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LCrossRoadsSvg.vue +640 -640
  81. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeEastRoadsSvg.vue +497 -497
  82. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeNorthRoadsSvg.vue +486 -486
  83. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeSouthRoadsSvg.vue +490 -490
  84. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeWestRoadsSvg.vue +575 -575
  85. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/refreshSvg.vue +63 -63
  86. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/busMapSvg.vue +50 -50
  87. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/eastBusSvg.vue +167 -167
  88. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/northBusSvg.vue +168 -168
  89. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/southBusSvg.vue +168 -168
  90. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/westBusSvg.vue +169 -169
  91. package/package/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/LphaseIconSvg.vue +197 -197
  92. package/package/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/rampPhaseIconSvg.vue +122 -122
  93. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.json +196 -196
  94. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.left.json +196 -196
  95. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.json +115 -115
  96. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.left.json +115 -115
  97. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/rampPos.json +52 -52
  98. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/sidePos.json +219 -219
  99. package/package/kisscomps/components/IntersectionMap/intersectionmap.vue +220 -220
  100. package/package/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +534 -534
  101. package/package/kisscomps/components/KanBan/kanban.vue +231 -231
  102. package/package/kisscomps/components/MessageBox/index.vue +96 -96
  103. package/package/kisscomps/components/OverLap/OverLap.vue +237 -237
  104. package/package/kisscomps/components/OverviewComponent/index.vue +853 -853
  105. package/package/kisscomps/components/PatternOptimize/PatternOptimize.vue +329 -329
  106. package/package/kisscomps/components/PatternWalkSvg/PatternWalkSvg.vue +423 -423
  107. package/package/kisscomps/components/PhaseDirectionSelect/PhaseDirectionSelect.vue +126 -126
  108. package/package/kisscomps/components/PhaseDirectionText/PhaseDirectionText.vue +106 -106
  109. package/package/kisscomps/components/PhaseLegend/PhaseLegend.vue +286 -286
  110. package/package/kisscomps/components/PhaseMarker/index.js +6 -6
  111. package/package/kisscomps/components/PhaseMarker/phasemarker.vue +215 -215
  112. package/package/kisscomps/components/PhaseMarker/svg/patternSvg.vue +121 -121
  113. package/package/kisscomps/components/PhaseMarker/svg/phase.vue +60 -60
  114. package/package/kisscomps/components/PhaseMarker/svg/phaseCount.vue +62 -62
  115. package/package/kisscomps/components/PhaseMarker/svg/phaseCountCycle.vue +62 -62
  116. package/package/kisscomps/components/PhaseMarker/svg/phaseSvg.vue +117 -117
  117. package/package/kisscomps/components/PhasePedSelect/index.vue +206 -206
  118. package/package/kisscomps/components/SchemeConfig/azimuthlocking/index.vue +365 -365
  119. package/package/kisscomps/components/SchemeConfig/azimuthlocking/utils.js +92 -92
  120. package/package/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +214 -214
  121. package/package/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +235 -235
  122. package/package/kisscomps/components/SchemeConfig/manualControlModal/index.vue +235 -235
  123. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/controlModelGroup.vue +131 -131
  124. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/index.vue +871 -871
  125. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/othersIcon.vue +151 -151
  126. package/package/kisscomps/components/SchemeConfig/priorityControl/index.vue +215 -215
  127. package/package/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -163
  128. package/package/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +308 -308
  129. package/package/kisscomps/components/SchemeConfig/utils/thirdPartypermission.js +95 -95
  130. package/package/kisscomps/components/SelectCrossPhase/index.vue +418 -418
  131. package/package/kisscomps/components/SelectCrossPhase/utils.js +142 -142
  132. package/package/kisscomps/components/StageOptimize/StageOptimize.vue +367 -367
  133. package/package/kisscomps/components/StageOptimize/index.js +2 -2
  134. package/package/kisscomps/components/StageStatus/StageStatus.vue +341 -341
  135. package/package/kisscomps/components/SvgIcon/SvgIcon.vue +53 -53
  136. package/package/kisscomps/components/XRDDirSelector/XRDDirSelector.vue +1041 -1041
  137. package/package/kisscomps/components/XiaoKanban/DirSelector.vue +356 -356
  138. package/package/kisscomps/components/XiaoKanban/index.vue +122 -122
  139. package/package/kisscomps/components/overView/index.vue +676 -676
  140. package/package/kisscomps/components/patternConfig/index.vue +802 -802
  141. package/package/kisscomps/components/patternConfig/pattern/patternTable.vue +604 -599
  142. package/package/kisscomps/components/patternConfig/pattern/planChart/model/coordinationModel.js +665 -665
  143. package/package/kisscomps/components/patternConfig/planContent.vue +604 -604
  144. package/package/kisscomps/components/patternConfig/planMenu.vue +329 -329
  145. package/package/kisscomps/components/patternConfig/utils.js +152 -152
  146. package/package/kisscomps/components/patternList/patternList.vue +606 -606
  147. package/package/kissui.js +216608 -0
  148. package/package/kissui.min.js +1 -1
  149. package/package.json +1 -1
  150. package/pnpm-lock.yaml +16362 -0
  151. package/src/App.vue +24 -24
  152. package/src/EdgeMgr/EdgeModelBase.js +16 -16
  153. package/src/EdgeMgr/controller/crossDiagramMgr.js +125 -125
  154. package/src/api/authapi.js +31 -31
  155. package/src/api/config.js +21 -21
  156. package/src/api/control.js +110 -110
  157. package/src/api/device.js +135 -135
  158. package/src/api/fault.js +66 -66
  159. package/src/api/index.js +24 -24
  160. package/src/api/login.js +46 -46
  161. package/src/api/optimize.js +72 -72
  162. package/src/api/param.js +165 -165
  163. package/src/api/passwdAssest.js +101 -101
  164. package/src/api/permission.js +33 -33
  165. package/src/api/route.js +171 -171
  166. package/src/api/template.js +27 -27
  167. package/src/assets/font/LICENSE.txt +202 -202
  168. package/src/assets/font/font.css +6 -6
  169. package/src/i18n/index.js +26 -26
  170. package/src/i18n/language/index.js +25 -25
  171. package/src/icons/index.js +20 -20
  172. package/src/icons/svg/azimuthlocking.svg +26 -26
  173. package/src/icons/svg/bendi.svg +110 -110
  174. package/src/icons/svg/bujin.svg +36 -36
  175. package/src/icons/svg/connectBlue.svg +7 -7
  176. package/src/icons/svg/currentvolume.svg +0 -0
  177. package/src/icons/svg/custom-BRTlane.svg +40 -40
  178. package/src/icons/svg/custom-buslane.svg +40 -40
  179. package/src/icons/svg/custom-detector.svg +12 -12
  180. package/src/icons/svg/custom-east-bottom.svg +32 -32
  181. package/src/icons/svg/custom-east-top.svg +32 -32
  182. package/src/icons/svg/custom-ewped.svg +35 -35
  183. package/src/icons/svg/custom-nonmotorizedlane.svg +40 -40
  184. package/src/icons/svg/custom-north-left.svg +32 -32
  185. package/src/icons/svg/custom-north-right.svg +32 -32
  186. package/src/icons/svg/custom-peddetector.svg +17 -17
  187. package/src/icons/svg/custom-snped.svg +35 -35
  188. package/src/icons/svg/custom-south-left.svg +32 -32
  189. package/src/icons/svg/custom-south-right.svg +32 -32
  190. package/src/icons/svg/custom-tramlane.svg +40 -40
  191. package/src/icons/svg/custom-vehiclebranch.svg +40 -40
  192. package/src/icons/svg/custom-vehiclemainroad.svg +41 -41
  193. package/src/icons/svg/custom-west-bottom.svg +32 -32
  194. package/src/icons/svg/custom-west-top.svg +32 -32
  195. package/src/icons/svg/custom-xlped.svg +14 -14
  196. package/src/icons/svg/custom-xrped.svg +14 -14
  197. package/src/icons/svg/cutRed.svg +7 -7
  198. package/src/icons/svg/cycle.svg +0 -0
  199. package/src/icons/svg/dingzhouqi.svg +34 -34
  200. package/src/icons/svg/ganyingkongzhi.svg +30 -30
  201. package/src/icons/svg/guandeng.svg +81 -81
  202. package/src/icons/svg/huangshan.svg +71 -71
  203. package/src/icons/svg/maincontrol.svg +0 -0
  204. package/src/icons/svg/manualcontrolbackground.svg +51 -51
  205. package/src/icons/svg/manualcontrolbackground1.svg +62 -62
  206. package/src/icons/svg/manualcontrolbackgrounden.svg +62 -62
  207. package/src/icons/svg/model.svg +0 -0
  208. package/src/icons/svg/phasediff.svg +0 -0
  209. package/src/icons/svg/prioritycontrol.svg +21 -21
  210. package/src/icons/svg/quanhong.svg +86 -86
  211. package/src/icons/svg/shanghe.svg +11 -11
  212. package/src/icons/svg/shoudong.svg +103 -103
  213. package/src/icons/svg/tentativeplan.svg +28 -28
  214. package/src/icons/svg/time.svg +0 -0
  215. package/src/icons/svg/wuxianlan.svg +46 -46
  216. package/src/icons/svg/xiala.svg +11 -11
  217. package/src/icons/svg/xingrenguojie.svg +33 -33
  218. package/src/icons/svg/xitong.svg +89 -89
  219. package/src/icons/svg/youxian.svg +41 -41
  220. package/src/icons/svg/zizhukongzhi.svg +43 -43
  221. package/src/kisscomps/components/BoardCard/BoardCard.vue +133 -133
  222. package/src/kisscomps/components/ChannelRealtimeIntersection/ChannelRealtimeIntersection.vue +123 -123
  223. package/src/kisscomps/components/Channelization/Channelization.vue +585 -585
  224. package/src/kisscomps/components/ChannelizationFlowStatistic/ChannelizationFlowStatistic.vue +360 -360
  225. package/src/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +518 -518
  226. package/src/kisscomps/components/CommonKanban/CommonKanban.vue +132 -132
  227. package/src/kisscomps/components/DirectionListConfiguration/DirectionListConfiguration.vue +456 -456
  228. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-east-bottom.vue +41 -41
  229. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-east-top.vue +60 -60
  230. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-ewped.vue +105 -105
  231. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-north-left.vue +60 -60
  232. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-north-right.vue +60 -60
  233. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-snped.vue +105 -105
  234. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-south-left.vue +60 -60
  235. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-south-right.vue +60 -60
  236. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-west-bottom.vue +60 -60
  237. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-west-top.vue +60 -60
  238. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-xlped.vue +30 -30
  239. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-xrped.vue +30 -30
  240. package/src/kisscomps/components/DirectionListConfiguration/svg/pedSvg.vue +78 -78
  241. package/src/kisscomps/components/DrawChannelization/drawsvg/basicCoordInfo.vue +181 -181
  242. package/src/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +255 -255
  243. package/src/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -152
  244. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -91
  245. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +194 -194
  246. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -108
  247. package/src/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +51 -51
  248. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +236 -236
  249. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +247 -247
  250. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +210 -210
  251. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +72 -72
  252. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +368 -368
  253. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +230 -230
  254. package/src/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +74 -74
  255. package/src/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +1022 -1022
  256. package/src/kisscomps/components/DrawChannelization/drawsvg/index.vue +144 -144
  257. package/src/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +707 -707
  258. package/src/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +172 -172
  259. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +172 -172
  260. package/src/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -99
  261. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +87 -87
  262. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -32
  263. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -20
  264. package/src/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -278
  265. package/src/kisscomps/components/ExpendConfig/ExpendConfig.vue +118 -118
  266. package/src/kisscomps/components/FaultDetailModal/FaultDetailModal.vue +178 -178
  267. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/CrossRoadsSvg.vue +629 -629
  268. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/CustomRoadsSvg.vue +46 -46
  269. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionEWSvg.vue +447 -447
  270. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionSNSvg.vue +341 -341
  271. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampEastSvg.vue +497 -497
  272. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampNorthSvg.vue +353 -353
  273. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampSouthSvg.vue +359 -359
  274. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampWestSvg.vue +443 -443
  275. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkClickSvg.vue +1302 -1302
  276. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkSvg.vue +1190 -1190
  277. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeEastRoadsSvg.vue +498 -498
  278. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeNorthRoadsSvg.vue +484 -484
  279. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeSouthRoadsSvg.vue +488 -488
  280. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeWestRoadsSvg.vue +566 -566
  281. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LCrossRoadsSvg.vue +640 -640
  282. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeEastRoadsSvg.vue +497 -497
  283. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeNorthRoadsSvg.vue +486 -486
  284. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeSouthRoadsSvg.vue +490 -490
  285. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeWestRoadsSvg.vue +575 -575
  286. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/refreshSvg.vue +63 -63
  287. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/busMapSvg.vue +50 -50
  288. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/eastBusSvg.vue +167 -167
  289. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/northBusSvg.vue +168 -168
  290. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/southBusSvg.vue +168 -168
  291. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/westBusSvg.vue +169 -169
  292. package/src/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/LphaseIconSvg.vue +197 -197
  293. package/src/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/rampPhaseIconSvg.vue +122 -122
  294. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.json +196 -196
  295. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.left.json +196 -196
  296. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.json +115 -115
  297. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.left.json +115 -115
  298. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/rampPos.json +52 -52
  299. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/sidePos.json +219 -219
  300. package/src/kisscomps/components/IntersectionMap/intersectionmap.vue +220 -220
  301. package/src/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +534 -534
  302. package/src/kisscomps/components/KanBan/kanban.vue +231 -231
  303. package/src/kisscomps/components/MessageBox/index.vue +96 -96
  304. package/src/kisscomps/components/OverLap/OverLap.vue +237 -237
  305. package/src/kisscomps/components/OverviewComponent/index.vue +853 -853
  306. package/src/kisscomps/components/PatternOptimize/PatternOptimize.vue +329 -329
  307. package/src/kisscomps/components/PatternWalkSvg/PatternWalkSvg.vue +423 -423
  308. package/src/kisscomps/components/PhaseDirectionSelect/PhaseDirectionSelect.vue +126 -126
  309. package/src/kisscomps/components/PhaseDirectionText/PhaseDirectionText.vue +106 -106
  310. package/src/kisscomps/components/PhaseLegend/PhaseLegend.vue +286 -286
  311. package/src/kisscomps/components/PhaseMarker/index.js +6 -6
  312. package/src/kisscomps/components/PhaseMarker/phasemarker.vue +215 -215
  313. package/src/kisscomps/components/PhaseMarker/svg/patternSvg.vue +121 -121
  314. package/src/kisscomps/components/PhaseMarker/svg/phase.vue +60 -60
  315. package/src/kisscomps/components/PhaseMarker/svg/phaseCount.vue +62 -62
  316. package/src/kisscomps/components/PhaseMarker/svg/phaseCountCycle.vue +62 -62
  317. package/src/kisscomps/components/PhaseMarker/svg/phaseSvg.vue +117 -117
  318. package/src/kisscomps/components/PhasePedSelect/index.vue +206 -206
  319. package/src/kisscomps/components/SchemeConfig/azimuthlocking/index.vue +365 -365
  320. package/src/kisscomps/components/SchemeConfig/azimuthlocking/utils.js +92 -92
  321. package/src/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +214 -214
  322. package/src/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +235 -235
  323. package/src/kisscomps/components/SchemeConfig/manualControlModal/index.vue +235 -235
  324. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/controlModelGroup.vue +131 -131
  325. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/index.vue +871 -871
  326. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/othersIcon.vue +151 -151
  327. package/src/kisscomps/components/SchemeConfig/priorityControl/index.vue +215 -215
  328. package/src/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -163
  329. package/src/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +308 -308
  330. package/src/kisscomps/components/SchemeConfig/utils/thirdPartypermission.js +95 -95
  331. package/src/kisscomps/components/SelectCrossPhase/index.vue +418 -418
  332. package/src/kisscomps/components/SelectCrossPhase/utils.js +142 -142
  333. package/src/kisscomps/components/StageOptimize/StageOptimize.vue +367 -367
  334. package/src/kisscomps/components/StageOptimize/index.js +2 -2
  335. package/src/kisscomps/components/StageStatus/StageStatus.vue +341 -341
  336. package/src/kisscomps/components/SvgIcon/SvgIcon.vue +53 -53
  337. package/src/kisscomps/components/XRDDirSelector/XRDDirSelector.vue +1041 -1041
  338. package/src/kisscomps/components/XiaoKanban/DirSelector.vue +356 -356
  339. package/src/kisscomps/components/XiaoKanban/index.vue +122 -122
  340. package/src/kisscomps/components/overView/index.vue +676 -676
  341. package/src/kisscomps/components/patternConfig/index.vue +802 -802
  342. package/src/kisscomps/components/patternConfig/pattern/patternTable.vue +604 -599
  343. package/src/kisscomps/components/patternConfig/pattern/planChart/model/coordinationModel.js +665 -665
  344. package/src/kisscomps/components/patternConfig/planContent.vue +604 -604
  345. package/src/kisscomps/components/patternConfig/planMenu.vue +329 -329
  346. package/src/kisscomps/components/patternConfig/utils.js +152 -152
  347. package/src/kisscomps/components/patternList/patternList.vue +606 -606
  348. package/src/lib/publicjs/ArryListUtil.js +38 -38
  349. package/src/lib/publicjs/HttpurlMgr.js +45 -45
  350. package/src/lib/publicjs/KissApi.js +158 -158
  351. package/src/lib/publicjs/KissWSSub/Heartcheck.js +128 -128
  352. package/src/lib/publicjs/KissWSSub/KissWsSub.js +91 -91
  353. package/src/lib/publicjs/KissWSSub/KissWsSubByType.js +152 -152
  354. package/src/lib/publicjs/KissWSSub/SimuWsSubByType.js +44 -44
  355. package/src/lib/publicjs/KissWSSub/Sub.js +51 -51
  356. package/src/lib/publicjs/KissWSSub/SubChannel.js +119 -119
  357. package/src/lib/publicjs/basecomponents.js +65 -65
  358. package/src/lib/publicjs/localStorage.js +112 -112
  359. package/src/lib/publicjs/objdeepcopy.js +32 -32
  360. package/src/lib/publicjs/pageScroll.js +30 -30
  361. package/src/lib/publicjs/passwdAssest.js +101 -101
  362. package/src/lib/publicjs/styleclassfactory.js +32 -32
  363. package/src/router/index.js +63 -63
  364. package/src/store/index.js +26 -26
  365. package/src/store/modules/globalParam.js +67 -67
  366. package/src/utils/ControlFormat.js +68 -68
  367. package/src/utils/RingDataModel.js +335 -335
  368. package/src/utils/auth.js +199 -199
  369. package/src/utils/conflct.js +268 -268
  370. package/src/utils/conflictList.js +87 -87
  371. package/src/utils/dateFormat.js +41 -41
  372. package/src/utils/fault.js +196 -196
  373. package/src/utils/faultcode.js +225 -225
  374. package/src/utils/index.js +69 -69
  375. package/src/utils/pedphasedesc.js +119 -119
  376. package/src/utils/phaseList.js +203 -203
  377. package/src/utils/phasedesc.js +144 -144
  378. package/src/utils/responseMessage.js +21 -21
  379. package/src/utils/validate.js +43 -43
  380. package/src/views/customchannelization.vue +49 -49
  381. package/src/views/home.1.vue +479 -479
  382. package/src/views/home.vue +93 -93
  383. package/src/views/intersection2.vue +328 -328
  384. package/src/views/overView.vue +63 -63
  385. package/src/views/patternConfig.vue +14792 -14792
  386. package/static/styles/channelizatioon.scss +433 -433
  387. package/static/styles/common.scss +30 -30
  388. package/static/styles/commonkanban.scss +168 -168
  389. package/static/styles/dark/index.scss +2 -2
  390. package/static/styles/dark/theme/element-dark.scss +44 -44
  391. package/static/styles/index.scss +84 -84
  392. package/static/styles/intersection.scss +180 -180
  393. package/static/styles/light/index.scss +2 -2
  394. package/static/styles/light/theme/element-light.scss +44 -44
  395. package/static/styles/overview.scss +146 -146
  396. package/static/styles/patternConfig.scss +56 -56
  397. package/static/styles/phasePedSelect.scss +71 -71
  398. package/static/styles/stages.scss +57 -57
  399. package/static/styles/uiComponents.scss +57 -57
  400. package/static/styles/xiaokanban.scss +61 -61
  401. package/static/token.json +2 -2
  402. package/test/e2e/custom-assertions/elementCount.js +27 -27
  403. package/test/e2e/nightwatch.conf.js +46 -46
  404. package/test/e2e/runner.js +48 -48
  405. package/test/e2e/specs/test.js +19 -19
  406. package/test/unit/.eslintrc +7 -7
  407. package/test/unit/jest.conf.js +30 -30
  408. package/test/unit/setup.js +3 -3
  409. package/test/unit/specs/HelloWorld.spec.js +11 -11
  410. package/package/kisscomps/components/OptimizeKanban/index.js +0 -2
  411. package/package/kisscomps/components/OptimizeKanban/index.vue +0 -369
  412. package/package/kisscomps/components/StageOptimize/index.vue +0 -310
  413. package/src/node_modules/.package_versions.json +0 -1
@@ -1,871 +1,871 @@
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="manual-control-modal-new">
14
- <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
15
- <el-tab-pane :label="$t('openatccomponents.overview.residentcontrol')" name="residentcontrol"
16
- v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('residentcontrol') !== -1))">
17
- <ControlModelGroup
18
- v-if="activeName === 'residentcontrol'"
19
- ref="ControlModelGroup"
20
- className="residentcontrol"
21
- :controlList="residentControlList"
22
- :funcSort="funcSort"
23
- :thirdPartyControl="thirdPartyControl"
24
- @selectModel="selectModel"
25
- />
26
-
27
- <div class="common-config" v-if="activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定'">
28
- <el-form
29
- v-if="isHasPermission('configer:manual:dwell')"
30
- ref="manual"
31
- label-position="left"
32
- :model="manualInfo"
33
- label-width="90px">
34
- <el-form-item
35
- :label="$t('openatccomponents.overview.duration')"
36
- prop="count">
37
- <el-input-number style="width: 170px;" v-model="manualInfo.tempDuration" :controls="false" :max="65535" :min="0" :precision="0" :step="1" :placeholder="$t('openatccomponents.common.input')" size="small"></el-input-number>
38
- </el-form-item>
39
- </el-form>
40
- </div>
41
-
42
- <div class="stage-part" v-if="preselecttype === '阶段锁定'">
43
- <div class="stage-label">{{$t('openatccomponents.overview.stage')}}</div>
44
- <div style="width: 100%; height: auto;overflow: hidden;" v-if="isHasPermission('configer:manual:dwell')">
45
- <Stages :crossStatusData="manuals?manualsStage:realtimeStage"
46
- :phaseList="phaseList"
47
- :preselectStages="preselectStages"
48
- :preselectModel="preselectModel"
49
- :isShowCurrentStage="false"
50
- @onSelectStages="selectStages"></Stages>
51
- </div>
52
- </div>
53
-
54
- <LockingPhaseControlModal
55
- v-if="preselecttype === '相位锁定'"
56
- :roadDirection="roadDirection"
57
- :phaseList="phaseList"
58
- :patternStatus="statusData"
59
- :isShowBack="isShowBack"
60
- :isShowRecovery="isShowRecovery"
61
- :isShowImplement="isShowImplement"
62
- @closePhaseBack="handleClose"
63
- @closePhaseControl="closePhaseControl"
64
- @toAutoControl="toAutoControl" />
65
-
66
- <AzimuthLocking
67
- v-if="preselecttype === '方向锁定' && isShowImplement"
68
- :realtimeStatusModalvisible="realtimeStatusModalvisible"
69
- :phaseList="phaseList"
70
- :patternStatus="statusData"
71
- :isShowBack="isShowBack"
72
- :isShowRecovery="isShowRecovery"
73
- :isShowImplement="isShowImplement"
74
- @closePhaseBack="handleClose"
75
- @toAutoControl="toAutoControl"
76
- />
77
-
78
- <div class="footer" v-if="((activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定') || activeName === 'specialcontrol' || activeName === 'schemeselection')">
79
- <el-button v-if="isShowBack && realtimeStatusModalvisible" @click="handleClose()">{{$t('openatccomponents.button.Back')}}</el-button>
80
- <el-button v-if="isShowRecovery && isHasPermission('configer:manual:renew')" @click="toAutoControl()">{{$t('openatccomponents.overview.recovery')}}</el-button>
81
- <el-button v-if="isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.implement')}}</el-button>
82
- <el-button v-if="!isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.comfirm')}}</el-button>
83
- </div>
84
- </el-tab-pane>
85
- <el-tab-pane :label="$t('openatccomponents.overview.specialcontrol')" name="specialcontrol"
86
- v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('specialcontrol') !== -1))">
87
- <ControlModelGroup
88
- v-if="activeName === 'specialcontrol'"
89
- ref="ControlModelGroup"
90
- className="specialcontrol"
91
- :controlList="specialControlList"
92
- :funcSort="funcSort"
93
- :thirdPartyControl="thirdPartyControl"
94
- @selectModel="selectModel"
95
- />
96
-
97
- <div class="common-config" v-if="isHasPermission('configer:manual:senior')">
98
- <el-form
99
- ref="manual"
100
- label-position="left"
101
- :model="manualInfo"
102
- label-width="90px">
103
- <el-form-item
104
- :label="$t('openatccomponents.overview.duration')"
105
- prop="count">
106
- <el-input-number style="width: 170px;" v-model="manualInfo.tempDuration" :controls="false" :max="65535" :min="0" :precision="0" :step="1" :placeholder="$t('openatccomponents.common.input')" size="small"></el-input-number>
107
- </el-form-item>
108
- </el-form>
109
- </div>
110
-
111
- <div class="footer" v-if="((activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定') || activeName === 'specialcontrol' || activeName === 'schemeselection')">
112
- <el-button v-if="isShowBack && realtimeStatusModalvisible" @click="handleClose()">{{$t('openatccomponents.button.Back')}}</el-button>
113
- <el-button v-if="isShowRecovery && isHasPermission('configer:manual:renew')" @click="toAutoControl()">{{$t('openatccomponents.overview.recovery')}}</el-button>
114
- <el-button v-if="isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.implement')}}</el-button>
115
- <el-button v-if="!isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.comfirm')}}</el-button>
116
- </div>
117
-
118
- </el-tab-pane>
119
- <el-tab-pane :label="$t('openatccomponents.overview.schemeselection')" name="schemeselection"
120
- v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('schemeselection') !== -1))">
121
- <ControlModelGroup
122
- v-if="activeName === 'schemeselection'"
123
- ref="ControlModelGroup"
124
- className="otherscontrol"
125
- :controlList="patternChooseControlList"
126
- :funcSort="funcSort"
127
- :thirdPartyControl="thirdPartyControl"
128
- @selectModel="selectModel"
129
- @selectSpecialModel="selectSpecialModel" />
130
-
131
- <div class="common-config" v-if="activeName === 'schemeselection' && isHasPermission('configer:manual:base')">
132
- <el-form
133
- ref="manual"
134
- label-position="left"
135
- :model="manualInfo"
136
- label-width="90px">
137
- <el-form-item
138
- :label="$t('openatccomponents.overview.duration')"
139
- prop="count">
140
- <el-input-number style="width: 170px;" v-model="manualInfo.tempDuration" :controls="false" :max="65535" :min="0" :precision="0" :step="1" :placeholder="$t('openatccomponents.common.input')" size="small"></el-input-number>
141
- </el-form-item>
142
- <el-form-item
143
- :label="$t('openatccomponents.overview.controlnumber')"
144
- prop="shape">
145
- <el-select style="width: 170px;" v-model="manualInfo.tempPatternid" @change="handleSelectPatternOption" class="col-inner" size="small" :placeholder="$t('openatccomponents.common.select')">
146
- <el-option
147
- v-for="item in patternSelect"
148
- :key="item.value"
149
- :label="item.label"
150
- :value="item.value">
151
- </el-option>
152
- </el-select>
153
- </el-form-item>
154
- </el-form>
155
-
156
- <div>
157
- <pattern-list
158
- :key="keyChange"
159
- :allPatternList="allPatternList"
160
- :contrloType="!this.isRing ? 'ring' : 'stage'"
161
- :stagesChange="
162
- patternOne.length === 0
163
- ? planPattern.stagesList
164
- : patternOne[0].stagesList
165
- "
166
- :patternList="patternOne.length === 0 ? planPattern.rings : patternOne"
167
- :patternStatusList="
168
- patternOne.length === 0 ? planPattern.rings : patternOne[0].rings
169
- "
170
- :cycles="
171
- patternOne.length === 0 ? planPattern.cycle : patternOne[0].cycle
172
- "
173
- :phaseList="phaseList"
174
- >
175
- </pattern-list>
176
- </div>
177
- </div>
178
-
179
- <div class="footer" v-if="((activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定') || activeName === 'specialcontrol' || activeName === 'schemeselection')">
180
- <el-button v-if="isShowBack && realtimeStatusModalvisible" @click="handleClose()">{{$t('openatccomponents.button.Back')}}</el-button>
181
- <el-button v-if="isShowRecovery && isHasPermission('configer:manual:renew')" @click="toAutoControl()">{{$t('openatccomponents.overview.recovery')}}</el-button>
182
- <el-button v-if="isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.implement')}}</el-button>
183
- <el-button v-if="!isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.comfirm')}}</el-button>
184
- </div>
185
- </el-tab-pane>
186
- <el-tab-pane :label="$t('openatccomponents.overview.others')" name="others"
187
- v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('others') !== -1))">
188
- <ControlModelGroup
189
- v-if="activeName === 'others'"
190
- ref="ControlModelGroup"
191
- className="otherscontrol"
192
- othersControl
193
- :controlList="othersControlList"
194
- :funcSort="funcSort"
195
- :thirdPartyControl="thirdPartyControl"
196
- @selectModel="selectModel"
197
- @selectSpecialModel="selectSpecialModel"
198
- />
199
- <ClosePhaseControlModal
200
- v-if="preselecttype === '相位关断'"
201
- :controlData="controlData"
202
- :closePhaseRings="closePhaseRings"
203
- :sidewalkPhaseData="sidewalkPhaseData"
204
- :realtimeStatusModalvisible="realtimeStatusModalvisible"
205
- :roadDirection="roadDirection"
206
- :isShowBack="isShowBack"
207
- :isShowRecovery="isShowRecovery"
208
- :isShowImplement="isShowImplement"
209
- @closePhaseBack="handleClose"
210
- @closePhaseControl="closePhaseControl"
211
- @toAutoControl="toAutoControl" />
212
- <TentativePlanControlModal
213
- v-if="preselecttype === '临时方案'"
214
- :realtimeStatusModalvisible="realtimeStatusModalvisible"
215
- :controlData="controlData"
216
- :phaseList="phaseList"
217
- :overlap="overlap"
218
- :patternSelect="patternSelect"
219
- :allPatternList="allPatternList"
220
- :isShowBack="isShowBack"
221
- :isShowRecovery="isShowRecovery"
222
- :isShowImplement="isShowImplement"
223
- @closePhaseBack="handleClose"
224
- @closePhaseControl="closePhaseControl"
225
- @toAutoControl="toAutoControl"
226
- />
227
- <PriorityControl
228
- v-if="preselecttype === '优先控制'"
229
- :realtimeStatusModalvisible="realtimeStatusModalvisible"
230
- :phaseList="phaseList"
231
- :isShowBack="isShowBack"
232
- :isShowRecovery="isShowRecovery"
233
- :isShowImplement="isShowImplement"
234
- @closePhaseBack="handleClose"
235
- @closePhaseControl="closePhaseControl"
236
- @toAutoControl="toAutoControl"
237
- />
238
- </el-tab-pane>
239
- </el-tabs>
240
- </div>
241
- </template>
242
-
243
- <script>
244
- import xdrdirselector from '../../XRDDirSelector/XRDDirSelector'
245
- import Stages from '../../Stages/index'
246
- import { hasPermission } from '../../../../utils/auth'
247
- import LockingPhaseControlModal from '../lockingPhaselControlModal'
248
- import AzimuthLocking from '../azimuthlocking'
249
- import ControlModelGroup from './controlModelGroup'
250
- import ClosePhaseControlModal from '../closePhaselControlModal'
251
- import TentativePlanControlModal from '../tentativeplancontrolmodal'
252
- import PriorityControl from '../priorityControl'
253
-
254
- export default {
255
- name: 'manualControl',
256
- components: {
257
- xdrdirselector,
258
- Stages,
259
- LockingPhaseControlModal,
260
- AzimuthLocking,
261
- ControlModelGroup,
262
- ClosePhaseControlModal,
263
- TentativePlanControlModal,
264
- PriorityControl
265
- },
266
- props: {
267
- patternAll: {
268
- type: Array
269
- },
270
- crossStatusData: {
271
- type: Object,
272
- default: () => {}
273
- },
274
- phaseList: {
275
- type: Array,
276
- default () {
277
- return []
278
- }
279
- },
280
- Visible: {
281
- type: Boolean
282
- },
283
- controlData: {
284
- type: Object
285
- },
286
- modelList: {
287
- type: Array
288
- },
289
- residentControlList: {
290
- type: Array
291
- },
292
- // stagesList: {
293
- // type: Array
294
- // },
295
- patternSelect: {
296
- type: Array
297
- },
298
- currModel: {
299
- type: Number
300
- },
301
- preselectModel: {
302
- type: Number
303
- },
304
- currentStage: {
305
- type: Number
306
- },
307
- preselectStages: {
308
- type: Number
309
- },
310
- specialcontrolList: {
311
- type: Array
312
- },
313
- realtimeStatusModalvisible: { // 区分是保存方案还是提交方案,保存方案没有路口实时信息
314
- type: Boolean,
315
- default: true
316
- },
317
- funcSort: {
318
- type: String,
319
- default: 'allFunc'
320
- },
321
- roadDirection: {
322
- type: String
323
- },
324
- statusData: {
325
- type: Object
326
- },
327
- specialControlList: {
328
- type: Array
329
- },
330
- othersControlList: {
331
- type: Array
332
- },
333
- closePhaseRings: {
334
- type: Array
335
- },
336
- sidewalkPhaseData: {
337
- type: Array
338
- },
339
- overlap: {
340
- type: Array
341
- },
342
- allPatternList: {
343
- type: Array
344
- },
345
- patternChooseControlList: {
346
- type: Array
347
- },
348
- isShowBack: {
349
- type: Boolean,
350
- default: true
351
- },
352
- isShowRecovery: {
353
- type: Boolean,
354
- default: true
355
- },
356
- isShowImplement: {
357
- type: Boolean,
358
- default: true
359
- },
360
- thirdPartyControlMenu: {
361
- type: Array
362
- },
363
- thirdPartyControl: {
364
- type: Array
365
- }
366
- },
367
- watch: {
368
- patternSelect: {
369
- handler: function (val) {
370
- this.manualInfo.tempPatternid = this.crossStatusData.patternid
371
- },
372
- // 深度观察监听
373
- deep: true
374
- },
375
- crossStatusData: {
376
- handler: function (val) {
377
- this.manualInfo.tempPatternid = this.manualInfo.tempPatternid ? this.manualInfo.tempPatternid : val.patternid
378
- this.realtimeStage = JSON.parse(JSON.stringify(this.crossStatusData))
379
- },
380
- // 深度观察监听
381
- deep: true
382
- }
383
- },
384
- data () {
385
- return {
386
- visible: this.Visible,
387
- manuals: false,
388
- realtimeStage: {},
389
- manualsStage: {},
390
- manualInfo: {
391
- tempPatternid: '', // 控制方式手动操作的情况下的控制编号的临时值。
392
- // tempDelay: 0, // 控制方式手动操作的情况下的延迟时间的临时值。
393
- tempDuration: 300 // 控制方式手动操作的情况下的持续时间的临时值。
394
- },
395
- activeName: 'residentcontrol',
396
- preselecttype: '',
397
- keyChange: false,
398
- isRing: false,
399
- patternOne: [],
400
- planPattern: {}
401
- }
402
- },
403
- methods: {
404
- handleClick (tab, event) {
405
- this.$nextTick(() => {
406
- this.init(tab)
407
- })
408
- },
409
- isHasPermission (path) {
410
- let res = hasPermission(path)
411
- return res
412
- },
413
- handleSelectPatternOption (value) {
414
- if (value === '') {
415
- this.manualInfo.tempPatternid = 0
416
- return
417
- }
418
- this.changeStage(value)
419
- this.selectPattern()
420
- },
421
- selectPattern () {
422
- this.manualInfo.offset = 0
423
- let selectId = Number(this.manualInfo.tempPatternid)
424
- this.patternOne = this.allPatternList.filter(item => {
425
- return item.id === selectId
426
- })
427
- this.manualInfo.offset = this.offset
428
- for (let rings of this.patternOne[0].rings) {
429
- if (rings.length === 0) continue
430
- for (let ring of rings) {
431
- if (ring.value === 0) continue
432
- let currPhase = this.phaseList.filter((item) => {
433
- return item.id === ring.id
434
- })[0]
435
- ring.desc = currPhase.direction.map(item => {
436
- return {
437
- id: item,
438
- color: '#454545'
439
- }
440
- })
441
- }
442
- }
443
- this.handleStageData(this.patternOne[0].rings)
444
- },
445
- handleStageData (rings) { // stagesList
446
- if (!rings) return
447
- for (let i = 0; i < rings.length; i++) {
448
- if (rings[i].length > 0) {
449
- let phaseList = []
450
- let stagesList = []
451
- // rings = JSON.parse(JSON.stringify(rings))
452
- let mapAdd = rings.map(item => {
453
- return item.map(val => {
454
- // if (val.mode !== 7) {
455
- return val.value + (val.sum ? val.sum : 0)
456
- // } else {
457
- // return 0
458
- // }
459
- })
460
- })
461
- let maxCycle = mapAdd.length > 0 ? mapAdd.map(item => {
462
- return item.length > 0 ? item.reduce((a, b) => {
463
- return a + b
464
- }) : 0
465
- }) : 0
466
- this.max = Math.max(...maxCycle)// 每个环的周期最大值
467
- this.stateList = [0]
468
- this.narr = []
469
- let currentIds = ''
470
- let lastCurrentIds = ''
471
- for (let j = 0; j <= this.max; j++) { // 指针长度
472
- for (let i = 0; i < rings.length; i++) { // 环列表
473
- let ring = rings[i]// 每个环对象
474
- let sum = 0
475
- for (let n = 0; n < ring.length; n++) { // 相位累计长度
476
- // if (ring[n].mode !== 7) {
477
- sum = sum + ring[n].value + (ring[n].sum ? ring[n].sum : 0)
478
- if (j < sum) {
479
- let phaseId = ring[n].id
480
- currentIds = currentIds + '-' + phaseId
481
- break
482
- }
483
- // }
484
- }
485
- }
486
- if (lastCurrentIds !== currentIds && lastCurrentIds !== '') { // 当前相位id和上一个相比不同说明相位变化了
487
- phaseList.push(lastCurrentIds)
488
- this.stateList.push(j)// 阶段累计长度的集合
489
- }
490
- lastCurrentIds = currentIds
491
- currentIds = ''
492
- }
493
- let newPhaselist = []
494
- phaseList.forEach(i => {
495
- let rangeArr = i.split('-').map(Number)
496
- if (rangeArr.length > 2) {
497
- newPhaselist.push([
498
- JSON.parse(JSON.stringify(rangeArr[1])),
499
- JSON.parse(JSON.stringify(rangeArr[2]))
500
- ])
501
- } else {
502
- newPhaselist.push([
503
- JSON.parse(JSON.stringify(rangeArr[1]))
504
- ])
505
- }
506
- })
507
- for (let i = this.stateList.length - 1; i >= 1; i--) {
508
- this.narr.push(this.stateList[i] - this.stateList[i - 1])
509
- }
510
- // newPhaselist
511
- this.narr.reverse()// 阶段差
512
- for (let i = 0; i < newPhaselist.length; i++) {
513
- let stage = JSON.parse(JSON.stringify(newPhaselist[i]))
514
- let newStage = []
515
- stage.map(item => {
516
- for (let ring of rings) {
517
- for (let ringItem of ring) {
518
- if (item === ringItem.id && (ringItem.mode !== 7 && ringItem.mode !== 8 && ringItem.mode !== 9)) {
519
- newStage.push(item)
520
- }
521
- }
522
- }
523
- })
524
- let stageItem = this.getStageItem(newStage, stage, rings, i)
525
- stagesList.push(JSON.parse(JSON.stringify(stageItem)))
526
- }
527
- this.overLapCycle = stagesList.reduce((prev, curr) => prev + parseInt(curr.split), 0)
528
- this.stagesList = JSON.parse(JSON.stringify(stagesList))
529
- }
530
- }
531
- },
532
- getCycle () {
533
- for (let rings of this.planPattern.rings) {
534
- let num = 0
535
- for (let i = 0; i < rings.length; i++) {
536
- if (rings[i].length !== 0) {
537
- if (rings[i].mode === 7) { // 忽略相位不计周期
538
- continue
539
- }
540
- num = num + Number(rings[i].value)
541
- }
542
- }
543
- if (num !== 0) {
544
- this.planPattern.cycle = num
545
- break
546
- }
547
- }
548
- },
549
- patternPlan () {
550
- let Pattern = {
551
- offset: 0,
552
- cycle: 0,
553
- stagesList: [],
554
- rings: [[], [], [], []]
555
- }
556
- var newPattern = JSON.parse(JSON.stringify(Pattern))
557
- for (let phase of this.phaseList) {
558
- let ring = {}
559
- ring.name = 'Phase ' + phase.id
560
- // ring.desc = this.getPhaseDescription(phase.direction)
561
- ring.id = phase.id
562
- ring.value = 30
563
- ring.mode = 2
564
- ring.options = []
565
- ring.delaystart = 0
566
- ring.advanceend = 0
567
- if (phase.ring === 1) {
568
- newPattern.rings[0].push(ring)
569
- } else if (phase.ring === 2) {
570
- newPattern.rings[1].push(ring)
571
- } else if (phase.ring === 3) {
572
- newPattern.rings[2].push(ring)
573
- } else if (phase.ring === 4) {
574
- newPattern.rings[3].push(ring)
575
- }
576
- }
577
- let barrier = this.handleCurrentChange(newPattern.rings)
578
- newPattern.barriers = barrier
579
- this.planPattern = newPattern
580
- },
581
- tranform (arr) { // 分barrier
582
- let newMap = new Map()
583
- arr.forEach(({ id, current }) => {
584
- const find = newMap.get(current.join())
585
- if (find) newMap.get(current.join()).push(id)
586
- else newMap.set(current.join(), [id])
587
- })
588
- let ret = []
589
- newMap.forEach((value, key) => {
590
- ret.push(Array.from(new Set(key.split(',').map(Number).concat(value))))
591
- })
592
- const result = []
593
- for (const a of ret) {
594
- let merged = false
595
- for (const r of result) {
596
- if (this.check([...r], a)) {
597
- a.forEach(item => r.add(item))
598
- merged = true
599
- }
600
- }
601
- if (!merged) {
602
- result.push(new Set(a))
603
- }
604
- merged = false
605
- }
606
- return result.map(s => [...s])
607
- },
608
- check (arr1, arr2) {
609
- return arr1.some(a1 => arr2.some(a2 => a1 === a2))
610
- },
611
- handleCurrentChange (val) { // 两个ring的数据
612
- if (val === null || val.length === 0) return
613
- // 按环序分组
614
- let ringlength = []
615
- let ringsequence = val.map(item => {
616
- if (item.length === 0) return
617
- ringlength.push(item.length)
618
- return item.map(k => {
619
- return k.id
620
- })
621
- })
622
- let newRings = ringsequence.filter(item => item)
623
- let minLength = Math.min(...ringlength)
624
- let resultArrs = [] // 环1分组
625
- let resultArr = [] // 环2分组
626
- for (let j = 0; j < ringsequence[0].length; j += minLength) {
627
- resultArrs.push(ringsequence[0].slice(j, j + minLength))
628
- if (ringsequence[0].length === minLength) {
629
- resultArrs.push([])
630
- }
631
- }
632
- if (newRings.length > 1) {
633
- for (let i = 0; i < ringsequence[1].length; i += minLength) {
634
- resultArr.push(ringsequence[1].slice(i, i + minLength))
635
- }
636
- }
637
- // this.patternInfo = []
638
- // this.barrierList = []
639
- let currentArr = []
640
- let newPattern = []
641
- val.map(i => {
642
- newPattern.push(...i)
643
- })
644
- if (this.phaseList.length === 0) return
645
- for (let patternStatus of val[0]) {
646
- // if (patternStatus.mode !== 7) {
647
- let concurrent = this.phaseList.filter((item) => {
648
- return item.id === patternStatus.id // patternStatus.id当前相位id concurrent当前相位的并发相位
649
- })[0].concurrent// 当前相位的并发相位
650
- if (concurrent) {
651
- let obj = {
652
- id: patternStatus.id,
653
- current: concurrent.sort()
654
- }
655
- currentArr.push(obj)
656
- }
657
- // }
658
- }
659
- if (currentArr.length !== 0) {
660
- let newCurrent = this.tranform(currentArr)
661
- // 取没个环与环关系的并集
662
- let barrierRing1 = []
663
- let barrierRing2 = []
664
- let ring1 = [] // 环1与关系1的并集
665
- for (let h = 0; h < newCurrent.length; h++) {
666
- let adds = [...new Set(resultArrs[0])].filter(item => newCurrent[h].includes(item))
667
- ring1.push(adds)
668
- }
669
- let ring1s = [] // 环1与关系2的并集
670
- for (let h = 0; h < newCurrent.length; h++) {
671
- let addRing1 = [...new Set(resultArrs[1])].filter(item => newCurrent[h].includes(item))
672
- ring1s.push(addRing1)
673
- }
674
- barrierRing1.push(...ring1, ...ring1s)
675
- let resultList = []
676
- if (newRings.length > 1) {
677
- let ring2s = [] // 环2与关系1的并集
678
- for (let h = 0; h < newCurrent.length; h++) {
679
- let addRing2 = [...new Set(resultArr[1])].filter(item => newCurrent[h].includes(item))
680
- ring2s.push(addRing2)
681
- }
682
- let ring2 = [] // 环2与关系1的并集
683
- for (let h = 0; h < newCurrent.length; h++) {
684
- let add = [...new Set(resultArr[0])].filter(item => newCurrent[h].includes(item))
685
- ring2.push(add)
686
- }
687
- barrierRing2.push(...ring2, ...ring2s)
688
- for (let k = 0; k < barrierRing1.length; k++) {
689
- resultList.push(barrierRing1[k].concat(barrierRing2[k]))
690
- }
691
- }
692
- let resultLists = resultList.filter(item => item.length !== 0)
693
- let ringArr = []
694
- for (let l = 0; l < resultLists.length; l++) {
695
- for (let d = 0; d < newCurrent.length; d++) {
696
- if (newCurrent[d].filter(item => resultLists[l].includes(item)).length > 0) {
697
- ringArr.push({
698
- data: resultLists[l],
699
- id: d + 1,
700
- index: l
701
- })
702
- }
703
- }
704
- }
705
- for (var i = 0; i < ringArr.length; i++) {
706
- for (var j = i + 1; j < ringArr.length; j++) {
707
- if (ringArr[i].id === ringArr[j].id && ringArr[i].index + 1 === ringArr[j].index) {
708
- ringArr[i].data = ringArr[i].data.concat(ringArr[j].data)
709
- ringArr.splice(ringArr.indexOf(ringArr[j].id), 1)
710
- }
711
- }
712
- }
713
- let resArr = ringArr.map(item => item.data)
714
- let ringTeam = this.step1(this.phaseList, resArr)
715
- let ringTeams = ringTeam.filter(item => item.length !== 0)
716
- return this.setBarrier(ringTeams, val)
717
- }
718
- },
719
- setBarrier (ringTeam, val) {
720
- const patternObjs = {}
721
- val.forEach(l => {
722
- l.map(k => {
723
- patternObjs[k.id] = k.value
724
- })
725
- })
726
- let ret = ringTeam.map((y, index) => {
727
- if (!y || y.length === 0) return
728
- y.map(n => {
729
- n.length = n.data.length > 1 ? n.data.reduce((pre, cur) => pre + patternObjs[cur], 0) : patternObjs[n.data[0]]
730
- })
731
- return {
732
- barrier: index + 1,
733
- length: y[0].length,
734
- items: y.map(j => {
735
- return {
736
- ring: j.ring,
737
- data: j.data
738
- }
739
- })
740
- }
741
- })
742
- return ret
743
- },
744
- step1 (list, arr) { // 各个环包含的相位
745
- const ret = []
746
- const listObj = {}
747
- list.forEach(l => {
748
- listObj[l.id] = l.ring
749
- })
750
- arr.forEach(a => {
751
- const retItem = []
752
- a.forEach(b => {
753
- if (listObj[b]) {
754
- const find = retItem.find(r => r.ring === listObj[b])
755
- if (find) find.data.push(b)
756
- else retItem.push({ ring: listObj[b], data: [b] })
757
- }
758
- })
759
- ret.push(retItem)
760
- })
761
- return ret
762
- },
763
- getStageItem (stageArr, stage, ringsList, i) {
764
- let res = {
765
- key: i,
766
- split: this.narr[i], // 阶段绿性比
767
- phases: stageArr,
768
- stageKanban: stage,
769
- delaystart: 0,
770
- advanceend: 0
771
- }
772
- // let splitArr = []
773
- let delaystartArr = []
774
- let advanceendArr = []
775
- for (let rings of ringsList) {
776
- for (let ring of rings) {
777
- if (stageArr.includes(ring.id)) {
778
- // let split = ring.value
779
- let delaystart = ring.delaystart
780
- let advanceend = ring.advanceend
781
- // splitArr.push(split)
782
- delaystartArr.push(delaystart)
783
- advanceendArr.push(advanceend)
784
- }
785
- }
786
- }
787
- // splitArr.sort(function (a, b) { return a - b })
788
- delaystartArr.sort(function (a, b) { return b - a })
789
- advanceendArr.sort(function (a, b) { return a - b })
790
- // res.split = splitArr.length > 0 ? splitArr[0] : 0
791
- res.delaystart = delaystartArr.length > 0 ? delaystartArr[0] : 0
792
- res.advanceend = advanceendArr.length > 0 ? advanceendArr[0] : 0
793
- return res
794
- },
795
- changeStage (value) {
796
- if (value) {
797
- this.manualsStage = {}
798
- this.manuals = true
799
- let stages = []
800
- let secletIds = isNaN(parseInt(value)) ? Number(value.replace(/[^0-9]/ig, '')) : value
801
- stages = this.patternAll.filter(item => {
802
- return item.id === secletIds
803
- })[0].stages
804
- this.manualsStage.stages = stages
805
- } else {
806
- this.manuals = false
807
- this.realtimeStage = JSON.parse(JSON.stringify(this.crossStatusData))
808
- }
809
- },
810
- handleClose () {
811
- this.$emit('closeManualModal')
812
- },
813
- handleManualControl () {
814
- this.$emit('patternCommit', this.manualInfo)
815
- },
816
- selectModel (item) {
817
- this.preselecttype = item.type
818
- this.manualInfo.fromControl = item.id
819
- if (item.iconClass === 'jieduansuoding') {
820
- this.manualInfo.fromControl = 40
821
- }
822
- this.$emit('selectModel', item.id)
823
- },
824
- selectStages (value) {
825
- this.$emit('selectStages', value)
826
- },
827
- selectSpecialModel () {
828
- this.$emit('selectSpecialModel')
829
- },
830
- init (tab) {
831
- this.$refs.ControlModelGroup.init()
832
- if (!tab) return
833
- if (this.controlData.patternid) {
834
- this.manualInfo.tempPatternid = this.controlData.patternid
835
- }
836
- if (this.controlData.tempDuration) {
837
- this.manualInfo.tempDuration = this.controlData.duration
838
- }
839
- if (tab.name === 'schemeselection') {
840
- this.initPattern()
841
- this.selectPattern()
842
- }
843
- },
844
- closePhaseBack () {
845
- this.$emit('closePhaseBack')
846
- },
847
- closePhaseControl (controldata) {
848
- this.$emit('closePhaseControl', controldata)
849
- },
850
- initPattern () {
851
- this.patternPlan()
852
- this.getCycle()
853
- if (this.patternOne.length === 0) {
854
- this.handleStageData(this.planPattern.rings)
855
- }
856
- },
857
- toAutoControl () {
858
- let autonomyControl = {
859
- id: 0,
860
- iconClass: 'zizhukongzhi',
861
- permission: 'configer:manual:renew',
862
- iconName: '自主控制'
863
- }
864
- this.$emit('selectModel', autonomyControl.id)
865
- this.handleManualControl()
866
- }
867
- },
868
- mounted () {
869
- }
870
- }
871
- </script>
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="manual-control-modal-new">
14
+ <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
15
+ <el-tab-pane :label="$t('openatccomponents.overview.residentcontrol')" name="residentcontrol"
16
+ v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('residentcontrol') !== -1))">
17
+ <ControlModelGroup
18
+ v-if="activeName === 'residentcontrol'"
19
+ ref="ControlModelGroup"
20
+ className="residentcontrol"
21
+ :controlList="residentControlList"
22
+ :funcSort="funcSort"
23
+ :thirdPartyControl="thirdPartyControl"
24
+ @selectModel="selectModel"
25
+ />
26
+
27
+ <div class="common-config" v-if="activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定'">
28
+ <el-form
29
+ v-if="isHasPermission('configer:manual:dwell')"
30
+ ref="manual"
31
+ label-position="left"
32
+ :model="manualInfo"
33
+ label-width="90px">
34
+ <el-form-item
35
+ :label="$t('openatccomponents.overview.duration')"
36
+ prop="count">
37
+ <el-input-number style="width: 170px;" v-model="manualInfo.tempDuration" :controls="false" :max="65535" :min="0" :precision="0" :step="1" :placeholder="$t('openatccomponents.common.input')" size="small"></el-input-number>
38
+ </el-form-item>
39
+ </el-form>
40
+ </div>
41
+
42
+ <div class="stage-part" v-if="preselecttype === '阶段锁定'">
43
+ <div class="stage-label">{{$t('openatccomponents.overview.stage')}}</div>
44
+ <div style="width: 100%; height: auto;overflow: hidden;" v-if="isHasPermission('configer:manual:dwell')">
45
+ <Stages :crossStatusData="manuals?manualsStage:realtimeStage"
46
+ :phaseList="phaseList"
47
+ :preselectStages="preselectStages"
48
+ :preselectModel="preselectModel"
49
+ :isShowCurrentStage="false"
50
+ @onSelectStages="selectStages"></Stages>
51
+ </div>
52
+ </div>
53
+
54
+ <LockingPhaseControlModal
55
+ v-if="preselecttype === '相位锁定'"
56
+ :roadDirection="roadDirection"
57
+ :phaseList="phaseList"
58
+ :patternStatus="statusData"
59
+ :isShowBack="isShowBack"
60
+ :isShowRecovery="isShowRecovery"
61
+ :isShowImplement="isShowImplement"
62
+ @closePhaseBack="handleClose"
63
+ @closePhaseControl="closePhaseControl"
64
+ @toAutoControl="toAutoControl" />
65
+
66
+ <AzimuthLocking
67
+ v-if="preselecttype === '方向锁定' && isShowImplement"
68
+ :realtimeStatusModalvisible="realtimeStatusModalvisible"
69
+ :phaseList="phaseList"
70
+ :patternStatus="statusData"
71
+ :isShowBack="isShowBack"
72
+ :isShowRecovery="isShowRecovery"
73
+ :isShowImplement="isShowImplement"
74
+ @closePhaseBack="handleClose"
75
+ @toAutoControl="toAutoControl"
76
+ />
77
+
78
+ <div class="footer" v-if="((activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定') || activeName === 'specialcontrol' || activeName === 'schemeselection')">
79
+ <el-button v-if="isShowBack && realtimeStatusModalvisible" @click="handleClose()">{{$t('openatccomponents.button.Back')}}</el-button>
80
+ <el-button v-if="isShowRecovery && isHasPermission('configer:manual:renew')" @click="toAutoControl()">{{$t('openatccomponents.overview.recovery')}}</el-button>
81
+ <el-button v-if="isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.implement')}}</el-button>
82
+ <el-button v-if="!isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.comfirm')}}</el-button>
83
+ </div>
84
+ </el-tab-pane>
85
+ <el-tab-pane :label="$t('openatccomponents.overview.specialcontrol')" name="specialcontrol"
86
+ v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('specialcontrol') !== -1))">
87
+ <ControlModelGroup
88
+ v-if="activeName === 'specialcontrol'"
89
+ ref="ControlModelGroup"
90
+ className="specialcontrol"
91
+ :controlList="specialControlList"
92
+ :funcSort="funcSort"
93
+ :thirdPartyControl="thirdPartyControl"
94
+ @selectModel="selectModel"
95
+ />
96
+
97
+ <div class="common-config" v-if="isHasPermission('configer:manual:senior')">
98
+ <el-form
99
+ ref="manual"
100
+ label-position="left"
101
+ :model="manualInfo"
102
+ label-width="90px">
103
+ <el-form-item
104
+ :label="$t('openatccomponents.overview.duration')"
105
+ prop="count">
106
+ <el-input-number style="width: 170px;" v-model="manualInfo.tempDuration" :controls="false" :max="65535" :min="0" :precision="0" :step="1" :placeholder="$t('openatccomponents.common.input')" size="small"></el-input-number>
107
+ </el-form-item>
108
+ </el-form>
109
+ </div>
110
+
111
+ <div class="footer" v-if="((activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定') || activeName === 'specialcontrol' || activeName === 'schemeselection')">
112
+ <el-button v-if="isShowBack && realtimeStatusModalvisible" @click="handleClose()">{{$t('openatccomponents.button.Back')}}</el-button>
113
+ <el-button v-if="isShowRecovery && isHasPermission('configer:manual:renew')" @click="toAutoControl()">{{$t('openatccomponents.overview.recovery')}}</el-button>
114
+ <el-button v-if="isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.implement')}}</el-button>
115
+ <el-button v-if="!isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.comfirm')}}</el-button>
116
+ </div>
117
+
118
+ </el-tab-pane>
119
+ <el-tab-pane :label="$t('openatccomponents.overview.schemeselection')" name="schemeselection"
120
+ v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('schemeselection') !== -1))">
121
+ <ControlModelGroup
122
+ v-if="activeName === 'schemeselection'"
123
+ ref="ControlModelGroup"
124
+ className="otherscontrol"
125
+ :controlList="patternChooseControlList"
126
+ :funcSort="funcSort"
127
+ :thirdPartyControl="thirdPartyControl"
128
+ @selectModel="selectModel"
129
+ @selectSpecialModel="selectSpecialModel" />
130
+
131
+ <div class="common-config" v-if="activeName === 'schemeselection' && isHasPermission('configer:manual:base')">
132
+ <el-form
133
+ ref="manual"
134
+ label-position="left"
135
+ :model="manualInfo"
136
+ label-width="90px">
137
+ <el-form-item
138
+ :label="$t('openatccomponents.overview.duration')"
139
+ prop="count">
140
+ <el-input-number style="width: 170px;" v-model="manualInfo.tempDuration" :controls="false" :max="65535" :min="0" :precision="0" :step="1" :placeholder="$t('openatccomponents.common.input')" size="small"></el-input-number>
141
+ </el-form-item>
142
+ <el-form-item
143
+ :label="$t('openatccomponents.overview.controlnumber')"
144
+ prop="shape">
145
+ <el-select style="width: 170px;" v-model="manualInfo.tempPatternid" @change="handleSelectPatternOption" class="col-inner" size="small" :placeholder="$t('openatccomponents.common.select')">
146
+ <el-option
147
+ v-for="item in patternSelect"
148
+ :key="item.value"
149
+ :label="item.label"
150
+ :value="item.value">
151
+ </el-option>
152
+ </el-select>
153
+ </el-form-item>
154
+ </el-form>
155
+
156
+ <div>
157
+ <pattern-list
158
+ :key="keyChange"
159
+ :allPatternList="allPatternList"
160
+ :contrloType="!this.isRing ? 'ring' : 'stage'"
161
+ :stagesChange="
162
+ patternOne.length === 0
163
+ ? planPattern.stagesList
164
+ : patternOne[0].stagesList
165
+ "
166
+ :patternList="patternOne.length === 0 ? planPattern.rings : patternOne"
167
+ :patternStatusList="
168
+ patternOne.length === 0 ? planPattern.rings : patternOne[0].rings
169
+ "
170
+ :cycles="
171
+ patternOne.length === 0 ? planPattern.cycle : patternOne[0].cycle
172
+ "
173
+ :phaseList="phaseList"
174
+ >
175
+ </pattern-list>
176
+ </div>
177
+ </div>
178
+
179
+ <div class="footer" v-if="((activeName === 'residentcontrol' && preselecttype !== '相位锁定' && preselecttype !== '方向锁定') || activeName === 'specialcontrol' || activeName === 'schemeselection')">
180
+ <el-button v-if="isShowBack && realtimeStatusModalvisible" @click="handleClose()">{{$t('openatccomponents.button.Back')}}</el-button>
181
+ <el-button v-if="isShowRecovery && isHasPermission('configer:manual:renew')" @click="toAutoControl()">{{$t('openatccomponents.overview.recovery')}}</el-button>
182
+ <el-button v-if="isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.implement')}}</el-button>
183
+ <el-button v-if="!isShowImplement" type="primary" @click="handleManualControl()">{{$t('openatccomponents.overview.comfirm')}}</el-button>
184
+ </div>
185
+ </el-tab-pane>
186
+ <el-tab-pane :label="$t('openatccomponents.overview.others')" name="others"
187
+ v-if="(funcSort === 'allFunc' || (funcSort === 'thirdPartyFunc'&& thirdPartyControlMenu.indexOf('others') !== -1))">
188
+ <ControlModelGroup
189
+ v-if="activeName === 'others'"
190
+ ref="ControlModelGroup"
191
+ className="otherscontrol"
192
+ othersControl
193
+ :controlList="othersControlList"
194
+ :funcSort="funcSort"
195
+ :thirdPartyControl="thirdPartyControl"
196
+ @selectModel="selectModel"
197
+ @selectSpecialModel="selectSpecialModel"
198
+ />
199
+ <ClosePhaseControlModal
200
+ v-if="preselecttype === '相位关断'"
201
+ :controlData="controlData"
202
+ :closePhaseRings="closePhaseRings"
203
+ :sidewalkPhaseData="sidewalkPhaseData"
204
+ :realtimeStatusModalvisible="realtimeStatusModalvisible"
205
+ :roadDirection="roadDirection"
206
+ :isShowBack="isShowBack"
207
+ :isShowRecovery="isShowRecovery"
208
+ :isShowImplement="isShowImplement"
209
+ @closePhaseBack="handleClose"
210
+ @closePhaseControl="closePhaseControl"
211
+ @toAutoControl="toAutoControl" />
212
+ <TentativePlanControlModal
213
+ v-if="preselecttype === '临时方案'"
214
+ :realtimeStatusModalvisible="realtimeStatusModalvisible"
215
+ :controlData="controlData"
216
+ :phaseList="phaseList"
217
+ :overlap="overlap"
218
+ :patternSelect="patternSelect"
219
+ :allPatternList="allPatternList"
220
+ :isShowBack="isShowBack"
221
+ :isShowRecovery="isShowRecovery"
222
+ :isShowImplement="isShowImplement"
223
+ @closePhaseBack="handleClose"
224
+ @closePhaseControl="closePhaseControl"
225
+ @toAutoControl="toAutoControl"
226
+ />
227
+ <PriorityControl
228
+ v-if="preselecttype === '优先控制'"
229
+ :realtimeStatusModalvisible="realtimeStatusModalvisible"
230
+ :phaseList="phaseList"
231
+ :isShowBack="isShowBack"
232
+ :isShowRecovery="isShowRecovery"
233
+ :isShowImplement="isShowImplement"
234
+ @closePhaseBack="handleClose"
235
+ @closePhaseControl="closePhaseControl"
236
+ @toAutoControl="toAutoControl"
237
+ />
238
+ </el-tab-pane>
239
+ </el-tabs>
240
+ </div>
241
+ </template>
242
+
243
+ <script>
244
+ import xdrdirselector from '../../XRDDirSelector/XRDDirSelector'
245
+ import Stages from '../../Stages/index'
246
+ import { hasPermission } from '../../../../utils/auth'
247
+ import LockingPhaseControlModal from '../lockingPhaselControlModal'
248
+ import AzimuthLocking from '../azimuthlocking'
249
+ import ControlModelGroup from './controlModelGroup'
250
+ import ClosePhaseControlModal from '../closePhaselControlModal'
251
+ import TentativePlanControlModal from '../tentativeplancontrolmodal'
252
+ import PriorityControl from '../priorityControl'
253
+
254
+ export default {
255
+ name: 'manualControl',
256
+ components: {
257
+ xdrdirselector,
258
+ Stages,
259
+ LockingPhaseControlModal,
260
+ AzimuthLocking,
261
+ ControlModelGroup,
262
+ ClosePhaseControlModal,
263
+ TentativePlanControlModal,
264
+ PriorityControl
265
+ },
266
+ props: {
267
+ patternAll: {
268
+ type: Array
269
+ },
270
+ crossStatusData: {
271
+ type: Object,
272
+ default: () => {}
273
+ },
274
+ phaseList: {
275
+ type: Array,
276
+ default () {
277
+ return []
278
+ }
279
+ },
280
+ Visible: {
281
+ type: Boolean
282
+ },
283
+ controlData: {
284
+ type: Object
285
+ },
286
+ modelList: {
287
+ type: Array
288
+ },
289
+ residentControlList: {
290
+ type: Array
291
+ },
292
+ // stagesList: {
293
+ // type: Array
294
+ // },
295
+ patternSelect: {
296
+ type: Array
297
+ },
298
+ currModel: {
299
+ type: Number
300
+ },
301
+ preselectModel: {
302
+ type: Number
303
+ },
304
+ currentStage: {
305
+ type: Number
306
+ },
307
+ preselectStages: {
308
+ type: Number
309
+ },
310
+ specialcontrolList: {
311
+ type: Array
312
+ },
313
+ realtimeStatusModalvisible: { // 区分是保存方案还是提交方案,保存方案没有路口实时信息
314
+ type: Boolean,
315
+ default: true
316
+ },
317
+ funcSort: {
318
+ type: String,
319
+ default: 'allFunc'
320
+ },
321
+ roadDirection: {
322
+ type: String
323
+ },
324
+ statusData: {
325
+ type: Object
326
+ },
327
+ specialControlList: {
328
+ type: Array
329
+ },
330
+ othersControlList: {
331
+ type: Array
332
+ },
333
+ closePhaseRings: {
334
+ type: Array
335
+ },
336
+ sidewalkPhaseData: {
337
+ type: Array
338
+ },
339
+ overlap: {
340
+ type: Array
341
+ },
342
+ allPatternList: {
343
+ type: Array
344
+ },
345
+ patternChooseControlList: {
346
+ type: Array
347
+ },
348
+ isShowBack: {
349
+ type: Boolean,
350
+ default: true
351
+ },
352
+ isShowRecovery: {
353
+ type: Boolean,
354
+ default: true
355
+ },
356
+ isShowImplement: {
357
+ type: Boolean,
358
+ default: true
359
+ },
360
+ thirdPartyControlMenu: {
361
+ type: Array
362
+ },
363
+ thirdPartyControl: {
364
+ type: Array
365
+ }
366
+ },
367
+ watch: {
368
+ patternSelect: {
369
+ handler: function (val) {
370
+ this.manualInfo.tempPatternid = this.crossStatusData.patternid
371
+ },
372
+ // 深度观察监听
373
+ deep: true
374
+ },
375
+ crossStatusData: {
376
+ handler: function (val) {
377
+ this.manualInfo.tempPatternid = this.manualInfo.tempPatternid ? this.manualInfo.tempPatternid : val.patternid
378
+ this.realtimeStage = JSON.parse(JSON.stringify(this.crossStatusData))
379
+ },
380
+ // 深度观察监听
381
+ deep: true
382
+ }
383
+ },
384
+ data () {
385
+ return {
386
+ visible: this.Visible,
387
+ manuals: false,
388
+ realtimeStage: {},
389
+ manualsStage: {},
390
+ manualInfo: {
391
+ tempPatternid: '', // 控制方式手动操作的情况下的控制编号的临时值。
392
+ // tempDelay: 0, // 控制方式手动操作的情况下的延迟时间的临时值。
393
+ tempDuration: 300 // 控制方式手动操作的情况下的持续时间的临时值。
394
+ },
395
+ activeName: 'residentcontrol',
396
+ preselecttype: '',
397
+ keyChange: false,
398
+ isRing: false,
399
+ patternOne: [],
400
+ planPattern: {}
401
+ }
402
+ },
403
+ methods: {
404
+ handleClick (tab, event) {
405
+ this.$nextTick(() => {
406
+ this.init(tab)
407
+ })
408
+ },
409
+ isHasPermission (path) {
410
+ let res = hasPermission(path)
411
+ return res
412
+ },
413
+ handleSelectPatternOption (value) {
414
+ if (value === '') {
415
+ this.manualInfo.tempPatternid = 0
416
+ return
417
+ }
418
+ this.changeStage(value)
419
+ this.selectPattern()
420
+ },
421
+ selectPattern () {
422
+ this.manualInfo.offset = 0
423
+ let selectId = Number(this.manualInfo.tempPatternid)
424
+ this.patternOne = this.allPatternList.filter(item => {
425
+ return item.id === selectId
426
+ })
427
+ this.manualInfo.offset = this.offset
428
+ for (let rings of this.patternOne[0].rings) {
429
+ if (rings.length === 0) continue
430
+ for (let ring of rings) {
431
+ if (ring.value === 0) continue
432
+ let currPhase = this.phaseList.filter((item) => {
433
+ return item.id === ring.id
434
+ })[0]
435
+ ring.desc = currPhase.direction.map(item => {
436
+ return {
437
+ id: item,
438
+ color: '#454545'
439
+ }
440
+ })
441
+ }
442
+ }
443
+ this.handleStageData(this.patternOne[0].rings)
444
+ },
445
+ handleStageData (rings) { // stagesList
446
+ if (!rings) return
447
+ for (let i = 0; i < rings.length; i++) {
448
+ if (rings[i].length > 0) {
449
+ let phaseList = []
450
+ let stagesList = []
451
+ // rings = JSON.parse(JSON.stringify(rings))
452
+ let mapAdd = rings.map(item => {
453
+ return item.map(val => {
454
+ // if (val.mode !== 7) {
455
+ return val.value + (val.sum ? val.sum : 0)
456
+ // } else {
457
+ // return 0
458
+ // }
459
+ })
460
+ })
461
+ let maxCycle = mapAdd.length > 0 ? mapAdd.map(item => {
462
+ return item.length > 0 ? item.reduce((a, b) => {
463
+ return a + b
464
+ }) : 0
465
+ }) : 0
466
+ this.max = Math.max(...maxCycle)// 每个环的周期最大值
467
+ this.stateList = [0]
468
+ this.narr = []
469
+ let currentIds = ''
470
+ let lastCurrentIds = ''
471
+ for (let j = 0; j <= this.max; j++) { // 指针长度
472
+ for (let i = 0; i < rings.length; i++) { // 环列表
473
+ let ring = rings[i]// 每个环对象
474
+ let sum = 0
475
+ for (let n = 0; n < ring.length; n++) { // 相位累计长度
476
+ // if (ring[n].mode !== 7) {
477
+ sum = sum + ring[n].value + (ring[n].sum ? ring[n].sum : 0)
478
+ if (j < sum) {
479
+ let phaseId = ring[n].id
480
+ currentIds = currentIds + '-' + phaseId
481
+ break
482
+ }
483
+ // }
484
+ }
485
+ }
486
+ if (lastCurrentIds !== currentIds && lastCurrentIds !== '') { // 当前相位id和上一个相比不同说明相位变化了
487
+ phaseList.push(lastCurrentIds)
488
+ this.stateList.push(j)// 阶段累计长度的集合
489
+ }
490
+ lastCurrentIds = currentIds
491
+ currentIds = ''
492
+ }
493
+ let newPhaselist = []
494
+ phaseList.forEach(i => {
495
+ let rangeArr = i.split('-').map(Number)
496
+ if (rangeArr.length > 2) {
497
+ newPhaselist.push([
498
+ JSON.parse(JSON.stringify(rangeArr[1])),
499
+ JSON.parse(JSON.stringify(rangeArr[2]))
500
+ ])
501
+ } else {
502
+ newPhaselist.push([
503
+ JSON.parse(JSON.stringify(rangeArr[1]))
504
+ ])
505
+ }
506
+ })
507
+ for (let i = this.stateList.length - 1; i >= 1; i--) {
508
+ this.narr.push(this.stateList[i] - this.stateList[i - 1])
509
+ }
510
+ // newPhaselist
511
+ this.narr.reverse()// 阶段差
512
+ for (let i = 0; i < newPhaselist.length; i++) {
513
+ let stage = JSON.parse(JSON.stringify(newPhaselist[i]))
514
+ let newStage = []
515
+ stage.map(item => {
516
+ for (let ring of rings) {
517
+ for (let ringItem of ring) {
518
+ if (item === ringItem.id && (ringItem.mode !== 7 && ringItem.mode !== 8 && ringItem.mode !== 9)) {
519
+ newStage.push(item)
520
+ }
521
+ }
522
+ }
523
+ })
524
+ let stageItem = this.getStageItem(newStage, stage, rings, i)
525
+ stagesList.push(JSON.parse(JSON.stringify(stageItem)))
526
+ }
527
+ this.overLapCycle = stagesList.reduce((prev, curr) => prev + parseInt(curr.split), 0)
528
+ this.stagesList = JSON.parse(JSON.stringify(stagesList))
529
+ }
530
+ }
531
+ },
532
+ getCycle () {
533
+ for (let rings of this.planPattern.rings) {
534
+ let num = 0
535
+ for (let i = 0; i < rings.length; i++) {
536
+ if (rings[i].length !== 0) {
537
+ if (rings[i].mode === 7) { // 忽略相位不计周期
538
+ continue
539
+ }
540
+ num = num + Number(rings[i].value)
541
+ }
542
+ }
543
+ if (num !== 0) {
544
+ this.planPattern.cycle = num
545
+ break
546
+ }
547
+ }
548
+ },
549
+ patternPlan () {
550
+ let Pattern = {
551
+ offset: 0,
552
+ cycle: 0,
553
+ stagesList: [],
554
+ rings: [[], [], [], []]
555
+ }
556
+ var newPattern = JSON.parse(JSON.stringify(Pattern))
557
+ for (let phase of this.phaseList) {
558
+ let ring = {}
559
+ ring.name = 'Phase ' + phase.id
560
+ // ring.desc = this.getPhaseDescription(phase.direction)
561
+ ring.id = phase.id
562
+ ring.value = 30
563
+ ring.mode = 2
564
+ ring.options = []
565
+ ring.delaystart = 0
566
+ ring.advanceend = 0
567
+ if (phase.ring === 1) {
568
+ newPattern.rings[0].push(ring)
569
+ } else if (phase.ring === 2) {
570
+ newPattern.rings[1].push(ring)
571
+ } else if (phase.ring === 3) {
572
+ newPattern.rings[2].push(ring)
573
+ } else if (phase.ring === 4) {
574
+ newPattern.rings[3].push(ring)
575
+ }
576
+ }
577
+ let barrier = this.handleCurrentChange(newPattern.rings)
578
+ newPattern.barriers = barrier
579
+ this.planPattern = newPattern
580
+ },
581
+ tranform (arr) { // 分barrier
582
+ let newMap = new Map()
583
+ arr.forEach(({ id, current }) => {
584
+ const find = newMap.get(current.join())
585
+ if (find) newMap.get(current.join()).push(id)
586
+ else newMap.set(current.join(), [id])
587
+ })
588
+ let ret = []
589
+ newMap.forEach((value, key) => {
590
+ ret.push(Array.from(new Set(key.split(',').map(Number).concat(value))))
591
+ })
592
+ const result = []
593
+ for (const a of ret) {
594
+ let merged = false
595
+ for (const r of result) {
596
+ if (this.check([...r], a)) {
597
+ a.forEach(item => r.add(item))
598
+ merged = true
599
+ }
600
+ }
601
+ if (!merged) {
602
+ result.push(new Set(a))
603
+ }
604
+ merged = false
605
+ }
606
+ return result.map(s => [...s])
607
+ },
608
+ check (arr1, arr2) {
609
+ return arr1.some(a1 => arr2.some(a2 => a1 === a2))
610
+ },
611
+ handleCurrentChange (val) { // 两个ring的数据
612
+ if (val === null || val.length === 0) return
613
+ // 按环序分组
614
+ let ringlength = []
615
+ let ringsequence = val.map(item => {
616
+ if (item.length === 0) return
617
+ ringlength.push(item.length)
618
+ return item.map(k => {
619
+ return k.id
620
+ })
621
+ })
622
+ let newRings = ringsequence.filter(item => item)
623
+ let minLength = Math.min(...ringlength)
624
+ let resultArrs = [] // 环1分组
625
+ let resultArr = [] // 环2分组
626
+ for (let j = 0; j < ringsequence[0].length; j += minLength) {
627
+ resultArrs.push(ringsequence[0].slice(j, j + minLength))
628
+ if (ringsequence[0].length === minLength) {
629
+ resultArrs.push([])
630
+ }
631
+ }
632
+ if (newRings.length > 1) {
633
+ for (let i = 0; i < ringsequence[1].length; i += minLength) {
634
+ resultArr.push(ringsequence[1].slice(i, i + minLength))
635
+ }
636
+ }
637
+ // this.patternInfo = []
638
+ // this.barrierList = []
639
+ let currentArr = []
640
+ let newPattern = []
641
+ val.map(i => {
642
+ newPattern.push(...i)
643
+ })
644
+ if (this.phaseList.length === 0) return
645
+ for (let patternStatus of val[0]) {
646
+ // if (patternStatus.mode !== 7) {
647
+ let concurrent = this.phaseList.filter((item) => {
648
+ return item.id === patternStatus.id // patternStatus.id当前相位id concurrent当前相位的并发相位
649
+ })[0].concurrent// 当前相位的并发相位
650
+ if (concurrent) {
651
+ let obj = {
652
+ id: patternStatus.id,
653
+ current: concurrent.sort()
654
+ }
655
+ currentArr.push(obj)
656
+ }
657
+ // }
658
+ }
659
+ if (currentArr.length !== 0) {
660
+ let newCurrent = this.tranform(currentArr)
661
+ // 取没个环与环关系的并集
662
+ let barrierRing1 = []
663
+ let barrierRing2 = []
664
+ let ring1 = [] // 环1与关系1的并集
665
+ for (let h = 0; h < newCurrent.length; h++) {
666
+ let adds = [...new Set(resultArrs[0])].filter(item => newCurrent[h].includes(item))
667
+ ring1.push(adds)
668
+ }
669
+ let ring1s = [] // 环1与关系2的并集
670
+ for (let h = 0; h < newCurrent.length; h++) {
671
+ let addRing1 = [...new Set(resultArrs[1])].filter(item => newCurrent[h].includes(item))
672
+ ring1s.push(addRing1)
673
+ }
674
+ barrierRing1.push(...ring1, ...ring1s)
675
+ let resultList = []
676
+ if (newRings.length > 1) {
677
+ let ring2s = [] // 环2与关系1的并集
678
+ for (let h = 0; h < newCurrent.length; h++) {
679
+ let addRing2 = [...new Set(resultArr[1])].filter(item => newCurrent[h].includes(item))
680
+ ring2s.push(addRing2)
681
+ }
682
+ let ring2 = [] // 环2与关系1的并集
683
+ for (let h = 0; h < newCurrent.length; h++) {
684
+ let add = [...new Set(resultArr[0])].filter(item => newCurrent[h].includes(item))
685
+ ring2.push(add)
686
+ }
687
+ barrierRing2.push(...ring2, ...ring2s)
688
+ for (let k = 0; k < barrierRing1.length; k++) {
689
+ resultList.push(barrierRing1[k].concat(barrierRing2[k]))
690
+ }
691
+ }
692
+ let resultLists = resultList.filter(item => item.length !== 0)
693
+ let ringArr = []
694
+ for (let l = 0; l < resultLists.length; l++) {
695
+ for (let d = 0; d < newCurrent.length; d++) {
696
+ if (newCurrent[d].filter(item => resultLists[l].includes(item)).length > 0) {
697
+ ringArr.push({
698
+ data: resultLists[l],
699
+ id: d + 1,
700
+ index: l
701
+ })
702
+ }
703
+ }
704
+ }
705
+ for (var i = 0; i < ringArr.length; i++) {
706
+ for (var j = i + 1; j < ringArr.length; j++) {
707
+ if (ringArr[i].id === ringArr[j].id && ringArr[i].index + 1 === ringArr[j].index) {
708
+ ringArr[i].data = ringArr[i].data.concat(ringArr[j].data)
709
+ ringArr.splice(ringArr.indexOf(ringArr[j].id), 1)
710
+ }
711
+ }
712
+ }
713
+ let resArr = ringArr.map(item => item.data)
714
+ let ringTeam = this.step1(this.phaseList, resArr)
715
+ let ringTeams = ringTeam.filter(item => item.length !== 0)
716
+ return this.setBarrier(ringTeams, val)
717
+ }
718
+ },
719
+ setBarrier (ringTeam, val) {
720
+ const patternObjs = {}
721
+ val.forEach(l => {
722
+ l.map(k => {
723
+ patternObjs[k.id] = k.value
724
+ })
725
+ })
726
+ let ret = ringTeam.map((y, index) => {
727
+ if (!y || y.length === 0) return
728
+ y.map(n => {
729
+ n.length = n.data.length > 1 ? n.data.reduce((pre, cur) => pre + patternObjs[cur], 0) : patternObjs[n.data[0]]
730
+ })
731
+ return {
732
+ barrier: index + 1,
733
+ length: y[0].length,
734
+ items: y.map(j => {
735
+ return {
736
+ ring: j.ring,
737
+ data: j.data
738
+ }
739
+ })
740
+ }
741
+ })
742
+ return ret
743
+ },
744
+ step1 (list, arr) { // 各个环包含的相位
745
+ const ret = []
746
+ const listObj = {}
747
+ list.forEach(l => {
748
+ listObj[l.id] = l.ring
749
+ })
750
+ arr.forEach(a => {
751
+ const retItem = []
752
+ a.forEach(b => {
753
+ if (listObj[b]) {
754
+ const find = retItem.find(r => r.ring === listObj[b])
755
+ if (find) find.data.push(b)
756
+ else retItem.push({ ring: listObj[b], data: [b] })
757
+ }
758
+ })
759
+ ret.push(retItem)
760
+ })
761
+ return ret
762
+ },
763
+ getStageItem (stageArr, stage, ringsList, i) {
764
+ let res = {
765
+ key: i,
766
+ split: this.narr[i], // 阶段绿性比
767
+ phases: stageArr,
768
+ stageKanban: stage,
769
+ delaystart: 0,
770
+ advanceend: 0
771
+ }
772
+ // let splitArr = []
773
+ let delaystartArr = []
774
+ let advanceendArr = []
775
+ for (let rings of ringsList) {
776
+ for (let ring of rings) {
777
+ if (stageArr.includes(ring.id)) {
778
+ // let split = ring.value
779
+ let delaystart = ring.delaystart
780
+ let advanceend = ring.advanceend
781
+ // splitArr.push(split)
782
+ delaystartArr.push(delaystart)
783
+ advanceendArr.push(advanceend)
784
+ }
785
+ }
786
+ }
787
+ // splitArr.sort(function (a, b) { return a - b })
788
+ delaystartArr.sort(function (a, b) { return b - a })
789
+ advanceendArr.sort(function (a, b) { return a - b })
790
+ // res.split = splitArr.length > 0 ? splitArr[0] : 0
791
+ res.delaystart = delaystartArr.length > 0 ? delaystartArr[0] : 0
792
+ res.advanceend = advanceendArr.length > 0 ? advanceendArr[0] : 0
793
+ return res
794
+ },
795
+ changeStage (value) {
796
+ if (value) {
797
+ this.manualsStage = {}
798
+ this.manuals = true
799
+ let stages = []
800
+ let secletIds = isNaN(parseInt(value)) ? Number(value.replace(/[^0-9]/ig, '')) : value
801
+ stages = this.patternAll.filter(item => {
802
+ return item.id === secletIds
803
+ })[0].stages
804
+ this.manualsStage.stages = stages
805
+ } else {
806
+ this.manuals = false
807
+ this.realtimeStage = JSON.parse(JSON.stringify(this.crossStatusData))
808
+ }
809
+ },
810
+ handleClose () {
811
+ this.$emit('closeManualModal')
812
+ },
813
+ handleManualControl () {
814
+ this.$emit('patternCommit', this.manualInfo)
815
+ },
816
+ selectModel (item) {
817
+ this.preselecttype = item.type
818
+ this.manualInfo.fromControl = item.id
819
+ if (item.iconClass === 'jieduansuoding') {
820
+ this.manualInfo.fromControl = 40
821
+ }
822
+ this.$emit('selectModel', item.id)
823
+ },
824
+ selectStages (value) {
825
+ this.$emit('selectStages', value)
826
+ },
827
+ selectSpecialModel () {
828
+ this.$emit('selectSpecialModel')
829
+ },
830
+ init (tab) {
831
+ this.$refs.ControlModelGroup.init()
832
+ if (!tab) return
833
+ if (this.controlData.patternid) {
834
+ this.manualInfo.tempPatternid = this.controlData.patternid
835
+ }
836
+ if (this.controlData.tempDuration) {
837
+ this.manualInfo.tempDuration = this.controlData.duration
838
+ }
839
+ if (tab.name === 'schemeselection') {
840
+ this.initPattern()
841
+ this.selectPattern()
842
+ }
843
+ },
844
+ closePhaseBack () {
845
+ this.$emit('closePhaseBack')
846
+ },
847
+ closePhaseControl (controldata) {
848
+ this.$emit('closePhaseControl', controldata)
849
+ },
850
+ initPattern () {
851
+ this.patternPlan()
852
+ this.getCycle()
853
+ if (this.patternOne.length === 0) {
854
+ this.handleStageData(this.planPattern.rings)
855
+ }
856
+ },
857
+ toAutoControl () {
858
+ let autonomyControl = {
859
+ id: 0,
860
+ iconClass: 'zizhukongzhi',
861
+ permission: 'configer:manual:renew',
862
+ iconName: '自主控制'
863
+ }
864
+ this.$emit('selectModel', autonomyControl.id)
865
+ this.handleManualControl()
866
+ }
867
+ },
868
+ mounted () {
869
+ }
870
+ }
871
+ </script>