bfg-common 1.5.708 → 1.5.710
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/img/icons/icons-sprite-dark-1.svg +2 -3
- package/assets/img/icons/icons-sprite-light-1.svg +3 -4
- package/assets/localization/local_be.json +47 -3
- package/assets/localization/local_en.json +47 -3
- package/assets/localization/local_hy.json +47 -3
- package/assets/localization/local_kk.json +47 -3
- package/assets/localization/local_ru.json +49 -5
- package/assets/localization/local_zh.json +47 -3
- package/assets/scss/common/icons/icons-1.scss +1 -1
- package/assets/scss/common/icons/icons-2.scss +18 -0
- package/assets/scss/common/theme.scss +2 -0
- package/assets/scss/components/auth.scss +32 -5
- package/components/atoms/dropdown/tree/Tree.vue +2 -0
- package/components/atoms/switch/Switch.vue +7 -1
- package/components/atoms/wizard/Wizard.vue +1 -1
- package/components/common/certificate/Certificate.vue +27 -0
- package/components/common/certificate/CertificateInfo.vue +139 -0
- package/components/common/certificate/Tools.vue +59 -0
- package/components/common/certificate/lib/config/tabsPannel.ts +22 -0
- package/components/common/certificate/lib/models/interfaces.ts +9 -0
- package/components/common/certificate/lib/models/types.ts +1 -0
- package/components/common/certificate/modals/renew/New.vue +64 -0
- package/components/common/certificate/modals/renew/Old.vue +122 -0
- package/components/common/certificate/modals/renew/Renew.vue +67 -0
- package/components/common/help/navbar/left/lib/utils/constructAccordion.ts +2 -1
- package/components/common/help/navbar/right/Right.vue +86 -23
- package/components/common/layout/theHeader/modals/reconnect/ReconnectOld.vue +2 -0
- package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +12 -21
- package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +36 -43
- package/components/common/layout/theHeader/userMenu/modals/changePassword/Old.vue +0 -2
- package/components/common/layout/theHeader/userMenu/modals/changePassword/lib/utils.ts +1 -1
- package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesNew.vue +13 -0
- package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +8 -15
- package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageNew.vue → New.vue} +1 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageOld.vue → Old.vue} +0 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsole.vue +8 -7
- package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleNew.vue → New.vue} +3 -3
- package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleOld.vue → Old.vue} +2 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/Inventory.vue +7 -8
- package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryNew.vue → New.vue} +3 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryOld.vue → Old.vue} +2 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/security/New.vue +277 -12
- package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +30 -56
- package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +65 -6
- package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatNew.vue → New.vue} +3 -3
- package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatOld.vue → Old.vue} +2 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue +8 -8
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewNew.vue → New.vue} +12 -3
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewOld.vue → Old.vue} +2 -2
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/View.vue +8 -7
- package/components/common/monitor/advanced/graphView/GraphView.vue +8 -0
- package/components/common/monitor/advanced/tools/Tools.vue +5 -1
- package/components/common/pages/auth/TheFooter.vue +104 -0
- package/components/common/pages/files/lib/models/enums.ts +10 -0
- package/components/common/pages/hardwareHealth/historyTestimony/tools/Tools.vue +7 -2
- package/components/common/pages/hardwareHealth/tableView/TableView.vue +8 -0
- package/components/common/pages/hardwareHealth/tableView/lib/config/sensorTable.ts +13 -1
- package/components/common/pages/hardwareHealth/toolsPanel/lib/config/actionsPanel.ts +4 -4
- package/components/common/pages/tasks/table/expandDetails/ExpandDetails.vue +1 -1
- package/components/common/qr/Qr.vue +69 -0
- package/components/common/split/horizontal/New.vue +0 -2
- package/components/common/split/vertical/New.vue +2 -1
- package/components/common/vm/actions/add/New.vue +1 -1
- package/components/common/vm/actions/add/Old.vue +1 -1
- package/components/common/vm/actions/clone/old/Old.vue +1 -0
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/New.vue +10 -34
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/Old.vue +15 -37
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +49 -50
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocket.vue +1 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces.ts +3 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +13 -7
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/New.vue +7 -4
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +52 -45
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/Old.vue +5 -8
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +1 -3
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/New.vue +2 -2
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/Old.vue +2 -2
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +1 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/New.vue +1 -2
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/Old.vue +1 -2
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/New.vue +1 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +1 -1
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/Old.vue +1 -1
- package/components/common/vm/actions/common/select/options/Old.vue +1 -2
- package/components/common/wizards/common/compatibility/New.vue +1 -1
- package/components/common/wizards/common/compatibility/Old.vue +1 -1
- package/components/common/wizards/datastore/add/lib/config/createDatastore.ts +1 -0
- package/components/common/wizards/datastore/add/lib/models/interfaces.ts +1 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +5 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceOld.vue +5 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/AdvancedOptions.vue +43 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/New.vue +114 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/Old.vue +114 -0
- package/components/common/wizards/datastore/add/steps/nameAndDevice/table/old/Old.vue +2 -3
- package/components/common/wizards/datastore/add/steps/readyComplete/lib/config/propertiesDetails.ts +8 -1
- package/components/common/wizards/vm/migrate/lib/models/enums.ts +2 -2
- package/components/common/wizards/vm/migrate/steps/selectStorage/SelectStorage.vue +4 -4
- package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/new/lib/config/diskTable.ts +6 -2
- package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/old/lib/config/diskTable.ts +18 -12
- package/composables/useEnvLanguage.ts +7 -8
- package/lib/models/interfaces.ts +1 -0
- package/package.json +3 -4
- package/plugins/date.ts +14 -37
- package/store/main/getters.ts +2 -2
- package/components/common/qrcode/Qrcode.vue +0 -56
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
:test-id="item.testId"
|
|
23
23
|
:label="item.label"
|
|
24
24
|
:value="item.value"
|
|
25
|
-
size="
|
|
25
|
+
size="md"
|
|
26
26
|
/>
|
|
27
27
|
</div>
|
|
28
28
|
</div>
|
|
@@ -35,14 +35,14 @@ import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
|
35
35
|
import type { UI_I_RadioItem } from '~/components/common/layout/theHeader/userMenu/lib/models/interfaces'
|
|
36
36
|
import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
|
|
37
37
|
|
|
38
|
+
const timeItem = defineModel<UI_T_TimeValue>()
|
|
39
|
+
|
|
38
40
|
const props = defineProps<{
|
|
39
41
|
description: string
|
|
40
42
|
formatOptions: UI_I_RadioItem[]
|
|
41
43
|
}>()
|
|
42
44
|
|
|
43
45
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
44
|
-
|
|
45
|
-
const timeItem = defineModel<UI_T_TimeValue>()
|
|
46
46
|
</script>
|
|
47
47
|
|
|
48
48
|
<style lang="scss" scoped>
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
import type { UI_I_RadioItem } from '~/components/common/layout/theHeader/userMenu/lib/models/interfaces'
|
|
24
24
|
import type { UI_T_TimeValue } from '~/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/lib/models/types'
|
|
25
25
|
|
|
26
|
+
const timeItem = defineModel<UI_T_TimeValue>()
|
|
27
|
+
|
|
26
28
|
const props = defineProps<{
|
|
27
29
|
description: string
|
|
28
30
|
formatOptions: UI_I_RadioItem[]
|
|
29
31
|
}>()
|
|
30
|
-
|
|
31
|
-
const timeItem = defineModel<UI_T_TimeValue>()
|
|
32
32
|
</script>
|
|
33
33
|
|
|
34
34
|
<style lang="scss" scoped>
|
package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
v-model="timeItem"
|
|
5
|
-
:description="description"
|
|
6
|
-
:format-options="formatOptions"
|
|
7
|
-
/>
|
|
8
|
-
<common-layout-the-header-user-menu-modals-preferences-time-format-old
|
|
9
|
-
v-else
|
|
2
|
+
<component
|
|
3
|
+
:is="currentComponent"
|
|
10
4
|
v-model="timeItem"
|
|
11
5
|
:description="description"
|
|
12
6
|
:format-options="formatOptions"
|
|
@@ -28,6 +22,12 @@ const emits = defineEmits<{
|
|
|
28
22
|
(event: 'update-time-format', value: UI_T_TimeValue): void
|
|
29
23
|
}>()
|
|
30
24
|
|
|
25
|
+
const currentComponent = computed(() =>
|
|
26
|
+
props.newView
|
|
27
|
+
? defineAsyncComponent(() => import('./New.vue'))
|
|
28
|
+
: defineAsyncComponent(() => import('./Old.vue'))
|
|
29
|
+
)
|
|
30
|
+
|
|
31
31
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
32
32
|
|
|
33
33
|
const config = useRuntimeConfig()
|
package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewNew.vue → New.vue}
RENAMED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
{{ props.description }}
|
|
14
14
|
</div>
|
|
15
15
|
|
|
16
|
-
<div class="flex-align-center">
|
|
16
|
+
<div class="flex-align-center new-view-switch-container">
|
|
17
17
|
<ui-switch
|
|
18
18
|
v-model="newViewLocal"
|
|
19
19
|
:label="localization.common.newView"
|
|
@@ -28,11 +28,20 @@
|
|
|
28
28
|
<script setup lang="ts">
|
|
29
29
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
30
30
|
|
|
31
|
+
const newViewLocal = defineModel<boolean>()
|
|
32
|
+
|
|
31
33
|
const props = defineProps<{
|
|
32
34
|
description: string
|
|
33
35
|
}>()
|
|
34
36
|
|
|
35
|
-
const newViewLocal = defineModel<boolean>()
|
|
36
|
-
|
|
37
37
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
38
38
|
</script>
|
|
39
|
+
|
|
40
|
+
<style lang="scss" scoped>
|
|
41
|
+
.new-view-switch-container {
|
|
42
|
+
:deep(.switch-content .switch-label) {
|
|
43
|
+
font-size: 13px;
|
|
44
|
+
font-weight: 400;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
</style>
|
package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewOld.vue → Old.vue}
RENAMED
|
@@ -20,14 +20,14 @@
|
|
|
20
20
|
<script setup lang="ts">
|
|
21
21
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
22
22
|
|
|
23
|
+
const newViewLocal = defineModel<boolean>()
|
|
24
|
+
|
|
23
25
|
const props = defineProps<{
|
|
24
26
|
description: string
|
|
25
27
|
}>()
|
|
26
28
|
|
|
27
29
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
28
30
|
|
|
29
|
-
const newViewLocal = defineModel<boolean>()
|
|
30
|
-
|
|
31
31
|
const isDisabled = ref<boolean>(true)
|
|
32
32
|
// @ts-ignore
|
|
33
33
|
window.tools = new Proxy(
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
|
|
4
|
-
v-model="model"
|
|
5
|
-
:description="description"
|
|
6
|
-
/>
|
|
7
|
-
<common-layout-the-header-user-menu-modals-preferences-view-old
|
|
8
|
-
v-else
|
|
2
|
+
<component
|
|
3
|
+
:is="currentComponent"
|
|
9
4
|
v-model="model"
|
|
10
5
|
:description="description"
|
|
11
6
|
/>
|
|
@@ -25,6 +20,12 @@ const emits = defineEmits<{
|
|
|
25
20
|
|
|
26
21
|
const config = useRuntimeConfig()
|
|
27
22
|
|
|
23
|
+
const currentComponent = computed(() =>
|
|
24
|
+
props.newView
|
|
25
|
+
? defineAsyncComponent(() => import('./New.vue'))
|
|
26
|
+
: defineAsyncComponent(() => import('./Old.vue'))
|
|
27
|
+
)
|
|
28
|
+
|
|
28
29
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
29
30
|
|
|
30
31
|
const description = computed<string>(() => {
|
|
@@ -138,6 +138,14 @@ watch(
|
|
|
138
138
|
},
|
|
139
139
|
{ immediate: true }
|
|
140
140
|
)
|
|
141
|
+
|
|
142
|
+
const updateTimeFormatAndInterfaceLang = computed<number>(
|
|
143
|
+
() => $store.getters['main/getUpdateTimeFormatAndInterfaceLang']
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
watch(updateTimeFormatAndInterfaceLang, () => {
|
|
147
|
+
startChart()
|
|
148
|
+
})
|
|
141
149
|
</script>
|
|
142
150
|
|
|
143
151
|
<style scoped lang="scss"></style>
|
|
@@ -178,6 +178,10 @@ const routeType = '' + useRoute().params.type
|
|
|
178
178
|
|
|
179
179
|
const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
|
|
180
180
|
|
|
181
|
+
const updateTimeFormatAndInterfaceLang = computed<number>(
|
|
182
|
+
() => $store.getters['main/getUpdateTimeFormatAndInterfaceLang']
|
|
183
|
+
)
|
|
184
|
+
|
|
181
185
|
const localSelectedTimespanType = computed<string>({
|
|
182
186
|
get() {
|
|
183
187
|
return props.selectedTimespanType
|
|
@@ -278,7 +282,7 @@ const updateTools = (): void => {
|
|
|
278
282
|
}
|
|
279
283
|
|
|
280
284
|
const chartTitleDate = computed<string>(() => {
|
|
281
|
-
if (!props.startDate) return ''
|
|
285
|
+
if (!props.startDate || !updateTimeFormatAndInterfaceLang.value) return ''
|
|
282
286
|
|
|
283
287
|
const start = $formattedDatetime(props.startDate, { hasSeconds: true })
|
|
284
288
|
const end = $formattedDatetime(props.endDate, { hasSeconds: true })
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
id="footer"
|
|
4
|
+
class="footer flex justify-between items-center fixed left-0 right-0 bottom-0"
|
|
5
|
+
>
|
|
6
|
+
<div class="content flex items-center gap-4">
|
|
7
|
+
<span class="company-info"
|
|
8
|
+
>{{ currentYear }} ©
|
|
9
|
+
<span class="company-name">{{ companyName }}</span></span
|
|
10
|
+
>
|
|
11
|
+
|
|
12
|
+
<span class="dote-divider">•</span>
|
|
13
|
+
|
|
14
|
+
<a
|
|
15
|
+
:href="supportLink"
|
|
16
|
+
data-id="support-link"
|
|
17
|
+
class="support-link"
|
|
18
|
+
target="_blank"
|
|
19
|
+
>
|
|
20
|
+
<ui-icon name="support" width="18" height="18" />
|
|
21
|
+
<span class="support-text">{{
|
|
22
|
+
localization.common.technicalSupport
|
|
23
|
+
}}</span></a
|
|
24
|
+
>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<div class="app-version-wrap flex-justify-end flex-align-center">
|
|
28
|
+
<span class="app-version"> {{ version }} </span>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<script setup lang="ts">
|
|
34
|
+
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
35
|
+
|
|
36
|
+
const { version } = useAppVersion()
|
|
37
|
+
|
|
38
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
39
|
+
|
|
40
|
+
const currentYear = new Date().getFullYear()
|
|
41
|
+
|
|
42
|
+
const config = useRuntimeConfig()
|
|
43
|
+
|
|
44
|
+
const companyName = computed<string>(
|
|
45
|
+
() => config.public[`COMPANY_NAME_${useEnvLanguage()}`] as string
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
const supportLink = computed<string>(() => {
|
|
49
|
+
return config.public.SUPPORT_SITE
|
|
50
|
+
})
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<style scoped lang="scss">
|
|
54
|
+
.footer {
|
|
55
|
+
position: fixed;
|
|
56
|
+
background-color: #e9ebed;
|
|
57
|
+
padding: 11px 44px;
|
|
58
|
+
|
|
59
|
+
.content {
|
|
60
|
+
.company-info {
|
|
61
|
+
font-size: 14px;
|
|
62
|
+
line-height: 18px;
|
|
63
|
+
color: #9da6ad;
|
|
64
|
+
font-weight: 400;
|
|
65
|
+
|
|
66
|
+
.company-name {
|
|
67
|
+
font-weight: 300;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.dote-divider {
|
|
72
|
+
color: #9da6ad;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.support-link {
|
|
76
|
+
display: inline-flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: 8px;
|
|
79
|
+
color: #9da6ad;
|
|
80
|
+
text-decoration: none;
|
|
81
|
+
font-weight: 500;
|
|
82
|
+
font-size: 14px;
|
|
83
|
+
line-height: 18px;
|
|
84
|
+
|
|
85
|
+
&:hover {
|
|
86
|
+
color: #008fd6;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.support-text {
|
|
90
|
+
margin-top: 4px;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.app-version-wrap {
|
|
96
|
+
.app-version {
|
|
97
|
+
font-size: 14px;
|
|
98
|
+
line-height: 18px;
|
|
99
|
+
color: #9da6ad;
|
|
100
|
+
margin-right: 8px;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
</style>
|
|
@@ -166,7 +166,12 @@ const emits = defineEmits<{
|
|
|
166
166
|
}>()
|
|
167
167
|
|
|
168
168
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
169
|
-
|
|
169
|
+
|
|
170
|
+
const { $store, $formattedDatetime }: any = useNuxtApp()
|
|
171
|
+
|
|
172
|
+
const updateTimeFormatAndInterfaceLang = computed<number>(
|
|
173
|
+
() => $store.getters['main/getUpdateTimeFormatAndInterfaceLang']
|
|
174
|
+
)
|
|
170
175
|
|
|
171
176
|
const periodOptions = computed<UI_I_OptionItem[]>(() =>
|
|
172
177
|
periodFunc(localization.value, props.selectedTimespanType)
|
|
@@ -263,7 +268,7 @@ const onUpdateTools = (): void => {
|
|
|
263
268
|
}
|
|
264
269
|
|
|
265
270
|
const chartTitleDate = computed<string>(() => {
|
|
266
|
-
if (!props.startDate) return ''
|
|
271
|
+
if (!props.startDate || !updateTimeFormatAndInterfaceLang.value) return ''
|
|
267
272
|
|
|
268
273
|
const start = $formattedDatetime(props.startDate, { hasSeconds: true })
|
|
269
274
|
const end = $formattedDatetime(props.endDate, { hasSeconds: true })
|
|
@@ -89,6 +89,9 @@ const props = defineProps<{
|
|
|
89
89
|
tableMode: UI_T_HardwareHealthTabMode
|
|
90
90
|
}>()
|
|
91
91
|
const selectedRow = defineModel<number[]>('selectedRow')
|
|
92
|
+
|
|
93
|
+
const { $store }: any = useNuxtApp()
|
|
94
|
+
|
|
92
95
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
|
93
96
|
|
|
94
97
|
const table: any = {
|
|
@@ -118,7 +121,12 @@ const headItems = computed<UI_I_HeadItem[]>(() =>
|
|
|
118
121
|
table[props.tableMode].headItems(localization.value)
|
|
119
122
|
)
|
|
120
123
|
|
|
124
|
+
const updateTimeFormatAndInterfaceLang = computed<number>(
|
|
125
|
+
() => $store.getters['main/getUpdateTimeFormatAndInterfaceLang']
|
|
126
|
+
)
|
|
127
|
+
|
|
121
128
|
const bodyItems = computed<UI_I_BodyItem[][]>(() => {
|
|
129
|
+
if (!updateTimeFormatAndInterfaceLang.value) return []
|
|
122
130
|
// const tableData = ['sensor'].includes(props.tableMode) ? props.dataTable : [] // TODO временно так
|
|
123
131
|
let tableData = props.dataTable
|
|
124
132
|
|
|
@@ -89,6 +89,9 @@ export const bodyItems = (
|
|
|
89
89
|
localization: UI_I_Localization
|
|
90
90
|
): UI_I_BodyItem[][] => {
|
|
91
91
|
const bodyItems: UI_I_BodyItem[][] = []
|
|
92
|
+
|
|
93
|
+
const { $formattedDatetime }: any = useNuxtApp()
|
|
94
|
+
|
|
92
95
|
data.forEach((sensor: UI_I_HardwareHealthSensors, key) => {
|
|
93
96
|
const statusData = {
|
|
94
97
|
iconClassName: sensorsIconByStatus[sensor.status],
|
|
@@ -96,6 +99,15 @@ export const bodyItems = (
|
|
|
96
99
|
warning: sensor.warning,
|
|
97
100
|
}
|
|
98
101
|
|
|
102
|
+
const lastUpdate = sensor[hardwareHealthSensorTableKeys[4]]
|
|
103
|
+
const currentLastUpdate =
|
|
104
|
+
typeof lastUpdate === 'number'
|
|
105
|
+
? $formattedDatetime(lastUpdate, {
|
|
106
|
+
hasSeconds: true,
|
|
107
|
+
separator: ', ',
|
|
108
|
+
})
|
|
109
|
+
: lastUpdate
|
|
110
|
+
|
|
99
111
|
bodyItems.push([
|
|
100
112
|
// {
|
|
101
113
|
// data,
|
|
@@ -139,7 +151,7 @@ export const bodyItems = (
|
|
|
139
151
|
},
|
|
140
152
|
{
|
|
141
153
|
key: 'col4',
|
|
142
|
-
text:
|
|
154
|
+
text: currentLastUpdate,
|
|
143
155
|
id: key,
|
|
144
156
|
},
|
|
145
157
|
{
|
|
@@ -11,24 +11,24 @@ export const hardwareHealthActionsFunc = (
|
|
|
11
11
|
text: localization.common.refresh,
|
|
12
12
|
type: 'refresh',
|
|
13
13
|
disabled: false,
|
|
14
|
-
|
|
14
|
+
allowed: ['sensor', 'storage-sensor', 'alert-warning', 'system-log'],
|
|
15
15
|
testId: 'hardware-health-refresh',
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
18
|
text: localization.common.exportToXml,
|
|
19
19
|
type: 'export-to-xml',
|
|
20
20
|
disabled: true,
|
|
21
|
-
|
|
21
|
+
allowed: ['sensor'],
|
|
22
22
|
testId: 'hardware-health-export-to-xml',
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
text: localization.common.resetEventLog,
|
|
26
26
|
type: 'reset-event-log',
|
|
27
27
|
disabled: true,
|
|
28
|
-
|
|
28
|
+
allowed: ['system-log'],
|
|
29
29
|
testId: 'hardware-health-reset-event-log',
|
|
30
30
|
},
|
|
31
31
|
]
|
|
32
32
|
|
|
33
|
-
return tabs.filter((tab) => tab.
|
|
33
|
+
return tabs.filter((tab) => tab.allowed.includes(<string>selectedTab))
|
|
34
34
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="qrcode">
|
|
3
|
+
<!-- <img v-if="qrDataUrl" :src="qrDataUrl" alt="QR Code" class="qr-image" />-->
|
|
4
|
+
<Qrcode
|
|
5
|
+
:value="props.qrCodeUrl"
|
|
6
|
+
:width="props.width"
|
|
7
|
+
:height="props.height"
|
|
8
|
+
/>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup lang="ts">
|
|
13
|
+
// import QRCode from 'qrcode'
|
|
14
|
+
|
|
15
|
+
const props = withDefaults(
|
|
16
|
+
defineProps<{
|
|
17
|
+
qrCodeUrl: string
|
|
18
|
+
width?: string
|
|
19
|
+
height?: string
|
|
20
|
+
}>(),
|
|
21
|
+
{
|
|
22
|
+
width: '130',
|
|
23
|
+
height: '130',
|
|
24
|
+
}
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
// const qrDataUrl = ref<string>('')
|
|
28
|
+
// const generateQRCode = async (): Promise<void> => {
|
|
29
|
+
// try {
|
|
30
|
+
// qrDataUrl.value = await QRCode.toDataURL(props.qrCodeUrl, {
|
|
31
|
+
// width: 150,
|
|
32
|
+
// margin: 2,
|
|
33
|
+
// })
|
|
34
|
+
// } catch (error) {
|
|
35
|
+
// console.error('Error generating QR code:', error)
|
|
36
|
+
// }
|
|
37
|
+
// }
|
|
38
|
+
//
|
|
39
|
+
// watch(
|
|
40
|
+
// () => props.qrCodeUrl,
|
|
41
|
+
// (newValue) => {
|
|
42
|
+
// newValue && generateQRCode()
|
|
43
|
+
// },
|
|
44
|
+
// { immediate: true }
|
|
45
|
+
// )
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<style scoped lang="scss">
|
|
49
|
+
//.qr-code-display {
|
|
50
|
+
// text-align: center;
|
|
51
|
+
// max-width: 400px;
|
|
52
|
+
// margin: 0 auto;
|
|
53
|
+
//}
|
|
54
|
+
//
|
|
55
|
+
//.qr-wrapper {
|
|
56
|
+
// margin: 20px 0;
|
|
57
|
+
// padding: 20px;
|
|
58
|
+
// background: white;
|
|
59
|
+
// border-radius: 12px;
|
|
60
|
+
// border: 1px solid #e0e0e0;
|
|
61
|
+
// display: inline-block;
|
|
62
|
+
//}
|
|
63
|
+
//
|
|
64
|
+
//.qr-canvas,
|
|
65
|
+
//.qr-image {
|
|
66
|
+
// width: 150px;
|
|
67
|
+
// height: 150px;
|
|
68
|
+
//}
|
|
69
|
+
</style>
|
|
@@ -220,7 +220,6 @@ onUnmounted(() => {
|
|
|
220
220
|
--horizontal-panel-bg-color: #fff;
|
|
221
221
|
--trigger-bg-color: #e9ebeda3;
|
|
222
222
|
--trigger-color: #213444;
|
|
223
|
-
--new-gutter-bg-color: #e9ebed;
|
|
224
223
|
--new-gutter-hover-bg-color: #008fd6;
|
|
225
224
|
--new-gutter-before-bg-color: rgba(255, 255, 255, 0.8);
|
|
226
225
|
|
|
@@ -235,7 +234,6 @@ onUnmounted(() => {
|
|
|
235
234
|
--horizontal-panel-bg-color: #213444;
|
|
236
235
|
--trigger-bg-color: #314352;
|
|
237
236
|
--trigger-color: #e9ebed;
|
|
238
|
-
--new-gutter-bg-color: #394a58;
|
|
239
237
|
--new-gutter-hover-bg-color: #2ba2de;
|
|
240
238
|
--new-gutter-before-bg-color: rgba(33, 52, 68, 0.8);
|
|
241
239
|
}
|
|
@@ -73,7 +73,8 @@ const props = defineProps<{
|
|
|
73
73
|
.gutter-vertical {
|
|
74
74
|
position: relative;
|
|
75
75
|
min-height: 4px;
|
|
76
|
-
background-color: var(--gutter-bg-color);
|
|
76
|
+
//background-color: var(--gutter-bg-color);
|
|
77
|
+
background-color: var(--new-gutter-bg-color);
|
|
77
78
|
transition-delay: 0.25s;
|
|
78
79
|
transition-duration: 0.25s;
|
|
79
80
|
user-select: none;
|
|
@@ -175,7 +175,7 @@
|
|
|
175
175
|
</template>
|
|
176
176
|
<template #content>
|
|
177
177
|
<common-vm-actions-common-select-options
|
|
178
|
-
:is-
|
|
178
|
+
:is-new-vm-from-template="selectedCreateType === '1'"
|
|
179
179
|
@change="emits('change-select-options', $event)"
|
|
180
180
|
@change-count="emits('change-clone-count', $event)"
|
|
181
181
|
/>
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
selectedStep.id === dynamicSteps.selectOptions ||
|
|
76
76
|
selectedStep.id === dynamicSteps.selectOptionsForDeployment
|
|
77
77
|
"
|
|
78
|
-
:is-
|
|
78
|
+
:is-new-vm-from-template="selectedCreateType === '1'"
|
|
79
79
|
@change="emits('change-select-options', $event)"
|
|
80
80
|
@change-count="emits('change-clone-count', $event)"
|
|
81
81
|
/>
|
|
@@ -105,6 +105,7 @@
|
|
|
105
105
|
:index="props.hardDisksIndex[key]"
|
|
106
106
|
:type="props.hardDisksType[key]"
|
|
107
107
|
:main-storage="props.storage"
|
|
108
|
+
:main-storage-free="props.storageFree"
|
|
108
109
|
:error-validation-fields="props.errorValidationFields"
|
|
109
110
|
:get-datastore-table-func="props.getDatastoreTableFunc"
|
|
110
111
|
:datastore="props.datastore"
|
|
@@ -117,12 +118,6 @@
|
|
|
117
118
|
emits('remove-hard-disk', [props.hardDisksIndex[key], item])
|
|
118
119
|
"
|
|
119
120
|
@roll-back="emits('roll-back-hard-disk', props.hardDisksIndex[key])"
|
|
120
|
-
@send-data="
|
|
121
|
-
emits('send-data-new-hard-disk-method', [
|
|
122
|
-
$event,
|
|
123
|
-
props.hardDisksIndex[key],
|
|
124
|
-
])
|
|
125
|
-
"
|
|
126
121
|
@invalid="
|
|
127
122
|
emits('set-invalid-hard-disk', [
|
|
128
123
|
$event,
|
|
@@ -266,30 +261,21 @@
|
|
|
266
261
|
</div>
|
|
267
262
|
<template v-if="props.passthroughDevices || props.mediatedDevices">
|
|
268
263
|
<common-vm-actions-common-customize-hardware-virtual-hardware-new-pci-device
|
|
269
|
-
v-for="(item, key) in
|
|
264
|
+
v-for="(item, key) in model.passthrough_pci_devices"
|
|
265
|
+
v-model:address="item.address"
|
|
266
|
+
v-model:vendor_name="item.vendor_name"
|
|
267
|
+
v-model:class_name="item.class_name"
|
|
268
|
+
v-model:device_name="item.device_name"
|
|
269
|
+
v-model:mediated_device="item.mediated_device"
|
|
270
|
+
v-model:mediated_device_uuid="item.mediated_device_uuid"
|
|
270
271
|
:key="props.pciDevicesIndex[key]"
|
|
271
272
|
:index="props.pciDevicesIndex[key]"
|
|
272
|
-
:pci-device="item"
|
|
273
|
-
:error-validation-fields="props.errorValidationFields"
|
|
274
273
|
:passthrough-devices="props.passthroughDevices"
|
|
275
274
|
:mediated-devices="props.mediatedDevices"
|
|
276
275
|
:type="props.pciDevicesType[key]"
|
|
277
276
|
:is-edit="props.isEdit"
|
|
278
277
|
:state="props.state"
|
|
279
278
|
@remove="emits('remove-pci-device', props.pciDevicesIndex[key])"
|
|
280
|
-
@send-data="
|
|
281
|
-
emits('send-data-pci-devices-method', [
|
|
282
|
-
$event,
|
|
283
|
-
props.pciDevicesIndex[key],
|
|
284
|
-
])
|
|
285
|
-
"
|
|
286
|
-
@invalid="
|
|
287
|
-
emits('set-invalid-pci-device', [
|
|
288
|
-
$event,
|
|
289
|
-
props.pciDevicesIndex[key],
|
|
290
|
-
])
|
|
291
|
-
"
|
|
292
|
-
@remove-error-by-title="emits('remove-error-by-title', $event)"
|
|
293
279
|
/>
|
|
294
280
|
</template>
|
|
295
281
|
<common-vm-actions-common-customize-hardware-virtual-hardware-video-card
|
|
@@ -374,6 +360,7 @@ const props = withDefaults(
|
|
|
374
360
|
files: UI_I_FileTreeNode[]
|
|
375
361
|
isEdit: boolean
|
|
376
362
|
storage: UI_I_DatastoreTableItem | null
|
|
363
|
+
storageFree: number
|
|
377
364
|
project: UI_T_Project
|
|
378
365
|
maxMemory: number
|
|
379
366
|
cpuModels: UI_I_OptionItem[]
|
|
@@ -397,7 +384,6 @@ const props = withDefaults(
|
|
|
397
384
|
state?: string | number
|
|
398
385
|
// hardDisks?: UI_I_SendDataNewHardDisk[] | null
|
|
399
386
|
videoCard?: UI_I_SendDataVideoCard
|
|
400
|
-
pciDevices?: UI_I_SendDataNewPciDevice[]
|
|
401
387
|
// cdDvdDrives?: UI_I_SendDataNewCdDvdDrive[] | null
|
|
402
388
|
guestMachineType?: UI_I_OptionItem | null
|
|
403
389
|
passthroughDevices?: UI_I_PciDevice[]
|
|
@@ -410,7 +396,6 @@ const props = withDefaults(
|
|
|
410
396
|
cpu: undefined,
|
|
411
397
|
state: undefined,
|
|
412
398
|
videoCard: undefined,
|
|
413
|
-
pciDevices: undefined,
|
|
414
399
|
guestMachineType: undefined,
|
|
415
400
|
passthroughDevices: undefined,
|
|
416
401
|
mediatedDevices: undefined,
|
|
@@ -439,16 +424,7 @@ const emits = defineEmits<{
|
|
|
439
424
|
(event: 'set-invalid-hard-disk', value: [boolean, number]): void
|
|
440
425
|
(event: 'remove-error-by-title', value: string): void
|
|
441
426
|
(event: 'roll-back-cd-dvd-drive', value: number): void
|
|
442
|
-
(event: 'set-invalid-pci-device', value: [boolean, number]): void
|
|
443
427
|
(event: 'get-active-device-child', value: UI_I_FileTreeNode): void
|
|
444
|
-
(
|
|
445
|
-
event: 'send-data-pci-devices-method',
|
|
446
|
-
value: [UI_I_SendDataNewPciDevice, number]
|
|
447
|
-
): void
|
|
448
|
-
(
|
|
449
|
-
event: 'send-data-new-hard-disk-method',
|
|
450
|
-
value: [UI_I_SendDataNewHardDisk, number]
|
|
451
|
-
): void
|
|
452
428
|
(
|
|
453
429
|
event: 'send-data-new-cd-dvd-drive-method',
|
|
454
430
|
value: [UI_I_SendDataNewCdDvdDrive, number]
|
|
@@ -473,7 +449,7 @@ const deviceCount = computed<number>(
|
|
|
473
449
|
// (props.pciDevices?.length || 0) +
|
|
474
450
|
(model.value.disk_devices?.length || 0) +
|
|
475
451
|
(model.value.network_devices?.length || 0) +
|
|
476
|
-
(
|
|
452
|
+
(model.value.passthrough_pci_devices?.length || 0) +
|
|
477
453
|
6
|
|
478
454
|
)
|
|
479
455
|
const deviceCountText = computed<string>(() =>
|