bfg-common 1.3.347 → 1.3.349

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 (48) hide show
  1. package/components/atoms/TheIcon.vue +1646 -1125
  2. package/components/atoms/TheIconOld.vue +2444 -0
  3. package/components/atoms/switch/Switch.vue +111 -111
  4. package/components/atoms/table/compact/Compact.vue +526 -526
  5. package/components/common/adapterManager/ui/table/Header.vue +93 -93
  6. package/components/common/adapterManager/ui/table/Table.vue +162 -162
  7. package/components/common/context/Context.vue +99 -99
  8. package/components/common/lib/config/states.ts +126 -126
  9. package/components/common/resource/progressBlock/ProgressBlock.vue +142 -142
  10. package/components/common/vm/actions/add/Add.vue +602 -602
  11. package/components/common/vm/actions/clone/Clone.vue +518 -518
  12. package/components/common/vm/actions/common/customizeHardware/CustomizeHardware.vue +273 -273
  13. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +697 -697
  14. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newNetwork/NewNetwork.vue +299 -299
  15. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +165 -165
  16. package/components/common/vm/actions/common/select/computeResource/ComputeResource.vue +164 -164
  17. package/components/common/vm/actions/common/select/name/Name.vue +235 -235
  18. package/components/common/vm/actions/common/select/storage/Storage.vue +198 -198
  19. package/components/common/vm/actions/editSettings/EditSettings.vue +313 -313
  20. package/components/common/weekSelect/lib/config/options.ts +10 -10
  21. package/components/common/wizards/datastore/add/Add.vue +434 -434
  22. package/components/common/wizards/datastore/add/lib/config/stepItems.ts +191 -191
  23. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +38 -38
  24. package/components/common/wizards/datastore/add/lib/utils.ts +70 -70
  25. package/components/common/wizards/datastore/add/local/createName/CreateName.vue +160 -160
  26. package/components/common/wizards/datastore/add/nfs/Nfs.vue +112 -112
  27. package/components/common/wizards/datastore/add/nfs/accessibility/Accessibility.vue +104 -104
  28. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/compatibleTable.ts +62 -62
  29. package/components/common/wizards/datastore/add/nfs/accessibility/tablesView/lib/config/hostsTableItems.ts +53 -53
  30. package/components/common/wizards/datastore/add/readyComplete/ReadyComplete.vue +86 -86
  31. package/components/common/wizards/datastore/add/readyComplete/lib/config/propertiesDetails.ts +184 -184
  32. package/components/common/wizards/datastore/add/sharedStorm/deviceSelection/DeviceSelection.vue +452 -452
  33. package/components/common/wizards/datastore/add/types/Types.vue +80 -80
  34. package/components/common/wizards/datastore/add/types/lib/config/typeOptions.ts +49 -49
  35. package/composables/useAppVersion.ts +21 -21
  36. package/composables/useEnvLanguage.ts +20 -20
  37. package/lib/utils/sendTask.ts +72 -72
  38. package/minify.js +146 -146
  39. package/package.json +1 -1
  40. package/public/spice-console/application/codec.js +257 -257
  41. package/public/spice-console/lib/rasterEngine.js +907 -907
  42. package/public/spice-console/network/spicechannel.js +369 -369
  43. package/store/main/lib/interfaces.ts +9 -9
  44. package/store/tasks/actions.ts +133 -133
  45. package/store/tasks/getters.ts +25 -25
  46. package/store/tasks/lib/models/interfaces.ts +18 -18
  47. package/store/tasks/mutations.ts +58 -58
  48. 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>