bfg-common 1.6.3 → 1.6.4
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 +56 -4
- package/assets/localization/local_en.json +61 -9
- package/assets/localization/local_hy.json +57 -5
- package/assets/localization/local_kk.json +56 -4
- package/assets/localization/local_ru.json +60 -8
- package/assets/localization/local_zh.json +56 -4
- package/assets/scss/common/theme.scss +2 -2
- package/components/atoms/stack/StackBlock.vue +1 -1
- package/components/common/adapterManager/addAdapterModal/AddAdapterModalNew.vue +1 -1
- package/components/common/adapterManager/addAdapterWarningModal/AddAdapterWarningModalNew.vue +0 -1
- package/components/common/adapterManager/ui/table/adapters/AdaptersNew.vue +1 -0
- package/components/common/configure/physicalAdapters/PhysicalAdapters.vue +6 -0
- package/components/common/configure/physicalAdapters/PhysicalAdaptersNew.vue +219 -192
- package/components/common/configure/physicalAdapters/PhysicalAdaptersOld.vue +6 -4
- package/components/common/configure/physicalAdapters/buttons/Buttons.vue +1 -0
- package/components/common/configure/physicalAdapters/modals/edit/Edit.vue +26 -1
- package/components/common/configure/physicalAdapters/modals/edit/EditNew.vue +30 -1
- package/components/common/configure/physicalAdapters/modals/edit/lib/models/interfaces.ts +5 -0
- package/components/common/configure/physicalAdapters/modals/edit/lib/validations/validations.ts +19 -0
- package/components/common/configure/physicalAdapters/tableView/TableViewNew.vue +12 -1
- package/components/common/configure/physicalAdapters/tableView/lib/config/physicalAdaptersTableConfigNew.ts +21 -21
- package/components/common/configure/physicalAdapters/tableView/lib/config/settings.ts +12 -5
- package/components/common/configure/physicalAdapters/tableView/lib/models/interfaces.ts +4 -1
- package/components/common/diagramMain/DiagramMain.vue +6 -0
- package/components/common/diagramMain/modals/Modals.vue +4 -0
- package/components/common/diagramMain/modals/editSettings/tabs/NetworkProperties.vue +2 -2
- package/components/common/diagramMain/modals/lib/config/vmKernelAdapter.ts +1 -1
- package/components/common/diagramMain/modals/migrateVmkernelAdapter/MigrateVmkernelAdapter.vue +2 -2
- package/components/common/diagramMain/modals/migrateVmkernelAdapter/validations/common.ts +1 -1
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/Old.vue +5 -9
- package/components/common/monitor/utilization/New.vue +5 -0
- package/components/common/monitor/utilization/Old.vue +79 -0
- package/components/common/monitor/utilization/Utilization.vue +51 -0
- package/components/common/monitor/utilization/infoBlock/InfoBlock.vue +23 -0
- package/components/common/monitor/utilization/infoBlock/New.vue +5 -0
- package/components/common/monitor/utilization/infoBlock/Old.vue +185 -0
- package/components/common/monitor/utilization/lib/models/enums.ts +4 -0
- package/components/common/monitor/utilization/lib/models/interfaces.ts +25 -0
- package/components/common/monitor/utilization/lib/utils/index.ts +31 -0
- package/components/common/noDataProvided/NoDataProvidedNew.vue +1 -1
- package/components/common/pages/tasks/Tasks.vue +4 -1
- package/components/common/split/vertical/New.vue +11 -6
- package/components/common/vm/actions/add/New.vue +21 -6
- package/components/common/vm/actions/common/select/options/New.vue +10 -19
- package/components/common/vm/actions/common/select/storage/new/lib/config/table.ts +13 -15
- package/components/common/vm/snapshots/DetailView.vue +6 -6
- package/components/common/wizards/common/steps/name/New.vue +1 -1
- package/components/common/wizards/datastore/add/New.vue +6 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +1 -1
- package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/New.vue +1 -1
- package/components/common/wizards/network/add/Add.vue +13 -2
- package/components/common/wizards/network/add/AddNew.vue +22 -26
- package/components/common/wizards/network/add/lib/config/initialData.ts +4 -4
- package/components/common/wizards/network/add/lib/utils/utils.ts +1 -1
- package/components/common/wizards/network/add/steps/ipFourSettings/IpFourSettingsNew.vue +2 -8
- package/components/common/wizards/network/add/steps/portProperties/PortPropertiesNew.vue +2 -8
- package/components/common/wizards/network/add/steps/selectTargetDevice/SelectTargetDeviceNew.vue +10 -3
- package/components/common/wizards/network/add/steps/selectTargetDevice/modals/new/SelectNetwork.vue +5 -1
- package/components/common/wizards/network/add/validations/common.ts +1 -1
- package/components/common/wizards/vm/migrate/steps/computeResource/tableView/new/New.vue +31 -13
- package/components/common/wizards/vm/migrate/steps/computeResource/tableView/new/lib/config/clusterTable.ts +340 -0
- package/components/common/wizards/vm/migrate/steps/computeResource/tableView/new/lib/config/hostTable.ts +3 -1
- package/lib/models/store/tasks/enums.ts +2 -0
- package/package.json +2 -2
- package/store/tasks/actions.ts +26 -8
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="utilization-info-block">
|
|
3
|
+
<div class="header-block">
|
|
4
|
+
<p class="title">{{ props.infoData.title }}</p>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="body-block">
|
|
7
|
+
<div class="bar">
|
|
8
|
+
<div :title="currentTitle" class="track">
|
|
9
|
+
<div
|
|
10
|
+
:style="{
|
|
11
|
+
width: animated ? barPercent + '%' : '0%',
|
|
12
|
+
background: consumedItem?.color,
|
|
13
|
+
boxShadow: `0 0 6px ${consumedItem?.color}88`,
|
|
14
|
+
}"
|
|
15
|
+
class="fill"
|
|
16
|
+
/>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="footer-body-block">
|
|
20
|
+
<p>0 {{ localization.common.gb }}</p>
|
|
21
|
+
<p>{{ maxItem?.value }}</p>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
<div class="footer-block">
|
|
25
|
+
<div
|
|
26
|
+
v-for="(item, key) in props.infoData.data"
|
|
27
|
+
:key="key"
|
|
28
|
+
class="footer-item"
|
|
29
|
+
>
|
|
30
|
+
<div class="left-block">
|
|
31
|
+
<div
|
|
32
|
+
v-if="item.color"
|
|
33
|
+
:style="`background-color: ${item.color}`"
|
|
34
|
+
class="color-block"
|
|
35
|
+
></div>
|
|
36
|
+
<p class="name">{{ item.label }}</p>
|
|
37
|
+
</div>
|
|
38
|
+
<p class="value">{{ item.value }}</p>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<script setup lang="ts">
|
|
45
|
+
import type {
|
|
46
|
+
UI_I_UtilizationDataItem,
|
|
47
|
+
UI_I_UtilizationDataItems,
|
|
48
|
+
} from '~/components/common/monitor/utilization/lib/models/interfaces'
|
|
49
|
+
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
50
|
+
|
|
51
|
+
const props = defineProps<{
|
|
52
|
+
infoData: UI_I_UtilizationDataItem
|
|
53
|
+
}>()
|
|
54
|
+
|
|
55
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
56
|
+
|
|
57
|
+
const animated = ref<boolean>(false)
|
|
58
|
+
|
|
59
|
+
const maxItem = computed<UI_I_UtilizationDataItems | null>(
|
|
60
|
+
() =>
|
|
61
|
+
props.infoData.data.find((item) =>
|
|
62
|
+
item.label.toLowerCase().includes('capacity')
|
|
63
|
+
) || null
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
const consumedItem = computed<UI_I_UtilizationDataItems | null>(
|
|
67
|
+
() =>
|
|
68
|
+
props.infoData.data.find((item) =>
|
|
69
|
+
item.label.toLowerCase().includes('consumed')
|
|
70
|
+
) || null
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
const usageItem = computed<UI_I_UtilizationDataItems | null>(
|
|
74
|
+
() =>
|
|
75
|
+
props.infoData.data.find((item) =>
|
|
76
|
+
item.label.toLowerCase().includes('usagepercent')
|
|
77
|
+
) || null
|
|
78
|
+
)
|
|
79
|
+
const currentTitle = computed<string>(
|
|
80
|
+
() =>
|
|
81
|
+
`${consumedItem.value?.value} / ${maxItem.value?.value} - ${usageItem.value?.value}`
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
const barPercent = computed<string>(() => {
|
|
85
|
+
const parse = (v: string) => parseFloat(v.replace(/[^\d.]/g, '')) || 0
|
|
86
|
+
if (!maxItem.value || !consumedItem.value) return '0'
|
|
87
|
+
return String(
|
|
88
|
+
Math.min(
|
|
89
|
+
(parse(consumedItem.value.value) / parse(maxItem.value.value)) * 100,
|
|
90
|
+
100
|
|
91
|
+
)
|
|
92
|
+
)
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
onMounted(() => {
|
|
96
|
+
setTimeout(() => (animated.value = true), 100)
|
|
97
|
+
})
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<style scoped lang="scss">
|
|
101
|
+
.utilization-info-block {
|
|
102
|
+
width: 522px;
|
|
103
|
+
padding: 20px;
|
|
104
|
+
border: 1px solid #ccc;
|
|
105
|
+
border-radius: 4px;
|
|
106
|
+
box-shadow: 0px 0px 2px #ccc;
|
|
107
|
+
|
|
108
|
+
.header-block {
|
|
109
|
+
margin-bottom: 20px;
|
|
110
|
+
|
|
111
|
+
.title {
|
|
112
|
+
font-size: 16px;
|
|
113
|
+
font-weight: 500;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.body-block {
|
|
118
|
+
display: flex;
|
|
119
|
+
flex-direction: column;
|
|
120
|
+
gap: 8px;
|
|
121
|
+
margin-bottom: 20px;
|
|
122
|
+
|
|
123
|
+
.bar {
|
|
124
|
+
.track {
|
|
125
|
+
height: 18px;
|
|
126
|
+
background: #e5e7eb;
|
|
127
|
+
border-radius: 4px;
|
|
128
|
+
overflow: hidden;
|
|
129
|
+
border: 1px solid gray;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.fill {
|
|
133
|
+
height: 100%;
|
|
134
|
+
border-radius: 2px;
|
|
135
|
+
transition: width 0.8s cubic-bezier(0.4, 0, 0.2, 1);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
.footer-body-block {
|
|
139
|
+
display: flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
justify-content: space-between;
|
|
142
|
+
|
|
143
|
+
p {
|
|
144
|
+
font-size: 11px;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.footer-block {
|
|
150
|
+
display: grid;
|
|
151
|
+
grid-row-gap: 5px;
|
|
152
|
+
width: 70%;
|
|
153
|
+
|
|
154
|
+
.footer-item {
|
|
155
|
+
display: grid;
|
|
156
|
+
align-items: center;
|
|
157
|
+
gap: 5px;
|
|
158
|
+
grid-template-columns: 70% 30%;
|
|
159
|
+
|
|
160
|
+
.left-block {
|
|
161
|
+
display: flex;
|
|
162
|
+
align-items: center;
|
|
163
|
+
gap: 5px;
|
|
164
|
+
|
|
165
|
+
.color-block {
|
|
166
|
+
width: 15px;
|
|
167
|
+
height: 15px;
|
|
168
|
+
border: 1px solid black;
|
|
169
|
+
border-radius: 4px;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.name {
|
|
173
|
+
font-size: 14px;
|
|
174
|
+
font-weight: 500;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.value {
|
|
179
|
+
font-size: 14px;
|
|
180
|
+
font-weight: 500;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
</style>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface API_UI_I_UtilizationDataItems {
|
|
2
|
+
label: string
|
|
3
|
+
value: string
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface API_UI_I_UtilizationDataItem {
|
|
7
|
+
items: API_UI_I_UtilizationDataItems[]
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface API_UI_I_UtilizationData {
|
|
11
|
+
[key: string]: API_UI_I_UtilizationDataItem
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface UI_I_UtilizationDataItems {
|
|
15
|
+
label: string
|
|
16
|
+
value: string
|
|
17
|
+
color: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface UI_I_UtilizationDataItem {
|
|
21
|
+
id: string
|
|
22
|
+
isShow: boolean
|
|
23
|
+
title: string
|
|
24
|
+
data: UI_I_UtilizationDataItems[]
|
|
25
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
API_UI_I_UtilizationData,
|
|
3
|
+
UI_I_UtilizationDataItem,
|
|
4
|
+
} from '~/components/common/monitor/utilization/lib/models/interfaces'
|
|
5
|
+
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
6
|
+
import { UI_E_UtilizationBlockCurrentKeys } from '~/components/common/monitor/utilization/lib/models/enums'
|
|
7
|
+
|
|
8
|
+
export const constructApiData = (
|
|
9
|
+
apiData: API_UI_I_UtilizationData,
|
|
10
|
+
localization: UI_I_Localization
|
|
11
|
+
): UI_I_UtilizationDataItem[] => {
|
|
12
|
+
const result: UI_I_UtilizationDataItem[] = []
|
|
13
|
+
Object.keys(apiData).forEach((key) => {
|
|
14
|
+
result.push({
|
|
15
|
+
id: key,
|
|
16
|
+
isShow: true,
|
|
17
|
+
title: localization.common[UI_E_UtilizationBlockCurrentKeys[key]],
|
|
18
|
+
data: apiData[key].items.map((item) => {
|
|
19
|
+
item.color = !item.label.toLowerCase().includes('capacity')
|
|
20
|
+
? '#' +
|
|
21
|
+
Math.floor(Math.random() * 0xffffff)
|
|
22
|
+
.toString(16)
|
|
23
|
+
.padStart(6, '0')
|
|
24
|
+
: ''
|
|
25
|
+
|
|
26
|
+
return item
|
|
27
|
+
}),
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
return result
|
|
31
|
+
}
|
|
@@ -58,7 +58,10 @@ const getTasks = async (): Promise<void> => {
|
|
|
58
58
|
sortBy: sort.value || '',
|
|
59
59
|
filter: filter.value || '',
|
|
60
60
|
}
|
|
61
|
-
await $store.dispatch('tasks/A_GET_TASKS',
|
|
61
|
+
await $store.dispatch('tasks/A_GET_TASKS', {
|
|
62
|
+
data: payload,
|
|
63
|
+
project: props.project,
|
|
64
|
+
})
|
|
62
65
|
}
|
|
63
66
|
const onUpdatePagination = (event: UI_I_Pagination): void => {
|
|
64
67
|
pagination.value = event
|
|
@@ -52,10 +52,14 @@ const props = defineProps<{
|
|
|
52
52
|
</style>
|
|
53
53
|
|
|
54
54
|
<style scoped lang="scss">
|
|
55
|
-
.
|
|
55
|
+
.vertical {
|
|
56
56
|
&.dragging {
|
|
57
57
|
.gutter-vertical.gutter {
|
|
58
|
-
background-color: var(--gutter-active-bg-color);
|
|
58
|
+
background-color: var(--new-gutter-active-bg-color);
|
|
59
|
+
|
|
60
|
+
&::before {
|
|
61
|
+
background-color: var(--new-gutter-active-before-bg-color);
|
|
62
|
+
}
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
|
|
@@ -95,11 +99,11 @@ const props = defineProps<{
|
|
|
95
99
|
//}
|
|
96
100
|
|
|
97
101
|
&:hover {
|
|
98
|
-
background-color: var(--gutter-hover-bg-color);
|
|
102
|
+
background-color: var(--new-gutter-hover-bg-color);
|
|
99
103
|
cursor: row-resize;
|
|
100
104
|
|
|
101
105
|
&:before {
|
|
102
|
-
background-color: var(--gutter-
|
|
106
|
+
background-color: var(--new-gutter-active-before-bg-color);
|
|
103
107
|
}
|
|
104
108
|
}
|
|
105
109
|
|
|
@@ -112,8 +116,9 @@ const props = defineProps<{
|
|
|
112
116
|
transition-duration: 0.25s;
|
|
113
117
|
width: 24px;
|
|
114
118
|
height: 2px;
|
|
115
|
-
left:
|
|
116
|
-
top:
|
|
119
|
+
left: 50%;
|
|
120
|
+
top: 50%;
|
|
121
|
+
transform: translate(-50%, -50%);
|
|
117
122
|
border-radius: 4px;
|
|
118
123
|
}
|
|
119
124
|
}
|
|
@@ -55,13 +55,13 @@
|
|
|
55
55
|
<div ref="subTitleBlockName">
|
|
56
56
|
<div class="subtitle-block">
|
|
57
57
|
<div
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
id="name-alert-wrapper"
|
|
59
|
+
:class="[{ 'mb-4': !isNameAlertWrapperEmpty }]"
|
|
60
60
|
></div>
|
|
61
61
|
<ui-wizard-subtitle
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
:sub-title="
|
|
63
|
+
localization.vmWizard.specifyUniqueNameAndTargetLocationForVm
|
|
64
|
+
"
|
|
65
65
|
/>
|
|
66
66
|
</div>
|
|
67
67
|
</div>
|
|
@@ -153,7 +153,8 @@
|
|
|
153
153
|
:datastore="props.datastore"
|
|
154
154
|
:is-datastore-loading="props.isDatastoreLoading"
|
|
155
155
|
:get-datastore-table-func="props.getDatastoreTableFunc"
|
|
156
|
-
:storage="
|
|
156
|
+
:storage="storageLocal"
|
|
157
|
+
@change-storage="setSelectedStorageIdLocal"
|
|
157
158
|
@submit="emits('change-storage', $event)"
|
|
158
159
|
@has-errors="isStorageAlertWrapperEmpty = $event"
|
|
159
160
|
/>
|
|
@@ -593,6 +594,20 @@ const isNameAlertWrapperEmpty = ref<boolean>(false)
|
|
|
593
594
|
// const isComputeResourceAlertWrapperEmpty = ref<boolean>(false)
|
|
594
595
|
const isStorageAlertWrapperEmpty = ref<boolean>(false)
|
|
595
596
|
const isCompatibilityAlertWrapperEmpty = ref<boolean>(false)
|
|
597
|
+
|
|
598
|
+
const storageLocal = computed<UI_I_DatastoreTableItem | undefined>(() => {
|
|
599
|
+
return selectedStorageLocal.value ?? props.vmtSettings?.storage
|
|
600
|
+
})
|
|
601
|
+
|
|
602
|
+
/* TODO: В дальнейшем необходимо вынести все данные наружу и передавать его через v-model */
|
|
603
|
+
// рефакторинг. При возврате на шаг выбора хранилища ранее выбранное хранилище не отображается как выбранное.
|
|
604
|
+
// Для хранилища в v-model необходимо сохранять ID хранилища, а не ключ индекса.
|
|
605
|
+
const selectedStorageLocal = ref<UI_I_DatastoreTableItem | null>(null)
|
|
606
|
+
const setSelectedStorageIdLocal = (datastore: UI_I_DatastoreTableItem) => {
|
|
607
|
+
selectedStorageLocal.value = {
|
|
608
|
+
id: datastore.id,
|
|
609
|
+
} as UI_I_DatastoreTableItem
|
|
610
|
+
}
|
|
596
611
|
</script>
|
|
597
612
|
|
|
598
613
|
<style>
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
]"
|
|
9
9
|
>
|
|
10
10
|
<div
|
|
11
|
+
v-if="!props.isNewVmFromTemplate"
|
|
11
12
|
:class="[
|
|
12
13
|
'checkbox-container',
|
|
13
14
|
{ checked: isCustomizeOs },
|
|
@@ -59,35 +60,24 @@
|
|
|
59
60
|
</p>
|
|
60
61
|
</div>
|
|
61
62
|
<div
|
|
62
|
-
:class="[
|
|
63
|
-
'checkbox-container',
|
|
64
|
-
{ checked: isPowerOn },
|
|
65
|
-
{ disabled: props.isNewVmFromTemplate },
|
|
66
|
-
]"
|
|
63
|
+
:class="['checkbox-container', { checked: isPowerOn }]"
|
|
67
64
|
@click.stop.prevent="onTogglePowerOn"
|
|
68
65
|
>
|
|
69
|
-
<!-- :disabled="props.isNewVmFromTemplate"-->
|
|
70
66
|
<ui-checkbox
|
|
71
67
|
v-model="isPowerOn"
|
|
72
68
|
:label-text="localization.vmWizard.autoPowerOn"
|
|
73
|
-
:title="localization.vmWizard.autoPowerOn"
|
|
74
|
-
:disabled="props.isNewVmFromTemplate"
|
|
75
69
|
test-id="power-on"
|
|
76
70
|
size="md"
|
|
77
71
|
/>
|
|
78
|
-
|
|
79
|
-
<p
|
|
80
|
-
:class="[
|
|
81
|
-
'checkbox-block-description mt-2 ml-7',
|
|
82
|
-
{ disabled: props.isNewVmFromTemplate },
|
|
83
|
-
]"
|
|
84
|
-
>
|
|
72
|
+
<p class="checkbox-block-description mt-2 ml-7">
|
|
85
73
|
{{ localization.vmWizard.powerVMAfterCreation }}
|
|
86
74
|
</p>
|
|
87
75
|
</div>
|
|
88
|
-
<div
|
|
76
|
+
<div
|
|
77
|
+
v-if="props.isNewVmFromTemplate && props.project === 'sphere'"
|
|
78
|
+
class="checkbox-container"
|
|
79
|
+
>
|
|
89
80
|
<ui-input
|
|
90
|
-
v-if="props.project === 'sphere'"
|
|
91
81
|
v-model="maxParallel"
|
|
92
82
|
:placeholder="localization.vmWizard.maxParallel"
|
|
93
83
|
test-id="max-parallel"
|
|
@@ -180,7 +170,7 @@ const onToggleCustomizeHardware = (): void => {
|
|
|
180
170
|
}
|
|
181
171
|
|
|
182
172
|
const onTogglePowerOn = (): void => {
|
|
183
|
-
if (props.isNewVmFromTemplate) return
|
|
173
|
+
// if (props.isNewVmFromTemplate) return
|
|
184
174
|
|
|
185
175
|
isPowerOn.value = !isPowerOn.value
|
|
186
176
|
if (isPowerOn.value) {
|
|
@@ -223,7 +213,8 @@ watch(
|
|
|
223
213
|
|
|
224
214
|
<style scoped lang="scss">
|
|
225
215
|
.select-options {
|
|
226
|
-
grid-template-columns: 1fr 1fr;
|
|
216
|
+
//grid-template-columns: 1fr 1fr;
|
|
217
|
+
grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
|
|
227
218
|
grid-template-rows: max-content;
|
|
228
219
|
overflow-y: auto;
|
|
229
220
|
padding-bottom: 16px;
|
|
@@ -9,9 +9,7 @@ import type { UI_I_StatusData } from '~/components/common/vm/actions/common/sele
|
|
|
9
9
|
import { datastoreLocalizationByState } from '~/components/common/lib/config/states'
|
|
10
10
|
import { getStatus } from '~/components/common/vm/actions/common/select/storage/new/lib/utils/utils'
|
|
11
11
|
|
|
12
|
-
export const tableDataFunc = (
|
|
13
|
-
localization: UI_I_Localization
|
|
14
|
-
): UI_I_DataTable => ({
|
|
12
|
+
export const tableDataFunc = (localization: UI_I_Localization): UI_I_DataTable => ({
|
|
15
13
|
id: 'select-storage',
|
|
16
14
|
header: [
|
|
17
15
|
{
|
|
@@ -31,7 +29,7 @@ export const tableDataFunc = (
|
|
|
31
29
|
text: localization.inventorySummary.state,
|
|
32
30
|
isSortable: false,
|
|
33
31
|
sort: 'asc',
|
|
34
|
-
sortColumn:
|
|
32
|
+
sortColumn: false,
|
|
35
33
|
width: '160px',
|
|
36
34
|
show: true,
|
|
37
35
|
filter: true,
|
|
@@ -42,7 +40,7 @@ export const tableDataFunc = (
|
|
|
42
40
|
text: localization.common.capacity,
|
|
43
41
|
isSortable: false,
|
|
44
42
|
sort: 'asc',
|
|
45
|
-
sortColumn:
|
|
43
|
+
sortColumn: false,
|
|
46
44
|
width: '150px',
|
|
47
45
|
show: true,
|
|
48
46
|
filter: true,
|
|
@@ -53,7 +51,7 @@ export const tableDataFunc = (
|
|
|
53
51
|
text: localization.common.provisioned,
|
|
54
52
|
isSortable: false,
|
|
55
53
|
sort: 'asc',
|
|
56
|
-
sortColumn:
|
|
54
|
+
sortColumn: false,
|
|
57
55
|
width: '150px',
|
|
58
56
|
show: true,
|
|
59
57
|
filter: true,
|
|
@@ -64,7 +62,7 @@ export const tableDataFunc = (
|
|
|
64
62
|
text: localization.common.free,
|
|
65
63
|
isSortable: false,
|
|
66
64
|
sort: 'asc',
|
|
67
|
-
sortColumn:
|
|
65
|
+
sortColumn: false,
|
|
68
66
|
width: '150px',
|
|
69
67
|
show: true,
|
|
70
68
|
filter: true,
|
|
@@ -75,7 +73,7 @@ export const tableDataFunc = (
|
|
|
75
73
|
text: localization.common.used,
|
|
76
74
|
isSortable: false,
|
|
77
75
|
sort: 'asc',
|
|
78
|
-
sortColumn:
|
|
76
|
+
sortColumn: false,
|
|
79
77
|
width: '150px',
|
|
80
78
|
show: true,
|
|
81
79
|
filter: true,
|
|
@@ -86,7 +84,7 @@ export const tableDataFunc = (
|
|
|
86
84
|
text: localization.common.type,
|
|
87
85
|
isSortable: false,
|
|
88
86
|
sort: 'asc',
|
|
89
|
-
sortColumn:
|
|
87
|
+
sortColumn: false,
|
|
90
88
|
width: '120px',
|
|
91
89
|
show: true,
|
|
92
90
|
filter: true,
|
|
@@ -97,7 +95,7 @@ export const tableDataFunc = (
|
|
|
97
95
|
text: localization.common.thinProvisioning,
|
|
98
96
|
isSortable: false,
|
|
99
97
|
sort: 'asc',
|
|
100
|
-
sortColumn:
|
|
98
|
+
sortColumn: false,
|
|
101
99
|
width: '160px',
|
|
102
100
|
show: true,
|
|
103
101
|
filter: true,
|
|
@@ -108,7 +106,7 @@ export const tableDataFunc = (
|
|
|
108
106
|
text: localization.common.access,
|
|
109
107
|
isSortable: false,
|
|
110
108
|
sort: 'asc',
|
|
111
|
-
sortColumn:
|
|
109
|
+
sortColumn: false,
|
|
112
110
|
width: '120px',
|
|
113
111
|
show: true,
|
|
114
112
|
filter: true,
|
|
@@ -119,7 +117,7 @@ export const tableDataFunc = (
|
|
|
119
117
|
text: localization.common.hardwareAcceleration,
|
|
120
118
|
isSortable: false,
|
|
121
119
|
sort: 'asc',
|
|
122
|
-
sortColumn:
|
|
120
|
+
sortColumn: false,
|
|
123
121
|
width: '200px',
|
|
124
122
|
show: true,
|
|
125
123
|
filter: true,
|
|
@@ -130,7 +128,7 @@ export const tableDataFunc = (
|
|
|
130
128
|
text: localization.common.driverType,
|
|
131
129
|
isSortable: false,
|
|
132
130
|
sort: 'asc',
|
|
133
|
-
sortColumn:
|
|
131
|
+
sortColumn: false,
|
|
134
132
|
width: '150px',
|
|
135
133
|
show: true,
|
|
136
134
|
filter: true,
|
|
@@ -141,7 +139,7 @@ export const tableDataFunc = (
|
|
|
141
139
|
text: localization.common.device,
|
|
142
140
|
isSortable: false,
|
|
143
141
|
sort: 'asc',
|
|
144
|
-
sortColumn:
|
|
142
|
+
sortColumn: false,
|
|
145
143
|
width: '150px',
|
|
146
144
|
show: true,
|
|
147
145
|
filter: true,
|
|
@@ -152,7 +150,7 @@ export const tableDataFunc = (
|
|
|
152
150
|
text: localization.common.storageIoControl,
|
|
153
151
|
isSortable: false,
|
|
154
152
|
sort: 'asc',
|
|
155
|
-
sortColumn:
|
|
153
|
+
sortColumn: false,
|
|
156
154
|
width: '180px',
|
|
157
155
|
show: true,
|
|
158
156
|
filter: true,
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
>
|
|
8
8
|
<tbody>
|
|
9
9
|
<tr>
|
|
10
|
-
<td class="left">{{ localization.common.name }}</td>
|
|
10
|
+
<td class="left" data-id="vm-snapshot-name-label">{{ localization.common.name }}</td>
|
|
11
11
|
<td class="left snapshot-name-label" data-id="vm-snapshot-name">
|
|
12
12
|
{{ detailData.name }}
|
|
13
13
|
</td>
|
|
14
14
|
</tr>
|
|
15
15
|
<tr>
|
|
16
|
-
<td class="left">{{ localization.common.description }}</td>
|
|
16
|
+
<td class="left" data-id="vm-snapshot-description-label">{{ localization.common.description }}</td>
|
|
17
17
|
<td
|
|
18
18
|
class="left snapshot-name-label"
|
|
19
19
|
data-id="vm-snapshot-description"
|
|
@@ -22,17 +22,17 @@
|
|
|
22
22
|
</td>
|
|
23
23
|
</tr>
|
|
24
24
|
<tr>
|
|
25
|
-
<td class="left">{{ localization.snapshots.timestamp }}</td>
|
|
25
|
+
<td class="left" data-id="vm-snapshot-timestamp-label">{{ localization.snapshots.timestamp }}</td>
|
|
26
26
|
<td class="left snapshot-name-label" data-id="vm-snapshot-timestamp">
|
|
27
27
|
{{ detailData.timestamp }}
|
|
28
28
|
</td>
|
|
29
29
|
</tr>
|
|
30
30
|
<tr>
|
|
31
|
-
<td class="left">{{ localization.common.size }}</td>
|
|
31
|
+
<td class="left" data-id="vm-snapshot-size-label">{{ localization.common.size }}</td>
|
|
32
32
|
<td class="left snapshot-name-label">{{ detailData.size }}</td>
|
|
33
33
|
</tr>
|
|
34
34
|
<tr>
|
|
35
|
-
<td class="left">
|
|
35
|
+
<td class="left" data-id="vm-snapshot-of-memory-label">
|
|
36
36
|
{{ localization.common.snapshotTheVirtualMachinesMemory }}
|
|
37
37
|
</td>
|
|
38
38
|
<td class="left snapshot-name-label" data-id="vm-snapshot-of-memory">
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
</td>
|
|
41
41
|
</tr>
|
|
42
42
|
<tr>
|
|
43
|
-
<td class="left">
|
|
43
|
+
<td class="left" data-id="vm-snapshot-file-system-label">
|
|
44
44
|
{{ localization.common.quiesceGuestFileSystem }}
|
|
45
45
|
</td>
|
|
46
46
|
<td
|
|
@@ -256,4 +256,10 @@ const onCreateDatastore = (): void => emits('submit')
|
|
|
256
256
|
padding: 10px 12px;
|
|
257
257
|
}
|
|
258
258
|
}
|
|
259
|
+
:deep(.ui-wizard-content-right-container) {
|
|
260
|
+
padding: 0 30px;
|
|
261
|
+
}
|
|
262
|
+
:deep(.ui-wizard-subtitle-container) + *, :deep(.ui-wizard-subtitle-container) {
|
|
263
|
+
padding-left: 2px;
|
|
264
|
+
}
|
|
259
265
|
</style>
|
|
@@ -618,9 +618,20 @@ const finalValidationFunc = async (
|
|
|
618
618
|
const stepId = wizard.getStepIdByFieldName(fieldName)
|
|
619
619
|
|
|
620
620
|
if (stepId !== -1) {
|
|
621
|
+
let message = ''
|
|
622
|
+
|
|
623
|
+
if (validationFields[fieldName]) {
|
|
624
|
+
message = `${validationFields[
|
|
625
|
+
fieldName
|
|
626
|
+
][0].toUpperCase()}${validationFields[fieldName].substring(1)}`
|
|
627
|
+
|
|
628
|
+
message =
|
|
629
|
+
message.charAt(message.length - 1) !== '.' ? message + '.' : message
|
|
630
|
+
}
|
|
631
|
+
|
|
621
632
|
stepHasError = wizard.setValidation(stepId, fieldName, {
|
|
622
|
-
fieldMessage:
|
|
623
|
-
alertMessage:
|
|
633
|
+
fieldMessage: message,
|
|
634
|
+
alertMessage: message,
|
|
624
635
|
})
|
|
625
636
|
}
|
|
626
637
|
}
|