bfg-common 1.5.244 → 1.5.245

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