bfg-common 1.4.778 → 1.4.780

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 (138) hide show
  1. package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
  2. package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
  3. package/assets/img/icons/icons-sprite-light-3.svg +227 -227
  4. package/assets/img/icons/icons-sprite-light-5.svg +488 -488
  5. package/assets/localization/local_be.json +1 -1
  6. package/assets/localization/local_en.json +1 -1
  7. package/assets/localization/local_hy.json +1 -1
  8. package/assets/localization/local_kk.json +1 -1
  9. package/assets/localization/local_ru.json +2 -2
  10. package/assets/localization/local_zh.json +1 -1
  11. package/assets/scss/clarity/local_ar.json +1 -1
  12. package/assets/scss/common/normalize.scss +361 -361
  13. package/components/atoms/TheIcon3.vue +50 -50
  14. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  15. package/components/atoms/stack/StackBlock.vue +185 -185
  16. package/components/atoms/table/dataGrid/DataGrid.vue +1703 -1703
  17. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  18. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  19. package/components/common/browse/BrowseNew.vue +237 -237
  20. package/components/common/browse/BrowseOld.vue +217 -217
  21. package/components/common/browse/blocks/contents/Files.vue +37 -37
  22. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  23. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  24. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  25. package/components/common/context/Context.vue +111 -111
  26. package/components/common/context/lib/models/interfaces.ts +30 -30
  27. package/components/common/context/recursion/Recursion.vue +87 -87
  28. package/components/common/context/recursion/RecursionNew.vue +237 -237
  29. package/components/common/context/recursion/RecursionOld.vue +227 -227
  30. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  31. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  32. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +151 -151
  33. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +300 -300
  34. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  35. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  36. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +250 -250
  37. package/components/common/pages/home/StatusContent.vue +49 -49
  38. package/components/common/pages/home/headline/Headline.vue +44 -44
  39. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  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/HostsNew.vue +100 -100
  46. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  47. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  48. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  49. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  50. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  51. package/components/common/pages/packages/Packages.vue +208 -208
  52. package/components/common/recursionTree/RecursionTree.vue +223 -223
  53. package/components/common/select/button/ButtonDropdown.vue +108 -108
  54. package/components/common/spiceConsole/Drawer.vue +370 -370
  55. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  56. package/components/common/split/horizontal/HorizontalNew.vue +376 -376
  57. package/components/common/split/horizontal/HorizontalOld.vue +337 -337
  58. package/components/common/split/vertical/Vertical.vue +160 -160
  59. package/components/common/vm/actions/add/Add.vue +621 -621
  60. package/components/common/vm/actions/clone/Clone.vue +639 -639
  61. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  62. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +271 -271
  63. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +271 -271
  64. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +174 -174
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +357 -357
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  95. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  96. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  97. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  98. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  99. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  100. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  101. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  117. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  118. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  119. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  120. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  121. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  122. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  123. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  124. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  125. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  126. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  127. package/components/common/wizards/datastore/add/lib/config/steps.ts +138 -138
  128. package/composables/productNameLocal.ts +30 -30
  129. package/composables/useAppVersion.ts +21 -21
  130. package/package.json +1 -1
  131. package/plugins/date.ts +233 -233
  132. package/plugins/recursion.ts +311 -311
  133. package/public/spice-console/lib/images/bitmap.js +203 -203
  134. package/public/spice-console/network/spicechannel.js +383 -383
  135. package/public/spice-console-minify/run.min.js +4 -4
  136. package/store/main/mutations.ts +7 -7
  137. package/store/main/state.ts +7 -7
  138. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,338 +1,338 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-cpu-new
3
- v-if="isNewView"
4
- v-model:selected-cpu="selectedCpu"
5
- v-model:selected-core-per-socket="selectedCorePerSocket"
6
- v-model:enable-cpu-hot-add="enableCpuHotAdd"
7
- v-model:selected-max-cpu="selectedMaxCpu"
8
- v-model:reservation="reservation"
9
- v-model:reservation-type="reservationType"
10
- v-model:limit="limit"
11
- v-model:limit-type="limitType"
12
- v-model:shares="shares"
13
- v-model:shares-type="sharesType"
14
- v-model:cpu-model="cpuModel"
15
- v-model:passthrough-host-cpu="passthroughHostCpu"
16
- v-model:host-model-cpu="hostModelCpu"
17
- :max-cpus="props.maxCpus"
18
- :cpu-models="props.cpuModels"
19
- :is-edit="props.isEdit"
20
- :error-validation-fields="props.errorValidationFields"
21
- :cpu-invalid="cpuInvalid"
22
- :vcpus-local-and-api-errors-texts="vcpusLocalAndApiErrorsTexts"
23
- :cpu-options="cpuOptions"
24
- :is-cpu-disabled="isCpuDisabled"
25
- :selected-cpus="selectedCpus"
26
- :is-disabled="isDisabled"
27
- :enable-cpu-hot-add-disabled="enableCpuHotAddDisabled"
28
- :max-cpu-options="maxCpuOptions"
29
- :vm-cpu-help-text-second="vmCpuHelpTextSecond"
30
- @remove-error-by-title="emits('remove-error-by-title', $event)"
31
- @remove-validation-error="onRemoveValidationError"
32
- @max-cpu-invalid="maxCpuInvalid = $event"
33
- @reservation-invalid="reservationInvalid = $event"
34
- @limit-invalid="limitInvalid = $event"
35
- @shares-invalid="sharesInvalid = $event"
36
- />
37
- <common-vm-actions-common-customize-hardware-virtual-hardware-cpu-old
38
- v-else
39
- v-model:selected-cpu="selectedCpu"
40
- v-model:selected-core-per-socket="selectedCorePerSocket"
41
- v-model:enable-cpu-hot-add="enableCpuHotAdd"
42
- v-model:selected-max-cpu="selectedMaxCpu"
43
- v-model:reservation="reservation"
44
- v-model:reservation-type="reservationType"
45
- v-model:limit="limit"
46
- v-model:limit-type="limitType"
47
- v-model:shares="shares"
48
- v-model:shares-type="sharesType"
49
- v-model:cpu-model="cpuModel"
50
- v-model:passthrough-host-cpu="passthroughHostCpu"
51
- v-model:host-model-cpu="hostModelCpu"
52
- :max-cpus="props.maxCpus"
53
- :cpu-models="props.cpuModels"
54
- :is-edit="props.isEdit"
55
- :error-validation-fields="props.errorValidationFields"
56
- :cpu-invalid="cpuInvalid"
57
- :vcpus-local-and-api-errors-texts="vcpusLocalAndApiErrorsTexts"
58
- :cpu-options="cpuOptions"
59
- :is-cpu-disabled="isCpuDisabled"
60
- :selected-cpus="selectedCpus"
61
- :is-disabled="isDisabled"
62
- :enable-cpu-hot-add-disabled="enableCpuHotAddDisabled"
63
- :max-cpu-options="maxCpuOptions"
64
- :vm-cpu-help-text-second="vmCpuHelpTextSecond"
65
- @remove-error-by-title="emits('remove-error-by-title', $event)"
66
- @remove-validation-error="onRemoveValidationError"
67
- @max-cpu-invalid="maxCpuInvalid = $event"
68
- @reservation-invalid="reservationInvalid = $event"
69
- @limit-invalid="limitInvalid = $event"
70
- @shares-invalid="sharesInvalid = $event"
71
- />
72
- </template>
73
-
74
- <script setup lang="ts">
75
- import type { UI_I_SendDataCpu } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
76
- import type { UI_I_Localization } from '~/lib/models/interfaces'
77
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
78
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
79
- import type { API_UI_I_VmEditCpu } from '~/lib/models/store/vm/interfaces'
80
- import { cpuOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/lib/config/cpuOptions'
81
-
82
- const props = defineProps<{
83
- maxCpus: number
84
- cpuModels: UI_I_OptionItem[]
85
- isEdit: boolean
86
- errorValidationFields: UI_I_ErrorValidationField<string>[]
87
- vmCpuHelpTextSecond?: string
88
- state?: string | number
89
- cpu?: API_UI_I_VmEditCpu
90
- }>()
91
- const emits = defineEmits<{
92
- (event: 'send-data', value: UI_I_SendDataCpu): void
93
- (event: 'invalid', value: boolean): void
94
- (event: 'remove-error-by-title', value: string): void
95
- }>()
96
-
97
- const { $store }: any = useNuxtApp()
98
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
99
-
100
- const localization = computed<UI_I_Localization>(() => useLocal())
101
-
102
- const isDisabled = computed<boolean>(() => {
103
- return props.state === 2
104
- })
105
-
106
- const cpuOptions = computed<UI_I_OptionItem[]>(() =>
107
- cpuOptionsFunc(localization.value, 1, props.maxCpus)
108
- )
109
-
110
- const enableCpuHotAdd = ref<boolean>(false)
111
- const enableCpuHotAddDisabled = computed<boolean>(
112
- // () => selectedCpu.value >= props.maxCpus || isDisabled.value
113
- () => isDisabled.value // pc-1766
114
- )
115
- watch(enableCpuHotAdd, (newValue) => {
116
- if (newValue) return
117
-
118
- maxCpuInvalid.value = false
119
- selectedMaxCpu.value = 1
120
- })
121
-
122
- const selectedCpu = ref<number>(
123
- isDisabled.value && enableCpuHotAdd.value ? props.maxCpus : 2
124
- )
125
- const isCpuDisabled = computed<boolean>(
126
- () => isDisabled.value && !enableCpuHotAdd.value
127
- )
128
- watch(selectedCpu, (newValue) => {
129
- selectedCpu.value = Math.floor(+newValue)
130
- if (!(selectedCpu.value % selectedCorePerSocket.value) || isDisabled.value)
131
- return
132
- selectedCorePerSocket.value = 1
133
- })
134
- // watch(selectedCpu, (newValue) => {
135
- // if (enableCpuHotAdd.value && enableCpuHotAddDisabled.value) return
136
-
137
- // if (newValue >= props.maxCpus) { // pc-1766
138
- // enableCpuHotAdd.value = false
139
- // }
140
- // selectedMaxCpu.value =
141
- // selectedMaxCpu.value <= newValue ? newValue + 1 : selectedMaxCpu.value
142
- // if (selectedMaxCpu.value > props.maxCpus) selectedMaxCpu.value = props.maxCpus
143
- // })
144
- const maxCpuOptions = computed<UI_I_OptionItem[]>(() =>
145
- cpuOptionsFunc(localization.value, selectedCpu.value, props.maxCpus)
146
- )
147
- const selectedMaxCpu = ref<number>(1)
148
- watch(
149
- () => props.maxCpus,
150
- (newValue) => {
151
- selectedMaxCpu.value = newValue
152
- }
153
- )
154
-
155
- const selectedCpus = computed<number[]>(() =>
156
- enableCpuHotAdd.value
157
- ? [selectedCpu.value, selectedMaxCpu.value]
158
- : [selectedCpu.value]
159
- )
160
-
161
- const selectedCorePerSocket = ref<number>(1)
162
-
163
- const cpuErrorLocalText = computed<string>(() => {
164
- const validValue = /^\d+(\.\d+)?$/.test(selectedCpu.value + '')
165
- if (!validValue) {
166
- return localization.value.common.inputContainsInvalidCharacters
167
- }
168
-
169
- const min = cpuOptions.value[0].value
170
- const max = cpuOptions.value[1].value
171
- if (selectedCpu.value < min || selectedCpu.value > max) {
172
- return localization.value.vmWizard.cpuMustBe
173
- .replace('{0}', min)
174
- .replace('{1}', max)
175
- }
176
-
177
- return ''
178
- })
179
-
180
- const apiVcpusError = computed<string>(() => {
181
- return (
182
- props.errorValidationFields?.find(
183
- (message) => message.field === 'cpu.vcpus'
184
- )?.error_message || ''
185
- )
186
- })
187
-
188
- const vcpusLocalAndApiErrorsTexts = computed<string>(() => {
189
- const localError = cpuErrorLocalText.value
190
- const apiError = apiVcpusError.value
191
-
192
- let result = ''
193
- if (localError && !apiError) result = localError
194
- if (!localError && apiError) result = apiError
195
- if (localError && apiError) result = localError + ', ' + apiError
196
- if (!localError && apiError) result = apiError
197
-
198
- return result
199
- })
200
- const reservationInvalid = ref<boolean>(false)
201
- const limitInvalid = ref<boolean>(false)
202
- const sharesInvalid = ref<boolean>(false)
203
- const maxCpuInvalid = ref<boolean>(false)
204
- const cpuInvalid = computed<boolean>(
205
- () =>
206
- !!cpuErrorLocalText.value ||
207
- reservationInvalid.value ||
208
- limitInvalid.value ||
209
- sharesInvalid.value ||
210
- (enableCpuHotAdd.value &&
211
- // selectedCpu.value < props.maxCpus && // pc-1766
212
- maxCpuInvalid.value)
213
- )
214
- watch(
215
- cpuInvalid,
216
- (newValue: boolean) => {
217
- emits('invalid', newValue)
218
- },
219
- { immediate: true }
220
- )
221
-
222
- const reservation = ref<string>('1')
223
- const reservationType = ref<string>('mhz')
224
-
225
- const limit = ref<string>('Unlimited')
226
- const limitType = ref<string>('mhz')
227
-
228
- const shares = ref<string>('2000')
229
- const sharesType = ref<string>('2000')
230
-
231
- // const hardwareVirtualization = ref<boolean>(false)
232
- //
233
- // const performanceCounters = ref<boolean>(false)
234
- //
235
- // const schedulingAffinity = ref<string>('')
236
- //
237
- // const iommu = ref<boolean>(false)
238
-
239
- // const cpuModel = ref<string>(props.cpuModels[0]?.value || '')
240
- const cpuModel = ref<string>('host-model') // PNCWEB-389
241
- watch(
242
- () => props.cpuModels,
243
- (newValue) => {
244
- cpuModel.value = newValue[0].value
245
- }
246
- )
247
- const passthroughHostCpu = ref<boolean>(false)
248
- const hostModelCpu = ref<boolean>(false)
249
-
250
- // const isShowCpuHelp = ref<boolean>(false)
251
-
252
- const { $binary } = useNuxtApp()
253
- watch(
254
- [
255
- reservation,
256
- reservationType,
257
- limit,
258
- limitType,
259
- shares,
260
- selectedCpu,
261
- selectedMaxCpu,
262
- selectedCorePerSocket,
263
- enableCpuHotAdd,
264
- cpuModel,
265
- passthroughHostCpu,
266
- hostModelCpu,
267
- ],
268
- () => {
269
- const reservationInMhz =
270
- reservationType.value === 'ghz'
271
- ? $binary.ghzToMhz(+reservation.value)
272
- : +reservation.value
273
- const limitInMhz =
274
- limit.value === 'Unlimited'
275
- ? limit.value
276
- : limitType.value === 'ghz'
277
- ? $binary.ghzToMhz(+limit.value)
278
- : +limit.value
279
- const model = passthroughHostCpu.value
280
- ? 'host-passthrough'
281
- : hostModelCpu.value
282
- ? 'host-model'
283
- : cpuModel.value
284
-
285
- emits('send-data', {
286
- model,
287
- vcpus: selectedCpu.value,
288
- max_vcpus: enableCpuHotAdd.value ? selectedMaxCpu.value : 0,
289
- core_per_socket: selectedCorePerSocket.value,
290
- reservation_mhz: reservationInMhz,
291
- limit_mhz: limitInMhz,
292
- shares: +shares.value,
293
- hotplug: enableCpuHotAdd.value,
294
- })
295
- },
296
- {
297
- immediate: true,
298
- }
299
- )
300
-
301
- // Добавляем данные для редактирования
302
- watch(
303
- () => props.cpu,
304
- (newValue) => {
305
- if (!newValue) return
306
-
307
- enableCpuHotAdd.value = newValue.hotplug
308
- selectedCpu.value = newValue.vcpus
309
- selectedMaxCpu.value = newValue.hotplug ? newValue.max_vcpus : 1
310
- selectedCorePerSocket.value = newValue.core_per_socket
311
- reservation.value = '' + newValue.reservation_mhz
312
- limit.value = '' + newValue.limit_mhz
313
- shares.value = '' + newValue.shares
314
-
315
- switch (newValue.model) {
316
- case 'host-passthrough':
317
- passthroughHostCpu.value = true
318
- cpuModel.value = ''
319
- break
320
- case 'host-model':
321
- hostModelCpu.value = true
322
- cpuModel.value = ''
323
- break
324
- default:
325
- cpuModel.value =
326
- props.cpuModels.find((model) => model.value === newValue.model)
327
- ?.value || cpuModel.value
328
- }
329
- },
330
- { immediate: true }
331
- )
332
-
333
- const onRemoveValidationError = (): void => {
334
- emits('remove-error-by-title', 'cpu.vcpus')
335
- }
336
- </script>
337
-
338
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-cpu-new
3
+ v-if="isNewView"
4
+ v-model:selected-cpu="selectedCpu"
5
+ v-model:selected-core-per-socket="selectedCorePerSocket"
6
+ v-model:enable-cpu-hot-add="enableCpuHotAdd"
7
+ v-model:selected-max-cpu="selectedMaxCpu"
8
+ v-model:reservation="reservation"
9
+ v-model:reservation-type="reservationType"
10
+ v-model:limit="limit"
11
+ v-model:limit-type="limitType"
12
+ v-model:shares="shares"
13
+ v-model:shares-type="sharesType"
14
+ v-model:cpu-model="cpuModel"
15
+ v-model:passthrough-host-cpu="passthroughHostCpu"
16
+ v-model:host-model-cpu="hostModelCpu"
17
+ :max-cpus="props.maxCpus"
18
+ :cpu-models="props.cpuModels"
19
+ :is-edit="props.isEdit"
20
+ :error-validation-fields="props.errorValidationFields"
21
+ :cpu-invalid="cpuInvalid"
22
+ :vcpus-local-and-api-errors-texts="vcpusLocalAndApiErrorsTexts"
23
+ :cpu-options="cpuOptions"
24
+ :is-cpu-disabled="isCpuDisabled"
25
+ :selected-cpus="selectedCpus"
26
+ :is-disabled="isDisabled"
27
+ :enable-cpu-hot-add-disabled="enableCpuHotAddDisabled"
28
+ :max-cpu-options="maxCpuOptions"
29
+ :vm-cpu-help-text-second="vmCpuHelpTextSecond"
30
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
31
+ @remove-validation-error="onRemoveValidationError"
32
+ @max-cpu-invalid="maxCpuInvalid = $event"
33
+ @reservation-invalid="reservationInvalid = $event"
34
+ @limit-invalid="limitInvalid = $event"
35
+ @shares-invalid="sharesInvalid = $event"
36
+ />
37
+ <common-vm-actions-common-customize-hardware-virtual-hardware-cpu-old
38
+ v-else
39
+ v-model:selected-cpu="selectedCpu"
40
+ v-model:selected-core-per-socket="selectedCorePerSocket"
41
+ v-model:enable-cpu-hot-add="enableCpuHotAdd"
42
+ v-model:selected-max-cpu="selectedMaxCpu"
43
+ v-model:reservation="reservation"
44
+ v-model:reservation-type="reservationType"
45
+ v-model:limit="limit"
46
+ v-model:limit-type="limitType"
47
+ v-model:shares="shares"
48
+ v-model:shares-type="sharesType"
49
+ v-model:cpu-model="cpuModel"
50
+ v-model:passthrough-host-cpu="passthroughHostCpu"
51
+ v-model:host-model-cpu="hostModelCpu"
52
+ :max-cpus="props.maxCpus"
53
+ :cpu-models="props.cpuModels"
54
+ :is-edit="props.isEdit"
55
+ :error-validation-fields="props.errorValidationFields"
56
+ :cpu-invalid="cpuInvalid"
57
+ :vcpus-local-and-api-errors-texts="vcpusLocalAndApiErrorsTexts"
58
+ :cpu-options="cpuOptions"
59
+ :is-cpu-disabled="isCpuDisabled"
60
+ :selected-cpus="selectedCpus"
61
+ :is-disabled="isDisabled"
62
+ :enable-cpu-hot-add-disabled="enableCpuHotAddDisabled"
63
+ :max-cpu-options="maxCpuOptions"
64
+ :vm-cpu-help-text-second="vmCpuHelpTextSecond"
65
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
66
+ @remove-validation-error="onRemoveValidationError"
67
+ @max-cpu-invalid="maxCpuInvalid = $event"
68
+ @reservation-invalid="reservationInvalid = $event"
69
+ @limit-invalid="limitInvalid = $event"
70
+ @shares-invalid="sharesInvalid = $event"
71
+ />
72
+ </template>
73
+
74
+ <script setup lang="ts">
75
+ import type { UI_I_SendDataCpu } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
76
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
77
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
78
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
79
+ import type { API_UI_I_VmEditCpu } from '~/lib/models/store/vm/interfaces'
80
+ import { cpuOptionsFunc } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/lib/config/cpuOptions'
81
+
82
+ const props = defineProps<{
83
+ maxCpus: number
84
+ cpuModels: UI_I_OptionItem[]
85
+ isEdit: boolean
86
+ errorValidationFields: UI_I_ErrorValidationField<string>[]
87
+ vmCpuHelpTextSecond?: string
88
+ state?: string | number
89
+ cpu?: API_UI_I_VmEditCpu
90
+ }>()
91
+ const emits = defineEmits<{
92
+ (event: 'send-data', value: UI_I_SendDataCpu): void
93
+ (event: 'invalid', value: boolean): void
94
+ (event: 'remove-error-by-title', value: string): void
95
+ }>()
96
+
97
+ const { $store }: any = useNuxtApp()
98
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
99
+
100
+ const localization = computed<UI_I_Localization>(() => useLocal())
101
+
102
+ const isDisabled = computed<boolean>(() => {
103
+ return props.state === 2
104
+ })
105
+
106
+ const cpuOptions = computed<UI_I_OptionItem[]>(() =>
107
+ cpuOptionsFunc(localization.value, 1, props.maxCpus)
108
+ )
109
+
110
+ const enableCpuHotAdd = ref<boolean>(false)
111
+ const enableCpuHotAddDisabled = computed<boolean>(
112
+ // () => selectedCpu.value >= props.maxCpus || isDisabled.value
113
+ () => isDisabled.value // pc-1766
114
+ )
115
+ watch(enableCpuHotAdd, (newValue) => {
116
+ if (newValue) return
117
+
118
+ maxCpuInvalid.value = false
119
+ selectedMaxCpu.value = 1
120
+ })
121
+
122
+ const selectedCpu = ref<number>(
123
+ isDisabled.value && enableCpuHotAdd.value ? props.maxCpus : 2
124
+ )
125
+ const isCpuDisabled = computed<boolean>(
126
+ () => isDisabled.value && !enableCpuHotAdd.value
127
+ )
128
+ watch(selectedCpu, (newValue) => {
129
+ selectedCpu.value = Math.floor(+newValue)
130
+ if (!(selectedCpu.value % selectedCorePerSocket.value) || isDisabled.value)
131
+ return
132
+ selectedCorePerSocket.value = 1
133
+ })
134
+ // watch(selectedCpu, (newValue) => {
135
+ // if (enableCpuHotAdd.value && enableCpuHotAddDisabled.value) return
136
+
137
+ // if (newValue >= props.maxCpus) { // pc-1766
138
+ // enableCpuHotAdd.value = false
139
+ // }
140
+ // selectedMaxCpu.value =
141
+ // selectedMaxCpu.value <= newValue ? newValue + 1 : selectedMaxCpu.value
142
+ // if (selectedMaxCpu.value > props.maxCpus) selectedMaxCpu.value = props.maxCpus
143
+ // })
144
+ const maxCpuOptions = computed<UI_I_OptionItem[]>(() =>
145
+ cpuOptionsFunc(localization.value, selectedCpu.value, props.maxCpus)
146
+ )
147
+ const selectedMaxCpu = ref<number>(1)
148
+ watch(
149
+ () => props.maxCpus,
150
+ (newValue) => {
151
+ selectedMaxCpu.value = newValue
152
+ }
153
+ )
154
+
155
+ const selectedCpus = computed<number[]>(() =>
156
+ enableCpuHotAdd.value
157
+ ? [selectedCpu.value, selectedMaxCpu.value]
158
+ : [selectedCpu.value]
159
+ )
160
+
161
+ const selectedCorePerSocket = ref<number>(1)
162
+
163
+ const cpuErrorLocalText = computed<string>(() => {
164
+ const validValue = /^\d+(\.\d+)?$/.test(selectedCpu.value + '')
165
+ if (!validValue) {
166
+ return localization.value.common.inputContainsInvalidCharacters
167
+ }
168
+
169
+ const min = cpuOptions.value[0].value
170
+ const max = cpuOptions.value[1].value
171
+ if (selectedCpu.value < min || selectedCpu.value > max) {
172
+ return localization.value.vmWizard.cpuMustBe
173
+ .replace('{0}', min)
174
+ .replace('{1}', max)
175
+ }
176
+
177
+ return ''
178
+ })
179
+
180
+ const apiVcpusError = computed<string>(() => {
181
+ return (
182
+ props.errorValidationFields?.find(
183
+ (message) => message.field === 'cpu.vcpus'
184
+ )?.error_message || ''
185
+ )
186
+ })
187
+
188
+ const vcpusLocalAndApiErrorsTexts = computed<string>(() => {
189
+ const localError = cpuErrorLocalText.value
190
+ const apiError = apiVcpusError.value
191
+
192
+ let result = ''
193
+ if (localError && !apiError) result = localError
194
+ if (!localError && apiError) result = apiError
195
+ if (localError && apiError) result = localError + ', ' + apiError
196
+ if (!localError && apiError) result = apiError
197
+
198
+ return result
199
+ })
200
+ const reservationInvalid = ref<boolean>(false)
201
+ const limitInvalid = ref<boolean>(false)
202
+ const sharesInvalid = ref<boolean>(false)
203
+ const maxCpuInvalid = ref<boolean>(false)
204
+ const cpuInvalid = computed<boolean>(
205
+ () =>
206
+ !!cpuErrorLocalText.value ||
207
+ reservationInvalid.value ||
208
+ limitInvalid.value ||
209
+ sharesInvalid.value ||
210
+ (enableCpuHotAdd.value &&
211
+ // selectedCpu.value < props.maxCpus && // pc-1766
212
+ maxCpuInvalid.value)
213
+ )
214
+ watch(
215
+ cpuInvalid,
216
+ (newValue: boolean) => {
217
+ emits('invalid', newValue)
218
+ },
219
+ { immediate: true }
220
+ )
221
+
222
+ const reservation = ref<string>('1')
223
+ const reservationType = ref<string>('mhz')
224
+
225
+ const limit = ref<string>('Unlimited')
226
+ const limitType = ref<string>('mhz')
227
+
228
+ const shares = ref<string>('2000')
229
+ const sharesType = ref<string>('2000')
230
+
231
+ // const hardwareVirtualization = ref<boolean>(false)
232
+ //
233
+ // const performanceCounters = ref<boolean>(false)
234
+ //
235
+ // const schedulingAffinity = ref<string>('')
236
+ //
237
+ // const iommu = ref<boolean>(false)
238
+
239
+ // const cpuModel = ref<string>(props.cpuModels[0]?.value || '')
240
+ const cpuModel = ref<string>('host-model') // PNCWEB-389
241
+ watch(
242
+ () => props.cpuModels,
243
+ (newValue) => {
244
+ cpuModel.value = newValue[0].value
245
+ }
246
+ )
247
+ const passthroughHostCpu = ref<boolean>(false)
248
+ const hostModelCpu = ref<boolean>(false)
249
+
250
+ // const isShowCpuHelp = ref<boolean>(false)
251
+
252
+ const { $binary } = useNuxtApp()
253
+ watch(
254
+ [
255
+ reservation,
256
+ reservationType,
257
+ limit,
258
+ limitType,
259
+ shares,
260
+ selectedCpu,
261
+ selectedMaxCpu,
262
+ selectedCorePerSocket,
263
+ enableCpuHotAdd,
264
+ cpuModel,
265
+ passthroughHostCpu,
266
+ hostModelCpu,
267
+ ],
268
+ () => {
269
+ const reservationInMhz =
270
+ reservationType.value === 'ghz'
271
+ ? $binary.ghzToMhz(+reservation.value)
272
+ : +reservation.value
273
+ const limitInMhz =
274
+ limit.value === 'Unlimited'
275
+ ? limit.value
276
+ : limitType.value === 'ghz'
277
+ ? $binary.ghzToMhz(+limit.value)
278
+ : +limit.value
279
+ const model = passthroughHostCpu.value
280
+ ? 'host-passthrough'
281
+ : hostModelCpu.value
282
+ ? 'host-model'
283
+ : cpuModel.value
284
+
285
+ emits('send-data', {
286
+ model,
287
+ vcpus: selectedCpu.value,
288
+ max_vcpus: enableCpuHotAdd.value ? selectedMaxCpu.value : 0,
289
+ core_per_socket: selectedCorePerSocket.value,
290
+ reservation_mhz: reservationInMhz,
291
+ limit_mhz: limitInMhz,
292
+ shares: +shares.value,
293
+ hotplug: enableCpuHotAdd.value,
294
+ })
295
+ },
296
+ {
297
+ immediate: true,
298
+ }
299
+ )
300
+
301
+ // Добавляем данные для редактирования
302
+ watch(
303
+ () => props.cpu,
304
+ (newValue) => {
305
+ if (!newValue) return
306
+
307
+ enableCpuHotAdd.value = newValue.hotplug
308
+ selectedCpu.value = newValue.vcpus
309
+ selectedMaxCpu.value = newValue.hotplug ? newValue.max_vcpus : 1
310
+ selectedCorePerSocket.value = newValue.core_per_socket
311
+ reservation.value = '' + newValue.reservation_mhz
312
+ limit.value = '' + newValue.limit_mhz
313
+ shares.value = '' + newValue.shares
314
+
315
+ switch (newValue.model) {
316
+ case 'host-passthrough':
317
+ passthroughHostCpu.value = true
318
+ cpuModel.value = ''
319
+ break
320
+ case 'host-model':
321
+ hostModelCpu.value = true
322
+ cpuModel.value = ''
323
+ break
324
+ default:
325
+ cpuModel.value =
326
+ props.cpuModels.find((model) => model.value === newValue.model)
327
+ ?.value || cpuModel.value
328
+ }
329
+ },
330
+ { immediate: true }
331
+ )
332
+
333
+ const onRemoveValidationError = (): void => {
334
+ emits('remove-error-by-title', 'cpu.vcpus')
335
+ }
336
+ </script>
337
+
338
+ <style scoped lang="scss"></style>