openatc-components 0.2.34 → 0.2.35

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 (484) 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 +93 -93
  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 +112 -112
  23. package/package/kisscomps/components/BoardCard/index.js +2 -2
  24. package/package/kisscomps/components/Channelization/Channelization.vue +584 -584
  25. package/package/kisscomps/components/Channelization/index.js +2 -2
  26. package/package/kisscomps/components/ChannelizationFlowStatistic/ChannelizationFlowStatistic.vue +360 -360
  27. package/package/kisscomps/components/ChannelizationFlowStatistic/index.js +2 -2
  28. package/package/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +518 -518
  29. package/package/kisscomps/components/ChannelizationWithInterface/index.js +2 -2
  30. package/package/kisscomps/components/CommonKanban/CommonKanban.vue +132 -132
  31. package/package/kisscomps/components/CommonKanban/index.js +2 -2
  32. package/package/kisscomps/components/DirectionListConfiguration/DirectionListConfiguration.vue +454 -454
  33. package/package/kisscomps/components/DirectionListConfiguration/index.js +2 -2
  34. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-east-bottom.vue +41 -41
  35. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-east-top.vue +60 -60
  36. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-ewped.vue +105 -105
  37. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-north-left.vue +60 -60
  38. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-north-right.vue +60 -60
  39. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-snped.vue +105 -105
  40. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-south-left.vue +60 -60
  41. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-south-right.vue +60 -60
  42. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-west-bottom.vue +60 -60
  43. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-west-top.vue +60 -60
  44. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-xlped.vue +30 -30
  45. package/package/kisscomps/components/DirectionListConfiguration/svg/ped-xrped.vue +30 -30
  46. package/package/kisscomps/components/DirectionListConfiguration/svg/pedSvg.vue +78 -78
  47. package/package/kisscomps/components/DrawChannelization/drawsvg/basicCoordInfo.vue +181 -181
  48. package/package/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +255 -255
  49. package/package/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -152
  50. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -91
  51. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +194 -194
  52. package/package/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -108
  53. package/package/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +51 -51
  54. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +236 -236
  55. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +247 -247
  56. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +210 -210
  57. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +72 -72
  58. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +467 -467
  59. package/package/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +230 -230
  60. package/package/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +74 -74
  61. package/package/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +1005 -1005
  62. package/package/kisscomps/components/DrawChannelization/drawsvg/index.vue +110 -110
  63. package/package/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +707 -707
  64. package/package/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +172 -172
  65. package/package/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +172 -172
  66. package/package/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -99
  67. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +87 -87
  68. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -32
  69. package/package/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -20
  70. package/package/kisscomps/components/DrawChannelization/index.js +2 -2
  71. package/package/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -278
  72. package/package/kisscomps/components/ExpendConfig/ExpendConfig.vue +118 -118
  73. package/package/kisscomps/components/ExpendConfig/index.js +2 -2
  74. package/package/kisscomps/components/FaultDetailModal/FaultDetailModal.vue +178 -178
  75. package/package/kisscomps/components/FaultDetailModal/index.js +2 -2
  76. package/package/kisscomps/components/IntersectionDirectionSelection/IntersectionDirectionSelection.vue +127 -158
  77. package/package/kisscomps/components/IntersectionDirectionSelection/index.js +2 -2
  78. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/CrossRoadsSvg.vue +496 -496
  79. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/CustomRoadsSvg.vue +46 -46
  80. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionEWSvg.vue +300 -300
  81. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionSNSvg.vue +288 -288
  82. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampEastSvg.vue +391 -391
  83. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampNorthSvg.vue +336 -336
  84. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampSouthSvg.vue +345 -345
  85. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampWestSvg.vue +389 -389
  86. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkClickSvg.vue +1272 -1272
  87. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkSvg.vue +1190 -1190
  88. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeEastRoadsSvg.vue +402 -402
  89. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeNorthRoadsSvg.vue +361 -361
  90. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeSouthRoadsSvg.vue +368 -368
  91. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeWestRoadsSvg.vue +475 -475
  92. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LCrossRoadsSvg.vue +494 -494
  93. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeEastRoadsSvg.vue +401 -401
  94. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeNorthRoadsSvg.vue +360 -360
  95. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeSouthRoadsSvg.vue +367 -367
  96. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeWestRoadsSvg.vue +476 -476
  97. package/package/kisscomps/components/IntersectionMap/crossDirection/baseImg/refreshSvg.vue +63 -63
  98. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/busMapSvg.vue +50 -50
  99. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/eastBusSvg.vue +167 -167
  100. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/northBusSvg.vue +168 -168
  101. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/southBusSvg.vue +168 -168
  102. package/package/kisscomps/components/IntersectionMap/crossDirection/busIcon/westBusSvg.vue +169 -169
  103. package/package/kisscomps/components/IntersectionMap/crossDirection/crossDiagram.vue +1200 -1200
  104. package/package/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/LphaseIconSvg.vue +197 -197
  105. package/package/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/phaseIconSvg.vue +196 -196
  106. package/package/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/rampPhaseIconSvg.vue +122 -122
  107. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.json +196 -196
  108. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.left.json +196 -196
  109. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.json +115 -115
  110. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.left.json +115 -115
  111. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/rampPos.json +52 -52
  112. package/package/kisscomps/components/IntersectionMap/crossDirection/posJson/sidePos.json +219 -219
  113. package/package/kisscomps/components/IntersectionMap/crossDirection/utils.js +84 -84
  114. package/package/kisscomps/components/IntersectionMap/index.js +2 -2
  115. package/package/kisscomps/components/IntersectionMap/intersectionmap.vue +199 -199
  116. package/package/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +530 -530
  117. package/package/kisscomps/components/IntersectionWithInterface/index.js +2 -2
  118. package/package/kisscomps/components/KanBan/index.js +2 -2
  119. package/package/kisscomps/components/KanBan/kanban.vue +225 -225
  120. package/package/kisscomps/components/MessageBox/index.vue +96 -96
  121. package/package/kisscomps/components/OverLap/OverLap.vue +235 -235
  122. package/package/kisscomps/components/OverLap/index.js +2 -2
  123. package/package/kisscomps/components/PatternOptimize/PatternOptimize.vue +272 -272
  124. package/package/kisscomps/components/PatternOptimize/index.js +2 -2
  125. package/package/kisscomps/components/PatternStatus/PatternStatus.vue +1481 -1478
  126. package/package/kisscomps/components/PatternStatus/index.js +2 -2
  127. package/package/kisscomps/components/PatternWalkSvg/PatternWalkSvg.vue +423 -423
  128. package/package/kisscomps/components/PatternWalkSvg/index.js +2 -2
  129. package/package/kisscomps/components/PhaseDirectionSelect/PhaseDirectionSelect.vue +126 -126
  130. package/package/kisscomps/components/PhaseDirectionSelect/index.js +2 -2
  131. package/package/kisscomps/components/PhaseDirectionText/PhaseDirectionText.vue +106 -106
  132. package/package/kisscomps/components/PhaseDirectionText/index.js +2 -2
  133. package/package/kisscomps/components/PhaseMarker/index.js +6 -6
  134. package/package/kisscomps/components/PhaseMarker/phasemarker.vue +215 -215
  135. package/package/kisscomps/components/PhaseMarker/svg/patternSvg.vue +121 -121
  136. package/package/kisscomps/components/PhaseMarker/svg/phase.vue +60 -60
  137. package/package/kisscomps/components/PhaseMarker/svg/phaseCount.vue +62 -62
  138. package/package/kisscomps/components/PhaseMarker/svg/phaseCountCycle.vue +62 -62
  139. package/package/kisscomps/components/PhaseMarker/svg/phaseSvg.vue +117 -117
  140. package/package/kisscomps/components/SchemeConfig/SchemeConfig.vue +988 -835
  141. package/package/kisscomps/components/SchemeConfig/azimuthlocking/index.vue +356 -313
  142. package/package/kisscomps/components/SchemeConfig/azimuthlocking/utils.js +92 -92
  143. package/package/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +206 -195
  144. package/package/kisscomps/components/SchemeConfig/index.js +2 -2
  145. package/package/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +208 -198
  146. package/package/kisscomps/components/SchemeConfig/manualControlModal/index.vue +235 -235
  147. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/controlModelGroup.vue +128 -0
  148. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/icon.vue +426 -0
  149. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/index.vue +820 -0
  150. package/package/kisscomps/components/SchemeConfig/manualControlModalNew/othersIcon.vue +194 -0
  151. package/package/kisscomps/components/SchemeConfig/priorityControl/index.vue +206 -197
  152. package/package/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -163
  153. package/package/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +275 -275
  154. package/package/kisscomps/components/SchemeConfig/tentativeplancontrolmodal/index.vue +1196 -1194
  155. package/package/kisscomps/components/SelectCrossPhase/index.vue +417 -417
  156. package/package/kisscomps/components/SelectCrossPhase/utils.js +142 -142
  157. package/package/kisscomps/components/StageBord/StageBord.vue +287 -287
  158. package/package/kisscomps/components/StageBord/index.js +2 -2
  159. package/package/kisscomps/components/StageStatus/StageStatus.vue +341 -341
  160. package/package/kisscomps/components/StageStatus/index.js +2 -2
  161. package/package/kisscomps/components/Stages/index.vue +252 -211
  162. package/package/kisscomps/components/SvgIcon/SvgIcon.vue +53 -53
  163. package/package/kisscomps/components/SvgIcon/index.js +2 -2
  164. package/package/kisscomps/components/XRDDirSelector/XRDDirSelector.vue +1067 -1065
  165. package/package/kisscomps/components/XRDDirSelector/index.js +2 -2
  166. package/package/kisscomps/components/XiaoKanban/DirSelector.vue +356 -356
  167. package/package/kisscomps/components/XiaoKanban/index.vue +102 -102
  168. package/package/kisscomps/components/overView/index.vue +699 -699
  169. package/package/kisscomps/components/patternConfig/index.js +2 -2
  170. package/package/kisscomps/components/patternConfig/index.vue +1126 -1126
  171. package/package/kisscomps/components/patternConfig/pattern/patternTable.vue +348 -408
  172. package/package/kisscomps/components/patternConfig/pattern/planChart/model/coordinationModel.js +665 -665
  173. package/package/kisscomps/components/patternConfig/planContent.vue +573 -576
  174. package/package/kisscomps/components/patternConfig/planMenu.vue +329 -329
  175. package/package/kisscomps/components/patternConfig/utils.js +152 -152
  176. package/package/kisscomps/components/patternList/index.js +2 -2
  177. package/package/kisscomps/components/patternList/patternList.vue +585 -585
  178. package/package/kisscomps/index.js +123 -123
  179. package/package/kissui.min.js +1 -1
  180. package/package.json +127 -127
  181. package/src/App.vue +24 -24
  182. package/src/EdgeMgr/EdgeModelBase.js +16 -16
  183. package/src/EdgeMgr/controller/crossDiagramMgr.js +125 -125
  184. package/src/api/authapi.js +31 -31
  185. package/src/api/config.js +21 -21
  186. package/src/api/control.js +106 -106
  187. package/src/api/cross.js +49 -49
  188. package/src/api/device.js +135 -135
  189. package/src/api/fault.js +66 -66
  190. package/src/api/index.js +24 -24
  191. package/src/api/login.js +46 -46
  192. package/src/api/optimize.js +72 -72
  193. package/src/api/param.js +165 -165
  194. package/src/api/passwdAssest.js +101 -101
  195. package/src/api/route.js +171 -171
  196. package/src/api/template.js +27 -27
  197. package/src/i18n/index.js +26 -26
  198. package/src/i18n/language/en.js +1436 -1432
  199. package/src/i18n/language/index.js +25 -25
  200. package/src/i18n/language/zh.js +1435 -1431
  201. package/src/icons/demo.css +539 -539
  202. package/src/icons/demo_index.html +8146 -8146
  203. package/src/icons/iconfont.css +1399 -1399
  204. package/src/icons/iconfont.json +2431 -2431
  205. package/src/icons/index.js +20 -20
  206. package/src/icons/svg/azimuthlocking.svg +26 -26
  207. package/src/icons/svg/bendi.svg +110 -110
  208. package/src/icons/svg/bujin.svg +36 -36
  209. package/src/icons/svg/connectBlue.svg +7 -7
  210. package/src/icons/svg/currentvolume.svg +0 -0
  211. package/src/icons/svg/custom-BRTlane.svg +40 -40
  212. package/src/icons/svg/custom-buslane.svg +40 -40
  213. package/src/icons/svg/custom-detector.svg +12 -12
  214. package/src/icons/svg/custom-east-bottom.svg +32 -32
  215. package/src/icons/svg/custom-east-top.svg +32 -32
  216. package/src/icons/svg/custom-ewped.svg +35 -35
  217. package/src/icons/svg/custom-nonmotorizedlane.svg +40 -40
  218. package/src/icons/svg/custom-north-left.svg +32 -32
  219. package/src/icons/svg/custom-north-right.svg +32 -32
  220. package/src/icons/svg/custom-peddetector.svg +17 -17
  221. package/src/icons/svg/custom-snped.svg +35 -35
  222. package/src/icons/svg/custom-south-left.svg +32 -32
  223. package/src/icons/svg/custom-south-right.svg +32 -32
  224. package/src/icons/svg/custom-tramlane.svg +40 -40
  225. package/src/icons/svg/custom-vehiclebranch.svg +40 -40
  226. package/src/icons/svg/custom-vehiclemainroad.svg +41 -41
  227. package/src/icons/svg/custom-west-bottom.svg +32 -32
  228. package/src/icons/svg/custom-west-top.svg +32 -32
  229. package/src/icons/svg/custom-xlped.svg +14 -14
  230. package/src/icons/svg/custom-xrped.svg +14 -14
  231. package/src/icons/svg/cutRed.svg +7 -7
  232. package/src/icons/svg/cycle.svg +0 -0
  233. package/src/icons/svg/dingzhouqi.svg +34 -34
  234. package/src/icons/svg/fangxiangsuoding.svg +1 -0
  235. package/src/icons/svg/ganyingkongzhi.svg +30 -30
  236. package/src/icons/svg/guandeng.svg +81 -81
  237. package/src/icons/svg/huangshan.svg +71 -71
  238. package/src/icons/svg/jieduansuoding.svg +1 -0
  239. package/src/icons/svg/maincontrol.svg +0 -0
  240. package/src/icons/svg/manualcontrolbackground.svg +51 -51
  241. package/src/icons/svg/manualcontrolbackground1.svg +62 -62
  242. package/src/icons/svg/manualcontrolbackgrounden.svg +62 -62
  243. package/src/icons/svg/model.svg +0 -0
  244. package/src/icons/svg/phasediff.svg +0 -0
  245. package/src/icons/svg/prioritycontrol.svg +21 -21
  246. package/src/icons/svg/quanhong.svg +86 -86
  247. package/src/icons/svg/shanghe.svg +11 -11
  248. package/src/icons/svg/shoudong.svg +103 -103
  249. package/src/icons/svg/tentativeplan.svg +28 -28
  250. package/src/icons/svg/time.svg +0 -0
  251. package/src/icons/svg/wuxianlan.svg +46 -46
  252. package/src/icons/svg/xiala.svg +11 -11
  253. package/src/icons/svg/xiangweisuoding.svg +1 -0
  254. package/src/icons/svg/xingrenguojie.svg +33 -33
  255. package/src/icons/svg/xitong.svg +89 -89
  256. package/src/icons/svg/youxian.svg +41 -41
  257. package/src/icons/svg/zizhukongzhi.svg +43 -43
  258. package/src/kisscomps/components/BoardCard/BoardCard.vue +112 -112
  259. package/src/kisscomps/components/BoardCard/index.js +2 -2
  260. package/src/kisscomps/components/Channelization/Channelization.vue +584 -584
  261. package/src/kisscomps/components/Channelization/index.js +2 -2
  262. package/src/kisscomps/components/ChannelizationFlowStatistic/ChannelizationFlowStatistic.vue +360 -360
  263. package/src/kisscomps/components/ChannelizationFlowStatistic/index.js +2 -2
  264. package/src/kisscomps/components/ChannelizationWithInterface/ChannelizationWithInterface.vue +518 -518
  265. package/src/kisscomps/components/ChannelizationWithInterface/index.js +2 -2
  266. package/src/kisscomps/components/CommonKanban/CommonKanban.vue +132 -132
  267. package/src/kisscomps/components/CommonKanban/index.js +2 -2
  268. package/src/kisscomps/components/DirectionListConfiguration/DirectionListConfiguration.vue +454 -454
  269. package/src/kisscomps/components/DirectionListConfiguration/index.js +2 -2
  270. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-east-bottom.vue +41 -41
  271. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-east-top.vue +60 -60
  272. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-ewped.vue +105 -105
  273. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-north-left.vue +60 -60
  274. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-north-right.vue +60 -60
  275. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-snped.vue +105 -105
  276. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-south-left.vue +60 -60
  277. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-south-right.vue +60 -60
  278. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-west-bottom.vue +60 -60
  279. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-west-top.vue +60 -60
  280. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-xlped.vue +30 -30
  281. package/src/kisscomps/components/DirectionListConfiguration/svg/ped-xrped.vue +30 -30
  282. package/src/kisscomps/components/DirectionListConfiguration/svg/pedSvg.vue +78 -78
  283. package/src/kisscomps/components/DrawChannelization/drawsvg/basicCoordInfo.vue +181 -181
  284. package/src/kisscomps/components/DrawChannelization/drawsvg/channelizationElements.vue +255 -255
  285. package/src/kisscomps/components/DrawChannelization/drawsvg/detectorAssociatedComponent.vue +152 -152
  286. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/TextBox.vue +91 -91
  287. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/crossMap.vue +194 -194
  288. package/src/kisscomps/components/DrawChannelization/drawsvg/drawElement/editText.vue +108 -108
  289. package/src/kisscomps/components/DrawChannelization/drawsvg/firstImportCrossmap.vue +51 -51
  290. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/countdownSvg.vue +236 -236
  291. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorChart.vue +247 -247
  292. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/detectorIconSvg.vue +210 -210
  293. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/laneIcon.vue +72 -72
  294. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/motorwayIconSvg.vue +467 -467
  295. package/src/kisscomps/components/DrawChannelization/drawsvg/iconSvg/pedroadIconSvg.vue +230 -230
  296. package/src/kisscomps/components/DrawChannelization/drawsvg/importDialog.vue +74 -74
  297. package/src/kisscomps/components/DrawChannelization/drawsvg/index.draw.vue +1005 -1005
  298. package/src/kisscomps/components/DrawChannelization/drawsvg/index.vue +110 -110
  299. package/src/kisscomps/components/DrawChannelization/drawsvg/laneEditPanel.vue +707 -707
  300. package/src/kisscomps/components/DrawChannelization/drawsvg/overlapAssociatedComponent.vue +172 -172
  301. package/src/kisscomps/components/DrawChannelization/drawsvg/phaseAssociatedComponent.vue +172 -172
  302. package/src/kisscomps/components/DrawChannelization/drawsvg/table.vue +99 -99
  303. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/loadutils.js +87 -87
  304. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phaseDataModel.js +32 -32
  305. package/src/kisscomps/components/DrawChannelization/drawsvg/utils/phasePos.json +20 -20
  306. package/src/kisscomps/components/DrawChannelization/index.js +2 -2
  307. package/src/kisscomps/components/DrawChannelization/phaseDataMgr.js +278 -278
  308. package/src/kisscomps/components/ExpendConfig/ExpendConfig.vue +118 -118
  309. package/src/kisscomps/components/ExpendConfig/index.js +2 -2
  310. package/src/kisscomps/components/FaultDetailModal/FaultDetailModal.vue +178 -178
  311. package/src/kisscomps/components/FaultDetailModal/index.js +2 -2
  312. package/src/kisscomps/components/IntersectionDirectionSelection/IntersectionDirectionSelection.vue +127 -158
  313. package/src/kisscomps/components/IntersectionDirectionSelection/index.js +2 -2
  314. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/CrossRoadsSvg.vue +496 -496
  315. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/CustomRoadsSvg.vue +46 -46
  316. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionEWSvg.vue +300 -300
  317. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/PedSectionSNSvg.vue +288 -288
  318. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampEastSvg.vue +391 -391
  319. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampNorthSvg.vue +336 -336
  320. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampSouthSvg.vue +345 -345
  321. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/RampWestSvg.vue +389 -389
  322. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkClickSvg.vue +1272 -1272
  323. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/SidewalkSvg.vue +1190 -1190
  324. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeEastRoadsSvg.vue +402 -402
  325. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeNorthRoadsSvg.vue +361 -361
  326. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeSouthRoadsSvg.vue +368 -368
  327. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/TShapeWestRoadsSvg.vue +475 -475
  328. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LCrossRoadsSvg.vue +494 -494
  329. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeEastRoadsSvg.vue +401 -401
  330. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeNorthRoadsSvg.vue +360 -360
  331. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeSouthRoadsSvg.vue +367 -367
  332. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/leftroad/LTShapeWestRoadsSvg.vue +476 -476
  333. package/src/kisscomps/components/IntersectionMap/crossDirection/baseImg/refreshSvg.vue +63 -63
  334. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/busMapSvg.vue +50 -50
  335. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/eastBusSvg.vue +167 -167
  336. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/northBusSvg.vue +168 -168
  337. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/southBusSvg.vue +168 -168
  338. package/src/kisscomps/components/IntersectionMap/crossDirection/busIcon/westBusSvg.vue +169 -169
  339. package/src/kisscomps/components/IntersectionMap/crossDirection/crossDiagram.vue +1200 -1200
  340. package/src/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/LphaseIconSvg.vue +197 -197
  341. package/src/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/phaseIconSvg.vue +196 -196
  342. package/src/kisscomps/components/IntersectionMap/crossDirection/phaseIcon/rampPhaseIconSvg.vue +122 -122
  343. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.json +196 -196
  344. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/busPos.left.json +196 -196
  345. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.json +115 -115
  346. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/phasePos.left.json +115 -115
  347. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/rampPos.json +52 -52
  348. package/src/kisscomps/components/IntersectionMap/crossDirection/posJson/sidePos.json +219 -219
  349. package/src/kisscomps/components/IntersectionMap/crossDirection/utils.js +84 -84
  350. package/src/kisscomps/components/IntersectionMap/index.js +2 -2
  351. package/src/kisscomps/components/IntersectionMap/intersectionmap.vue +199 -199
  352. package/src/kisscomps/components/IntersectionWithInterface/IntersectionWithInterface.vue +530 -530
  353. package/src/kisscomps/components/IntersectionWithInterface/index.js +2 -2
  354. package/src/kisscomps/components/KanBan/index.js +2 -2
  355. package/src/kisscomps/components/KanBan/kanban.vue +225 -225
  356. package/src/kisscomps/components/MessageBox/index.vue +96 -96
  357. package/src/kisscomps/components/OverLap/OverLap.vue +235 -235
  358. package/src/kisscomps/components/OverLap/index.js +2 -2
  359. package/src/kisscomps/components/PatternOptimize/PatternOptimize.vue +272 -272
  360. package/src/kisscomps/components/PatternOptimize/index.js +2 -2
  361. package/src/kisscomps/components/PatternStatus/PatternStatus.vue +1481 -1478
  362. package/src/kisscomps/components/PatternStatus/index.js +2 -2
  363. package/src/kisscomps/components/PatternWalkSvg/PatternWalkSvg.vue +423 -423
  364. package/src/kisscomps/components/PatternWalkSvg/index.js +2 -2
  365. package/src/kisscomps/components/PhaseDirectionSelect/PhaseDirectionSelect.vue +126 -126
  366. package/src/kisscomps/components/PhaseDirectionSelect/index.js +2 -2
  367. package/src/kisscomps/components/PhaseDirectionText/PhaseDirectionText.vue +106 -106
  368. package/src/kisscomps/components/PhaseDirectionText/index.js +2 -2
  369. package/src/kisscomps/components/PhaseMarker/index.js +6 -6
  370. package/src/kisscomps/components/PhaseMarker/phasemarker.vue +215 -215
  371. package/src/kisscomps/components/PhaseMarker/svg/patternSvg.vue +121 -121
  372. package/src/kisscomps/components/PhaseMarker/svg/phase.vue +60 -60
  373. package/src/kisscomps/components/PhaseMarker/svg/phaseCount.vue +62 -62
  374. package/src/kisscomps/components/PhaseMarker/svg/phaseCountCycle.vue +62 -62
  375. package/src/kisscomps/components/PhaseMarker/svg/phaseSvg.vue +117 -117
  376. package/src/kisscomps/components/SchemeConfig/SchemeConfig.vue +988 -835
  377. package/src/kisscomps/components/SchemeConfig/azimuthlocking/index.vue +356 -313
  378. package/src/kisscomps/components/SchemeConfig/azimuthlocking/utils.js +92 -92
  379. package/src/kisscomps/components/SchemeConfig/closePhaselControlModal/index.vue +206 -195
  380. package/src/kisscomps/components/SchemeConfig/index.js +2 -2
  381. package/src/kisscomps/components/SchemeConfig/lockingPhaselControlModal/index.vue +208 -198
  382. package/src/kisscomps/components/SchemeConfig/manualControlModal/index.vue +235 -235
  383. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/controlModelGroup.vue +128 -0
  384. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/icon.vue +426 -0
  385. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/index.vue +820 -0
  386. package/src/kisscomps/components/SchemeConfig/manualControlModalNew/othersIcon.vue +194 -0
  387. package/src/kisscomps/components/SchemeConfig/priorityControl/index.vue +206 -197
  388. package/src/kisscomps/components/SchemeConfig/priorityControl/utils.js +163 -163
  389. package/src/kisscomps/components/SchemeConfig/realtimeStatusModal/index.vue +275 -275
  390. package/src/kisscomps/components/SchemeConfig/tentativeplancontrolmodal/index.vue +1196 -1194
  391. package/src/kisscomps/components/SelectCrossPhase/index.vue +417 -417
  392. package/src/kisscomps/components/SelectCrossPhase/utils.js +142 -142
  393. package/src/kisscomps/components/StageBord/StageBord.vue +287 -287
  394. package/src/kisscomps/components/StageBord/index.js +2 -2
  395. package/src/kisscomps/components/StageStatus/StageStatus.vue +341 -341
  396. package/src/kisscomps/components/StageStatus/index.js +2 -2
  397. package/src/kisscomps/components/Stages/index.vue +252 -211
  398. package/src/kisscomps/components/SvgIcon/SvgIcon.vue +53 -53
  399. package/src/kisscomps/components/SvgIcon/index.js +2 -2
  400. package/src/kisscomps/components/XRDDirSelector/XRDDirSelector.vue +1067 -1065
  401. package/src/kisscomps/components/XRDDirSelector/index.js +2 -2
  402. package/src/kisscomps/components/XiaoKanban/DirSelector.vue +356 -356
  403. package/src/kisscomps/components/XiaoKanban/index.vue +102 -102
  404. package/src/kisscomps/components/overView/index.vue +699 -699
  405. package/src/kisscomps/components/patternConfig/index.js +2 -2
  406. package/src/kisscomps/components/patternConfig/index.vue +1126 -1126
  407. package/src/kisscomps/components/patternConfig/pattern/patternTable.vue +348 -408
  408. package/src/kisscomps/components/patternConfig/pattern/planChart/model/coordinationModel.js +665 -665
  409. package/src/kisscomps/components/patternConfig/planContent.vue +573 -576
  410. package/src/kisscomps/components/patternConfig/planMenu.vue +329 -329
  411. package/src/kisscomps/components/patternConfig/utils.js +152 -152
  412. package/src/kisscomps/components/patternList/index.js +2 -2
  413. package/src/kisscomps/components/patternList/patternList.vue +585 -585
  414. package/src/kisscomps/index.js +123 -123
  415. package/src/lib/publicjs/ArryListUtil.js +38 -38
  416. package/src/lib/publicjs/HttpurlMgr.js +45 -45
  417. package/src/lib/publicjs/KissApi.js +158 -158
  418. package/src/lib/publicjs/KissWSSub/Heartcheck.js +128 -128
  419. package/src/lib/publicjs/KissWSSub/KissWsSub.js +91 -91
  420. package/src/lib/publicjs/KissWSSub/KissWsSubByType.js +152 -152
  421. package/src/lib/publicjs/KissWSSub/SimuWsSubByType.js +44 -44
  422. package/src/lib/publicjs/KissWSSub/Sub.js +51 -51
  423. package/src/lib/publicjs/KissWSSub/SubChannel.js +119 -119
  424. package/src/lib/publicjs/basecomponents.js +65 -65
  425. package/src/lib/publicjs/localStorage.js +112 -112
  426. package/src/lib/publicjs/objdeepcopy.js +32 -32
  427. package/src/lib/publicjs/pageScroll.js +30 -30
  428. package/src/lib/publicjs/passwdAssest.js +101 -101
  429. package/src/lib/publicjs/styleclassfactory.js +32 -32
  430. package/src/main.js +50 -50
  431. package/src/node_modules/.package_versions.json +1 -0
  432. package/src/router/index.js +63 -63
  433. package/src/store/getters.js +16 -16
  434. package/src/store/index.js +26 -26
  435. package/src/store/modules/globalParam.js +67 -67
  436. package/src/utils/ControlFormat.js +68 -68
  437. package/src/utils/RingDataModel.js +251 -251
  438. package/src/utils/auth.js +199 -199
  439. package/src/utils/conflct.js +250 -250
  440. package/src/utils/conflictList.js +87 -87
  441. package/src/utils/dateFormat.js +41 -41
  442. package/src/utils/errorcode.js +228 -228
  443. package/src/utils/fault.js +196 -196
  444. package/src/utils/faultcode.js +209 -209
  445. package/src/utils/index.js +69 -69
  446. package/src/utils/pedphasedesc.js +119 -119
  447. package/src/utils/phaseList.js +203 -203
  448. package/src/utils/phasedesc.js +144 -144
  449. package/src/utils/responseMessage.js +21 -21
  450. package/src/utils/validate.js +43 -43
  451. package/src/views/customchannelization.vue +49 -49
  452. package/src/views/home.1.vue +479 -479
  453. package/src/views/home.vue +93 -93
  454. package/src/views/intersection.vue +359 -365
  455. package/src/views/intersection2.vue +328 -328
  456. package/src/views/overView.vue +41 -41
  457. package/src/views/patternConfig.vue +1572 -609
  458. package/src/views/schemeconfig.vue +173 -204
  459. package/static/apiconfig.json +451 -451
  460. package/static/styles/channelizatioon.scss +433 -433
  461. package/static/styles/common.scss +23 -23
  462. package/static/styles/commonkanban.scss +100 -100
  463. package/static/styles/dark/index.scss +2 -2
  464. package/static/styles/dark/theme/element-dark.scss +42 -42
  465. package/static/styles/index.scss +84 -84
  466. package/static/styles/intersection.scss +190 -190
  467. package/static/styles/light/index.scss +2 -2
  468. package/static/styles/light/theme/element-light.scss +42 -42
  469. package/static/styles/overview.scss +146 -146
  470. package/static/styles/patternConfig.scss +56 -56
  471. package/static/styles/schemeconfig.scss +513 -501
  472. package/static/styles/stages.scss +57 -64
  473. package/static/styles/uiComponents.scss +57 -57
  474. package/static/styles/xiaokanban.scss +50 -50
  475. package/static/token.json +2 -2
  476. package/test/e2e/custom-assertions/elementCount.js +27 -27
  477. package/test/e2e/nightwatch.conf.js +46 -46
  478. package/test/e2e/runner.js +48 -48
  479. package/test/e2e/specs/test.js +19 -19
  480. package/test/unit/.eslintrc +7 -7
  481. package/test/unit/jest.conf.js +30 -30
  482. package/test/unit/setup.js +3 -3
  483. package/test/unit/specs/HelloWorld.spec.js +11 -11
  484. package/package/kissui.js +0 -216608
@@ -1,1194 +1,1196 @@
1
- <template>
2
- <div class="tentativeplan-control">
3
- <div class="title" style="margin-bottom: 18px">
4
- {{ $t('openatccomponents.overview.tentativeplan') }}
5
- </div>
6
- <el-row>
7
- <el-col :span="12">
8
- <el-form
9
- ref="manual"
10
- label-position="left"
11
- :model="manualInfo"
12
- label-width="100px"
13
- >
14
- <el-form-item
15
- :label="$t('openatccomponents.overview.patternid') + ':'"
16
- prop="count"
17
- >
18
- <el-select
19
- @change="selectPattern()"
20
- v-model="manualInfo.tempPatternid"
21
- class="col-inner"
22
- size="small"
23
- :placeholder="$t('openatccomponents.common.select')"
24
- >
25
- <el-option
26
- v-for="item in patternSelect"
27
- :key="item.value"
28
- :label="item.label"
29
- :value="item.value"
30
- >
31
- </el-option>
32
- </el-select>
33
- <!-- <el-input v-model="manualInfo.tempDuration" size="mini" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
34
- </el-form-item>
35
- <el-form-item
36
- :label="$t('openatccomponents.overview.delay') + ':'"
37
- prop="intersection"
38
- >
39
- <el-input-number
40
- :placeholder="$t('openatccomponents.common.input')"
41
- :min="0"
42
- :max="65535"
43
- :precision="0"
44
- :step="1"
45
- :controls="false"
46
- v-model.number="manualInfo.tempDelay"
47
- size="mini"
48
- ></el-input-number>
49
- <!-- <el-input v-model="manualInfo.tempDelay" size="mini" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
50
- </el-form-item>
51
- </el-form>
52
- </el-col>
53
- <el-col :span="12">
54
- <el-form
55
- ref="manual"
56
- label-position="left"
57
- :model="manualInfo"
58
- label-width="100px"
59
- >
60
- <el-form-item
61
- :label="$t('openatccomponents.overview.patternoffset') + ':'"
62
- prop="count"
63
- >
64
- <el-input-number
65
- :placeholder="$t('openatccomponents.common.input')"
66
- :min="0"
67
- :max="65535"
68
- :precision="0"
69
- :step="1"
70
- :controls="false"
71
- v-model.number="manualInfo.offset"
72
- size="mini"
73
- ></el-input-number>
74
- <!-- <el-input v-model="manualInfo.offset" size="mini" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
75
- </el-form-item>
76
- <el-form-item
77
- :label="$t('openatccomponents.overview.duration') + ':'"
78
- prop="intersection"
79
- >
80
- <el-input-number
81
- :placeholder="$t('openatccomponents.common.input')"
82
- :min="0"
83
- :max="65535"
84
- :precision="0"
85
- :step="1"
86
- :controls="false"
87
- v-model.number="manualInfo.duration"
88
- size="mini"
89
- ></el-input-number>
90
- <!-- <el-input v-model="manualInfo.duration" size="mini" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
91
- </el-form-item>
92
- </el-form>
93
- </el-col>
94
- </el-row>
95
- <el-row>
96
- <el-radio v-model="isRing" :label="false" @change="changeRing">{{
97
- $t('openatccomponents.common.ringStyle')
98
- }}</el-radio>
99
- <el-radio v-model="isRing" :label="true" @change="changeStage">{{
100
- $t('openatccomponents.common.stageStyle')
101
- }}</el-radio>
102
- <!-- <div class="title" style="margin-top:18px; margin-bottom:10px">{{$t('openatccomponents.overview.patternstate')}}:
103
- <span>({{$t('openatccomponents.overview.cycle')}}: {{cycle}} {{$t('openatccomponents.overview.patternoffset')}}: {{offset}})</span>
104
- </div> -->
105
- <!-- <stage-status
106
- :patternStatusList="patternOne.length===0?planPattern.rings:patternOne[0].rings"
107
- >
108
- </stage-status> -->
109
- <pattern-list
110
- :key="keyChange"
111
- :allPatternList="allPatternList"
112
- :contrloType="contrloType"
113
- :stagesChange="
114
- patternOne.length === 0
115
- ? planPattern.stagesList
116
- : patternOne[0].stagesList
117
- "
118
- :patternList="patternOne.length === 0 ? planPattern.rings : patternOne"
119
- :patternStatusList="
120
- patternOne.length === 0 ? planPattern.rings : patternOne[0].rings
121
- "
122
- :cycles="
123
- patternOne.length === 0 ? planPattern.cycle : patternOne[0].cycle
124
- "
125
- :phaseList="phaseList"
126
- >
127
- </pattern-list>
128
- </el-row>
129
- <el-row>
130
- <el-tabs v-model="activeTab" type="card">
131
- <el-tab-pane
132
- v-if="!isRing"
133
- :label="$t('openatccomponents.pattern.ringConfig')"
134
- name="kanban"
135
- >
136
- <div style="width: 100%; overflow: hidden; margin-top: 20px">
137
- <kan-ban
138
- v-for="n in ringCount"
139
- :key="n"
140
- class="closephasekanban"
141
- :index="n"
142
- :options="options"
143
- :list="
144
- patternOne.length === 0
145
- ? planPattern.rings[n - 1]
146
- : patternOne[0].rings[n - 1]
147
- "
148
- :phaseList="phaseList"
149
- :header-text="$t('openatccomponents.pattern.ring') + n"
150
- @handleSplit="handleSplit"
151
- >
152
- </kan-ban>
153
- </div>
154
- </el-tab-pane>
155
- <!-- <el-tab-pane v-if="isRing" :label="$t('openatccomponents.pattern.stageConfig')" name="kanban">
156
- <div class="stage-panel-contener">
157
- <StageKanban
158
- v-for="(stage, index) in scope.row.stagesList"
159
- class="kanban todo"
160
- :key="index"
161
- :stage="stage"
162
- :stageInfo="scope.row.stagesList"
163
- :isRing="isRing"
164
- :options="scope.row.options"
165
- :coordphaseOption="coordphaseOption"
166
- :rowIndex="scope.$index"
167
- :subIndex="index"
168
- @onStageSplitChange="onStageSplitChange"
169
- @stageSplitChange="stageSplitChange"
170
- @onStageDelaystartChange="onStageDelaystartChange"
171
- @onStageAdvanceendChange="onStageAdvanceendChange"
172
- />
173
- <div v-if="isRing" style="margin-left: 20px">
174
- <el-button
175
- type="primary"
176
- @click="addStage(scope.row.stagesList)"
177
- icon="el-icon-plus"
178
- circle
179
- ></el-button>
180
- </div>
181
- </div>
182
- </el-tab-pane> -->
183
- <el-tab-pane
184
- v-if="isRing"
185
- :label="$t('openatccomponents.pattern.stageConfig')"
186
- name="ring"
187
- >
188
- <div class="stage-panel-contener">
189
- <stage-bord
190
- v-for="(stage, index) in patternOne.length === 0
191
- ? planPattern.stagesList
192
- : patternOne[0].stagesList"
193
- class="kanban todo"
194
- :key="index"
195
- :stage="stage"
196
- :options="options"
197
- :isRing="isRing"
198
- :stageInfo="
199
- patternOne.length === 0
200
- ? planPattern.stagesList
201
- : patternOne[0].stagesList
202
- "
203
- :coordphaseOption="coordphaseOption"
204
- :subIndex="index"
205
- @onStageSplitChange="onStageSplitChange"
206
- @stageSplitChange="stageSplitChange"
207
- @onStageDelaystartChange="onStageDelaystartChange"
208
- @onStageAdvanceendChange="onStageAdvanceendChange"
209
- >
210
- </stage-bord>
211
- <div v-if="isRing" style="margin-left: 10px">
212
- <el-button
213
- type="primary"
214
- @click="
215
- addStage(
216
- patternOne.length === 0
217
- ? planPattern.stagesList
218
- : patternOne[0].stagesList
219
- )
220
- "
221
- icon="el-icon-plus"
222
- circle
223
- ></el-button>
224
- </div>
225
- </div>
226
- </el-tab-pane>
227
- <el-tab-pane
228
- v-if="!isRing"
229
- :label="$t('openatccomponents.pattern.parameters')"
230
- name="parame"
231
- >
232
- <el-row>
233
- <expend-config
234
- v-for="(j, index) in ringCounts"
235
- :key="index"
236
- class="expendkanban"
237
- :options="options"
238
- :header-text="$t('openatccomponents.pattern.ring') + j"
239
- :list="
240
- patternOne.length === 0
241
- ? planPattern.rings[j - 1]
242
- : patternOne[0].rings[j - 1]
243
- "
244
- >
245
- </expend-config>
246
- <div class="forbiddenstage">
247
- {{ $t('openatccomponents.pattern.forbiddenstage') }}
248
- <el-input
249
- class="stage-value"
250
- size="small"
251
- v-model="forbiddenstage"
252
- ></el-input>
253
- </div>
254
- <div class="forbiddenstage">
255
- {{ $t('openatccomponents.pattern.screenstage') }}
256
- <el-input
257
- class="stage-value"
258
- size="small"
259
- v-model="screenstage"
260
- ></el-input>
261
- </div>
262
- <div class="forbiddenstage">
263
- {{ $t('openatccomponents.pattern.coordinatestage') }}
264
- <el-input
265
- class="stage-value"
266
- size="small"
267
- v-model="coordinatestage"
268
- ></el-input>
269
- </div>
270
- </el-row>
271
- </el-tab-pane>
272
- <el-tab-pane
273
- v-if="!isRing"
274
- :label="$t('openatccomponents.pattern.overLap')"
275
- name="overlap"
276
- >
277
- <el-row :gutter="20">
278
- <el-col :span="24">
279
- <over-lap
280
- :stageList="stagesList"
281
- :overlap="overlap"
282
- :checked="true"
283
- :tentative="true"
284
- :cycleChange="false"
285
- :cycle="overLapCycle"
286
- >
287
- </over-lap>
288
- </el-col>
289
- </el-row>
290
- </el-tab-pane>
291
- <el-tab-pane
292
- v-if="!isRing"
293
- :label="$t('openatccomponents.pattern.patternOptimize')"
294
- name="patternOptimize"
295
- >
296
- <pattern-optimize
297
- v-for="n in optimizes"
298
- :key="n"
299
- class="expendkanban"
300
- :list="
301
- patternOne.length === 0
302
- ? planPattern.rings[n - 1]
303
- : patternOne[0].rings[n - 1]
304
- "
305
- :rings="patternOne.length === 0 ? planPattern : patternOne[0]"
306
- :phaseList="phaseList"
307
- :options="options"
308
- :header-text="$t('openatccomponents.pattern.ring') + n"
309
- :index="n"
310
- :nowNumber="n"
311
- @handleSplit="handleSplit"
312
- >
313
- </pattern-optimize>
314
- </el-tab-pane>
315
- </el-tabs>
316
- </el-row>
317
- <div class="footer" v-if="realtimeStatusModalvisible">
318
- <el-button @click="handleClose()">{{
319
- $t('openatccomponents.button.Back')
320
- }}</el-button>
321
- <el-button type="primary" @click="handleManualControl()">{{
322
- $t('openatccomponents.overview.implement')
323
- }}</el-button>
324
- </div>
325
- <div class="footer" v-if="!realtimeStatusModalvisible">
326
- <el-button @click="handleClose()">{{
327
- $t('openatccomponents.button.Back')
328
- }}</el-button>
329
- <el-button type="primary" @click="handleManualControl()">{{
330
- $t('openatccomponents.overview.comfirm')
331
- }}</el-button>
332
- </div>
333
- </div>
334
- </template>
335
-
336
- <script>
337
- export default {
338
- name: 'tentativeplancontrol',
339
- props: {
340
- realtimeStatusModalvisible: {
341
- type: Boolean,
342
- default: true
343
- },
344
- controlData: {
345
- type: Object
346
- },
347
- phaseList: {
348
- type: Array
349
- },
350
- overlap: {
351
- type: Array
352
- },
353
- allPatternList: {
354
- type: Array
355
- },
356
- patternSelect: {
357
- type: Array
358
- }
359
- },
360
- watch: {
361
- isRing (newVal) {
362
- this.activeTab = newVal ? 'ring' : 'kanban'
363
- }
364
- },
365
- computed: {
366
- computedActiveTab () {
367
- return this.isRing ? 'ring' : 'kanban'
368
- },
369
- rings () {
370
- return this.patternOne.length === 0 ? this.planPattern.rings : this.patternOne[0].rings
371
- },
372
- cycle () {
373
- return this.patternOne.length === 0 ? this.max : (this.patternOne.length > 0 && (this.patternOne[0].cycle < this.max)) ? this.max : this.patternOne[0].cycle
374
- },
375
- offset () {
376
- return Number((this.patternOne.length === 0 || this.manualInfo.offset > 0) ? this.manualInfo.offset : this.patternOne[0].offset)
377
- },
378
- forbiddenstage () {
379
- return this.patternOne.length === 0 ? this.allPatternList[0].forbiddenstage : this.patternOne[0].forbiddenstage
380
- },
381
- screenstage () {
382
- return this.patternOne.length === 0 ? this.allPatternList[0].screenstage : this.patternOne[0].screenstage
383
- },
384
- coordinatestage () {
385
- return this.patternOne.length === 0 ? this.allPatternList[0].coordinatestage : this.patternOne[0].coordinatestage
386
- }
387
- },
388
- data () {
389
- return {
390
- stagesList: [],
391
- phaseRings: [],
392
- keyChange: false,
393
- overLapCycle: 0,
394
- options: {
395
- group: 'pattern'
396
- },
397
- max: '',
398
- contrloType: '',
399
- patternCycleEqual: true,
400
- // activeList: 'ring',
401
- activeTab: 'kanban',
402
- isRing: false,
403
- // isChange: false,
404
- ringCount: 1,
405
- ringCounts: 1,
406
- barriers: [],
407
- optimizes: 1,
408
- coordphaseOption: [],
409
- patternOne: [],
410
- planPattern: {},
411
- manualInfo: {
412
- tempPatternid: '',
413
- offset: 0,
414
- duration: 300,
415
- tempDelay: 0 // 控制方式手动操作的情况下的延迟时间的临时值。
416
- // tempDuration: 300 // 控制方式手动操作的情况下的持续时间的临时值。
417
- }
418
- }
419
- },
420
- created () {
421
- this.patternPlan()
422
- this.getCycle()
423
- if (this.patternOne.length === 0) {
424
- this.handleStageData(this.planPattern.rings)
425
- }
426
- this.initData()
427
- if (!this.allPatternList[0].contrloType && this.allPatternList[0].rings.length > 0) {
428
- this.contrloType = 'ring'
429
- } else if (!this.allPatternList[0].contrloType && this.allPatternList[0].rings.length === 0) {
430
- this.contrloType = 'stage'
431
- } else {
432
- this.contrloType = this.allPatternList[0].contrloType
433
- }
434
- for (let i = 0; i < this.allPatternList.length; i++) {
435
- if (this.allPatternList[i].contrloType === 'stage' || (this.isRing && !this.allPatternList[i].contrloType)) {
436
- this.isRing = true
437
- // this.setStageList(this.allPatternList[i].stagesList, this.allPatternList[i].id)
438
- } else if (this.allPatternList[i].contrloType === 'ring' || (!this.isRing && !this.allPatternList[i].contrloType && this.allPatternList[i].rings.length > 0)) {
439
- this.isRing = false
440
- // this.handleStageData(this.allPatternList[i].rings)
441
- } else if (this.allPatternList[i].rings.length === 0 && this.allPatternList[i].stagesList.length > 0) {
442
- this.isRing = true
443
- // this.setStageList(this.allPatternList[i].stagesList, this.allPatternList[i].id)
444
- }
445
- }
446
- },
447
- methods: {
448
- addStage (row) {
449
- // this.isChange = false
450
- if (row.length > 15) {
451
- this.$message.error(
452
- this.$t('edge.pattern.mostlist')
453
- )
454
- return
455
- }
456
- if (this.patternOne.length !== 0) {
457
- this.patternOne[0].stagesList.push({
458
- key: row.length,
459
- green: 25,
460
- yellow: 3,
461
- red: 2,
462
- phases: [],
463
- stageSplit: 30
464
- })
465
- } else {
466
- this.planPattern.stagesList.push({
467
- key: row.length,
468
- green: 25,
469
- yellow: 3,
470
- red: 2,
471
- phases: [],
472
- stageSplit: 30
473
- })
474
- }
475
- },
476
- changeRing () {
477
- this.contrloType = 'ring'
478
- this.isRing = false
479
- // const globalParamModel = this.$store.getters.globalParamModel
480
- // let pattern = globalParamModel.getParamsByType('patternList')
481
- // let pattern = this.allPatternList
482
- this.getCycle()
483
- this.patternOne = this.allPatternList.filter(item => {
484
- return item.id === Number(this.manualInfo.tempPatternid)
485
- })
486
- // if (this.isChange) {
487
- // for (let i = 0; i < pattern.length; i++) {
488
- this.handleStageData(this.patternOne.rings)
489
- // }
490
- // } else {
491
- // for (let i = 0; i < pattern.length; i++) {
492
- // this.setStageList(pattern[i].stagesList, pattern[i].id)
493
- // }
494
- // }
495
- },
496
- changeStage () {
497
- this.contrloType = 'stage'
498
- this.isRing = true
499
- // this.patternOne = this.allPatternList.filter(item => {
500
- // return item.id === Number(this.manualInfo.tempPatternid)
501
- // })
502
- // this.getStageCycle()
503
- },
504
- getStageCycle () {
505
- // this.patternOne.length === 0 ? this.allPatternList this.patternOne
506
- if (this.patternOne.length === 0) {
507
- // this.setStageList(this.planPattern.stagesList, this.planPattern.id)
508
- // this.planPattern.stagesList = []
509
- } else {
510
- // this.patternOne = this.allPatternList.filter(item => {
511
- // return item.id === Number(this.manualInfo.tempPatternid)
512
- // })
513
- // this.setStageList(this.patternOne[0].stagesList, this.patternOne[0].id)
514
- }
515
- },
516
- setStageList (stageChange, id) {
517
- // let patternList = this.globalParamModel.getParamsByType('patternList')
518
- // let patternList = this.allPatternList
519
- let stagesList = []
520
- for (let i = 0; i < stageChange.length; i++) {
521
- let stage = JSON.parse(JSON.stringify(stageChange[i]))
522
- let stageItem = this.getStageItems(stage.phases, i, stageChange)
523
- stagesList.push(JSON.parse(JSON.stringify(stageItem)))
524
- }
525
- (this.patternOne.length === 0 ? this.planPattern : this.patternOne).map(item => { // 添加特征参数stage
526
- if (item.id === id) {
527
- if (this.isRing) {
528
- item.contrloType = 'stage'
529
- } else {
530
- item.contrloType = 'ring'
531
- }
532
- item.stagesList = JSON.parse(JSON.stringify(stagesList.filter(item => item.stageSplit)))
533
- }
534
- })
535
- this.stagesList = stagesList.filter(item => item.stageSplit)
536
- },
537
- getStageItems (stageArr, i, stageChange) {
538
- let res = {
539
- key: i,
540
- split: this.narr[i], // 阶段绿性比
541
- phases: stageArr,
542
- delaystart: 0,
543
- advanceend: 0
544
- }
545
- for (let rings of stageChange) {
546
- if (i === rings.key) {
547
- res.green = rings.green ? rings.green : rings.green === 0 ? 0 : 25
548
- res.yellow = rings.yellow ? rings.yellow : rings.yellow === 0 ? 0 : 3
549
- res.red = rings.red ? rings.red : rings.red === 0 ? 0 : 2
550
- res.phases = rings.phases ? rings.phases : stageArr
551
- // res.stageSplit = rings.split ? rings.split : 30
552
- if (rings.split) {
553
- res.stageSplit = rings.split
554
- } else if (rings.stageSplit) {
555
- res.stageSplit = rings.stageSplit
556
- } else {
557
- res.stageSplit = 0
558
- }
559
- }
560
- }
561
- return res
562
- },
563
- tranform (arr) { // 分barrier
564
- let newMap = new Map()
565
- arr.forEach(({ id, current }) => {
566
- const find = newMap.get(current.join())
567
- if (find) newMap.get(current.join()).push(id)
568
- else newMap.set(current.join(), [id])
569
- })
570
- let ret = []
571
- newMap.forEach((value, key) => {
572
- ret.push(Array.from(new Set(key.split(',').map(Number).concat(value))))
573
- })
574
- const result = []
575
- for (const a of ret) {
576
- let merged = false
577
- for (const r of result) {
578
- if (this.check([...r], a)) {
579
- a.forEach(item => r.add(item))
580
- merged = true
581
- }
582
- }
583
- if (!merged) {
584
- result.push(new Set(a))
585
- }
586
- merged = false
587
- }
588
- return result.map(s => [...s])
589
- },
590
- check (arr1, arr2) {
591
- return arr1.some(a1 => arr2.some(a2 => a1 === a2))
592
- },
593
- handleCurrentChange (val) { // 两个ring的数据
594
- if (val === null || val.length === 0) return
595
- // 按环序分组
596
- let ringlength = []
597
- let ringsequence = val.map(item => {
598
- if (item.length === 0) return
599
- ringlength.push(item.length)
600
- return item.map(k => {
601
- return k.id
602
- })
603
- })
604
- let newRings = ringsequence.filter(item => item)
605
- let minLength = Math.min(...ringlength)
606
- let resultArrs = [] // 环1分组
607
- let resultArr = [] // 环2分组
608
- for (let j = 0; j < ringsequence[0].length; j += minLength) {
609
- resultArrs.push(ringsequence[0].slice(j, j + minLength))
610
- if (ringsequence[0].length === minLength) {
611
- resultArrs.push([])
612
- }
613
- }
614
- if (newRings.length > 1) {
615
- for (let i = 0; i < ringsequence[1].length; i += minLength) {
616
- resultArr.push(ringsequence[1].slice(i, i + minLength))
617
- }
618
- }
619
- // this.patternInfo = []
620
- // this.barrierList = []
621
- let currentArr = []
622
- let newPattern = []
623
- val.map(i => {
624
- newPattern.push(...i)
625
- })
626
- if (this.phaseList.length === 0) return
627
- for (let patternStatus of val[0]) {
628
- // if (patternStatus.mode !== 7) {
629
- let concurrent = this.phaseList.filter((item) => {
630
- return item.id === patternStatus.id // patternStatus.id当前相位id concurrent当前相位的并发相位
631
- })[0].concurrent// 当前相位的并发相位
632
- if (concurrent) {
633
- let obj = {
634
- id: patternStatus.id,
635
- current: concurrent.sort()
636
- }
637
- currentArr.push(obj)
638
- }
639
- // }
640
- }
641
- if (currentArr.length !== 0) {
642
- let newCurrent = this.tranform(currentArr)
643
- // 取没个环与环关系的并集
644
- let barrierRing1 = []
645
- let barrierRing2 = []
646
- let ring1 = [] // 环1与关系1的并集
647
- for (let h = 0; h < newCurrent.length; h++) {
648
- let adds = [...new Set(resultArrs[0])].filter(item => newCurrent[h].includes(item))
649
- ring1.push(adds)
650
- }
651
- let ring1s = [] // 环1与关系2的并集
652
- for (let h = 0; h < newCurrent.length; h++) {
653
- let addRing1 = [...new Set(resultArrs[1])].filter(item => newCurrent[h].includes(item))
654
- ring1s.push(addRing1)
655
- }
656
- barrierRing1.push(...ring1, ...ring1s)
657
- let resultList = []
658
- if (newRings.length > 1) {
659
- let ring2s = [] // 环2与关系1的并集
660
- for (let h = 0; h < newCurrent.length; h++) {
661
- let addRing2 = [...new Set(resultArr[1])].filter(item => newCurrent[h].includes(item))
662
- ring2s.push(addRing2)
663
- }
664
- let ring2 = [] // 环2与关系1的并集
665
- for (let h = 0; h < newCurrent.length; h++) {
666
- let add = [...new Set(resultArr[0])].filter(item => newCurrent[h].includes(item))
667
- ring2.push(add)
668
- }
669
- barrierRing2.push(...ring2, ...ring2s)
670
- for (let k = 0; k < barrierRing1.length; k++) {
671
- resultList.push(barrierRing1[k].concat(barrierRing2[k]))
672
- }
673
- }
674
- let resultLists = resultList.filter(item => item.length !== 0)
675
- let ringArr = []
676
- for (let l = 0; l < resultLists.length; l++) {
677
- for (let d = 0; d < newCurrent.length; d++) {
678
- if (newCurrent[d].filter(item => resultLists[l].includes(item)).length > 0) {
679
- ringArr.push({
680
- data: resultLists[l],
681
- id: d + 1,
682
- index: l
683
- })
684
- }
685
- }
686
- }
687
- for (var i = 0; i < ringArr.length; i++) {
688
- for (var j = i + 1; j < ringArr.length; j++) {
689
- if (ringArr[i].id === ringArr[j].id && ringArr[i].index + 1 === ringArr[j].index) {
690
- ringArr[i].data = ringArr[i].data.concat(ringArr[j].data)
691
- ringArr.splice(ringArr.indexOf(ringArr[j].id), 1)
692
- }
693
- }
694
- }
695
- let resArr = ringArr.map(item => item.data)
696
- let ringTeam = this.step1(this.phaseList, resArr)
697
- let ringTeams = ringTeam.filter(item => item.length !== 0)
698
- return this.setBarrier(ringTeams, val)
699
- }
700
- },
701
- setBarrier (ringTeam, val) {
702
- const patternObjs = {}
703
- val.forEach(l => {
704
- l.map(k => {
705
- patternObjs[k.id] = k.value
706
- })
707
- })
708
- let ret = ringTeam.map((y, index) => {
709
- if (!y || y.length === 0) return
710
- y.map(n => {
711
- n.length = n.data.length > 1 ? n.data.reduce((pre, cur) => pre + patternObjs[cur], 0) : patternObjs[n.data[0]]
712
- })
713
- return {
714
- barrier: index + 1,
715
- length: y[0].length,
716
- items: y.map(j => {
717
- return {
718
- ring: j.ring,
719
- data: j.data
720
- }
721
- })
722
- }
723
- })
724
- return ret
725
- },
726
- step1 (list, arr) { // 各个环包含的相位
727
- const ret = []
728
- const listObj = {}
729
- list.forEach(l => {
730
- listObj[l.id] = l.ring
731
- })
732
- arr.forEach(a => {
733
- const retItem = []
734
- a.forEach(b => {
735
- if (listObj[b]) {
736
- const find = retItem.find(r => r.ring === listObj[b])
737
- if (find) find.data.push(b)
738
- else retItem.push({ ring: listObj[b], data: [b] })
739
- }
740
- })
741
- ret.push(retItem)
742
- })
743
- return ret
744
- },
745
- patternPlan () {
746
- let Pattern = {
747
- offset: 0,
748
- cycle: 0,
749
- stagesList: [],
750
- rings: [[], [], [], []]
751
- }
752
- var newPattern = JSON.parse(JSON.stringify(Pattern))
753
- for (let phase of this.phaseList) {
754
- let ring = {}
755
- ring.name = 'Phase ' + phase.id
756
- ring.desc = this.getPhaseDescription(phase.direction)
757
- ring.id = phase.id
758
- ring.value = 30
759
- ring.mode = 2
760
- ring.options = []
761
- ring.delaystart = 0
762
- ring.advanceend = 0
763
- if (phase.ring === 1) {
764
- newPattern.rings[0].push(ring)
765
- } else if (phase.ring === 2) {
766
- newPattern.rings[1].push(ring)
767
- } else if (phase.ring === 3) {
768
- newPattern.rings[2].push(ring)
769
- } else if (phase.ring === 4) {
770
- newPattern.rings[3].push(ring)
771
- }
772
- }
773
- let barrier = this.handleCurrentChange(newPattern.rings)
774
- newPattern.barriers = barrier
775
- this.planPattern = newPattern
776
- },
777
- getCycle () {
778
- for (let rings of this.planPattern.rings) {
779
- let num = 0
780
- for (let i = 0; i < rings.length; i++) {
781
- if (rings[i].length !== 0) {
782
- if (rings[i].mode === 7) { // 忽略相位不计周期
783
- continue
784
- }
785
- num = num + Number(rings[i].value)
786
- }
787
- }
788
- if (num !== 0) {
789
- this.planPattern.cycle = num
790
- break
791
- }
792
- }
793
- },
794
- getCycles () {
795
- if (!this.patternOne[0].stages) return
796
- let stages = this.patternOne[0].stages
797
- let modeId = stages.filter(item => item.length === 1)[0]
798
- for (let rings of this.patternOne[0].rings) {
799
- let num = 0
800
- for (let i = 0; i < rings.length; i++) {
801
- if (rings[i].length !== 0) {
802
- if (rings[i].mode === 7 && (modeId && modeId[0] === rings[i].id)) { // 忽略相位不计周期
803
- continue
804
- }
805
- num = num + Number(rings[i].value)
806
- }
807
- }
808
- if (num !== 0) {
809
- this.patternOne[0].cycle = num
810
- break
811
- }
812
- }
813
- },
814
- getPhaseDescription (phaseList) {
815
- if (!phaseList) return
816
- let list = []
817
- for (let id of phaseList) {
818
- let obj = {}
819
- obj.id = id
820
- obj.color = '#454545'
821
- list.push(obj)
822
- }
823
- return list
824
- },
825
- handleClose () {
826
- this.$emit('closePhaseBack')
827
- },
828
- onStageSplitChange (diff, rowIndex, subIndex) {
829
- let stageArr = this.stagesList[subIndex].stages
830
- let row = this.patternList[rowIndex]
831
- let ringsList = row.rings
832
- for (let rings of ringsList) {
833
- for (let ring of rings) {
834
- if (stageArr.includes(ring.id)) {
835
- ring.value = (ring.value ? ring.value : 0) + diff
836
- continue
837
- }
838
- }
839
- }
840
- },
841
- stageSplitChange (diff, rowIndex, subIndex) {
842
- let row = this.patternOne.length === 0 ? this.planPattern : this.patternOne
843
- let ringsList = this.patternOne.length === 0 ? row.stagesList : row[0].stagesList
844
- for (let rings of ringsList) {
845
- // if (subIndex === rings.key) {
846
- rings.stageSplit = (rings.green ? rings.green : 0) + (rings.yellow ? rings.yellow : 0) + (rings.red ? rings.red : 0)
847
- continue
848
- // }
849
- }
850
- },
851
- onStageDelaystartChange (diff, rowIndex, subIndex) {
852
- let stageArr = this.stagesList[subIndex].stages
853
- let row = this.patternList[rowIndex]
854
- let ringsList = row.rings
855
- for (let rings of ringsList) {
856
- for (let ring of rings) {
857
- if (stageArr.includes(ring.id)) {
858
- ring.delaystart = (ring.delaystart ? ring.delaystart : 0) + diff
859
- continue
860
- }
861
- }
862
- }
863
- },
864
- onStageAdvanceendChange (diff, rowIndex, subIndex) {
865
- let stageArr = this.stagesList[subIndex].stages
866
- let row = this.patternList[rowIndex]
867
- let ringsList = row.rings
868
- for (let rings of ringsList) {
869
- for (let ring of rings) {
870
- if (stageArr.includes(ring.id)) {
871
- ring.advanceend = (ring.advanceend ? ring.advanceend : 0) + diff
872
- continue
873
- }
874
- }
875
- }
876
- },
877
- handleSplit (index) {
878
- if (this.patternOne.length > 0) {
879
- let currPattern = this.patternOne[0].rings
880
- setTimeout(() => {
881
- this.handleStageData(currPattern)
882
- this.getCycles()
883
- // this.patternOne[0].stagesList = this.stagesList
884
- }, 50)
885
- } else {
886
- let currPattern = this.planPattern.rings
887
- setTimeout(() => {
888
- this.handleStageData(currPattern)
889
- this.getCycle()
890
- // this.allPatternList[0].stagesList = this.stagesList
891
- }, 50)
892
- }
893
- },
894
- selectPattern () {
895
- this.manualInfo.offset = 0
896
- let selectId = Number(this.manualInfo.tempPatternid)
897
- this.patternOne = this.allPatternList.filter(item => {
898
- return item.id === selectId
899
- })
900
- // if (this.patternOne[0].contrloType === 'stage') {
901
- // this.changeStage()
902
- // }
903
- this.manualInfo.offset = this.offset
904
- for (let rings of this.patternOne[0].rings) {
905
- if (rings.length === 0) continue
906
- for (let ring of rings) {
907
- if (ring.value === 0) continue
908
- let currPhase = this.phaseList.filter((item) => {
909
- return item.id === ring.id
910
- })[0]
911
- ring.desc = currPhase.direction.map(item => {
912
- return {
913
- id: item,
914
- color: '#454545'
915
- }
916
- })
917
- }
918
- }
919
- this.handleStageData(this.patternOne[0].rings)
920
- },
921
- handleStageData (rings) { // stagesList
922
- if (!rings) return
923
- for (let i = 0; i < rings.length; i++) {
924
- if (rings[i].length > 0) {
925
- let phaseList = []
926
- let stagesList = []
927
- // rings = JSON.parse(JSON.stringify(rings))
928
- let mapAdd = rings.map(item => {
929
- return item.map(val => {
930
- // if (val.mode !== 7) {
931
- return val.value + (val.sum ? val.sum : 0)
932
- // } else {
933
- // return 0
934
- // }
935
- })
936
- })
937
- let maxCycle = mapAdd.length > 0 ? mapAdd.map(item => {
938
- return item.length > 0 ? item.reduce((a, b) => {
939
- return a + b
940
- }) : 0
941
- }) : 0
942
- this.max = Math.max(...maxCycle)// 每个环的周期最大值
943
- this.stateList = [0]
944
- this.narr = []
945
- let currentIds = ''
946
- let lastCurrentIds = ''
947
- for (let j = 0; j <= this.max; j++) { // 指针长度
948
- for (let i = 0; i < rings.length; i++) { // 环列表
949
- let ring = rings[i]// 每个环对象
950
- let sum = 0
951
- for (let n = 0; n < ring.length; n++) { // 相位累计长度
952
- // if (ring[n].mode !== 7) {
953
- sum = sum + ring[n].value + (ring[n].sum ? ring[n].sum : 0)
954
- if (j < sum) {
955
- let phaseId = ring[n].id
956
- currentIds = currentIds + '-' + phaseId
957
- break
958
- }
959
- // }
960
- }
961
- }
962
- if (lastCurrentIds !== currentIds && lastCurrentIds !== '') { // 当前相位id和上一个相比不同说明相位变化了
963
- phaseList.push(lastCurrentIds)
964
- this.stateList.push(j)// 阶段累计长度的集合
965
- }
966
- lastCurrentIds = currentIds
967
- currentIds = ''
968
- }
969
- let newPhaselist = []
970
- phaseList.forEach(i => {
971
- let rangeArr = i.split('-').map(Number)
972
- if (rangeArr.length > 2) {
973
- newPhaselist.push([
974
- JSON.parse(JSON.stringify(rangeArr[1])),
975
- JSON.parse(JSON.stringify(rangeArr[2]))
976
- ])
977
- } else {
978
- newPhaselist.push([
979
- JSON.parse(JSON.stringify(rangeArr[1]))
980
- ])
981
- }
982
- })
983
- for (let i = this.stateList.length - 1; i >= 1; i--) {
984
- this.narr.push(this.stateList[i] - this.stateList[i - 1])
985
- }
986
- // newPhaselist
987
- this.narr.reverse()// 阶段差
988
- for (let i = 0; i < newPhaselist.length; i++) {
989
- let stage = JSON.parse(JSON.stringify(newPhaselist[i]))
990
- let newStage = []
991
- stage.map(item => {
992
- for (let ring of rings) {
993
- for (let ringItem of ring) {
994
- if (item === ringItem.id && (ringItem.mode !== 7 && ringItem.mode !== 8)) {
995
- newStage.push(item)
996
- }
997
- }
998
- }
999
- })
1000
- let stageItem = this.getStageItem(newStage, stage, rings, i)
1001
- stagesList.push(JSON.parse(JSON.stringify(stageItem)))
1002
- }
1003
- this.overLapCycle = stagesList.reduce((prev, curr) => prev + parseInt(curr.split), 0)
1004
- this.stagesList = JSON.parse(JSON.stringify(stagesList))
1005
- }
1006
- }
1007
- },
1008
- getStageItem (stageArr, stage, ringsList, i) {
1009
- let res = {
1010
- key: i,
1011
- split: this.narr[i], // 阶段绿性比
1012
- phases: stageArr,
1013
- stageKanban: stage,
1014
- delaystart: 0,
1015
- advanceend: 0
1016
- }
1017
- // let splitArr = []
1018
- let delaystartArr = []
1019
- let advanceendArr = []
1020
- for (let rings of ringsList) {
1021
- for (let ring of rings) {
1022
- if (stageArr.includes(ring.id)) {
1023
- // let split = ring.value
1024
- let delaystart = ring.delaystart
1025
- let advanceend = ring.advanceend
1026
- // splitArr.push(split)
1027
- delaystartArr.push(delaystart)
1028
- advanceendArr.push(advanceend)
1029
- }
1030
- }
1031
- }
1032
- // splitArr.sort(function (a, b) { return a - b })
1033
- delaystartArr.sort(function (a, b) { return b - a })
1034
- advanceendArr.sort(function (a, b) { return a - b })
1035
- // res.split = splitArr.length > 0 ? splitArr[0] : 0
1036
- res.delaystart = delaystartArr.length > 0 ? delaystartArr[0] : 0
1037
- res.advanceend = advanceendArr.length > 0 ? advanceendArr[0] : 0
1038
- return res
1039
- },
1040
- initData () {
1041
- // 判断有几个环,就创建几个看板
1042
- // let phaseList = this.globalParamModel.getParamsByType('phaseList')
1043
- // this.coordphaseOption = this.phaseList.map(ele => {
1044
- // return {
1045
- // value: ele.id
1046
- // }
1047
- // })
1048
- this.coordphaseOption = this.phaseList
1049
- // this.overlap = this.globalParamModel.getParamsByType('overlaplList')
1050
- // this.agentId = getIframdevid()
1051
- let rings = []
1052
- if (this.phaseList.length === 0) {
1053
- // this.$store.getters.tscParam.patternList = []
1054
- return
1055
- }
1056
- for (let phase of this.phaseList) {
1057
- rings.push(phase.ring)
1058
- }
1059
- this.ringCount = Array.from(new Set(rings)) // 去除数组重复的元素
1060
- this.ringCount = this.ringCount.sort(this.sortNumbers) // 把数组中的值按照从小到大的顺序重新排序
1061
- this.ringCounts = Array.from(new Set(rings)) // 去除数组重复的元素
1062
- this.ringCounts = this.ringCounts.sort(this.sortNumbers) // 把数组中的值按照从小到大的顺序重新排序
1063
- this.optimizes = Array.from(new Set(rings)) // 去除数组重复的元素
1064
- this.optimizes = this.optimizes.sort(this.sortNumbers) // 把数组中的值按照从小到大的顺序重新排序
1065
- // this.increaseId()
1066
- // this.getCycle()
1067
- // this.updatePhaseDescription()
1068
- // this.getOptionsOfRing()
1069
- },
1070
- sortNumbers (a, b) {
1071
- return a - b
1072
- },
1073
- isRingCycleEqual (rings) {
1074
- let isequal = true
1075
- // this.patternmsg = []
1076
- let maxCycle = 0
1077
- for (let ring of rings) {
1078
- if (ring.length === 0) continue
1079
- let cycle = 0
1080
- for (let r of ring) {
1081
- if (r.mode === 7) { // 忽略相位不计周期
1082
- continue
1083
- }
1084
- cycle = cycle + r.value
1085
- }
1086
- if (cycle > maxCycle && maxCycle === 0) {
1087
- maxCycle = cycle
1088
- }
1089
- if (cycle !== maxCycle) {
1090
- // this.patternmsg.push(rings.id)
1091
- isequal = false
1092
- }
1093
- }
1094
- return isequal
1095
- },
1096
- getMaxCycleStage (pattern) {
1097
- let rings = pattern.stagesList
1098
- let stageCycleList = rings.map(item => {
1099
- if (item.stageSplit) {
1100
- return item.stageSplit
1101
- } else {
1102
- return 0
1103
- }
1104
- })
1105
- let maxCycle = stageCycleList.reduce((a, b) => {
1106
- return a + b
1107
- }, 0)
1108
- return maxCycle
1109
- },
1110
- getMaxCycle (pattern) {
1111
- let rings = pattern.rings
1112
- let maxCycle = 0
1113
- for (let ring of rings) {
1114
- if (ring.length === 0) continue
1115
- let cycle = 0
1116
- for (let r of ring) {
1117
- if (r.mode === 7) { // 忽略相位不计周期
1118
- continue
1119
- }
1120
- cycle = cycle + r.value
1121
- }
1122
- if (cycle > maxCycle) {
1123
- maxCycle = cycle
1124
- }
1125
- }
1126
- return maxCycle
1127
- },
1128
- // checkPatternRules (rings) {
1129
- // if (!this.isRingCycleEqual(rings)) {
1130
- // this.patternCycleEqual = false
1131
- // } else {
1132
- // this.patternCycleEqual = true
1133
- // }
1134
- // if (!this.patternCycleEqual) {
1135
- // let mess = `方案中存在环周期时长不一致`
1136
- // if (this.$i18n.locale === 'en') {
1137
- // mess = `Inconsistent loop cycle durations exist in the scheme`
1138
- // }
1139
- // this.$message({
1140
- // message: mess,
1141
- // type: 'error',
1142
- // dangerouslyUseHTMLString: true
1143
- // })
1144
- // return false
1145
- // }
1146
- // },
1147
- handleManualControl () {
1148
- let submitdata = {
1149
- control: 100,
1150
- delay: this.manualInfo.tempDelay !== undefined ? Number(this.manualInfo.tempDelay) : 0,
1151
- duration: Number(this.manualInfo.duration),
1152
- // duration: this.manualInfo.tempDuration !== undefined ? Number(this.manualInfo.tempDuration) : 0,
1153
- data: {}
1154
- }
1155
- if (this.manualInfo.tempPatternid) {
1156
- submitdata.terminal = Number(this.manualInfo.tempPatternid)
1157
- }
1158
- if (this.patternOne.length === 0) {
1159
- if (this.isRing) {
1160
- submitdata.data.cycle = this.getMaxCycleStage(this.planPattern)
1161
- } else {
1162
- submitdata.data.cycle = this.getMaxCycle(this.planPattern)
1163
- }
1164
- submitdata.data.stagesList = this.planPattern.stagesList
1165
- } else {
1166
- if (this.isRing) {
1167
- submitdata.data.cycle = this.getMaxCycleStage(this.patternOne[0])
1168
- } else {
1169
- submitdata.data.cycle = this.getMaxCycle(this.patternOne[0])
1170
- }
1171
- this.patternOne[0].stagesList.forEach((stage) => {
1172
- delete stage.split
1173
- })
1174
- submitdata.data.stagesList = this.patternOne[0].stagesList
1175
- }
1176
- submitdata.data.offset = this.offset
1177
- if (this.patternOne.length === 0) {
1178
- submitdata.data.rings = this.planPattern.rings
1179
- } else {
1180
- submitdata.data.rings = this.patternOne[0].rings
1181
- }
1182
- // submitdata.data.rings = this.patternOne.length === 0 ? this.planPattern.rings : this.patternOne[0].rings
1183
- // this.checkPatternRules(submitdata.data.rings)
1184
- if (this.patternCycleEqual) {
1185
- this.$emit('closePhaseControl', submitdata)
1186
- }
1187
- }
1188
- }
1189
- }
1190
- </script>
1191
-
1192
- <style>
1193
-
1194
- </style>
1
+ <template>
2
+ <div class="tentativeplan-control">
3
+ <!-- <div class="title" style="margin-bottom: 18px">
4
+ {{ $t('openatccomponents.overview.tentativeplan') }}
5
+ </div> -->
6
+ <el-row>
7
+ <el-col :span="12">
8
+ <el-form
9
+ ref="manual"
10
+ label-position="left"
11
+ :model="manualInfo"
12
+ label-width="100px"
13
+ >
14
+ <el-form-item
15
+ :label="$t('openatccomponents.overview.patternid') + ':'"
16
+ prop="count"
17
+ >
18
+ <el-select
19
+ @change="selectPattern()"
20
+ v-model="manualInfo.tempPatternid"
21
+ class="col-inner"
22
+ size="small"
23
+ :placeholder="$t('openatccomponents.common.select')"
24
+ >
25
+ <el-option
26
+ v-for="item in patternSelect"
27
+ :key="item.value"
28
+ :label="item.label"
29
+ :value="item.value"
30
+ >
31
+ </el-option>
32
+ </el-select>
33
+ <!-- <el-input v-model="manualInfo.tempDuration" size="small" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
34
+ </el-form-item>
35
+ <el-form-item
36
+ :label="$t('openatccomponents.overview.delay') + ':'"
37
+ prop="intersection"
38
+ >
39
+ <el-input-number
40
+ :placeholder="$t('openatccomponents.common.input')"
41
+ :min="0"
42
+ :max="65535"
43
+ :precision="0"
44
+ :step="1"
45
+ :controls="false"
46
+ v-model.number="manualInfo.tempDelay"
47
+ size="small"
48
+ ></el-input-number>
49
+ <!-- <el-input v-model="manualInfo.tempDelay" size="small" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
50
+ </el-form-item>
51
+ </el-form>
52
+ </el-col>
53
+ <el-col :span="12">
54
+ <el-form
55
+ ref="manual"
56
+ label-position="left"
57
+ :model="manualInfo"
58
+ label-width="100px"
59
+ >
60
+ <el-form-item
61
+ :label="$t('openatccomponents.overview.patternoffset') + ':'"
62
+ prop="count"
63
+ >
64
+ <el-input-number
65
+ :placeholder="$t('openatccomponents.common.input')"
66
+ :min="0"
67
+ :max="65535"
68
+ :precision="0"
69
+ :step="1"
70
+ :controls="false"
71
+ v-model.number="manualInfo.offset"
72
+ size="small"
73
+ ></el-input-number>
74
+ <!-- <el-input v-model="manualInfo.offset" size="small" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
75
+ </el-form-item>
76
+ <el-form-item
77
+ :label="$t('openatccomponents.overview.duration') + ':'"
78
+ prop="intersection"
79
+ >
80
+ <el-input-number
81
+ :placeholder="$t('openatccomponents.common.input')"
82
+ :min="0"
83
+ :max="65535"
84
+ :precision="0"
85
+ :step="1"
86
+ :controls="false"
87
+ v-model.number="manualInfo.duration"
88
+ size="small"
89
+ ></el-input-number>
90
+ <!-- <el-input v-model="manualInfo.duration" size="small" :placeholder="$t('openatccomponents.common.input')"></el-input> -->
91
+ </el-form-item>
92
+ </el-form>
93
+ </el-col>
94
+ </el-row>
95
+ <el-row>
96
+ <el-radio
97
+ v-model="isRing"
98
+ :label="false"
99
+ @change="changeRing"
100
+ >{{ $t('openatccomponents.common.ringStyle') }}</el-radio
101
+ >
102
+ <el-radio v-model="isRing" :label="true" @change="changeStage">{{
103
+ $t('openatccomponents.common.stageStyle')
104
+ }}</el-radio>
105
+ <!-- <div class="title" style="margin-top:18px; margin-bottom:10px">{{$t('openatccomponents.overview.patternstate')}}:
106
+ <span>({{$t('openatccomponents.overview.cycle')}}: {{cycle}} {{$t('openatccomponents.overview.patternoffset')}}: {{offset}})</span>
107
+ </div> -->
108
+ <!-- <stage-status
109
+ :patternStatusList="patternOne.length===0?planPattern.rings:patternOne[0].rings"
110
+ >
111
+ </stage-status> -->
112
+ <pattern-list
113
+ :key="keyChange"
114
+ :allPatternList="allPatternList"
115
+ :contrloType="contrloType"
116
+ :stagesChange="
117
+ patternOne.length === 0
118
+ ? planPattern.stagesList
119
+ : patternOne[0].stagesList
120
+ "
121
+ :patternList="patternOne.length === 0 ? planPattern.rings : patternOne"
122
+ :patternStatusList="
123
+ patternOne.length === 0 ? planPattern.rings : patternOne[0].rings
124
+ "
125
+ :cycles="
126
+ patternOne.length === 0 ? planPattern.cycle : patternOne[0].cycle
127
+ "
128
+ :phaseList="phaseList"
129
+ >
130
+ </pattern-list>
131
+ </el-row>
132
+ <el-row>
133
+ <el-tabs v-model="activeList" type="card">
134
+ <el-tab-pane
135
+ v-if="!isRing"
136
+ :label="$t('openatccomponents.pattern.ringConfig')"
137
+ name="ring"
138
+ >
139
+ <div style="width: 100%; overflow: hidden; margin-top: 20px">
140
+ <kan-ban
141
+ v-for="n in ringCount"
142
+ :key="n"
143
+ class="closephasekanban"
144
+ :index="n"
145
+ :options="options"
146
+ :list="
147
+ patternOne.length === 0
148
+ ? planPattern.rings[n - 1]
149
+ : patternOne[0].rings[n - 1]
150
+ "
151
+ :phaseList="phaseList"
152
+ :header-text="$t('openatccomponents.pattern.ring') + n"
153
+ @handleSplit="handleSplit"
154
+ >
155
+ </kan-ban>
156
+ </div>
157
+ </el-tab-pane>
158
+ <!-- <el-tab-pane v-if="isRing" :label="$t('openatccomponents.pattern.stageConfig')" name="kanban">
159
+ <div class="stage-panel-contener">
160
+ <StageKanban
161
+ v-for="(stage, index) in scope.row.stagesList"
162
+ class="kanban todo"
163
+ :key="index"
164
+ :stage="stage"
165
+ :stageInfo="scope.row.stagesList"
166
+ :isRing="isRing"
167
+ :options="scope.row.options"
168
+ :coordphaseOption="coordphaseOption"
169
+ :rowIndex="scope.$index"
170
+ :subIndex="index"
171
+ @onStageSplitChange="onStageSplitChange"
172
+ @stageSplitChange="stageSplitChange"
173
+ @onStageDelaystartChange="onStageDelaystartChange"
174
+ @onStageAdvanceendChange="onStageAdvanceendChange"
175
+ />
176
+ <div v-if="isRing" style="margin-left: 20px">
177
+ <el-button
178
+ type="primary"
179
+ @click="addStage(scope.row.stagesList)"
180
+ icon="el-icon-plus"
181
+ circle
182
+ ></el-button>
183
+ </div>
184
+ </div>
185
+ </el-tab-pane> -->
186
+ <el-tab-pane
187
+ v-if="isRing"
188
+ :label="$t('openatccomponents.pattern.stageConfig')"
189
+ name="ring"
190
+ >
191
+ <div class="stage-panel-contener">
192
+ <stage-bord
193
+ v-for="(stage, index) in patternOne.length === 0
194
+ ? planPattern.stagesList
195
+ : patternOne[0].stagesList"
196
+ class="kanban todo"
197
+ :key="index"
198
+ :stage="stage"
199
+ :options="options"
200
+ :isRing="isRing"
201
+ :stageInfo="
202
+ patternOne.length === 0
203
+ ? planPattern.stagesList
204
+ : patternOne[0].stagesList
205
+ "
206
+ :coordphaseOption="coordphaseOption"
207
+ :subIndex="index"
208
+ @onStageSplitChange="onStageSplitChange"
209
+ @stageSplitChange="stageSplitChange"
210
+ @onStageDelaystartChange="onStageDelaystartChange"
211
+ @onStageAdvanceendChange="onStageAdvanceendChange"
212
+ >
213
+ </stage-bord>
214
+ <div v-if="isRing" style="margin-left: 10px">
215
+ <el-button
216
+ type="primary"
217
+ @click="
218
+ addStage(
219
+ patternOne.length === 0
220
+ ? planPattern.stagesList
221
+ : patternOne[0].stagesList
222
+ )
223
+ "
224
+ icon="el-icon-plus"
225
+ circle
226
+ ></el-button>
227
+ </div>
228
+ </div>
229
+ </el-tab-pane>
230
+ <el-tab-pane
231
+ v-if="!isRing"
232
+ :label="$t('openatccomponents.pattern.parameters')"
233
+ name="parame"
234
+ >
235
+ <el-row>
236
+ <expend-config
237
+ v-for="(j, index) in ringCounts"
238
+ :key="index"
239
+ class="expendkanban"
240
+ :options="options"
241
+ :header-text="$t('openatccomponents.pattern.ring') + j"
242
+ :list="
243
+ patternOne.length === 0
244
+ ? planPattern.rings[j - 1]
245
+ : patternOne[0].rings[j - 1]
246
+ "
247
+ >
248
+ </expend-config>
249
+ <div class="forbiddenstage">
250
+ {{ $t('openatccomponents.pattern.forbiddenstage') }}
251
+ <el-input
252
+ class="stage-value"
253
+ size="small"
254
+ v-model="forbiddenstage"
255
+ ></el-input>
256
+ </div>
257
+ <div class="forbiddenstage">
258
+ {{ $t('openatccomponents.pattern.screenstage') }}
259
+ <el-input
260
+ class="stage-value"
261
+ size="small"
262
+ v-model="screenstage"
263
+ ></el-input>
264
+ </div>
265
+ <div class="forbiddenstage">
266
+ {{ $t('openatccomponents.pattern.coordinatestage') }}
267
+ <el-input
268
+ class="stage-value"
269
+ size="small"
270
+ v-model="coordinatestage"
271
+ ></el-input>
272
+ </div>
273
+ </el-row>
274
+ </el-tab-pane>
275
+ <el-tab-pane
276
+ v-if="!isRing"
277
+ :label="$t('openatccomponents.pattern.overLap')"
278
+ name="overlap"
279
+ >
280
+ <el-row :gutter="20">
281
+ <el-col :span="24">
282
+ <over-lap
283
+ :stageList="stagesList"
284
+ :overlap="overlap"
285
+ :checked="true"
286
+ :tentative="true"
287
+ :cycleChange="false"
288
+ :cycle="overLapCycle"
289
+ >
290
+ </over-lap>
291
+ </el-col>
292
+ </el-row>
293
+ </el-tab-pane>
294
+ <el-tab-pane
295
+ v-if="!isRing"
296
+ :label="$t('openatccomponents.pattern.patternOptimize')"
297
+ name="patternOptimize"
298
+ >
299
+ <pattern-optimize
300
+ v-for="n in optimizes"
301
+ :key="n"
302
+ class="expendkanban"
303
+ :list="
304
+ patternOne.length === 0
305
+ ? planPattern.rings[n - 1]
306
+ : patternOne[0].rings[n - 1]
307
+ "
308
+ :rings="patternOne.length === 0 ? planPattern : patternOne[0]"
309
+ :phaseList="phaseList"
310
+ :options="options"
311
+ :header-text="$t('openatccomponents.pattern.ring') + n"
312
+ :index="n"
313
+ :nowNumber="n"
314
+ @handleSplit="handleSplit"
315
+ >
316
+ </pattern-optimize>
317
+ </el-tab-pane>
318
+ </el-tabs>
319
+ </el-row>
320
+ <div class="footer" v-if="realtimeStatusModalvisible">
321
+ <el-button @click="handleClose()">{{
322
+ $t('openatccomponents.button.Back')
323
+ }}</el-button>
324
+ <el-button type="primary" plain @click="toAutoControl()" v-if="isHasPermission('configer:manual:renew')">{{$t('openatccomponents.overview.recovery')}}</el-button>
325
+ <el-button type="primary" @click="handleManualControl()">{{
326
+ $t('openatccomponents.overview.implement')
327
+ }}</el-button>
328
+ </div>
329
+ <div class="footer" v-if="!realtimeStatusModalvisible">
330
+ <el-button @click="handleClose()">{{
331
+ $t('openatccomponents.button.Back')
332
+ }}</el-button>
333
+ <el-button type="primary" plain @click="toAutoControl()" v-if="isHasPermission('configer:manual:renew')">{{$t('openatccomponents.overview.recovery')}}</el-button>
334
+ <el-button type="primary" @click="handleManualControl()">{{
335
+ $t('openatccomponents.overview.comfirm')
336
+ }}</el-button>
337
+ </div>
338
+ </div>
339
+ </template>
340
+
341
+ <script>
342
+ import { hasPermission } from '../../../../utils/auth'
343
+
344
+ export default {
345
+ name: 'tentativeplancontrol',
346
+ props: {
347
+ realtimeStatusModalvisible: {
348
+ type: Boolean,
349
+ default: true
350
+ },
351
+ controlData: {
352
+ type: Object
353
+ },
354
+ phaseList: {
355
+ type: Array
356
+ },
357
+ overlap: {
358
+ type: Array
359
+ },
360
+ allPatternList: {
361
+ type: Array
362
+ },
363
+ patternSelect: {
364
+ type: Array
365
+ }
366
+ },
367
+ computed: {
368
+ rings () {
369
+ return this.patternOne.length === 0 ? this.planPattern.rings : this.patternOne[0].rings
370
+ },
371
+ cycle () {
372
+ return this.patternOne.length === 0 ? this.max : (this.patternOne.length > 0 && (this.patternOne[0].cycle < this.max)) ? this.max : this.patternOne[0].cycle
373
+ },
374
+ offset () {
375
+ return Number((this.patternOne.length === 0 || this.manualInfo.offset > 0) ? this.manualInfo.offset : this.patternOne[0].offset)
376
+ },
377
+ forbiddenstage () {
378
+ return this.patternOne.length === 0 ? this.allPatternList[0].forbiddenstage : this.patternOne[0].forbiddenstage
379
+ },
380
+ screenstage () {
381
+ return this.patternOne.length === 0 ? this.allPatternList[0].screenstage : this.patternOne[0].screenstage
382
+ },
383
+ coordinatestage () {
384
+ return this.patternOne.length === 0 ? this.allPatternList[0].coordinatestage : this.patternOne[0].coordinatestage
385
+ }
386
+ },
387
+ data () {
388
+ return {
389
+ stagesList: [],
390
+ phaseRings: [],
391
+ keyChange: false,
392
+ overLapCycle: 0,
393
+ options: {
394
+ group: 'pattern'
395
+ },
396
+ max: '',
397
+ contrloType: '',
398
+ patternCycleEqual: true,
399
+ activeList: 'ring',
400
+ isRing: false,
401
+ // isChange: false,
402
+ ringCount: 1,
403
+ ringCounts: 1,
404
+ barriers: [],
405
+ optimizes: 1,
406
+ coordphaseOption: [],
407
+ patternOne: [],
408
+ planPattern: {},
409
+ manualInfo: {
410
+ tempPatternid: '',
411
+ offset: 0,
412
+ duration: 300,
413
+ tempDelay: 0 // 控制方式手动操作的情况下的延迟时间的临时值。
414
+ // tempDuration: 300 // 控制方式手动操作的情况下的持续时间的临时值。
415
+ }
416
+ }
417
+ },
418
+ created () {
419
+ this.patternPlan()
420
+ this.getCycle()
421
+ if (this.patternOne.length === 0) {
422
+ this.handleStageData(this.planPattern.rings)
423
+ }
424
+ this.initData()
425
+ if (!this.allPatternList[0].contrloType && this.allPatternList[0].rings.length > 0) {
426
+ this.contrloType = 'ring'
427
+ } else if (!this.allPatternList[0].contrloType && this.allPatternList[0].rings.length === 0) {
428
+ this.contrloType = 'stage'
429
+ } else {
430
+ this.contrloType = this.allPatternList[0].contrloType
431
+ }
432
+ for (let i = 0; i < this.allPatternList.length; i++) {
433
+ if (this.allPatternList[i].contrloType === 'stage' || (this.isRing && !this.allPatternList[i].contrloType)) {
434
+ this.isRing = true
435
+ // this.setStageList(this.allPatternList[i].stagesList, this.allPatternList[i].id)
436
+ } else if (this.allPatternList[i].contrloType === 'ring' || (!this.isRing && !this.allPatternList[i].contrloType && this.allPatternList[i].rings.length > 0)) {
437
+ this.isRing = false
438
+ // this.handleStageData(this.allPatternList[i].rings)
439
+ } else if (this.allPatternList[i].rings.length === 0 && this.allPatternList[i].stagesList.length > 0) {
440
+ this.isRing = true
441
+ // this.setStageList(this.allPatternList[i].stagesList, this.allPatternList[i].id)
442
+ }
443
+ }
444
+ },
445
+ methods: {
446
+ addStage (row) {
447
+ // this.isChange = false
448
+ if (row.length > 15) {
449
+ this.$message.error(
450
+ this.$t('edge.pattern.mostlist')
451
+ )
452
+ return
453
+ }
454
+ if (this.patternOne.length !== 0) {
455
+ this.patternOne[0].stagesList.push({
456
+ key: row.length,
457
+ green: 25,
458
+ yellow: 3,
459
+ red: 2,
460
+ phases: [],
461
+ stageSplit: 30
462
+ })
463
+ } else {
464
+ this.planPattern.stagesList.push({
465
+ key: row.length,
466
+ green: 25,
467
+ yellow: 3,
468
+ red: 2,
469
+ phases: [],
470
+ stageSplit: 30
471
+ })
472
+ }
473
+ },
474
+ changeRing () {
475
+ this.contrloType = 'ring'
476
+ this.isRing = false
477
+ // const globalParamModel = this.$store.getters.globalParamModel
478
+ // let pattern = globalParamModel.getParamsByType('patternList')
479
+ // let pattern = this.allPatternList
480
+ this.getCycle()
481
+ this.patternOne = this.allPatternList.filter(item => {
482
+ return item.id === Number(this.manualInfo.tempPatternid)
483
+ })
484
+ // if (this.isChange) {
485
+ // for (let i = 0; i < pattern.length; i++) {
486
+ this.handleStageData(this.patternOne.rings)
487
+ // }
488
+ // } else {
489
+ // for (let i = 0; i < pattern.length; i++) {
490
+ // this.setStageList(pattern[i].stagesList, pattern[i].id)
491
+ // }
492
+ // }
493
+ },
494
+ changeStage () {
495
+ this.contrloType = 'stage'
496
+ this.isRing = true
497
+ // this.patternOne = this.allPatternList.filter(item => {
498
+ // return item.id === Number(this.manualInfo.tempPatternid)
499
+ // })
500
+ // this.getStageCycle()
501
+ },
502
+ getStageCycle () {
503
+ // this.patternOne.length === 0 ? this.allPatternList this.patternOne
504
+ if (this.patternOne.length === 0) {
505
+ // this.setStageList(this.planPattern.stagesList, this.planPattern.id)
506
+ // this.planPattern.stagesList = []
507
+ } else {
508
+ // this.patternOne = this.allPatternList.filter(item => {
509
+ // return item.id === Number(this.manualInfo.tempPatternid)
510
+ // })
511
+ // this.setStageList(this.patternOne[0].stagesList, this.patternOne[0].id)
512
+ }
513
+ },
514
+ setStageList (stageChange, id) {
515
+ // let patternList = this.globalParamModel.getParamsByType('patternList')
516
+ // let patternList = this.allPatternList
517
+ let stagesList = []
518
+ for (let i = 0; i < stageChange.length; i++) {
519
+ let stage = JSON.parse(JSON.stringify(stageChange[i]))
520
+ let stageItem = this.getStageItems(stage.phases, i, stageChange)
521
+ stagesList.push(JSON.parse(JSON.stringify(stageItem)))
522
+ }
523
+ (this.patternOne.length === 0 ? this.planPattern : this.patternOne).map(item => { // 添加特征参数stage
524
+ if (item.id === id) {
525
+ if (this.isRing) {
526
+ item.contrloType = 'stage'
527
+ } else {
528
+ item.contrloType = 'ring'
529
+ }
530
+ item.stagesList = JSON.parse(JSON.stringify(stagesList.filter(item => item.stageSplit)))
531
+ }
532
+ })
533
+ this.stagesList = stagesList.filter(item => item.stageSplit)
534
+ },
535
+ getStageItems (stageArr, i, stageChange) {
536
+ let res = {
537
+ key: i,
538
+ split: this.narr[i], // 阶段绿性比
539
+ phases: stageArr,
540
+ delaystart: 0,
541
+ advanceend: 0
542
+ }
543
+ for (let rings of stageChange) {
544
+ if (i === rings.key) {
545
+ res.green = rings.green ? rings.green : rings.green === 0 ? 0 : 25
546
+ res.yellow = rings.yellow ? rings.yellow : rings.yellow === 0 ? 0 : 3
547
+ res.red = rings.red ? rings.red : rings.red === 0 ? 0 : 2
548
+ res.phases = rings.phases ? rings.phases : stageArr
549
+ // res.stageSplit = rings.split ? rings.split : 30
550
+ if (rings.split) {
551
+ res.stageSplit = rings.split
552
+ } else if (rings.stageSplit) {
553
+ res.stageSplit = rings.stageSplit
554
+ } else {
555
+ res.stageSplit = 0
556
+ }
557
+ }
558
+ }
559
+ return res
560
+ },
561
+ tranform (arr) { // 分barrier
562
+ let newMap = new Map()
563
+ arr.forEach(({ id, current }) => {
564
+ const find = newMap.get(current.join())
565
+ if (find) newMap.get(current.join()).push(id)
566
+ else newMap.set(current.join(), [id])
567
+ })
568
+ let ret = []
569
+ newMap.forEach((value, key) => {
570
+ ret.push(Array.from(new Set(key.split(',').map(Number).concat(value))))
571
+ })
572
+ const result = []
573
+ for (const a of ret) {
574
+ let merged = false
575
+ for (const r of result) {
576
+ if (this.check([...r], a)) {
577
+ a.forEach(item => r.add(item))
578
+ merged = true
579
+ }
580
+ }
581
+ if (!merged) {
582
+ result.push(new Set(a))
583
+ }
584
+ merged = false
585
+ }
586
+ return result.map(s => [...s])
587
+ },
588
+ check (arr1, arr2) {
589
+ return arr1.some(a1 => arr2.some(a2 => a1 === a2))
590
+ },
591
+ handleCurrentChange (val) { // 两个ring的数据
592
+ if (val === null || val.length === 0) return
593
+ // 按环序分组
594
+ let ringlength = []
595
+ let ringsequence = val.map(item => {
596
+ if (item.length === 0) return
597
+ ringlength.push(item.length)
598
+ return item.map(k => {
599
+ return k.id
600
+ })
601
+ })
602
+ let newRings = ringsequence.filter(item => item)
603
+ let minLength = Math.min(...ringlength)
604
+ let resultArrs = [] // 环1分组
605
+ let resultArr = [] // 环2分组
606
+ for (let j = 0; j < ringsequence[0].length; j += minLength) {
607
+ resultArrs.push(ringsequence[0].slice(j, j + minLength))
608
+ if (ringsequence[0].length === minLength) {
609
+ resultArrs.push([])
610
+ }
611
+ }
612
+ if (newRings.length > 1) {
613
+ for (let i = 0; i < ringsequence[1].length; i += minLength) {
614
+ resultArr.push(ringsequence[1].slice(i, i + minLength))
615
+ }
616
+ }
617
+ // this.patternInfo = []
618
+ // this.barrierList = []
619
+ let currentArr = []
620
+ let newPattern = []
621
+ val.map(i => {
622
+ newPattern.push(...i)
623
+ })
624
+ if (this.phaseList.length === 0) return
625
+ for (let patternStatus of val[0]) {
626
+ // if (patternStatus.mode !== 7) {
627
+ let concurrent = this.phaseList.filter((item) => {
628
+ return item.id === patternStatus.id // patternStatus.id当前相位id concurrent当前相位的并发相位
629
+ })[0].concurrent// 当前相位的并发相位
630
+ if (concurrent) {
631
+ let obj = {
632
+ id: patternStatus.id,
633
+ current: concurrent.sort()
634
+ }
635
+ currentArr.push(obj)
636
+ }
637
+ // }
638
+ }
639
+ if (currentArr.length !== 0) {
640
+ let newCurrent = this.tranform(currentArr)
641
+ // 取没个环与环关系的并集
642
+ let barrierRing1 = []
643
+ let barrierRing2 = []
644
+ let ring1 = [] // 环1与关系1的并集
645
+ for (let h = 0; h < newCurrent.length; h++) {
646
+ let adds = [...new Set(resultArrs[0])].filter(item => newCurrent[h].includes(item))
647
+ ring1.push(adds)
648
+ }
649
+ let ring1s = [] // 环1与关系2的并集
650
+ for (let h = 0; h < newCurrent.length; h++) {
651
+ let addRing1 = [...new Set(resultArrs[1])].filter(item => newCurrent[h].includes(item))
652
+ ring1s.push(addRing1)
653
+ }
654
+ barrierRing1.push(...ring1, ...ring1s)
655
+ let resultList = []
656
+ if (newRings.length > 1) {
657
+ let ring2s = [] // 环2与关系1的并集
658
+ for (let h = 0; h < newCurrent.length; h++) {
659
+ let addRing2 = [...new Set(resultArr[1])].filter(item => newCurrent[h].includes(item))
660
+ ring2s.push(addRing2)
661
+ }
662
+ let ring2 = [] // 环2与关系1的并集
663
+ for (let h = 0; h < newCurrent.length; h++) {
664
+ let add = [...new Set(resultArr[0])].filter(item => newCurrent[h].includes(item))
665
+ ring2.push(add)
666
+ }
667
+ barrierRing2.push(...ring2, ...ring2s)
668
+ for (let k = 0; k < barrierRing1.length; k++) {
669
+ resultList.push(barrierRing1[k].concat(barrierRing2[k]))
670
+ }
671
+ }
672
+ let resultLists = resultList.filter(item => item.length !== 0)
673
+ let ringArr = []
674
+ for (let l = 0; l < resultLists.length; l++) {
675
+ for (let d = 0; d < newCurrent.length; d++) {
676
+ if (newCurrent[d].filter(item => resultLists[l].includes(item)).length > 0) {
677
+ ringArr.push({
678
+ data: resultLists[l],
679
+ id: d + 1,
680
+ index: l
681
+ })
682
+ }
683
+ }
684
+ }
685
+ for (var i = 0; i < ringArr.length; i++) {
686
+ for (var j = i + 1; j < ringArr.length; j++) {
687
+ if (ringArr[i].id === ringArr[j].id && ringArr[i].index + 1 === ringArr[j].index) {
688
+ ringArr[i].data = ringArr[i].data.concat(ringArr[j].data)
689
+ ringArr.splice(ringArr.indexOf(ringArr[j].id), 1)
690
+ }
691
+ }
692
+ }
693
+ let resArr = ringArr.map(item => item.data)
694
+ let ringTeam = this.step1(this.phaseList, resArr)
695
+ let ringTeams = ringTeam.filter(item => item.length !== 0)
696
+ return this.setBarrier(ringTeams, val)
697
+ }
698
+ },
699
+ setBarrier (ringTeam, val) {
700
+ const patternObjs = {}
701
+ val.forEach(l => {
702
+ l.map(k => {
703
+ patternObjs[k.id] = k.value
704
+ })
705
+ })
706
+ let ret = ringTeam.map((y, index) => {
707
+ if (!y || y.length === 0) return
708
+ y.map(n => {
709
+ n.length = n.data.length > 1 ? n.data.reduce((pre, cur) => pre + patternObjs[cur], 0) : patternObjs[n.data[0]]
710
+ })
711
+ return {
712
+ barrier: index + 1,
713
+ length: y[0].length,
714
+ items: y.map(j => {
715
+ return {
716
+ ring: j.ring,
717
+ data: j.data
718
+ }
719
+ })
720
+ }
721
+ })
722
+ return ret
723
+ },
724
+ step1 (list, arr) { // 各个环包含的相位
725
+ const ret = []
726
+ const listObj = {}
727
+ list.forEach(l => {
728
+ listObj[l.id] = l.ring
729
+ })
730
+ arr.forEach(a => {
731
+ const retItem = []
732
+ a.forEach(b => {
733
+ if (listObj[b]) {
734
+ const find = retItem.find(r => r.ring === listObj[b])
735
+ if (find) find.data.push(b)
736
+ else retItem.push({ ring: listObj[b], data: [b] })
737
+ }
738
+ })
739
+ ret.push(retItem)
740
+ })
741
+ return ret
742
+ },
743
+ patternPlan () {
744
+ let Pattern = {
745
+ offset: 0,
746
+ cycle: 0,
747
+ stagesList: [],
748
+ rings: [[], [], [], []]
749
+ }
750
+ var newPattern = JSON.parse(JSON.stringify(Pattern))
751
+ for (let phase of this.phaseList) {
752
+ let ring = {}
753
+ ring.name = 'Phase ' + phase.id
754
+ ring.desc = this.getPhaseDescription(phase.direction)
755
+ ring.id = phase.id
756
+ ring.value = 30
757
+ ring.mode = 2
758
+ ring.options = []
759
+ ring.delaystart = 0
760
+ ring.advanceend = 0
761
+ if (phase.ring === 1) {
762
+ newPattern.rings[0].push(ring)
763
+ } else if (phase.ring === 2) {
764
+ newPattern.rings[1].push(ring)
765
+ } else if (phase.ring === 3) {
766
+ newPattern.rings[2].push(ring)
767
+ } else if (phase.ring === 4) {
768
+ newPattern.rings[3].push(ring)
769
+ }
770
+ }
771
+ let barrier = this.handleCurrentChange(newPattern.rings)
772
+ newPattern.barriers = barrier
773
+ this.planPattern = newPattern
774
+ },
775
+ getCycle () {
776
+ for (let rings of this.planPattern.rings) {
777
+ let num = 0
778
+ for (let i = 0; i < rings.length; i++) {
779
+ if (rings[i].length !== 0) {
780
+ if (rings[i].mode === 7) { // 忽略相位不计周期
781
+ continue
782
+ }
783
+ num = num + Number(rings[i].value)
784
+ }
785
+ }
786
+ if (num !== 0) {
787
+ this.planPattern.cycle = num
788
+ break
789
+ }
790
+ }
791
+ },
792
+ getCycles () {
793
+ if (!this.patternOne[0].stages) return
794
+ let stages = this.patternOne[0].stages
795
+ let modeId = stages.filter(item => item.length === 1)[0]
796
+ for (let rings of this.patternOne[0].rings) {
797
+ let num = 0
798
+ for (let i = 0; i < rings.length; i++) {
799
+ if (rings[i].length !== 0) {
800
+ if (rings[i].mode === 7 && (modeId && modeId[0] === rings[i].id)) { // 忽略相位不计周期
801
+ continue
802
+ }
803
+ num = num + Number(rings[i].value)
804
+ }
805
+ }
806
+ if (num !== 0) {
807
+ this.patternOne[0].cycle = num
808
+ break
809
+ }
810
+ }
811
+ },
812
+ getPhaseDescription (phaseList) {
813
+ if (!phaseList) return
814
+ let list = []
815
+ for (let id of phaseList) {
816
+ let obj = {}
817
+ obj.id = id
818
+ obj.color = '#454545'
819
+ list.push(obj)
820
+ }
821
+ return list
822
+ },
823
+ handleClose () {
824
+ this.$emit('closePhaseBack')
825
+ },
826
+ onStageSplitChange (diff, rowIndex, subIndex) {
827
+ let stageArr = this.stagesList[subIndex].stages
828
+ let row = this.patternList[rowIndex]
829
+ let ringsList = row.rings
830
+ for (let rings of ringsList) {
831
+ for (let ring of rings) {
832
+ if (stageArr.includes(ring.id)) {
833
+ ring.value = (ring.value ? ring.value : 0) + diff
834
+ continue
835
+ }
836
+ }
837
+ }
838
+ },
839
+ stageSplitChange (diff, rowIndex, subIndex) {
840
+ let row = this.patternOne.length === 0 ? this.planPattern : this.patternOne
841
+ let ringsList = this.patternOne.length === 0 ? row.stagesList : row[0].stagesList
842
+ for (let rings of ringsList) {
843
+ // if (subIndex === rings.key) {
844
+ rings.stageSplit = (rings.green ? rings.green : 0) + (rings.yellow ? rings.yellow : 0) + (rings.red ? rings.red : 0)
845
+ continue
846
+ // }
847
+ }
848
+ },
849
+ onStageDelaystartChange (diff, rowIndex, subIndex) {
850
+ let stageArr = this.stagesList[subIndex].stages
851
+ let row = this.patternList[rowIndex]
852
+ let ringsList = row.rings
853
+ for (let rings of ringsList) {
854
+ for (let ring of rings) {
855
+ if (stageArr.includes(ring.id)) {
856
+ ring.delaystart = (ring.delaystart ? ring.delaystart : 0) + diff
857
+ continue
858
+ }
859
+ }
860
+ }
861
+ },
862
+ onStageAdvanceendChange (diff, rowIndex, subIndex) {
863
+ let stageArr = this.stagesList[subIndex].stages
864
+ let row = this.patternList[rowIndex]
865
+ let ringsList = row.rings
866
+ for (let rings of ringsList) {
867
+ for (let ring of rings) {
868
+ if (stageArr.includes(ring.id)) {
869
+ ring.advanceend = (ring.advanceend ? ring.advanceend : 0) + diff
870
+ continue
871
+ }
872
+ }
873
+ }
874
+ },
875
+ handleSplit (index) {
876
+ if (this.patternOne.length > 0) {
877
+ let currPattern = this.patternOne[0].rings
878
+ setTimeout(() => {
879
+ this.handleStageData(currPattern)
880
+ this.getCycles()
881
+ // this.patternOne[0].stagesList = this.stagesList
882
+ }, 50)
883
+ } else {
884
+ let currPattern = this.planPattern.rings
885
+ setTimeout(() => {
886
+ this.handleStageData(currPattern)
887
+ this.getCycle()
888
+ // this.allPatternList[0].stagesList = this.stagesList
889
+ }, 50)
890
+ }
891
+ },
892
+ selectPattern () {
893
+ this.manualInfo.offset = 0
894
+ let selectId = Number(this.manualInfo.tempPatternid)
895
+ this.patternOne = this.allPatternList.filter(item => {
896
+ return item.id === selectId
897
+ })
898
+ // if (this.patternOne[0].contrloType === 'stage') {
899
+ // this.changeStage()
900
+ // }
901
+ this.manualInfo.offset = this.offset
902
+ for (let rings of this.patternOne[0].rings) {
903
+ if (rings.length === 0) continue
904
+ for (let ring of rings) {
905
+ if (ring.value === 0) continue
906
+ let currPhase = this.phaseList.filter((item) => {
907
+ return item.id === ring.id
908
+ })[0]
909
+ ring.desc = currPhase.direction.map(item => {
910
+ return {
911
+ id: item,
912
+ color: '#454545'
913
+ }
914
+ })
915
+ }
916
+ }
917
+ this.handleStageData(this.patternOne[0].rings)
918
+ },
919
+ handleStageData (rings) { // stagesList
920
+ if (!rings) return
921
+ for (let i = 0; i < rings.length; i++) {
922
+ if (rings[i].length > 0) {
923
+ let phaseList = []
924
+ let stagesList = []
925
+ // rings = JSON.parse(JSON.stringify(rings))
926
+ let mapAdd = rings.map(item => {
927
+ return item.map(val => {
928
+ // if (val.mode !== 7) {
929
+ return val.value + (val.sum ? val.sum : 0)
930
+ // } else {
931
+ // return 0
932
+ // }
933
+ })
934
+ })
935
+ let maxCycle = mapAdd.length > 0 ? mapAdd.map(item => {
936
+ return item.length > 0 ? item.reduce((a, b) => {
937
+ return a + b
938
+ }) : 0
939
+ }) : 0
940
+ this.max = Math.max(...maxCycle)// 每个环的周期最大值
941
+ this.stateList = [0]
942
+ this.narr = []
943
+ let currentIds = ''
944
+ let lastCurrentIds = ''
945
+ for (let j = 0; j <= this.max; j++) { // 指针长度
946
+ for (let i = 0; i < rings.length; i++) { // 环列表
947
+ let ring = rings[i]// 每个环对象
948
+ let sum = 0
949
+ for (let n = 0; n < ring.length; n++) { // 相位累计长度
950
+ // if (ring[n].mode !== 7) {
951
+ sum = sum + ring[n].value + (ring[n].sum ? ring[n].sum : 0)
952
+ if (j < sum) {
953
+ let phaseId = ring[n].id
954
+ currentIds = currentIds + '-' + phaseId
955
+ break
956
+ }
957
+ // }
958
+ }
959
+ }
960
+ if (lastCurrentIds !== currentIds && lastCurrentIds !== '') { // 当前相位id和上一个相比不同说明相位变化了
961
+ phaseList.push(lastCurrentIds)
962
+ this.stateList.push(j)// 阶段累计长度的集合
963
+ }
964
+ lastCurrentIds = currentIds
965
+ currentIds = ''
966
+ }
967
+ let newPhaselist = []
968
+ phaseList.forEach(i => {
969
+ let rangeArr = i.split('-').map(Number)
970
+ if (rangeArr.length > 2) {
971
+ newPhaselist.push([
972
+ JSON.parse(JSON.stringify(rangeArr[1])),
973
+ JSON.parse(JSON.stringify(rangeArr[2]))
974
+ ])
975
+ } else {
976
+ newPhaselist.push([
977
+ JSON.parse(JSON.stringify(rangeArr[1]))
978
+ ])
979
+ }
980
+ })
981
+ for (let i = this.stateList.length - 1; i >= 1; i--) {
982
+ this.narr.push(this.stateList[i] - this.stateList[i - 1])
983
+ }
984
+ // newPhaselist
985
+ this.narr.reverse()// 阶段差
986
+ for (let i = 0; i < newPhaselist.length; i++) {
987
+ let stage = JSON.parse(JSON.stringify(newPhaselist[i]))
988
+ let newStage = []
989
+ stage.map(item => {
990
+ for (let ring of rings) {
991
+ for (let ringItem of ring) {
992
+ if (item === ringItem.id && (ringItem.mode !== 7 && ringItem.mode !== 8 && ringItem.mode !== 9)) {
993
+ newStage.push(item)
994
+ }
995
+ }
996
+ }
997
+ })
998
+ let stageItem = this.getStageItem(newStage, stage, rings, i)
999
+ stagesList.push(JSON.parse(JSON.stringify(stageItem)))
1000
+ }
1001
+ this.overLapCycle = stagesList.reduce((prev, curr) => prev + parseInt(curr.split), 0)
1002
+ this.stagesList = JSON.parse(JSON.stringify(stagesList))
1003
+ }
1004
+ }
1005
+ },
1006
+ getStageItem (stageArr, stage, ringsList, i) {
1007
+ let res = {
1008
+ key: i,
1009
+ split: this.narr[i], // 阶段绿性比
1010
+ phases: stageArr,
1011
+ stageKanban: stage,
1012
+ delaystart: 0,
1013
+ advanceend: 0
1014
+ }
1015
+ // let splitArr = []
1016
+ let delaystartArr = []
1017
+ let advanceendArr = []
1018
+ for (let rings of ringsList) {
1019
+ for (let ring of rings) {
1020
+ if (stageArr.includes(ring.id)) {
1021
+ // let split = ring.value
1022
+ let delaystart = ring.delaystart
1023
+ let advanceend = ring.advanceend
1024
+ // splitArr.push(split)
1025
+ delaystartArr.push(delaystart)
1026
+ advanceendArr.push(advanceend)
1027
+ }
1028
+ }
1029
+ }
1030
+ // splitArr.sort(function (a, b) { return a - b })
1031
+ delaystartArr.sort(function (a, b) { return b - a })
1032
+ advanceendArr.sort(function (a, b) { return a - b })
1033
+ // res.split = splitArr.length > 0 ? splitArr[0] : 0
1034
+ res.delaystart = delaystartArr.length > 0 ? delaystartArr[0] : 0
1035
+ res.advanceend = advanceendArr.length > 0 ? advanceendArr[0] : 0
1036
+ return res
1037
+ },
1038
+ initData () {
1039
+ // 判断有几个环,就创建几个看板
1040
+ // let phaseList = this.globalParamModel.getParamsByType('phaseList')
1041
+ // this.coordphaseOption = this.phaseList.map(ele => {
1042
+ // return {
1043
+ // value: ele.id
1044
+ // }
1045
+ // })
1046
+ this.coordphaseOption = this.phaseList
1047
+ // this.overlap = this.globalParamModel.getParamsByType('overlaplList')
1048
+ // this.agentId = getIframdevid()
1049
+ let rings = []
1050
+ if (this.phaseList.length === 0) {
1051
+ // this.$store.getters.tscParam.patternList = []
1052
+ return
1053
+ }
1054
+ for (let phase of this.phaseList) {
1055
+ rings.push(phase.ring)
1056
+ }
1057
+ this.ringCount = Array.from(new Set(rings)) // 去除数组重复的元素
1058
+ this.ringCount = this.ringCount.sort(this.sortNumbers) // 把数组中的值按照从小到大的顺序重新排序
1059
+ this.ringCounts = Array.from(new Set(rings)) // 去除数组重复的元素
1060
+ this.ringCounts = this.ringCounts.sort(this.sortNumbers) // 把数组中的值按照从小到大的顺序重新排序
1061
+ this.optimizes = Array.from(new Set(rings)) // 去除数组重复的元素
1062
+ this.optimizes = this.optimizes.sort(this.sortNumbers) // 把数组中的值按照从小到大的顺序重新排序
1063
+ // this.increaseId()
1064
+ // this.getCycle()
1065
+ // this.updatePhaseDescription()
1066
+ // this.getOptionsOfRing()
1067
+ },
1068
+ sortNumbers (a, b) {
1069
+ return a - b
1070
+ },
1071
+ isRingCycleEqual (rings) {
1072
+ let isequal = true
1073
+ // this.patternmsg = []
1074
+ let maxCycle = 0
1075
+ for (let ring of rings) {
1076
+ if (ring.length === 0) continue
1077
+ let cycle = 0
1078
+ for (let r of ring) {
1079
+ if (r.mode === 7) { // 忽略相位不计周期
1080
+ continue
1081
+ }
1082
+ cycle = cycle + r.value
1083
+ }
1084
+ if (cycle > maxCycle && maxCycle === 0) {
1085
+ maxCycle = cycle
1086
+ }
1087
+ if (cycle !== maxCycle) {
1088
+ // this.patternmsg.push(rings.id)
1089
+ isequal = false
1090
+ }
1091
+ }
1092
+ return isequal
1093
+ },
1094
+ getMaxCycleStage (pattern) {
1095
+ let rings = pattern.stagesList
1096
+ let stageCycleList = rings.map(item => {
1097
+ if (item.stageSplit) {
1098
+ return item.stageSplit
1099
+ } else {
1100
+ return 0
1101
+ }
1102
+ })
1103
+ let maxCycle = stageCycleList.reduce((a, b) => {
1104
+ return a + b
1105
+ }, 0)
1106
+ return maxCycle
1107
+ },
1108
+ getMaxCycle (pattern) {
1109
+ let rings = pattern.rings
1110
+ let maxCycle = 0
1111
+ for (let ring of rings) {
1112
+ if (ring.length === 0) continue
1113
+ let cycle = 0
1114
+ for (let r of ring) {
1115
+ if (r.mode === 7) { // 忽略相位不计周期
1116
+ continue
1117
+ }
1118
+ cycle = cycle + r.value
1119
+ }
1120
+ if (cycle > maxCycle) {
1121
+ maxCycle = cycle
1122
+ }
1123
+ }
1124
+ return maxCycle
1125
+ },
1126
+ // checkPatternRules (rings) {
1127
+ // if (!this.isRingCycleEqual(rings)) {
1128
+ // this.patternCycleEqual = false
1129
+ // } else {
1130
+ // this.patternCycleEqual = true
1131
+ // }
1132
+ // if (!this.patternCycleEqual) {
1133
+ // let mess = `方案中存在环周期时长不一致`
1134
+ // if (this.$i18n.locale === 'en') {
1135
+ // mess = `Inconsistent loop cycle durations exist in the scheme`
1136
+ // }
1137
+ // this.$message({
1138
+ // message: mess,
1139
+ // type: 'error',
1140
+ // dangerouslyUseHTMLString: true
1141
+ // })
1142
+ // return false
1143
+ // }
1144
+ // },
1145
+ handleManualControl () {
1146
+ let submitdata = {
1147
+ control: 100,
1148
+ delay: this.manualInfo.tempDelay !== undefined ? Number(this.manualInfo.tempDelay) : 0,
1149
+ duration: Number(this.manualInfo.duration),
1150
+ // duration: this.manualInfo.tempDuration !== undefined ? Number(this.manualInfo.tempDuration) : 0,
1151
+ data: {}
1152
+ }
1153
+ if (this.manualInfo.tempPatternid) {
1154
+ submitdata.terminal = Number(this.manualInfo.tempPatternid)
1155
+ }
1156
+ if (this.patternOne.length === 0) {
1157
+ if (this.isRing) {
1158
+ submitdata.data.cycle = this.getMaxCycleStage(this.planPattern)
1159
+ } else {
1160
+ submitdata.data.cycle = this.getMaxCycle(this.planPattern)
1161
+ }
1162
+ submitdata.data.stagesList = this.planPattern.stagesList
1163
+ } else {
1164
+ if (this.isRing) {
1165
+ submitdata.data.cycle = this.getMaxCycleStage(this.patternOne[0])
1166
+ } else {
1167
+ submitdata.data.cycle = this.getMaxCycle(this.patternOne[0])
1168
+ }
1169
+ submitdata.data.stagesList = this.patternOne[0].stagesList
1170
+ }
1171
+ submitdata.data.offset = this.offset
1172
+ if (this.patternOne.length === 0) {
1173
+ submitdata.data.rings = this.planPattern.rings
1174
+ } else {
1175
+ submitdata.data.rings = this.patternOne[0].rings
1176
+ }
1177
+ // submitdata.data.rings = this.patternOne.length === 0 ? this.planPattern.rings : this.patternOne[0].rings
1178
+ // this.checkPatternRules(submitdata.data.rings)
1179
+ if (this.patternCycleEqual) {
1180
+ this.$emit('closePhaseControl', submitdata)
1181
+ }
1182
+ },
1183
+ toAutoControl () {
1184
+ this.$emit('toAutoControl')
1185
+ },
1186
+ isHasPermission (path) {
1187
+ let res = hasPermission(path)
1188
+ return res
1189
+ }
1190
+ }
1191
+ }
1192
+ </script>
1193
+
1194
+ <style>
1195
+
1196
+ </style>