bfg-common 1.5.42 → 1.5.44

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 (197) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/assets/scss/common/normalize.scss +339 -339
  7. package/components/atoms/TheIcon3.vue +50 -50
  8. package/components/atoms/collapse/CollapseNav.vue +165 -165
  9. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  10. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  11. package/components/atoms/perPage/PerPage.vue +58 -58
  12. package/components/atoms/stack/StackBlock.vue +185 -185
  13. package/components/atoms/table/dataGrid/DataGrid.vue +1 -1
  14. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  15. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  16. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  17. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  18. package/components/atoms/tooltip/Signpost.vue +227 -227
  19. package/components/common/accordion/Recursion.vue +222 -222
  20. package/components/common/browse/BrowseNew.vue +237 -237
  21. package/components/common/browse/BrowseOld.vue +217 -217
  22. package/components/common/browse/blocks/contents/Files.vue +37 -37
  23. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  24. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  25. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  26. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  27. package/components/common/browse/lib/models/interfaces.ts +5 -5
  28. package/components/common/context/Context.vue +111 -111
  29. package/components/common/context/lib/models/interfaces.ts +31 -31
  30. package/components/common/context/recursion/Recursion.vue +87 -87
  31. package/components/common/context/recursion/RecursionNew.vue +238 -238
  32. package/components/common/context/recursion/RecursionOld.vue +228 -228
  33. package/components/common/details/DetailsItem.vue +109 -109
  34. package/components/common/diagramMain/DiagramMain.vue +897 -897
  35. package/components/common/diagramMain/Header.vue +214 -214
  36. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  37. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  38. package/components/common/diagramMain/lib/models/types.ts +21 -21
  39. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  40. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  41. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  42. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  43. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  44. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  45. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  46. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  47. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  48. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  49. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  50. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  51. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  52. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  53. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  54. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  55. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  57. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  58. package/components/common/diagramMain/port/Ports.vue +47 -47
  59. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  60. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  61. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  62. package/components/common/mainNavigationPanel/MainNavigationPanelNew.vue +336 -336
  63. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +311 -311
  64. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  65. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  66. package/components/common/pages/home/StatusContent.vue +49 -49
  67. package/components/common/pages/home/headline/Headline.vue +45 -45
  68. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  69. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  70. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  71. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  72. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  73. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  74. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  75. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  76. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  77. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  78. package/components/common/pages/packages/Packages.vue +208 -208
  79. package/components/common/pages/shortcuts/block/BlockNew.vue +96 -96
  80. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  81. package/components/common/portlets/customAttributes/Portlet.vue +667 -667
  82. package/components/common/portlets/tag/Portlet.vue +433 -433
  83. package/components/common/recursionTree/RecursionTree.vue +223 -223
  84. package/components/common/select/button/ButtonDropdown.vue +108 -108
  85. package/components/common/spiceConsole/Drawer.vue +370 -370
  86. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  87. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  88. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  89. package/components/common/split/vertical/Vertical.vue +160 -160
  90. package/components/common/tools/Actions.vue +188 -188
  91. package/components/common/vm/actions/add/Add.vue +774 -772
  92. package/components/common/vm/actions/add/lib/config/steps.ts +247 -247
  93. package/components/common/vm/actions/clone/Clone.vue +798 -668
  94. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -178
  95. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +634 -634
  96. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  97. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +275 -275
  98. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +274 -274
  99. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +177 -177
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +698 -698
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +410 -410
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +99 -99
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +164 -164
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +368 -368
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +232 -232
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +250 -250
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +286 -286
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  144. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  145. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  146. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  163. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  164. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  165. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  166. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  167. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  168. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  169. package/components/common/vm/actions/common/lib/models/interfaces.ts +1 -0
  170. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -51
  171. package/components/common/vm/actions/common/select/createType/CreateType.vue +74 -74
  172. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  173. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  174. package/components/common/vm/actions/common/select/template/Template.vue +65 -65
  175. package/components/common/vm/actions/common/select/template/TemplateTreeView.vue +88 -88
  176. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  177. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  178. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +60 -60
  179. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +92 -92
  180. package/components/common/wizards/network/add/steps/SelectConnectionType.vue +105 -105
  181. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  182. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  183. package/components/common/wizards/vm/migrate/select/network/table/network/Network.vue +150 -150
  184. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  185. package/components/common/wizards/vm/migrate/select/priority/Priority.vue +43 -43
  186. package/composables/productNameLocal.ts +30 -30
  187. package/composables/useAppVersion.ts +21 -21
  188. package/lib/models/store/interfaces.ts +1 -0
  189. package/lib/models/store/vm/interfaces.ts +2 -0
  190. package/package.json +1 -1
  191. package/plugins/date.ts +233 -233
  192. package/plugins/directives.ts +24 -24
  193. package/public/spice-console/lib/images/bitmap.js +203 -203
  194. package/public/spice-console/network/spicechannel.js +383 -383
  195. package/store/main/mutations.ts +7 -7
  196. package/store/main/state.ts +7 -7
  197. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,668 +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="selectedStep.id === dynamicSteps.selectName"
24
- :show="selectedStep.id === dynamicSteps.selectName"
25
- :name-form-submit="nameFormSubmit"
26
- :project="props.project"
27
- @submit="onChangeName(...$event)"
28
- @check-name="emits('check-name', $event)"
29
- />
30
- <common-vm-actions-common-select-storage
31
- v-show="selectedStep.id === dynamicSteps.selectStorage"
32
- :storage-submit="storageSubmit"
33
- :datastore="props.datastore"
34
- :storage="vmSettings.storage"
35
- :get-datastore-table-func="props.getDatastoreTableFunc"
36
- @submit="onChangeStorage"
37
- />
38
- <common-vm-actions-common-select-options
39
- v-show="selectedStep.id === dynamicSteps.selectOptions"
40
- @change="onChangeSelectOptions"
41
- />
42
- <common-vm-actions-common-select-os
43
- v-show="selectedStep.id === dynamicSteps.selectGuestOSMachineType"
44
- v-model:machine-type="guestMachineType"
45
- v-model:guest-os-family="guestOsFamily"
46
- v-model:guest-os-version="guestOsVersion"
47
- :families-options="guestOsFamilies"
48
- :versions-options="guestOsVersions"
49
- :machine-types-options="machineTypes"
50
- :error-validation-fields="props.errorValidationFields"
51
- @remove-error-by-title="emits('remove-error-by-title', $event)"
52
- />
53
- <common-vm-actions-common-customize-hardware
54
- v-show="selectedStep.id === dynamicSteps.customizeHardware"
55
- v-model:vm-name="vmName"
56
- v-model:guest-machine-type="vmSettings.guestMachineType"
57
- v-model:guest-os-family="vmSettings.guestOsFamily"
58
- v-model:guest-os-version="vmSettings.guestOsVersion"
59
- :storage="vmSettings.storage"
60
- :hard-disks-for-boot-options="virtualHardwareHardDisksLocal"
61
- :cd-dvd-drives-for-boot-options="virtualHardwareCdDvdDrivesLocal"
62
- :networks-for-boot-options="virtualHardwareNetworksLocal"
63
- :cd-dvd-drives="vmSettings.cdDvdDrives"
64
- :hard-disks="vmSettings.hardDisks"
65
- :networks="vmSettings.networks"
66
- :customize-hardware-submit="customizeHardwareSubmit"
67
- :max-cpus="vmSettings.maxCpus"
68
- :max-memory="vmSettings.maxMemory"
69
- :cpu-models="vmSettings.cpuModels"
70
- :cpu="vmSettings.cpu"
71
- :memory="vmSettings.memory"
72
- :video-card="vmSettings.videoCard"
73
- :usb-controller="vmSettings.usbController"
74
- :pci-devices="vmSettings.pciDevices"
75
- :selected-nav-item="selectedNavItem"
76
- :hard-disks-for-edit="vmSettings.hardDisks"
77
- :options="vmSettings.options"
78
- :nodes="props.nodes"
79
- :files="props.files"
80
- :networks-table="props.networksTable"
81
- :error-validation-fields="props.errorValidationFields"
82
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
83
- :passthrough-devices="props.passthroughDevices"
84
- :mediated-devices="props.mediatedDevices"
85
- :get-datastore-table-func="props.getDatastoreTableFunc"
86
- :datastore="props.datastore"
87
- :project="props.project"
88
- is-clone
89
- @change-boot-order="onChangeBootOrder"
90
- @send-data="onChangeCustomizeHardware"
91
- @get-storage="emits('get-storage', $event)"
92
- @get-folders-or-files="emits('get-folders-or-files', $event)"
93
- @get-active-device-child="emits('get-active-device-child', $event)"
94
- @show-datastore-child="emits('show-datastore-child', $event)"
95
- @get-networks-table="emits('get-networks-table', $event)"
96
- @get-pci-devices="emits('get-pci-devices')"
97
- />
98
- <common-ready-to-complete
99
- v-show="selectedStep.id === dynamicSteps.readyComplete"
100
- :data="props.readyCompleteTableInfo"
101
- />
102
- </div>
103
- </template>
104
- </atoms-wizard>
105
- </div>
106
- </template>
107
-
108
- <script setup lang="ts">
109
- import type {
110
- UI_I_DatastoreTableItem,
111
- UI_I_FolderOrFileTreePayload,
112
- } from '~/lib/models/store/storage/interfaces'
113
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
114
- import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
115
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
116
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
117
- import type {
118
- UI_I_ArbitraryObject,
119
- UI_I_Localization,
120
- } from '~/lib/models/interfaces'
121
- import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
122
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
123
- import type {
124
- UI_I_SendDataCpu,
125
- UI_I_SendDataMemory,
126
- UI_I_SendDataNewCdDvdDrive,
127
- UI_I_SendDataNewHardDisk,
128
- UI_I_SendDataNewNetwork,
129
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
130
- import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
131
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
132
- import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
133
- import type { UI_T_Project } from '~/lib/models/types'
134
- import type {
135
- UI_I_MediatedDevice,
136
- UI_I_PciDevice,
137
- UI_I_VmSettings,
138
- } from '~/lib/models/store/vm/interfaces'
139
- import type {
140
- // I_DynamicSteps,
141
- UI_I_VmForm,
142
- } from '~/components/common/vm/actions/clone/lib/models/interfaces'
143
- import type {
144
- UI_I_ValidationReturn,
145
- UI_I_WizardStep,
146
- } from '~/components/atoms/wizard/lib/models/interfaces'
147
- import type { UI_I_Capabilities } from '~/components/common/vm/actions/common/lib/models/interfaces'
148
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
149
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
150
- import {
151
- stepsSchemeInitial,
152
- stepsFunc,
153
- dynamicSteps,
154
- } from '~/components/common/vm/actions/clone/lib/config/steps'
155
- import Wizard from '~/components/atoms/wizard/lib/utils/utils'
156
- import { mapCapabilities } from '~/components/common/vm/actions/common/lib/utils/capabilities'
157
- import { scheduledTaskDefaultFormFunc } from '~/components/common/pages/scheduledTasks/modals/lib/config/createScheduledTask'
158
- import { capabilities } from '~/components/common/vm/actions/common/lib/config/capabilities'
159
-
160
- const props = defineProps<{
161
- project: UI_T_Project
162
- vmSettings: UI_I_VmSettings | null
163
- nodes: UI_I_FileTreeNode[]
164
- files: UI_I_FileTreeNode[]
165
- networksTable: UI_I_NetworkTableItem[]
166
- datastore: UI_I_DatastoreTableItem[]
167
- errorValidationFields: UI_I_ErrorValidationField[]
168
- readyCompleteTableInfo: UI_I_TableInfoItem[]
169
- vmCpuHelpTextSecond: string
170
- finishFunc: any
171
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
172
- validateSendDataFunc: any
173
- passthroughDevices: UI_I_PciDevice[]
174
- mediatedDevices: UI_I_MediatedDevice[]
175
- vmNameInWizard: string
176
- capabilities?: UI_I_Capabilities
177
- schedulerTask?: any // TODO надо interface переместить глобално
178
- selectedVirtualMachine?: UI_I_Capabilities
179
- }>()
180
-
181
- const emits = defineEmits<{
182
- (event: 'check-name', value: [string, (error: API_UI_I_Error) => void]): void
183
- (event: 'get-storage', value: UI_I_TablePayload): void
184
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
185
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
186
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
187
- (event: 'remove-error-by-title', value: string): void
188
- (event: 'get-networks-table', value: UI_I_TablePayload): void
189
- (event: 'get-pci-devices'): void
190
- (event: 'hide'): void
191
- }>()
192
-
193
- const localization = computed<UI_I_Localization>(() => useLocal())
194
-
195
- const isScheduledTasks = computed<boolean>(
196
- () => props.schedulerTask.isSchedulerTask
197
- )
198
-
199
- const title = computed<string>(() => {
200
- const { scheduleNewTasks, scheduleTaskEdit, cloneExistingVirtualMachine } =
201
- localization.value.common
202
-
203
- let result = cloneExistingVirtualMachine
204
- if (isScheduledTasks.value) {
205
- const schedulerMode = props.schedulerTask.editTask
206
- ? scheduleTaskEdit
207
- : scheduleNewTasks
208
-
209
- result = `${schedulerMode} (${cloneExistingVirtualMachine})`
210
- }
211
-
212
- return result
213
- })
214
-
215
- watch(
216
- () => props.capabilities,
217
- () => {
218
- if (props.capabilities) {
219
- mapCapabilities(props.capabilities)
220
- }
221
- },
222
- { deep: true, immediate: true }
223
- )
224
-
225
- const wizard: Wizard = new Wizard(
226
- stepsFunc(localization.value),
227
- stepsSchemeInitial
228
- )
229
- watch(
230
- isScheduledTasks,
231
- (newValue) => {
232
- wizard.changeScheme(newValue ? 4 : 0)
233
- if (!newValue) {
234
- wizard.selectStepHard(1)
235
- }
236
- },
237
- { immediate: true }
238
- )
239
-
240
- // TODO move to common
241
- const newTaskForm = ref<UI_I_ScheduleNewTasksForm>(
242
- useDeepCopy(scheduledTaskDefaultFormFunc())
243
- )
244
- watch(
245
- newTaskForm,
246
- (newValue: UI_I_ScheduleNewTasksForm) => {
247
- if (isScheduledTasks.value) wizard.setDisabledNextButton(newValue.isValid)
248
- },
249
- { immediate: true, deep: true }
250
- )
251
-
252
- const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
253
-
254
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
255
- wizard.changeSteps(value, validationFunc, validateSendData)
256
- }
257
-
258
- const validationFunc = async (
259
- value: UI_I_WizardStep[],
260
- currentStep: UI_I_WizardStep,
261
- nextStep: UI_I_WizardStep
262
- ): Promise<UI_I_ValidationReturn> => {
263
- let stepHasError = false
264
- let stepShouldStop = {
265
- ifOnCurrentStep: false,
266
- ifFromAnyStep: false,
267
- stoppageStepId: -1,
268
- }
269
-
270
- wizard.setLoader(true)
271
- if (
272
- wizard.isValidateForStep(
273
- dynamicSteps.selectName,
274
- currentStep.id,
275
- nextStep.id
276
- )
277
- ) {
278
- const nameValidation = await checkName(value)
279
-
280
- value = nameValidation.newValue
281
- stepHasError = stepHasError || nameValidation.stepHasError
282
- } else if (
283
- wizard.isValidateForStep(
284
- dynamicSteps.selectStorage,
285
- currentStep.id,
286
- nextStep.id
287
- )
288
- ) {
289
- const storageValidation = await checkStorage(value)
290
-
291
- value = storageValidation.newValue
292
-
293
- stepHasError = stepHasError || storageValidation.stepHasError
294
- } else if (
295
- wizard.isValidateForStep(
296
- dynamicSteps.customizeHardware,
297
- currentStep.id,
298
- nextStep.id
299
- )
300
- ) {
301
- const customizeHardwareValidation = await checkCustomizeHardware(value)
302
-
303
- value = customizeHardwareValidation.newValue
304
-
305
- stepHasError = stepHasError || customizeHardwareValidation.stepHasError
306
- }
307
- wizard.setLoader(false)
308
-
309
- return {
310
- newValue: value,
311
- stepHasError,
312
- stepShouldStop,
313
- }
314
- }
315
- const checkName = async (
316
- value: UI_I_WizardStep[]
317
- ): Promise<UI_I_ValidationReturn> => {
318
- let stepHasError = false
319
-
320
- return new Promise((resolve) => {
321
- nameFormSubmit.value = (isValid: boolean) => {
322
- if (!isValid) {
323
- stepHasError = wizard.setValidation(dynamicSteps.selectName, 'name', {
324
- fieldMessage: 'aaa',
325
- alertMessage: 'aaa',
326
- })
327
- } else if (wizard.hasMessage(dynamicSteps.selectName, 'name')) {
328
- value = wizard.removeValidation(dynamicSteps.selectName, 'name', value)
329
- }
330
-
331
- resolve({
332
- stepHasError,
333
- newValue: value,
334
- })
335
- nameFormSubmit.value = null
336
- }
337
- })
338
- }
339
- const checkStorage = async (
340
- value: UI_I_WizardStep[]
341
- ): Promise<UI_I_ValidationReturn> => {
342
- let stepHasError = false
343
-
344
- return new Promise((resolve) => {
345
- storageSubmit.value = (isValid: boolean) => {
346
- if (!isValid) {
347
- stepHasError = wizard.setValidation(
348
- dynamicSteps.selectStorage,
349
- 'storage',
350
- {
351
- fieldMessage: 'aaa',
352
- alertMessage: 'aaa',
353
- }
354
- )
355
- } else if (wizard.hasMessage(dynamicSteps.selectStorage, 'storage')) {
356
- value = wizard.removeValidation(
357
- dynamicSteps.selectStorage,
358
- 'storage',
359
- value
360
- )
361
- }
362
-
363
- resolve({
364
- stepHasError,
365
- newValue: value,
366
- })
367
- storageSubmit.value = null
368
- }
369
- })
370
- }
371
- const checkCustomizeHardware = async (
372
- value: UI_I_WizardStep[]
373
- ): Promise<UI_I_ValidationReturn> => {
374
- let stepHasError = false
375
-
376
- return new Promise((resolve) => {
377
- customizeHardwareSubmit.value = (isValid: boolean) => {
378
- if (!isValid) {
379
- stepHasError = wizard.setValidation(
380
- dynamicSteps.customizeHardware,
381
- 'customizeHardware',
382
- {
383
- fieldMessage: 'aaa',
384
- alertMessage: 'aaa',
385
- }
386
- )
387
- } else if (
388
- wizard.hasMessage(dynamicSteps.customizeHardware, 'customizeHardware')
389
- ) {
390
- value = wizard.removeValidation(
391
- dynamicSteps.customizeHardware,
392
- 'customizeHardware',
393
- value
394
- )
395
- }
396
-
397
- resolve({
398
- stepHasError,
399
- newValue: value,
400
- })
401
- storageSubmit.value = null
402
- }
403
- })
404
- }
405
-
406
- const storageIdCash = ref<string | null>(null)
407
- const vmForm = ref<UI_I_VmForm>({
408
- name: '',
409
- storage: null,
410
- options: [],
411
- })
412
- const onChangeName = (name: string): void => {
413
- vmForm.value.name = name
414
- }
415
- const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
416
- if (!storage) return
417
-
418
- vmForm.value.storage = storage
419
- storageIdCash.value = storage.id
420
- }
421
- const onChangeSelectOptions = (options: string[]): void => {
422
- vmForm.value.options = options
423
- if (
424
- options.includes('customize-os') &&
425
- options.includes('customize-hardware')
426
- ) {
427
- wizard.changeScheme(isScheduledTasks.value ? 7 : 3)
428
- } else if (options.includes('customize-os')) {
429
- wizard.changeScheme(isScheduledTasks.value ? 5 : 1)
430
- } else if (options.includes('customize-hardware')) {
431
- wizard.changeScheme(isScheduledTasks.value ? 6 : 2)
432
- } else {
433
- wizard.changeScheme(isScheduledTasks.value ? 4 : 0)
434
- }
435
- }
436
- const customizeHardware = ref<UI_I_SendDataCustomizeHardware | null>(null)
437
- const onChangeCustomizeHardware = (
438
- data: UI_I_SendDataCustomizeHardware
439
- ): void => {
440
- customizeHardware.value = data
441
- }
442
-
443
- const virtualHardwareHardDisksLocal = computed<
444
- UI_I_SendDataNewHardDisk[] | null
445
- >(() => customizeHardware.value?.virtualHardware?.hardDisks || null)
446
- const virtualHardwareNetworksLocal = computed<UI_I_SendDataNewNetwork[] | null>(
447
- () => customizeHardware.value?.virtualHardware?.networks || null
448
- )
449
- const virtualHardwareCdDvdDrivesLocal = computed<
450
- UI_I_SendDataNewCdDvdDrive[] | null
451
- >(() => customizeHardware.value?.virtualHardware?.cdDvdDrives || null)
452
-
453
- const virtualHardwareCpu = computed<UI_I_SendDataCpu | null>(
454
- () => customizeHardware.value?.virtualHardware?.cpu || null
455
- )
456
- const virtualHardwareMemory = computed<UI_I_SendDataMemory | null>(
457
- () => customizeHardware.value?.virtualHardware?.memory || null
458
- )
459
- const virtualHardwareHardDisks = ref<UI_I_SendDataNewHardDisk[] | null>(null)
460
- const virtualHardwareCdDvdDrives = ref<UI_I_SendDataNewCdDvdDrive[] | null>(
461
- null
462
- )
463
- const virtualHardwareNetworks = ref<UI_I_SendDataNewNetwork[] | null>(null)
464
- const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
465
- virtualHardwareHardDisks.value = data[0]
466
- virtualHardwareCdDvdDrives.value = data[1]
467
- virtualHardwareNetworks.value = data[2]
468
- }
469
-
470
- const isPowerOnByDefault = ref<boolean>(true)
471
-
472
- watch(
473
- () => props.vmNameInWizard,
474
- (newValue) => {
475
- vmForm.value.name = newValue
476
- }
477
- )
478
-
479
- const validateSendData = async (
480
- value: UI_I_WizardStep[]
481
- ): Promise<UI_I_ValidationReturn> => {
482
- wizard.setLoader(true)
483
- let stepHasError = false
484
-
485
- const data = await props.validateSendDataFunc(
486
- vmForm.value,
487
- virtualHardwareCpu.value,
488
- virtualHardwareMemory.value,
489
- customizeHardware.value,
490
- virtualHardwareNetworks.value,
491
- virtualHardwareHardDisks.value,
492
- virtualHardwareCdDvdDrives.value,
493
- isPowerOnByDefault.value,
494
- localization.value
495
- )
496
-
497
- wizard.setLoader(false)
498
- if (data) {
499
- stepHasError = true
500
- selectedNavItem.value = data[0]
501
- }
502
-
503
- return {
504
- stepHasError,
505
- newValue: value,
506
- }
507
- }
508
- const onFinish = (): void => {
509
- wizard.setLoader(false)
510
- props
511
- .finishFunc(
512
- vmForm.value,
513
- virtualHardwareCpu.value,
514
- virtualHardwareMemory.value,
515
- customizeHardware.value,
516
- virtualHardwareNetworks.value,
517
- virtualHardwareHardDisks.value,
518
- virtualHardwareCdDvdDrives.value,
519
- isPowerOnByDefault.value,
520
- localization.value,
521
- false,
522
- newTaskForm.value,
523
- props.schedulerTask
524
- )
525
- .then(() => {
526
- onHideModal()
527
- wizard.setLoader(false)
528
- })
529
- }
530
-
531
- const selectedNavItem = ref<UI_T_SelectedNavItem>(0)
532
-
533
- const nameFormSubmit = ref<null | Function>(null)
534
- const storageSubmit = ref<null | Function>(null)
535
- const customizeHardwareSubmit = ref<null | Function>(null)
536
-
537
- const vmSettings = computed<UI_I_VmSettings | null>(() => props.vmSettings)
538
- const vmName = ref<string>(vmSettings.value?.name || '')
539
-
540
- const guestMachineType = ref<UI_I_OptionItem | null>(null)
541
- const guestOsFamily = ref<UI_I_OptionItem | null>(null)
542
- const guestOsVersion = ref<UI_I_OptionItem | null>(null)
543
-
544
- const guestOsFamilies = ref<UI_I_OptionItem[]>(capabilities.guestOsFamilies)
545
- const guestOsVersions = ref<UI_I_ArbitraryObject<UI_I_OptionItem[]>>(
546
- capabilities.guestOsVersions
547
- )
548
- const machineTypes = ref<UI_I_OptionItem[]>(capabilities.machineTypes)
549
-
550
- watch(vmSettings, (newValue) => {
551
- vmName.value = newValue?.name || ''
552
-
553
- if (newValue?.guestOsFamily) guestOsFamily.value = newValue.guestOsFamily
554
- if (newValue?.guestMachineType) guestMachineType.value = newValue.guestMachineType
555
- if (newValue?.guestOsVersion) guestOsVersion.value = newValue.guestOsVersion
556
- })
557
-
558
- const onHideModal = (): void => {
559
- emits('hide')
560
- }
561
- </script>
562
-
563
- <style scoped lang="scss">
564
- :deep(.has-solid.close-icon.clr-icon) {
565
- width: 20px;
566
- top: 0;
567
- }
568
- .vm-context {
569
- padding: 16px 15px 10px 10px;
570
- height: 100%;
571
- display: flex;
572
- flex-direction: column;
573
-
574
- .context-title-wrap {
575
- padding-bottom: 3px;
576
- border-bottom: 1px solid #a6a6a6;
577
-
578
- h4 {
579
- font-weight: 700;
580
- font-size: 13px;
581
- color: var(--vm-context-title);
582
- }
583
- p {
584
- font-weight: 400;
585
- font-size: 13px;
586
- color: var(--vm-context-sub-title);
587
- }
588
- }
589
-
590
- .finish-block {
591
- padding: 18px 24px 24px 24px;
592
-
593
- .add-hosts-ready-to-complete-mt-12 {
594
- margin-top: 12px;
595
-
596
- .add-hosts-ready-to-complete-bold {
597
- line-height: 18px;
598
- font-weight: 700;
599
- }
600
- }
601
- }
602
-
603
- .vm-hardware-version {
604
- align-self: flex-end;
605
- margin-top: auto;
606
- }
607
- }
608
-
609
- :deep(.modal .modal-dialog .modal-content .modal-footer) {
610
- flex: unset;
611
- height: unset;
612
- min-height: unset;
613
- }
614
- :deep(.wizard-modal-titlebar h3) {
615
- color: #000;
616
- font-size: 24px;
617
- font-weight: 200;
618
- line-height: 27px;
619
- margin: 0;
620
- padding: 0;
621
- }
622
- :deep(.clr-wizard-stepnav-item) {
623
- padding-left: 0;
624
- }
625
- :deep(.clr-wizard-stepnav
626
- .clr-wizard-stepnav-item
627
- button
628
- .clr-wizard-stepnav-link-title) {
629
- width: 189px;
630
- font-weight: 700;
631
- font-size: 13px;
632
- }
633
-
634
- #vm-wizard-notification {
635
- h3 {
636
- color: var(--global-font-color7);
637
- margin-top: 6px;
638
- }
639
- p {
640
- color: var(--global-font-color6);
641
- line-height: 16px;
642
- }
643
- }
644
-
645
- .power-on-by-default-wrap {
646
- display: flex;
647
- align-items: center;
648
-
649
- input {
650
- margin-right: 6px;
651
- }
652
- }
653
-
654
- .new-task-form {
655
- padding: 0 25px 0 5px;
656
- }
657
- </style>
658
-
659
- <style>
660
- :root {
661
- --vm-context-title: #333;
662
- --vm-context-sub-title: #000;
663
- }
664
- :root.dark-theme {
665
- --vm-context-title: #adbbc4;
666
- --vm-context-sub-title: #adbbc4;
667
- }
668
- </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 ? 12 : 4)
273
+ } else {
274
+ wizard.changeScheme(isSphere ? 8 : 0)
275
+ wizard.selectStepHard(isSphere ? 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>