bfg-common 1.4.777 → 1.4.779

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