bfg-common 1.4.736 → 1.4.737

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