bfg-common 1.5.540 → 1.5.541

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 (124) 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/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/Add.vue +251 -251
  14. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  15. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  16. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  17. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  18. package/components/common/diagramMain/port/Port.vue +580 -580
  19. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  20. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  21. package/components/common/pages/backups/DetailView.vue +52 -52
  22. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  23. package/components/common/pages/backups/modals/Modals.vue +243 -243
  24. package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +29 -29
  25. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +69 -69
  26. package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +38 -38
  27. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  28. package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -8
  29. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  30. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  31. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  32. package/components/common/pages/backups/modals/restore/networks/Networks.vue +1 -0
  33. package/components/common/pages/hardwareHealth/tableView/lib/config/sensorTable.ts +1 -1
  34. package/components/common/pages/hardwareHealth/tableView/modal/SensorWarning.vue +1 -1
  35. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  36. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  37. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  38. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  39. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  40. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  41. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  42. package/components/common/select/radio/RadioGroup.vue +137 -137
  43. package/components/common/spiceConsole/Drawer.vue +420 -420
  44. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  45. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  46. package/components/common/tools/Actions.vue +207 -207
  47. package/components/common/tooltip/Help.vue +5 -0
  48. package/components/common/treeView/TreeView.vue +52 -52
  49. package/components/common/vm/actions/add/Add.vue +950 -949
  50. package/components/common/vm/actions/add/New.vue +690 -689
  51. package/components/common/vm/actions/add/Old.vue +402 -400
  52. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  53. package/components/common/vm/actions/clone/Clone.vue +809 -808
  54. package/components/common/vm/actions/clone/new/New.vue +457 -454
  55. package/components/common/vm/actions/clone/old/Old.vue +378 -378
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +427 -427
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  65. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  66. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  67. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  68. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  69. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  70. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  71. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  72. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  73. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  74. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  75. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  76. package/components/common/vm/actions/common/select/storage/Old.vue +125 -132
  77. package/components/common/vm/actions/common/select/storage/Storage.vue +178 -167
  78. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -330
  79. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  80. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  81. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  82. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  83. package/components/common/vm/actions/register/Register.vue +352 -352
  84. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  85. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/Compatibility.vue +35 -31
  86. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/New.vue +99 -98
  87. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/Old.vue +53 -54
  88. package/components/common/wizards/common/{steps/computeResource/compatibility → compatibility}/lib/models/enums.ts +1 -1
  89. package/components/common/wizards/common/compatibility/lib/models/types.ts +1 -0
  90. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -85
  91. package/components/common/wizards/common/steps/computeResource/New.vue +93 -92
  92. package/components/common/wizards/common/steps/computeResource/Old.vue +103 -102
  93. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  94. package/components/common/wizards/common/steps/name/New.vue +221 -221
  95. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  96. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  97. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  98. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  99. package/components/common/wizards/datastore/add/Add.vue +228 -228
  100. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  101. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  102. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -195
  103. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  104. package/components/common/wizards/vm/migrate/select/storage/Storage.vue +1 -1
  105. package/composables/useAppVersion.ts +21 -21
  106. package/composables/useLocal.ts +6 -6
  107. package/composables/useLocalCommon.ts +39 -39
  108. package/package.json +1 -1
  109. package/plugins/console.ts +21 -21
  110. package/plugins/date.ts +233 -233
  111. package/plugins/mouse.ts +21 -21
  112. package/plugins/panelStates.ts +70 -70
  113. package/plugins/text.ts +59 -59
  114. package/public/spice-console/application/clientgui.js +854 -854
  115. package/public/spice-console/application/packetfactory.js +211 -211
  116. package/public/spice-console/application/virtualmouse.js +147 -147
  117. package/public/spice-console/lib/images/bitmap.js +203 -203
  118. package/public/spice-console/network/spicechannel.js +440 -440
  119. package/public/spice-console/process/cursorprocess.js +121 -121
  120. package/public/spice-console/process/inputprocess.js +227 -227
  121. package/public/spice-console/process/mainprocess.js +210 -210
  122. package/public/spice-console/run.js +210 -210
  123. package/store/main/mutations.ts +7 -7
  124. package/store/main/state.ts +7 -7
@@ -1,378 +1,378 @@
1
- <template>
2
- <div class="clone-vm">
3
- <atoms-wizard
4
- :wizard="props.wizard"
5
- :selected-scheme="props.selectedScheme"
6
- :title="props.title"
7
- :localization="localization"
8
- show
9
- @change-steps="emits('change-steps', $event)"
10
- @hide="emits('hide')"
11
- @submit="emits('finish')"
12
- >
13
- <template #modalBody="{ selectedStep }">
14
- <atoms-loader
15
- v-show="!props.vmSettings || props.isLoading"
16
- id="loader"
17
- test-id="clone-vm-loader"
18
- />
19
- <div v-if="props.vmSettings" class="vm-context">
20
- <common-pages-scheduled-tasks-modals-common-new-task-form
21
- v-show="selectedStep.id === props.dynamicSteps.scheduledTasks"
22
- v-model="schedulerTaskForm"
23
- :target="props.selectedVirtualMachine"
24
- class="new-task-form"
25
- />
26
- <common-wizards-common-steps-name
27
- v-show="
28
- selectedStep.id === props.dynamicSteps.selectName ||
29
- selectedStep.id === props.dynamicSteps.selectNameFolder
30
- "
31
- v-model:name="vmForm.name"
32
- v-model:location="location"
33
- :show="
34
- selectedStep.id === props.dynamicSteps.selectName ||
35
- selectedStep.id === props.dynamicSteps.selectNameFolder
36
- "
37
- :name-form-submit="props.nameFormSubmit"
38
- :name-request-url="props.nameRequestUrl"
39
- :validation-description="
40
- localization.common.enterValidLocationVirtualMachine
41
- "
42
- :name-exist-validation-description="
43
- localization.common.vmNameExistInSelectedLocation
44
- "
45
- :test-ids="props.nameTestIds"
46
- :has-location="props.project === 'sphere'"
47
- :location-nodes="props.locationNodes"
48
- :allowed-location-kinds="props.allowedLocationKinds"
49
- :location-description="props.locationDescription"
50
- @submit="emits('change-name', $event)"
51
- />
52
- <common-wizards-common-steps-compute-resource
53
- v-if="props.isSphere"
54
- v-show="
55
- selectedStep.id === props.dynamicSteps.selectComputeResource
56
- "
57
- v-model="computeResource"
58
- :node="computeResourceTreeLocal"
59
- :alert-messages="props.computeResourceAlert"
60
- :is-loading="props.isLoadingComputeTree"
61
- :compatibility-text="props.compatibilityText"
62
- />
63
- <common-vm-actions-common-select-storage
64
- v-show="selectedStep.id === props.dynamicSteps.selectStorage"
65
- :storage-submit="props.storageSubmit"
66
- :datastore="props.datastore"
67
- :is-datastore-loading="props.isDatastoreLoading"
68
- :storage="vmForm.storage"
69
- :get-datastore-table-func="props.getDatastoreTableFunc"
70
- @submit="emits('change-storage', $event)"
71
- />
72
- <common-vm-actions-common-select-options
73
- v-show="selectedStep.id === props.dynamicSteps.selectOptions"
74
- :is-create-template="props.isNewVmFromTemplate"
75
- @change="emits('change-select-options', $event)"
76
- />
77
- <common-vm-actions-common-select-os
78
- v-show="
79
- selectedStep.id === props.dynamicSteps.selectGuestOSMachineType
80
- "
81
- v-model:machine-type="vmForm.guestMachineType"
82
- v-model:guest-os-family="vmForm.guestOsFamily"
83
- v-model:guest-os-version="vmForm.guestOsVersion"
84
- :families-options="props.guestOsFamilies"
85
- :versions-options="props.guestOsVersions"
86
- :machine-types-options="props.machineTypes"
87
- :error-validation-fields="props.errorValidationFields"
88
- @remove-error-by-title="emits('remove-error-by-title', $event)"
89
- />
90
- <common-vm-actions-common-customize-hardware
91
- v-show="selectedStep.id === props.dynamicSteps.customizeHardware"
92
- v-model:vm-name="vmName"
93
- v-model:guest-machine-type="props.vmSettings.guestMachineType"
94
- v-model:guest-os-family="props.vmSettings.guestOsFamily"
95
- v-model:guest-os-version="props.vmSettings.guestOsVersion"
96
- :storage="vmForm.storage"
97
- :hard-disks-for-boot-options="props.virtualHardwareHardDisksLocal"
98
- :cd-dvd-drives-for-boot-options="
99
- props.virtualHardwareCdDvdDrivesLocal
100
- "
101
- :networks-for-boot-options="props.virtualHardwareNetworksLocal"
102
- :cd-dvd-drives="props.vmSettings.cdDvdDrives"
103
- :hard-disks="props.vmSettings.hardDisks"
104
- :networks="props.vmSettings.networks"
105
- :customize-hardware-submit="props.customizeHardwareSubmit"
106
- :max-cpus="props.vmSettings.maxCpus"
107
- :max-memory="props.vmSettings.maxMemory"
108
- :cpu-models="props.vmSettings.cpuModels"
109
- :cpu="props.vmSettings.cpu"
110
- :memory="props.vmSettings.memory"
111
- :video-card="props.vmSettings.videoCard"
112
- :usb-controller="props.vmSettings.usbController"
113
- :pci-devices="props.vmSettings.pciDevices"
114
- :selected-nav-item="props.selectedNavItem"
115
- :hard-disks-for-edit="props.vmSettings.hardDisks"
116
- :options="props.vmSettings.options"
117
- :nodes="props.nodes"
118
- :files="props.files"
119
- :networks-table="props.networksTable"
120
- :error-validation-fields="props.errorValidationFields"
121
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
122
- :passthrough-devices="props.passthroughDevices"
123
- :mediated-devices="props.mediatedDevices"
124
- :get-datastore-table-func="props.getDatastoreTableFunc"
125
- :datastore="props.datastore"
126
- :is-datastore-loading="props.isDatastoreLoading"
127
- :project="props.project"
128
- is-clone
129
- @change-boot-order="emits('change-boot-order', $event)"
130
- @send-data="emits('change-customize-hardware', $event)"
131
- @get-storage="emits('get-storage', $event)"
132
- @get-folders-or-files="emits('get-folders-or-files', $event)"
133
- @get-active-device-child="emits('get-active-device-child', $event)"
134
- @show-datastore-child="emits('show-datastore-child', $event)"
135
- @get-networks-table="emits('get-networks-table', $event)"
136
- @get-pci-devices="emits('get-pci-devices')"
137
- />
138
- <common-ready-to-complete
139
- v-show="selectedStep.id === props.dynamicSteps.readyComplete"
140
- :data="props.readyCompleteTableInfo"
141
- />
142
- </div>
143
- </template>
144
- </atoms-wizard>
145
- </div>
146
- </template>
147
-
148
- <script setup lang="ts">
149
- import type { UI_I_WizardStep } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
150
- import Wizard from '~/node_modules/bfg-uikit/components/ui/wizard/lib/utils/utils'
151
- import type {
152
- UI_I_DatastoreTableItem,
153
- UI_I_FolderOrFileTreePayload,
154
- } from '~/lib/models/store/storage/interfaces'
155
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
156
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
157
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
158
- import type {
159
- UI_I_ArbitraryObject,
160
- UI_I_Localization,
161
- } from '~/lib/models/interfaces'
162
- import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
163
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
164
- import type {
165
- UI_I_SendDataNewCdDvdDrive,
166
- UI_I_SendDataNewHardDisk,
167
- UI_I_SendDataNewNetwork,
168
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
169
- import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
170
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
171
- import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
172
- import type { UI_T_Project } from '~/lib/models/types'
173
- import type {
174
- UI_I_MediatedDevice,
175
- UI_I_PciDevice,
176
- UI_I_VmSettings,
177
- } from '~/lib/models/store/vm/interfaces'
178
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
179
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
180
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
181
- import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
182
- import type { UI_I_VmForm } from '~/components/common/vm/actions/common/lib/models/interfaces'
183
- import { dynamicSteps } from '~/components/common/vm/actions/add/lib/config/steps'
184
-
185
- const vmForm = defineModel<UI_I_VmForm>('vm-form')
186
- const schedulerTaskForm = defineModel<UI_I_ScheduleNewTasksForm>(
187
- 'scheduler-task-form'
188
- )
189
- const vmName = defineModel<string>('vm-name')
190
- const computeResource = defineModel<UI_I_TreeNode | undefined>(
191
- 'compute-resource'
192
- )
193
- const location = defineModel<UI_I_TreeNode | null>('location')
194
- const props = withDefaults(
195
- defineProps<{
196
- project: UI_T_Project
197
- vmSettings: UI_I_VmSettings | null
198
- nodes: UI_I_FileTreeNode[]
199
- files: UI_I_FileTreeNode[]
200
- networksTable: UI_I_NetworkTableItem[]
201
- datastore: UI_I_DatastoreTableItem[]
202
- isDatastoreLoading: boolean
203
- errorValidationFields: UI_I_ErrorValidationField[]
204
- readyCompleteTableInfo: UI_I_TableInfoItem[]
205
- vmCpuHelpTextSecond: string
206
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
207
- passthroughDevices: UI_I_PciDevice[]
208
- mediatedDevices: UI_I_MediatedDevice[]
209
- nameRequestUrl: string
210
- wizard: Wizard
211
- selectedScheme: number[]
212
- selectedVirtualMachine: string
213
- isNewVmFromTemplate: boolean | undefined
214
- computeResourceTree: UI_I_TreeNode[] | undefined // для сферы
215
- locationNodes: UI_I_TreeNode[] | undefined // для сферы
216
- title: string
217
- nameFormSubmit: null | Function
218
- storageSubmit: null | Function
219
- customizeHardwareSubmit: null | Function
220
- selectedNavItem: UI_T_SelectedNavItem
221
- allowedLocationKinds: number[]
222
- isSphere: boolean
223
- locationDescription: string
224
- nameTestIds: UI_I_NameTestIds
225
- virtualHardwareHardDisksLocal: UI_I_SendDataNewHardDisk[] | null
226
- virtualHardwareNetworksLocal: UI_I_SendDataNewNetwork[] | null
227
- virtualHardwareCdDvdDrivesLocal: UI_I_SendDataNewCdDvdDrive[] | null
228
- guestOsFamilies: UI_I_OptionItem[]
229
- guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
230
- machineTypes: UI_I_OptionItem[]
231
- dynamicSteps: UI_I_ArbitraryObject<number>
232
- isLoading: boolean
233
- isLoadingComputeTree?: boolean // для сферы
234
- computeResourceAlert?: string[] // для сферы
235
- compatibilityText?: [string, string] // для сферы
236
- }>(),
237
- {
238
- isLoadingComputeTree: false,
239
- computeResourceAlert: () => [],
240
- compatibilityText: () => [],
241
- }
242
- )
243
-
244
- const emits = defineEmits<{
245
- (event: 'get-storage', value: UI_I_TablePayload): void
246
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
247
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
248
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
249
- (event: 'remove-error-by-title', value: string): void
250
- (event: 'get-networks-table', value: UI_I_TablePayload): void
251
- (event: 'get-pci-devices'): void
252
- (event: 'change-steps', value: UI_I_WizardStep[]): void
253
- (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
254
- (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
255
- (event: 'change-select-options', value: string[]): void
256
- (event: 'change-boot-order', value: UI_T_ChangeBootOrder): void
257
- (
258
- event: 'change-customize-hardware',
259
- value: UI_I_SendDataCustomizeHardware
260
- ): void
261
- (event: 'hide'): void
262
- (event: 'finish'): void
263
- }>()
264
-
265
- const localization = computed<UI_I_Localization>(() => useLocal())
266
-
267
- const computeResourceTreeLocal = computed<UI_I_TreeNode | null>(() => {
268
- // для сферы
269
- return props.computeResourceTree?.[0] || null
270
- })
271
- </script>
272
-
273
- <style scoped lang="scss">
274
- :deep(.has-solid.close-icon.clr-icon) {
275
- width: 20px;
276
- top: 0;
277
- }
278
- .vm-context {
279
- padding: 16px 15px 10px 10px;
280
- height: 100%;
281
- display: flex;
282
- flex-direction: column;
283
-
284
- .context-title-wrap {
285
- padding-bottom: 3px;
286
- border-bottom: 1px solid #a6a6a6;
287
-
288
- h4 {
289
- font-weight: 700;
290
- font-size: 13px;
291
- color: var(--vm-context-title);
292
- }
293
- p {
294
- font-weight: 400;
295
- font-size: 13px;
296
- color: var(--vm-context-sub-title);
297
- }
298
- }
299
-
300
- .finish-block {
301
- padding: 18px 24px 24px 24px;
302
-
303
- .add-hosts-ready-to-complete-mt-12 {
304
- margin-top: 12px;
305
-
306
- .add-hosts-ready-to-complete-bold {
307
- line-height: 18px;
308
- font-weight: 700;
309
- }
310
- }
311
- }
312
-
313
- .vm-hardware-version {
314
- align-self: flex-end;
315
- margin-top: auto;
316
- }
317
- }
318
-
319
- :deep(.modal .modal-dialog .modal-content .modal-footer) {
320
- flex: unset;
321
- height: unset;
322
- min-height: unset;
323
- }
324
- :deep(.wizard-modal-titlebar h3) {
325
- color: #000;
326
- font-size: 24px;
327
- font-weight: 200;
328
- line-height: 27px;
329
- margin: 0;
330
- padding: 0;
331
- }
332
- :deep(.clr-wizard-stepnav-item) {
333
- padding-left: 0;
334
- }
335
- :deep(.clr-wizard-stepnav
336
- .clr-wizard-stepnav-item
337
- button
338
- .clr-wizard-stepnav-link-title) {
339
- width: 189px;
340
- font-weight: 700;
341
- font-size: 13px;
342
- }
343
-
344
- #vm-wizard-notification {
345
- h3 {
346
- color: var(--global-font-color7);
347
- margin-top: 6px;
348
- }
349
- p {
350
- color: var(--global-font-color6);
351
- line-height: 16px;
352
- }
353
- }
354
-
355
- .power-on-by-default-wrap {
356
- display: flex;
357
- align-items: center;
358
-
359
- input {
360
- margin-right: 6px;
361
- }
362
- }
363
-
364
- .new-task-form {
365
- padding: 0 25px 0 5px;
366
- }
367
- </style>
368
-
369
- <style>
370
- :root {
371
- --vm-context-title: #333;
372
- --vm-context-sub-title: #000;
373
- }
374
- :root.dark-theme {
375
- --vm-context-title: #adbbc4;
376
- --vm-context-sub-title: #adbbc4;
377
- }
378
- </style>
1
+ <template>
2
+ <div class="clone-vm">
3
+ <atoms-wizard
4
+ :wizard="props.wizard"
5
+ :selected-scheme="props.selectedScheme"
6
+ :title="props.title"
7
+ :localization="localization"
8
+ show
9
+ @change-steps="emits('change-steps', $event)"
10
+ @hide="emits('hide')"
11
+ @submit="emits('finish')"
12
+ >
13
+ <template #modalBody="{ selectedStep }">
14
+ <atoms-loader
15
+ v-show="!props.vmSettings || props.isLoading"
16
+ id="loader"
17
+ test-id="clone-vm-loader"
18
+ />
19
+ <div v-if="props.vmSettings" class="vm-context">
20
+ <common-pages-scheduled-tasks-modals-common-new-task-form
21
+ v-show="selectedStep.id === props.dynamicSteps.scheduledTasks"
22
+ v-model="schedulerTaskForm"
23
+ :target="props.selectedVirtualMachine"
24
+ class="new-task-form"
25
+ />
26
+ <common-wizards-common-steps-name
27
+ v-show="
28
+ selectedStep.id === props.dynamicSteps.selectName ||
29
+ selectedStep.id === props.dynamicSteps.selectNameFolder
30
+ "
31
+ v-model:name="vmForm.name"
32
+ v-model:location="location"
33
+ :show="
34
+ selectedStep.id === props.dynamicSteps.selectName ||
35
+ selectedStep.id === props.dynamicSteps.selectNameFolder
36
+ "
37
+ :name-form-submit="props.nameFormSubmit"
38
+ :name-request-url="props.nameRequestUrl"
39
+ :validation-description="
40
+ localization.common.enterValidLocationVirtualMachine
41
+ "
42
+ :name-exist-validation-description="
43
+ localization.common.vmNameExistInSelectedLocation
44
+ "
45
+ :test-ids="props.nameTestIds"
46
+ :has-location="props.project === 'sphere'"
47
+ :location-nodes="props.locationNodes"
48
+ :allowed-location-kinds="props.allowedLocationKinds"
49
+ :location-description="props.locationDescription"
50
+ @submit="emits('change-name', $event)"
51
+ />
52
+ <common-wizards-common-steps-compute-resource
53
+ v-if="props.isSphere"
54
+ v-show="
55
+ selectedStep.id === props.dynamicSteps.selectComputeResource
56
+ "
57
+ v-model="computeResource"
58
+ :node="computeResourceTreeLocal"
59
+ :alert-messages="props.computeResourceAlert"
60
+ :is-loading="props.isLoadingComputeTree"
61
+ :compatibility-text="props.compatibilityText"
62
+ />
63
+ <common-vm-actions-common-select-storage
64
+ v-show="selectedStep.id === props.dynamicSteps.selectStorage"
65
+ :storage-submit="props.storageSubmit"
66
+ :datastore="props.datastore"
67
+ :is-datastore-loading="props.isDatastoreLoading"
68
+ :storage="vmForm.storage"
69
+ :get-datastore-table-func="props.getDatastoreTableFunc"
70
+ @submit="emits('change-storage', $event)"
71
+ />
72
+ <common-vm-actions-common-select-options
73
+ v-show="selectedStep.id === props.dynamicSteps.selectOptions"
74
+ :is-create-template="props.isNewVmFromTemplate"
75
+ @change="emits('change-select-options', $event)"
76
+ />
77
+ <common-vm-actions-common-select-os
78
+ v-show="
79
+ selectedStep.id === props.dynamicSteps.selectGuestOSMachineType
80
+ "
81
+ v-model:machine-type="vmForm.guestMachineType"
82
+ v-model:guest-os-family="vmForm.guestOsFamily"
83
+ v-model:guest-os-version="vmForm.guestOsVersion"
84
+ :families-options="props.guestOsFamilies"
85
+ :versions-options="props.guestOsVersions"
86
+ :machine-types-options="props.machineTypes"
87
+ :error-validation-fields="props.errorValidationFields"
88
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
89
+ />
90
+ <common-vm-actions-common-customize-hardware
91
+ v-show="selectedStep.id === props.dynamicSteps.customizeHardware"
92
+ v-model:vm-name="vmName"
93
+ v-model:guest-machine-type="props.vmSettings.guestMachineType"
94
+ v-model:guest-os-family="props.vmSettings.guestOsFamily"
95
+ v-model:guest-os-version="props.vmSettings.guestOsVersion"
96
+ :storage="vmForm.storage"
97
+ :hard-disks-for-boot-options="props.virtualHardwareHardDisksLocal"
98
+ :cd-dvd-drives-for-boot-options="
99
+ props.virtualHardwareCdDvdDrivesLocal
100
+ "
101
+ :networks-for-boot-options="props.virtualHardwareNetworksLocal"
102
+ :cd-dvd-drives="props.vmSettings.cdDvdDrives"
103
+ :hard-disks="props.vmSettings.hardDisks"
104
+ :networks="props.vmSettings.networks"
105
+ :customize-hardware-submit="props.customizeHardwareSubmit"
106
+ :max-cpus="props.vmSettings.maxCpus"
107
+ :max-memory="props.vmSettings.maxMemory"
108
+ :cpu-models="props.vmSettings.cpuModels"
109
+ :cpu="props.vmSettings.cpu"
110
+ :memory="props.vmSettings.memory"
111
+ :video-card="props.vmSettings.videoCard"
112
+ :usb-controller="props.vmSettings.usbController"
113
+ :pci-devices="props.vmSettings.pciDevices"
114
+ :selected-nav-item="props.selectedNavItem"
115
+ :hard-disks-for-edit="props.vmSettings.hardDisks"
116
+ :options="props.vmSettings.options"
117
+ :nodes="props.nodes"
118
+ :files="props.files"
119
+ :networks-table="props.networksTable"
120
+ :error-validation-fields="props.errorValidationFields"
121
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
122
+ :passthrough-devices="props.passthroughDevices"
123
+ :mediated-devices="props.mediatedDevices"
124
+ :get-datastore-table-func="props.getDatastoreTableFunc"
125
+ :datastore="props.datastore"
126
+ :is-datastore-loading="props.isDatastoreLoading"
127
+ :project="props.project"
128
+ is-clone
129
+ @change-boot-order="emits('change-boot-order', $event)"
130
+ @send-data="emits('change-customize-hardware', $event)"
131
+ @get-storage="emits('get-storage', $event)"
132
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
133
+ @get-active-device-child="emits('get-active-device-child', $event)"
134
+ @show-datastore-child="emits('show-datastore-child', $event)"
135
+ @get-networks-table="emits('get-networks-table', $event)"
136
+ @get-pci-devices="emits('get-pci-devices')"
137
+ />
138
+ <common-ready-to-complete
139
+ v-show="selectedStep.id === props.dynamicSteps.readyComplete"
140
+ :data="props.readyCompleteTableInfo"
141
+ />
142
+ </div>
143
+ </template>
144
+ </atoms-wizard>
145
+ </div>
146
+ </template>
147
+
148
+ <script setup lang="ts">
149
+ import type { UI_I_WizardStep } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
150
+ import Wizard from '~/node_modules/bfg-uikit/components/ui/wizard/lib/utils/utils'
151
+ import type {
152
+ UI_I_DatastoreTableItem,
153
+ UI_I_FolderOrFileTreePayload,
154
+ } from '~/lib/models/store/storage/interfaces'
155
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
156
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
157
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
158
+ import type {
159
+ UI_I_ArbitraryObject,
160
+ UI_I_Localization,
161
+ } from '~/lib/models/interfaces'
162
+ import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
163
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
164
+ import type {
165
+ UI_I_SendDataNewCdDvdDrive,
166
+ UI_I_SendDataNewHardDisk,
167
+ UI_I_SendDataNewNetwork,
168
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
169
+ import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
170
+ import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
171
+ import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
172
+ import type { UI_T_Project } from '~/lib/models/types'
173
+ import type {
174
+ UI_I_MediatedDevice,
175
+ UI_I_PciDevice,
176
+ UI_I_VmSettings,
177
+ } from '~/lib/models/store/vm/interfaces'
178
+ import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
179
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
180
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
181
+ import type { UI_I_NameTestIds } from '~/components/common/wizards/common/steps/name/lib/models/interfaces'
182
+ import type { UI_I_VmForm } from '~/components/common/vm/actions/common/lib/models/interfaces'
183
+ import type { UI_T_CompatibilityStatus } from '~/components/common/wizards/common/compatibility/lib/models/types'
184
+
185
+ const vmForm = defineModel<UI_I_VmForm>('vm-form')
186
+ const schedulerTaskForm = defineModel<UI_I_ScheduleNewTasksForm>(
187
+ 'scheduler-task-form'
188
+ )
189
+ const vmName = defineModel<string>('vm-name')
190
+ const computeResource = defineModel<UI_I_TreeNode | undefined>(
191
+ 'compute-resource'
192
+ )
193
+ const location = defineModel<UI_I_TreeNode | null>('location')
194
+ const props = withDefaults(
195
+ defineProps<{
196
+ project: UI_T_Project
197
+ vmSettings: UI_I_VmSettings | null
198
+ nodes: UI_I_FileTreeNode[]
199
+ files: UI_I_FileTreeNode[]
200
+ networksTable: UI_I_NetworkTableItem[]
201
+ datastore: UI_I_DatastoreTableItem[]
202
+ isDatastoreLoading: boolean
203
+ errorValidationFields: UI_I_ErrorValidationField[]
204
+ readyCompleteTableInfo: UI_I_TableInfoItem[]
205
+ vmCpuHelpTextSecond: string
206
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
207
+ passthroughDevices: UI_I_PciDevice[]
208
+ mediatedDevices: UI_I_MediatedDevice[]
209
+ nameRequestUrl: string
210
+ wizard: Wizard
211
+ selectedScheme: number[]
212
+ selectedVirtualMachine: string
213
+ isNewVmFromTemplate: boolean | undefined
214
+ computeResourceTree: UI_I_TreeNode[] | undefined // для сферы
215
+ locationNodes: UI_I_TreeNode[] | undefined // для сферы
216
+ title: string
217
+ nameFormSubmit: null | Function
218
+ storageSubmit: null | Function
219
+ customizeHardwareSubmit: null | Function
220
+ selectedNavItem: UI_T_SelectedNavItem
221
+ allowedLocationKinds: number[]
222
+ isSphere: boolean
223
+ locationDescription: string
224
+ nameTestIds: UI_I_NameTestIds
225
+ virtualHardwareHardDisksLocal: UI_I_SendDataNewHardDisk[] | null
226
+ virtualHardwareNetworksLocal: UI_I_SendDataNewNetwork[] | null
227
+ virtualHardwareCdDvdDrivesLocal: UI_I_SendDataNewCdDvdDrive[] | null
228
+ guestOsFamilies: UI_I_OptionItem[]
229
+ guestOsVersions: UI_I_ArbitraryObject<UI_I_OptionItem[]>
230
+ machineTypes: UI_I_OptionItem[]
231
+ dynamicSteps: UI_I_ArbitraryObject<number>
232
+ isLoading: boolean
233
+ isLoadingComputeTree?: boolean // для сферы
234
+ computeResourceAlert?: string[] // для сферы
235
+ compatibilityText?: [UI_T_CompatibilityStatus, string] // для сферы
236
+ }>(),
237
+ {
238
+ isLoadingComputeTree: false,
239
+ computeResourceAlert: () => [],
240
+ compatibilityText: () => ['none', ''],
241
+ }
242
+ )
243
+
244
+ const emits = defineEmits<{
245
+ (event: 'get-storage', value: UI_I_TablePayload): void
246
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
247
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
248
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
249
+ (event: 'remove-error-by-title', value: string): void
250
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
251
+ (event: 'get-pci-devices'): void
252
+ (event: 'change-steps', value: UI_I_WizardStep[]): void
253
+ (event: 'change-name', value: [string, UI_I_TreeNode | null]): void
254
+ (event: 'change-storage', value: UI_I_DatastoreTableItem | null): void
255
+ (event: 'change-select-options', value: string[]): void
256
+ (event: 'change-boot-order', value: UI_T_ChangeBootOrder): void
257
+ (
258
+ event: 'change-customize-hardware',
259
+ value: UI_I_SendDataCustomizeHardware
260
+ ): void
261
+ (event: 'hide'): void
262
+ (event: 'finish'): void
263
+ }>()
264
+
265
+ const localization = computed<UI_I_Localization>(() => useLocal())
266
+
267
+ const computeResourceTreeLocal = computed<UI_I_TreeNode | null>(() => {
268
+ // для сферы
269
+ return props.computeResourceTree?.[0] || null
270
+ })
271
+ </script>
272
+
273
+ <style scoped lang="scss">
274
+ :deep(.has-solid.close-icon.clr-icon) {
275
+ width: 20px;
276
+ top: 0;
277
+ }
278
+ .vm-context {
279
+ padding: 16px 15px 10px 10px;
280
+ height: 100%;
281
+ display: flex;
282
+ flex-direction: column;
283
+
284
+ .context-title-wrap {
285
+ padding-bottom: 3px;
286
+ border-bottom: 1px solid #a6a6a6;
287
+
288
+ h4 {
289
+ font-weight: 700;
290
+ font-size: 13px;
291
+ color: var(--vm-context-title);
292
+ }
293
+ p {
294
+ font-weight: 400;
295
+ font-size: 13px;
296
+ color: var(--vm-context-sub-title);
297
+ }
298
+ }
299
+
300
+ .finish-block {
301
+ padding: 18px 24px 24px 24px;
302
+
303
+ .add-hosts-ready-to-complete-mt-12 {
304
+ margin-top: 12px;
305
+
306
+ .add-hosts-ready-to-complete-bold {
307
+ line-height: 18px;
308
+ font-weight: 700;
309
+ }
310
+ }
311
+ }
312
+
313
+ .vm-hardware-version {
314
+ align-self: flex-end;
315
+ margin-top: auto;
316
+ }
317
+ }
318
+
319
+ :deep(.modal .modal-dialog .modal-content .modal-footer) {
320
+ flex: unset;
321
+ height: unset;
322
+ min-height: unset;
323
+ }
324
+ :deep(.wizard-modal-titlebar h3) {
325
+ color: #000;
326
+ font-size: 24px;
327
+ font-weight: 200;
328
+ line-height: 27px;
329
+ margin: 0;
330
+ padding: 0;
331
+ }
332
+ :deep(.clr-wizard-stepnav-item) {
333
+ padding-left: 0;
334
+ }
335
+ :deep(.clr-wizard-stepnav
336
+ .clr-wizard-stepnav-item
337
+ button
338
+ .clr-wizard-stepnav-link-title) {
339
+ width: 189px;
340
+ font-weight: 700;
341
+ font-size: 13px;
342
+ }
343
+
344
+ #vm-wizard-notification {
345
+ h3 {
346
+ color: var(--global-font-color7);
347
+ margin-top: 6px;
348
+ }
349
+ p {
350
+ color: var(--global-font-color6);
351
+ line-height: 16px;
352
+ }
353
+ }
354
+
355
+ .power-on-by-default-wrap {
356
+ display: flex;
357
+ align-items: center;
358
+
359
+ input {
360
+ margin-right: 6px;
361
+ }
362
+ }
363
+
364
+ .new-task-form {
365
+ padding: 0 25px 0 5px;
366
+ }
367
+ </style>
368
+
369
+ <style>
370
+ :root {
371
+ --vm-context-title: #333;
372
+ --vm-context-sub-title: #000;
373
+ }
374
+ :root.dark-theme {
375
+ --vm-context-title: #adbbc4;
376
+ --vm-context-sub-title: #adbbc4;
377
+ }
378
+ </style>