bfg-common 1.5.759 → 1.5.760
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/CODE_STYLE.md +109 -109
- package/assets/img/icons/icons-sprite-dark-3.svg +227 -227
- package/assets/img/icons/icons-sprite-dark-5.svg +488 -488
- package/assets/img/icons/icons-sprite-light-3.svg +227 -227
- package/assets/img/icons/icons-sprite-light-5.svg +488 -488
- package/assets/localization/local_be.json +6 -3
- package/assets/localization/local_en.json +6 -3
- package/assets/localization/local_hy.json +6 -3
- package/assets/localization/local_kk.json +6 -3
- package/assets/localization/local_ru.json +6 -3
- package/assets/localization/local_zh.json +6 -3
- package/components/atoms/TheIcon3.vue +50 -50
- package/components/atoms/collapse/CollapseNav.vue +170 -170
- package/components/atoms/perPage/PerPage.vue +58 -58
- package/components/atoms/table/dataGrid/DataGridPagination.vue +97 -97
- package/components/atoms/table/dataGrid/lib/config/settingsTable.ts +94 -94
- package/components/atoms/table/dataGrid/lib/utils/export.ts +16 -16
- package/components/common/backup/storage/actions/add/lib/utils.ts +51 -51
- package/components/common/browse/blocks/contents/filesNew/Skeleton.vue +18 -18
- package/components/common/diagramMain/modals/lib/config/vCenterModal.ts +48 -48
- package/components/common/diagramMain/port/Port.vue +580 -580
- package/components/common/layout/console/Console.vue +70 -70
- package/components/common/layout/theHeader/New.vue +2 -0
- package/components/common/layout/theHeader/Old.vue +2 -0
- package/components/common/layout/theHeader/TheHeader.vue +2 -0
- package/components/common/layout/theHeader/modals/reconnect/New.vue +1 -1
- package/components/common/layout/theHeader/modals/reconnect/Reconnect.vue +3 -1
- package/components/common/layout/theHeader/userMenu/UserMenu.vue +2 -0
- package/components/common/layout/theHeader/userMenu/modals/preferences/New.vue +2 -0
- package/components/common/layout/theHeader/userMenu/modals/preferences/Old.vue +2 -0
- package/components/common/layout/theHeader/userMenu/modals/preferences/Preferences.vue +2 -0
- package/components/common/layout/theHeader/userMenu/modals/preferences/lib/models/types.ts +7 -7
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/New.vue +64 -47
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/Old.vue +19 -0
- package/components/common/layout/theHeader/userMenu/modals/preferences/view/View.vue +3 -0
- package/components/common/pages/backups/DetailView.vue +52 -52
- package/components/common/pages/backups/backupsNew/BackupsNew.vue +107 -19
- package/components/common/pages/backups/backupsNew/Skeleton.vue +136 -0
- package/components/common/pages/backups/backupsNew/contextMenuView/ContextMenuView.vue +16 -10
- package/components/common/pages/backups/lib/models/interfaces.ts +36 -36
- package/components/common/pages/backups/modals/Modals.vue +243 -243
- package/components/common/pages/backups/modals/createBackup/configuration/backupWindow/BackupWindow.vue +29 -29
- package/components/common/pages/backups/modals/createBackup/configuration/maxBandwidth/MaxBandwidth.vue +69 -69
- package/components/common/pages/backups/modals/createBackup/configuration/strategy/Strategy.vue +38 -38
- package/components/common/pages/backups/modals/createBackup/datastores/tableView/new/lib/config/table.ts +1 -1
- package/components/common/pages/backups/modals/createBackup/lib/config/strategyOptions.ts +8 -11
- package/components/common/pages/backups/modals/createBackup/lib/models/interfaces.ts +8 -8
- package/components/common/pages/backups/modals/lib/config/restore.ts +116 -116
- package/components/common/pages/backups/modals/lib/models/interfaces.ts +187 -187
- package/components/common/pages/backups/modals/restore/Restore.vue +302 -302
- package/components/common/pages/backups/modals/restore/disks/Disks.vue +50 -50
- package/components/common/pages/backups/modals/restore/lib/config/readyToCompleteOptions.ts +94 -94
- package/components/common/pages/backups/modals/restore/lib/config/steps.ts +130 -130
- package/components/common/pages/backups/modals/restore/name/lib/models/interfaces.ts +6 -6
- package/components/common/pages/backups/modals/restore/types/New.vue +95 -95
- package/components/common/pages/backups/modals/restore/types/Old.vue +62 -62
- package/components/common/pages/backups/modals/restore/types/Types.vue +31 -31
- package/components/common/pages/home/lib/models/interfaces.ts +48 -48
- package/components/common/pages/home/widgets/hosts/Hosts.vue +27 -27
- package/components/common/pages/home/widgets/hosts/lib/config/items.ts +23 -23
- package/components/common/pages/home/widgets/vms/VmsOld.vue +35 -35
- package/components/common/pages/home/widgets/vms/lib/config/items.ts +19 -19
- package/components/common/pages/scheduledTasks/lib/utils/utils.ts +84 -84
- package/components/common/pages/tasks/Tasks.vue +125 -125
- package/components/common/pages/tasks/table/Table.vue +373 -373
- package/components/common/pages/tasks/table/lib/config/config.ts +279 -279
- package/components/common/pages/tasks/table/lib/models/interfaces.ts +9 -9
- package/components/common/readyToComplete/ReadyToComplete.vue +17 -17
- package/components/common/select/radio/RadioGroup.vue +137 -137
- package/components/common/spiceConsole/Drawer.vue +420 -420
- package/components/common/spiceConsole/SpiceConsole.vue +184 -184
- package/components/common/spiceConsole/lib/models/interfaces.ts +5 -5
- package/components/common/tools/Actions.vue +207 -207
- package/components/common/treeView/TreeView.vue +52 -52
- package/components/common/vm/actions/clone/lib/config/steps.ts +295 -295
- package/components/common/vm/actions/clone/new/New.vue +438 -438
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/cpu/shares/lib/config/options.ts +28 -28
- package/components/common/vm/actions/common/customizeHardware/virtualHardware/memory/Memory.vue +283 -283
- package/components/common/vm/actions/common/customizeHardware/vmoptions/bootOptions/order/Order.vue +156 -156
- package/components/common/vm/actions/common/select/compatibility/Old.vue +107 -107
- package/components/common/vm/actions/common/select/createType/lib/models/interfaces.ts +5 -5
- package/components/common/vm/actions/common/select/options/New.vue +264 -264
- package/components/common/vm/actions/common/select/options/Options.vue +58 -58
- package/components/common/vm/actions/common/select/storage/Old.vue +125 -125
- package/components/common/vm/actions/common/select/storage/new/lib/models/interfaces.ts +5 -5
- package/components/common/vm/actions/common/select/storage/new/lib/utils/utils.ts +21 -21
- package/components/common/vm/actions/common/select/template/old/Old.vue +50 -50
- package/components/common/vm/actions/editSettings/new/Skeleton.vue +88 -88
- package/components/common/vm/snapshots/new/New.vue +11 -12
- package/components/common/vm/snapshots/new/Skeleton.vue +26 -2
- package/components/common/wizards/common/compatibility/Compatibility.vue +35 -35
- package/components/common/wizards/common/steps/name/Name.vue +178 -178
- package/components/common/wizards/common/steps/name/New.vue +221 -221
- package/components/common/wizards/common/steps/name/Old.vue +121 -121
- package/components/common/wizards/common/steps/name/lib/models/interfaces.ts +4 -4
- package/components/common/wizards/common/steps/name/location/New.vue +40 -40
- package/components/common/wizards/datastore/add/Add.vue +227 -227
- package/components/common/wizards/datastore/add/lib/utils.ts +85 -85
- package/components/common/wizards/datastore/add/steps/typeMode/lib/config/typeOptions.ts +43 -43
- package/components/common/wizards/network/add/Add.vue +9 -6
- package/components/common/wizards/network/add/lib/config/initialData.ts +2 -1
- package/composables/useAppVersion.ts +21 -21
- package/composables/useBrowse.ts +24 -24
- package/composables/useLocal.ts +6 -6
- package/composables/useLocalCommon.ts +39 -39
- package/lib/models/types.ts +59 -59
- package/package.json +1 -1
- package/plugins/console.ts +21 -21
- package/plugins/mouse.ts +21 -21
- package/plugins/panelStates.ts +70 -70
- package/plugins/text.ts +59 -59
- package/public/spice-console/application/clientgui.js +854 -854
- package/public/spice-console/application/packetfactory.js +211 -211
- package/public/spice-console/application/virtualmouse.js +147 -147
- package/public/spice-console/lib/images/bitmap.js +203 -203
- package/public/spice-console/network/spicechannel.js +440 -440
- package/public/spice-console/process/cursorprocess.js +128 -128
- package/public/spice-console/process/inputprocess.js +227 -227
- package/public/spice-console/process/mainprocess.js +212 -212
- package/public/spice-console/run.js +210 -210
- package/store/main/mutations.ts +7 -7
- package/store/main/state.ts +7 -7
- package/store/tasks/mappers/recentTasks.ts +123 -123
- package/store/tasks/mutations.ts +82 -82
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
|
+
<common-pages-backups-backups-new-skeleton v-if="props.backupsLoading" />
|
|
2
3
|
<div
|
|
4
|
+
v-else
|
|
3
5
|
:class="[
|
|
4
6
|
'backups-page grid h-inherit p-4 overflow-hidden ',
|
|
5
7
|
{ 'selected gap-3': props.detailData },
|
|
6
8
|
]"
|
|
7
9
|
>
|
|
8
|
-
<div class="left-content grid p-4">
|
|
9
|
-
<div class="flex justify-between">
|
|
10
|
+
<div class="left-content overflow-auto grid p-4">
|
|
11
|
+
<div class="flex justify-between gap-4 flex-wrap">
|
|
10
12
|
<h3 class="title-block font-[500] text-[16px]">
|
|
11
13
|
{{ localization.inventoryTabs.backups }} ({{
|
|
12
14
|
props.backupsTree.length
|
|
@@ -17,10 +19,11 @@
|
|
|
17
19
|
v-permission="props.createBackupPermission"
|
|
18
20
|
test-id="take-backup-btn"
|
|
19
21
|
size="md"
|
|
22
|
+
class="create-backup-button"
|
|
20
23
|
@click="emits('set-action', 'createBackup')"
|
|
21
24
|
>
|
|
22
|
-
<ui-icon name="plus" width="20" height="20" class="mr-2" />
|
|
23
|
-
{{ localization.common.createBackup }}
|
|
25
|
+
<ui-icon name="plus" width="20" height="20" class="mr-2 icon" />
|
|
26
|
+
{{ localization.common.createBackup }}
|
|
24
27
|
</ui-button>
|
|
25
28
|
</div>
|
|
26
29
|
<div
|
|
@@ -28,16 +31,17 @@
|
|
|
28
31
|
class="backups-tree-content overflow-y-auto my-4 px-2 pb-2"
|
|
29
32
|
>
|
|
30
33
|
<ui-tree
|
|
31
|
-
:is-loading="props.backupsLoading"
|
|
32
34
|
:nodes="props.backupsTree"
|
|
33
35
|
@select-node="emits('select-node', $event)"
|
|
34
36
|
@toggle-node="emits('show-nodes', $event.id)"
|
|
35
37
|
@show-context-menu="showContextMenu"
|
|
36
38
|
>
|
|
37
39
|
<template #content="{ node }">
|
|
38
|
-
<div class="flex-align-center">
|
|
40
|
+
<div class="flex-align-center gap-2">
|
|
39
41
|
<span :class="['node-icon', node.iconClassName]"></span>
|
|
40
|
-
<span class="node-name text-ellipsis">{{
|
|
42
|
+
<span class="node-name text-ellipsis text-3">{{
|
|
43
|
+
node.name
|
|
44
|
+
}}</span>
|
|
41
45
|
</div>
|
|
42
46
|
</template>
|
|
43
47
|
</ui-tree>
|
|
@@ -52,7 +56,7 @@
|
|
|
52
56
|
<p class="title-block font-[400] text-[16px] mt-2">
|
|
53
57
|
{{ localization.common.noBackupsAvailable }}
|
|
54
58
|
</p>
|
|
55
|
-
<p class="description-block mt-[6px] text-[13px]">
|
|
59
|
+
<p class="description-block mt-[6px] text-[13px] text-center">
|
|
56
60
|
{{ localization.common.noBackupsAvailableDesc }}
|
|
57
61
|
</p>
|
|
58
62
|
</div>
|
|
@@ -78,7 +82,7 @@
|
|
|
78
82
|
v-if="props.detailData"
|
|
79
83
|
class="backups-details overflow-hidden flex-direction-column p-4"
|
|
80
84
|
>
|
|
81
|
-
<div class="flex justify-between mb-6">
|
|
85
|
+
<div class="flex justify-between mb-6 gap-4 pr-4 flex-wrap">
|
|
82
86
|
<h3 class="title-block font-[500] text-[16px]">
|
|
83
87
|
{{ localization.common.backupDetails }}
|
|
84
88
|
</h3>
|
|
@@ -142,7 +146,13 @@
|
|
|
142
146
|
</ui-tooltip>
|
|
143
147
|
</div>
|
|
144
148
|
</div>
|
|
145
|
-
<div
|
|
149
|
+
<div
|
|
150
|
+
ref="detailsScrollBlock"
|
|
151
|
+
:class="[
|
|
152
|
+
'grid row-gap-3 pr-4 overflow-y-auto details-scroll-block',
|
|
153
|
+
{ 'has-scroll': hasScroll },
|
|
154
|
+
]"
|
|
155
|
+
>
|
|
146
156
|
<ui-info-block
|
|
147
157
|
v-for="(item, index) in currentDetailsData"
|
|
148
158
|
:key="index"
|
|
@@ -153,9 +163,12 @@
|
|
|
153
163
|
<ui-icon
|
|
154
164
|
v-if="item.labelIcon"
|
|
155
165
|
:name="item.labelIcon"
|
|
166
|
+
:class="[
|
|
167
|
+
'info-label-icon mr-[10px]',
|
|
168
|
+
`icon-name-${item.labelIcon}`,
|
|
169
|
+
]"
|
|
156
170
|
width="20"
|
|
157
171
|
height="20"
|
|
158
|
-
class="info-label-icon mr-[10px]"
|
|
159
172
|
/>
|
|
160
173
|
<span class="info-label">{{ item.label }}</span>
|
|
161
174
|
</div>
|
|
@@ -183,6 +196,8 @@
|
|
|
183
196
|
</template>
|
|
184
197
|
|
|
185
198
|
<script setup lang="ts">
|
|
199
|
+
import { useTemplateRef } from 'vue'
|
|
200
|
+
import { useElementSize } from '@vueuse/core'
|
|
186
201
|
import type { UI_I_InfoBlock } from '~/node_modules/bfg-uikit/components/ui/infoBlock/models/interfaces'
|
|
187
202
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
|
188
203
|
import type { UI_I_BackupsTreeNode } from '~/components/common/pages/backups/lib/models/interfaces'
|
|
@@ -221,6 +236,15 @@ const onSelectContextMenuItem = (actionType: UI_T_BackupActionType): void => {
|
|
|
221
236
|
const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
222
237
|
constructDetails(localization.value, props.detailData)
|
|
223
238
|
)
|
|
239
|
+
|
|
240
|
+
const detailsElement = useTemplateRef<HTMLDivElement>('detailsScrollBlock')
|
|
241
|
+
const { height } = useElementSize(detailsElement)
|
|
242
|
+
|
|
243
|
+
const hasScroll = computed<boolean>(
|
|
244
|
+
() =>
|
|
245
|
+
height.value &&
|
|
246
|
+
detailsElement.value?.scrollHeight > detailsElement.value?.clientHeight
|
|
247
|
+
)
|
|
224
248
|
</script>
|
|
225
249
|
|
|
226
250
|
<style>
|
|
@@ -228,7 +252,9 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
228
252
|
--backups-page-inner-block-bg: #ffffff;
|
|
229
253
|
--backups-page-title-color: #4d5d69;
|
|
230
254
|
--backups-page-tree-border-color: #e9ebed;
|
|
255
|
+
--backups-page-tree-block-bg-color: #ffffff;
|
|
231
256
|
--backups-page-details-action-color: #4d5d69;
|
|
257
|
+
--backups-page-details-action-line-color: #e9ebeda3;
|
|
232
258
|
--backups-page-details-action-hover-color: #213444;
|
|
233
259
|
--backups-page-info-block-label-color: #4d5d69;
|
|
234
260
|
--backups-page-info-block-value-color: #182531;
|
|
@@ -237,7 +263,9 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
237
263
|
--backups-page-inner-block-bg: #334453;
|
|
238
264
|
--backups-page-title-color: #e9eaec;
|
|
239
265
|
--backups-page-tree-border-color: #e9ebed1f;
|
|
266
|
+
--backups-page-tree-block-bg-color: #1b2a371f;
|
|
240
267
|
--backups-page-details-action-color: #e9eaec;
|
|
268
|
+
--backups-page-details-action-line-color: #e9ebed1f;
|
|
241
269
|
--backups-page-details-action-hover-color: #ffffff;
|
|
242
270
|
--backups-page-info-block-label-color: #e9eaec;
|
|
243
271
|
--backups-page-info-block-value-color: #e9eaec;
|
|
@@ -253,6 +281,13 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
253
281
|
.title-block {
|
|
254
282
|
color: var(--backups-page-title-color);
|
|
255
283
|
}
|
|
284
|
+
.create-backup-button {
|
|
285
|
+
white-space: nowrap;
|
|
286
|
+
|
|
287
|
+
.icon {
|
|
288
|
+
min-width: 20px;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
256
291
|
|
|
257
292
|
.left-content {
|
|
258
293
|
background-color: var(--backups-page-inner-block-bg);
|
|
@@ -263,15 +298,24 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
263
298
|
.backups-tree-content {
|
|
264
299
|
border: 1px solid var(--backups-page-tree-border-color);
|
|
265
300
|
border-radius: 8px;
|
|
301
|
+
background-color: var(--backups-page-tree-block-bg-color);
|
|
266
302
|
|
|
267
|
-
:deep(.tree-
|
|
268
|
-
|
|
303
|
+
:deep(.tree-container) {
|
|
304
|
+
width: max-content;
|
|
305
|
+
min-width: 100%;
|
|
269
306
|
|
|
270
|
-
.
|
|
271
|
-
|
|
307
|
+
.tree-content {
|
|
308
|
+
//padding-right: 8px;
|
|
272
309
|
|
|
273
|
-
.node-
|
|
274
|
-
|
|
310
|
+
.node-wrapper {
|
|
311
|
+
border-radius: 4px;
|
|
312
|
+
|
|
313
|
+
.toggle-button-empty {
|
|
314
|
+
display: none;
|
|
315
|
+
}
|
|
316
|
+
.node-element {
|
|
317
|
+
line-height: 20px;
|
|
318
|
+
}
|
|
275
319
|
}
|
|
276
320
|
}
|
|
277
321
|
}
|
|
@@ -283,6 +327,10 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
283
327
|
}
|
|
284
328
|
}
|
|
285
329
|
.delete-all {
|
|
330
|
+
&.disabled {
|
|
331
|
+
color: #bdc3c7;
|
|
332
|
+
}
|
|
333
|
+
|
|
286
334
|
&:not(.disabled) {
|
|
287
335
|
color: #ea3223;
|
|
288
336
|
}
|
|
@@ -292,12 +340,18 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
292
340
|
background-color: var(--backups-page-inner-block-bg);
|
|
293
341
|
box-shadow: 0 1px 4px 0 #00000014;
|
|
294
342
|
border-radius: 8px;
|
|
343
|
+
padding-right: 0;
|
|
295
344
|
|
|
296
345
|
.details-actions-block {
|
|
297
346
|
.border-line {
|
|
298
347
|
width: 1px;
|
|
299
348
|
height: 20px;
|
|
300
|
-
background-color:
|
|
349
|
+
background-color: var(--backups-page-details-action-line-color);
|
|
350
|
+
}
|
|
351
|
+
.restore-backups-btn {
|
|
352
|
+
:deep(path) {
|
|
353
|
+
stroke-width: 1.7;
|
|
354
|
+
}
|
|
301
355
|
}
|
|
302
356
|
.restore-backups-btn,
|
|
303
357
|
.edit-backups-btn {
|
|
@@ -311,18 +365,38 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
311
365
|
color: #ea3223;
|
|
312
366
|
}
|
|
313
367
|
}
|
|
368
|
+
.details-scroll-block {
|
|
369
|
+
padding-right: 0;
|
|
370
|
+
|
|
371
|
+
&:not(.has-scroll) {
|
|
372
|
+
padding-right: 16px;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
314
375
|
.info-block-label-content {
|
|
315
376
|
.info-label-icon {
|
|
316
377
|
color: #9da6ad;
|
|
317
378
|
min-width: 20px;
|
|
379
|
+
|
|
380
|
+
&.icon-name-vsphere-icon-storage-system-refresh {
|
|
381
|
+
:deep(path) {
|
|
382
|
+
stroke-width: 1.4;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
318
385
|
}
|
|
319
386
|
.info-label {
|
|
320
|
-
margin-top:
|
|
387
|
+
margin-top: 1px;
|
|
388
|
+
line-height: 18px;
|
|
321
389
|
color: var(--backups-page-info-block-label-color);
|
|
322
390
|
}
|
|
323
391
|
}
|
|
324
392
|
.empty-description {
|
|
325
393
|
color: #9da6ad;
|
|
394
|
+
margin-top: 1px;
|
|
395
|
+
line-height: 18px;
|
|
396
|
+
text-align: right;
|
|
397
|
+
}
|
|
398
|
+
:deep(.ui-main-info-block-item) {
|
|
399
|
+
grid-column-gap: 10px;
|
|
326
400
|
}
|
|
327
401
|
:deep(.ui-main-info-block-item-right) {
|
|
328
402
|
white-space: unset !important;
|
|
@@ -333,12 +407,25 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
333
407
|
}
|
|
334
408
|
:deep(.ui-main-info-block-item-right-value) {
|
|
335
409
|
color: var(--backups-page-info-block-value-color);
|
|
410
|
+
font-size: 13px;
|
|
411
|
+
font-weight: 400;
|
|
412
|
+
line-height: 18px;
|
|
413
|
+
margin-top: 1px;
|
|
336
414
|
}
|
|
337
415
|
:deep(.ui-main-info-block-item-right-open) {
|
|
338
416
|
display: none;
|
|
339
417
|
}
|
|
340
418
|
}
|
|
341
419
|
}
|
|
420
|
+
:root.dark-theme {
|
|
421
|
+
.left-content {
|
|
422
|
+
.delete-all {
|
|
423
|
+
&.disabled {
|
|
424
|
+
opacity: 0.44;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
342
429
|
|
|
343
430
|
@media (max-width: 1200px) {
|
|
344
431
|
.backups-page {
|
|
@@ -346,6 +433,7 @@ const currentDetailsData = computed<UI_I_InfoBlock[]>(() =>
|
|
|
346
433
|
|
|
347
434
|
&.selected {
|
|
348
435
|
grid-template-columns: 1fr;
|
|
436
|
+
grid-template-rows: minmax(189px, 1fr) 1fr;
|
|
349
437
|
}
|
|
350
438
|
|
|
351
439
|
.backups-details {
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="skeleton-page grid gap-3 p-4 h-inherit overflow-hidden">
|
|
3
|
+
<div class="left-content grid p-4">
|
|
4
|
+
<div class="flex justify-between gap-4 flex-wrap">
|
|
5
|
+
<ui-skeleton-item width="80" height="20" />
|
|
6
|
+
<ui-skeleton-item width="160" height="36" />
|
|
7
|
+
</div>
|
|
8
|
+
<div class="border-block flex flex-col py-3 px-4 my-4">
|
|
9
|
+
<ui-skeleton-item width="100%" height="20" />
|
|
10
|
+
<ui-skeleton-item width="50%" height="20" />
|
|
11
|
+
<ui-skeleton-item width="30%" height="20" />
|
|
12
|
+
<ui-skeleton-item width="70%" height="20" />
|
|
13
|
+
<ui-skeleton-item width="20%" height="20" />
|
|
14
|
+
<ui-skeleton-item width="50%" height="20" />
|
|
15
|
+
<ui-skeleton-item width="80%" height="20" />
|
|
16
|
+
<ui-skeleton-item width="70%" height="20" />
|
|
17
|
+
<ui-skeleton-item width="20%" height="20" />
|
|
18
|
+
</div>
|
|
19
|
+
<ui-skeleton-item width="96" height="20" class="ml-auto" />
|
|
20
|
+
</div>
|
|
21
|
+
<div class="right-content grid p-4">
|
|
22
|
+
<div class="flex justify-between gap-4 pr-4 flex-wrap top-container">
|
|
23
|
+
<ui-skeleton-item width="80" height="20" />
|
|
24
|
+
<div class="actions-block flex">
|
|
25
|
+
<ui-skeleton-item width="20" height="20" />
|
|
26
|
+
<div class="line-border"></div>
|
|
27
|
+
<ui-skeleton-item width="20" height="20" />
|
|
28
|
+
<div class="line-border"></div>
|
|
29
|
+
<ui-skeleton-item width="20" height="20" />
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
<div
|
|
33
|
+
ref="detailsScrollBlock"
|
|
34
|
+
:class="[
|
|
35
|
+
'details-block flex flex-col my-6',
|
|
36
|
+
{ 'has-scroll': hasScroll },
|
|
37
|
+
]"
|
|
38
|
+
>
|
|
39
|
+
<div
|
|
40
|
+
v-for="index in detailsItemsCount"
|
|
41
|
+
:key="index"
|
|
42
|
+
class="details-block-item flex p-3"
|
|
43
|
+
>
|
|
44
|
+
<ui-skeleton-item width="20" height="20" class="mr-[10px]" />
|
|
45
|
+
<ui-skeleton-item width="144" height="20" />
|
|
46
|
+
<ui-skeleton-item width="144" height="20" class="ml-auto" />
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</template>
|
|
52
|
+
|
|
53
|
+
<script setup lang="ts">
|
|
54
|
+
import { useTemplateRef } from 'vue'
|
|
55
|
+
import { useElementSize } from '@vueuse/core'
|
|
56
|
+
|
|
57
|
+
const detailsItemsCount = ref<number>(3)
|
|
58
|
+
|
|
59
|
+
const detailsElement = useTemplateRef<HTMLDivElement>('detailsScrollBlock')
|
|
60
|
+
const { height } = useElementSize(detailsElement)
|
|
61
|
+
|
|
62
|
+
const hasScroll = computed<boolean>(
|
|
63
|
+
() =>
|
|
64
|
+
height.value &&
|
|
65
|
+
detailsElement.value?.scrollHeight > detailsElement.value?.clientHeight
|
|
66
|
+
)
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<style>
|
|
70
|
+
:root {
|
|
71
|
+
--backups-left-skeleton-border-color: #e9ebed;
|
|
72
|
+
--backups-right-skeleton-action-line-border-color: #e9ebeda3;
|
|
73
|
+
--backups-right-skeleton-item-bg-color: #e9ebed66;
|
|
74
|
+
}
|
|
75
|
+
:root.dark-theme {
|
|
76
|
+
--backups-left-skeleton-border-color: #e9ebed1f;
|
|
77
|
+
--backups-right-skeleton-action-line-border-color: #e9ebed1f;
|
|
78
|
+
--backups-right-skeleton-item-bg-color: #e9ebed0f;
|
|
79
|
+
}
|
|
80
|
+
</style>
|
|
81
|
+
|
|
82
|
+
<style scoped lang="scss">
|
|
83
|
+
.skeleton-page {
|
|
84
|
+
grid-template-columns: repeat(2, calc(50% - 6px));
|
|
85
|
+
|
|
86
|
+
.left-content,
|
|
87
|
+
.right-content {
|
|
88
|
+
background-color: var(--backups-page-inner-block-bg);
|
|
89
|
+
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.0784313725);
|
|
90
|
+
border-radius: 8px;
|
|
91
|
+
grid-template-rows: max-content 1fr max-content;
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
}
|
|
94
|
+
.border-block {
|
|
95
|
+
border: 1px solid var(--backups-left-skeleton-border-color);
|
|
96
|
+
border-radius: 8px;
|
|
97
|
+
grid-row-gap: 10px;
|
|
98
|
+
overflow: auto;
|
|
99
|
+
|
|
100
|
+
:deep(.skeleton-item) {
|
|
101
|
+
min-height: 20px;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
.right-content {
|
|
105
|
+
padding-right: 0;
|
|
106
|
+
|
|
107
|
+
.top-container {
|
|
108
|
+
.actions-block {
|
|
109
|
+
grid-column-gap: 10px;
|
|
110
|
+
|
|
111
|
+
.line-border {
|
|
112
|
+
border: 1px solid
|
|
113
|
+
var(--backups-right-skeleton-action-line-border-color);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
.details-block {
|
|
118
|
+
grid-row-gap: 10px;
|
|
119
|
+
overflow: auto;
|
|
120
|
+
|
|
121
|
+
&:not(.has-scroll) {
|
|
122
|
+
padding-right: 16px;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.details-block-item {
|
|
126
|
+
background-color: var(--backups-right-skeleton-item-bg-color);
|
|
127
|
+
border-radius: 6px;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
:deep(.skeleton-item) {
|
|
131
|
+
min-height: 20px;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
</style>
|
|
@@ -80,20 +80,26 @@ const onSelectContextMenuItem = (item: UI_I_ContextMenuItem): void => {
|
|
|
80
80
|
|
|
81
81
|
<style scoped lang="scss">
|
|
82
82
|
.backups-context-menu-view {
|
|
83
|
-
:deep(.
|
|
84
|
-
|
|
85
|
-
display: none;
|
|
86
|
-
}
|
|
83
|
+
:deep(.context-wrap) {
|
|
84
|
+
min-width: 112px;
|
|
87
85
|
|
|
88
|
-
.item
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
.menu-item {
|
|
87
|
+
.context-icon {
|
|
88
|
+
display: none;
|
|
89
|
+
}
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
.item-ui-icon {
|
|
92
|
+
margin-right: 8px;
|
|
93
|
+
width: 16px;
|
|
94
|
+
height: 16px;
|
|
95
|
+
}
|
|
94
96
|
|
|
95
|
-
|
|
97
|
+
&:last-child {
|
|
96
98
|
color: #ea3223;
|
|
99
|
+
|
|
100
|
+
.context-link:hover {
|
|
101
|
+
color: #ea3223;
|
|
102
|
+
}
|
|
97
103
|
}
|
|
98
104
|
}
|
|
99
105
|
}
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import type { API_UI_I_DataTable } from '~/lib/models/table/interfaces'
|
|
2
|
-
import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
|
|
3
|
-
import type { UI_T_BackupActionType } from '~/components/common/pages/backups/lib/models/types'
|
|
4
|
-
|
|
5
|
-
export interface API_UI_I_Backup {
|
|
6
|
-
creation_time: number
|
|
7
|
-
creation_type: number
|
|
8
|
-
description: string
|
|
9
|
-
kind: number // TODO
|
|
10
|
-
msg: string
|
|
11
|
-
name: string
|
|
12
|
-
state: number // TODO
|
|
13
|
-
uuid: string
|
|
14
|
-
vm_name: string
|
|
15
|
-
vmid: string
|
|
16
|
-
storage_id: string
|
|
17
|
-
storage_name: string
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface UI_I_Backup extends API_UI_I_Backup {}
|
|
21
|
-
|
|
22
|
-
export interface UI_I_BackupsTreeNode
|
|
23
|
-
extends UI_I_TreeNode<UI_I_BackupsTreeNode> {
|
|
24
|
-
parent_id: string
|
|
25
|
-
timestamp: string
|
|
26
|
-
description: string
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface UI_I_BackupAction {
|
|
30
|
-
action: UI_T_BackupActionType | ''
|
|
31
|
-
id?: string
|
|
32
|
-
name?: string
|
|
33
|
-
backupId?: string
|
|
34
|
-
bucketId?: string
|
|
35
|
-
storageId?: string
|
|
36
|
-
}
|
|
1
|
+
import type { API_UI_I_DataTable } from '~/lib/models/table/interfaces'
|
|
2
|
+
import type { UI_I_TreeNode } from '~/components/common/recursionTree/lib/models/interfaces'
|
|
3
|
+
import type { UI_T_BackupActionType } from '~/components/common/pages/backups/lib/models/types'
|
|
4
|
+
|
|
5
|
+
export interface API_UI_I_Backup {
|
|
6
|
+
creation_time: number
|
|
7
|
+
creation_type: number
|
|
8
|
+
description: string
|
|
9
|
+
kind: number // TODO
|
|
10
|
+
msg: string
|
|
11
|
+
name: string
|
|
12
|
+
state: number // TODO
|
|
13
|
+
uuid: string
|
|
14
|
+
vm_name: string
|
|
15
|
+
vmid: string
|
|
16
|
+
storage_id: string
|
|
17
|
+
storage_name: string
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface UI_I_Backup extends API_UI_I_Backup {}
|
|
21
|
+
|
|
22
|
+
export interface UI_I_BackupsTreeNode
|
|
23
|
+
extends UI_I_TreeNode<UI_I_BackupsTreeNode> {
|
|
24
|
+
parent_id: string
|
|
25
|
+
timestamp: string
|
|
26
|
+
description: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface UI_I_BackupAction {
|
|
30
|
+
action: UI_T_BackupActionType | ''
|
|
31
|
+
id?: string
|
|
32
|
+
name?: string
|
|
33
|
+
backupId?: string
|
|
34
|
+
bucketId?: string
|
|
35
|
+
storageId?: string
|
|
36
|
+
}
|