bfg-common 1.5.496 → 1.5.497

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 (117) 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/localization/local_be.json +7 -1
  7. package/assets/localization/local_en.json +10 -4
  8. package/assets/localization/local_hy.json +7 -1
  9. package/assets/localization/local_kk.json +7 -1
  10. package/assets/localization/local_ru.json +10 -4
  11. package/assets/localization/local_zh.json +7 -1
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/collapse/CollapseNav.vue +170 -170
  14. package/components/atoms/perPage/PerPage.vue +58 -58
  15. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  16. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  17. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  18. package/components/common/backup/storage/actions/add/Add.vue +251 -251
  19. package/components/common/backup/storage/actions/add/lib/utils.ts +62 -62
  20. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  21. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  22. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  23. package/components/common/diagramMain/port/Port.vue +580 -580
  24. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  25. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  26. package/components/common/modals/confirmation/Confirmation.vue +3 -0
  27. package/components/common/modals/confirmation/ConfirmationNew.vue +3 -1
  28. package/components/common/pages/backups/DetailView.vue +52 -52
  29. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  30. package/components/common/pages/backups/modals/Modals.vue +243 -243
  31. package/components/common/pages/backups/modals/createBackup/configuration/Configuration.vue +29 -29
  32. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  33. package/components/common/pages/backups/modals/createBackup/datastores/tableView/TableView.vue +95 -95
  34. package/components/common/pages/backups/modals/createBackup/general/General.vue +141 -141
  35. package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +12 -12
  36. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  37. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  38. package/components/common/pages/backups/modals/restore/disks/Disks.vue +27 -27
  39. package/components/common/pages/backups/modals/restore/disks/tableView/lib/config/table.ts +117 -117
  40. package/components/common/pages/backups/modals/restore/name/Name.vue +166 -166
  41. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  42. package/components/common/pages/backups/modals/restore/networks/Networks.vue +67 -67
  43. package/components/common/pages/backups/modals/restore/networks/table/Table.vue +214 -214
  44. package/components/common/pages/backups/modals/restore/types/lib/config/typeOptions.ts +25 -25
  45. package/components/common/pages/backups/tools/Tools.vue +75 -75
  46. package/components/common/pages/backups/tools/lib/config/tabs.ts +36 -36
  47. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  48. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  49. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  50. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  51. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  52. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  53. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  54. package/components/common/select/radio/RadioGroup.vue +137 -137
  55. package/components/common/spiceConsole/Drawer.vue +392 -392
  56. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  57. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  58. package/components/common/tools/Actions.vue +207 -207
  59. package/components/common/treeView/TreeView.vue +52 -52
  60. package/components/common/vm/actions/add/Add.vue +874 -877
  61. package/components/common/vm/actions/add/New.vue +2 -6
  62. package/components/common/vm/actions/add/Old.vue +2 -6
  63. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  64. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  65. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  66. package/components/common/vm/actions/clone/Clone.vue +2 -2
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +368 -368
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/Table.vue +99 -99
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  76. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  77. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  78. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  79. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  80. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  81. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  82. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  83. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +143 -143
  84. package/components/common/vm/actions/common/select/computeResource/New.vue +184 -184
  85. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +131 -131
  86. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  87. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  88. package/components/common/vm/actions/common/select/name/Name.vue +188 -200
  89. package/components/common/vm/actions/common/select/name/Old.vue +130 -130
  90. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  91. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  92. package/components/common/vm/actions/common/select/storage/new/New.vue +320 -320
  93. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  94. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  95. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  96. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  97. package/components/common/vm/actions/register/Register.vue +263 -267
  98. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  99. package/components/common/wizards/datastore/add/Add.vue +228 -228
  100. package/components/common/wizards/datastore/add/lib/utils.ts +93 -93
  101. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  102. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  103. package/composables/useAppVersion.ts +21 -21
  104. package/composables/useLocal.ts +6 -6
  105. package/composables/useLocalCommon.ts +39 -39
  106. package/package.json +2 -2
  107. package/plugins/date.ts +233 -233
  108. package/plugins/panelStates.ts +70 -70
  109. package/plugins/text.ts +59 -59
  110. package/public/spice-console/lib/images/bitmap.js +203 -203
  111. package/public/spice-console/network/spicechannel.js +440 -440
  112. package/public/spice-console/run.js +210 -210
  113. package/store/main/mutations.ts +7 -7
  114. package/store/main/state.ts +7 -7
  115. package/components/common/vm/actions/clone/toTemplate/ToTemplate.vue +0 -644
  116. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +0 -118
  117. package/components/common/vm/actions/clone/toTemplate/lib/models/interfaces.ts +0 -14
@@ -1,644 +0,0 @@
1
- <template>
2
- <div class="clone-to-template">
3
- <atoms-wizard
4
- :wizard="wizard"
5
- :selected-scheme="selectedScheme"
6
- :title="title"
7
- :localization="localization"
8
- show
9
- @change-steps="onChangeSteps"
10
- @hide="onHideModal"
11
- @submit="onFinish"
12
- >
13
- <template #modalBody="{ selectedStep }">
14
- <atoms-loader
15
- v-show="!vmSettingsLocal || isLoading"
16
- id="loader"
17
- test-id="clone-to-template-loader"
18
- />
19
- <div v-if="vmSettingsLocal" class="vm-context">
20
- <common-pages-scheduled-tasks-modals-common-new-task-form
21
- v-show="selectedStep.id === dynamicSteps.scheduledTasks"
22
- v-model="newTaskForm"
23
- :target="selectedVirtualMachine"
24
- class="new-task-form"
25
- />
26
- <common-vm-actions-common-select-name
27
- v-show="selectedStep.id === dynamicSteps.selectName"
28
- :show="selectedStep.id === dynamicSteps.selectName"
29
- :name-form-submit="nameFormSubmit"
30
- :has-location="props.project === 'sphere'"
31
- @submit="onChangeName(...$event)"
32
- @check-name="emits('check-name', $event)"
33
- />
34
- <common-vm-actions-common-select-storage
35
- v-show="selectedStep.id === dynamicSteps.selectStorage"
36
- :storage-submit="storageSubmit"
37
- :datastore="props.datastore"
38
- :is-datastore-loading="props.isDatastoreLoading"
39
- :storage="vmSettingsLocal.storage"
40
- :get-datastore-table-func="props.getDatastoreTableFunc"
41
- @submit="onChangeStorage"
42
- />
43
- <common-vm-actions-common-customize-hardware
44
- v-show="selectedStep.id === dynamicSteps.customizeHardware"
45
- v-model:vm-name="vmName"
46
- v-model:guest-machine-type="vmSettingsLocal.guestMachineType"
47
- v-model:guest-os-family="vmSettingsLocal.guestOsFamily"
48
- v-model:guest-os-version="vmSettingsLocal.guestOsVersion"
49
- :storage="vmSettingsLocal.storage"
50
- :hard-disks-for-boot-options="virtualHardwareHardDisksLocal"
51
- :cd-dvd-drives-for-boot-options="virtualHardwareCdDvdDrivesLocal"
52
- :networks-for-boot-options="virtualHardwareNetworksLocal"
53
- :cd-dvd-drives="vmSettingsLocal.cdDvdDrives"
54
- :hard-disks="vmSettingsLocal.hardDisks"
55
- :networks="vmSettingsLocal.networks"
56
- :customize-hardware-submit="customizeHardwareSubmit"
57
- :max-cpus="vmSettingsLocal.maxCpus"
58
- :max-memory="vmSettingsLocal.maxMemory"
59
- :cpu-models="vmSettingsLocal.cpuModels"
60
- :cpu="vmSettingsLocal.cpu"
61
- :memory="vmSettingsLocal.memory"
62
- :video-card="vmSettingsLocal.videoCard"
63
- :usb-controller="vmSettingsLocal.usbController"
64
- :pci-devices="vmSettingsLocal.pciDevices"
65
- :selected-nav-item="selectedNavItem"
66
- :hard-disks-for-edit="vmSettingsLocal.hardDisks"
67
- :options="vmSettingsLocal.options"
68
- :nodes="props.nodes"
69
- :files="props.files"
70
- :networks-table="props.networksTable"
71
- :error-validation-fields="props.errorValidationFields"
72
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
73
- :passthrough-devices="props.passthroughDevices"
74
- :mediated-devices="props.mediatedDevices"
75
- :get-datastore-table-func="props.getDatastoreTableFunc"
76
- :datastore="props.datastore"
77
- :is-datastore-loading="props.isDatastoreLoading"
78
- :project="props.project"
79
- is-clone
80
- @change-boot-order="onChangeBootOrder"
81
- @send-data="onChangeCustomizeHardware"
82
- @get-storage="emits('get-storage', $event)"
83
- @get-folders-or-files="emits('get-folders-or-files', $event)"
84
- @get-active-device-child="emits('get-active-device-child', $event)"
85
- @show-datastore-child="emits('show-datastore-child', $event)"
86
- @get-networks-table="emits('get-networks-table', $event)"
87
- @get-pci-devices="emits('get-pci-devices')"
88
- />
89
- <common-ready-to-complete
90
- v-show="selectedStep.id === dynamicSteps.readyComplete"
91
- :data="props.readyCompleteTableInfo"
92
- />
93
- </div>
94
- </template>
95
- </atoms-wizard>
96
- </div>
97
- </template>
98
-
99
- <script setup lang="ts">
100
- import type {
101
- UI_I_ValidationReturn,
102
- UI_I_WizardStep,
103
- } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
104
- import Wizard from '~/node_modules/bfg-uikit/components/ui/wizard/lib/utils/utils'
105
- import type {
106
- UI_I_DatastoreTableItem,
107
- UI_I_FolderOrFileTreePayload,
108
- } from '~/lib/models/store/storage/interfaces'
109
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
110
- import type { API_UI_I_Error } from '~/lib/models/store/interfaces'
111
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
112
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
113
- import type { UI_I_Localization } from '~/lib/models/interfaces'
114
- import type { UI_I_SendDataCustomizeHardware } from '~/components/common/vm/actions/common/customizeHardware/lib/models/interfaces'
115
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
116
- import type {
117
- UI_I_SendDataCpu,
118
- UI_I_SendDataMemory,
119
- UI_I_SendDataNewCdDvdDrive,
120
- UI_I_SendDataNewHardDisk,
121
- UI_I_SendDataNewNetwork,
122
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
123
- import type { UI_T_SelectedNavItem } from '~/components/common/vm/actions/common/lib/models/types'
124
- import type { UI_I_TableInfoItem } from '~/components/atoms/table/info/lib/models/interfaces'
125
- import type { UI_T_ChangeBootOrder } from '~/components/common/vm/actions/lib/models/types'
126
- import type { UI_T_Project } from '~/lib/models/types'
127
- import type {
128
- UI_I_MediatedDevice,
129
- UI_I_PciDevice,
130
- UI_I_VmSettings,
131
- } from '~/lib/models/store/vm/interfaces'
132
- import type {
133
- UI_I_DynamicSteps,
134
- // UI_I_VmForm,
135
- } from '~/components/common/vm/actions/clone/toTemplate/lib/models/interfaces'
136
- import type { UI_I_Capabilities } from '~/components/common/vm/actions/common/lib/models/interfaces'
137
- import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
138
- import {
139
- stepsSchemeInitial,
140
- stepsFunc,
141
- getDynamicSteps,
142
- } from '~/components/common/vm/actions/clone/toTemplate/lib/config/steps'
143
- import { mapCapabilities } from '~/components/common/vm/actions/common/lib/utils/capabilities'
144
- import { scheduledTaskDefaultFormFunc } from '~/components/common/pages/scheduledTasks/modals/lib/config/createScheduledTask'
145
-
146
- const props = withDefaults(
147
- defineProps<{
148
- project: UI_T_Project
149
- vmSettings: UI_I_VmSettings | null
150
- nodes: UI_I_FileTreeNode[]
151
- files: UI_I_FileTreeNode[]
152
- networksTable: UI_I_NetworkTableItem[]
153
- datastore: UI_I_DatastoreTableItem[]
154
- isDatastoreLoading: boolean
155
- errorValidationFields: UI_I_ErrorValidationField[]
156
- readyCompleteTableInfo: UI_I_TableInfoItem[]
157
- vmCpuHelpTextSecond: string
158
- finishFunc: any
159
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
160
- validateSendDataFunc: any
161
- passthroughDevices: UI_I_PciDevice[]
162
- mediatedDevices: UI_I_MediatedDevice[]
163
- vmNameInWizard: string
164
- capabilities?: UI_I_Capabilities
165
- schedulerTask?: any // TODO надо interface переместить глобално
166
- selectedVirtualMachine?: UI_I_Capabilities
167
- }>(),
168
- {
169
- capabilities: undefined,
170
- schedulerTask: undefined,
171
- selectedVirtualMachine: undefined,
172
- }
173
- )
174
-
175
- const emits = defineEmits<{
176
- (event: 'check-name', value: [string, (error: API_UI_I_Error) => void]): void
177
- (event: 'get-storage', value: UI_I_TablePayload): void
178
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
179
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
180
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
181
- (event: 'remove-error-by-title', value: string): void
182
- (event: 'get-networks-table', value: UI_I_TablePayload): void
183
- (event: 'get-pci-devices'): void
184
- (event: 'hide'): void
185
- }>()
186
-
187
- const localization = computed<UI_I_Localization>(() => useLocal())
188
-
189
- const isScheduledTasks = computed<boolean>(
190
- () => props.schedulerTask?.isSchedulerTask
191
- )
192
-
193
- const title = computed<string>(() => {
194
- const { scheduleNewTasks, scheduleTaskEdit, cloneTemplate } =
195
- localization.value.common
196
-
197
- let result = cloneTemplate
198
- if (isScheduledTasks.value) {
199
- const schedulerMode = props.schedulerTask.editTask
200
- ? scheduleTaskEdit
201
- : scheduleNewTasks
202
-
203
- result = `${schedulerMode} (${cloneTemplate})`
204
- }
205
-
206
- return result
207
- })
208
-
209
- const dynamicSteps = ref<UI_I_DynamicSteps>(
210
- getDynamicSteps(isScheduledTasks.value)
211
- )
212
-
213
- watch(
214
- () => props.capabilities,
215
- () => {
216
- if (props.capabilities) mapCapabilities(props.capabilities)
217
- },
218
- { deep: true, immediate: true }
219
- )
220
-
221
- const wizard: Wizard = new Wizard(
222
- stepsFunc(localization.value, isScheduledTasks.value),
223
- stepsSchemeInitial(isScheduledTasks.value)
224
- )
225
- // TODO move to common
226
- const newTaskForm = ref<UI_I_ScheduleNewTasksForm>(
227
- useDeepCopy(scheduledTaskDefaultFormFunc())
228
- )
229
- watch(
230
- newTaskForm,
231
- (newValue: UI_I_ScheduleNewTasksForm) => {
232
- if (isScheduledTasks.value) wizard.setDisabledNextButton(newValue.isValid)
233
- },
234
- { immediate: true, deep: true }
235
- )
236
-
237
- const selectedScheme = computed<number[]>(() => wizard.selectedScheme.value)
238
-
239
- const onChangeSteps = async (value: UI_I_WizardStep[]): Promise<void> => {
240
- wizard.changeSteps(value, validationFunc, validateSendData)
241
- }
242
-
243
- const validationFunc = async (
244
- value: UI_I_WizardStep[],
245
- currentStep: UI_I_WizardStep,
246
- nextStep: UI_I_WizardStep
247
- ): Promise<UI_I_ValidationReturn> => {
248
- let stepHasError = false
249
- let stepShouldStop = {
250
- ifOnCurrentStep: false,
251
- ifFromAnyStep: false,
252
- stoppageStepId: -1,
253
- }
254
-
255
- wizard.setLoader(true)
256
- if (
257
- wizard.isValidateForStep(
258
- dynamicSteps.value.selectName,
259
- currentStep.id,
260
- nextStep.id
261
- )
262
- ) {
263
- const nameValidation = await checkName(value)
264
-
265
- value = nameValidation.newValue
266
- stepHasError = stepHasError || nameValidation.stepHasError
267
- } else if (
268
- wizard.isValidateForStep(
269
- dynamicSteps.value.selectStorage,
270
- currentStep.id,
271
- nextStep.id
272
- )
273
- ) {
274
- const storageValidation = await checkStorage(value)
275
-
276
- value = storageValidation.newValue
277
-
278
- stepHasError = stepHasError || storageValidation.stepHasError
279
- } else if (
280
- wizard.isValidateForStep(
281
- dynamicSteps.value.selectOptions,
282
- currentStep.id,
283
- nextStep.id
284
- )
285
- ) {
286
- selectOptionsSubmit.value++
287
- } else if (
288
- wizard.isValidateForStep(
289
- dynamicSteps.value.customizeHardware,
290
- currentStep.id,
291
- nextStep.id
292
- )
293
- ) {
294
- const customizeHardwareValidation = await checkCustomizeHardware(value)
295
-
296
- value = customizeHardwareValidation.newValue
297
-
298
- stepHasError = stepHasError || customizeHardwareValidation.stepHasError
299
- }
300
- wizard.setLoader(false)
301
-
302
- return {
303
- newValue: value,
304
- stepHasError,
305
- stepShouldStop,
306
- }
307
- }
308
- const checkName = async (
309
- value: UI_I_WizardStep[]
310
- ): Promise<UI_I_ValidationReturn> => {
311
- let stepHasError = false
312
-
313
- return new Promise((resolve) => {
314
- nameFormSubmit.value = (isValid: boolean) => {
315
- if (!isValid) {
316
- stepHasError = wizard.setValidation(
317
- dynamicSteps.value.selectName,
318
- 'name',
319
- {
320
- fieldMessage: 'aaa',
321
- alertMessage: 'aaa',
322
- }
323
- )
324
- } else if (wizard.hasMessage(dynamicSteps.value.selectName, 'name')) {
325
- value = wizard.removeValidation(
326
- dynamicSteps.value.selectName,
327
- 'name',
328
- value
329
- )
330
- }
331
-
332
- resolve({
333
- stepHasError,
334
- newValue: value,
335
- })
336
- nameFormSubmit.value = null
337
- }
338
- })
339
- }
340
- const checkStorage = async (
341
- value: UI_I_WizardStep[]
342
- ): Promise<UI_I_ValidationReturn> => {
343
- let stepHasError = false
344
-
345
- return new Promise((resolve) => {
346
- storageSubmit.value = (isValid: boolean) => {
347
- if (!isValid) {
348
- stepHasError = wizard.setValidation(
349
- dynamicSteps.value.selectStorage,
350
- 'storage',
351
- {
352
- fieldMessage: 'aaa',
353
- alertMessage: 'aaa',
354
- }
355
- )
356
- } else if (
357
- wizard.hasMessage(dynamicSteps.value.selectStorage, 'storage')
358
- ) {
359
- value = wizard.removeValidation(
360
- dynamicSteps.value.selectStorage,
361
- 'storage',
362
- value
363
- )
364
- }
365
-
366
- resolve({
367
- stepHasError,
368
- newValue: value,
369
- })
370
- storageSubmit.value = null
371
- }
372
- })
373
- }
374
- const checkCustomizeHardware = async (
375
- value: UI_I_WizardStep[]
376
- ): Promise<UI_I_ValidationReturn> => {
377
- let stepHasError = false
378
-
379
- return new Promise((resolve) => {
380
- customizeHardwareSubmit.value = (isValid: boolean) => {
381
- if (!isValid) {
382
- stepHasError = wizard.setValidation(
383
- dynamicSteps.value.customizeHardware,
384
- 'customizeHardware',
385
- {
386
- fieldMessage: 'aaa',
387
- alertMessage: 'aaa',
388
- }
389
- )
390
- } else if (
391
- wizard.hasMessage(
392
- dynamicSteps.value.customizeHardware,
393
- 'customizeHardware'
394
- )
395
- ) {
396
- value = wizard.removeValidation(
397
- dynamicSteps.value.customizeHardware,
398
- 'customizeHardware',
399
- value
400
- )
401
- }
402
-
403
- resolve({
404
- stepHasError,
405
- newValue: value,
406
- })
407
- storageSubmit.value = null
408
- }
409
- })
410
- }
411
-
412
- const storageIdCash = ref<string | null>(null)
413
- const onChangeName = (name: string): void => {
414
- vmSettingsLocal.value && (vmSettingsLocal.value.name = name)
415
- }
416
- const onChangeStorage = (storage: UI_I_DatastoreTableItem | null): void => {
417
- if (!storage) return
418
-
419
- vmSettingsLocal.value && (vmSettingsLocal.value.storage = storage)
420
- storageIdCash.value = storage.id
421
- }
422
- const customizeHardware = ref<UI_I_SendDataCustomizeHardware | null>(null)
423
- const onChangeCustomizeHardware = (
424
- data: UI_I_SendDataCustomizeHardware
425
- ): void => {
426
- customizeHardware.value = data
427
- }
428
-
429
- const virtualHardwareHardDisksLocal = computed<
430
- UI_I_SendDataNewHardDisk[] | null
431
- >(() => customizeHardware.value?.virtualHardware?.hardDisks || null)
432
- const virtualHardwareNetworksLocal = computed<UI_I_SendDataNewNetwork[] | null>(
433
- () => customizeHardware.value?.virtualHardware?.networks || null
434
- )
435
- const virtualHardwareCdDvdDrivesLocal = computed<
436
- UI_I_SendDataNewCdDvdDrive[] | null
437
- >(() => customizeHardware.value?.virtualHardware?.cdDvdDrives || null)
438
-
439
- const virtualHardwareCpu = computed<UI_I_SendDataCpu | null>(
440
- () => customizeHardware.value?.virtualHardware?.cpu || null
441
- )
442
- const virtualHardwareMemory = computed<UI_I_SendDataMemory | null>(
443
- () => customizeHardware.value?.virtualHardware?.memory || null
444
- )
445
- const virtualHardwareHardDisks = ref<UI_I_SendDataNewHardDisk[] | null>(null)
446
- const virtualHardwareCdDvdDrives = ref<UI_I_SendDataNewCdDvdDrive[] | null>(
447
- null
448
- )
449
- const virtualHardwareNetworks = ref<UI_I_SendDataNewNetwork[] | null>(null)
450
- const onChangeBootOrder = (data: UI_T_ChangeBootOrder): void => {
451
- virtualHardwareHardDisks.value = data[0]
452
- virtualHardwareCdDvdDrives.value = data[1]
453
- virtualHardwareNetworks.value = data[2]
454
- }
455
-
456
- const isPowerOnByDefault = ref<boolean>(true)
457
-
458
- watch(
459
- () => props.vmNameInWizard,
460
- (newValue) => {
461
- vmSettingsLocal.value && (vmSettingsLocal.value.name = newValue)
462
- }
463
- )
464
-
465
- const validateSendData = async (
466
- value: UI_I_WizardStep[]
467
- ): Promise<UI_I_ValidationReturn> => {
468
- wizard.setLoader(true)
469
- let stepHasError = false
470
-
471
- const data = await props.validateSendDataFunc(
472
- vmSettingsLocal.value,
473
- virtualHardwareCpu.value,
474
- virtualHardwareMemory.value,
475
- customizeHardware.value,
476
- virtualHardwareNetworks.value,
477
- virtualHardwareHardDisks.value,
478
- virtualHardwareCdDvdDrives.value,
479
- isPowerOnByDefault.value,
480
- localization.value
481
- )
482
-
483
- wizard.setLoader(false)
484
- if (data) {
485
- stepHasError = true
486
- selectedNavItem.value = data[0]
487
- }
488
-
489
- return {
490
- stepHasError,
491
- newValue: value,
492
- }
493
- }
494
-
495
- const isLoading = ref<boolean>(false)
496
- const onFinish = (): void => {
497
- isLoading.value = true
498
- wizard.setLoader(false)
499
- props
500
- .finishFunc(
501
- vmSettingsLocal.value,
502
- virtualHardwareCpu.value,
503
- virtualHardwareMemory.value,
504
- customizeHardware.value,
505
- virtualHardwareNetworks.value,
506
- virtualHardwareHardDisks.value,
507
- virtualHardwareCdDvdDrives.value,
508
- isPowerOnByDefault.value,
509
- localization.value,
510
- false,
511
- newTaskForm.value,
512
- props.schedulerTask
513
- )
514
- .then(() => {
515
- isLoading.value = false
516
- onHideModal()
517
- wizard.setLoader(false)
518
- })
519
- }
520
-
521
- const selectedNavItem = ref<UI_T_SelectedNavItem>(0)
522
-
523
- const nameFormSubmit = ref<null | Function>(null)
524
- const storageSubmit = ref<null | Function>(null)
525
- const selectOptionsSubmit = ref<number>(0)
526
- const customizeHardwareSubmit = ref<null | Function>(null)
527
-
528
- const vmSettingsLocal = computed<UI_I_VmSettings | null>(() => props.vmSettings)
529
- const vmName = ref<string>(vmSettingsLocal.value?.name || '')
530
- watch(vmSettingsLocal, (newValue) => {
531
- vmName.value = newValue?.name || ''
532
- })
533
-
534
- const onHideModal = (): void => {
535
- emits('hide')
536
- }
537
- </script>
538
-
539
- <style scoped lang="scss">
540
- :deep(.has-solid.close-icon.clr-icon) {
541
- width: 20px;
542
- top: 0;
543
- }
544
- .vm-context {
545
- padding: 16px 15px 10px 10px;
546
- height: 100%;
547
- display: flex;
548
- flex-direction: column;
549
-
550
- .context-title-wrap {
551
- padding-bottom: 3px;
552
- border-bottom: 1px solid #a6a6a6;
553
-
554
- h4 {
555
- font-weight: 700;
556
- font-size: 13px;
557
- color: var(--vm-context-title);
558
- }
559
- p {
560
- font-weight: 400;
561
- font-size: 13px;
562
- color: var(--vm-context-sub-title);
563
- }
564
- }
565
-
566
- .finish-block {
567
- padding: 18px 24px 24px 24px;
568
-
569
- .add-hosts-ready-to-complete-mt-12 {
570
- margin-top: 12px;
571
-
572
- .add-hosts-ready-to-complete-bold {
573
- line-height: 18px;
574
- font-weight: 700;
575
- }
576
- }
577
- }
578
-
579
- .vm-hardware-version {
580
- align-self: flex-end;
581
- margin-top: auto;
582
- }
583
- }
584
-
585
- :deep(.modal .modal-dialog .modal-content .modal-footer) {
586
- flex: unset;
587
- height: unset;
588
- min-height: unset;
589
- }
590
- :deep(.wizard-modal-titlebar h3) {
591
- color: #000;
592
- font-size: 24px;
593
- font-weight: 200;
594
- line-height: 27px;
595
- margin: 0;
596
- padding: 0;
597
- }
598
- :deep(.clr-wizard-stepnav-item) {
599
- padding-left: 0;
600
- }
601
- :deep(.clr-wizard-stepnav
602
- .clr-wizard-stepnav-item
603
- button
604
- .clr-wizard-stepnav-link-title) {
605
- width: 189px;
606
- font-weight: 700;
607
- font-size: 13px;
608
- }
609
-
610
- #vm-wizard-notification {
611
- h3 {
612
- color: var(--global-font-color7);
613
- margin-top: 6px;
614
- }
615
- p {
616
- color: var(--global-font-color6);
617
- line-height: 16px;
618
- }
619
- }
620
-
621
- .power-on-by-default-wrap {
622
- display: flex;
623
- align-items: center;
624
-
625
- input {
626
- margin-right: 6px;
627
- }
628
- }
629
-
630
- .new-task-form {
631
- padding: 0 25px 0 5px;
632
- }
633
- </style>
634
-
635
- <style>
636
- :root {
637
- --vm-context-title: #333;
638
- --vm-context-sub-title: #000;
639
- }
640
- :root.dark-theme {
641
- --vm-context-title: #adbbc4;
642
- --vm-context-sub-title: #adbbc4;
643
- }
644
- </style>