bfg-common 1.5.548 → 1.5.550

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 (158) 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/collapse/CollapseNav.vue +170 -170
  8. package/components/atoms/perPage/PerPage.vue +58 -58
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1718 -1718
  10. package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
  12. package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
  13. package/components/common/backup/storage/actions/add/Add.vue +251 -251
  14. package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
  15. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  16. package/components/common/diagramMain/modals/lib/config/portModal.ts +251 -251
  17. package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
  18. package/components/common/diagramMain/port/Port.vue +580 -580
  19. package/components/common/layout/theHeader/helpMenu/About.vue +79 -79
  20. package/components/common/layout/theHeader/helpMenu/aboutOld/AboutOld.vue +79 -79
  21. package/components/common/pages/backups/DetailView.vue +52 -52
  22. package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
  23. package/components/common/pages/backups/modals/Modals.vue +243 -243
  24. package/components/common/pages/backups/modals/createBackup/New.vue +2 -8
  25. package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/lib/config/options.ts +6 -6
  26. package/components/common/pages/backups/modals/createBackup/lib/config/readyToCompleteOptions.ts +69 -69
  27. package/components/common/pages/backups/modals/lib/config/restore.ts +115 -115
  28. package/components/common/pages/backups/modals/lib/models/interfaces.ts +186 -186
  29. package/components/common/pages/backups/modals/restore/Restore.vue +5 -9
  30. package/components/common/pages/backups/modals/restore/RestoreNew.vue +3 -12
  31. package/components/common/pages/backups/modals/restore/RestoreOld.vue +18 -6
  32. package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
  33. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  34. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  35. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  36. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  37. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  38. package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
  39. package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
  40. package/components/common/select/radio/RadioGroup.vue +137 -137
  41. package/components/common/spiceConsole/Drawer.vue +420 -420
  42. package/components/common/spiceConsole/SpiceConsole.vue +184 -184
  43. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  44. package/components/common/tools/Actions.vue +207 -207
  45. package/components/common/treeView/TreeView.vue +52 -52
  46. package/components/common/vm/actions/add/Add.vue +877 -950
  47. package/components/common/vm/actions/add/New.vue +652 -690
  48. package/components/common/vm/actions/add/Old.vue +363 -402
  49. package/components/common/vm/actions/add/lib/config/steps.ts +347 -347
  50. package/components/common/vm/actions/clone/Clone.vue +809 -809
  51. package/components/common/vm/actions/clone/new/New.vue +457 -457
  52. package/components/common/vm/actions/clone/old/Old.vue +378 -378
  53. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +243 -308
  54. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +328 -373
  55. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +161 -205
  56. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +694 -728
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareNew.vue +512 -523
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardwareOld.vue +328 -339
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +348 -368
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuNew.vue +241 -248
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/CpuOld.vue +184 -189
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/Shares.vue +140 -140
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +300 -313
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryNew.vue +158 -158
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/MemoryOld.vue +155 -155
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +427 -427
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/location/Location.vue +154 -154
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbController.vue +47 -58
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +68 -65
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerOld.vue +64 -61
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCard.vue +140 -162
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +6 -5
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +6 -5
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/lib/config/options.ts +4 -4
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/numberDisplays/NumberDisplays.vue +53 -53
  80. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +76 -163
  81. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +87 -138
  82. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsOld.vue +71 -120
  83. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptions.vue +46 -110
  84. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +65 -85
  85. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsOld.vue +70 -91
  86. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +32 -32
  87. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +60 -60
  88. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -174
  89. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +109 -74
  90. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderOld.vue +104 -66
  91. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptions.vue +86 -101
  92. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +163 -173
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsOld.vue +162 -170
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +142 -148
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/Old.vue +135 -141
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/RemoteConsoleOptions.vue +74 -178
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/{KeymapNew.vue → New.vue} +45 -45
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/{KeymapOld.vue → Old.vue} +47 -47
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +102 -103
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/tools/Tools.vue +26 -49
  103. package/components/common/vm/actions/common/lib/models/interfaces.ts +189 -157
  104. package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
  105. package/components/common/vm/actions/common/select/createType/CreateType.vue +38 -38
  106. package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
  107. package/components/common/vm/actions/common/select/os/Old.vue +152 -152
  108. package/components/common/vm/actions/common/select/os/Os.vue +139 -139
  109. package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
  110. package/components/common/vm/actions/common/select/storage/Storage.vue +178 -178
  111. package/components/common/vm/actions/common/select/storage/new/New.vue +311 -311
  112. package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
  113. package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
  114. package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
  115. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  116. package/components/common/vm/actions/lib/models/interfaces.ts +15 -40
  117. package/components/common/vm/actions/lib/utils.ts +244 -239
  118. package/components/common/vm/actions/register/Register.vue +352 -352
  119. package/components/common/vm/actions/register/lib/config/steps.ts +86 -86
  120. package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
  121. package/components/common/wizards/common/compatibility/New.vue +99 -99
  122. package/components/common/wizards/common/compatibility/Old.vue +53 -53
  123. package/components/common/wizards/common/steps/computeResource/ComputeResource.vue +86 -86
  124. package/components/common/wizards/common/steps/computeResource/New.vue +93 -93
  125. package/components/common/wizards/common/steps/computeResource/Old.vue +103 -103
  126. package/components/common/wizards/common/steps/name/Name.vue +178 -178
  127. package/components/common/wizards/common/steps/name/New.vue +221 -221
  128. package/components/common/wizards/common/steps/name/Old.vue +121 -121
  129. package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
  130. package/components/common/wizards/common/steps/name/location/Location.vue +85 -85
  131. package/components/common/wizards/common/steps/name/location/New.vue +40 -40
  132. package/components/common/wizards/datastore/add/Add.vue +228 -228
  133. package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
  134. package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
  135. package/components/common/wizards/vm/migrate/select/computeResource/ComputeResource.vue +205 -205
  136. package/components/common/wizards/vm/migrate/select/network/Network.vue +103 -103
  137. package/composables/useAppVersion.ts +21 -21
  138. package/composables/useLocal.ts +6 -6
  139. package/composables/useLocalCommon.ts +39 -39
  140. package/package.json +1 -3
  141. package/plugins/console.ts +21 -21
  142. package/plugins/date.ts +233 -233
  143. package/plugins/mouse.ts +21 -21
  144. package/plugins/panelStates.ts +70 -70
  145. package/plugins/text.ts +59 -59
  146. package/public/spice-console/application/clientgui.js +854 -854
  147. package/public/spice-console/application/packetfactory.js +211 -211
  148. package/public/spice-console/application/virtualmouse.js +147 -147
  149. package/public/spice-console/lib/images/bitmap.js +203 -203
  150. package/public/spice-console/network/spicechannel.js +440 -440
  151. package/public/spice-console/process/cursorprocess.js +121 -121
  152. package/public/spice-console/process/inputprocess.js +227 -227
  153. package/public/spice-console/process/mainprocess.js +210 -210
  154. package/public/spice-console/run.js +210 -210
  155. package/store/main/mutations.ts +7 -7
  156. package/store/main/state.ts +7 -7
  157. /package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/{PasswordNew.vue → New.vue} +0 -0
  158. /package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/{PasswordOld.vue → Old.vue} +0 -0
@@ -1,523 +1,512 @@
1
- <template>
2
- <div class="virtual-hardware">
3
- <div class="action-wrap py-3">
4
- <span class="device-count">{{ deviceCountText }}</span>
5
-
6
- <div class="add-device-dropdown-wrap">
7
- <button
8
- id="add-device-dropdown"
9
- :class="['cursor-pointer', { active: isShowAddDeviceDropdown }]"
10
- data-id="add-device-dropdown"
11
- @click="isShowAddDeviceDropdown = !isShowAddDeviceDropdown"
12
- >
13
- <ui-icon name="plus" width="18" height="18" />
14
- <span class="add-device-dropdown-text">
15
- {{ addNewDeviceText }}
16
- </span>
17
- </button>
18
- <ui-dropdown
19
- :items="dropdownItems"
20
- :show="isShowAddDeviceDropdown"
21
- :margin-between-trigger="4"
22
- show-from-left
23
- width="max-content"
24
- elem-id="add-device-dropdown"
25
- test-id="add-device-dropdown"
26
- left
27
- max-height="400px"
28
- @select="onAddDevice"
29
- @hide="isShowAddDeviceDropdown = false"
30
- />
31
- </div>
32
- </div>
33
-
34
- <div class="overflow-auto virtual-hardware-content-block">
35
- <div class="stack-view">
36
- <common-vm-actions-common-customize-hardware-virtual-hardware-cpu
37
- :max-cpus="props.maxCpus"
38
- :cpu-models="props.cpuModels"
39
- :cpu="props.cpu"
40
- :is-edit="props.isEdit"
41
- :state="props.state"
42
- :error-validation-fields="props.errorValidationFields"
43
- :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
44
- @send-data="emits('send-data-cpu-method', $event)"
45
- @remove-error-by-title="emits('remove-error-by-title', $event)"
46
- @invalid="cpuInvalid = $event"
47
- />
48
- <common-vm-actions-common-customize-hardware-virtual-hardware-memory
49
- :max-memory="props.maxMemory"
50
- :is-edit="props.isEdit"
51
- :memory="props.memory"
52
- :state="props.state"
53
- :error-validation-fields="props.errorValidationFields"
54
- @send-data="emits('send-data-memory-method', $event)"
55
- @invalid="memoryInvalid = $event"
56
- @remove-error-by-title="emits('remove-error-by-title', $event)"
57
- />
58
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk
59
- v-for="(item, key) in props.hardDisks"
60
- :key="props.hardDisksIndex[key]"
61
- :index="props.hardDisksIndex[key]"
62
- :type="props.hardDisksType[key]"
63
- :storage="props.storage"
64
- :hard-disk="item"
65
- :error-validation-fields="props.errorValidationFields"
66
- :get-datastore-table-func="props.getDatastoreTableFunc"
67
- :datastore="props.datastore"
68
- :is-datastore-loading="props.isDatastoreLoading"
69
- :is-edit="props.isEdit"
70
- :state="props.state"
71
- :guest-machine-type="props.guestMachineType"
72
- :compute-resource="props.computeResource"
73
- @remove="emits('remove-hard-disk', [props.hardDisksIndex[key], item])"
74
- @roll-back="emits('roll-back-hard-disk', props.hardDisksIndex[key])"
75
- @send-data="
76
- emits('send-data-new-hard-disk-method', [
77
- $event,
78
- props.hardDisksIndex[key],
79
- ])
80
- "
81
- @invalid="
82
- emits('set-invalid-hard-disk', [$event, props.hardDisksIndex[key]])
83
- "
84
- @remove-error-by-title="emits('remove-error-by-title', $event)"
85
- />
86
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-network
87
- v-for="(item, key) in props.networks"
88
- :key="props.networksIndex[key]"
89
- :index="props.networksIndex[key]"
90
- :type="props.networksType[key]"
91
- :network="item"
92
- :networks-table="props.networksTable"
93
- :error-validation-fields="props.errorValidationFields"
94
- :is-edit="props.isEdit"
95
- :state="props.state"
96
- :project="props.project"
97
- @remove="emits('remove-network', props.networksIndex[key])"
98
- @send-data="
99
- emits('send-data-new-network-method', [
100
- $event,
101
- props.networksIndex[key],
102
- ])
103
- "
104
- @invalid="
105
- emits('set-invalid-network', [$event, props.networksIndex[key]])
106
- "
107
- @remove-error-by-title="emits('remove-error-by-title', $event)"
108
- @get-networks-table="emits('get-networks-table', $event)"
109
- />
110
- <common-vm-actions-common-customize-hardware-virtual-hardware-cd-dvd-drive
111
- v-for="(item, key) in props.cdDvdDrives"
112
- :key="props.cdDvdDrivesIndex[key]"
113
- :index="props.cdDvdDrivesIndex[key]"
114
- :hard-disks-count="props.hardDisks?.length || 0"
115
- :type="props.cdDvdDrivesType[key]"
116
- :cd-dvd-drive="item"
117
- :nodes="props.nodes"
118
- :files="props.files"
119
- :error-validation-fields="props.errorValidationFields"
120
- :is-edit="props.isEdit"
121
- :state="props.state"
122
- :guest-machine-type="props.guestMachineType"
123
- :compute-resource="props.computeResource"
124
- @remove-error-by-title="emits('remove-error-by-title', $event)"
125
- @get-storage="emits('get-storage', $event)"
126
- @get-folders-or-files="emits('get-folders-or-files', $event)"
127
- @get-active-device-child="emits('get-active-device-child', $event)"
128
- @show-datastore-child="emits('show-datastore-child', $event)"
129
- @remove="
130
- emits('remove-cd-dvd-drive', [props.cdDvdDrivesIndex[key], item])
131
- "
132
- @roll-back="
133
- emits('roll-back-cd-dvd-drive', props.cdDvdDrivesIndex[key])
134
- "
135
- @send-data="
136
- emits('send-data-new-cd-dvd-drive-method', [
137
- $event,
138
- props.cdDvdDrivesIndex[key],
139
- ])
140
- "
141
- />
142
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-usb-controller
143
- :usb-controller="props.usbController"
144
- :is-edit="props.isEdit"
145
- :state="props.state"
146
- @send-data="emits('send-data-new-usb-controller-method', $event)"
147
- />
148
- <template v-if="props.passthroughDevices || props.mediatedDevices">
149
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device
150
- v-for="(item, key) in props.pciDevices"
151
- :key="props.pciDevicesIndex[key]"
152
- :index="props.pciDevicesIndex[key]"
153
- :pci-device="item"
154
- :error-validation-fields="props.errorValidationFields"
155
- :passthrough-devices="props.passthroughDevices"
156
- :mediated-devices="props.mediatedDevices"
157
- :type="props.pciDevicesType[key]"
158
- :is-edit="props.isEdit"
159
- :state="props.state"
160
- @remove="emits('remove-pci-device', props.pciDevicesIndex[key])"
161
- @send-data="
162
- emits('send-data-pci-devices-method', [
163
- $event,
164
- props.pciDevicesIndex[key],
165
- ])
166
- "
167
- @invalid="
168
- emits('set-invalid-pci-device', [
169
- $event,
170
- props.pciDevicesIndex[key],
171
- ])
172
- "
173
- @remove-error-by-title="emits('remove-error-by-title', $event)"
174
- />
175
- </template>
176
- <common-vm-actions-common-customize-hardware-virtual-hardware-video-card
177
- :is-edit="props.isEdit"
178
- :video-card="props.videoCard"
179
- :error-validation-fields="props.errorValidationFields"
180
- :state="props.state"
181
- @send-data="emits('send-data-video-card-method', $event)"
182
- @invalid="videoCardInvalid = $event"
183
- @remove-error-by-title="emits('remove-error-by-title', $event)"
184
- />
185
- <common-vm-actions-common-customize-hardware-virtual-hardware-other />
186
- <div
187
- v-if="props.compatibilityInfo"
188
- class="vm-hardware-version-wrap justify-end flex flex-1 mt-4"
189
- >
190
- <span class="vm-hardware-version">
191
- {{ props.compatibilityInfo }}
192
- </span>
193
- </div>
194
- </div>
195
- </div>
196
-
197
- <Teleport to="body">
198
- <common-vm-actions-common-customize-hardware-virtual-hardware-browse-view
199
- v-if="props.isShowFileModal"
200
- :nodes="props.nodes"
201
- :files="props.files"
202
- show
203
- @submit="emits('add-exist-hard-disk', $event)"
204
- @get-storage="emits('get-storage', $event)"
205
- @get-folders-or-files="emits('get-folders-or-files', $event)"
206
- @get-active-device-child="emits('get-active-device-child', $event)"
207
- @show-datastore-child="emits('show-datastore-child', $event)"
208
- @hide="emits('hide-file-modal')"
209
- />
210
- </Teleport>
211
- </div>
212
- </template>
213
-
214
- <script setup lang="ts">
215
- import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
216
- import type { UI_T_Project } from '~/lib/models/types'
217
- import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
218
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
219
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
220
- import type { UI_I_FolderOrFileTreePayload } from '~/lib/models/store/storage/interfaces'
221
- import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
222
- import type {
223
- UI_I_SendDataCpu,
224
- UI_I_SendDataMemory,
225
- UI_I_SendDataNewHardDisk,
226
- UI_I_SendDataNewNetwork,
227
- UI_I_SendDataVideoCard,
228
- UI_I_SendDataNewCdDvdDrive,
229
- UI_I_SendDataNewPciDevice,
230
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
231
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
232
- import type {
233
- UI_T_HardDiskType,
234
- UI_T_NetworkType,
235
- } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
236
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
237
- import type { UI_I_Localization } from '~/lib/models/interfaces'
238
- import type {
239
- API_UI_I_VmEditCpu,
240
- API_UI_I_VmEditMemory,
241
- UI_I_MediatedDevice,
242
- UI_I_PciDevice,
243
- } from '~/lib/models/store/vm/interfaces'
244
- import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
245
- import { dropdownItemsNewFunc } from './lib/config/dropdownItems'
246
-
247
- const cpuInvalid = defineModel<boolean>('cpuInvalid', { required: true })
248
- const memoryInvalid = defineModel<boolean>('memoryInvalid', { required: true })
249
- const videoCardInvalid = defineModel<boolean>('videoCardInvalid', {
250
- required: true,
251
- })
252
-
253
- const props = withDefaults(
254
- defineProps<{
255
- nodes: UI_I_FileTreeNode[]
256
- files: UI_I_FileTreeNode[]
257
- isEdit: boolean
258
- storage: UI_I_DatastoreTableItem | null
259
- project: UI_T_Project
260
- maxCpus: number
261
- maxMemory: number
262
- cpuModels: UI_I_OptionItem[]
263
- datastore: UI_I_DatastoreTableItem[]
264
- isDatastoreLoading: boolean
265
- networksType: UI_T_NetworkType[]
266
- networksTable: UI_I_NetworkTableItem[]
267
- // dropdownItems: UI_I_DropdownTreeItem[]
268
- hardDisksType: UI_T_HardDiskType[]
269
- networksIndex: number[]
270
- hardDisksIndex: number[]
271
- pciDevicesType: UI_T_NetworkType[]
272
- isShowFileModal: boolean
273
- pciDevicesIndex: number[]
274
- cdDvdDrivesType: UI_T_NetworkType[]
275
- cdDvdDrivesIndex: number[]
276
- errorValidationFields: UI_I_ErrorValidationField<string>[]
277
- getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
278
- cpu?: API_UI_I_VmEditCpu
279
- state?: string | number
280
- memory?: API_UI_I_VmEditMemory
281
- networks?: UI_I_SendDataNewNetwork[] | null
282
- hardDisks?: UI_I_SendDataNewHardDisk[] | null
283
- videoCard?: UI_I_SendDataVideoCard
284
- pciDevices?: UI_I_SendDataNewPciDevice[]
285
- cdDvdDrives?: UI_I_SendDataNewCdDvdDrive[] | null
286
- usbController?: string
287
- guestMachineType?: UI_I_OptionItem | null
288
- passthroughDevices?: UI_I_PciDevice[]
289
- mediatedDevices?: UI_I_MediatedDevice[]
290
- vmCpuHelpTextSecond?: string
291
- computeResource?: UI_I_TreeNode | null
292
- compatibilityInfo?: string
293
- }>(),
294
- {
295
- cpu: undefined,
296
- state: undefined,
297
- memory: undefined,
298
- networks: undefined,
299
- hardDisks: undefined,
300
- videoCard: undefined,
301
- pciDevices: undefined,
302
- cdDvdDrives: undefined,
303
- usbController: undefined,
304
- guestMachineType: undefined,
305
- passthroughDevices: undefined,
306
- mediatedDevices: undefined,
307
- vmCpuHelpTextSecond: undefined,
308
- computeResource: undefined,
309
- compatibilityInfo: undefined,
310
- }
311
- )
312
- const emits = defineEmits<{
313
- (event: 'add-device', value: { value: number }): void
314
- (event: 'get-storage', value: UI_I_TablePayload): void
315
- (event: 'remove-network', value: number): void
316
- (event: 'hide-file-modal'): void
317
- (event: 'remove-hard-disk', value: [number, UI_I_SendDataNewHardDisk]): void
318
- (event: 'remove-pci-device', value: number): void
319
- (event: 'get-networks-table', value: UI_I_TablePayload): void
320
- (event: 'add-exist-hard-disk', value: UI_I_FileTreeNode): void
321
- (event: 'roll-back-hard-disk', value: number): void
322
- (event: 'set-invalid-network', value: [boolean, number]): void
323
- (
324
- event: 'remove-cd-dvd-drive',
325
- value: [number, UI_I_SendDataNewCdDvdDrive]
326
- ): void
327
- (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
328
- (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
329
- (event: 'send-data-cpu-method', value: UI_I_SendDataCpu): void
330
- (event: 'set-invalid-hard-disk', value: [boolean, number]): void
331
- (event: 'remove-error-by-title', value: string): void
332
- (event: 'roll-back-cd-dvd-drive', value: number): void
333
- (event: 'set-invalid-pci-device', value: [boolean, number]): void
334
- (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
335
- (event: 'send-data-memory-method', value: UI_I_SendDataMemory): void
336
- (event: 'send-data-video-card-method', value: UI_I_SendDataVideoCard): void
337
- (
338
- event: 'send-data-new-network-method',
339
- value: [UI_I_SendDataNewNetwork, number]
340
- ): void
341
- (
342
- event: 'send-data-pci-devices-method',
343
- value: [UI_I_SendDataNewPciDevice, number]
344
- ): void
345
- (
346
- event: 'send-data-new-hard-disk-method',
347
- value: [UI_I_SendDataNewHardDisk, number]
348
- ): void
349
- (
350
- event: 'send-data-new-cd-dvd-drive-method',
351
- value: [UI_I_SendDataNewCdDvdDrive, number]
352
- ): void
353
- (event: 'send-data-new-usb-controller-method', value: string): void
354
- }>()
355
-
356
- const { $text } = useNuxtApp()
357
-
358
- const localization = computed<UI_I_Localization>(() => useLocal())
359
-
360
- const isShowAddDeviceDropdown = ref<boolean>(false)
361
-
362
- // TODO
363
- const addNewDeviceText = computed<string>(() =>
364
- $text.toCapitalize(localization.value.common.addNewDevice)
365
- )
366
- const deviceCount = computed<number>(
367
- () =>
368
- (props.hardDisks?.length || 0) +
369
- (props.networks?.length || 0) +
370
- (props.cdDvdDrives?.length || 0) +
371
- (props.pciDevices?.length || 0) +
372
- 6
373
- )
374
- const deviceCountText = computed<string>(() =>
375
- localization.value.vmWizard.devices.replace(
376
- '{0}',
377
- deviceCount.value.toString()
378
- )
379
- )
380
- const dropdownItems = computed<UI_I_Dropdown[]>(() =>
381
- dropdownItemsNewFunc(
382
- localization.value,
383
- props.state,
384
- props.passthroughDevices,
385
- props.mediatedDevices
386
- )
387
- )
388
-
389
- const onAddDevice = (data: number): void => {
390
- isShowAddDeviceDropdown.value = false
391
- // из-за старого компонента
392
- emits('add-device', { value: data })
393
- }
394
- </script>
395
-
396
- <style>
397
- :root {
398
- --vm-wizard-block-view-bg-color: #fafafa;
399
- --add-device-dropdown-bg-color: #fff;
400
- --add-device-dropdown-bg-color-hover: #f6f7f8;
401
- --add-device-dropdown-active-bg-color-hover: #f0f8fd;
402
- --add-device-dropdown-border-color: #e9ebed;
403
- --add-device-dropdown-border-color-hover: #e9ebed;
404
- --add-device-dropdown-color: #4d5d69;
405
- --add-device-dropdown-color-hover: #4d5d69;
406
- --add-device-dropdown-item-title-color: #182531;
407
- }
408
- :root.dark-theme {
409
- --vm-wizard-block-view-bg-color: transparent;
410
- --add-device-dropdown-bg-color: #1b2a373d;
411
- //--add-device-dropdown-bg-color-hover: #2585b614;
412
- --add-device-dropdown-bg-color-hover: #b8bcc10a;
413
- --add-device-dropdown-active-bg-color-hover: #2785b614;
414
- --add-device-dropdown-border-color: #e9ebed1f;
415
- --add-device-dropdown-border-color-hover: #2ba2de;
416
- --add-device-dropdown-color: #e9eaec;
417
- --add-device-dropdown-color-hover: #2ba2de;
418
- --add-device-dropdown-item-title-color: #e9eaec;
419
- }
420
- </style>
421
-
422
- <style scoped lang="scss">
423
- .virtual-hardware {
424
- height: 100%;
425
- display: grid;
426
-
427
- .action-wrap {
428
- display: flex;
429
- align-items: center;
430
- justify-content: space-between;
431
- //padding: 12px;
432
-
433
- .device-count {
434
- font-size: 13px;
435
- font-weight: 500;
436
- line-height: 15.73px;
437
- color: #9da6ad;
438
- }
439
-
440
- .add-device-dropdown-wrap {
441
- #add-device-dropdown {
442
- display: flex;
443
- align-items: center;
444
- gap: 8px;
445
- background-color: var(--add-device-dropdown-bg-color);
446
- border: 1px solid var(--add-device-dropdown-border-color);
447
- border-radius: 6px;
448
- padding: 7px 12px;
449
- color: var(--add-device-dropdown-color);
450
- font-size: 13px;
451
- font-weight: 500;
452
- line-height: 15.73px;
453
- height: 32px;
454
-
455
- &:hover {
456
- background-color: var(--add-device-dropdown-bg-color-hover);
457
- border-color: var(--add-device-dropdown-border-color-hover);
458
- color: var(--add-device-dropdown-color-hover);
459
- }
460
-
461
- &.active {
462
- color: #008fd6;
463
- border-color: #008fd6;
464
-
465
- &:hover {
466
- background-color: var(--add-device-dropdown-active-bg-color-hover);
467
- }
468
- }
469
-
470
- .add-device-dropdown-text {
471
- font-weight: 500;
472
- font-family: 'Inter', sans-serif;
473
- text-transform: capitalize;
474
- }
475
- }
476
- :deep(.ui-popup-window) {
477
- overflow: hidden;
478
- padding: 8px 0;
479
-
480
- .ui-dropdown {
481
- overflow: auto;
482
- //max-height: calc(300px - 24px);
483
-
484
- .ui-dropdown-menu.md {
485
- padding: 0 8px;
486
-
487
- li {
488
- &.has-items .group-title {
489
- padding: 4px 8px 0;
490
- color: var(--add-device-dropdown-item-title-color);
491
- }
492
- &:not(:last-child) {
493
- margin-bottom: 4px;
494
- }
495
- //&:last-child ul li:last-child {
496
- //height: 26px;
497
- //align-items: flex-end;
498
- //}
499
- }
500
- }
501
- }
502
- }
503
- }
504
- }
505
- }
506
- .stack-view {
507
- display: flex;
508
- flex-direction: column;
509
- gap: 12px;
510
- padding-bottom: 12px;
511
- background-color: var(--vm-wizard-block-view-bg-color);
512
-
513
- .vm-hardware-version-wrap {
514
- align-items: flex-end;
515
- text-align: right;
516
-
517
- .vm-hardware-version {
518
- font-size: 13px;
519
- color: #9da6ad; // for light and dark
520
- }
521
- }
522
- }
523
- </style>
1
+ <template>
2
+ <div class="virtual-hardware">
3
+ <div class="action-wrap py-3">
4
+ <span class="device-count">{{ deviceCountText }}</span>
5
+
6
+ <div class="add-device-dropdown-wrap">
7
+ <button
8
+ id="add-device-dropdown"
9
+ :class="['cursor-pointer', { active: isShowAddDeviceDropdown }]"
10
+ data-id="add-device-dropdown"
11
+ @click="isShowAddDeviceDropdown = !isShowAddDeviceDropdown"
12
+ >
13
+ <ui-icon name="plus" width="18" height="18" />
14
+ <span class="add-device-dropdown-text">
15
+ {{ addNewDeviceText }}
16
+ </span>
17
+ </button>
18
+ <ui-dropdown
19
+ :items="dropdownItems"
20
+ :show="isShowAddDeviceDropdown"
21
+ :margin-between-trigger="4"
22
+ show-from-left
23
+ width="max-content"
24
+ elem-id="add-device-dropdown"
25
+ test-id="add-device-dropdown"
26
+ left
27
+ max-height="400px"
28
+ @select="onAddDevice"
29
+ @hide="isShowAddDeviceDropdown = false"
30
+ />
31
+ </div>
32
+ </div>
33
+
34
+ <div class="overflow-auto virtual-hardware-content-block">
35
+ <div class="stack-view">
36
+ <common-vm-actions-common-customize-hardware-virtual-hardware-cpu
37
+ v-model="model"
38
+ :cpu-models="props.cpuModels"
39
+ :is-edit="props.isEdit"
40
+ :state="props.state"
41
+ :error-validation-fields="props.errorValidationFields"
42
+ :vm-cpu-help-text-second="props.vmCpuHelpTextSecond"
43
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
44
+ @invalid="cpuInvalid = $event"
45
+ />
46
+ <common-vm-actions-common-customize-hardware-virtual-hardware-memory
47
+ v-model="model"
48
+ :max-memory="props.maxMemory"
49
+ :is-edit="props.isEdit"
50
+ :state="props.state"
51
+ :error-validation-fields="props.errorValidationFields"
52
+ @invalid="memoryInvalid = $event"
53
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
54
+ />
55
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-hard-disk
56
+ v-for="(item, key) in props.hardDisks"
57
+ :key="props.hardDisksIndex[key]"
58
+ :index="props.hardDisksIndex[key]"
59
+ :type="props.hardDisksType[key]"
60
+ :storage="props.storage"
61
+ :hard-disk="item"
62
+ :error-validation-fields="props.errorValidationFields"
63
+ :get-datastore-table-func="props.getDatastoreTableFunc"
64
+ :datastore="props.datastore"
65
+ :is-datastore-loading="props.isDatastoreLoading"
66
+ :is-edit="props.isEdit"
67
+ :state="props.state"
68
+ :guest-machine-type="props.guestMachineType"
69
+ :compute-resource="props.computeResource"
70
+ @remove="emits('remove-hard-disk', [props.hardDisksIndex[key], item])"
71
+ @roll-back="emits('roll-back-hard-disk', props.hardDisksIndex[key])"
72
+ @send-data="
73
+ emits('send-data-new-hard-disk-method', [
74
+ $event,
75
+ props.hardDisksIndex[key],
76
+ ])
77
+ "
78
+ @invalid="
79
+ emits('set-invalid-hard-disk', [$event, props.hardDisksIndex[key]])
80
+ "
81
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
82
+ />
83
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network
84
+ v-for="(item, key) in props.networks"
85
+ :key="props.networksIndex[key]"
86
+ :index="props.networksIndex[key]"
87
+ :type="props.networksType[key]"
88
+ :network="item"
89
+ :networks-table="props.networksTable"
90
+ :error-validation-fields="props.errorValidationFields"
91
+ :is-edit="props.isEdit"
92
+ :state="props.state"
93
+ :project="props.project"
94
+ @remove="emits('remove-network', props.networksIndex[key])"
95
+ @send-data="
96
+ emits('send-data-new-network-method', [
97
+ $event,
98
+ props.networksIndex[key],
99
+ ])
100
+ "
101
+ @invalid="
102
+ emits('set-invalid-network', [$event, props.networksIndex[key]])
103
+ "
104
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
105
+ @get-networks-table="emits('get-networks-table', $event)"
106
+ />
107
+ <common-vm-actions-common-customize-hardware-virtual-hardware-cd-dvd-drive
108
+ v-for="(item, key) in props.cdDvdDrives"
109
+ :key="props.cdDvdDrivesIndex[key]"
110
+ :index="props.cdDvdDrivesIndex[key]"
111
+ :hard-disks-count="props.hardDisks?.length || 0"
112
+ :type="props.cdDvdDrivesType[key]"
113
+ :cd-dvd-drive="item"
114
+ :nodes="props.nodes"
115
+ :files="props.files"
116
+ :error-validation-fields="props.errorValidationFields"
117
+ :is-edit="props.isEdit"
118
+ :state="props.state"
119
+ :guest-machine-type="props.guestMachineType"
120
+ :compute-resource="props.computeResource"
121
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
122
+ @get-storage="emits('get-storage', $event)"
123
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
124
+ @get-active-device-child="emits('get-active-device-child', $event)"
125
+ @show-datastore-child="emits('show-datastore-child', $event)"
126
+ @remove="
127
+ emits('remove-cd-dvd-drive', [props.cdDvdDrivesIndex[key], item])
128
+ "
129
+ @roll-back="
130
+ emits('roll-back-cd-dvd-drive', props.cdDvdDrivesIndex[key])
131
+ "
132
+ @send-data="
133
+ emits('send-data-new-cd-dvd-drive-method', [
134
+ $event,
135
+ props.cdDvdDrivesIndex[key],
136
+ ])
137
+ "
138
+ />
139
+ <div v-for="(item, key) in model.usb_controllers" :key="key">
140
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-usb-controller
141
+ v-model="item.type"
142
+ :is-edit="props.isEdit"
143
+ :state="props.state"
144
+ />
145
+ </div>
146
+ <template v-if="props.passthroughDevices || props.mediatedDevices">
147
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device
148
+ v-for="(item, key) in props.pciDevices"
149
+ :key="props.pciDevicesIndex[key]"
150
+ :index="props.pciDevicesIndex[key]"
151
+ :pci-device="item"
152
+ :error-validation-fields="props.errorValidationFields"
153
+ :passthrough-devices="props.passthroughDevices"
154
+ :mediated-devices="props.mediatedDevices"
155
+ :type="props.pciDevicesType[key]"
156
+ :is-edit="props.isEdit"
157
+ :state="props.state"
158
+ @remove="emits('remove-pci-device', props.pciDevicesIndex[key])"
159
+ @send-data="
160
+ emits('send-data-pci-devices-method', [
161
+ $event,
162
+ props.pciDevicesIndex[key],
163
+ ])
164
+ "
165
+ @invalid="
166
+ emits('set-invalid-pci-device', [
167
+ $event,
168
+ props.pciDevicesIndex[key],
169
+ ])
170
+ "
171
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
172
+ />
173
+ </template>
174
+ <common-vm-actions-common-customize-hardware-virtual-hardware-video-card
175
+ v-model="model.video_card"
176
+ :is-edit="props.isEdit"
177
+ :video-card="props.videoCard"
178
+ :error-validation-fields="props.errorValidationFields"
179
+ :state="props.state"
180
+ @invalid="videoCardInvalid = $event"
181
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
182
+ />
183
+ <common-vm-actions-common-customize-hardware-virtual-hardware-other />
184
+ <div
185
+ v-if="props.compatibilityInfo"
186
+ class="vm-hardware-version-wrap justify-end flex flex-1 mt-4"
187
+ >
188
+ <span class="vm-hardware-version">
189
+ {{ props.compatibilityInfo }}
190
+ </span>
191
+ </div>
192
+ </div>
193
+ </div>
194
+
195
+ <Teleport to="body">
196
+ <common-vm-actions-common-customize-hardware-virtual-hardware-browse-view
197
+ v-if="props.isShowFileModal"
198
+ :nodes="props.nodes"
199
+ :files="props.files"
200
+ show
201
+ @submit="emits('add-exist-hard-disk', $event)"
202
+ @get-storage="emits('get-storage', $event)"
203
+ @get-folders-or-files="emits('get-folders-or-files', $event)"
204
+ @get-active-device-child="emits('get-active-device-child', $event)"
205
+ @show-datastore-child="emits('show-datastore-child', $event)"
206
+ @hide="emits('hide-file-modal')"
207
+ />
208
+ </Teleport>
209
+ </div>
210
+ </template>
211
+
212
+ <script setup lang="ts">
213
+ import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
214
+ import type { UI_T_Project } from '~/lib/models/types'
215
+ import type { UI_I_DatastoreTableItem } from '~/lib/models/store/storage/interfaces'
216
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
217
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
218
+ import type { UI_I_FolderOrFileTreePayload } from '~/lib/models/store/storage/interfaces'
219
+ import type { UI_I_FileTreeNode } from '~/components/lib/models/interfaces'
220
+ import type {
221
+ UI_I_SendDataNewHardDisk,
222
+ UI_I_SendDataNewNetwork,
223
+ UI_I_SendDataVideoCard,
224
+ UI_I_SendDataNewCdDvdDrive,
225
+ UI_I_SendDataNewPciDevice,
226
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
227
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
228
+ import type {
229
+ UI_T_HardDiskType,
230
+ UI_T_NetworkType,
231
+ } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
232
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
233
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
234
+ import type {
235
+ API_UI_I_VmEditCpu,
236
+ UI_I_MediatedDevice,
237
+ UI_I_PciDevice,
238
+ } from '~/lib/models/store/vm/interfaces'
239
+ import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
240
+ import type { UI_I_CreateVmData } from '~/components/common/vm/actions/common/lib/models/interfaces'
241
+ import { dropdownItemsNewFunc } from './lib/config/dropdownItems'
242
+
243
+ const model = defineModel<UI_I_CreateVmData>({ required: true })
244
+
245
+ const cpuInvalid = defineModel<boolean>('cpuInvalid', { required: true })
246
+ const memoryInvalid = defineModel<boolean>('memoryInvalid', { required: true })
247
+ const videoCardInvalid = defineModel<boolean>('videoCardInvalid', {
248
+ required: true,
249
+ })
250
+
251
+ const props = withDefaults(
252
+ defineProps<{
253
+ nodes: UI_I_FileTreeNode[]
254
+ files: UI_I_FileTreeNode[]
255
+ isEdit: boolean
256
+ storage: UI_I_DatastoreTableItem | null
257
+ project: UI_T_Project
258
+ maxMemory: number
259
+ cpuModels: UI_I_OptionItem[]
260
+ datastore: UI_I_DatastoreTableItem[]
261
+ isDatastoreLoading: boolean
262
+ networksType: UI_T_NetworkType[]
263
+ networksTable: UI_I_NetworkTableItem[]
264
+ // dropdownItems: UI_I_DropdownTreeItem[]
265
+ hardDisksType: UI_T_HardDiskType[]
266
+ networksIndex: number[]
267
+ hardDisksIndex: number[]
268
+ pciDevicesType: UI_T_NetworkType[]
269
+ isShowFileModal: boolean
270
+ pciDevicesIndex: number[]
271
+ cdDvdDrivesType: UI_T_NetworkType[]
272
+ cdDvdDrivesIndex: number[]
273
+ errorValidationFields: UI_I_ErrorValidationField<string>[]
274
+ getDatastoreTableFunc: (payload: UI_I_TablePayload) => Promise<void>
275
+ cpu?: API_UI_I_VmEditCpu
276
+ state?: string | number
277
+ networks?: UI_I_SendDataNewNetwork[] | null
278
+ hardDisks?: UI_I_SendDataNewHardDisk[] | null
279
+ videoCard?: UI_I_SendDataVideoCard
280
+ pciDevices?: UI_I_SendDataNewPciDevice[]
281
+ cdDvdDrives?: UI_I_SendDataNewCdDvdDrive[] | null
282
+ guestMachineType?: UI_I_OptionItem | null
283
+ passthroughDevices?: UI_I_PciDevice[]
284
+ mediatedDevices?: UI_I_MediatedDevice[]
285
+ vmCpuHelpTextSecond?: string
286
+ computeResource?: UI_I_TreeNode | null
287
+ compatibilityInfo?: string
288
+ }>(),
289
+ {
290
+ cpu: undefined,
291
+ state: undefined,
292
+ networks: undefined,
293
+ hardDisks: undefined,
294
+ videoCard: undefined,
295
+ pciDevices: undefined,
296
+ cdDvdDrives: undefined,
297
+ guestMachineType: undefined,
298
+ passthroughDevices: undefined,
299
+ mediatedDevices: undefined,
300
+ vmCpuHelpTextSecond: undefined,
301
+ computeResource: undefined,
302
+ compatibilityInfo: undefined,
303
+ }
304
+ )
305
+ const emits = defineEmits<{
306
+ (event: 'add-device', value: { value: number }): void
307
+ (event: 'get-storage', value: UI_I_TablePayload): void
308
+ (event: 'remove-network', value: number): void
309
+ (event: 'hide-file-modal'): void
310
+ (event: 'remove-hard-disk', value: [number, UI_I_SendDataNewHardDisk]): void
311
+ (event: 'remove-pci-device', value: number): void
312
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
313
+ (event: 'add-exist-hard-disk', value: UI_I_FileTreeNode): void
314
+ (event: 'roll-back-hard-disk', value: number): void
315
+ (event: 'set-invalid-network', value: [boolean, number]): void
316
+ (
317
+ event: 'remove-cd-dvd-drive',
318
+ value: [number, UI_I_SendDataNewCdDvdDrive]
319
+ ): void
320
+ (event: 'show-datastore-child', value: UI_I_FileTreeNode): void
321
+ (event: 'get-folders-or-files', value: UI_I_FolderOrFileTreePayload): void
322
+ (event: 'set-invalid-hard-disk', value: [boolean, number]): void
323
+ (event: 'remove-error-by-title', value: string): void
324
+ (event: 'roll-back-cd-dvd-drive', value: number): void
325
+ (event: 'set-invalid-pci-device', value: [boolean, number]): void
326
+ (event: 'get-active-device-child', value: UI_I_FileTreeNode): void
327
+ (
328
+ event: 'send-data-new-network-method',
329
+ value: [UI_I_SendDataNewNetwork, number]
330
+ ): void
331
+ (
332
+ event: 'send-data-pci-devices-method',
333
+ value: [UI_I_SendDataNewPciDevice, number]
334
+ ): void
335
+ (
336
+ event: 'send-data-new-hard-disk-method',
337
+ value: [UI_I_SendDataNewHardDisk, number]
338
+ ): void
339
+ (
340
+ event: 'send-data-new-cd-dvd-drive-method',
341
+ value: [UI_I_SendDataNewCdDvdDrive, number]
342
+ ): void
343
+ }>()
344
+
345
+ const { $text } = useNuxtApp()
346
+
347
+ const localization = computed<UI_I_Localization>(() => useLocal())
348
+
349
+ const isShowAddDeviceDropdown = ref<boolean>(false)
350
+
351
+ // TODO
352
+ const addNewDeviceText = computed<string>(() =>
353
+ $text.toCapitalize(localization.value.common.addNewDevice)
354
+ )
355
+ const deviceCount = computed<number>(
356
+ () =>
357
+ (props.hardDisks?.length || 0) +
358
+ (props.networks?.length || 0) +
359
+ (props.cdDvdDrives?.length || 0) +
360
+ (props.pciDevices?.length || 0) +
361
+ 6
362
+ )
363
+ const deviceCountText = computed<string>(() =>
364
+ localization.value.vmWizard.devices.replace(
365
+ '{0}',
366
+ deviceCount.value.toString()
367
+ )
368
+ )
369
+ const dropdownItems = computed<UI_I_Dropdown[]>(() =>
370
+ dropdownItemsNewFunc(
371
+ localization.value,
372
+ props.state,
373
+ props.passthroughDevices,
374
+ props.mediatedDevices
375
+ )
376
+ )
377
+
378
+ const onAddDevice = (data: number): void => {
379
+ isShowAddDeviceDropdown.value = false
380
+ // из-за старого компонента
381
+ emits('add-device', { value: data })
382
+ }
383
+ </script>
384
+
385
+ <style>
386
+ :root {
387
+ --vm-wizard-block-view-bg-color: #fafafa;
388
+ --add-device-dropdown-bg-color: #fff;
389
+ --add-device-dropdown-bg-color-hover: #f6f7f8;
390
+ --add-device-dropdown-active-bg-color-hover: #f0f8fd;
391
+ --add-device-dropdown-border-color: #e9ebed;
392
+ --add-device-dropdown-border-color-hover: #e9ebed;
393
+ --add-device-dropdown-color: #4d5d69;
394
+ --add-device-dropdown-color-hover: #4d5d69;
395
+ --add-device-dropdown-item-title-color: #182531;
396
+ }
397
+ :root.dark-theme {
398
+ --vm-wizard-block-view-bg-color: transparent;
399
+ --add-device-dropdown-bg-color: #1b2a373d;
400
+ //--add-device-dropdown-bg-color-hover: #2585b614;
401
+ --add-device-dropdown-bg-color-hover: #b8bcc10a;
402
+ --add-device-dropdown-active-bg-color-hover: #2785b614;
403
+ --add-device-dropdown-border-color: #e9ebed1f;
404
+ --add-device-dropdown-border-color-hover: #2ba2de;
405
+ --add-device-dropdown-color: #e9eaec;
406
+ --add-device-dropdown-color-hover: #2ba2de;
407
+ --add-device-dropdown-item-title-color: #e9eaec;
408
+ }
409
+ </style>
410
+
411
+ <style scoped lang="scss">
412
+ .virtual-hardware {
413
+ height: 100%;
414
+ display: grid;
415
+
416
+ .action-wrap {
417
+ display: flex;
418
+ align-items: center;
419
+ justify-content: space-between;
420
+ //padding: 12px;
421
+
422
+ .device-count {
423
+ font-size: 13px;
424
+ font-weight: 500;
425
+ line-height: 15.73px;
426
+ color: #9da6ad;
427
+ }
428
+
429
+ .add-device-dropdown-wrap {
430
+ #add-device-dropdown {
431
+ display: flex;
432
+ align-items: center;
433
+ gap: 8px;
434
+ background-color: var(--add-device-dropdown-bg-color);
435
+ border: 1px solid var(--add-device-dropdown-border-color);
436
+ border-radius: 6px;
437
+ padding: 7px 12px;
438
+ color: var(--add-device-dropdown-color);
439
+ font-size: 13px;
440
+ font-weight: 500;
441
+ line-height: 15.73px;
442
+ height: 32px;
443
+
444
+ &:hover {
445
+ background-color: var(--add-device-dropdown-bg-color-hover);
446
+ border-color: var(--add-device-dropdown-border-color-hover);
447
+ color: var(--add-device-dropdown-color-hover);
448
+ }
449
+
450
+ &.active {
451
+ color: #008fd6;
452
+ border-color: #008fd6;
453
+
454
+ &:hover {
455
+ background-color: var(--add-device-dropdown-active-bg-color-hover);
456
+ }
457
+ }
458
+
459
+ .add-device-dropdown-text {
460
+ font-weight: 500;
461
+ font-family: 'Inter', sans-serif;
462
+ text-transform: capitalize;
463
+ }
464
+ }
465
+ :deep(.ui-popup-window) {
466
+ overflow: hidden;
467
+ padding: 8px 0;
468
+
469
+ .ui-dropdown {
470
+ overflow: auto;
471
+ //max-height: calc(300px - 24px);
472
+
473
+ .ui-dropdown-menu.md {
474
+ padding: 0 8px;
475
+
476
+ li {
477
+ &.has-items .group-title {
478
+ padding: 4px 8px 0;
479
+ color: var(--add-device-dropdown-item-title-color);
480
+ }
481
+ &:not(:last-child) {
482
+ margin-bottom: 4px;
483
+ }
484
+ //&:last-child ul li:last-child {
485
+ //height: 26px;
486
+ //align-items: flex-end;
487
+ //}
488
+ }
489
+ }
490
+ }
491
+ }
492
+ }
493
+ }
494
+ }
495
+ .stack-view {
496
+ display: flex;
497
+ flex-direction: column;
498
+ gap: 12px;
499
+ padding-bottom: 12px;
500
+ background-color: var(--vm-wizard-block-view-bg-color);
501
+
502
+ .vm-hardware-version-wrap {
503
+ align-items: flex-end;
504
+ text-align: right;
505
+
506
+ .vm-hardware-version {
507
+ font-size: 13px;
508
+ color: #9da6ad; // for light and dark
509
+ }
510
+ }
511
+ }
512
+ </style>