bfg-common 1.4.770 → 1.4.772

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 (167) 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 +6 -2
  6. package/assets/localization/local_en.json +6 -2
  7. package/assets/localization/local_hy.json +6 -2
  8. package/assets/localization/local_kk.json +6 -2
  9. package/assets/localization/local_ru.json +6 -2
  10. package/assets/localization/local_zh.json +6 -2
  11. package/assets/scss/common/normalize.scss +361 -361
  12. package/components/atoms/TheIcon3.vue +50 -50
  13. package/components/atoms/autocomplete/Autocomplete.vue +2 -1
  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 +1 -1
  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/recursionTree/RecursionTree.vue +223 -223
  83. package/components/common/select/button/ButtonDropdown.vue +108 -108
  84. package/components/common/spiceConsole/Drawer.vue +370 -370
  85. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  86. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  87. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  88. package/components/common/split/vertical/Vertical.vue +160 -160
  89. package/components/common/vm/actions/add/Add.vue +621 -621
  90. package/components/common/vm/actions/clone/Clone.vue +639 -639
  91. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  92. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +271 -271
  93. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +271 -271
  94. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +174 -174
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  102. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  103. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  104. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +357 -357
  105. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  106. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  107. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  108. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  109. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  132. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  133. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  134. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  135. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  136. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  137. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  138. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  139. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  140. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  141. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  142. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  143. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  144. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  145. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  154. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  155. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  156. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  157. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  158. package/composables/productNameLocal.ts +30 -30
  159. package/composables/useAppVersion.ts +21 -21
  160. package/package.json +2 -2
  161. package/plugins/date.ts +233 -233
  162. package/plugins/recursion.ts +311 -311
  163. package/public/spice-console/lib/images/bitmap.js +203 -203
  164. package/public/spice-console/network/spicechannel.js +383 -383
  165. package/store/main/mutations.ts +7 -7
  166. package/store/main/state.ts +7 -7
  167. 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>