bfg-common 1.4.742 → 1.4.744

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 (128) 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/scss/common/normalize.scss +361 -361
  6. package/components/atoms/TheIcon3.vue +50 -50
  7. package/components/atoms/modal/bySteps/BySteps.vue +253 -253
  8. package/components/atoms/stack/StackBlock.vue +185 -185
  9. package/components/atoms/table/dataGrid/DataGrid.vue +1696 -1696
  10. package/components/atoms/table/dataGrid/DataGridColumnSwitch.vue +222 -222
  11. package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +91 -91
  12. package/components/common/browse/BrowseNew.vue +237 -237
  13. package/components/common/browse/BrowseOld.vue +217 -217
  14. package/components/common/browse/blocks/contents/Files.vue +37 -37
  15. package/components/common/browse/blocks/contents/FilesOld.vue +72 -72
  16. package/components/common/browse/blocks/contents/filesNew/FilesNew.vue +96 -96
  17. package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
  18. package/components/common/context/lib/models/interfaces.ts +30 -30
  19. package/components/common/context/recursion/Recursion.vue +86 -86
  20. package/components/common/context/recursion/RecursionNew.vue +226 -211
  21. package/components/common/context/recursion/RecursionOld.vue +227 -213
  22. package/components/common/layout/theHeader/helpMenu/About.vue +82 -82
  23. package/components/common/layout/theHeader/helpMenu/aboutNew/AboutNew.vue +103 -103
  24. package/components/common/mainNavigationPanel/MainNavigationPanel.vue +150 -150
  25. package/components/common/mainNavigationPanel/MainNavigationPanelOld.vue +300 -300
  26. package/components/common/modals/confirmByInput/ConfirmByInput.vue +206 -206
  27. package/components/common/modals/unsavedChanges/UnsavedChanges.vue +56 -56
  28. package/components/common/pages/home/StatusContent.vue +49 -49
  29. package/components/common/pages/home/headline/Headline.vue +44 -44
  30. package/components/common/pages/home/headline/HeadlineNew.vue +71 -71
  31. package/components/common/pages/home/lib/models/interfaces.ts +48 -48
  32. package/components/common/pages/home/widgets/Widgets.vue +49 -49
  33. package/components/common/pages/home/widgets/WidgetsNew.vue +86 -86
  34. package/components/common/pages/home/widgets/WidgetsOld.vue +34 -34
  35. package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
  36. package/components/common/pages/home/widgets/hosts/HostsNew.vue +100 -100
  37. package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
  38. package/components/common/pages/home/widgets/services/lib/config/config.ts +108 -108
  39. package/components/common/pages/home/widgets/vms/Vms.vue +26 -26
  40. package/components/common/pages/home/widgets/vms/VmsNew.vue +101 -101
  41. package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
  42. package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
  43. package/components/common/recursionTree/RecursionTree.vue +223 -223
  44. package/components/common/select/button/ButtonDropdown.vue +108 -108
  45. package/components/common/selectLanguage/lib/config/config.ts +1 -0
  46. package/components/common/spiceConsole/Drawer.vue +370 -370
  47. package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
  48. package/components/common/split/horizontal/HorizontalNew.vue +384 -358
  49. package/components/common/split/horizontal/HorizontalOld.vue +345 -307
  50. package/components/common/split/vertical/Vertical.vue +160 -160
  51. package/components/common/vm/actions/add/Add.vue +621 -621
  52. package/components/common/vm/actions/clone/Clone.vue +639 -639
  53. package/components/common/vm/actions/clone/lib/config/steps.ts +129 -129
  54. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +271 -271
  55. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareNew.vue +271 -271
  56. package/components/common/vm/actions/common/customizeHardware/CustomizeHardwareOld.vue +174 -174
  57. package/components/common/vm/actions/common/customizeHardware/virtualHardware/browseView/BrowseView.vue +219 -219
  58. package/components/common/vm/actions/common/customizeHardware/virtualHardware/bus/BusNew.vue +117 -117
  59. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveNew.vue +161 -161
  60. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/CdDvdDriveOld.vue +165 -165
  61. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/Media.vue +25 -25
  62. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaNew.vue +70 -70
  63. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cdDvdDrive/media/MediaOld.vue +50 -50
  64. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/Cpu.vue +338 -338
  65. package/components/common/vm/actions/common/customizeHardware/virtualHardware/limit/Limit.vue +220 -220
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/mode/ModeOld.vue +56 -56
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/sharing/SharingNew.vue +44 -44
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +281 -281
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetworkNew.vue +124 -124
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/LocationOld.vue +134 -134
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/New.vue +63 -63
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/location/new/table/lib/config/config.ts +95 -95
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddress.vue +119 -119
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressNew.vue +69 -69
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/macAddress/MacAddressOld.vue +83 -83
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoNew.vue +66 -66
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIoOld.vue +62 -62
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +31 -31
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoNew.vue +84 -84
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIoOld.vue +76 -76
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/Note.vue +15 -15
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteNew.vue +42 -42
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/note/NoteOld.vue +30 -30
  84. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +41 -41
  85. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridNew.vue +81 -81
  86. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGridOld.vue +84 -84
  87. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newUsbController/NewUsbControllerNew.vue +56 -56
  88. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/Other.vue +16 -16
  89. package/components/common/vm/actions/common/customizeHardware/virtualHardware/other/OtherNew.vue +30 -30
  90. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardNew.vue +104 -104
  91. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/VideoCardOld.vue +112 -112
  92. package/components/common/vm/actions/common/customizeHardware/virtualHardware/videoCard/totalVideoMemory/TotalVideoMemoryNew.vue +54 -54
  93. package/components/common/vm/actions/common/customizeHardware/vmoptions/Vmoptions.vue +145 -145
  94. package/components/common/vm/actions/common/customizeHardware/vmoptions/VmoptionsNew.vue +102 -102
  95. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/BootOptionsNew.vue +75 -75
  96. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/delay/Delay.vue +26 -26
  97. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/Firmware.vue +57 -57
  98. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/firmware/FirmwareNew.vue +42 -42
  99. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/menu/MenuNew.vue +25 -25
  100. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +171 -171
  101. package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/OrderNew.vue +50 -50
  102. package/components/common/vm/actions/common/customizeHardware/vmoptions/generalOptions/GeneralOptionsNew.vue +141 -141
  103. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/New.vue +140 -140
  104. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/copyPaste/CopyPasteNew.vue +30 -30
  105. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/fileTransfer/FileTransferNew.vue +30 -30
  106. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/folderSharing/FolderSharingNew.vue +30 -30
  107. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/Keymap.vue +32 -32
  108. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/keymap/KeymapNew.vue +39 -39
  109. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/Password.vue +103 -103
  110. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordNew.vue +102 -102
  111. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/password/PasswordOld.vue +94 -94
  112. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirection.vue +28 -28
  113. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionNew.vue +38 -38
  114. package/components/common/vm/actions/common/customizeHardware/vmoptions/remoteConsoleOptions/usbRedirection/UsbRedirectionOld.vue +44 -44
  115. package/components/common/vm/actions/common/select/storage/Storage.vue +130 -130
  116. package/components/common/vm/actions/common/select/storage/StorageOld.vue +129 -129
  117. package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
  118. package/composables/productNameLocal.ts +30 -30
  119. package/composables/useAppVersion.ts +21 -21
  120. package/package.json +1 -1
  121. package/plugins/date.ts +233 -233
  122. package/plugins/recursion.ts +311 -311
  123. package/public/spice-console/lib/images/bitmap.js +203 -203
  124. package/public/spice-console/network/spicechannel.js +383 -383
  125. package/public/spice-console-minify/run.min.js +4 -4
  126. package/store/main/mutations.ts +7 -7
  127. package/store/main/state.ts +7 -7
  128. package/store/tasks/mappers/recentTasks.ts +64 -64
@@ -1,281 +1,281 @@
1
- <template>
2
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-new
3
- v-if="isNewView"
4
- v-model:selected-location="selectedLocation"
5
- v-model:adapter-type="adapterType"
6
- v-model:mac-address="macAddress"
7
- v-model:mac-address-type="macAddressType"
8
- v-model:new-network-invalid="newNetworkInvalid"
9
- :index="props.index"
10
- :type="props.type"
11
- :networks-table="props.networksTable"
12
- :error-validation-fields="props.errorValidationFields"
13
- :is-removable="isRemovable"
14
- :label="label"
15
- :error-text="apiError"
16
- :type-error="typeError"
17
- :location-options="locationOptions"
18
- :is-running="isRunning"
19
- :location-modal-is-show="locationModalIsShow"
20
- :state="props.state"
21
- @remove="emits('remove')"
22
- @remove-error-by-title="onRemoveValidationError"
23
- @change-location="changeLocation"
24
- @hide-location-modal="onHideLocationModal"
25
- @select-location="onSelectLocation"
26
- />
27
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-old
28
- v-else
29
- v-model:selected-location="selectedLocation"
30
- v-model:adapter-type="adapterType"
31
- v-model:mac-address="macAddress"
32
- v-model:mac-address-type="macAddressType"
33
- v-model:new-network-invalid="newNetworkInvalid"
34
- :index="props.index"
35
- :type="props.type"
36
- :networks-table="props.networksTable"
37
- :error-validation-fields="props.errorValidationFields"
38
- :is-removable="isRemovable"
39
- :label="label"
40
- :error-text="apiError"
41
- :type-error="typeError"
42
- :location-options="locationOptions"
43
- :is-running="isRunning"
44
- :location-modal-is-show="locationModalIsShow"
45
- :state="props.state"
46
- @remove="emits('remove')"
47
- @remove-error-by-title="onRemoveValidationError"
48
- @change-location="changeLocation"
49
- @hide-location-modal="onHideLocationModal"
50
- @select-location="onSelectLocation"
51
- />
52
- </template>
53
-
54
- <script setup lang="ts">
55
- import type { UI_T_Project } from '~/lib/models/types'
56
- import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
57
- import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
58
- import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
59
- import type { UI_I_SendDataNewNetwork } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
60
- import type { UI_T_NetworkType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
61
- import type {
62
- UI_I_Localization,
63
- UI_I_HTMLSelectElement,
64
- } from '~/lib/models/interfaces'
65
- import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
66
-
67
- const props = defineProps<{
68
- project: UI_T_Project
69
- index: number
70
- type: UI_T_NetworkType
71
- network: UI_I_SendDataNewNetwork
72
- networksTable: UI_I_NetworkTableItem[]
73
- errorValidationFields: UI_I_ErrorValidationField[]
74
- isEdit: boolean
75
- state?: string | number
76
- }>()
77
- const emits = defineEmits<{
78
- (event: 'send-data', value: UI_I_SendDataNewNetwork): void
79
- (event: 'invalid', value: boolean): void
80
- (event: 'remove'): void
81
- (event: 'remove-error-by-title', value: string): void
82
- (event: 'get-networks-table', value: UI_I_TablePayload): void
83
- }>()
84
-
85
- const { $store }: any = useNuxtApp()
86
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
87
-
88
- const localization = computed<UI_I_Localization>(() => useLocal())
89
-
90
- const isRunning = computed<boolean>(() => {
91
- return props.state === 2
92
- })
93
-
94
- const isRemovable = computed<boolean>(() => {
95
- return (
96
- !props.isEdit ||
97
- !isRunning.value ||
98
- (isRunning.value && adapterType.value === 'virtio')
99
- )
100
- })
101
-
102
- const label = computed<string>(() => {
103
- if (props.type === 'edit')
104
- return `${localization.value.common.networkAdapter} ${props.index + 1}`
105
-
106
- return `${localization.value.common.newNetwork} *`
107
- })
108
-
109
- // const removeNetwork = (): void => {
110
- // emits('remove')
111
- // }
112
-
113
- const selectedLocationOld = ref<string>('')
114
- const selectedLocation = ref<string>('')
115
- const locationOptions = ref<UI_I_OptionItem[]>([])
116
-
117
- const getNetworks = (): void => {
118
- // if (props.networksTable.length) return // Из-за этого кода был баг. Открыть визард вм -> создать сеть -> открыть визард вм и в списке сетей нету новой сети
119
-
120
- const payload: UI_I_TablePayload = {
121
- pagination: {
122
- page: 1,
123
- pageSize: 100,
124
- },
125
- schema: 'full',
126
- type: 'network',
127
- sortBy: null,
128
- }
129
- emits('get-networks-table', payload)
130
- }
131
- getNetworks()
132
-
133
- const newNetworkInvalid = ref<boolean>(false)
134
- watch(
135
- newNetworkInvalid,
136
- (newValue) => {
137
- emits('invalid', newValue)
138
- },
139
- { immediate: true }
140
- )
141
-
142
- const valueProp: 'net_bridge' | 'id' =
143
- props.project === 'procurator' ? 'net_bridge' : 'id'
144
- watch(
145
- () => props.networksTable,
146
- (newValue) => {
147
- const isExistValue = newValue.some(
148
- (network) => network[valueProp] === selectedLocation.value
149
- )
150
- if (!newValue.length) {
151
- locationOptions.value = [
152
- { text: localization.value.vmWizard.noAvailableNetworks, value: '' },
153
- ]
154
- newNetworkInvalid.value = true
155
- return
156
- }
157
- newNetworkInvalid.value = false
158
-
159
- if (props.type === 'edit' || isExistValue) return
160
-
161
- selectedLocationOld.value = newValue[0][valueProp]
162
- selectedLocation.value = newValue[0][valueProp]
163
-
164
- locationOptions.value = [
165
- { text: newValue[0].name, value: newValue[0][valueProp] },
166
- { text: `${localization.value.common.browse}...`, value: '' },
167
- ]
168
- },
169
- { immediate: true }
170
- )
171
-
172
- const locationModalIsShow = ref<boolean>(false)
173
- const onHideLocationModal = (): void => {
174
- locationModalIsShow.value = false
175
- selectedLocation.value = selectedLocationOld.value
176
- }
177
- const changeLocation = (event: UI_I_HTMLSelectElement): void => {
178
- const value = event.target.value
179
- if (value === '') {
180
- locationModalIsShow.value = true
181
- return
182
- }
183
-
184
- selectedLocationOld.value = value
185
- selectedLocation.value = value
186
- // netBridge.value = value
187
- }
188
- const onSelectLocation = (network: UI_I_NetworkTableItem): void => {
189
- locationModalIsShow.value = false
190
-
191
- selectedLocationOld.value = network[valueProp]
192
- selectedLocation.value = network[valueProp]
193
-
194
- const hasNetwork = locationOptions.value.some(
195
- (option) => option.value === network[valueProp]
196
- )
197
- if (hasNetwork) {
198
- return
199
- }
200
-
201
- locationOptions.value = [
202
- ...locationOptions.value.slice(0, -1),
203
- { text: network.name, value: network[valueProp] },
204
- locationOptions.value[locationOptions.value.length - 1],
205
- ]
206
- }
207
-
208
- const adapterType = ref<string>('rtl8139')
209
-
210
- const target = ref<string>('')
211
-
212
- const macAddress = ref<string>('')
213
- const macAddressType = ref<string>('automatic')
214
-
215
- watch(
216
- [selectedLocation, adapterType, macAddress, macAddressType, locationOptions],
217
- () => {
218
- const option = locationOptions.value.find(
219
- (option) => option.value === selectedLocation.value
220
- )
221
- if (!option) return
222
-
223
- emits('send-data', {
224
- network: option.text,
225
- net_bridge: props.project === 'procurator' ? option.value : '',
226
- target: target.value,
227
- model: adapterType.value,
228
- mac: macAddress.value,
229
- boot_order: props.network.boot_order,
230
- })
231
- },
232
- { immediate: true }
233
- )
234
-
235
- // Добавляем данные для редактирования
236
- watch(
237
- () => props.network,
238
- (newValue) => {
239
- if (props.type !== 'edit') return
240
-
241
- locationOptions.value = [
242
- { text: newValue.network, value: newValue[valueProp] },
243
- { text: `${localization.value.common.browse}...`, value: '' },
244
- ]
245
- selectedLocation.value = newValue[valueProp]
246
-
247
- adapterType.value = newValue.model
248
- macAddress.value = newValue.mac
249
- target.value = newValue.target
250
- },
251
- { immediate: true }
252
- )
253
-
254
- watch(
255
- isRunning,
256
- (newValue) => {
257
- if (newValue && props.type === 'new') {
258
- adapterType.value = 'virtio'
259
- }
260
- },
261
- { immediate: true }
262
- )
263
-
264
- const typeError = computed<string>(
265
- () => `network_devices[${props.index}].network`
266
- )
267
-
268
- const apiError = computed<string>(() => {
269
- return (
270
- props.errorValidationFields?.find(
271
- (message) => message.field === typeError.value
272
- )?.error_message || ''
273
- )
274
- })
275
-
276
- const onRemoveValidationError = (): void => {
277
- emits('remove-error-by-title', typeError.value)
278
- }
279
- </script>
280
-
281
- <style scoped lang="scss"></style>
1
+ <template>
2
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-new
3
+ v-if="isNewView"
4
+ v-model:selected-location="selectedLocation"
5
+ v-model:adapter-type="adapterType"
6
+ v-model:mac-address="macAddress"
7
+ v-model:mac-address-type="macAddressType"
8
+ v-model:new-network-invalid="newNetworkInvalid"
9
+ :index="props.index"
10
+ :type="props.type"
11
+ :networks-table="props.networksTable"
12
+ :error-validation-fields="props.errorValidationFields"
13
+ :is-removable="isRemovable"
14
+ :label="label"
15
+ :error-text="apiError"
16
+ :type-error="typeError"
17
+ :location-options="locationOptions"
18
+ :is-running="isRunning"
19
+ :location-modal-is-show="locationModalIsShow"
20
+ :state="props.state"
21
+ @remove="emits('remove')"
22
+ @remove-error-by-title="onRemoveValidationError"
23
+ @change-location="changeLocation"
24
+ @hide-location-modal="onHideLocationModal"
25
+ @select-location="onSelectLocation"
26
+ />
27
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-old
28
+ v-else
29
+ v-model:selected-location="selectedLocation"
30
+ v-model:adapter-type="adapterType"
31
+ v-model:mac-address="macAddress"
32
+ v-model:mac-address-type="macAddressType"
33
+ v-model:new-network-invalid="newNetworkInvalid"
34
+ :index="props.index"
35
+ :type="props.type"
36
+ :networks-table="props.networksTable"
37
+ :error-validation-fields="props.errorValidationFields"
38
+ :is-removable="isRemovable"
39
+ :label="label"
40
+ :error-text="apiError"
41
+ :type-error="typeError"
42
+ :location-options="locationOptions"
43
+ :is-running="isRunning"
44
+ :location-modal-is-show="locationModalIsShow"
45
+ :state="props.state"
46
+ @remove="emits('remove')"
47
+ @remove-error-by-title="onRemoveValidationError"
48
+ @change-location="changeLocation"
49
+ @hide-location-modal="onHideLocationModal"
50
+ @select-location="onSelectLocation"
51
+ />
52
+ </template>
53
+
54
+ <script setup lang="ts">
55
+ import type { UI_T_Project } from '~/lib/models/types'
56
+ import type { UI_I_TablePayload } from '~/lib/models/table/interfaces'
57
+ import type { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
58
+ import type { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
59
+ import type { UI_I_SendDataNewNetwork } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
60
+ import type { UI_T_NetworkType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
61
+ import type {
62
+ UI_I_Localization,
63
+ UI_I_HTMLSelectElement,
64
+ } from '~/lib/models/interfaces'
65
+ import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
66
+
67
+ const props = defineProps<{
68
+ project: UI_T_Project
69
+ index: number
70
+ type: UI_T_NetworkType
71
+ network: UI_I_SendDataNewNetwork
72
+ networksTable: UI_I_NetworkTableItem[]
73
+ errorValidationFields: UI_I_ErrorValidationField[]
74
+ isEdit: boolean
75
+ state?: string | number
76
+ }>()
77
+ const emits = defineEmits<{
78
+ (event: 'send-data', value: UI_I_SendDataNewNetwork): void
79
+ (event: 'invalid', value: boolean): void
80
+ (event: 'remove'): void
81
+ (event: 'remove-error-by-title', value: string): void
82
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
83
+ }>()
84
+
85
+ const { $store }: any = useNuxtApp()
86
+ const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
87
+
88
+ const localization = computed<UI_I_Localization>(() => useLocal())
89
+
90
+ const isRunning = computed<boolean>(() => {
91
+ return props.state === 2
92
+ })
93
+
94
+ const isRemovable = computed<boolean>(() => {
95
+ return (
96
+ !props.isEdit ||
97
+ !isRunning.value ||
98
+ (isRunning.value && adapterType.value === 'virtio')
99
+ )
100
+ })
101
+
102
+ const label = computed<string>(() => {
103
+ if (props.type === 'edit')
104
+ return `${localization.value.common.networkAdapter} ${props.index + 1}`
105
+
106
+ return `${localization.value.common.newNetwork} *`
107
+ })
108
+
109
+ // const removeNetwork = (): void => {
110
+ // emits('remove')
111
+ // }
112
+
113
+ const selectedLocationOld = ref<string>('')
114
+ const selectedLocation = ref<string>('')
115
+ const locationOptions = ref<UI_I_OptionItem[]>([])
116
+
117
+ const getNetworks = (): void => {
118
+ // if (props.networksTable.length) return // Из-за этого кода был баг. Открыть визард вм -> создать сеть -> открыть визард вм и в списке сетей нету новой сети
119
+
120
+ const payload: UI_I_TablePayload = {
121
+ pagination: {
122
+ page: 1,
123
+ pageSize: 100,
124
+ },
125
+ schema: 'full',
126
+ type: 'network',
127
+ sortBy: null,
128
+ }
129
+ emits('get-networks-table', payload)
130
+ }
131
+ getNetworks()
132
+
133
+ const newNetworkInvalid = ref<boolean>(false)
134
+ watch(
135
+ newNetworkInvalid,
136
+ (newValue) => {
137
+ emits('invalid', newValue)
138
+ },
139
+ { immediate: true }
140
+ )
141
+
142
+ const valueProp: 'net_bridge' | 'id' =
143
+ props.project === 'procurator' ? 'net_bridge' : 'id'
144
+ watch(
145
+ () => props.networksTable,
146
+ (newValue) => {
147
+ const isExistValue = newValue.some(
148
+ (network) => network[valueProp] === selectedLocation.value
149
+ )
150
+ if (!newValue.length) {
151
+ locationOptions.value = [
152
+ { text: localization.value.vmWizard.noAvailableNetworks, value: '' },
153
+ ]
154
+ newNetworkInvalid.value = true
155
+ return
156
+ }
157
+ newNetworkInvalid.value = false
158
+
159
+ if (props.type === 'edit' || isExistValue) return
160
+
161
+ selectedLocationOld.value = newValue[0][valueProp]
162
+ selectedLocation.value = newValue[0][valueProp]
163
+
164
+ locationOptions.value = [
165
+ { text: newValue[0].name, value: newValue[0][valueProp] },
166
+ { text: `${localization.value.common.browse}...`, value: '' },
167
+ ]
168
+ },
169
+ { immediate: true }
170
+ )
171
+
172
+ const locationModalIsShow = ref<boolean>(false)
173
+ const onHideLocationModal = (): void => {
174
+ locationModalIsShow.value = false
175
+ selectedLocation.value = selectedLocationOld.value
176
+ }
177
+ const changeLocation = (event: UI_I_HTMLSelectElement): void => {
178
+ const value = event.target.value
179
+ if (value === '') {
180
+ locationModalIsShow.value = true
181
+ return
182
+ }
183
+
184
+ selectedLocationOld.value = value
185
+ selectedLocation.value = value
186
+ // netBridge.value = value
187
+ }
188
+ const onSelectLocation = (network: UI_I_NetworkTableItem): void => {
189
+ locationModalIsShow.value = false
190
+
191
+ selectedLocationOld.value = network[valueProp]
192
+ selectedLocation.value = network[valueProp]
193
+
194
+ const hasNetwork = locationOptions.value.some(
195
+ (option) => option.value === network[valueProp]
196
+ )
197
+ if (hasNetwork) {
198
+ return
199
+ }
200
+
201
+ locationOptions.value = [
202
+ ...locationOptions.value.slice(0, -1),
203
+ { text: network.name, value: network[valueProp] },
204
+ locationOptions.value[locationOptions.value.length - 1],
205
+ ]
206
+ }
207
+
208
+ const adapterType = ref<string>('rtl8139')
209
+
210
+ const target = ref<string>('')
211
+
212
+ const macAddress = ref<string>('')
213
+ const macAddressType = ref<string>('automatic')
214
+
215
+ watch(
216
+ [selectedLocation, adapterType, macAddress, macAddressType, locationOptions],
217
+ () => {
218
+ const option = locationOptions.value.find(
219
+ (option) => option.value === selectedLocation.value
220
+ )
221
+ if (!option) return
222
+
223
+ emits('send-data', {
224
+ network: option.text,
225
+ net_bridge: props.project === 'procurator' ? option.value : '',
226
+ target: target.value,
227
+ model: adapterType.value,
228
+ mac: macAddress.value,
229
+ boot_order: props.network.boot_order,
230
+ })
231
+ },
232
+ { immediate: true }
233
+ )
234
+
235
+ // Добавляем данные для редактирования
236
+ watch(
237
+ () => props.network,
238
+ (newValue) => {
239
+ if (props.type !== 'edit') return
240
+
241
+ locationOptions.value = [
242
+ { text: newValue.network, value: newValue[valueProp] },
243
+ { text: `${localization.value.common.browse}...`, value: '' },
244
+ ]
245
+ selectedLocation.value = newValue[valueProp]
246
+
247
+ adapterType.value = newValue.model
248
+ macAddress.value = newValue.mac
249
+ target.value = newValue.target
250
+ },
251
+ { immediate: true }
252
+ )
253
+
254
+ watch(
255
+ isRunning,
256
+ (newValue) => {
257
+ if (newValue && props.type === 'new') {
258
+ adapterType.value = 'virtio'
259
+ }
260
+ },
261
+ { immediate: true }
262
+ )
263
+
264
+ const typeError = computed<string>(
265
+ () => `network_devices[${props.index}].network`
266
+ )
267
+
268
+ const apiError = computed<string>(() => {
269
+ return (
270
+ props.errorValidationFields?.find(
271
+ (message) => message.field === typeError.value
272
+ )?.error_message || ''
273
+ )
274
+ })
275
+
276
+ const onRemoveValidationError = (): void => {
277
+ emits('remove-error-by-title', typeError.value)
278
+ }
279
+ </script>
280
+
281
+ <style scoped lang="scss"></style>