bfg-common 1.4.846 → 1.4.847

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 (181) hide show
  1. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  2. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  3. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  5. package/assets/scss/common/normalize.scss +361 -361
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/autocomplete/Autocomplete.vue +300 -300
  8. package/components/atoms/collapse/CollapseNav.vue +164 -164
  9. package/components/atoms/dropdown/dropdown/Dropdown.vue +168 -168
  10. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  11. package/components/atoms/stack/StackBlock.vue +185 -185
  12. package/components/atoms/table/dataGrid/DataGrid.vue +1704 -1704
  13. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  14. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  15. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  16. package/components/common/browse/BrowseNew.vue +237 -237
  17. package/components/common/browse/BrowseOld.vue +217 -217
  18. package/components/common/browse/blocks/contents/Files.vue +37 -37
  19. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  20. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  21. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  22. package/components/common/browse/blocks/lib/models/types.ts +1 -1
  23. package/components/common/browse/lib/models/interfaces.ts +5 -5
  24. package/components/common/context/Context.vue +111 -111
  25. package/components/common/context/lib/models/interfaces.ts +30 -30
  26. package/components/common/context/recursion/Recursion.vue +87 -87
  27. package/components/common/context/recursion/RecursionNew.vue +237 -237
  28. package/components/common/context/recursion/RecursionOld.vue +227 -227
  29. package/components/common/details/DetailsItem.vue +109 -109
  30. package/components/common/diagramMain/Header.vue +211 -211
  31. package/components/common/diagramMain/adapter/AdapterItems.vue +61 -61
  32. package/components/common/diagramMain/lib/config/initial.ts +50 -50
  33. package/components/common/diagramMain/lib/models/types.ts +21 -21
  34. package/components/common/diagramMain/lib/utils/utils.ts +331 -331
  35. package/components/common/diagramMain/modals/ManagePhysicalAdaptersModal.vue +330 -330
  36. package/components/common/diagramMain/modals/editSettings/ConfirmTeamingSettingsModal.vue +40 -40
  37. package/components/common/diagramMain/modals/editSettings/EditSettings.vue +497 -497
  38. package/components/common/diagramMain/modals/editSettings/EditSettingsModal.vue +812 -812
  39. package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +214 -214
  40. package/components/common/diagramMain/modals/editSettings/tabs/Security.vue +189 -189
  41. package/components/common/diagramMain/modals/editSettings/tabs/SwitchProperties.vue +163 -163
  42. package/components/common/diagramMain/modals/editSettings/tabs/TeamingFailover.vue +175 -175
  43. package/components/common/diagramMain/modals/editSettings/tabs/port/IpvFourSettings.vue +346 -346
  44. package/components/common/diagramMain/modals/editSettings/tabs/port/PortProperties.vue +205 -205
  45. package/components/common/diagramMain/modals/lib/config/diagramConfig.ts +23 -23
  46. package/components/common/diagramMain/modals/lib/config/initial.ts +180 -180
  47. package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +90 -90
  48. package/components/common/diagramMain/modals/lib/mappers/mappers.ts +87 -87
  49. package/components/common/diagramMain/modals/lib/utils/index.ts +24 -24
  50. package/components/common/diagramMain/modals/migrateVmkernelAdapter/lib/config/steps.ts +114 -114
  51. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/ConnectionSettings.vue +169 -169
  52. package/components/common/diagramMain/modals/migrateVmkernelAdapter/steps/SelectVmkernelAdapter.vue +159 -159
  53. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +14 -14
  54. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/connectionSettings.ts +137 -137
  55. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/selectVmkernelAdapter.ts +52 -52
  56. package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/validations.ts +19 -19
  57. package/components/common/diagramMain/port/Ports.vue +47 -47
  58. package/components/common/graph/Graph.vue +104 -104
  59. package/components/common/graph/GraphOld.vue +31 -31
  60. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  61. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  62. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  63. package/components/common/monitor/overview/Overview.vue +221 -221
  64. package/components/common/monitor/overview/OverviewNew.vue +142 -142
  65. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  66. package/components/common/monitor/overview/filters/Filters.vue +166 -166
  67. package/components/common/monitor/overview/filters/FiltersNew.vue +172 -172
  68. package/components/common/monitor/overview/filters/FiltersOld.vue +151 -151
  69. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +175 -175
  70. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalNew.vue +181 -181
  71. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalOld.vue +161 -161
  72. package/components/common/pages/home/StatusContent.vue +49 -49
  73. package/components/common/pages/home/headline/Headline.vue +45 -45
  74. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  75. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  76. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  77. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  78. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  79. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  80. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  81. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  82. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  83. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  84. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  85. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  86. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  87. package/components/common/pages/packages/Packages.vue +208 -208
  88. package/components/common/pages/tasks/table/errorInfo/ErrorInfo.vue +8 -3
  89. package/components/common/pages/tasks/table/expandDetails/ExpandDetails.vue +1 -0
  90. package/components/common/pages/tasks/table/lib/config/config.ts +1 -0
  91. package/components/common/recursionTree/RecursionTree.vue +223 -223
  92. package/components/common/select/button/ButtonDropdown.vue +108 -108
  93. package/components/common/spiceConsole/Drawer.vue +370 -370
  94. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  95. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  96. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  97. package/components/common/split/vertical/Vertical.vue +160 -160
  98. package/components/common/vm/actions/add/Add.vue +621 -621
  99. package/components/common/vm/actions/clone/Clone.vue +639 -639
  100. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  101. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +271 -271
  102. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +271 -271
  103. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +174 -174
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +694 -694
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  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/limit/Limit.vue +220 -220
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +364 -364
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskNew.vue +229 -229
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDiskOld.vue +247 -247
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +283 -283
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  144. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  163. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  164. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  165. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  166. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  167. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  168. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  169. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  170. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  171. package/components/common/wizards/vm/migrate/Migrate.vue +288 -288
  172. package/composables/productNameLocal.ts +30 -30
  173. package/composables/useAppVersion.ts +21 -21
  174. package/package.json +2 -2
  175. package/plugins/date.ts +233 -233
  176. package/plugins/recursion.ts +311 -311
  177. package/public/spice-console/lib/images/bitmap.js +203 -203
  178. package/public/spice-console/network/spicechannel.js +383 -383
  179. package/store/main/mutations.ts +7 -7
  180. package/store/main/state.ts +7 -7
  181. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,364 +1,364 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-new
3
- v-if="isNewView"
4
- v-model:delete-files-from-datastore="deleteFilesFromDatastore"
5
- v-model:size="size"
6
- v-model:hard-disk-type="hardDiskType"
7
- v-model:disk-provisioning="diskProvisioning"
8
- v-model:sharing="sharing"
9
- v-model:limit-iops="limitIops"
10
- v-model:limit-iops-type="limitIopsType"
11
- v-model:limit-iops-invalid="limitIopsInvalid"
12
- v-model:disk-mode="diskMode"
13
- v-model:cache="cache"
14
- v-model:bus="bus"
15
- :is-removable="isRemovable"
16
- :label="label"
17
- :hard-disk-invalid="hardDiskInvalid"
18
- :error-text="hardDiskLocalAndApiErrorsTexts"
19
- :hard-disk-type-error-local-text="hardDiskTypeErrorLocalText"
20
- :is-disabled-size="isDisabledSize"
21
- :hard-disk-type-options="hardDiskTypeOptions"
22
- :max-hard-disk="maxHardDisk"
23
- :location="location"
24
- :is-running="isRunning"
25
- :is-new-hard-disk="!isNotNewHardDisk"
26
- :is-edit="props.isEdit"
27
- :datastore="props.datastore"
28
- :get-datastore-table-func="props.getDatastoreTableFunc"
29
- :error-validation-fields="props.errorValidationFields"
30
- :index="props.index"
31
- :type="props.type"
32
- :hard-disk="props.hardDisk"
33
- :guest-machine-type="props.guestMachineType"
34
- :is-new-type="isNewType"
35
- @remove="emits('remove')"
36
- @roll-back="emits('roll-back')"
37
- @validate-size="onValidateSize"
38
- @change-storage="onChangeStorage"
39
- @remove-error-by-title="emits('remove-error-by-title', $event)"
40
- />
41
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-old
42
- v-else
43
- v-model:delete-files-from-datastore="deleteFilesFromDatastore"
44
- v-model:size="size"
45
- v-model:hard-disk-type="hardDiskType"
46
- v-model:disk-provisioning="diskProvisioning"
47
- v-model:sharing="sharing"
48
- v-model:limit-iops="limitIops"
49
- v-model:limit-iops-type="limitIopsType"
50
- v-model:limit-iops-invalid="limitIopsInvalid"
51
- v-model:disk-mode="diskMode"
52
- v-model:cache="cache"
53
- v-model:bus="bus"
54
- :is-removable="isRemovable"
55
- :label="label"
56
- :hard-disk-invalid="hardDiskInvalid"
57
- :error-text="hardDiskLocalAndApiErrorsTexts"
58
- :hard-disk-type-error-local-text="hardDiskTypeErrorLocalText"
59
- :is-disabled-size="isDisabledSize"
60
- :hard-disk-type-options="hardDiskTypeOptions"
61
- :max-hard-disk="maxHardDisk"
62
- :location="location"
63
- :is-running="isRunning"
64
- :is-new-hard-disk="!isNotNewHardDisk"
65
- :is-edit="props.isEdit"
66
- :datastore="props.datastore"
67
- :get-datastore-table-func="props.getDatastoreTableFunc"
68
- :error-validation-fields="props.errorValidationFields"
69
- :index="props.index"
70
- :type="props.type"
71
- :hard-disk="props.hardDisk"
72
- :guest-machine-type="props.guestMachineType"
73
- :is-new-type="isNewType"
74
- @remove="emits('remove')"
75
- @roll-back="emits('roll-back')"
76
- @validate-size="onValidateSize"
77
- @change-storage="onChangeStorage"
78
- @remove-error-by-title="emits('remove-error-by-title', $event)"
79
- />
80
- </template>
81
-
82
- <script setup lang="ts">
83
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
84
- import type {
85
- UI_I_SendDataNewHardDisk,
86
- UI_I_SendDataNewHardDiskStorage,
87
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
88
- import type { UI_T_HardDiskType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
89
- import type { UI_I_Localization } from '~/lib/models/interfaces'
90
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
91
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
92
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
93
- import { binaryOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/binaryOptions'
94
-
95
- const props = defineProps<{
96
- storage: UI_I_DatastoreTableItem | null
97
- hardDisk: UI_I_SendDataNewHardDisk
98
- type: UI_T_HardDiskType
99
- index: number
100
- errorValidationFields: UI_I_ErrorValidationField<string>[]
101
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
102
- datastore: UI_I_DatastoreTableItem[]
103
- isEdit: boolean
104
- state?: string | number
105
- guestMachineType?: UI_I_OptionItem | null
106
- }>()
107
- const emits = defineEmits<{
108
- (event: 'send-data', value: UI_I_SendDataNewHardDisk): void
109
- (event: 'invalid', value: boolean): void
110
- (event: 'remove'): void
111
- (event: 'roll-back'): void
112
- (event: 'remove-error-by-title', value: string): void
113
- }>()
114
-
115
- const { $store, $binary }: any = useNuxtApp()
116
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
117
-
118
- const localization = computed<UI_I_Localization>(() => useLocal())
119
-
120
- const isRunning = computed<boolean>(() => {
121
- return props.state === 2
122
- })
123
-
124
- const isRemovable = computed<boolean>(() => {
125
- return (
126
- !props.isEdit ||
127
- !isRunning.value ||
128
- (isRunning.value && bus.value === 'virtio')
129
- )
130
- })
131
-
132
- const isNewType = computed<boolean>(
133
- () => props.type === 'new' || props.type === 'clone'
134
- )
135
-
136
- const typeError = computed<string>(() => `disk_devices[${props.index}].size`)
137
-
138
- const apiErrorLocal = computed<string>(() => {
139
- return (
140
- props.errorValidationFields?.find(
141
- (message) => message.field === typeError.value
142
- )?.error_message || ''
143
- )
144
- })
145
-
146
- // PC-1796
147
- const isNotNewHardDisk = computed<boolean>(
148
- () => props.type === 'edit' || props.type === 'removed'
149
- )
150
- const label = computed<string>(() => {
151
- // if (props.type === 'edit' || props.type === 'removed')
152
- if (isNotNewHardDisk.value)
153
- return `${localization.value.common.hardDisk} ${props.index + 1}`
154
-
155
- return `${localization.value.common.newHardDisk} *`
156
- })
157
-
158
- const maxHardDisk = computed<number>(() => {
159
- if (props.type === 'exist') return $binary.gbToMb(props.hardDisk.size)
160
-
161
- if (!storage.value) return 0
162
-
163
- if (props.isEdit)
164
- return storage.value.capacity.free_mb + $binary.gbToMb(props.hardDisk.size)
165
-
166
- return storage.value.capacity.free_mb
167
- })
168
- const hardDiskTypeErrorLocalText = computed<string>(() => {
169
- if (+sizeInMb.value > maxHardDisk.value) {
170
- return localization.value.common.diskCapacitySpecifiedGreater
171
- }
172
-
173
- if (+sizeInMb.value <= 0) {
174
- return localization.value.common.diskCapacityCannotZero
175
- }
176
-
177
- return ''
178
- })
179
-
180
- const hardDiskLocalAndApiErrorsTexts = computed<string>(() => {
181
- const localError = hardDiskTypeErrorLocalText.value
182
- const apiError = apiErrorLocal.value
183
-
184
- let result = ''
185
- if (localError && !apiError) result = localError
186
- if (!localError && apiError) result = apiError
187
- if (localError && apiError) result = localError + ', ' + apiError
188
- if (!localError && apiError) result = apiError
189
-
190
- return result
191
- })
192
-
193
- const deleteFilesFromDatastore = ref<boolean>(false)
194
-
195
- const hardDiskType = ref<string>('gb')
196
- const hardDiskTypeOptions = ref<UI_I_OptionItem[]>(
197
- binaryOptionsFunc(localization.value)
198
- )
199
-
200
- const size = ref<number>(props.hardDisk.size) // Изначально всегда приходит в gb
201
- const sizeInMb = computed<number>(() => {
202
- if (hardDiskType.value === 'mb') {
203
- return size.value
204
- }
205
-
206
- return $binary.universalFromTo(size.value, hardDiskType.value, 'mb')
207
- })
208
- const onValidateSize = (): void => {
209
- if (props.type !== 'edit') return
210
- if (sizeInMb.value < $binary.gbToMb(props.hardDisk.size)) {
211
- size.value = $binary.universalFromTo(
212
- props.hardDisk.size,
213
- 'gb',
214
- hardDiskType.value
215
- )
216
- }
217
- }
218
-
219
- const isDisabledSize = computed<boolean>(() => {
220
- return props.type === 'exist' || (props.type === 'edit' && readOnly.value)
221
- })
222
-
223
- const location = ref<UI_I_DatastoreTableItem | null>(props.storage || null)
224
- watch(
225
- () => props.storage,
226
- (newValue) => {
227
- location.value = newValue
228
- storage.value = newValue
229
- }
230
- )
231
- const storage = ref<UI_I_DatastoreTableItem | null>(props.storage)
232
- const onChangeStorage = (item: UI_I_DatastoreTableItem): void => {
233
- storage.value = item
234
- }
235
-
236
- const diskProvisioning = ref<string>('thick')
237
- const sharing = ref<string>('')
238
- const shares = ref<number>(0)
239
-
240
- const limitIops = ref<number>(16)
241
- const limitIopsType = ref<string>('unlimited')
242
- const limitIopsInvalid = ref<boolean>(false)
243
-
244
- const diskMode = ref<string>('dependent')
245
-
246
- const cache = ref<string>('none')
247
-
248
- const bus = ref<string>('ide')
249
-
250
- const readOnly = ref<boolean>(false)
251
-
252
- const discard = ref<string>('')
253
-
254
- const io = ref<string>('')
255
-
256
- const target = ref<string>('')
257
-
258
- watch(
259
- [
260
- sizeInMb,
261
- storage,
262
- diskProvisioning,
263
- sharing,
264
- limitIops,
265
- limitIopsType,
266
- diskMode,
267
- cache,
268
- bus,
269
- deleteFilesFromDatastore,
270
- (): void => props.type,
271
- ],
272
- () => {
273
- const limitIopsLocal =
274
- limitIopsType.value === 'unlimited' ? 0 : limitIops.value
275
- const storageLocal: UI_I_SendDataNewHardDiskStorage = {
276
- id: storage.value?.id || '',
277
- name: storage.value?.name || '',
278
- type: storage.value?.type_text || '',
279
- pool: storage.value?.pool_name || '',
280
- user: '',
281
- endpoint: '',
282
- password: '',
283
- protocol: '',
284
- options: '',
285
- }
286
-
287
- emits('send-data', {
288
- create: props.hardDisk.create,
289
- attach: props.hardDisk.attach,
290
- source: props.hardDisk.source,
291
- size: Math.ceil(sizeInMb.value),
292
- bus: bus.value,
293
- target: target.value,
294
- storage: storageLocal,
295
- device_type: 'disk',
296
- provision_type: diskProvisioning.value,
297
- disk_mode: diskMode.value,
298
- sharing: sharing.value === 'yes',
299
- read_only: readOnly.value,
300
- shares: shares.value,
301
- cache: cache.value,
302
- io: io.value,
303
- limit_iops: limitIopsLocal,
304
- discard: discard.value,
305
- capacity: Math.ceil(sizeInMb.value),
306
- boot_order: props.hardDisk.boot_order,
307
- detach: props.type === 'removed',
308
- remove: props.type === 'removed' && deleteFilesFromDatastore.value, // Проверяем если удалили диск и указали Delete files from datastore
309
- })
310
- },
311
- { immediate: true }
312
- )
313
-
314
- // Добавляем данные для редактирования
315
- watch(
316
- () => props.hardDisk,
317
- (newValue) => {
318
- // TODO refactoring
319
- if (props.type === 'exist') {
320
- diskProvisioning.value = newValue.provision_type || 'thick'
321
- return
322
- }
323
- // if (props.type !== 'edit') return
324
- if (props.type !== 'edit' && props.type !== 'clone') return
325
-
326
- diskProvisioning.value = newValue.provision_type || 'thick'
327
- sharing.value = newValue.sharing ? 'yes' : ''
328
- shares.value = newValue.shares || 0
329
- // limitIopsType.value = newValue.io === 'native' ? 'unlimited' : 'custom'
330
- limitIopsType.value = newValue.limit_iops === 0 ? 'unlimited' : 'custom'
331
- limitIops.value = newValue.limit_iops || 16
332
- diskMode.value = newValue.disk_mode || 'dependent'
333
- cache.value = newValue.cache || 'none'
334
- bus.value = newValue.bus || 'ide'
335
- readOnly.value = newValue.read_only || false
336
- discard.value = newValue.discard || ''
337
- io.value = newValue.io || ''
338
- target.value = newValue.target || ''
339
- },
340
- { immediate: true }
341
- )
342
- watch(
343
- isRunning,
344
- (newValue) => {
345
- if (newValue && props.type === 'new') {
346
- bus.value = 'virtio'
347
- }
348
- },
349
- { immediate: true }
350
- )
351
-
352
- const hardDiskInvalid = computed<boolean>(() => {
353
- return !!hardDiskTypeErrorLocalText.value || limitIopsInvalid.value
354
- })
355
- watch(
356
- hardDiskInvalid,
357
- (newValue) => {
358
- emits('invalid', newValue)
359
- },
360
- { immediate: true }
361
- )
362
- </script>
363
-
364
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-new
3
+ v-if="isNewView"
4
+ v-model:delete-files-from-datastore="deleteFilesFromDatastore"
5
+ v-model:size="size"
6
+ v-model:hard-disk-type="hardDiskType"
7
+ v-model:disk-provisioning="diskProvisioning"
8
+ v-model:sharing="sharing"
9
+ v-model:limit-iops="limitIops"
10
+ v-model:limit-iops-type="limitIopsType"
11
+ v-model:limit-iops-invalid="limitIopsInvalid"
12
+ v-model:disk-mode="diskMode"
13
+ v-model:cache="cache"
14
+ v-model:bus="bus"
15
+ :is-removable="isRemovable"
16
+ :label="label"
17
+ :hard-disk-invalid="hardDiskInvalid"
18
+ :error-text="hardDiskLocalAndApiErrorsTexts"
19
+ :hard-disk-type-error-local-text="hardDiskTypeErrorLocalText"
20
+ :is-disabled-size="isDisabledSize"
21
+ :hard-disk-type-options="hardDiskTypeOptions"
22
+ :max-hard-disk="maxHardDisk"
23
+ :location="location"
24
+ :is-running="isRunning"
25
+ :is-new-hard-disk="!isNotNewHardDisk"
26
+ :is-edit="props.isEdit"
27
+ :datastore="props.datastore"
28
+ :get-datastore-table-func="props.getDatastoreTableFunc"
29
+ :error-validation-fields="props.errorValidationFields"
30
+ :index="props.index"
31
+ :type="props.type"
32
+ :hard-disk="props.hardDisk"
33
+ :guest-machine-type="props.guestMachineType"
34
+ :is-new-type="isNewType"
35
+ @remove="emits('remove')"
36
+ @roll-back="emits('roll-back')"
37
+ @validate-size="onValidateSize"
38
+ @change-storage="onChangeStorage"
39
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
40
+ />
41
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-old
42
+ v-else
43
+ v-model:delete-files-from-datastore="deleteFilesFromDatastore"
44
+ v-model:size="size"
45
+ v-model:hard-disk-type="hardDiskType"
46
+ v-model:disk-provisioning="diskProvisioning"
47
+ v-model:sharing="sharing"
48
+ v-model:limit-iops="limitIops"
49
+ v-model:limit-iops-type="limitIopsType"
50
+ v-model:limit-iops-invalid="limitIopsInvalid"
51
+ v-model:disk-mode="diskMode"
52
+ v-model:cache="cache"
53
+ v-model:bus="bus"
54
+ :is-removable="isRemovable"
55
+ :label="label"
56
+ :hard-disk-invalid="hardDiskInvalid"
57
+ :error-text="hardDiskLocalAndApiErrorsTexts"
58
+ :hard-disk-type-error-local-text="hardDiskTypeErrorLocalText"
59
+ :is-disabled-size="isDisabledSize"
60
+ :hard-disk-type-options="hardDiskTypeOptions"
61
+ :max-hard-disk="maxHardDisk"
62
+ :location="location"
63
+ :is-running="isRunning"
64
+ :is-new-hard-disk="!isNotNewHardDisk"
65
+ :is-edit="props.isEdit"
66
+ :datastore="props.datastore"
67
+ :get-datastore-table-func="props.getDatastoreTableFunc"
68
+ :error-validation-fields="props.errorValidationFields"
69
+ :index="props.index"
70
+ :type="props.type"
71
+ :hard-disk="props.hardDisk"
72
+ :guest-machine-type="props.guestMachineType"
73
+ :is-new-type="isNewType"
74
+ @remove="emits('remove')"
75
+ @roll-back="emits('roll-back')"
76
+ @validate-size="onValidateSize"
77
+ @change-storage="onChangeStorage"
78
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
79
+ />
80
+ </template>
81
+
82
+ <script setup lang="ts">
83
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
84
+ import type {
85
+ UI_I_SendDataNewHardDisk,
86
+ UI_I_SendDataNewHardDiskStorage,
87
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
88
+ import type { UI_T_HardDiskType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
89
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
90
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
91
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
92
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
93
+ import { binaryOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/binaryOptions'
94
+
95
+ const props = defineProps<{
96
+ storage: UI_I_DatastoreTableItem | null
97
+ hardDisk: UI_I_SendDataNewHardDisk
98
+ type: UI_T_HardDiskType
99
+ index: number
100
+ errorValidationFields: UI_I_ErrorValidationField<string>[]
101
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
102
+ datastore: UI_I_DatastoreTableItem[]
103
+ isEdit: boolean
104
+ state?: string | number
105
+ guestMachineType?: UI_I_OptionItem | null
106
+ }>()
107
+ const emits = defineEmits<{
108
+ (event: 'send-data', value: UI_I_SendDataNewHardDisk): void
109
+ (event: 'invalid', value: boolean): void
110
+ (event: 'remove'): void
111
+ (event: 'roll-back'): void
112
+ (event: 'remove-error-by-title', value: string): void
113
+ }>()
114
+
115
+ const { $store, $binary }: any = useNuxtApp()
116
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
117
+
118
+ const localization = computed<UI_I_Localization>(() => useLocal())
119
+
120
+ const isRunning = computed<boolean>(() => {
121
+ return props.state === 2
122
+ })
123
+
124
+ const isRemovable = computed<boolean>(() => {
125
+ return (
126
+ !props.isEdit ||
127
+ !isRunning.value ||
128
+ (isRunning.value && bus.value === 'virtio')
129
+ )
130
+ })
131
+
132
+ const isNewType = computed<boolean>(
133
+ () => props.type === 'new' || props.type === 'clone'
134
+ )
135
+
136
+ const typeError = computed<string>(() => `disk_devices[${props.index}].size`)
137
+
138
+ const apiErrorLocal = computed<string>(() => {
139
+ return (
140
+ props.errorValidationFields?.find(
141
+ (message) => message.field === typeError.value
142
+ )?.error_message || ''
143
+ )
144
+ })
145
+
146
+ // PC-1796
147
+ const isNotNewHardDisk = computed<boolean>(
148
+ () => props.type === 'edit' || props.type === 'removed'
149
+ )
150
+ const label = computed<string>(() => {
151
+ // if (props.type === 'edit' || props.type === 'removed')
152
+ if (isNotNewHardDisk.value)
153
+ return `${localization.value.common.hardDisk} ${props.index + 1}`
154
+
155
+ return `${localization.value.common.newHardDisk} *`
156
+ })
157
+
158
+ const maxHardDisk = computed<number>(() => {
159
+ if (props.type === 'exist') return $binary.gbToMb(props.hardDisk.size)
160
+
161
+ if (!storage.value) return 0
162
+
163
+ if (props.isEdit)
164
+ return storage.value.capacity.free_mb + $binary.gbToMb(props.hardDisk.size)
165
+
166
+ return storage.value.capacity.free_mb
167
+ })
168
+ const hardDiskTypeErrorLocalText = computed<string>(() => {
169
+ if (+sizeInMb.value > maxHardDisk.value) {
170
+ return localization.value.common.diskCapacitySpecifiedGreater
171
+ }
172
+
173
+ if (+sizeInMb.value <= 0) {
174
+ return localization.value.common.diskCapacityCannotZero
175
+ }
176
+
177
+ return ''
178
+ })
179
+
180
+ const hardDiskLocalAndApiErrorsTexts = computed<string>(() => {
181
+ const localError = hardDiskTypeErrorLocalText.value
182
+ const apiError = apiErrorLocal.value
183
+
184
+ let result = ''
185
+ if (localError && !apiError) result = localError
186
+ if (!localError && apiError) result = apiError
187
+ if (localError && apiError) result = localError + ', ' + apiError
188
+ if (!localError && apiError) result = apiError
189
+
190
+ return result
191
+ })
192
+
193
+ const deleteFilesFromDatastore = ref<boolean>(false)
194
+
195
+ const hardDiskType = ref<string>('gb')
196
+ const hardDiskTypeOptions = ref<UI_I_OptionItem[]>(
197
+ binaryOptionsFunc(localization.value)
198
+ )
199
+
200
+ const size = ref<number>(props.hardDisk.size) // Изначально всегда приходит в gb
201
+ const sizeInMb = computed<number>(() => {
202
+ if (hardDiskType.value === 'mb') {
203
+ return size.value
204
+ }
205
+
206
+ return $binary.universalFromTo(size.value, hardDiskType.value, 'mb')
207
+ })
208
+ const onValidateSize = (): void => {
209
+ if (props.type !== 'edit') return
210
+ if (sizeInMb.value < $binary.gbToMb(props.hardDisk.size)) {
211
+ size.value = $binary.universalFromTo(
212
+ props.hardDisk.size,
213
+ 'gb',
214
+ hardDiskType.value
215
+ )
216
+ }
217
+ }
218
+
219
+ const isDisabledSize = computed<boolean>(() => {
220
+ return props.type === 'exist' || (props.type === 'edit' && readOnly.value)
221
+ })
222
+
223
+ const location = ref<UI_I_DatastoreTableItem | null>(props.storage || null)
224
+ watch(
225
+ () => props.storage,
226
+ (newValue) => {
227
+ location.value = newValue
228
+ storage.value = newValue
229
+ }
230
+ )
231
+ const storage = ref<UI_I_DatastoreTableItem | null>(props.storage)
232
+ const onChangeStorage = (item: UI_I_DatastoreTableItem): void => {
233
+ storage.value = item
234
+ }
235
+
236
+ const diskProvisioning = ref<string>('thick')
237
+ const sharing = ref<string>('')
238
+ const shares = ref<number>(0)
239
+
240
+ const limitIops = ref<number>(16)
241
+ const limitIopsType = ref<string>('unlimited')
242
+ const limitIopsInvalid = ref<boolean>(false)
243
+
244
+ const diskMode = ref<string>('dependent')
245
+
246
+ const cache = ref<string>('none')
247
+
248
+ const bus = ref<string>('ide')
249
+
250
+ const readOnly = ref<boolean>(false)
251
+
252
+ const discard = ref<string>('')
253
+
254
+ const io = ref<string>('')
255
+
256
+ const target = ref<string>('')
257
+
258
+ watch(
259
+ [
260
+ sizeInMb,
261
+ storage,
262
+ diskProvisioning,
263
+ sharing,
264
+ limitIops,
265
+ limitIopsType,
266
+ diskMode,
267
+ cache,
268
+ bus,
269
+ deleteFilesFromDatastore,
270
+ (): void => props.type,
271
+ ],
272
+ () => {
273
+ const limitIopsLocal =
274
+ limitIopsType.value === 'unlimited' ? 0 : limitIops.value
275
+ const storageLocal: UI_I_SendDataNewHardDiskStorage = {
276
+ id: storage.value?.id || '',
277
+ name: storage.value?.name || '',
278
+ type: storage.value?.type_text || '',
279
+ pool: storage.value?.pool_name || '',
280
+ user: '',
281
+ endpoint: '',
282
+ password: '',
283
+ protocol: '',
284
+ options: '',
285
+ }
286
+
287
+ emits('send-data', {
288
+ create: props.hardDisk.create,
289
+ attach: props.hardDisk.attach,
290
+ source: props.hardDisk.source,
291
+ size: Math.ceil(sizeInMb.value),
292
+ bus: bus.value,
293
+ target: target.value,
294
+ storage: storageLocal,
295
+ device_type: 'disk',
296
+ provision_type: diskProvisioning.value,
297
+ disk_mode: diskMode.value,
298
+ sharing: sharing.value === 'yes',
299
+ read_only: readOnly.value,
300
+ shares: shares.value,
301
+ cache: cache.value,
302
+ io: io.value,
303
+ limit_iops: limitIopsLocal,
304
+ discard: discard.value,
305
+ capacity: Math.ceil(sizeInMb.value),
306
+ boot_order: props.hardDisk.boot_order,
307
+ detach: props.type === 'removed',
308
+ remove: props.type === 'removed' && deleteFilesFromDatastore.value, // Проверяем если удалили диск и указали Delete files from datastore
309
+ })
310
+ },
311
+ { immediate: true }
312
+ )
313
+
314
+ // Добавляем данные для редактирования
315
+ watch(
316
+ () => props.hardDisk,
317
+ (newValue) => {
318
+ // TODO refactoring
319
+ if (props.type === 'exist') {
320
+ diskProvisioning.value = newValue.provision_type || 'thick'
321
+ return
322
+ }
323
+ // if (props.type !== 'edit') return
324
+ if (props.type !== 'edit' && props.type !== 'clone') return
325
+
326
+ diskProvisioning.value = newValue.provision_type || 'thick'
327
+ sharing.value = newValue.sharing ? 'yes' : ''
328
+ shares.value = newValue.shares || 0
329
+ // limitIopsType.value = newValue.io === 'native' ? 'unlimited' : 'custom'
330
+ limitIopsType.value = newValue.limit_iops === 0 ? 'unlimited' : 'custom'
331
+ limitIops.value = newValue.limit_iops || 16
332
+ diskMode.value = newValue.disk_mode || 'dependent'
333
+ cache.value = newValue.cache || 'none'
334
+ bus.value = newValue.bus || 'ide'
335
+ readOnly.value = newValue.read_only || false
336
+ discard.value = newValue.discard || ''
337
+ io.value = newValue.io || ''
338
+ target.value = newValue.target || ''
339
+ },
340
+ { immediate: true }
341
+ )
342
+ watch(
343
+ isRunning,
344
+ (newValue) => {
345
+ if (newValue && props.type === 'new') {
346
+ bus.value = 'virtio'
347
+ }
348
+ },
349
+ { immediate: true }
350
+ )
351
+
352
+ const hardDiskInvalid = computed<boolean>(() => {
353
+ return !!hardDiskTypeErrorLocalText.value || limitIopsInvalid.value
354
+ })
355
+ watch(
356
+ hardDiskInvalid,
357
+ (newValue) => {
358
+ emits('invalid', newValue)
359
+ },
360
+ { immediate: true }
361
+ )
362
+ </script>
363
+
364
+ <style scoped lang="scss"></style>