bfg-common 1.4.719 → 1.4.720

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 (134) hide show
  1. package/assets/localization/local_be.json +2 -2
  2. package/assets/localization/local_en.json +2 -2
  3. package/assets/localization/local_hy.json +2 -2
  4. package/assets/localization/local_kk.json +2 -2
  5. package/assets/localization/local_ru.json +2 -2
  6. package/assets/localization/local_zh.json +2 -2
  7. package/assets/scss/clarity/local_ar.json +2914 -0
  8. package/assets/scss/common/normalize.scss +361 -355
  9. package/components/atoms/TheIcon3.vue +50 -50
  10. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  11. package/components/atoms/stack/StackBlock.vue +185 -185
  12. package/components/atoms/table/dataGrid/DataGrid.vue +1696 -1696
  13. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  14. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  15. package/components/common/browse/BrowseNew.vue +237 -237
  16. package/components/common/browse/BrowseOld.vue +217 -217
  17. package/components/common/browse/blocks/contents/Files.vue +37 -37
  18. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  19. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  20. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  21. package/components/common/context/lib/models/interfaces.ts +30 -30
  22. package/components/common/context/recursion/Recursion.vue +86 -86
  23. package/components/common/context/recursion/RecursionOld.vue +213 -213
  24. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  25. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  26. package/components/common/layout/theHeader/lib/models/enums.ts +1 -0
  27. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +5 -2
  28. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +150 -150
  29. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +300 -284
  30. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  31. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  32. package/components/common/monitor/overview/filters/Filters.vue +232 -235
  33. package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModal.vue +240 -242
  34. package/components/common/monitor/overview/filters/customIntervalModal/lib/config/dateChecker.ts +52 -62
  35. package/components/common/pages/home/StatusContent.vue +49 -49
  36. package/components/common/pages/home/headline/Headline.vue +44 -44
  37. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  38. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  39. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  40. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  41. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  42. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  43. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  44. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  45. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  46. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  47. package/components/common/pages/home/widgets/vms/VmsNew.vue +101 -101
  48. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  49. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  50. package/components/common/recursionTree/RecursionTree.vue +223 -212
  51. package/components/common/select/button/ButtonDropdown.vue +108 -108
  52. package/components/common/selectLanguage/lib/config/config.ts +5 -0
  53. package/components/common/spiceConsole/Drawer.vue +370 -370
  54. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  55. package/components/common/split/vertical/Vertical.vue +160 -160
  56. package/components/common/vm/actions/add/Add.vue +616 -616
  57. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  58. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +267 -267
  59. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +269 -269
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -55
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -42
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/config/dropdownItems.ts +147 -147
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceNew.vue +85 -85
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDeviceOld.vue +91 -91
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +35 -35
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +48 -48
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +30 -30
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/typeSelection/TypeSelectionNew.vue +46 -46
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  93. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  94. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  115. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  116. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  117. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  118. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  119. package/components/common/vm/actions/editSettings/EditSettings.vue +232 -232
  120. package/components/common/vm/actions/editSettings/EditSettingsOld.vue +183 -183
  121. package/components/common/vm/actions/editSettings/new/New.vue +177 -177
  122. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  123. package/composables/productNameLocal.ts +30 -30
  124. package/composables/useAppVersion.ts +21 -21
  125. package/composables/useLocal.ts +5 -0
  126. package/layouts/auth.vue +1 -0
  127. package/package.json +1 -1
  128. package/plugins/date.ts +233 -233
  129. package/plugins/recursion.ts +311 -311
  130. package/public/spice-console/lib/images/bitmap.js +203 -203
  131. package/public/spice-console/network/spicechannel.js +383 -383
  132. package/store/main/mutations.ts +7 -7
  133. package/store/main/state.ts +7 -7
  134. 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>