bfg-common 1.5.211 → 1.5.212

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 (192) hide show
  1. package/CODE_STYLE.md +109 -109
  2. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  3. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  4. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  5. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/perPage/PerPage.vue +58 -58
  8. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  9. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  10. package/components/atoms/tabs/VerticalTabs.vue +105 -105
  11. package/components/common/backup/lib/utils/getBackupOrBackupStorageId.ts +29 -0
  12. package/components/common/backup/storage/actions/add/Add.vue +36 -0
  13. package/components/common/backup/storage/actions/add/temp/Add.vue +508 -0
  14. package/components/common/backup/storage/actions/add/temp/lib/config/stepItems.ts +203 -0
  15. package/components/common/backup/storage/actions/add/temp/lib/models/interfaces.ts +58 -0
  16. package/components/common/backup/storage/actions/add/temp/lib/models/types.ts +14 -0
  17. package/components/common/backup/storage/actions/add/temp/lib/utils.ts +70 -0
  18. package/components/common/backup/storage/actions/add/temp/local/Local.vue +65 -0
  19. package/components/common/backup/storage/actions/add/temp/local/createName/CreateName.vue +158 -0
  20. package/components/common/backup/storage/actions/add/temp/local/createName/lib/config/defaultForm.ts +15 -0
  21. package/components/common/backup/storage/actions/add/temp/nfs/Nfs.vue +106 -0
  22. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/Accessibility.vue +104 -0
  23. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/lib/config/tabsPannel.ts +25 -0
  24. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/lib/models/interfaces.ts +9 -0
  25. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/lib/models/types.ts +5 -0
  26. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/TablesView.vue +141 -0
  27. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -0
  28. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -0
  29. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/incompatibleTable.ts +68 -0
  30. package/components/common/backup/storage/actions/add/temp/nfs/accessibility/tablesView/lib/config/tableKeys.ts +15 -0
  31. package/components/common/backup/storage/actions/add/temp/nfs/configuration/Configuration.vue +469 -0
  32. package/components/common/backup/storage/actions/add/temp/nfs/configuration/lib/config/defaultForm.ts +51 -0
  33. package/components/common/backup/storage/actions/add/temp/nfs/configuration/lib/models/interfaces.ts +14 -0
  34. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/DeletePopover.vue +99 -0
  35. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/ServersList.vue +125 -0
  36. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/config/serversListConfig.ts +40 -0
  37. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/config/tableKeys.ts +3 -0
  38. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/models/interfaces.ts +13 -0
  39. package/components/common/backup/storage/actions/add/temp/nfs/configuration/serversList/lib/models/types.ts +1 -0
  40. package/components/common/backup/storage/actions/add/temp/nfs/kerberosAuthentication/KerberosAuthentication.vue +55 -0
  41. package/components/common/backup/storage/actions/add/temp/nfs/kerberosAuthentication/lib/config/radioOptions.ts +27 -0
  42. package/components/common/backup/storage/actions/add/temp/nfs/version/Version.vue +42 -0
  43. package/components/common/backup/storage/actions/add/temp/nfs/version/lib/config/versionOptions.ts +22 -0
  44. package/components/common/backup/storage/actions/add/temp/readyComplete/ReadyComplete.vue +85 -0
  45. package/components/common/backup/storage/actions/add/temp/readyComplete/lib/config/propertiesDetails.ts +139 -0
  46. package/components/common/backup/storage/actions/add/temp/readyComplete/lib/models/interfaces.ts +4 -0
  47. package/components/common/backup/storage/actions/add/temp/samba/Samba.vue +95 -0
  48. package/components/common/backup/storage/actions/add/temp/samba/accessibility/Accessibility.vue +104 -0
  49. package/components/common/backup/storage/actions/add/temp/samba/accessibility/lib/config/tabsPannel.ts +25 -0
  50. package/components/common/backup/storage/actions/add/temp/samba/accessibility/lib/models/interfaces.ts +9 -0
  51. package/components/common/backup/storage/actions/add/temp/samba/accessibility/lib/models/types.ts +5 -0
  52. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/TablesView.vue +141 -0
  53. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/compatibleTable.ts +62 -0
  54. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -0
  55. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/incompatibleTable.ts +68 -0
  56. package/components/common/backup/storage/actions/add/temp/samba/accessibility/tablesView/lib/config/tableKeys.ts +15 -0
  57. package/components/common/backup/storage/actions/add/temp/samba/configuration/Configuration.vue +470 -0
  58. package/components/common/backup/storage/actions/add/temp/samba/configuration/lib/config/defaultForm.ts +51 -0
  59. package/components/common/backup/storage/actions/add/temp/samba/configuration/lib/models/interfaces.ts +14 -0
  60. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/DeletePopover.vue +99 -0
  61. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/ServersList.vue +124 -0
  62. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/config/serversListConfig.ts +40 -0
  63. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/config/tableKeys.ts +3 -0
  64. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/models/interfaces.ts +13 -0
  65. package/components/common/backup/storage/actions/add/temp/samba/configuration/serversList/lib/models/types.ts +1 -0
  66. package/components/common/backup/storage/actions/add/temp/samba/kerberosAuthentication/KerberosAuthentication.vue +55 -0
  67. package/components/common/backup/storage/actions/add/temp/samba/kerberosAuthentication/lib/config/radioOptions.ts +27 -0
  68. package/components/common/backup/storage/actions/add/temp/sharedStorm/SharedStorm.vue +80 -0
  69. package/components/common/backup/storage/actions/add/temp/sharedStorm/createName/CreateName.vue +156 -0
  70. package/components/common/backup/storage/actions/add/temp/sharedStorm/createName/lib/config/defaultForm.ts +15 -0
  71. package/components/common/backup/storage/actions/add/temp/sharedStorm/storage/Storage.vue +71 -0
  72. package/components/common/backup/storage/actions/add/temp/sharedStorm/storage/lib/config/defaultForm.ts +15 -0
  73. package/components/common/backup/storage/actions/add/temp/types/Types.vue +78 -0
  74. package/components/common/backup/storage/actions/add/temp/types/lib/config/typeOptions.ts +52 -0
  75. package/components/common/backup/storage/actions/delete/Delete.vue +65 -0
  76. package/components/common/backup/storage/actions/delete/lib/models/interfaces.ts +5 -0
  77. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  78. package/components/common/context/lib/models/interfaces.ts +31 -31
  79. package/components/common/diagramMain/DiagramMain.vue +897 -897
  80. package/components/common/diagramMain/Header.vue +214 -214
  81. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  82. package/components/common/layout/theHeader/userMenu/modals/preferences/view/ViewOld.vue +112 -112
  83. package/components/common/monitor/overview/OverviewOld.vue +139 -139
  84. package/components/common/pages/home/headline/Headline.vue +45 -45
  85. package/components/common/pages/home/headline/HeadlineOld.vue +42 -42
  86. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  87. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  88. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  89. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  90. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  91. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  92. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  93. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  94. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  95. package/components/common/pages/packages/Packages.vue +208 -208
  96. package/components/common/pages/shortcuts/block/BlockNew.vue +2 -7
  97. package/components/common/pages/shortcuts/block/BlockOld.vue +68 -68
  98. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  99. package/components/common/recursionTree/RecursionTree.vue +223 -223
  100. package/components/common/select/button/ButtonDropdown.vue +108 -108
  101. package/components/common/spiceConsole/Drawer.vue +377 -377
  102. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  103. package/components/common/vm/actions/add/folderTreeView/FolderTreeView.vue +72 -72
  104. package/components/common/vm/actions/add/folderTreeView/New.vue +40 -40
  105. package/components/common/vm/actions/add/folderTreeView/Old.vue +50 -50
  106. package/components/common/vm/actions/add/lib/config/steps.ts +263 -263
  107. package/components/common/vm/actions/clone/lib/config/steps.ts +291 -291
  108. package/components/common/vm/actions/clone/toTemplate/lib/config/steps.ts +116 -116
  109. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +337 -337
  110. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +480 -480
  111. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +319 -319
  112. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  113. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/Bus.vue +100 -100
  114. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDrive.vue +232 -232
  115. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +168 -168
  116. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  117. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +78 -78
  118. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  119. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuNew.vue +190 -190
  120. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/ModelNew.vue +237 -237
  121. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  122. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  123. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/tooltip/TooltipNew.vue +154 -154
  124. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  125. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +307 -307
  126. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryNew.vue +154 -154
  127. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +382 -382
  128. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +151 -151
  129. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationNew.vue +73 -73
  130. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/LocationOld.vue +83 -83
  131. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +288 -288
  132. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +94 -94
  133. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  134. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +205 -205
  135. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  136. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  137. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  138. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  139. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  140. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  141. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  142. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  143. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  144. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  145. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/inputDevices/InputDevicesNew.vue +40 -40
  146. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  147. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +106 -106
  148. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +81 -81
  149. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  150. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  151. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +174 -174
  152. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +67 -67
  153. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +149 -149
  154. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  155. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +31 -31
  156. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +31 -31
  157. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  158. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  159. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +128 -128
  160. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  161. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +39 -39
  162. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  163. package/components/common/vm/actions/common/lib/utils/capabilities.ts +52 -52
  164. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  165. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +134 -134
  166. package/components/common/vm/actions/common/select/computeResource/treeView/New.vue +44 -44
  167. package/components/common/vm/actions/common/select/computeResource/treeView/TreeView.vue +118 -118
  168. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  169. package/components/common/vm/actions/common/select/createType/New.vue +84 -84
  170. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  171. package/components/common/vm/actions/common/select/name/Name.vue +167 -167
  172. package/components/common/vm/actions/common/select/os/New.vue +122 -122
  173. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  174. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  175. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  176. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  177. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  178. package/components/common/wizards/vm/migrate/lib/config/constructDataReady.ts +220 -220
  179. package/components/common/wizards/vm/migrate/lib/config/steps.ts +157 -157
  180. package/components/common/wizards/vm/migrate/lib/validations.ts +68 -68
  181. package/components/common/wizards/vm/migrate/select/computeResource/tableView/TableView.vue +137 -137
  182. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  183. package/components/common/wizards/vm/migrate/select/network/table/network/lib/config/advancedTable.ts +91 -91
  184. package/composables/productNameLocal.ts +30 -30
  185. package/composables/useAppVersion.ts +21 -21
  186. package/package.json +1 -1
  187. package/plugins/date.ts +233 -233
  188. package/public/spice-console/lib/images/bitmap.js +203 -203
  189. package/public/spice-console/network/spicechannel.js +387 -387
  190. package/store/main/mutations.ts +7 -7
  191. package/store/main/state.ts +7 -7
  192. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,382 +1,382 @@
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
- :compute-resource="props.computeResource"
36
- @remove="emits('remove')"
37
- @roll-back="emits('roll-back')"
38
- @validate-size="onValidateSize"
39
- @change-storage="onChangeStorage"
40
- @remove-error-by-title="emits('remove-error-by-title', $event)"
41
- />
42
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-old
43
- v-else
44
- v-model:delete-files-from-datastore="deleteFilesFromDatastore"
45
- v-model:size="size"
46
- v-model:hard-disk-type="hardDiskType"
47
- v-model:disk-provisioning="diskProvisioning"
48
- v-model:sharing="sharing"
49
- v-model:limit-iops="limitIops"
50
- v-model:limit-iops-type="limitIopsType"
51
- v-model:limit-iops-invalid="limitIopsInvalid"
52
- v-model:disk-mode="diskMode"
53
- v-model:cache="cache"
54
- v-model:bus="bus"
55
- :is-removable="isRemovable"
56
- :label="label"
57
- :hard-disk-invalid="hardDiskInvalid"
58
- :error-text="hardDiskLocalAndApiErrorsTexts"
59
- :hard-disk-type-error-local-text="hardDiskTypeErrorLocalText"
60
- :is-disabled-size="isDisabledSize"
61
- :hard-disk-type-options="hardDiskTypeOptions"
62
- :max-hard-disk="maxHardDisk"
63
- :location="location"
64
- :is-running="isRunning"
65
- :is-new-hard-disk="!isNotNewHardDisk"
66
- :is-edit="props.isEdit"
67
- :datastore="props.datastore"
68
- :get-datastore-table-func="props.getDatastoreTableFunc"
69
- :error-validation-fields="props.errorValidationFields"
70
- :index="props.index"
71
- :type="props.type"
72
- :hard-disk="props.hardDisk"
73
- :guest-machine-type="props.guestMachineType"
74
- :is-new-type="isNewType"
75
- :compute-resource="props.computeResource"
76
- @remove="emits('remove')"
77
- @roll-back="emits('roll-back')"
78
- @validate-size="onValidateSize"
79
- @change-storage="onChangeStorage"
80
- @remove-error-by-title="emits('remove-error-by-title', $event)"
81
- />
82
- </template>
83
-
84
- <script setup lang="ts">
85
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
86
- import type {
87
- UI_I_SendDataNewHardDisk,
88
- UI_I_SendDataNewHardDiskStorage,
89
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
90
- import type { UI_T_HardDiskType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
91
- import type { UI_I_Localization } from '~/lib/models/interfaces'
92
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
93
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
94
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
95
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
96
- import { binaryOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/binaryOptions'
97
-
98
- const props = defineProps<{
99
- storage: UI_I_DatastoreTableItem | null
100
- hardDisk: UI_I_SendDataNewHardDisk
101
- type: UI_T_HardDiskType
102
- index: number
103
- errorValidationFields: UI_I_ErrorValidationField[]
104
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
105
- datastore: UI_I_DatastoreTableItem[]
106
- isEdit: boolean
107
- state?: string | number
108
- guestMachineType?: UI_I_OptionItem | null
109
- computeResource?: UI_I_TreeNode | null
110
- }>()
111
- const emits = defineEmits<{
112
- (event: 'send-data', value: UI_I_SendDataNewHardDisk): void
113
- (event: 'invalid', value: boolean): void
114
- (event: 'remove'): void
115
- (event: 'roll-back'): void
116
- (event: 'remove-error-by-title', value: string): void
117
- }>()
118
-
119
- const { $store, $binary }: any = useNuxtApp()
120
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
121
-
122
- const localization = computed<UI_I_Localization>(() => useLocal())
123
-
124
- const isRunning = computed<boolean>(() => {
125
- return props.state === 2
126
- })
127
-
128
- const isRemovable = computed<boolean>(() => {
129
- return (
130
- !props.isEdit ||
131
- !isRunning.value ||
132
- (isRunning.value && bus.value === 'virtio')
133
- )
134
- })
135
-
136
- const isNewType = computed<boolean>(
137
- () => props.type === 'new' || props.type === 'clone'
138
- )
139
-
140
- const typeError = computed<string>(() => `disk_devices[${props.index}].size`)
141
-
142
- const apiErrorLocal = computed<string>(() => {
143
- return (
144
- props.errorValidationFields?.find(
145
- (message) => message.field === typeError.value
146
- )?.error_message || ''
147
- )
148
- })
149
-
150
- // PC-1796
151
- const isNotNewHardDisk = computed<boolean>(
152
- () => props.type === 'edit' || props.type === 'removed'
153
- )
154
- const label = computed<string>(() => {
155
- // if (props.type === 'edit' || props.type === 'removed')
156
- if (isNotNewHardDisk.value)
157
- return `${localization.value.common.hardDisk} ${props.index + 1}`
158
-
159
- return `${localization.value.common.newHardDisk} *`
160
- })
161
-
162
- const maxHardDisk = computed<number>(() => {
163
- const hardDiskSizeMb = $binary.gbToMb(props.hardDisk.size)
164
-
165
- if (props.type === 'exist') return hardDiskSizeMb
166
-
167
- if (!storage.value) return 0
168
- const free = storage.value.capacity.free_mb || storage.value.capacity // TODO fix
169
-
170
- if (props.isEdit) return free + hardDiskSizeMb
171
-
172
- return free
173
- })
174
- const hardDiskTypeErrorLocalText = computed<string>(() => {
175
- if (+sizeInMb.value > maxHardDisk.value) {
176
- return localization.value.common.diskCapacitySpecifiedGreater
177
- }
178
-
179
- if (+sizeInMb.value <= 0) {
180
- return localization.value.common.diskCapacityCannotZero
181
- }
182
-
183
- return ''
184
- })
185
-
186
- const hardDiskLocalAndApiErrorsTexts = computed<string>(() => {
187
- const localError = hardDiskTypeErrorLocalText.value
188
- const apiError = apiErrorLocal.value
189
-
190
- let result = ''
191
- if (localError && !apiError) result = localError
192
- if (!localError && apiError) result = apiError
193
- if (localError && apiError) result = localError + ', ' + apiError
194
- if (!localError && apiError) result = apiError
195
-
196
- return result
197
- })
198
-
199
- const deleteFilesFromDatastore = ref<boolean>(false)
200
-
201
- const hardDiskType = ref<string>('gb')
202
- const hardDiskTypeOptions = ref<UI_I_OptionItem[]>(
203
- binaryOptionsFunc(localization.value)
204
- )
205
-
206
- const size = ref<number>(props.hardDisk.size) // Изначально всегда приходит в gb
207
- const sizeInMb = computed<number>(() => {
208
- if (hardDiskType.value === 'mb') {
209
- return size.value
210
- }
211
-
212
- return $binary.universalFromTo(size.value, hardDiskType.value, 'mb')
213
- })
214
- const onValidateSize = (): void => {
215
- if (props.type !== 'edit') return
216
- if (sizeInMb.value < props.hardDisk.size) {
217
- size.value = $binary.universalFromTo(
218
- props.hardDisk.size,
219
- 'mb',
220
- hardDiskType.value
221
- )
222
- }
223
- }
224
-
225
- const isDisabledSize = computed<boolean>(() => {
226
- return props.type === 'exist' || (props.type === 'edit' && readOnly.value)
227
- })
228
-
229
- const location = ref<UI_I_DatastoreTableItem | null>(props.storage || null)
230
- const storage = ref<UI_I_DatastoreTableItem | null>(props.storage)
231
- watch(
232
- () => props.storage,
233
- (newValue) => {
234
- location.value = newValue
235
- storage.value = newValue
236
- },
237
- {
238
- immediate: true,
239
- deep: true,
240
- }
241
- )
242
- const onChangeStorage = (item: UI_I_DatastoreTableItem): void => {
243
- storage.value = item
244
- }
245
-
246
- const diskProvisioning = ref<string>('thick')
247
- const sharing = ref<string>('')
248
- const shares = ref<number>(0)
249
-
250
- const limitIops = ref<number>(16)
251
- const limitIopsType = ref<string>('unlimited')
252
- const limitIopsInvalid = ref<boolean>(false)
253
-
254
- const diskMode = ref<string>('dependent')
255
-
256
- const cache = ref<string>('none')
257
-
258
- const bus = ref<string>('ide')
259
-
260
- const readOnly = ref<boolean>(false)
261
-
262
- const discard = ref<string>('')
263
-
264
- const io = ref<string>('')
265
-
266
- const target = ref<string>('')
267
-
268
- watch(
269
- [
270
- sizeInMb,
271
- storage,
272
- diskProvisioning,
273
- sharing,
274
- limitIops,
275
- limitIopsType,
276
- diskMode,
277
- cache,
278
- bus,
279
- deleteFilesFromDatastore,
280
- (): void => props.type,
281
- ],
282
- () => {
283
- const limitIopsLocal =
284
- limitIopsType.value === 'unlimited' ? 0 : limitIops.value
285
- const storageLocal: UI_I_SendDataNewHardDiskStorage = {
286
- id: storage.value?.id || '',
287
- name: storage.value?.name || '',
288
- type: storage.value?.type_text || '',
289
- pool: storage.value?.pool_name || '',
290
- user: '',
291
- endpoint: '',
292
- password: '',
293
- protocol: '',
294
- options: '',
295
- }
296
-
297
- emits('send-data', {
298
- create: props.hardDisk.create,
299
- attach: props.hardDisk.attach,
300
- source: props.hardDisk.source,
301
- size: Math.ceil(sizeInMb.value),
302
- bus: bus.value,
303
- target: target.value,
304
- storage: storageLocal,
305
- device_type: 'disk',
306
- provision_type: diskProvisioning.value,
307
- disk_mode: diskMode.value,
308
- sharing: sharing.value === 'yes',
309
- read_only: readOnly.value,
310
- shares: shares.value,
311
- cache: cache.value,
312
- io: io.value,
313
- limit_iops: limitIopsLocal,
314
- discard: discard.value,
315
- capacity: Math.ceil(sizeInMb.value),
316
- boot_order: props.hardDisk.boot_order,
317
- detach: props.type === 'removed',
318
- remove: props.type === 'removed' && deleteFilesFromDatastore.value, // Проверяем если удалили диск и указали Delete files from datastore
319
- })
320
- },
321
- { immediate: true }
322
- )
323
-
324
- // Добавляем данные для редактирования
325
- watch(
326
- () => props.hardDisk,
327
- (newValue) => {
328
- // TODO refactoring
329
- if (props.type === 'exist') {
330
- diskProvisioning.value = newValue.provision_type || 'thick'
331
- return
332
- }
333
- // if (props.type !== 'edit') return
334
- if (props.type !== 'edit' && props.type !== 'clone') return
335
-
336
- const sizeInGb = $binary.mbToGb(newValue.size)
337
- if (sizeInGb < 1) {
338
- size.value = newValue.size
339
- hardDiskType.value = 'mb'
340
- } else {
341
- size.value = sizeInGb
342
- hardDiskType.value = 'gb'
343
- }
344
- diskProvisioning.value = newValue.provision_type || 'thick'
345
- sharing.value = newValue.sharing ? 'yes' : ''
346
- shares.value = newValue.shares || 0
347
- // limitIopsType.value = newValue.io === 'native' ? 'unlimited' : 'custom'
348
- limitIopsType.value = newValue.limit_iops === 0 ? 'unlimited' : 'custom'
349
- limitIops.value = newValue.limit_iops || 16
350
- diskMode.value = newValue.disk_mode || 'dependent'
351
- cache.value = newValue.cache || 'none'
352
- bus.value = newValue.bus || 'ide'
353
- readOnly.value = newValue.read_only || false
354
- discard.value = newValue.discard || ''
355
- io.value = newValue.io || ''
356
- target.value = newValue.target || ''
357
- },
358
- { immediate: true }
359
- )
360
- watch(
361
- isRunning,
362
- (newValue) => {
363
- if (newValue && props.type === 'new') {
364
- bus.value = 'virtio'
365
- }
366
- },
367
- { immediate: true }
368
- )
369
-
370
- const hardDiskInvalid = computed<boolean>(() => {
371
- return !!hardDiskTypeErrorLocalText.value || limitIopsInvalid.value
372
- })
373
- watch(
374
- hardDiskInvalid,
375
- (newValue) => {
376
- emits('invalid', newValue)
377
- },
378
- { immediate: true }
379
- )
380
- </script>
381
-
382
- <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
+ :compute-resource="props.computeResource"
36
+ @remove="emits('remove')"
37
+ @roll-back="emits('roll-back')"
38
+ @validate-size="onValidateSize"
39
+ @change-storage="onChangeStorage"
40
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
41
+ />
42
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk-old
43
+ v-else
44
+ v-model:delete-files-from-datastore="deleteFilesFromDatastore"
45
+ v-model:size="size"
46
+ v-model:hard-disk-type="hardDiskType"
47
+ v-model:disk-provisioning="diskProvisioning"
48
+ v-model:sharing="sharing"
49
+ v-model:limit-iops="limitIops"
50
+ v-model:limit-iops-type="limitIopsType"
51
+ v-model:limit-iops-invalid="limitIopsInvalid"
52
+ v-model:disk-mode="diskMode"
53
+ v-model:cache="cache"
54
+ v-model:bus="bus"
55
+ :is-removable="isRemovable"
56
+ :label="label"
57
+ :hard-disk-invalid="hardDiskInvalid"
58
+ :error-text="hardDiskLocalAndApiErrorsTexts"
59
+ :hard-disk-type-error-local-text="hardDiskTypeErrorLocalText"
60
+ :is-disabled-size="isDisabledSize"
61
+ :hard-disk-type-options="hardDiskTypeOptions"
62
+ :max-hard-disk="maxHardDisk"
63
+ :location="location"
64
+ :is-running="isRunning"
65
+ :is-new-hard-disk="!isNotNewHardDisk"
66
+ :is-edit="props.isEdit"
67
+ :datastore="props.datastore"
68
+ :get-datastore-table-func="props.getDatastoreTableFunc"
69
+ :error-validation-fields="props.errorValidationFields"
70
+ :index="props.index"
71
+ :type="props.type"
72
+ :hard-disk="props.hardDisk"
73
+ :guest-machine-type="props.guestMachineType"
74
+ :is-new-type="isNewType"
75
+ :compute-resource="props.computeResource"
76
+ @remove="emits('remove')"
77
+ @roll-back="emits('roll-back')"
78
+ @validate-size="onValidateSize"
79
+ @change-storage="onChangeStorage"
80
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
81
+ />
82
+ </template>
83
+
84
+ <script setup lang="ts">
85
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
86
+ import type {
87
+ UI_I_SendDataNewHardDisk,
88
+ UI_I_SendDataNewHardDiskStorage,
89
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
90
+ import type { UI_T_HardDiskType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
91
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
92
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
93
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
94
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
95
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
96
+ import { binaryOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/binaryOptions'
97
+
98
+ const props = defineProps<{
99
+ storage: UI_I_DatastoreTableItem | null
100
+ hardDisk: UI_I_SendDataNewHardDisk
101
+ type: UI_T_HardDiskType
102
+ index: number
103
+ errorValidationFields: UI_I_ErrorValidationField[]
104
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
105
+ datastore: UI_I_DatastoreTableItem[]
106
+ isEdit: boolean
107
+ state?: string | number
108
+ guestMachineType?: UI_I_OptionItem | null
109
+ computeResource?: UI_I_TreeNode | null
110
+ }>()
111
+ const emits = defineEmits<{
112
+ (event: 'send-data', value: UI_I_SendDataNewHardDisk): void
113
+ (event: 'invalid', value: boolean): void
114
+ (event: 'remove'): void
115
+ (event: 'roll-back'): void
116
+ (event: 'remove-error-by-title', value: string): void
117
+ }>()
118
+
119
+ const { $store, $binary }: any = useNuxtApp()
120
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
121
+
122
+ const localization = computed<UI_I_Localization>(() => useLocal())
123
+
124
+ const isRunning = computed<boolean>(() => {
125
+ return props.state === 2
126
+ })
127
+
128
+ const isRemovable = computed<boolean>(() => {
129
+ return (
130
+ !props.isEdit ||
131
+ !isRunning.value ||
132
+ (isRunning.value && bus.value === 'virtio')
133
+ )
134
+ })
135
+
136
+ const isNewType = computed<boolean>(
137
+ () => props.type === 'new' || props.type === 'clone'
138
+ )
139
+
140
+ const typeError = computed<string>(() => `disk_devices[${props.index}].size`)
141
+
142
+ const apiErrorLocal = computed<string>(() => {
143
+ return (
144
+ props.errorValidationFields?.find(
145
+ (message) => message.field === typeError.value
146
+ )?.error_message || ''
147
+ )
148
+ })
149
+
150
+ // PC-1796
151
+ const isNotNewHardDisk = computed<boolean>(
152
+ () => props.type === 'edit' || props.type === 'removed'
153
+ )
154
+ const label = computed<string>(() => {
155
+ // if (props.type === 'edit' || props.type === 'removed')
156
+ if (isNotNewHardDisk.value)
157
+ return `${localization.value.common.hardDisk} ${props.index + 1}`
158
+
159
+ return `${localization.value.common.newHardDisk} *`
160
+ })
161
+
162
+ const maxHardDisk = computed<number>(() => {
163
+ const hardDiskSizeMb = $binary.gbToMb(props.hardDisk.size)
164
+
165
+ if (props.type === 'exist') return hardDiskSizeMb
166
+
167
+ if (!storage.value) return 0
168
+ const free = storage.value.capacity.free_mb || storage.value.capacity // TODO fix
169
+
170
+ if (props.isEdit) return free + hardDiskSizeMb
171
+
172
+ return free
173
+ })
174
+ const hardDiskTypeErrorLocalText = computed<string>(() => {
175
+ if (+sizeInMb.value > maxHardDisk.value) {
176
+ return localization.value.common.diskCapacitySpecifiedGreater
177
+ }
178
+
179
+ if (+sizeInMb.value <= 0) {
180
+ return localization.value.common.diskCapacityCannotZero
181
+ }
182
+
183
+ return ''
184
+ })
185
+
186
+ const hardDiskLocalAndApiErrorsTexts = computed<string>(() => {
187
+ const localError = hardDiskTypeErrorLocalText.value
188
+ const apiError = apiErrorLocal.value
189
+
190
+ let result = ''
191
+ if (localError && !apiError) result = localError
192
+ if (!localError && apiError) result = apiError
193
+ if (localError && apiError) result = localError + ', ' + apiError
194
+ if (!localError && apiError) result = apiError
195
+
196
+ return result
197
+ })
198
+
199
+ const deleteFilesFromDatastore = ref<boolean>(false)
200
+
201
+ const hardDiskType = ref<string>('gb')
202
+ const hardDiskTypeOptions = ref<UI_I_OptionItem[]>(
203
+ binaryOptionsFunc(localization.value)
204
+ )
205
+
206
+ const size = ref<number>(props.hardDisk.size) // Изначально всегда приходит в gb
207
+ const sizeInMb = computed<number>(() => {
208
+ if (hardDiskType.value === 'mb') {
209
+ return size.value
210
+ }
211
+
212
+ return $binary.universalFromTo(size.value, hardDiskType.value, 'mb')
213
+ })
214
+ const onValidateSize = (): void => {
215
+ if (props.type !== 'edit') return
216
+ if (sizeInMb.value < props.hardDisk.size) {
217
+ size.value = $binary.universalFromTo(
218
+ props.hardDisk.size,
219
+ 'mb',
220
+ hardDiskType.value
221
+ )
222
+ }
223
+ }
224
+
225
+ const isDisabledSize = computed<boolean>(() => {
226
+ return props.type === 'exist' || (props.type === 'edit' && readOnly.value)
227
+ })
228
+
229
+ const location = ref<UI_I_DatastoreTableItem | null>(props.storage || null)
230
+ const storage = ref<UI_I_DatastoreTableItem | null>(props.storage)
231
+ watch(
232
+ () => props.storage,
233
+ (newValue) => {
234
+ location.value = newValue
235
+ storage.value = newValue
236
+ },
237
+ {
238
+ immediate: true,
239
+ deep: true,
240
+ }
241
+ )
242
+ const onChangeStorage = (item: UI_I_DatastoreTableItem): void => {
243
+ storage.value = item
244
+ }
245
+
246
+ const diskProvisioning = ref<string>('thick')
247
+ const sharing = ref<string>('')
248
+ const shares = ref<number>(0)
249
+
250
+ const limitIops = ref<number>(16)
251
+ const limitIopsType = ref<string>('unlimited')
252
+ const limitIopsInvalid = ref<boolean>(false)
253
+
254
+ const diskMode = ref<string>('dependent')
255
+
256
+ const cache = ref<string>('none')
257
+
258
+ const bus = ref<string>('ide')
259
+
260
+ const readOnly = ref<boolean>(false)
261
+
262
+ const discard = ref<string>('')
263
+
264
+ const io = ref<string>('')
265
+
266
+ const target = ref<string>('')
267
+
268
+ watch(
269
+ [
270
+ sizeInMb,
271
+ storage,
272
+ diskProvisioning,
273
+ sharing,
274
+ limitIops,
275
+ limitIopsType,
276
+ diskMode,
277
+ cache,
278
+ bus,
279
+ deleteFilesFromDatastore,
280
+ (): void => props.type,
281
+ ],
282
+ () => {
283
+ const limitIopsLocal =
284
+ limitIopsType.value === 'unlimited' ? 0 : limitIops.value
285
+ const storageLocal: UI_I_SendDataNewHardDiskStorage = {
286
+ id: storage.value?.id || '',
287
+ name: storage.value?.name || '',
288
+ type: storage.value?.type_text || '',
289
+ pool: storage.value?.pool_name || '',
290
+ user: '',
291
+ endpoint: '',
292
+ password: '',
293
+ protocol: '',
294
+ options: '',
295
+ }
296
+
297
+ emits('send-data', {
298
+ create: props.hardDisk.create,
299
+ attach: props.hardDisk.attach,
300
+ source: props.hardDisk.source,
301
+ size: Math.ceil(sizeInMb.value),
302
+ bus: bus.value,
303
+ target: target.value,
304
+ storage: storageLocal,
305
+ device_type: 'disk',
306
+ provision_type: diskProvisioning.value,
307
+ disk_mode: diskMode.value,
308
+ sharing: sharing.value === 'yes',
309
+ read_only: readOnly.value,
310
+ shares: shares.value,
311
+ cache: cache.value,
312
+ io: io.value,
313
+ limit_iops: limitIopsLocal,
314
+ discard: discard.value,
315
+ capacity: Math.ceil(sizeInMb.value),
316
+ boot_order: props.hardDisk.boot_order,
317
+ detach: props.type === 'removed',
318
+ remove: props.type === 'removed' && deleteFilesFromDatastore.value, // Проверяем если удалили диск и указали Delete files from datastore
319
+ })
320
+ },
321
+ { immediate: true }
322
+ )
323
+
324
+ // Добавляем данные для редактирования
325
+ watch(
326
+ () => props.hardDisk,
327
+ (newValue) => {
328
+ // TODO refactoring
329
+ if (props.type === 'exist') {
330
+ diskProvisioning.value = newValue.provision_type || 'thick'
331
+ return
332
+ }
333
+ // if (props.type !== 'edit') return
334
+ if (props.type !== 'edit' && props.type !== 'clone') return
335
+
336
+ const sizeInGb = $binary.mbToGb(newValue.size)
337
+ if (sizeInGb < 1) {
338
+ size.value = newValue.size
339
+ hardDiskType.value = 'mb'
340
+ } else {
341
+ size.value = sizeInGb
342
+ hardDiskType.value = 'gb'
343
+ }
344
+ diskProvisioning.value = newValue.provision_type || 'thick'
345
+ sharing.value = newValue.sharing ? 'yes' : ''
346
+ shares.value = newValue.shares || 0
347
+ // limitIopsType.value = newValue.io === 'native' ? 'unlimited' : 'custom'
348
+ limitIopsType.value = newValue.limit_iops === 0 ? 'unlimited' : 'custom'
349
+ limitIops.value = newValue.limit_iops || 16
350
+ diskMode.value = newValue.disk_mode || 'dependent'
351
+ cache.value = newValue.cache || 'none'
352
+ bus.value = newValue.bus || 'ide'
353
+ readOnly.value = newValue.read_only || false
354
+ discard.value = newValue.discard || ''
355
+ io.value = newValue.io || ''
356
+ target.value = newValue.target || ''
357
+ },
358
+ { immediate: true }
359
+ )
360
+ watch(
361
+ isRunning,
362
+ (newValue) => {
363
+ if (newValue && props.type === 'new') {
364
+ bus.value = 'virtio'
365
+ }
366
+ },
367
+ { immediate: true }
368
+ )
369
+
370
+ const hardDiskInvalid = computed<boolean>(() => {
371
+ return !!hardDiskTypeErrorLocalText.value || limitIopsInvalid.value
372
+ })
373
+ watch(
374
+ hardDiskInvalid,
375
+ (newValue) => {
376
+ emits('invalid', newValue)
377
+ },
378
+ { immediate: true }
379
+ )
380
+ </script>
381
+
382
+ <style scoped lang="scss"></style>