bfg-common 1.3.355 → 1.3.357

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 (49) hide show
  1. package/components/atoms/TheIcon2.vue +173 -0
  2. package/components/atoms/collapse/CollapseNavItem.vue +8 -3
  3. package/components/atoms/collapse/lib/models/interfaces.ts +1 -0
  4. package/components/atoms/switch/Switch.vue +111 -111
  5. package/components/atoms/table/compact/Compact.vue +526 -526
  6. package/components/common/adapterManager/ui/table/Header.vue +93 -93
  7. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  8. package/components/common/context/Context.vue +99 -99
  9. package/components/common/lib/config/states.ts +126 -126
  10. package/components/common/resource/progressBlock/ProgressBlock.vue +142 -142
  11. package/components/common/vm/actions/add/Add.vue +602 -602
  12. package/components/common/vm/actions/clone/Clone.vue +518 -518
  13. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +273 -273
  14. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +697 -697
  15. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +299 -299
  16. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +165 -165
  17. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +164 -164
  18. package/components/common/vm/actions/common/select/name/Name.vue +235 -235
  19. package/components/common/vm/actions/common/select/storage/Storage.vue +198 -198
  20. package/components/common/vm/actions/editSettings/EditSettings.vue +313 -313
  21. package/components/common/weekSelect/lib/config/options.ts +10 -10
  22. package/components/common/wizards/datastore/add/Add.vue +436 -436
  23. package/components/common/wizards/datastore/add/lib/config/stepItems.ts +191 -191
  24. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +38 -38
  25. package/components/common/wizards/datastore/add/lib/utils.ts +70 -70
  26. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +160 -160
  27. package/components/common/wizards/datastore/add/nfs/Nfs.vue +112 -112
  28. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +104 -104
  29. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -62
  30. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -53
  31. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +86 -86
  32. package/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails.ts +184 -184
  33. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +459 -459
  34. package/components/common/wizards/datastore/add/types/Types.vue +80 -80
  35. package/components/common/wizards/datastore/add/types/lib/config/typeOptions.ts +49 -49
  36. package/composables/useAppVersion.ts +21 -21
  37. package/composables/useEnvLanguage.ts +20 -20
  38. package/lib/utils/sendTask.ts +72 -72
  39. package/minify.js +146 -146
  40. package/package.json +1 -1
  41. package/public/spice-console/application/codec.js +257 -257
  42. package/public/spice-console/lib/rasterEngine.js +907 -907
  43. package/public/spice-console/network/spicechannel.js +369 -369
  44. package/store/main/lib/interfaces.ts +9 -9
  45. package/store/tasks/actions.ts +133 -133
  46. package/store/tasks/getters.ts +25 -25
  47. package/store/tasks/lib/models/interfaces.ts +18 -18
  48. package/store/tasks/mutations.ts +58 -58
  49. package/store/tasks/state.ts +16 -16
@@ -1,299 +1,299 @@
1
- <template>
2
- <div class="hardware-network">
3
- <atoms-stack-block
4
- :has-children="true"
5
- :removable="isRemovable"
6
- @remove="removeNetwork"
7
- >
8
- <template #stackBlockKey>
9
- <div class="vm-wizard-toggle-block-network flex-align-center">
10
- <span>{{ label }}</span>
11
- <atoms-the-icon
12
- v-show="newNetworkInvalid"
13
- width="24px"
14
- height="24px"
15
- class="is-error tooltip-trigger"
16
- name="info"
17
- />
18
- </div>
19
- </template>
20
- <template #stackBlockContent>
21
- <div class="flex-align-center flex-space-between">
22
- <atoms-tooltip-error
23
- :has-error="!!apiError"
24
- :selector="`.vm-wizard-network-field-${props.index}`"
25
- @remove="onRemoveValidationError"
26
- >
27
- <template #elem>
28
- <div class="select">
29
- <select
30
- :id="`vm-wizard-network-field-${props.index}`"
31
- v-model="selectedLocation"
32
- :data-id="`vm-wizard-network-field-${props.index}`"
33
- :class="`vm-wizard-network-field-${props.index} input-text-color`"
34
- :disabled="props.type === 'edit' && state !== 1"
35
- @click.stop
36
- @change="changeLocation"
37
- >
38
- <option
39
- v-for="(item, key) in locationOptions"
40
- :key="key"
41
- :value="item.value"
42
- >
43
- {{ item.text }}
44
- </option>
45
- </select>
46
- </div>
47
- </template>
48
- <template #content>{{ apiError }}</template>
49
- </atoms-tooltip-error>
50
- </div>
51
- </template>
52
- <template #stackChildren>
53
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-adapter-type
54
- v-model:adapter-type="adapterType"
55
- :index="props.index"
56
- :disabled="props.type === 'edit' || isRunning"
57
- :error-validation-fields="props.errorValidationFields"
58
- @remove-error-by-title="emits('remove-error-by-title', $event)"
59
- />
60
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-mac-address
61
- v-model:mac-address="macAddress"
62
- v-model:mac-address-type="macAddressType"
63
- :index="props.index"
64
- :disabled="props.type === 'edit'"
65
- :error-validation-fields="props.errorValidationFields"
66
- @invalid="newNetworkInvalid = $event"
67
- @remove-error-by-title="emits('remove-error-by-title', $event)"
68
- />
69
- </template>
70
- </atoms-stack-block>
71
-
72
- <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-location
73
- :location-modal-is-show="locationModalIsShow"
74
- :networks-table="networksTable"
75
- @hide="onHideLocationModal"
76
- @select="onSelectLocation"
77
- />
78
- </div>
79
- </template>
80
-
81
- <script setup lang="ts">
82
- import { UI_T_Project } from '~/lib/models/types'
83
- import { UI_I_TablePayload } from '~/lib/models/table/interfaces'
84
- import { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
85
- import { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
86
- import { UI_I_SendDataNewNetwork } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
87
- import { UI_T_NetworkType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
88
- import {
89
- UI_I_Localization,
90
- UI_I_HTMLSelectElement,
91
- } from '~/lib/models/interfaces'
92
- import { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
93
-
94
- const props = defineProps<{
95
- index: number
96
- type: UI_T_NetworkType
97
- network: UI_I_SendDataNewNetwork
98
- networksTable: UI_I_NetworkTableItem[]
99
- errorValidationFields: UI_I_ErrorValidationField[]
100
- isEdit: boolean
101
- state?: string | number
102
- project: UI_T_Project
103
- }>()
104
-
105
- const emits = defineEmits<{
106
- (event: 'send-data', value: UI_I_SendDataNewNetwork): void
107
- (event: 'invalid', value: boolean): void
108
- (event: 'remove'): void
109
- (event: 'remove-error-by-title', value: string): void
110
- (event: 'get-networks-table', value: UI_I_TablePayload): void
111
- }>()
112
-
113
- const localization = computed<UI_I_Localization>(() => useLocal())
114
-
115
- const isRunning = computed<boolean>(() => {
116
- return props.state === 2
117
- })
118
-
119
- const isRemovable = computed<boolean>(() => {
120
- return (
121
- !props.isEdit ||
122
- !isRunning.value ||
123
- (isRunning.value && adapterType.value === 'virtio')
124
- )
125
- })
126
-
127
- const label = computed<string>(() => {
128
- if (props.type === 'edit')
129
- return `${localization.value.networkAdapter} ${props.index + 1}`
130
-
131
- return `${localization.value.newNetwork} *`
132
- })
133
-
134
- const removeNetwork = (): void => {
135
- emits('remove')
136
- }
137
-
138
- const selectedLocationOld = ref<string>('')
139
- const selectedLocation = ref<string>('')
140
- const locationOptions = ref<UI_I_OptionItem[]>([])
141
-
142
- const getNetworks = (): void => {
143
- // if (props.networksTable.length) return // Из-за этого кода был баг. Открыть визард вм -> создать сеть -> открыть визард вм и в списке сетей нету новой сети
144
-
145
- const payload: UI_I_TablePayload = {
146
- pagination: {
147
- page: 1,
148
- pageSize: 100,
149
- },
150
- schema: 'full',
151
- type: 'network',
152
- sortBy: null,
153
- }
154
- emits('get-networks-table', payload)
155
- }
156
- getNetworks()
157
-
158
- const valueProp: 'net_bridge' | 'id' = props.project === 'procurator' ? 'net_bridge' : 'id'
159
- watch(
160
- () => props.networksTable,
161
- (newValue) => {
162
- const isExistValue = newValue.some(
163
- (network) => network[valueProp] === selectedLocation.value
164
- )
165
- if (!newValue.length || props.type === 'edit' || isExistValue) return
166
-
167
- selectedLocationOld.value = newValue[0][valueProp]
168
- selectedLocation.value = newValue[0][valueProp]
169
-
170
- locationOptions.value = [
171
- { text: newValue[0].name, value: newValue[0][valueProp] },
172
- { text: `${localization.value.browse}...`, value: '' },
173
- ]
174
- },
175
- { immediate: true }
176
- )
177
-
178
- const locationModalIsShow = ref<boolean>(false)
179
- const onHideLocationModal = (): void => {
180
- locationModalIsShow.value = false
181
- selectedLocation.value = selectedLocationOld.value
182
- }
183
- const changeLocation = (event: UI_I_HTMLSelectElement): void => {
184
- const value = event.target.value
185
- if (value === '') {
186
- locationModalIsShow.value = true
187
- return
188
- }
189
-
190
- selectedLocationOld.value = value
191
- selectedLocation.value = value
192
- // netBridge.value = value
193
- }
194
- const onSelectLocation = (network: UI_I_NetworkTableItem): void => {
195
- locationModalIsShow.value = false
196
-
197
- selectedLocationOld.value = network[valueProp]
198
- selectedLocation.value = network[valueProp]
199
-
200
- const hasNetwork = locationOptions.value.some(
201
- (option) => option.value === network[valueProp]
202
- )
203
- if (hasNetwork) {
204
- return
205
- }
206
-
207
- locationOptions.value = [
208
- ...locationOptions.value.slice(0, -1),
209
- { text: network.name, value: network[valueProp] },
210
- locationOptions.value[locationOptions.value.length - 1],
211
- ]
212
- }
213
-
214
- const adapterType = ref<string>('rtl8139')
215
-
216
- const target = ref<string>('')
217
-
218
- const macAddress = ref<string>('')
219
- const macAddressType = ref<string>('automatic')
220
- const newNetworkInvalid = ref<boolean>(false)
221
- watch(
222
- newNetworkInvalid,
223
- (newValue) => {
224
- emits('invalid', newValue)
225
- },
226
- { immediate: true }
227
- )
228
-
229
- watch(
230
- [selectedLocation, adapterType, macAddress, macAddressType, locationOptions],
231
- () => {
232
- const option = locationOptions.value.find(
233
- (option) => option.value === selectedLocation.value
234
- )
235
- if (!option) return
236
-
237
- emits('send-data', {
238
- network: option.text,
239
- net_bridge: props.project === 'procurator' ? option.value : '',
240
- target: target.value,
241
- model: adapterType.value,
242
- mac: macAddress.value,
243
- boot_order: props.network.boot_order,
244
- })
245
- },
246
- { immediate: true }
247
- )
248
-
249
- // Добавляем данные для редактирования
250
- watch(
251
- () => props.network,
252
- (newValue) => {
253
- if (props.type !== 'edit') return
254
-
255
- locationOptions.value = [
256
- { text: newValue.network, value: newValue[valueProp] },
257
- { text: `${localization.value.browse}...`, value: '' },
258
- ]
259
- selectedLocation.value = newValue[valueProp]
260
-
261
- adapterType.value = newValue.model
262
- macAddress.value = newValue.mac
263
- target.value = newValue.target
264
- },
265
- { immediate: true }
266
- )
267
-
268
- watch(
269
- isRunning,
270
- (newValue) => {
271
- if (newValue && props.type === 'new') {
272
- adapterType.value = 'virtio'
273
- }
274
- },
275
- { immediate: true }
276
- )
277
-
278
- const typeError = computed<string>(
279
- () => `network_devices[${props.index}].network`
280
- )
281
-
282
- const apiError = computed<string>(() => {
283
- return (
284
- props.errorValidationFields?.find(
285
- (message) => message.field === typeError.value
286
- )?.error_message || ''
287
- )
288
- })
289
-
290
- const onRemoveValidationError = (): void => {
291
- emits('remove-error-by-title', typeError.value)
292
- }
293
- </script>
294
-
295
- <style scoped lang="scss">
296
- #network-connect {
297
- margin-right: 4px;
298
- }
299
- </style>
1
+ <template>
2
+ <div class="hardware-network">
3
+ <atoms-stack-block
4
+ :has-children="true"
5
+ :removable="isRemovable"
6
+ @remove="removeNetwork"
7
+ >
8
+ <template #stackBlockKey>
9
+ <div class="vm-wizard-toggle-block-network flex-align-center">
10
+ <span>{{ label }}</span>
11
+ <atoms-the-icon
12
+ v-show="newNetworkInvalid"
13
+ width="24px"
14
+ height="24px"
15
+ class="is-error tooltip-trigger"
16
+ name="info"
17
+ />
18
+ </div>
19
+ </template>
20
+ <template #stackBlockContent>
21
+ <div class="flex-align-center flex-space-between">
22
+ <atoms-tooltip-error
23
+ :has-error="!!apiError"
24
+ :selector="`.vm-wizard-network-field-${props.index}`"
25
+ @remove="onRemoveValidationError"
26
+ >
27
+ <template #elem>
28
+ <div class="select">
29
+ <select
30
+ :id="`vm-wizard-network-field-${props.index}`"
31
+ v-model="selectedLocation"
32
+ :data-id="`vm-wizard-network-field-${props.index}`"
33
+ :class="`vm-wizard-network-field-${props.index} input-text-color`"
34
+ :disabled="props.type === 'edit' && state !== 1"
35
+ @click.stop
36
+ @change="changeLocation"
37
+ >
38
+ <option
39
+ v-for="(item, key) in locationOptions"
40
+ :key="key"
41
+ :value="item.value"
42
+ >
43
+ {{ item.text }}
44
+ </option>
45
+ </select>
46
+ </div>
47
+ </template>
48
+ <template #content>{{ apiError }}</template>
49
+ </atoms-tooltip-error>
50
+ </div>
51
+ </template>
52
+ <template #stackChildren>
53
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-adapter-type
54
+ v-model:adapter-type="adapterType"
55
+ :index="props.index"
56
+ :disabled="props.type === 'edit' || isRunning"
57
+ :error-validation-fields="props.errorValidationFields"
58
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
59
+ />
60
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-mac-address
61
+ v-model:mac-address="macAddress"
62
+ v-model:mac-address-type="macAddressType"
63
+ :index="props.index"
64
+ :disabled="props.type === 'edit'"
65
+ :error-validation-fields="props.errorValidationFields"
66
+ @invalid="newNetworkInvalid = $event"
67
+ @remove-error-by-title="emits('remove-error-by-title', $event)"
68
+ />
69
+ </template>
70
+ </atoms-stack-block>
71
+
72
+ <common-vm-actions-common-customize-hardware-virtual-hardware-new-network-location
73
+ :location-modal-is-show="locationModalIsShow"
74
+ :networks-table="networksTable"
75
+ @hide="onHideLocationModal"
76
+ @select="onSelectLocation"
77
+ />
78
+ </div>
79
+ </template>
80
+
81
+ <script setup lang="ts">
82
+ import { UI_T_Project } from '~/lib/models/types'
83
+ import { UI_I_TablePayload } from '~/lib/models/table/interfaces'
84
+ import { UI_I_NetworkTableItem } from '~/lib/models/store/network/interfaces'
85
+ import { UI_I_ErrorValidationField } from '~/lib/models/store/interfaces'
86
+ import { UI_I_SendDataNewNetwork } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces'
87
+ import { UI_T_NetworkType } from '~/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/types'
88
+ import {
89
+ UI_I_Localization,
90
+ UI_I_HTMLSelectElement,
91
+ } from '~/lib/models/interfaces'
92
+ import { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
93
+
94
+ const props = defineProps<{
95
+ index: number
96
+ type: UI_T_NetworkType
97
+ network: UI_I_SendDataNewNetwork
98
+ networksTable: UI_I_NetworkTableItem[]
99
+ errorValidationFields: UI_I_ErrorValidationField[]
100
+ isEdit: boolean
101
+ state?: string | number
102
+ project: UI_T_Project
103
+ }>()
104
+
105
+ const emits = defineEmits<{
106
+ (event: 'send-data', value: UI_I_SendDataNewNetwork): void
107
+ (event: 'invalid', value: boolean): void
108
+ (event: 'remove'): void
109
+ (event: 'remove-error-by-title', value: string): void
110
+ (event: 'get-networks-table', value: UI_I_TablePayload): void
111
+ }>()
112
+
113
+ const localization = computed<UI_I_Localization>(() => useLocal())
114
+
115
+ const isRunning = computed<boolean>(() => {
116
+ return props.state === 2
117
+ })
118
+
119
+ const isRemovable = computed<boolean>(() => {
120
+ return (
121
+ !props.isEdit ||
122
+ !isRunning.value ||
123
+ (isRunning.value && adapterType.value === 'virtio')
124
+ )
125
+ })
126
+
127
+ const label = computed<string>(() => {
128
+ if (props.type === 'edit')
129
+ return `${localization.value.networkAdapter} ${props.index + 1}`
130
+
131
+ return `${localization.value.newNetwork} *`
132
+ })
133
+
134
+ const removeNetwork = (): void => {
135
+ emits('remove')
136
+ }
137
+
138
+ const selectedLocationOld = ref<string>('')
139
+ const selectedLocation = ref<string>('')
140
+ const locationOptions = ref<UI_I_OptionItem[]>([])
141
+
142
+ const getNetworks = (): void => {
143
+ // if (props.networksTable.length) return // Из-за этого кода был баг. Открыть визард вм -> создать сеть -> открыть визард вм и в списке сетей нету новой сети
144
+
145
+ const payload: UI_I_TablePayload = {
146
+ pagination: {
147
+ page: 1,
148
+ pageSize: 100,
149
+ },
150
+ schema: 'full',
151
+ type: 'network',
152
+ sortBy: null,
153
+ }
154
+ emits('get-networks-table', payload)
155
+ }
156
+ getNetworks()
157
+
158
+ const valueProp: 'net_bridge' | 'id' = props.project === 'procurator' ? 'net_bridge' : 'id'
159
+ watch(
160
+ () => props.networksTable,
161
+ (newValue) => {
162
+ const isExistValue = newValue.some(
163
+ (network) => network[valueProp] === selectedLocation.value
164
+ )
165
+ if (!newValue.length || props.type === 'edit' || isExistValue) return
166
+
167
+ selectedLocationOld.value = newValue[0][valueProp]
168
+ selectedLocation.value = newValue[0][valueProp]
169
+
170
+ locationOptions.value = [
171
+ { text: newValue[0].name, value: newValue[0][valueProp] },
172
+ { text: `${localization.value.browse}...`, value: '' },
173
+ ]
174
+ },
175
+ { immediate: true }
176
+ )
177
+
178
+ const locationModalIsShow = ref<boolean>(false)
179
+ const onHideLocationModal = (): void => {
180
+ locationModalIsShow.value = false
181
+ selectedLocation.value = selectedLocationOld.value
182
+ }
183
+ const changeLocation = (event: UI_I_HTMLSelectElement): void => {
184
+ const value = event.target.value
185
+ if (value === '') {
186
+ locationModalIsShow.value = true
187
+ return
188
+ }
189
+
190
+ selectedLocationOld.value = value
191
+ selectedLocation.value = value
192
+ // netBridge.value = value
193
+ }
194
+ const onSelectLocation = (network: UI_I_NetworkTableItem): void => {
195
+ locationModalIsShow.value = false
196
+
197
+ selectedLocationOld.value = network[valueProp]
198
+ selectedLocation.value = network[valueProp]
199
+
200
+ const hasNetwork = locationOptions.value.some(
201
+ (option) => option.value === network[valueProp]
202
+ )
203
+ if (hasNetwork) {
204
+ return
205
+ }
206
+
207
+ locationOptions.value = [
208
+ ...locationOptions.value.slice(0, -1),
209
+ { text: network.name, value: network[valueProp] },
210
+ locationOptions.value[locationOptions.value.length - 1],
211
+ ]
212
+ }
213
+
214
+ const adapterType = ref<string>('rtl8139')
215
+
216
+ const target = ref<string>('')
217
+
218
+ const macAddress = ref<string>('')
219
+ const macAddressType = ref<string>('automatic')
220
+ const newNetworkInvalid = ref<boolean>(false)
221
+ watch(
222
+ newNetworkInvalid,
223
+ (newValue) => {
224
+ emits('invalid', newValue)
225
+ },
226
+ { immediate: true }
227
+ )
228
+
229
+ watch(
230
+ [selectedLocation, adapterType, macAddress, macAddressType, locationOptions],
231
+ () => {
232
+ const option = locationOptions.value.find(
233
+ (option) => option.value === selectedLocation.value
234
+ )
235
+ if (!option) return
236
+
237
+ emits('send-data', {
238
+ network: option.text,
239
+ net_bridge: props.project === 'procurator' ? option.value : '',
240
+ target: target.value,
241
+ model: adapterType.value,
242
+ mac: macAddress.value,
243
+ boot_order: props.network.boot_order,
244
+ })
245
+ },
246
+ { immediate: true }
247
+ )
248
+
249
+ // Добавляем данные для редактирования
250
+ watch(
251
+ () => props.network,
252
+ (newValue) => {
253
+ if (props.type !== 'edit') return
254
+
255
+ locationOptions.value = [
256
+ { text: newValue.network, value: newValue[valueProp] },
257
+ { text: `${localization.value.browse}...`, value: '' },
258
+ ]
259
+ selectedLocation.value = newValue[valueProp]
260
+
261
+ adapterType.value = newValue.model
262
+ macAddress.value = newValue.mac
263
+ target.value = newValue.target
264
+ },
265
+ { immediate: true }
266
+ )
267
+
268
+ watch(
269
+ isRunning,
270
+ (newValue) => {
271
+ if (newValue && props.type === 'new') {
272
+ adapterType.value = 'virtio'
273
+ }
274
+ },
275
+ { immediate: true }
276
+ )
277
+
278
+ const typeError = computed<string>(
279
+ () => `network_devices[${props.index}].network`
280
+ )
281
+
282
+ const apiError = computed<string>(() => {
283
+ return (
284
+ props.errorValidationFields?.find(
285
+ (message) => message.field === typeError.value
286
+ )?.error_message || ''
287
+ )
288
+ })
289
+
290
+ const onRemoveValidationError = (): void => {
291
+ emits('remove-error-by-title', typeError.value)
292
+ }
293
+ </script>
294
+
295
+ <style scoped lang="scss">
296
+ #network-connect {
297
+ margin-right: 4px;
298
+ }
299
+ </style>