bfg-common 1.5.607 → 1.5.609
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.
- package/assets/localization/local_be.json +3 -1
- package/assets/localization/local_en.json +3 -1
- package/assets/localization/local_hy.json +3 -1
- package/assets/localization/local_kk.json +3 -1
- package/assets/localization/local_ru.json +3 -1
- package/assets/localization/local_zh.json +3 -1
- package/components/common/recursionTree/RecursionTree.vue +214 -210
- package/components/common/vm/actions/add/Add.vue +1 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/New.vue +124 -133
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/Old.vue +165 -171
- package/components/common/wizards/common/steps/name/location/Location.vue +18 -20
- package/package.json +1 -1
|
@@ -3370,7 +3370,9 @@
|
|
|
3370
3370
|
"selectAdvancedOptionsTargetVm": "Абярыце дадатковыя параметры для мэтавай ВМ.",
|
|
3371
3371
|
"profile": "Профіль",
|
|
3372
3372
|
"standard": "Стандарт",
|
|
3373
|
-
"createLinkedClone": "Стварыць Linked Clone"
|
|
3373
|
+
"createLinkedClone": "Стварыць Linked Clone",
|
|
3374
|
+
"passthroughHostCpuDescription": "Дазваляе віртуальнай машыне непасрэдна выкарыстоўваць фізічны працэсар хоста без эмуляцыі. Забяспечвае максімальную прадукцыйнасць, але абмяжоўвае магчымасць міграцыі паміж серверамі з розным абсталяваннем.",
|
|
3375
|
+
"hostModelCpuDescription": "Эмулюе працэсар з характарыстыкамі, аналагічнымі працэсару хоста. Захоўвае сумяшчальнасць з большасцю функцый CPU, забяспечваючы добры баланс паміж прадукцыйнасцю і магчымасцю міграцыі віртуальных машын."
|
|
3374
3376
|
},
|
|
3375
3377
|
"feedback": {
|
|
3376
3378
|
"additionalDetailsHelp": "Даведка па дадатковых звестках",
|
|
@@ -3374,7 +3374,9 @@
|
|
|
3374
3374
|
"selectAdvancedOptionsTargetVm": "Select advanced options for the target VM.",
|
|
3375
3375
|
"profile": "Profile",
|
|
3376
3376
|
"standard": "Standard",
|
|
3377
|
-
"createLinkedClone": "Create Linked Clone"
|
|
3377
|
+
"createLinkedClone": "Create Linked Clone",
|
|
3378
|
+
"passthroughHostCpuDescription": "Allows the virtual machine to directly use the host's physical processor without emulation. Provides maximum performance but limits the ability to migrate between servers with different hardware.",
|
|
3379
|
+
"hostModelCpuDescription": "Emulates a processor with characteristics similar to the host processor. Maintains compatibility with most CPU features, providing a good balance between performance and virtual machine migration capability."
|
|
3378
3380
|
},
|
|
3379
3381
|
"feedback": {
|
|
3380
3382
|
"additionalDetailsHelp": "Additional Details Help",
|
|
@@ -3374,7 +3374,9 @@
|
|
|
3374
3374
|
"selectAdvancedOptionsTargetVm": "Ընտրեք նպատակային ՎՄ-ի լրացուցիչ կարգավորումները։",
|
|
3375
3375
|
"profile": "Պրոֆիլ",
|
|
3376
3376
|
"standard": "Ստանդարտ",
|
|
3377
|
-
"createLinkedClone": "Ստեղծել Linked Clone"
|
|
3377
|
+
"createLinkedClone": "Ստեղծել Linked Clone",
|
|
3378
|
+
"passthroughHostCpuDescription": "Թույլ է տալիս վիրտուալ մեքենային ուղղակիորեն օգտագործել հոստի ֆիզիկական պրոցեսորը առանց էմուլյացիայի: Ապահովում է առավելագույն արտադրողականություն, սակայն սահմանափակում է տարբեր սարքավորումներով սերվերների միջև միգրացիայի հնարավորությունը:",
|
|
3379
|
+
"hostModelCpuDescription": "Էմուլյացնում է պրոցեսոր՝ հոստի պրոցեսորին նման բնութագրերով: Պահպանում է համատեղելիությունը CPU-ի մեծ մասի ֆունկցիաների հետ՝ ապահովելով լավ հավասարակշռություն արտադրողականության և վիրտուալ մեքենաների միգրացիայի հնարավորության միջև:"
|
|
3378
3380
|
},
|
|
3379
3381
|
"feedback": {
|
|
3380
3382
|
"additionalDetailsHelp": "Լրացուցիչ մանրամասներ Օգնություն",
|
|
@@ -3373,7 +3373,9 @@
|
|
|
3373
3373
|
"selectAdvancedOptionsTargetVm": "Мақсатты ВМ үшін қосымша параметрлерді таңдаңыз.",
|
|
3374
3374
|
"profile": "Профилі",
|
|
3375
3375
|
"standard": "Стандарт",
|
|
3376
|
-
"createLinkedClone": "Linked Clone жасау"
|
|
3376
|
+
"createLinkedClone": "Linked Clone жасау",
|
|
3377
|
+
"passthroughHostCpuDescription": "Виртуалды машинаға эмуляциясыз тікелей хосттың физикалық процессорын пайдалануға мүмкіндік береді. Максималды өнімділікті қамтамасыз етеді, бірақ әртүрлі жабдықтары бар серверлер арасындағы миграция мүмкіндігін шектейді.",
|
|
3378
|
+
"hostModelCpuDescription": "Хост процессорына ұқсас сипаттамалары бар процессорды эмуляциялайды. CPU функцияларының көпшілігімен үйлесімділікті сақтайды, виртуалды машиналардың миграция мүмкіндігі мен өнімділік арасында жақсы теңгерімді қамтамасыз етеді."
|
|
3377
3379
|
},
|
|
3378
3380
|
"feedback": {
|
|
3379
3381
|
"additionalDetailsHelp": "Қосымша мәліметтер анықтамасы",
|
|
@@ -3373,7 +3373,9 @@
|
|
|
3373
3373
|
"selectAdvancedOptionsTargetVm": "Выберите дополнительные параметры для целевой ВМ.",
|
|
3374
3374
|
"profile": "Профиль",
|
|
3375
3375
|
"standard": "Стандартный",
|
|
3376
|
-
"createLinkedClone": "Создать Linked Clone"
|
|
3376
|
+
"createLinkedClone": "Создать Linked Clone",
|
|
3377
|
+
"passthroughHostCpuDescription": "Позволяет виртуальной машине напрямую использовать физический процессор хоста без эмуляции. Обеспечивает максимальную производительность, но ограничивает возможность миграции между серверами с разным аппаратным обеспечением.",
|
|
3378
|
+
"hostModelCpuDescription": "Эмулирует процессор с характеристиками, аналогичными процессору хоста. Сохраняет совместимость с большинством функций CPU, обеспечивая хороший баланс между производительностью и возможностью миграции виртуальных машин."
|
|
3377
3379
|
},
|
|
3378
3380
|
"feedback": {
|
|
3379
3381
|
"additionalDetailsHelp": "Дополнительная информация Помощь",
|
|
@@ -3371,7 +3371,9 @@
|
|
|
3371
3371
|
"selectAdvancedOptionsTargetVm": "为目标虚拟机选择高级选项。",
|
|
3372
3372
|
"profile": "主机简介",
|
|
3373
3373
|
"standard": "标准",
|
|
3374
|
-
"createLinkedClone": "创建 Linked Clone"
|
|
3374
|
+
"createLinkedClone": "创建 Linked Clone",
|
|
3375
|
+
"passthroughHostCpuDescription": "允许虚拟机直接使用主机的物理处理器而无需模拟。提供最大性能,但限制在不同硬件的服务器之间迁移的能力。",
|
|
3376
|
+
"hostModelCpuDescription": "模拟具有与主机处理器类似特性的处理器。保持与大多数CPU功能的兼容性,在性能和虚拟机迁移能力之间提供良好的平衡。"
|
|
3375
3377
|
},
|
|
3376
3378
|
"feedback": {
|
|
3377
3379
|
"additionalDetailsHelp": "其他详细信息帮助",
|
|
@@ -1,210 +1,214 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="recursion-tree">
|
|
3
|
-
<div
|
|
4
|
-
v-for="node in nodes"
|
|
5
|
-
:key="`${node.type}_${node.id}`"
|
|
6
|
-
:data-id="`${node.testId}-${node.type}-root`"
|
|
7
|
-
>
|
|
8
|
-
<div
|
|
9
|
-
:id="`tree-node-${node.type}-${node.id}`"
|
|
10
|
-
:data-id="node.testId"
|
|
11
|
-
class="clr-tree-node"
|
|
12
|
-
@click="selectNode(node)"
|
|
13
|
-
>
|
|
14
|
-
<button
|
|
15
|
-
v-if="node.hasNodes"
|
|
16
|
-
:id="`tree-node-${node.type}-${node.id}-toggle-button`"
|
|
17
|
-
:data-id="`${node.testId}-toggle-button`"
|
|
18
|
-
class="clr-treenode-caret"
|
|
19
|
-
@click.stop="getNodes({ node })"
|
|
20
|
-
>
|
|
21
|
-
<i
|
|
22
|
-
v-if="loading[`${node.id}_${node.type}`]"
|
|
23
|
-
:data-id="`${node.testId}-spinner`"
|
|
24
|
-
class="fa clr-tree-node-caret-icon spinner spinner-sm"
|
|
25
|
-
/>
|
|
26
|
-
<atoms-the-icon
|
|
27
|
-
v-else
|
|
28
|
-
:class="['clr-tree-node-caret-icon', { down: node.nodesShow }]"
|
|
29
|
-
name="angle"
|
|
30
|
-
/>
|
|
31
|
-
</button>
|
|
32
|
-
<div
|
|
33
|
-
:class="[
|
|
34
|
-
'tree-node-text-drag',
|
|
35
|
-
{ 'no-child': !node.hasNodes, 'dark-mode': hasDarkMode },
|
|
36
|
-
]"
|
|
37
|
-
:data-id="`${node.testId}-select-content`"
|
|
38
|
-
@contextmenu.prevent="showContextMenuAndSelectNode($event, node)"
|
|
39
|
-
>
|
|
40
|
-
<div
|
|
41
|
-
:class="[
|
|
42
|
-
'clr-treenode-link tree-node-text',
|
|
43
|
-
{ active: node.isActive },
|
|
44
|
-
]"
|
|
45
|
-
:data-id="`${node.testId}-name`"
|
|
46
|
-
>
|
|
47
|
-
<span :class="node.iconClassName" />
|
|
48
|
-
{{ node.name }}
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
|
|
53
|
-
<common-recursion-tree
|
|
54
|
-
v-if="node.nodesShow && node.nodes.length"
|
|
55
|
-
:nodes="node.nodes"
|
|
56
|
-
:class="node.nodesShow ? 'nodes-show' : ''"
|
|
57
|
-
@get-nodes="getNodes($event)"
|
|
58
|
-
@select-node="selectNode($event)"
|
|
59
|
-
@contextmenu.prevent
|
|
60
|
-
@show-context-menu="showContextMenu"
|
|
61
|
-
/>
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
</template>
|
|
65
|
-
|
|
66
|
-
<script setup lang="ts">
|
|
67
|
-
import type {
|
|
68
|
-
UI_I_Loading,
|
|
69
|
-
UI_I_TreeNode,
|
|
70
|
-
} from '~/components/common/recursionTree/lib/models/interfaces'
|
|
71
|
-
|
|
72
|
-
const props = defineProps<{
|
|
73
|
-
nodes: UI_I_TreeNode[]
|
|
74
|
-
}>()
|
|
75
|
-
const emits = defineEmits<{
|
|
76
|
-
(event: 'get-nodes', value: any): void
|
|
77
|
-
(event: 'select-node', value: UI_I_TreeNode): void
|
|
78
|
-
(event: 'show-context-menu', value: any): void
|
|
79
|
-
}>()
|
|
80
|
-
|
|
81
|
-
const { $store } = useNuxtApp()
|
|
82
|
-
|
|
83
|
-
const loading = ref<UI_I_Loading>({})
|
|
84
|
-
watch(
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
)
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
node
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
:
|
|
138
|
-
--tree-node-child-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
|
|
1
|
+
<template>
|
|
2
|
+
<div class="recursion-tree">
|
|
3
|
+
<div
|
|
4
|
+
v-for="node in props.nodes"
|
|
5
|
+
:key="`${node.type}_${node.id}`"
|
|
6
|
+
:data-id="`${node.testId}-${node.type}-root`"
|
|
7
|
+
>
|
|
8
|
+
<div
|
|
9
|
+
:id="`tree-node-${node.type}-${node.id}`"
|
|
10
|
+
:data-id="node.testId"
|
|
11
|
+
class="clr-tree-node"
|
|
12
|
+
@click="selectNode(node)"
|
|
13
|
+
>
|
|
14
|
+
<button
|
|
15
|
+
v-if="node.hasNodes"
|
|
16
|
+
:id="`tree-node-${node.type}-${node.id}-toggle-button`"
|
|
17
|
+
:data-id="`${node.testId}-toggle-button`"
|
|
18
|
+
class="clr-treenode-caret"
|
|
19
|
+
@click.stop="getNodes({ node })"
|
|
20
|
+
>
|
|
21
|
+
<i
|
|
22
|
+
v-if="loading[`${node.id}_${node.type}`]"
|
|
23
|
+
:data-id="`${node.testId}-spinner`"
|
|
24
|
+
class="fa clr-tree-node-caret-icon spinner spinner-sm"
|
|
25
|
+
/>
|
|
26
|
+
<atoms-the-icon
|
|
27
|
+
v-else
|
|
28
|
+
:class="['clr-tree-node-caret-icon', { down: node.nodesShow }]"
|
|
29
|
+
name="angle"
|
|
30
|
+
/>
|
|
31
|
+
</button>
|
|
32
|
+
<div
|
|
33
|
+
:class="[
|
|
34
|
+
'tree-node-text-drag',
|
|
35
|
+
{ 'no-child': !node.hasNodes, 'dark-mode': hasDarkMode },
|
|
36
|
+
]"
|
|
37
|
+
:data-id="`${node.testId}-select-content`"
|
|
38
|
+
@contextmenu.prevent="showContextMenuAndSelectNode($event, node)"
|
|
39
|
+
>
|
|
40
|
+
<div
|
|
41
|
+
:class="[
|
|
42
|
+
'clr-treenode-link tree-node-text',
|
|
43
|
+
{ active: node.isActive },
|
|
44
|
+
]"
|
|
45
|
+
:data-id="`${node.testId}-name`"
|
|
46
|
+
>
|
|
47
|
+
<span :class="node.iconClassName" />
|
|
48
|
+
{{ node.name }}
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<common-recursion-tree
|
|
54
|
+
v-if="node.nodesShow && node.nodes.length"
|
|
55
|
+
:nodes="node.nodes"
|
|
56
|
+
:class="node.nodesShow ? 'nodes-show' : ''"
|
|
57
|
+
@get-nodes="getNodes($event)"
|
|
58
|
+
@select-node="selectNode($event)"
|
|
59
|
+
@contextmenu.prevent
|
|
60
|
+
@show-context-menu="showContextMenu"
|
|
61
|
+
/>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</template>
|
|
65
|
+
|
|
66
|
+
<script setup lang="ts">
|
|
67
|
+
import type {
|
|
68
|
+
UI_I_Loading,
|
|
69
|
+
UI_I_TreeNode,
|
|
70
|
+
} from '~/components/common/recursionTree/lib/models/interfaces'
|
|
71
|
+
|
|
72
|
+
const props = defineProps<{
|
|
73
|
+
nodes: UI_I_TreeNode[]
|
|
74
|
+
}>()
|
|
75
|
+
const emits = defineEmits<{
|
|
76
|
+
(event: 'get-nodes', value: any): void
|
|
77
|
+
(event: 'select-node', value: UI_I_TreeNode): void
|
|
78
|
+
(event: 'show-context-menu', value: any): void
|
|
79
|
+
}>()
|
|
80
|
+
|
|
81
|
+
const { $store } = useNuxtApp()
|
|
82
|
+
|
|
83
|
+
const loading = ref<UI_I_Loading>({})
|
|
84
|
+
watch(
|
|
85
|
+
() => props.nodes,
|
|
86
|
+
(newValue) => {
|
|
87
|
+
newValue.forEach((node) => {
|
|
88
|
+
loading.value[`${node.id}_${node.type}`] = false
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
{ deep: true, immediate: true }
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
const hasDarkMode = computed<boolean>(
|
|
95
|
+
() => $store.getters['main/getInterfaceThemeMode'] === 'DARK'
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
const getNodes = (data: any): void => {
|
|
99
|
+
const node: UI_I_TreeNode = data.node
|
|
100
|
+
const cb: Function | undefined = data.cb
|
|
101
|
+
|
|
102
|
+
loading.value[`${node.id}_${node.type}`] = true
|
|
103
|
+
const collBack = () => {
|
|
104
|
+
loading.value[`${node.id}_${node.type}`] = false
|
|
105
|
+
}
|
|
106
|
+
emits('get-nodes', {
|
|
107
|
+
node,
|
|
108
|
+
cb: cb || collBack,
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
const selectNode = (node: UI_I_TreeNode): void => {
|
|
112
|
+
emits('select-node', node)
|
|
113
|
+
}
|
|
114
|
+
const showContextMenu = (event: any, node: UI_I_TreeNode): void => {
|
|
115
|
+
// Если данные приходят от потомка, то нужно так обработать, из-за рекурсии
|
|
116
|
+
if (event.node && event.event) {
|
|
117
|
+
emits('show-context-menu', { ...event })
|
|
118
|
+
return
|
|
119
|
+
}
|
|
120
|
+
emits('show-context-menu', { event, node })
|
|
121
|
+
}
|
|
122
|
+
const showContextMenuAndSelectNode = (
|
|
123
|
+
event: any,
|
|
124
|
+
node: UI_I_TreeNode
|
|
125
|
+
): void => {
|
|
126
|
+
selectNode(node)
|
|
127
|
+
|
|
128
|
+
setTimeout(() => {
|
|
129
|
+
showContextMenu(event, node)
|
|
130
|
+
}, 0)
|
|
131
|
+
}
|
|
132
|
+
</script>
|
|
133
|
+
|
|
134
|
+
<style>
|
|
135
|
+
:root {
|
|
136
|
+
/* rtl*/
|
|
137
|
+
--tree-node-child-padding: 0 0 0 20px;
|
|
138
|
+
--tree-node-no-child-margin: 0 0 0 30px;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
:root[dir='rtl'] {
|
|
142
|
+
--tree-node-child-padding: 0 20px 0 0;
|
|
143
|
+
--tree-node-no-child-margin: 0 30px 0 0;
|
|
144
|
+
}
|
|
145
|
+
</style>
|
|
146
|
+
<style scoped lang="scss">
|
|
147
|
+
.recursion-tree {
|
|
148
|
+
.clr-tree-node {
|
|
149
|
+
width: 100%;
|
|
150
|
+
overflow: hidden;
|
|
151
|
+
display: flex;
|
|
152
|
+
flex: 1 1 0;
|
|
153
|
+
align-items: center;
|
|
154
|
+
margin-bottom: 1px;
|
|
155
|
+
|
|
156
|
+
.clr-treenode-caret {
|
|
157
|
+
outline: none;
|
|
158
|
+
|
|
159
|
+
.clr-tree-node-caret-icon {
|
|
160
|
+
position: static;
|
|
161
|
+
transform: rotate(90deg);
|
|
162
|
+
width: 11px;
|
|
163
|
+
height: 11px;
|
|
164
|
+
fill: var(--tree-node-caret-icon);
|
|
165
|
+
|
|
166
|
+
&.down {
|
|
167
|
+
transform: rotate(180deg);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
.tree-node-text-drag {
|
|
172
|
+
width: 100%;
|
|
173
|
+
overflow: hidden;
|
|
174
|
+
display: flex;
|
|
175
|
+
cursor: grab;
|
|
176
|
+
|
|
177
|
+
&.no-child {
|
|
178
|
+
margin: var(--tree-node-no-child-margin);
|
|
179
|
+
}
|
|
180
|
+
.tree-node-text {
|
|
181
|
+
width: 100%;
|
|
182
|
+
box-sizing: border-box;
|
|
183
|
+
text-overflow: ellipsis;
|
|
184
|
+
overflow: hidden;
|
|
185
|
+
white-space: nowrap;
|
|
186
|
+
padding: 0;
|
|
187
|
+
border-radius: 0;
|
|
188
|
+
border-bottom: 1px solid transparent;
|
|
189
|
+
|
|
190
|
+
&.active {
|
|
191
|
+
background: var(--vertical-nav-active-bg-color);
|
|
192
|
+
color: var(--vertical-nav-active-item-color);
|
|
193
|
+
border-bottom: 1px solid transparent;
|
|
194
|
+
}
|
|
195
|
+
&:hover {
|
|
196
|
+
border-color: var(--vertical-nav-hover-border-color);
|
|
197
|
+
&:not(.active) {
|
|
198
|
+
background: var(--vertical-nav-hover-bg-color);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
span {
|
|
202
|
+
display: inline-block;
|
|
203
|
+
vertical-align: text-bottom;
|
|
204
|
+
margin: 1px 4px 0;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.nodes-show {
|
|
211
|
+
padding: var(--tree-node-child-padding);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
</style>
|
package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/New.vue
CHANGED
|
@@ -1,133 +1,124 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<ui-stack-block
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
test-id="host-model-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
(
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
.
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
:deep(.ui-main-select-toggle) {
|
|
126
|
-
width: 100%;
|
|
127
|
-
}
|
|
128
|
-
.passthrough-host-cpu-wrap :deep(.ui-checkbox-label),
|
|
129
|
-
.host-model-cpu-wrap :deep(.ui-checkbox-label) {
|
|
130
|
-
min-height: unset !important;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<ui-stack-block :has-children="false" test-id="cpu-model-stack-block">
|
|
3
|
+
<template #stackBlockKey>
|
|
4
|
+
<span class="limit-title mt-2">
|
|
5
|
+
{{ localization.common.cpuModel }}
|
|
6
|
+
</span>
|
|
7
|
+
</template>
|
|
8
|
+
<template #stackBlockContent>
|
|
9
|
+
<div class="cpu-model-content">
|
|
10
|
+
<ui-select
|
|
11
|
+
v-model="cpuModel"
|
|
12
|
+
:items="props.cpuModelOptions"
|
|
13
|
+
:disabled="props.disabled"
|
|
14
|
+
:error-text="props.errorText"
|
|
15
|
+
test-id="vm-wizard-cpu-model-field"
|
|
16
|
+
size="sm"
|
|
17
|
+
@change="onChangeCpuModel"
|
|
18
|
+
/>
|
|
19
|
+
|
|
20
|
+
<div class="passthrough-host-cpu-wrap flex-align-center">
|
|
21
|
+
<ui-checkbox
|
|
22
|
+
v-model="passthroughHostCpu"
|
|
23
|
+
:disabled="props.disabled"
|
|
24
|
+
:label-text="localization.common.passthroughHostCpu"
|
|
25
|
+
size="md"
|
|
26
|
+
test-id="passthrough-host-cpu"
|
|
27
|
+
@change="emits('change-passthrough-host-cpu', $event)"
|
|
28
|
+
/>
|
|
29
|
+
|
|
30
|
+
<common-tooltip-help
|
|
31
|
+
class="ml-2"
|
|
32
|
+
test-id="passthrough-help"
|
|
33
|
+
help-id="passthrough-help-icon"
|
|
34
|
+
dropdown-width="480px"
|
|
35
|
+
dropdown-left
|
|
36
|
+
is-disabled
|
|
37
|
+
>
|
|
38
|
+
<p class="help-text">
|
|
39
|
+
{{ localization.vmWizard.passthroughHostCpuDescription }}
|
|
40
|
+
</p>
|
|
41
|
+
</common-tooltip-help>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="host-model-cpu-wrap flex-align-center">
|
|
44
|
+
<ui-checkbox
|
|
45
|
+
v-model="hostModelCpu"
|
|
46
|
+
:disabled="props.disabled"
|
|
47
|
+
:label-text="localization.common.hostModelCpu"
|
|
48
|
+
size="md"
|
|
49
|
+
test-id="host-model-cpu"
|
|
50
|
+
@change="emits('change-host-model-cpu', $event)"
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
<common-tooltip-help
|
|
54
|
+
class="ml-2"
|
|
55
|
+
test-id="host-model-help"
|
|
56
|
+
help-id="host-model-help-icon"
|
|
57
|
+
dropdown-width="480px"
|
|
58
|
+
dropdown-left
|
|
59
|
+
is-disabled
|
|
60
|
+
>
|
|
61
|
+
<p class="help-text">
|
|
62
|
+
{{localization.vmWizard.hostModelCpuDescription}}
|
|
63
|
+
</p>
|
|
64
|
+
</common-tooltip-help>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</template>
|
|
68
|
+
</ui-stack-block>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<script setup lang="ts">
|
|
72
|
+
import type { UI_T_SelectedValue } from '~/node_modules/bfg-uikit/components/ui/select/models/types'
|
|
73
|
+
import type {
|
|
74
|
+
UI_I_Localization,
|
|
75
|
+
UI_I_HTMLSelectElement,
|
|
76
|
+
} from '~/lib/models/interfaces'
|
|
77
|
+
import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
|
|
78
|
+
|
|
79
|
+
const cpuModel = defineModel<string>('cpuModel')
|
|
80
|
+
const passthroughHostCpu = defineModel<boolean>('passthroughHostCpu')
|
|
81
|
+
const hostModelCpu = defineModel<boolean>('hostModelCpu')
|
|
82
|
+
|
|
83
|
+
const props = defineProps<{
|
|
84
|
+
cpuModelOptions: UI_I_OptionItem[]
|
|
85
|
+
disabled: boolean
|
|
86
|
+
errorText: string
|
|
87
|
+
}>()
|
|
88
|
+
const emits = defineEmits<{
|
|
89
|
+
(event: 'change-cpu-model', value: UI_I_HTMLSelectElement): void
|
|
90
|
+
(event: 'change-passthrough-host-cpu', value: Event): void
|
|
91
|
+
(event: 'change-host-model-cpu', value: Event): void
|
|
92
|
+
(event: 'remove-error'): void
|
|
93
|
+
}>()
|
|
94
|
+
|
|
95
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
96
|
+
|
|
97
|
+
const onChangeCpuModel = (data: UI_T_SelectedValue): void => {
|
|
98
|
+
emits('change-cpu-model', { target: { value: data } })
|
|
99
|
+
}
|
|
100
|
+
</script>
|
|
101
|
+
|
|
102
|
+
<style scoped lang="scss">
|
|
103
|
+
.limit-title {
|
|
104
|
+
margin-right: 12px;
|
|
105
|
+
}
|
|
106
|
+
.cpu-model-content {
|
|
107
|
+
display: flex;
|
|
108
|
+
flex-direction: column;
|
|
109
|
+
//width: 224px;
|
|
110
|
+
gap: 12px;
|
|
111
|
+
|
|
112
|
+
.tooltip-main {
|
|
113
|
+
width: 224px;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
:deep(.ui-main-select-toggle) {
|
|
117
|
+
width: 100%;
|
|
118
|
+
}
|
|
119
|
+
.passthrough-host-cpu-wrap :deep(.ui-checkbox-label),
|
|
120
|
+
.host-model-cpu-wrap :deep(.ui-checkbox-label) {
|
|
121
|
+
min-height: unset !important;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
</style>
|
package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/model/Old.vue
CHANGED
|
@@ -1,171 +1,165 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div class="">
|
|
3
|
-
<atoms-stack-block
|
|
4
|
-
:has-children="false"
|
|
5
|
-
test-id="cpu-model-stack-block"
|
|
6
|
-
>
|
|
7
|
-
<template #stackBlockKey>
|
|
8
|
-
{{ localization.common.cpuModel }}
|
|
9
|
-
</template>
|
|
10
|
-
<template #stackBlockContent>
|
|
11
|
-
<div>
|
|
12
|
-
<atoms-tooltip-error
|
|
13
|
-
:has-error="!!props.errorText"
|
|
14
|
-
selector="#vm-wizard-cpu-model-field"
|
|
15
|
-
@remove="emits('remove-error')"
|
|
16
|
-
>
|
|
17
|
-
<template #elem>
|
|
18
|
-
<div class="select">
|
|
19
|
-
<select
|
|
20
|
-
id="vm-wizard-cpu-model-field"
|
|
21
|
-
:value="props.cpuModel"
|
|
22
|
-
:disabled="props.disabled"
|
|
23
|
-
data-id="vm-wizard-cpu-model-field"
|
|
24
|
-
@change="emits('change-cpu-model', $event)"
|
|
25
|
-
>
|
|
26
|
-
<option
|
|
27
|
-
v-for="(item, key) in props.cpuModelOptions"
|
|
28
|
-
:key="key"
|
|
29
|
-
:value="item.value"
|
|
30
|
-
>
|
|
31
|
-
{{ item.text }}
|
|
32
|
-
</option>
|
|
33
|
-
</select>
|
|
34
|
-
</div>
|
|
35
|
-
</template>
|
|
36
|
-
<template #content>{{ errorText }}</template>
|
|
37
|
-
</atoms-tooltip-error>
|
|
38
|
-
|
|
39
|
-
<div class="flex align-start flex-col cpu-model-checkbox">
|
|
40
|
-
<div class="passthrough-host-cpu-wrap flex-align-center">
|
|
41
|
-
<input
|
|
42
|
-
id="passthrough-host-cpu"
|
|
43
|
-
v-model="passthroughHostCpu"
|
|
44
|
-
:disabled="props.disabled"
|
|
45
|
-
data-id="passthrough-host-cpu"
|
|
46
|
-
type="checkbox"
|
|
47
|
-
@change="emits('change-passthrough-host-cpu', $event)"
|
|
48
|
-
/>
|
|
49
|
-
<label for="passthrough-host-cpu" class="label-text-normal">{{
|
|
50
|
-
localization.common.passthroughHostCpu
|
|
51
|
-
}}</label>
|
|
52
|
-
<div
|
|
53
|
-
id="passthrough-help-icon"
|
|
54
|
-
class="flex-align-center relative"
|
|
55
|
-
>
|
|
56
|
-
<atoms-the-icon
|
|
57
|
-
data-id="show-passthrough-help-icon"
|
|
58
|
-
fill="#0072a3"
|
|
59
|
-
width="24px"
|
|
60
|
-
height="24px"
|
|
61
|
-
name="info-circle"
|
|
62
|
-
class="cursor-pointer"
|
|
63
|
-
@click.stop="selectedTooltip = selectedTooltip === 'passthroughHostCpu' ? '' : 'passthroughHostCpu'"
|
|
64
|
-
/>
|
|
65
|
-
<Teleport to="body">
|
|
66
|
-
<atoms-tooltip-signpost
|
|
67
|
-
v-if="selectedTooltip === 'passthroughHostCpu'"
|
|
68
|
-
elem-id="passthrough-help-icon"
|
|
69
|
-
@hide="selectedTooltip = ''"
|
|
70
|
-
>
|
|
71
|
-
<h3 class="passthrough-help-title">
|
|
72
|
-
{{ localization.mainNavigation.help }}
|
|
73
|
-
</h3>
|
|
74
|
-
|
|
75
|
-
<p class="passthrough-help-text">
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
id="host-model-cpu"
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
<
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
}>()
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
#passthrough-host-cpu,
|
|
168
|
-
#host-model-cpu {
|
|
169
|
-
margin: 0 4px 0 0;
|
|
170
|
-
}
|
|
171
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div class="">
|
|
3
|
+
<atoms-stack-block
|
|
4
|
+
:has-children="false"
|
|
5
|
+
test-id="cpu-model-stack-block"
|
|
6
|
+
>
|
|
7
|
+
<template #stackBlockKey>
|
|
8
|
+
{{ localization.common.cpuModel }}
|
|
9
|
+
</template>
|
|
10
|
+
<template #stackBlockContent>
|
|
11
|
+
<div>
|
|
12
|
+
<atoms-tooltip-error
|
|
13
|
+
:has-error="!!props.errorText"
|
|
14
|
+
selector="#vm-wizard-cpu-model-field"
|
|
15
|
+
@remove="emits('remove-error')"
|
|
16
|
+
>
|
|
17
|
+
<template #elem>
|
|
18
|
+
<div class="select">
|
|
19
|
+
<select
|
|
20
|
+
id="vm-wizard-cpu-model-field"
|
|
21
|
+
:value="props.cpuModel"
|
|
22
|
+
:disabled="props.disabled"
|
|
23
|
+
data-id="vm-wizard-cpu-model-field"
|
|
24
|
+
@change="emits('change-cpu-model', $event)"
|
|
25
|
+
>
|
|
26
|
+
<option
|
|
27
|
+
v-for="(item, key) in props.cpuModelOptions"
|
|
28
|
+
:key="key"
|
|
29
|
+
:value="item.value"
|
|
30
|
+
>
|
|
31
|
+
{{ item.text }}
|
|
32
|
+
</option>
|
|
33
|
+
</select>
|
|
34
|
+
</div>
|
|
35
|
+
</template>
|
|
36
|
+
<template #content>{{ errorText }}</template>
|
|
37
|
+
</atoms-tooltip-error>
|
|
38
|
+
|
|
39
|
+
<div class="flex align-start flex-col cpu-model-checkbox">
|
|
40
|
+
<div class="passthrough-host-cpu-wrap flex-align-center">
|
|
41
|
+
<input
|
|
42
|
+
id="passthrough-host-cpu"
|
|
43
|
+
v-model="passthroughHostCpu"
|
|
44
|
+
:disabled="props.disabled"
|
|
45
|
+
data-id="passthrough-host-cpu"
|
|
46
|
+
type="checkbox"
|
|
47
|
+
@change="emits('change-passthrough-host-cpu', $event)"
|
|
48
|
+
/>
|
|
49
|
+
<label for="passthrough-host-cpu" class="label-text-normal">{{
|
|
50
|
+
localization.common.passthroughHostCpu
|
|
51
|
+
}}</label>
|
|
52
|
+
<div
|
|
53
|
+
id="passthrough-help-icon"
|
|
54
|
+
class="flex-align-center relative"
|
|
55
|
+
>
|
|
56
|
+
<atoms-the-icon
|
|
57
|
+
data-id="show-passthrough-help-icon"
|
|
58
|
+
fill="#0072a3"
|
|
59
|
+
width="24px"
|
|
60
|
+
height="24px"
|
|
61
|
+
name="info-circle"
|
|
62
|
+
class="cursor-pointer"
|
|
63
|
+
@click.stop="selectedTooltip = selectedTooltip === 'passthroughHostCpu' ? '' : 'passthroughHostCpu'"
|
|
64
|
+
/>
|
|
65
|
+
<Teleport to="body">
|
|
66
|
+
<atoms-tooltip-signpost
|
|
67
|
+
v-if="selectedTooltip === 'passthroughHostCpu'"
|
|
68
|
+
elem-id="passthrough-help-icon"
|
|
69
|
+
@hide="selectedTooltip = ''"
|
|
70
|
+
>
|
|
71
|
+
<h3 class="passthrough-help-title">
|
|
72
|
+
{{ localization.mainNavigation.help }}
|
|
73
|
+
</h3>
|
|
74
|
+
|
|
75
|
+
<p class="passthrough-help-text">
|
|
76
|
+
{{localization.vmWizard.passthroughHostCpuDescription}}
|
|
77
|
+
</p>
|
|
78
|
+
</atoms-tooltip-signpost>
|
|
79
|
+
</Teleport>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="flex-align-center">
|
|
83
|
+
<input
|
|
84
|
+
id="host-model-cpu"
|
|
85
|
+
v-model="hostModelCpu"
|
|
86
|
+
:disabled="props.disabled"
|
|
87
|
+
data-id="host-model-cpu-input"
|
|
88
|
+
type="checkbox"
|
|
89
|
+
@change="emits('change-host-model-cpu', $event)"
|
|
90
|
+
/>
|
|
91
|
+
<label for="host-model-cpu" class="label-text-normal">{{
|
|
92
|
+
localization.common.hostModelCpu
|
|
93
|
+
}}</label>
|
|
94
|
+
<div id="host-model-help-icon" class="flex-align-center relative">
|
|
95
|
+
<atoms-the-icon
|
|
96
|
+
fill="#0072a3"
|
|
97
|
+
width="24px"
|
|
98
|
+
height="24px"
|
|
99
|
+
name="info-circle"
|
|
100
|
+
class="cursor-pointer"
|
|
101
|
+
data-id="show-host-model-help-icon"
|
|
102
|
+
@click.stop="selectedTooltip = selectedTooltip === 'hostModel' ? '' : 'hostModel'"
|
|
103
|
+
/>
|
|
104
|
+
<Teleport to="body">
|
|
105
|
+
<atoms-tooltip-signpost
|
|
106
|
+
v-if="selectedTooltip === 'hostModel'"
|
|
107
|
+
elem-id="host-model-help-icon"
|
|
108
|
+
@hide="selectedTooltip = ''"
|
|
109
|
+
>
|
|
110
|
+
<h3 class="host-model-help-title">
|
|
111
|
+
{{ localization.mainNavigation.help }}
|
|
112
|
+
</h3>
|
|
113
|
+
|
|
114
|
+
<p class="host-model-help-text">
|
|
115
|
+
{{localization.vmWizard.hostModelCpuDescription}}
|
|
116
|
+
</p>
|
|
117
|
+
</atoms-tooltip-signpost>
|
|
118
|
+
</Teleport>
|
|
119
|
+
</div>
|
|
120
|
+
</div>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
</template>
|
|
124
|
+
</atoms-stack-block>
|
|
125
|
+
</div>
|
|
126
|
+
</template>
|
|
127
|
+
|
|
128
|
+
<script setup lang="ts">
|
|
129
|
+
import type {
|
|
130
|
+
UI_I_Localization,
|
|
131
|
+
UI_I_HTMLSelectElement,
|
|
132
|
+
} from '~/lib/models/interfaces'
|
|
133
|
+
import type { UI_I_OptionItem } from '~/components/atoms/lib/models/interfaces'
|
|
134
|
+
|
|
135
|
+
const selectedTooltip = defineModel<string>('selectedTooltip', { required: true })
|
|
136
|
+
const passthroughHostCpu = defineModel<boolean>('passthroughHostCpu')
|
|
137
|
+
const hostModelCpu = defineModel<boolean>('hostModelCpu')
|
|
138
|
+
|
|
139
|
+
const props = defineProps<{
|
|
140
|
+
cpuModel: string
|
|
141
|
+
cpuModelOptions: UI_I_OptionItem[]
|
|
142
|
+
disabled: boolean
|
|
143
|
+
errorText: string
|
|
144
|
+
}>()
|
|
145
|
+
const emits = defineEmits<{
|
|
146
|
+
(event: 'change-cpu-model', value: UI_I_HTMLSelectElement): void
|
|
147
|
+
(event: 'change-passthrough-host-cpu', value: Event): void
|
|
148
|
+
(event: 'change-host-model-cpu', value: Event): void
|
|
149
|
+
(event: 'remove-error'): void
|
|
150
|
+
}>()
|
|
151
|
+
|
|
152
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
153
|
+
|
|
154
|
+
</script>
|
|
155
|
+
|
|
156
|
+
<style scoped lang="scss">
|
|
157
|
+
.cpu-model-checkbox {
|
|
158
|
+
margin-top: 4px;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
#passthrough-host-cpu,
|
|
162
|
+
#host-model-cpu {
|
|
163
|
+
margin: 0 4px 0 0;
|
|
164
|
+
}
|
|
165
|
+
</style>
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
:nodes="nodesLocal"
|
|
5
|
-
:loading="loading"
|
|
6
|
-
@show-nodes="showNodes"
|
|
7
|
-
@select-node="selectNode"
|
|
8
|
-
/>
|
|
9
|
-
<common-wizards-common-steps-name-location-old
|
|
10
|
-
v-else
|
|
2
|
+
<component
|
|
3
|
+
:is="currentComponent"
|
|
11
4
|
:nodes="nodesLocal"
|
|
12
5
|
:loading="loading"
|
|
13
6
|
@show-nodes="showNodes"
|
|
@@ -26,9 +19,24 @@ const props = defineProps<{
|
|
|
26
19
|
|
|
27
20
|
const { $store, $recursion }: any = useNuxtApp()
|
|
28
21
|
const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
|
|
22
|
+
const currentComponent = computed(() =>
|
|
23
|
+
isNewView.value
|
|
24
|
+
? defineAsyncComponent(() => import('./New.vue'))
|
|
25
|
+
: defineAsyncComponent(() => import('./Old.vue'))
|
|
26
|
+
)
|
|
29
27
|
|
|
30
28
|
const loading = ref<boolean>(false) // TODO
|
|
31
29
|
const nodesLocal = ref<UI_I_TreeNode[]>(useDeepCopy(props.nodes))
|
|
30
|
+
const selectNode = (node: UI_I_TreeNode): void => {
|
|
31
|
+
location.value = node
|
|
32
|
+
|
|
33
|
+
$recursion.findAndActivate(
|
|
34
|
+
nodesLocal.value,
|
|
35
|
+
[node.type, node.id],
|
|
36
|
+
['type', 'id'],
|
|
37
|
+
'nodes'
|
|
38
|
+
)
|
|
39
|
+
}
|
|
32
40
|
watch(
|
|
33
41
|
() => props.nodes,
|
|
34
42
|
(newValue) => {
|
|
@@ -47,7 +55,7 @@ watch(
|
|
|
47
55
|
)
|
|
48
56
|
}
|
|
49
57
|
},
|
|
50
|
-
{ deep: true }
|
|
58
|
+
{ deep: true, immediate: true }
|
|
51
59
|
)
|
|
52
60
|
|
|
53
61
|
const showNodes = ({
|
|
@@ -65,16 +73,6 @@ const showNodes = ({
|
|
|
65
73
|
)
|
|
66
74
|
cb()
|
|
67
75
|
}
|
|
68
|
-
const selectNode = (node: UI_I_TreeNode): void => {
|
|
69
|
-
location.value = node
|
|
70
|
-
|
|
71
|
-
$recursion.findAndActivate(
|
|
72
|
-
nodesLocal.value,
|
|
73
|
-
[node.type, node.id],
|
|
74
|
-
['type', 'id'],
|
|
75
|
-
'nodes'
|
|
76
|
-
)
|
|
77
|
-
}
|
|
78
76
|
|
|
79
77
|
// TODO
|
|
80
78
|
// onUnmounted(() => {
|