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.
Files changed (105) hide show
  1. package/assets/img/icons/icons-sprite-dark-1.svg +2 -3
  2. package/assets/img/icons/icons-sprite-light-1.svg +3 -4
  3. package/assets/localization/local_be.json +47 -3
  4. package/assets/localization/local_en.json +47 -3
  5. package/assets/localization/local_hy.json +47 -3
  6. package/assets/localization/local_kk.json +47 -3
  7. package/assets/localization/local_ru.json +49 -5
  8. package/assets/localization/local_zh.json +47 -3
  9. package/assets/scss/common/icons/icons-1.scss +1 -1
  10. package/assets/scss/common/icons/icons-2.scss +18 -0
  11. package/assets/scss/common/theme.scss +2 -0
  12. package/assets/scss/components/auth.scss +32 -5
  13. package/components/atoms/dropdown/tree/Tree.vue +2 -0
  14. package/components/atoms/switch/Switch.vue +7 -1
  15. package/components/atoms/wizard/Wizard.vue +1 -1
  16. package/components/common/certificate/Certificate.vue +27 -0
  17. package/components/common/certificate/CertificateInfo.vue +139 -0
  18. package/components/common/certificate/Tools.vue +59 -0
  19. package/components/common/certificate/lib/config/tabsPannel.ts +22 -0
  20. package/components/common/certificate/lib/models/interfaces.ts +9 -0
  21. package/components/common/certificate/lib/models/types.ts +1 -0
  22. package/components/common/certificate/modals/renew/New.vue +64 -0
  23. package/components/common/certificate/modals/renew/Old.vue +122 -0
  24. package/components/common/certificate/modals/renew/Renew.vue +67 -0
  25. package/components/common/help/navbar/left/lib/utils/constructAccordion.ts +2 -1
  26. package/components/common/help/navbar/right/Right.vue +86 -23
  27. package/components/common/layout/theHeader/modals/reconnect/ReconnectOld.vue +2 -0
  28. package/components/common/layout/theHeader/userMenu/modals/changePassword/ChangePassword.vue +12 -21
  29. package/components/common/layout/theHeader/userMenu/modals/changePassword/New.vue +36 -43
  30. package/components/common/layout/theHeader/userMenu/modals/changePassword/Old.vue +0 -2
  31. package/components/common/layout/theHeader/userMenu/modals/changePassword/lib/utils.ts +1 -1
  32. package/components/common/layout/theHeader/userMenu/modals/preferences/PreferencesNew.vue +13 -0
  33. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/ChangeLanguage.vue +8 -15
  34. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageNew.vue → New.vue} +1 -2
  35. package/components/common/layout/theHeader/userMenu/modals/preferences/changeLanguage/{ChangeLanguageOld.vue → Old.vue} +0 -2
  36. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/DefaultConsole.vue +8 -7
  37. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleNew.vue → New.vue} +3 -3
  38. package/components/common/layout/theHeader/userMenu/modals/preferences/defaultConsole/{DefaultConsoleOld.vue → Old.vue} +2 -2
  39. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/Inventory.vue +7 -8
  40. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryNew.vue → New.vue} +3 -2
  41. package/components/common/layout/theHeader/userMenu/modals/preferences/inventory/{InventoryOld.vue → Old.vue} +2 -2
  42. package/components/common/layout/theHeader/userMenu/modals/preferences/security/New.vue +277 -12
  43. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Old.vue +30 -56
  44. package/components/common/layout/theHeader/userMenu/modals/preferences/security/Security.vue +65 -6
  45. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatNew.vue → New.vue} +3 -3
  46. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/{TimeFormatOld.vue → Old.vue} +2 -2
  47. package/components/common/layout/theHeader/userMenu/modals/preferences/timeFormat/TimeFormat.vue +8 -8
  48. package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewNew.vue → New.vue} +12 -3
  49. package/components/common/layout/theHeader/userMenu/modals/preferences/view/{ViewOld.vue → Old.vue} +2 -2
  50. package/components/common/layout/theHeader/userMenu/modals/preferences/view/View.vue +8 -7
  51. package/components/common/monitor/advanced/graphView/GraphView.vue +8 -0
  52. package/components/common/monitor/advanced/tools/Tools.vue +5 -1
  53. package/components/common/pages/auth/TheFooter.vue +104 -0
  54. package/components/common/pages/files/lib/models/enums.ts +10 -0
  55. package/components/common/pages/hardwareHealth/historyTestimony/tools/Tools.vue +7 -2
  56. package/components/common/pages/hardwareHealth/tableView/TableView.vue +8 -0
  57. package/components/common/pages/hardwareHealth/tableView/lib/config/sensorTable.ts +13 -1
  58. package/components/common/pages/hardwareHealth/toolsPanel/lib/config/actionsPanel.ts +4 -4
  59. package/components/common/pages/tasks/table/expandDetails/ExpandDetails.vue +1 -1
  60. package/components/common/qr/Qr.vue +69 -0
  61. package/components/common/split/horizontal/New.vue +0 -2
  62. package/components/common/split/vertical/New.vue +2 -1
  63. package/components/common/vm/actions/add/New.vue +1 -1
  64. package/components/common/vm/actions/add/Old.vue +1 -1
  65. package/components/common/vm/actions/clone/old/Old.vue +1 -0
  66. package/components/common/vm/actions/common/customizeHardware/virtualHardware/New.vue +10 -34
  67. package/components/common/vm/actions/common/customizeHardware/virtualHardware/Old.vue +15 -37
  68. package/components/common/vm/actions/common/customizeHardware/virtualHardware/VirtualHardware.vue +49 -50
  69. package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/coresPerSocket/CoresPerSocket.vue +1 -1
  70. package/components/common/vm/actions/common/customizeHardware/virtualHardware/lib/models/interfaces.ts +3 -1
  71. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newHardDisk/NewHardDisk.vue +13 -7
  72. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/New.vue +7 -4
  73. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/NewPciDevice.vue +52 -45
  74. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/Old.vue +5 -8
  75. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/DirectPathIo.vue +1 -3
  76. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/New.vue +2 -2
  77. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/directPathIo/Old.vue +2 -2
  78. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/DynamicDirectPathIo.vue +1 -1
  79. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/New.vue +1 -2
  80. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/dynamicDirectPathIo/Old.vue +1 -2
  81. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/New.vue +1 -1
  82. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/NvidiaGrid.vue +1 -1
  83. package/components/common/vm/actions/common/customizeHardware/virtualHardware/newPciDevice/nvidiaGrid/Old.vue +1 -1
  84. package/components/common/vm/actions/common/select/options/Old.vue +1 -2
  85. package/components/common/wizards/common/compatibility/New.vue +1 -1
  86. package/components/common/wizards/common/compatibility/Old.vue +1 -1
  87. package/components/common/wizards/datastore/add/lib/config/createDatastore.ts +1 -0
  88. package/components/common/wizards/datastore/add/lib/models/interfaces.ts +1 -0
  89. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceNew.vue +5 -0
  90. package/components/common/wizards/datastore/add/steps/nameAndDevice/NameAndDeviceOld.vue +5 -0
  91. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/AdvancedOptions.vue +43 -0
  92. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/New.vue +114 -0
  93. package/components/common/wizards/datastore/add/steps/nameAndDevice/advancedOptions/Old.vue +114 -0
  94. package/components/common/wizards/datastore/add/steps/nameAndDevice/table/old/Old.vue +2 -3
  95. package/components/common/wizards/datastore/add/steps/readyComplete/lib/config/propertiesDetails.ts +8 -1
  96. package/components/common/wizards/vm/migrate/lib/models/enums.ts +2 -2
  97. package/components/common/wizards/vm/migrate/steps/selectStorage/SelectStorage.vue +4 -4
  98. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/new/lib/config/diskTable.ts +6 -2
  99. package/components/common/wizards/vm/migrate/steps/selectStorage/configure/disk/table/old/lib/config/diskTable.ts +18 -12
  100. package/composables/useEnvLanguage.ts +7 -8
  101. package/lib/models/interfaces.ts +1 -0
  102. package/package.json +3 -4
  103. package/plugins/date.ts +14 -37
  104. package/store/main/getters.ts +2 -2
  105. 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="sm"
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>
@@ -1,12 +1,6 @@
1
1
  <template>
2
- <common-layout-the-header-user-menu-modals-preferences-time-format-new
3
- v-if="props.newView"
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()
@@ -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>
@@ -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
- <common-layout-the-header-user-menu-modals-preferences-view-new
3
- v-if="props.newView"
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>
@@ -0,0 +1,10 @@
1
+ export enum UI_E_DatastoreFileType {
2
+ UNKNOWN,
3
+ FOLDER,
4
+ }
5
+
6
+ export enum UI_E_FileProvisioningType {
7
+ thinProvision = 1,
8
+ thickProvisionLazyZeroed = 2,
9
+ thickProvisionEagerZeroed = 3,
10
+ }
@@ -166,7 +166,12 @@ const emits = defineEmits<{
166
166
  }>()
167
167
 
168
168
  const localization = computed<UI_I_Localization>(() => useLocal())
169
- const { $formattedDatetime }: any = useNuxtApp()
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: sensor[hardwareHealthSensorTableKeys[4]],
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
- permission: ['sensor', 'storage-sensor', 'alert-warning', 'system-log'],
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
- permission: ['sensor'],
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
- permission: ['system-log'],
28
+ allowed: ['system-log'],
29
29
  testId: 'hardware-health-reset-event-log',
30
30
  },
31
31
  ]
32
32
 
33
- return tabs.filter((tab) => tab.permission.includes(<string>selectedTab))
33
+ return tabs.filter((tab) => tab.allowed.includes(<string>selectedTab))
34
34
  }
@@ -42,7 +42,7 @@
42
42
  status="error"
43
43
  dropdown-width="232px"
44
44
  dropdown-left
45
- dropdown-top
45
+ dropdown-bottom
46
46
  />
47
47
  </div>
48
48
  </span>
@@ -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-create-template="selectedCreateType === '1'"
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-create-template="selectedCreateType === '1'"
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
  />
@@ -5,6 +5,7 @@
5
5
  :selected-scheme="props.selectedScheme"
6
6
  :title="props.title"
7
7
  :localization="localization"
8
+ test-id="clone-exist-vm"
8
9
  show
9
10
  @change-steps="emits('change-steps', $event)"
10
11
  @hide="emits('hide')"
@@ -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 props.pciDevices"
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
- (props.pciDevices?.length || 0) +
452
+ (model.value.passthrough_pci_devices?.length || 0) +
477
453
  6
478
454
  )
479
455
  const deviceCountText = computed<string>(() =>