bfg-common 1.5.111 → 1.5.113

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 (302) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/components/atoms/TheIcon3.vue +50 -50
  3. package/components/atoms/perPage/PerPage.vue +58 -58
  4. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  5. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  6. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  7. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  8. package/components/common/context/lib/models/interfaces.ts +31 -31
  9. package/components/common/context/recursion/Recursion.vue +87 -87
  10. package/components/common/context/recursion/RecursionNew.vue +238 -238
  11. package/components/common/diagramMain/DiagramMain.vue +897 -897
  12. package/components/common/diagramMain/Header.vue +214 -214
  13. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  14. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  15. package/components/common/monitor/advanced/tools/chartOptionsModal/counters/table/lib/config/utils.ts +1040 -1040
  16. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  17. package/components/common/pages/home/headline/Headline.vue +45 -45
  18. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  19. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  20. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  21. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  22. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  23. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  24. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  25. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  26. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  27. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  28. package/components/common/pages/packages/Packages.vue +208 -208
  29. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  30. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  31. package/components/common/portlets/tag/CreateCategory.vue +10 -10
  32. package/components/common/portlets/tag/Portlet.vue +433 -433
  33. package/components/common/portlets/tag/TagAddNew.vue +8 -8
  34. package/components/common/portlets/tag/lib/config/config.ts +1 -0
  35. package/components/common/readyToComplete/New.vue +66 -66
  36. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  37. package/components/common/recursionTree/RecursionTree.vue +223 -223
  38. package/components/common/resource/progressBlock/ProgressBlock.vue +7 -7
  39. package/components/common/resource/simple/Simple.vue +2 -2
  40. package/components/common/resource/simple/lib/models/enums.ts +1 -1
  41. package/components/common/select/button/ButtonDropdown.vue +108 -108
  42. package/components/common/select/input/Input.vue +5 -6
  43. package/components/common/select/radio/RadioGroup.vue +3 -4
  44. package/components/common/selectLanguage/SelectLanguage.vue +27 -27
  45. package/components/common/spiceConsole/Drawer.vue +370 -370
  46. package/components/common/spiceConsole/SpiceConsole.vue +3 -3
  47. package/components/common/spiceConsole/keyboard/Keyboard.vue +8 -8
  48. package/components/common/spiceConsole/keyboard/lib/config/keyboardRows.ts +2 -2
  49. package/components/common/spiceConsole/keyboard/lib/models/interfaces.ts +1 -1
  50. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  51. package/components/common/split/horizontal/HorizontalNew.vue +9 -9
  52. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  53. package/components/common/split/vertical/Vertical.vue +162 -160
  54. package/components/common/split/vertical/VerticalNew.vue +10 -7
  55. package/components/common/split/vertical/VerticalOld.vue +11 -8
  56. package/components/common/summary/notification/NotificationOld.vue +3 -2
  57. package/components/common/titleBar/titleBarNew/notification/Notification.vue +4 -4
  58. package/components/common/tools/Actions.vue +201 -202
  59. package/components/common/vm/actions/add/Add.vue +785 -785
  60. package/components/common/vm/actions/add/New.vue +556 -556
  61. package/components/common/vm/actions/add/Old.vue +371 -371
  62. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  63. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  64. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  65. package/components/common/vm/actions/add/lib/config/steps.ts +263 -263
  66. package/components/common/vm/actions/clone/Clone.vue +798 -798
  67. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  68. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +626 -626
  69. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  70. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +276 -275
  71. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +272 -272
  72. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +178 -177
  73. package/components/common/vm/actions/common/customizeHardware/lib/config/navItems.ts +5 -5
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +468 -468
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +122 -118
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusOld.vue +1 -2
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +198 -198
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuNew.vue +194 -194
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuOld.vue +23 -17
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocketNew.vue +1 -1
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocketOld.vue +1 -1
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/hotPlug/HotPlugNew.vue +1 -1
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/hotPlug/HotPlugOld.vue +7 -6
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +13 -13
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelOld.vue +3 -3
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/SharesNew.vue +1 -1
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/SharesOld.vue +1 -1
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +122 -122
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +7 -3
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryNew.vue +1 -1
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/hotPlug/HotPlugNew.vue +14 -16
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/hotPlug/HotPlugOld.vue +4 -5
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +266 -266
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/CacheNew.vue +20 -19
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/cache/CacheOld.vue +1 -0
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/limitIops/LimitIopsNew.vue +32 -33
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +149 -149
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +74 -74
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +83 -83
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/StorageModalNew.vue +75 -74
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/StorageModalOld.vue +1 -1
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeNew.vue +19 -20
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/provisioning/ProvisioningNew.vue +1 -1
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +45 -45
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/adapterType/AdapterTypeNew.vue +19 -20
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +2 -2
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +68 -70
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +81 -83
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +4 -1
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +83 -85
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +80 -82
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  144. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionOld.vue +2 -2
  145. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +57 -57
  146. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerOld.vue +1 -1
  147. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  148. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  149. package/components/common/vm/actions/common/customizeHardware/virtualHardware/reservation/ReservationNew.vue +1 -1
  150. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +105 -105
  151. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  152. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/ModelNew.vue +18 -18
  153. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/model/ModelOld.vue +1 -1
  154. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplaysNew.vue +20 -20
  155. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplaysOld.vue +2 -2
  156. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  157. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryOld.vue +6 -2
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +0 -1
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  163. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  164. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +43 -43
  165. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  166. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  167. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  168. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +144 -144
  169. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +12 -6
  170. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  171. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/PlaybackCompression.vue +1 -1
  172. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  173. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteOld.vue +3 -3
  174. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  175. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferOld.vue +4 -4
  176. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  177. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/imgCompression/ImgCompression.vue +1 -1
  178. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/jpegCompression/JpegCompression.vue +1 -1
  179. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  180. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +40 -40
  181. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapOld.vue +2 -2
  182. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +100 -103
  183. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  184. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  185. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/streamingMode/StreamingMode.vue +1 -1
  186. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/type/Type.vue +1 -1
  187. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  188. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +39 -39
  189. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  190. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/zlibCompression/ZlibCompression.vue +1 -1
  191. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/ToolsNew.vue +28 -29
  192. package/components/common/vm/actions/common/lib/models/types.ts +1 -1
  193. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  194. package/components/common/vm/actions/common/select/compatibility/Compatibility.vue +100 -100
  195. package/components/common/vm/actions/common/select/compatibility/New.vue +165 -165
  196. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  197. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +134 -134
  198. package/components/common/vm/actions/common/select/computeResource/New.vue +141 -141
  199. package/components/common/vm/actions/common/select/computeResource/Old.vue +99 -99
  200. package/components/common/vm/actions/common/select/computeResource/treeView/New.vue +44 -44
  201. package/components/common/vm/actions/common/select/computeResource/treeView/Old.vue +51 -48
  202. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  203. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  204. package/components/common/vm/actions/common/select/createType/New.vue +84 -84
  205. package/components/common/vm/actions/common/select/createType/Old.vue +70 -70
  206. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  207. package/components/common/vm/actions/common/select/name/Name.vue +167 -167
  208. package/components/common/vm/actions/common/select/name/New.vue +246 -246
  209. package/components/common/vm/actions/common/select/name/Old.vue +119 -119
  210. package/components/common/vm/actions/common/select/os/New.vue +122 -122
  211. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  212. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  213. package/components/common/vm/actions/common/select/storage/Old.vue +129 -129
  214. package/components/common/vm/actions/common/select/storage/Storage.vue +131 -131
  215. package/components/common/vm/actions/common/select/storage/new/New.vue +193 -193
  216. package/components/common/vm/actions/common/select/storage/new/lib/config/table.ts +326 -326
  217. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  218. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  219. package/components/common/vm/actions/common/select/template/Template.vue +64 -64
  220. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  221. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +1 -1
  222. package/components/common/vm/actions/editSettings/lib/config/modal.ts +6 -4
  223. package/components/common/vm/actions/editSettings/lib/models/types.ts +4 -4
  224. package/components/common/vm/actions/editSettings/lib/utils.ts +25 -29
  225. package/components/common/vm/actions/editSettings/new/New.vue +186 -186
  226. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  227. package/components/common/vm/actions/lib/models/types.ts +1 -1
  228. package/components/common/vm/actions/lib/utils.ts +2 -10
  229. package/components/common/wizards/datastore/add/Add.vue +6 -7
  230. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  231. package/components/common/wizards/datastore/add/lib/validations.ts +1 -1
  232. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +1 -1
  233. package/components/common/wizards/datastore/add/nfs/_kerberosAuthentication/KerberosAuthentication.vue +6 -6
  234. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  235. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/TablesView.vue +5 -5
  236. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +1 -1
  237. package/components/common/wizards/datastore/add/nfs/configuration/Configuration.vue +5 -14
  238. package/components/common/wizards/datastore/add/nfs/configuration/_serversList/DeletePopover.vue +1 -1
  239. package/components/common/wizards/datastore/add/nfs/configuration/_serversList/ServersList.vue +9 -9
  240. package/components/common/wizards/datastore/add/nfs/configuration/_serversList/lib/config/serversListConfig.ts +10 -7
  241. package/components/common/wizards/datastore/add/nfs/configuration/_serversList/lib/config/tableKeys.ts +1 -1
  242. package/components/common/wizards/datastore/add/nfs/version/Version.vue +1 -4
  243. package/components/common/wizards/datastore/add/nfs/version/lib/config/versionOptions.ts +1 -0
  244. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +89 -92
  245. package/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails.ts +1 -0
  246. package/components/common/wizards/datastore/add/sharedStorm/SharedStorm.vue +1 -6
  247. package/components/common/wizards/datastore/add/sharedStorm/_version/Version.vue +3 -6
  248. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +4 -4
  249. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/config/selectOptions.ts +6 -3
  250. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/interfaces.ts +1 -1
  251. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/lib/models/types.ts +1 -1
  252. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/table/Table.vue +8 -8
  253. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/PartitionConfiguration.vue +5 -5
  254. package/components/common/wizards/datastore/add/sharedStorm/partitionConfiguration/sizeGraphic/sizeGraphic.vue +1 -1
  255. package/components/common/wizards/datastore/add/types/Types.vue +0 -4
  256. package/components/common/wizards/datastore/add/types/lib/config/typeOptions.ts +3 -3
  257. package/components/common/wizards/network/add/Add.vue +25 -25
  258. package/components/common/wizards/network/add/lib/models/types.ts +2 -2
  259. package/components/common/wizards/network/add/mappers/mappers.ts +1 -1
  260. package/components/common/wizards/network/add/modals/SelectNetwork.vue +3 -1
  261. package/components/common/wizards/network/add/modals/SelectStandardSwitch.vue +3 -1
  262. package/components/common/wizards/network/add/modals/SelectSwitch.vue +3 -1
  263. package/components/common/wizards/network/add/steps/ConnectionSettings.vue +4 -4
  264. package/components/common/wizards/network/add/steps/IpFourSettings.vue +13 -9
  265. package/components/common/wizards/network/add/steps/PhysicalAdapter.vue +1 -1
  266. package/components/common/wizards/network/add/steps/PortProperties.vue +13 -9
  267. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  268. package/components/common/wizards/network/add/steps/SelectedTargetDevice.vue +15 -15
  269. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  270. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  271. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  272. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +1 -1
  273. package/components/common/wizards/vm/migrate/select/computeResource/lib/config/tabsPannel.ts +1 -0
  274. package/components/common/wizards/vm/migrate/select/computeResource/tableView/TableView.vue +2 -2
  275. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  276. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  277. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  278. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  279. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +2 -2
  280. package/components/common/wizards/vm/migrate/select/storage/configure/batch/Batch.vue +2 -2
  281. package/components/common/wizards/vm/migrate/select/storage/configure/batch/table/Table.vue +2 -2
  282. package/components/common/wizards/vm/migrate/select/storage/configure/disk/Disk.vue +1 -1
  283. package/components/common/wizards/vm/migrate/select/storage/configure/disk/table/Table.vue +3 -3
  284. package/components/common/wizards/vm/migrate/select/storage/lib/config/tabsPannel.ts +1 -0
  285. package/components/common/wizards/vm/migrate/select/targetServer/lib/config/tabsPannel.ts +1 -0
  286. package/components/common/wizards/vm/migrate/select/targetServer/lib/models/types.ts +1 -1
  287. package/components/common/wizards/vm/migrate/select/targetServer/saved/Saved.vue +1 -1
  288. package/components/common/wizards/vm/migrate/select/targetServer/targetServer.vue +3 -3
  289. package/composables/productNameLocal.ts +30 -30
  290. package/composables/useAppVersion.ts +21 -21
  291. package/lib/models/store/host/interfaces.ts +1 -1
  292. package/lib/models/store/network/interfaces.ts +1 -1
  293. package/lib/models/store/storage/interfaces.ts +1 -1
  294. package/lib/models/store/vm/interfaces.ts +1 -1
  295. package/package.json +1 -1
  296. package/plugins/date.ts +233 -233
  297. package/plugins/directives.ts +24 -24
  298. package/public/spice-console/lib/images/bitmap.js +203 -203
  299. package/public/spice-console/network/spicechannel.js +383 -383
  300. package/store/main/mutations.ts +7 -7
  301. package/store/main/state.ts +7 -7
  302. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,798 +1,798 @@
1
- <template>
2
- <div class="clone-vm">
3
- <atoms-wizard
4
- show
5
- :wizard="wizard"
6
- :selected-scheme="selectedScheme"
7
- :title="title"
8
- :localization="localization"
9
- @change-steps="onChangeSteps"
10
- @hide="onHideModal"
11
- @submit="onFinish"
12
- >
13
- <template #modalBody="{ selectedStep }">
14
- <atoms-loader v-show="!vmSettings" id="loader" />
15
- <div v-if="vmSettings" class="vm-context">
16
- <common-pages-scheduled-tasks-modals-common-new-task-form
17
- v-show="selectedStep.id === dynamicSteps.scheduledTasks"
18
- v-model="newTaskForm"
19
- :target="selectedVirtualMachine"
20
- class="new-task-form"
21
- />
22
- <common-vm-actions-common-select-name
23
- v-show="
24
- selectedStep.id === dynamicSteps.selectName ||
25
- selectedStep.id === dynamicSteps.selectNameFolder
26
- "
27
- :show="
28
- selectedStep.id === dynamicSteps.selectName ||
29
- selectedStep.id === dynamicSteps.selectNameFolder
30
- "
31
- :name-form-submit="nameFormSubmit"
32
- :project="props.project"
33
- :data-center="props.dataCenter"
34
- @submit="onChangeName(...$event)"
35
- @check-name="emits('check-name', $event)"
36
- />
37
- <common-vm-actions-common-select-compute-resource
38
- v-if="isSphere"
39
- v-show="selectedStep.id === dynamicSteps.selectComputeResource"
40
- v-model="computeResource"
41
- :compute-resource-submit="computeResourceSubmit"
42
- :data-center="vmForm.dataCenter"
43
- :compute-resource="props.computeResource"
44
- :compute-resource-tree="props.computeResourceTree"
45
- @submit="onChangeComputeResource"
46
- @select-compute-resource-tree="onSelectComputeResourceTree"
47
- @get-compute-resource-tree="
48
- emits('get-compute-resource-tree', $event)
49
- "
50
- @show-compute-resource-tree="
51
- emits('show-compute-resource-tree', $event)
52
- "
53
- @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
54
- />
55
- <common-vm-actions-common-select-storage
56
- v-show="selectedStep.id === dynamicSteps.selectStorage"
57
- :storage-submit="storageSubmit"
58
- :datastore="props.datastore"
59
- :storage="vmSettings.storage"
60
- :get-datastore-table-func="props.getDatastoreTableFunc"
61
- @submit="onChangeStorage"
62
- />
63
- <common-vm-actions-common-select-options
64
- v-show="selectedStep.id === dynamicSteps.selectOptions"
65
- @change="onChangeSelectOptions"
66
- />
67
- <common-vm-actions-common-select-os
68
- v-show="selectedStep.id === dynamicSteps.selectGuestOSMachineType"
69
- v-model:machine-type="vmForm.guestMachineType"
70
- v-model:guest-os-family="vmForm.guestOsFamily"
71
- v-model:guest-os-version="vmForm.guestOsVersion"
72
- :families-options="guestOsFamilies"
73
- :versions-options="guestOsVersions"
74
- :machine-types-options="machineTypes"
75
- :error-validation-fields="props.errorValidationFields"
76
- @remove-error-by-title="emits('remove-error-by-title', $event)"
77
- />
78
- <common-vm-actions-common-customize-hardware
79
- v-show="selectedStep.id === dynamicSteps.customizeHardware"
80
- v-model:vm-name="vmName"
81
- v-model:guest-machine-type="vmSettings.guestMachineType"
82
- v-model:guest-os-family="vmSettings.guestOsFamily"
83
- v-model:guest-os-version="vmSettings.guestOsVersion"
84
- :storage="vmSettings.storage"
85
- :hard-disks-for-boot-options="virtualHardwareHardDisksLocal"
86
- :cd-dvd-drives-for-boot-options="virtualHardwareCdDvdDrivesLocal"
87
- :networks-for-boot-options="virtualHardwareNetworksLocal"
88
- :cd-dvd-drives="vmSettings.cdDvdDrives"
89
- :hard-disks="vmSettings.hardDisks"
90
- :networks="vmSettings.networks"
91
- :customize-hardware-submit="customizeHardwareSubmit"
92
- :max-cpus="vmSettings.maxCpus"
93
- :max-memory="vmSettings.maxMemory"
94
- :cpu-models="vmSettings.cpuModels"
95
- :cpu="vmSettings.cpu"
96
- :memory="vmSettings.memory"
97
- :video-card="vmSettings.videoCard"
98
- :usb-controller="vmSettings.usbController"
99
- :pci-devices="vmSettings.pciDevices"
100
- :selected-nav-item="selectedNavItem"
101
- :hard-disks-for-edit="vmSettings.hardDisks"
102
- :options="vmSettings.options"
103
- :nodes="props.nodes"
104
- :files="props.files"
105
- :networks-table="props.networksTable"
106
- :error-validation-fields="props.errorValidationFields"
107
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
108
- :passthrough-devices="props.passthroughDevices"
109
- :mediated-devices="props.mediatedDevices"
110
- :get-datastore-table-func="props.getDatastoreTableFunc"
111
- :datastore="props.datastore"
112
- :project="props.project"
113
- is-clone
114
- @change-boot-order="onChangeBootOrder"
115
- @send-data="onChangeCustomizeHardware"
116
- @get-storage="emits('get-storage', $event)"
117
- @get-folders-or-files="emits('get-folders-or-files', $event)"
118
- @get-active-device-child="emits('get-active-device-child', $event)"
119
- @show-datastore-child="emits('show-datastore-child', $event)"
120
- @get-networks-table="emits('get-networks-table', $event)"
121
- @get-pci-devices="emits('get-pci-devices')"
122
- />
123
- <common-ready-to-complete
124
- v-show="selectedStep.id === dynamicSteps.readyComplete"
125
- :data="props.readyCompleteTableInfo"
126
- />
127
- </div>
128
- </template>
129
- </atoms-wizard>
130
- </div>
131
- </template>
132
-
133
- <script setup lang="ts">
134
- import type {
135
- UI_I_DatastoreTableItem,
136
- UI_I_FolderOrFileTreePayload,
137
- } from '~/lib/models/store/storage/interfaces'
138
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
139
- import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
140
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
141
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
142
- import type {
143
- UI_I_ArbitraryObject,
144
- UI_I_Localization,
145
- } from '~/lib/models/interfaces'
146
- import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
147
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
148
- import type {
149
- UI_I_SendDataCpu,
150
- UI_I_SendDataMemory,
151
- UI_I_SendDataNewCdDvdDrive,
152
- UI_I_SendDataNewHardDisk,
153
- UI_I_SendDataNewNetwork,
154
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
155
- import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
156
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
157
- import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
158
- import type { UI_T_Project } from '~/lib/models/types'
159
- import type {
160
- UI_I_MediatedDevice,
161
- UI_I_PciDevice,
162
- UI_I_VmSettings,
163
- } from '~/lib/models/store/vm/interfaces'
164
- import type {
165
- UI_I_VmForm,
166
- } from '~/components/common/vm/actions/common/lib/models/interfaces'
167
- import type {
168
- UI_I_ValidationReturn,
169
- UI_I_WizardStep,
170
- } from '~/components/atoms/wizard/lib/models/interfaces'
171
- import type { UI_I_Capabilities } from '~/components/common/vm/actions/common/lib/models/interfaces'
172
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
173
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
174
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
175
- import {
176
- stepsSchemeInitial,
177
- stepsFunc,
178
- dynamicSteps,
179
- } from '~/components/common/vm/actions/clone/lib/config/steps'
180
- import Wizard from '~/components/atoms/wizard/lib/utils/utils'
181
- import { mapCapabilities } from '~/components/common/vm/actions/common/lib/utils/capabilities'
182
- import { scheduledTaskDefaultFormFunc } from '~/components/common/pages/scheduledTasks/modals/lib/config/createScheduledTask'
183
- import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
184
-
185
- const props = defineProps<{
186
- project: UI_T_Project
187
- vmSettings: UI_I_VmSettings | null
188
- nodes: UI_I_FileTreeNode[]
189
- files: UI_I_FileTreeNode[]
190
- networksTable: UI_I_NetworkTableItem[]
191
- datastore: UI_I_DatastoreTableItem[]
192
- errorValidationFields: UI_I_ErrorValidationField[]
193
- readyCompleteTableInfo: UI_I_TableInfoItem[]
194
- vmCpuHelpTextSecond: string
195
- finishFunc: any
196
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
197
- validateSendDataFunc: any
198
- passthroughDevices: UI_I_PciDevice[]
199
- mediatedDevices: UI_I_MediatedDevice[]
200
- vmNameInWizard: string
201
- capabilities?: UI_I_Capabilities
202
- schedulerTask?: any // TODO надо interface переместить глобално
203
- selectedVirtualMachine?: UI_I_Capabilities
204
- dataCenter?: UI_I_TreeNode // для сферы
205
- computeResource?: UI_I_TreeNode // для сферы
206
- computeResourceTree?: UI_I_TreeNode[] // для сферы
207
- }>()
208
-
209
- const emits = defineEmits<{
210
- (event: 'check-name', value: [string, (error: API_UI_I_Error) => void]): void
211
- (event: 'get-storage', value: UI_I_TablePayload): void
212
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
213
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
214
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
215
- (event: 'remove-error-by-title', value: string): void
216
- (event: 'get-networks-table', value: UI_I_TablePayload): void
217
- (event: 'get-pci-devices'): void
218
- (event: 'hide'): void
219
- (
220
- event: 'get-compute-resource-tree',
221
- value: { id: string | number; cb: () => void }
222
- ): void // для сферы
223
- (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
224
- (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
225
- (event: 'clear-compute-resource-tree'): void // для сферы
226
- }>()
227
-
228
- const { $recursion } = useNuxtApp()
229
-
230
- const localization = computed<UI_I_Localization>(() => useLocal())
231
-
232
- const isSphere = computed<boolean>(() => props.project === 'sphere')
233
-
234
- const isScheduledTasks = computed<boolean>(
235
- () => props.schedulerTask.isSchedulerTask
236
- )
237
-
238
- const title = computed<string>(() => {
239
- const { scheduleNewTasks, scheduleTaskEdit, cloneExistingVirtualMachine } =
240
- localization.value.common
241
-
242
- let result = cloneExistingVirtualMachine
243
- if (isScheduledTasks.value) {
244
- const schedulerMode = props.schedulerTask.editTask
245
- ? scheduleTaskEdit
246
- : scheduleNewTasks
247
-
248
- result = `${schedulerMode} (${cloneExistingVirtualMachine})`
249
- }
250
-
251
- return result
252
- })
253
-
254
- watch(
255
- () => props.capabilities,
256
- () => {
257
- if (props.capabilities) {
258
- mapCapabilities(props.capabilities)
259
- }
260
- },
261
- { deep: true, immediate: true }
262
- )
263
-
264
- const wizard: Wizard = new Wizard(
265
- stepsFunc(localization.value),
266
- stepsSchemeInitial
267
- )
268
- watch(
269
- isScheduledTasks,
270
- (newValue) => {
271
- if (newValue) {
272
- wizard.changeScheme(isSphere.value ? 12 : 4)
273
- } else {
274
- wizard.changeScheme(isSphere.value ? 8 : 0)
275
- wizard.selectStepHard(isSphere.value ? 2 : 1)
276
- }
277
- },
278
- { immediate: true }
279
- )
280
-
281
- // TODO move to common
282
- const newTaskForm = ref<UI_I_ScheduleNewTasksForm>(
283
- useDeepCopy(scheduledTaskDefaultFormFunc())
284
- )
285
- watch(
286
- newTaskForm,
287
- (newValue: UI_I_ScheduleNewTasksForm) => {
288
- if (isScheduledTasks.value) wizard.setDisabledNextButton(newValue.isValid)
289
- },
290
- { immediate: true, deep: true }
291
- )
292
-
293
- const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
294
-
295
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
296
- wizard.changeSteps(value, validationFunc, validateSendData)
297
- }
298
-
299
- const validationFunc = async (
300
- value: UI_I_WizardStep[],
301
- currentStep: UI_I_WizardStep,
302
- nextStep: UI_I_WizardStep
303
- ): Promise<UI_I_ValidationReturn> => {
304
- let stepHasError = false
305
- let stepShouldStop = {
306
- ifOnCurrentStep: false,
307
- ifFromAnyStep: false,
308
- stoppageStepId: -1,
309
- }
310
-
311
- wizard.setLoader(true)
312
- if (
313
- wizard.isValidateForStep(
314
- isSphere.value ? dynamicSteps.selectNameFolder : dynamicSteps.selectName,
315
- currentStep.id,
316
- nextStep.id
317
- )
318
- ) {
319
- const nameValidation = await checkName(value)
320
-
321
- value = nameValidation.newValue
322
- stepHasError = stepHasError || nameValidation.stepHasError
323
- } else if (
324
- isSphere.value &&
325
- wizard.isValidateForStep(
326
- dynamicSteps.selectComputeResource,
327
- currentStep.id,
328
- nextStep.id
329
- )
330
- ) {
331
- const computeResourceValidation = await checkComputeResource(value)
332
-
333
- value = computeResourceValidation.newValue
334
- stepHasError = stepHasError || computeResourceValidation.stepHasError
335
- } else if (
336
- wizard.isValidateForStep(
337
- dynamicSteps.selectStorage,
338
- currentStep.id,
339
- nextStep.id
340
- )
341
- ) {
342
- const storageValidation = await checkStorage(value)
343
-
344
- value = storageValidation.newValue
345
-
346
- stepHasError = stepHasError || storageValidation.stepHasError
347
- } else if (
348
- wizard.isValidateForStep(
349
- dynamicSteps.customizeHardware,
350
- currentStep.id,
351
- nextStep.id
352
- )
353
- ) {
354
- const customizeHardwareValidation = await checkCustomizeHardware(value)
355
-
356
- value = customizeHardwareValidation.newValue
357
-
358
- stepHasError = stepHasError || customizeHardwareValidation.stepHasError
359
- }
360
- wizard.setLoader(false)
361
-
362
- return {
363
- newValue: value,
364
- stepHasError,
365
- stepShouldStop,
366
- }
367
- }
368
- const checkName = async (
369
- value: UI_I_WizardStep[]
370
- ): Promise<UI_I_ValidationReturn> => {
371
- let stepHasError = false
372
-
373
- return new Promise((resolve) => {
374
- const step = isSphere.value
375
- ? dynamicSteps.selectNameFolder
376
- : dynamicSteps.selectName
377
- nameFormSubmit.value = (isValid: boolean) => {
378
- if (!isValid) {
379
- stepHasError = wizard.setValidation(step, 'name', {
380
- fieldMessage: 'aaa',
381
- alertMessage: 'aaa',
382
- })
383
- } else if (wizard.hasMessage(step, 'name')) {
384
- value = wizard.removeValidation(step, 'name', value)
385
- }
386
-
387
- resolve({
388
- stepHasError,
389
- newValue: value,
390
- })
391
- nameFormSubmit.value = null
392
- }
393
- })
394
- }
395
- const checkComputeResource = async (
396
- value: UI_I_WizardStep[]
397
- ): Promise<UI_I_ValidationReturn> => {
398
- let stepHasError = false
399
-
400
- return new Promise((resolve) => {
401
- computeResourceSubmit.value = (isValid: boolean) => {
402
- if (!isValid) {
403
- stepHasError = wizard.setValidation(
404
- dynamicSteps.selectComputeResource,
405
- 'computeResource',
406
- {
407
- fieldMessage: 'aaa',
408
- alertMessage: 'aaa',
409
- }
410
- )
411
- } else if (
412
- wizard.hasMessage(dynamicSteps.selectComputeResource, 'computeResource')
413
- ) {
414
- value = wizard.removeValidation(
415
- dynamicSteps.selectComputeResource,
416
- 'computeResource',
417
- value
418
- )
419
- }
420
-
421
- resolve({
422
- stepHasError,
423
- newValue: value,
424
- })
425
- computeResourceSubmit.value = null
426
- }
427
- })
428
- }
429
- const checkStorage = async (
430
- value: UI_I_WizardStep[]
431
- ): Promise<UI_I_ValidationReturn> => {
432
- let stepHasError = false
433
-
434
- return new Promise((resolve) => {
435
- storageSubmit.value = (isValid: boolean) => {
436
- if (!isValid) {
437
- stepHasError = wizard.setValidation(
438
- dynamicSteps.selectStorage,
439
- 'storage',
440
- {
441
- fieldMessage: 'aaa',
442
- alertMessage: 'aaa',
443
- }
444
- )
445
- } else if (wizard.hasMessage(dynamicSteps.selectStorage, 'storage')) {
446
- value = wizard.removeValidation(
447
- dynamicSteps.selectStorage,
448
- 'storage',
449
- value
450
- )
451
- }
452
-
453
- resolve({
454
- stepHasError,
455
- newValue: value,
456
- })
457
- storageSubmit.value = null
458
- }
459
- })
460
- }
461
- const checkCustomizeHardware = async (
462
- value: UI_I_WizardStep[]
463
- ): Promise<UI_I_ValidationReturn> => {
464
- let stepHasError = false
465
-
466
- return new Promise((resolve) => {
467
- customizeHardwareSubmit.value = (isValid: boolean) => {
468
- if (!isValid) {
469
- stepHasError = wizard.setValidation(
470
- dynamicSteps.customizeHardware,
471
- 'customizeHardware',
472
- {
473
- fieldMessage: 'aaa',
474
- alertMessage: 'aaa',
475
- }
476
- )
477
- } else if (
478
- wizard.hasMessage(dynamicSteps.customizeHardware, 'customizeHardware')
479
- ) {
480
- value = wizard.removeValidation(
481
- dynamicSteps.customizeHardware,
482
- 'customizeHardware',
483
- value
484
- )
485
- }
486
-
487
- resolve({
488
- stepHasError,
489
- newValue: value,
490
- })
491
- storageSubmit.value = null
492
- }
493
- })
494
- }
495
-
496
- const vmForm = ref<UI_I_VmForm>({
497
- name: '',
498
- compatibility: '',
499
- guestMachineType: null,
500
- guestOsFamily: null,
501
- guestOsVersion: null,
502
- computeResource: null,
503
- storage: null,
504
- locationPath: '',
505
- dataCenter: null,
506
- options: [],
507
- })
508
- const onChangeName = (name: string, node: UI_I_TreeNode): void => {
509
- vmForm.value.name = name
510
- if (isSphere.value) {
511
- vmForm.value.locationPath = node.id
512
- vmForm.value.dataCenter = $recursion.findParentByValue(
513
- node,
514
- 'datacenter',
515
- 'type',
516
- 'parent'
517
- )
518
- }
519
- }
520
- const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
521
- if (!storage) return
522
-
523
- vmForm.value.storage = storage
524
- }
525
- const onChangeSelectOptions = (options: string[]): void => {
526
- vmForm.value.options = options
527
- if (
528
- options.includes('customize-os') &&
529
- options.includes('customize-hardware')
530
- ) {
531
- let procuratorSchame = isScheduledTasks.value ? 7 : 3
532
- let sphereSchame = isScheduledTasks.value ? 15 : 11
533
- wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
534
- } else if (options.includes('customize-os')) {
535
- let procuratorSchame = isScheduledTasks.value ? 5 : 1
536
- let sphereSchame = isScheduledTasks.value ? 13 : 9
537
- wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
538
- } else if (options.includes('customize-hardware')) {
539
- let procuratorSchame = isScheduledTasks.value ? 6 : 2
540
- let sphereSchame = isScheduledTasks.value ? 14 : 10
541
- wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
542
- } else {
543
- let procuratorSchame = isScheduledTasks.value ? 4 : 0
544
- let sphereSchame = isScheduledTasks.value ? 12 : 8
545
- wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
546
- }
547
- }
548
- const customizeHardware = ref<UI_I_SendDataCustomizeHardware | null>(null)
549
- const onChangeCustomizeHardware = (
550
- data: UI_I_SendDataCustomizeHardware
551
- ): void => {
552
- customizeHardware.value = data
553
- }
554
-
555
- const virtualHardwareHardDisksLocal = computed<
556
- UI_I_SendDataNewHardDisk[] | null
557
- >(() => customizeHardware.value?.virtualHardware?.hardDisks || null)
558
- const virtualHardwareNetworksLocal = computed<UI_I_SendDataNewNetwork[] | null>(
559
- () => customizeHardware.value?.virtualHardware?.networks || null
560
- )
561
- const virtualHardwareCdDvdDrivesLocal = computed<
562
- UI_I_SendDataNewCdDvdDrive[] | null
563
- >(() => customizeHardware.value?.virtualHardware?.cdDvdDrives || null)
564
-
565
- const virtualHardwareCpu = computed<UI_I_SendDataCpu | null>(
566
- () => customizeHardware.value?.virtualHardware?.cpu || null
567
- )
568
- const virtualHardwareMemory = computed<UI_I_SendDataMemory | null>(
569
- () => customizeHardware.value?.virtualHardware?.memory || null
570
- )
571
- const virtualHardwareHardDisks = ref<UI_I_SendDataNewHardDisk[] | null>(null)
572
- const virtualHardwareCdDvdDrives = ref<UI_I_SendDataNewCdDvdDrive[] | null>(
573
- null
574
- )
575
- const virtualHardwareNetworks = ref<UI_I_SendDataNewNetwork[] | null>(null)
576
- const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
577
- virtualHardwareHardDisks.value = data[0]
578
- virtualHardwareCdDvdDrives.value = data[1]
579
- virtualHardwareNetworks.value = data[2]
580
- }
581
-
582
- const isPowerOnByDefault = ref<boolean>(true)
583
-
584
- watch(
585
- () => props.vmNameInWizard,
586
- (newValue) => {
587
- vmForm.value.name = newValue
588
- }
589
- )
590
-
591
- const validateSendData = async (
592
- value: UI_I_WizardStep[]
593
- ): Promise<UI_I_ValidationReturn> => {
594
- wizard.setLoader(true)
595
- let stepHasError = false
596
-
597
- const data = await props.validateSendDataFunc(
598
- vmForm.value,
599
- virtualHardwareCpu.value,
600
- virtualHardwareMemory.value,
601
- customizeHardware.value,
602
- virtualHardwareNetworks.value,
603
- virtualHardwareHardDisks.value,
604
- virtualHardwareCdDvdDrives.value,
605
- isPowerOnByDefault.value,
606
- localization.value,
607
- vmForm.value.locationPath, // для сферы
608
- computeResourcePath.value // для сферы
609
- )
610
-
611
- wizard.setLoader(false)
612
- if (data) {
613
- stepHasError = true
614
- selectedNavItem.value = data[0]
615
- }
616
-
617
- return {
618
- stepHasError,
619
- newValue: value,
620
- }
621
- }
622
- const onFinish = (): void => {
623
- wizard.setLoader(false)
624
- props
625
- .finishFunc(
626
- vmForm.value,
627
- virtualHardwareCpu.value,
628
- virtualHardwareMemory.value,
629
- customizeHardware.value,
630
- virtualHardwareNetworks.value,
631
- virtualHardwareHardDisks.value,
632
- virtualHardwareCdDvdDrives.value,
633
- isPowerOnByDefault.value,
634
- localization.value,
635
- vmForm.value.locationPath, // для сферы
636
- computeResourcePath.value, // для сферы
637
- false,
638
- newTaskForm.value,
639
- props.schedulerTask
640
- )
641
- .then(() => {
642
- onHideModal()
643
- wizard.setLoader(false)
644
- })
645
- }
646
-
647
- const selectedNavItem = ref<UI_T_SelectedNavItem>(0)
648
-
649
- const nameFormSubmit = ref<null | Function>(null)
650
- const computeResourceSubmit = ref<null | Function>(null)
651
- const storageSubmit = ref<null | Function>(null)
652
- const customizeHardwareSubmit = ref<null | Function>(null)
653
-
654
- const vmSettings = computed<UI_I_VmSettings | null>(() => props.vmSettings)
655
- const vmName = ref<string>(vmSettings.value?.name || '')
656
-
657
- const guestOsFamilies = ref<UI_I_OptionItem[]>(capabilities.guestOsFamilies)
658
- const guestOsVersions = ref<UI_I_ArbitraryObject<UI_I_OptionItem[]>>(
659
- capabilities.guestOsVersions
660
- )
661
- const machineTypes = ref<UI_I_OptionItem[]>(capabilities.machineTypes)
662
-
663
- const computeResource = ref<UI_I_TreeNode | null>(null)
664
- const onChangeComputeResource = (node: UI_I_TreeNode): void => {
665
- computeResource.value = node
666
- }
667
- // // Для сферы
668
- const computeResourcePath = ref<string>('')
669
- const onSelectComputeResourceTree = (node: UI_I_TreeNode): void => {
670
- emits('select-compute-resource-tree', node)
671
- computeResourcePath.value = node.id
672
- }
673
-
674
- watch(vmSettings, (newValue) => {
675
- vmName.value = newValue?.name || ''
676
-
677
- if (newValue?.guestOsFamily)
678
- vmForm.value.guestOsFamily = newValue.guestOsFamily
679
- if (newValue?.guestMachineType)
680
- vmForm.value.guestMachineType = newValue.guestMachineType
681
- if (newValue?.guestOsVersion)
682
- vmForm.value.guestOsVersion = newValue.guestOsVersion
683
-
684
- if (newValue?.compatibility)
685
- vmForm.value.compatibility = newValue.compatibility
686
- })
687
-
688
- const onHideModal = (): void => {
689
- emits('hide')
690
- }
691
- </script>
692
-
693
- <style scoped lang="scss">
694
- :deep(.has-solid.close-icon.clr-icon) {
695
- width: 20px;
696
- top: 0;
697
- }
698
- .vm-context {
699
- padding: 16px 15px 10px 10px;
700
- height: 100%;
701
- display: flex;
702
- flex-direction: column;
703
-
704
- .context-title-wrap {
705
- padding-bottom: 3px;
706
- border-bottom: 1px solid #a6a6a6;
707
-
708
- h4 {
709
- font-weight: 700;
710
- font-size: 13px;
711
- color: var(--vm-context-title);
712
- }
713
- p {
714
- font-weight: 400;
715
- font-size: 13px;
716
- color: var(--vm-context-sub-title);
717
- }
718
- }
719
-
720
- .finish-block {
721
- padding: 18px 24px 24px 24px;
722
-
723
- .add-hosts-ready-to-complete-mt-12 {
724
- margin-top: 12px;
725
-
726
- .add-hosts-ready-to-complete-bold {
727
- line-height: 18px;
728
- font-weight: 700;
729
- }
730
- }
731
- }
732
-
733
- .vm-hardware-version {
734
- align-self: flex-end;
735
- margin-top: auto;
736
- }
737
- }
738
-
739
- :deep(.modal .modal-dialog .modal-content .modal-footer) {
740
- flex: unset;
741
- height: unset;
742
- min-height: unset;
743
- }
744
- :deep(.wizard-modal-titlebar h3) {
745
- color: #000;
746
- font-size: 24px;
747
- font-weight: 200;
748
- line-height: 27px;
749
- margin: 0;
750
- padding: 0;
751
- }
752
- :deep(.clr-wizard-stepnav-item) {
753
- padding-left: 0;
754
- }
755
- :deep(.clr-wizard-stepnav
756
- .clr-wizard-stepnav-item
757
- button
758
- .clr-wizard-stepnav-link-title) {
759
- width: 189px;
760
- font-weight: 700;
761
- font-size: 13px;
762
- }
763
-
764
- #vm-wizard-notification {
765
- h3 {
766
- color: var(--global-font-color7);
767
- margin-top: 6px;
768
- }
769
- p {
770
- color: var(--global-font-color6);
771
- line-height: 16px;
772
- }
773
- }
774
-
775
- .power-on-by-default-wrap {
776
- display: flex;
777
- align-items: center;
778
-
779
- input {
780
- margin-right: 6px;
781
- }
782
- }
783
-
784
- .new-task-form {
785
- padding: 0 25px 0 5px;
786
- }
787
- </style>
788
-
789
- <style>
790
- :root {
791
- --vm-context-title: #333;
792
- --vm-context-sub-title: #000;
793
- }
794
- :root.dark-theme {
795
- --vm-context-title: #adbbc4;
796
- --vm-context-sub-title: #adbbc4;
797
- }
798
- </style>
1
+ <template>
2
+ <div class="clone-vm">
3
+ <atoms-wizard
4
+ show
5
+ :wizard="wizard"
6
+ :selected-scheme="selectedScheme"
7
+ :title="title"
8
+ :localization="localization"
9
+ @change-steps="onChangeSteps"
10
+ @hide="onHideModal"
11
+ @submit="onFinish"
12
+ >
13
+ <template #modalBody="{ selectedStep }">
14
+ <atoms-loader v-show="!vmSettings" id="loader" />
15
+ <div v-if="vmSettings" class="vm-context">
16
+ <common-pages-scheduled-tasks-modals-common-new-task-form
17
+ v-show="selectedStep.id === dynamicSteps.scheduledTasks"
18
+ v-model="newTaskForm"
19
+ :target="selectedVirtualMachine"
20
+ class="new-task-form"
21
+ />
22
+ <common-vm-actions-common-select-name
23
+ v-show="
24
+ selectedStep.id === dynamicSteps.selectName ||
25
+ selectedStep.id === dynamicSteps.selectNameFolder
26
+ "
27
+ :show="
28
+ selectedStep.id === dynamicSteps.selectName ||
29
+ selectedStep.id === dynamicSteps.selectNameFolder
30
+ "
31
+ :name-form-submit="nameFormSubmit"
32
+ :project="props.project"
33
+ :data-center="props.dataCenter"
34
+ @submit="onChangeName(...$event)"
35
+ @check-name="emits('check-name', $event)"
36
+ />
37
+ <common-vm-actions-common-select-compute-resource
38
+ v-if="isSphere"
39
+ v-show="selectedStep.id === dynamicSteps.selectComputeResource"
40
+ v-model="computeResource"
41
+ :compute-resource-submit="computeResourceSubmit"
42
+ :data-center="vmForm.dataCenter"
43
+ :compute-resource="props.computeResource"
44
+ :compute-resource-tree="props.computeResourceTree"
45
+ @submit="onChangeComputeResource"
46
+ @select-compute-resource-tree="onSelectComputeResourceTree"
47
+ @get-compute-resource-tree="
48
+ emits('get-compute-resource-tree', $event)
49
+ "
50
+ @show-compute-resource-tree="
51
+ emits('show-compute-resource-tree', $event)
52
+ "
53
+ @clear-compute-resource-tree="emits('clear-compute-resource-tree')"
54
+ />
55
+ <common-vm-actions-common-select-storage
56
+ v-show="selectedStep.id === dynamicSteps.selectStorage"
57
+ :storage-submit="storageSubmit"
58
+ :datastore="props.datastore"
59
+ :storage="vmSettings.storage"
60
+ :get-datastore-table-func="props.getDatastoreTableFunc"
61
+ @submit="onChangeStorage"
62
+ />
63
+ <common-vm-actions-common-select-options
64
+ v-show="selectedStep.id === dynamicSteps.selectOptions"
65
+ @change="onChangeSelectOptions"
66
+ />
67
+ <common-vm-actions-common-select-os
68
+ v-show="selectedStep.id === dynamicSteps.selectGuestOSMachineType"
69
+ v-model:machine-type="vmForm.guestMachineType"
70
+ v-model:guest-os-family="vmForm.guestOsFamily"
71
+ v-model:guest-os-version="vmForm.guestOsVersion"
72
+ :families-options="guestOsFamilies"
73
+ :versions-options="guestOsVersions"
74
+ :machine-types-options="machineTypes"
75
+ :error-validation-fields="props.errorValidationFields"
76
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
77
+ />
78
+ <common-vm-actions-common-customize-hardware
79
+ v-show="selectedStep.id === dynamicSteps.customizeHardware"
80
+ v-model:vm-name="vmName"
81
+ v-model:guest-machine-type="vmSettings.guestMachineType"
82
+ v-model:guest-os-family="vmSettings.guestOsFamily"
83
+ v-model:guest-os-version="vmSettings.guestOsVersion"
84
+ :storage="vmSettings.storage"
85
+ :hard-disks-for-boot-options="virtualHardwareHardDisksLocal"
86
+ :cd-dvd-drives-for-boot-options="virtualHardwareCdDvdDrivesLocal"
87
+ :networks-for-boot-options="virtualHardwareNetworksLocal"
88
+ :cd-dvd-drives="vmSettings.cdDvdDrives"
89
+ :hard-disks="vmSettings.hardDisks"
90
+ :networks="vmSettings.networks"
91
+ :customize-hardware-submit="customizeHardwareSubmit"
92
+ :max-cpus="vmSettings.maxCpus"
93
+ :max-memory="vmSettings.maxMemory"
94
+ :cpu-models="vmSettings.cpuModels"
95
+ :cpu="vmSettings.cpu"
96
+ :memory="vmSettings.memory"
97
+ :video-card="vmSettings.videoCard"
98
+ :usb-controller="vmSettings.usbController"
99
+ :pci-devices="vmSettings.pciDevices"
100
+ :selected-nav-item="selectedNavItem"
101
+ :hard-disks-for-edit="vmSettings.hardDisks"
102
+ :options="vmSettings.options"
103
+ :nodes="props.nodes"
104
+ :files="props.files"
105
+ :networks-table="props.networksTable"
106
+ :error-validation-fields="props.errorValidationFields"
107
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
108
+ :passthrough-devices="props.passthroughDevices"
109
+ :mediated-devices="props.mediatedDevices"
110
+ :get-datastore-table-func="props.getDatastoreTableFunc"
111
+ :datastore="props.datastore"
112
+ :project="props.project"
113
+ is-clone
114
+ @change-boot-order="onChangeBootOrder"
115
+ @send-data="onChangeCustomizeHardware"
116
+ @get-storage="emits('get-storage', $event)"
117
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
118
+ @get-active-device-child="emits('get-active-device-child', $event)"
119
+ @show-datastore-child="emits('show-datastore-child', $event)"
120
+ @get-networks-table="emits('get-networks-table', $event)"
121
+ @get-pci-devices="emits('get-pci-devices')"
122
+ />
123
+ <common-ready-to-complete
124
+ v-show="selectedStep.id === dynamicSteps.readyComplete"
125
+ :data="props.readyCompleteTableInfo"
126
+ />
127
+ </div>
128
+ </template>
129
+ </atoms-wizard>
130
+ </div>
131
+ </template>
132
+
133
+ <script setup lang="ts">
134
+ import type {
135
+ UI_I_DatastoreTableItem,
136
+ UI_I_FolderOrFileTreePayload,
137
+ } from '~/lib/models/store/storage/interfaces'
138
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
139
+ import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
140
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
141
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
142
+ import type {
143
+ UI_I_ArbitraryObject,
144
+ UI_I_Localization,
145
+ } from '~/lib/models/interfaces'
146
+ import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
147
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
148
+ import type {
149
+ UI_I_SendDataCpu,
150
+ UI_I_SendDataMemory,
151
+ UI_I_SendDataNewCdDvdDrive,
152
+ UI_I_SendDataNewHardDisk,
153
+ UI_I_SendDataNewNetwork,
154
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
155
+ import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
156
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
157
+ import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
158
+ import type { UI_T_Project } from '~/lib/models/types'
159
+ import type {
160
+ UI_I_MediatedDevice,
161
+ UI_I_PciDevice,
162
+ UI_I_VmSettings,
163
+ } from '~/lib/models/store/vm/interfaces'
164
+ import type {
165
+ UI_I_VmForm,
166
+ } from '~/components/common/vm/actions/common/lib/models/interfaces'
167
+ import type {
168
+ UI_I_ValidationReturn,
169
+ UI_I_WizardStep,
170
+ } from '~/components/atoms/wizard/lib/models/interfaces'
171
+ import type { UI_I_Capabilities } from '~/components/common/vm/actions/common/lib/models/interfaces'
172
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
173
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
174
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
175
+ import {
176
+ stepsSchemeInitial,
177
+ stepsFunc,
178
+ dynamicSteps,
179
+ } from '~/components/common/vm/actions/clone/lib/config/steps'
180
+ import Wizard from '~/components/atoms/wizard/lib/utils/utils'
181
+ import { mapCapabilities } from '~/components/common/vm/actions/common/lib/utils/capabilities'
182
+ import { scheduledTaskDefaultFormFunc } from '~/components/common/pages/scheduledTasks/modals/lib/config/createScheduledTask'
183
+ import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
184
+
185
+ const props = defineProps<{
186
+ project: UI_T_Project
187
+ vmSettings: UI_I_VmSettings | null
188
+ nodes: UI_I_FileTreeNode[]
189
+ files: UI_I_FileTreeNode[]
190
+ networksTable: UI_I_NetworkTableItem[]
191
+ datastore: UI_I_DatastoreTableItem[]
192
+ errorValidationFields: UI_I_ErrorValidationField[]
193
+ readyCompleteTableInfo: UI_I_TableInfoItem[]
194
+ vmCpuHelpTextSecond: string
195
+ finishFunc: any
196
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
197
+ validateSendDataFunc: any
198
+ passthroughDevices: UI_I_PciDevice[]
199
+ mediatedDevices: UI_I_MediatedDevice[]
200
+ vmNameInWizard: string
201
+ capabilities?: UI_I_Capabilities
202
+ schedulerTask?: any // TODO надо interface переместить глобално
203
+ selectedVirtualMachine?: UI_I_Capabilities
204
+ dataCenter?: UI_I_TreeNode // для сферы
205
+ computeResource?: UI_I_TreeNode // для сферы
206
+ computeResourceTree?: UI_I_TreeNode[] // для сферы
207
+ }>()
208
+
209
+ const emits = defineEmits<{
210
+ (event: 'check-name', value: [string, (error: API_UI_I_Error) => void]): void
211
+ (event: 'get-storage', value: UI_I_TablePayload): void
212
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
213
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
214
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
215
+ (event: 'remove-error-by-title', value: string): void
216
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
217
+ (event: 'get-pci-devices'): void
218
+ (event: 'hide'): void
219
+ (
220
+ event: 'get-compute-resource-tree',
221
+ value: { id: string | number; cb: () => void }
222
+ ): void // для сферы
223
+ (event: 'show-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
224
+ (event: 'select-compute-resource-tree', value: UI_I_TreeNode): void // для сферы
225
+ (event: 'clear-compute-resource-tree'): void // для сферы
226
+ }>()
227
+
228
+ const { $recursion } = useNuxtApp()
229
+
230
+ const localization = computed<UI_I_Localization>(() => useLocal())
231
+
232
+ const isSphere = computed<boolean>(() => props.project === 'sphere')
233
+
234
+ const isScheduledTasks = computed<boolean>(
235
+ () => props.schedulerTask.isSchedulerTask
236
+ )
237
+
238
+ const title = computed<string>(() => {
239
+ const { scheduleNewTasks, scheduleTaskEdit, cloneExistingVirtualMachine } =
240
+ localization.value.common
241
+
242
+ let result = cloneExistingVirtualMachine
243
+ if (isScheduledTasks.value) {
244
+ const schedulerMode = props.schedulerTask.editTask
245
+ ? scheduleTaskEdit
246
+ : scheduleNewTasks
247
+
248
+ result = `${schedulerMode} (${cloneExistingVirtualMachine})`
249
+ }
250
+
251
+ return result
252
+ })
253
+
254
+ watch(
255
+ () => props.capabilities,
256
+ () => {
257
+ if (props.capabilities) {
258
+ mapCapabilities(props.capabilities)
259
+ }
260
+ },
261
+ { deep: true, immediate: true }
262
+ )
263
+
264
+ const wizard: Wizard = new Wizard(
265
+ stepsFunc(localization.value),
266
+ stepsSchemeInitial
267
+ )
268
+ watch(
269
+ isScheduledTasks,
270
+ (newValue) => {
271
+ if (newValue) {
272
+ wizard.changeScheme(isSphere.value ? 12 : 4)
273
+ } else {
274
+ wizard.changeScheme(isSphere.value ? 8 : 0)
275
+ wizard.selectStepHard(isSphere.value ? 2 : 1)
276
+ }
277
+ },
278
+ { immediate: true }
279
+ )
280
+
281
+ // TODO move to common
282
+ const newTaskForm = ref<UI_I_ScheduleNewTasksForm>(
283
+ useDeepCopy(scheduledTaskDefaultFormFunc())
284
+ )
285
+ watch(
286
+ newTaskForm,
287
+ (newValue: UI_I_ScheduleNewTasksForm) => {
288
+ if (isScheduledTasks.value) wizard.setDisabledNextButton(newValue.isValid)
289
+ },
290
+ { immediate: true, deep: true }
291
+ )
292
+
293
+ const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
294
+
295
+ const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
296
+ wizard.changeSteps(value, validationFunc, validateSendData)
297
+ }
298
+
299
+ const validationFunc = async (
300
+ value: UI_I_WizardStep[],
301
+ currentStep: UI_I_WizardStep,
302
+ nextStep: UI_I_WizardStep
303
+ ): Promise<UI_I_ValidationReturn> => {
304
+ let stepHasError = false
305
+ let stepShouldStop = {
306
+ ifOnCurrentStep: false,
307
+ ifFromAnyStep: false,
308
+ stoppageStepId: -1,
309
+ }
310
+
311
+ wizard.setLoader(true)
312
+ if (
313
+ wizard.isValidateForStep(
314
+ isSphere.value ? dynamicSteps.selectNameFolder : dynamicSteps.selectName,
315
+ currentStep.id,
316
+ nextStep.id
317
+ )
318
+ ) {
319
+ const nameValidation = await checkName(value)
320
+
321
+ value = nameValidation.newValue
322
+ stepHasError = stepHasError || nameValidation.stepHasError
323
+ } else if (
324
+ isSphere.value &&
325
+ wizard.isValidateForStep(
326
+ dynamicSteps.selectComputeResource,
327
+ currentStep.id,
328
+ nextStep.id
329
+ )
330
+ ) {
331
+ const computeResourceValidation = await checkComputeResource(value)
332
+
333
+ value = computeResourceValidation.newValue
334
+ stepHasError = stepHasError || computeResourceValidation.stepHasError
335
+ } else if (
336
+ wizard.isValidateForStep(
337
+ dynamicSteps.selectStorage,
338
+ currentStep.id,
339
+ nextStep.id
340
+ )
341
+ ) {
342
+ const storageValidation = await checkStorage(value)
343
+
344
+ value = storageValidation.newValue
345
+
346
+ stepHasError = stepHasError || storageValidation.stepHasError
347
+ } else if (
348
+ wizard.isValidateForStep(
349
+ dynamicSteps.customizeHardware,
350
+ currentStep.id,
351
+ nextStep.id
352
+ )
353
+ ) {
354
+ const customizeHardwareValidation = await checkCustomizeHardware(value)
355
+
356
+ value = customizeHardwareValidation.newValue
357
+
358
+ stepHasError = stepHasError || customizeHardwareValidation.stepHasError
359
+ }
360
+ wizard.setLoader(false)
361
+
362
+ return {
363
+ newValue: value,
364
+ stepHasError,
365
+ stepShouldStop,
366
+ }
367
+ }
368
+ const checkName = async (
369
+ value: UI_I_WizardStep[]
370
+ ): Promise<UI_I_ValidationReturn> => {
371
+ let stepHasError = false
372
+
373
+ return new Promise((resolve) => {
374
+ const step = isSphere.value
375
+ ? dynamicSteps.selectNameFolder
376
+ : dynamicSteps.selectName
377
+ nameFormSubmit.value = (isValid: boolean) => {
378
+ if (!isValid) {
379
+ stepHasError = wizard.setValidation(step, 'name', {
380
+ fieldMessage: 'aaa',
381
+ alertMessage: 'aaa',
382
+ })
383
+ } else if (wizard.hasMessage(step, 'name')) {
384
+ value = wizard.removeValidation(step, 'name', value)
385
+ }
386
+
387
+ resolve({
388
+ stepHasError,
389
+ newValue: value,
390
+ })
391
+ nameFormSubmit.value = null
392
+ }
393
+ })
394
+ }
395
+ const checkComputeResource = async (
396
+ value: UI_I_WizardStep[]
397
+ ): Promise<UI_I_ValidationReturn> => {
398
+ let stepHasError = false
399
+
400
+ return new Promise((resolve) => {
401
+ computeResourceSubmit.value = (isValid: boolean) => {
402
+ if (!isValid) {
403
+ stepHasError = wizard.setValidation(
404
+ dynamicSteps.selectComputeResource,
405
+ 'computeResource',
406
+ {
407
+ fieldMessage: 'aaa',
408
+ alertMessage: 'aaa',
409
+ }
410
+ )
411
+ } else if (
412
+ wizard.hasMessage(dynamicSteps.selectComputeResource, 'computeResource')
413
+ ) {
414
+ value = wizard.removeValidation(
415
+ dynamicSteps.selectComputeResource,
416
+ 'computeResource',
417
+ value
418
+ )
419
+ }
420
+
421
+ resolve({
422
+ stepHasError,
423
+ newValue: value,
424
+ })
425
+ computeResourceSubmit.value = null
426
+ }
427
+ })
428
+ }
429
+ const checkStorage = async (
430
+ value: UI_I_WizardStep[]
431
+ ): Promise<UI_I_ValidationReturn> => {
432
+ let stepHasError = false
433
+
434
+ return new Promise((resolve) => {
435
+ storageSubmit.value = (isValid: boolean) => {
436
+ if (!isValid) {
437
+ stepHasError = wizard.setValidation(
438
+ dynamicSteps.selectStorage,
439
+ 'storage',
440
+ {
441
+ fieldMessage: 'aaa',
442
+ alertMessage: 'aaa',
443
+ }
444
+ )
445
+ } else if (wizard.hasMessage(dynamicSteps.selectStorage, 'storage')) {
446
+ value = wizard.removeValidation(
447
+ dynamicSteps.selectStorage,
448
+ 'storage',
449
+ value
450
+ )
451
+ }
452
+
453
+ resolve({
454
+ stepHasError,
455
+ newValue: value,
456
+ })
457
+ storageSubmit.value = null
458
+ }
459
+ })
460
+ }
461
+ const checkCustomizeHardware = async (
462
+ value: UI_I_WizardStep[]
463
+ ): Promise<UI_I_ValidationReturn> => {
464
+ let stepHasError = false
465
+
466
+ return new Promise((resolve) => {
467
+ customizeHardwareSubmit.value = (isValid: boolean) => {
468
+ if (!isValid) {
469
+ stepHasError = wizard.setValidation(
470
+ dynamicSteps.customizeHardware,
471
+ 'customizeHardware',
472
+ {
473
+ fieldMessage: 'aaa',
474
+ alertMessage: 'aaa',
475
+ }
476
+ )
477
+ } else if (
478
+ wizard.hasMessage(dynamicSteps.customizeHardware, 'customizeHardware')
479
+ ) {
480
+ value = wizard.removeValidation(
481
+ dynamicSteps.customizeHardware,
482
+ 'customizeHardware',
483
+ value
484
+ )
485
+ }
486
+
487
+ resolve({
488
+ stepHasError,
489
+ newValue: value,
490
+ })
491
+ storageSubmit.value = null
492
+ }
493
+ })
494
+ }
495
+
496
+ const vmForm = ref<UI_I_VmForm>({
497
+ name: '',
498
+ compatibility: '',
499
+ guestMachineType: null,
500
+ guestOsFamily: null,
501
+ guestOsVersion: null,
502
+ computeResource: null,
503
+ storage: null,
504
+ locationPath: '',
505
+ dataCenter: null,
506
+ options: [],
507
+ })
508
+ const onChangeName = (name: string, node: UI_I_TreeNode): void => {
509
+ vmForm.value.name = name
510
+ if (isSphere.value) {
511
+ vmForm.value.locationPath = node.id
512
+ vmForm.value.dataCenter = $recursion.findParentByValue(
513
+ node,
514
+ 'datacenter',
515
+ 'type',
516
+ 'parent'
517
+ )
518
+ }
519
+ }
520
+ const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
521
+ if (!storage) return
522
+
523
+ vmForm.value.storage = storage
524
+ }
525
+ const onChangeSelectOptions = (options: string[]): void => {
526
+ vmForm.value.options = options
527
+ if (
528
+ options.includes('customize-os') &&
529
+ options.includes('customize-hardware')
530
+ ) {
531
+ let procuratorSchame = isScheduledTasks.value ? 7 : 3
532
+ let sphereSchame = isScheduledTasks.value ? 15 : 11
533
+ wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
534
+ } else if (options.includes('customize-os')) {
535
+ let procuratorSchame = isScheduledTasks.value ? 5 : 1
536
+ let sphereSchame = isScheduledTasks.value ? 13 : 9
537
+ wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
538
+ } else if (options.includes('customize-hardware')) {
539
+ let procuratorSchame = isScheduledTasks.value ? 6 : 2
540
+ let sphereSchame = isScheduledTasks.value ? 14 : 10
541
+ wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
542
+ } else {
543
+ let procuratorSchame = isScheduledTasks.value ? 4 : 0
544
+ let sphereSchame = isScheduledTasks.value ? 12 : 8
545
+ wizard.changeScheme(isSphere.value ? sphereSchame : procuratorSchame)
546
+ }
547
+ }
548
+ const customizeHardware = ref<UI_I_SendDataCustomizeHardware | null>(null)
549
+ const onChangeCustomizeHardware = (
550
+ data: UI_I_SendDataCustomizeHardware
551
+ ): void => {
552
+ customizeHardware.value = data
553
+ }
554
+
555
+ const virtualHardwareHardDisksLocal = computed<
556
+ UI_I_SendDataNewHardDisk[] | null
557
+ >(() => customizeHardware.value?.virtualHardware?.hardDisks || null)
558
+ const virtualHardwareNetworksLocal = computed<UI_I_SendDataNewNetwork[] | null>(
559
+ () => customizeHardware.value?.virtualHardware?.networks || null
560
+ )
561
+ const virtualHardwareCdDvdDrivesLocal = computed<
562
+ UI_I_SendDataNewCdDvdDrive[] | null
563
+ >(() => customizeHardware.value?.virtualHardware?.cdDvdDrives || null)
564
+
565
+ const virtualHardwareCpu = computed<UI_I_SendDataCpu | null>(
566
+ () => customizeHardware.value?.virtualHardware?.cpu || null
567
+ )
568
+ const virtualHardwareMemory = computed<UI_I_SendDataMemory | null>(
569
+ () => customizeHardware.value?.virtualHardware?.memory || null
570
+ )
571
+ const virtualHardwareHardDisks = ref<UI_I_SendDataNewHardDisk[] | null>(null)
572
+ const virtualHardwareCdDvdDrives = ref<UI_I_SendDataNewCdDvdDrive[] | null>(
573
+ null
574
+ )
575
+ const virtualHardwareNetworks = ref<UI_I_SendDataNewNetwork[] | null>(null)
576
+ const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
577
+ virtualHardwareHardDisks.value = data[0]
578
+ virtualHardwareCdDvdDrives.value = data[1]
579
+ virtualHardwareNetworks.value = data[2]
580
+ }
581
+
582
+ const isPowerOnByDefault = ref<boolean>(true)
583
+
584
+ watch(
585
+ () => props.vmNameInWizard,
586
+ (newValue) => {
587
+ vmForm.value.name = newValue
588
+ }
589
+ )
590
+
591
+ const validateSendData = async (
592
+ value: UI_I_WizardStep[]
593
+ ): Promise<UI_I_ValidationReturn> => {
594
+ wizard.setLoader(true)
595
+ let stepHasError = false
596
+
597
+ const data = await props.validateSendDataFunc(
598
+ vmForm.value,
599
+ virtualHardwareCpu.value,
600
+ virtualHardwareMemory.value,
601
+ customizeHardware.value,
602
+ virtualHardwareNetworks.value,
603
+ virtualHardwareHardDisks.value,
604
+ virtualHardwareCdDvdDrives.value,
605
+ isPowerOnByDefault.value,
606
+ localization.value,
607
+ vmForm.value.locationPath, // для сферы
608
+ computeResourcePath.value // для сферы
609
+ )
610
+
611
+ wizard.setLoader(false)
612
+ if (data) {
613
+ stepHasError = true
614
+ selectedNavItem.value = data[0]
615
+ }
616
+
617
+ return {
618
+ stepHasError,
619
+ newValue: value,
620
+ }
621
+ }
622
+ const onFinish = (): void => {
623
+ wizard.setLoader(false)
624
+ props
625
+ .finishFunc(
626
+ vmForm.value,
627
+ virtualHardwareCpu.value,
628
+ virtualHardwareMemory.value,
629
+ customizeHardware.value,
630
+ virtualHardwareNetworks.value,
631
+ virtualHardwareHardDisks.value,
632
+ virtualHardwareCdDvdDrives.value,
633
+ isPowerOnByDefault.value,
634
+ localization.value,
635
+ vmForm.value.locationPath, // для сферы
636
+ computeResourcePath.value, // для сферы
637
+ false,
638
+ newTaskForm.value,
639
+ props.schedulerTask
640
+ )
641
+ .then(() => {
642
+ onHideModal()
643
+ wizard.setLoader(false)
644
+ })
645
+ }
646
+
647
+ const selectedNavItem = ref<UI_T_SelectedNavItem>(0)
648
+
649
+ const nameFormSubmit = ref<null | Function>(null)
650
+ const computeResourceSubmit = ref<null | Function>(null)
651
+ const storageSubmit = ref<null | Function>(null)
652
+ const customizeHardwareSubmit = ref<null | Function>(null)
653
+
654
+ const vmSettings = computed<UI_I_VmSettings | null>(() => props.vmSettings)
655
+ const vmName = ref<string>(vmSettings.value?.name || '')
656
+
657
+ const guestOsFamilies = ref<UI_I_OptionItem[]>(capabilities.guestOsFamilies)
658
+ const guestOsVersions = ref<UI_I_ArbitraryObject<UI_I_OptionItem[]>>(
659
+ capabilities.guestOsVersions
660
+ )
661
+ const machineTypes = ref<UI_I_OptionItem[]>(capabilities.machineTypes)
662
+
663
+ const computeResource = ref<UI_I_TreeNode | null>(null)
664
+ const onChangeComputeResource = (node: UI_I_TreeNode): void => {
665
+ computeResource.value = node
666
+ }
667
+ // // Для сферы
668
+ const computeResourcePath = ref<string>('')
669
+ const onSelectComputeResourceTree = (node: UI_I_TreeNode): void => {
670
+ emits('select-compute-resource-tree', node)
671
+ computeResourcePath.value = node.id
672
+ }
673
+
674
+ watch(vmSettings, (newValue) => {
675
+ vmName.value = newValue?.name || ''
676
+
677
+ if (newValue?.guestOsFamily)
678
+ vmForm.value.guestOsFamily = newValue.guestOsFamily
679
+ if (newValue?.guestMachineType)
680
+ vmForm.value.guestMachineType = newValue.guestMachineType
681
+ if (newValue?.guestOsVersion)
682
+ vmForm.value.guestOsVersion = newValue.guestOsVersion
683
+
684
+ if (newValue?.compatibility)
685
+ vmForm.value.compatibility = newValue.compatibility
686
+ })
687
+
688
+ const onHideModal = (): void => {
689
+ emits('hide')
690
+ }
691
+ </script>
692
+
693
+ <style scoped lang="scss">
694
+ :deep(.has-solid.close-icon.clr-icon) {
695
+ width: 20px;
696
+ top: 0;
697
+ }
698
+ .vm-context {
699
+ padding: 16px 15px 10px 10px;
700
+ height: 100%;
701
+ display: flex;
702
+ flex-direction: column;
703
+
704
+ .context-title-wrap {
705
+ padding-bottom: 3px;
706
+ border-bottom: 1px solid #a6a6a6;
707
+
708
+ h4 {
709
+ font-weight: 700;
710
+ font-size: 13px;
711
+ color: var(--vm-context-title);
712
+ }
713
+ p {
714
+ font-weight: 400;
715
+ font-size: 13px;
716
+ color: var(--vm-context-sub-title);
717
+ }
718
+ }
719
+
720
+ .finish-block {
721
+ padding: 18px 24px 24px 24px;
722
+
723
+ .add-hosts-ready-to-complete-mt-12 {
724
+ margin-top: 12px;
725
+
726
+ .add-hosts-ready-to-complete-bold {
727
+ line-height: 18px;
728
+ font-weight: 700;
729
+ }
730
+ }
731
+ }
732
+
733
+ .vm-hardware-version {
734
+ align-self: flex-end;
735
+ margin-top: auto;
736
+ }
737
+ }
738
+
739
+ :deep(.modal .modal-dialog .modal-content .modal-footer) {
740
+ flex: unset;
741
+ height: unset;
742
+ min-height: unset;
743
+ }
744
+ :deep(.wizard-modal-titlebar h3) {
745
+ color: #000;
746
+ font-size: 24px;
747
+ font-weight: 200;
748
+ line-height: 27px;
749
+ margin: 0;
750
+ padding: 0;
751
+ }
752
+ :deep(.clr-wizard-stepnav-item) {
753
+ padding-left: 0;
754
+ }
755
+ :deep(.clr-wizard-stepnav
756
+ .clr-wizard-stepnav-item
757
+ button
758
+ .clr-wizard-stepnav-link-title) {
759
+ width: 189px;
760
+ font-weight: 700;
761
+ font-size: 13px;
762
+ }
763
+
764
+ #vm-wizard-notification {
765
+ h3 {
766
+ color: var(--global-font-color7);
767
+ margin-top: 6px;
768
+ }
769
+ p {
770
+ color: var(--global-font-color6);
771
+ line-height: 16px;
772
+ }
773
+ }
774
+
775
+ .power-on-by-default-wrap {
776
+ display: flex;
777
+ align-items: center;
778
+
779
+ input {
780
+ margin-right: 6px;
781
+ }
782
+ }
783
+
784
+ .new-task-form {
785
+ padding: 0 25px 0 5px;
786
+ }
787
+ </style>
788
+
789
+ <style>
790
+ :root {
791
+ --vm-context-title: #333;
792
+ --vm-context-sub-title: #000;
793
+ }
794
+ :root.dark-theme {
795
+ --vm-context-title: #adbbc4;
796
+ --vm-context-sub-title: #adbbc4;
797
+ }
798
+ </style>