bfg-common 1.5.453 → 1.5.454
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 +2 -1
- package/assets/localization/local_en.json +2 -1
- package/assets/localization/local_hy.json +2 -1
- package/assets/localization/local_kk.json +2 -1
- package/assets/localization/local_ru.json +2 -1
- package/assets/localization/local_zh.json +2 -1
- package/components/atoms/table/dataGrid/DataGrid.vue +15 -0
- package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalOld.vue +6 -6
- package/components/common/pages/backups/Backups.vue +102 -102
- package/components/common/pages/backups/modals/Modals.vue +5 -2
- package/components/common/pages/backups/modals/createBackup/CreateBackup.vue +1 -1
- package/components/common/pages/backups/modals/createBackup/datastores/Datastores.vue +59 -59
- package/package.json +1 -1
@@ -2749,7 +2749,8 @@
|
|
2749
2749
|
"template": "Шаблон",
|
2750
2750
|
"convertToTemplate": "Пераўтварыць у шаблон",
|
2751
2751
|
"newTemplate": "Новы шаблон",
|
2752
|
-
"createTemplateFromVM": "Стварыць шаблон з ВМ"
|
2752
|
+
"createTemplateFromVM": "Стварыць шаблон з ВМ",
|
2753
|
+
"actionsNumObjects": "Дзеянні – {0} аб’ектаў"
|
2753
2754
|
},
|
2754
2755
|
"networks": {
|
2755
2756
|
"active_ports": "Актыўныя Парты",
|
@@ -2753,7 +2753,8 @@
|
|
2753
2753
|
"template": "Template",
|
2754
2754
|
"convertToTemplate": "Convert to Template",
|
2755
2755
|
"newTemplate": "New Template",
|
2756
|
-
"createTemplateFromVM": "Create Template from VM"
|
2756
|
+
"createTemplateFromVM": "Create Template from VM",
|
2757
|
+
"actionsNumObjects": "Actions - {0} Objects"
|
2757
2758
|
},
|
2758
2759
|
"networks": {
|
2759
2760
|
"active_ports": "Active ports",
|
@@ -2753,7 +2753,8 @@
|
|
2753
2753
|
"template": "Ձևանմուշ",
|
2754
2754
|
"convertToTemplate": "Վերափոխել ձևանմուշի",
|
2755
2755
|
"newTemplate": "Նոր ձևանմուշ",
|
2756
|
-
"createTemplateFromVM": "Ստեղծել ձևանմուշ ՎՄ-ից"
|
2756
|
+
"createTemplateFromVM": "Ստեղծել ձևանմուշ ՎՄ-ից",
|
2757
|
+
"actionsNumObjects": "Գործողություններ – {0} օբյեկտ"
|
2757
2758
|
},
|
2758
2759
|
"networks": {
|
2759
2760
|
"active_ports": "Ակտիվ պորտեր",
|
@@ -2752,7 +2752,8 @@
|
|
2752
2752
|
"template": "Үлгі",
|
2753
2753
|
"convertToTemplate": "Үлгіге айналдыру",
|
2754
2754
|
"newTemplate": "Жаңа үлгі",
|
2755
|
-
"createTemplateFromVM": "ВМ негізінде үлгі жасау"
|
2755
|
+
"createTemplateFromVM": "ВМ негізінде үлгі жасау",
|
2756
|
+
"actionsNumObjects": "Әрекеттер – {0} нысан"
|
2756
2757
|
},
|
2757
2758
|
"networks": {
|
2758
2759
|
"active_ports": "Белсенді порттар",
|
@@ -2752,7 +2752,8 @@
|
|
2752
2752
|
"template": "Шаблон",
|
2753
2753
|
"convertToTemplate": "Преобразовать в шаблон",
|
2754
2754
|
"newTemplate": "Новый шаблон",
|
2755
|
-
"createTemplateFromVM": "Создать шаблон из ВМ"
|
2755
|
+
"createTemplateFromVM": "Создать шаблон из ВМ",
|
2756
|
+
"actionsNumObjects": "Действия – {0} объектов"
|
2756
2757
|
},
|
2757
2758
|
"networks": {
|
2758
2759
|
"active_ports": "Активные порты",
|
@@ -2750,7 +2750,8 @@
|
|
2750
2750
|
"template": "模板",
|
2751
2751
|
"convertToTemplate": "转换为模板",
|
2752
2752
|
"newTemplate": "新模板",
|
2753
|
-
"createTemplateFromVM": "从虚拟机创建模板"
|
2753
|
+
"createTemplateFromVM": "从虚拟机创建模板",
|
2754
|
+
"actionsNumObjects": "操作 – {0} 个对象"
|
2754
2755
|
},
|
2755
2756
|
"networks": {
|
2756
2757
|
"active_ports": "活动端口",
|
@@ -211,6 +211,7 @@
|
|
211
211
|
:data-id="`${item[0].testId}-select-row`"
|
212
212
|
class="datagrid-row-master datagrid-row-flex"
|
213
213
|
@click.stop="selectRowById(item[0])"
|
214
|
+
@contextmenu.prevent="onShowContextMenu($event, item[0])"
|
214
215
|
>
|
215
216
|
<div
|
216
217
|
v-if="props.type || $slots.toggleBlock"
|
@@ -601,6 +602,7 @@ const emits = defineEmits<{
|
|
601
602
|
(event: 'sorting', value: [string, boolean]): void
|
602
603
|
(event: 'change', value: any): void
|
603
604
|
(event: 'row-detail', value: number): void
|
605
|
+
(event: 'show-context-menu', value: Event): void
|
604
606
|
}>()
|
605
607
|
|
606
608
|
const localization = computed<UI_I_Localization>(() => useLocal())
|
@@ -1086,6 +1088,19 @@ const exportSelected = (): void => {
|
|
1086
1088
|
generateCsvAndDownload([header, ...Array.from(rows)])
|
1087
1089
|
}
|
1088
1090
|
|
1091
|
+
const onShowContextMenu = (event: Event, item: UI_I_BodyItem): void => {
|
1092
|
+
const { id } = item
|
1093
|
+
let has = false
|
1094
|
+
if (props.type === 'checkbox' && Array.isArray(selectedRowLocal.value)) {
|
1095
|
+
has = selectedRowLocal.value.includes(id)
|
1096
|
+
} else {
|
1097
|
+
has = selectedRowLocal.value === id
|
1098
|
+
}
|
1099
|
+
if (!has) selectRowById(item)
|
1100
|
+
|
1101
|
+
emits('show-context-menu', event)
|
1102
|
+
}
|
1103
|
+
|
1089
1104
|
onMounted(() => {
|
1090
1105
|
window.addEventListener('mousemove', mousemove)
|
1091
1106
|
window.addEventListener('mouseup', mouseup)
|
package/components/common/monitor/overview/filters/customIntervalModal/CustomIntervalModalOld.vue
CHANGED
@@ -107,12 +107,12 @@
|
|
107
107
|
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
108
108
|
|
109
109
|
const alertShow = defineModel<boolean>('alert-show')
|
110
|
-
const currentDateFrom = defineModel<
|
111
|
-
const dateFrom = defineModel<
|
112
|
-
const currentTimeFrom = defineModel<
|
113
|
-
const currentDateTo = defineModel<
|
114
|
-
const dateTo = defineModel<
|
115
|
-
const currentTimeTo = defineModel<
|
110
|
+
const currentDateFrom = defineModel<string>('current-date-from')
|
111
|
+
const dateFrom = defineModel<number>('date-from')
|
112
|
+
const currentTimeFrom = defineModel<string>('current-time-from')
|
113
|
+
const currentDateTo = defineModel<string>('current-date-to')
|
114
|
+
const dateTo = defineModel<number>('date-to')
|
115
|
+
const currentTimeTo = defineModel<string>('current-time-to')
|
116
116
|
|
117
117
|
const props = defineProps<{
|
118
118
|
titleIntervalModal: string
|
@@ -1,102 +1,102 @@
|
|
1
|
-
<template>
|
2
|
-
<div class="main-content-backups h-full overflow-hidden">
|
3
|
-
<common-pages-backups-tools
|
4
|
-
:project="props.project"
|
5
|
-
:backups-count="backupsTree.length"
|
6
|
-
:backups-loading="backupsLoading"
|
7
|
-
:selected-node="selectedNode"
|
8
|
-
:target-type="typeFromRoute"
|
9
|
-
@select="onShowModal"
|
10
|
-
/>
|
11
|
-
|
12
|
-
<atoms-loader-pre-loader
|
13
|
-
v-show="backupsLoading"
|
14
|
-
id="loader"
|
15
|
-
:show="true"
|
16
|
-
class="backups-loading w-full h-full flex items-center justify-center"
|
17
|
-
test-id="backups-tree-spinner"
|
18
|
-
/>
|
19
|
-
<div class="fill-parent w-full h-full">
|
20
|
-
<div v-if="backupsTree.length" class="backup-view mt-1 flex w-full">
|
21
|
-
<common-tree-view
|
22
|
-
:loading="backupsLoading"
|
23
|
-
:nodes="backupsTree"
|
24
|
-
@select-node="onSelectNode"
|
25
|
-
@show-nodes="onShowNodes"
|
26
|
-
/>
|
27
|
-
<common-pages-backups-detail-view :detail="detailData" />
|
28
|
-
</div>
|
29
|
-
<div v-else class="empty-block flex justify-center items-center w-full">
|
30
|
-
{{ localization.common.noBackupAvailable }}
|
31
|
-
</div>
|
32
|
-
</div>
|
33
|
-
</div>
|
34
|
-
</template>
|
35
|
-
|
36
|
-
<script setup lang="ts">
|
37
|
-
import type { UI_T_Project } from '~/lib/models/types'
|
38
|
-
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
39
|
-
import type {
|
40
|
-
UI_T_TargetType,
|
41
|
-
UI_T_BackupActionType,
|
42
|
-
} from '~/components/common/pages/backups/lib/models/types'
|
43
|
-
import type {
|
44
|
-
UI_I_Backup,
|
45
|
-
UI_I_BackupsTreeNode,
|
46
|
-
} from '~/components/common/pages/backups/lib/models/interfaces'
|
47
|
-
|
48
|
-
const props = defineProps<{
|
49
|
-
project: UI_T_Project
|
50
|
-
backups: UI_I_Backup[]
|
51
|
-
backupsTree: UI_I_BackupsTreeNode[]
|
52
|
-
backupsLoading: boolean
|
53
|
-
selectedNode: UI_I_BackupsTreeNode
|
54
|
-
}>()
|
55
|
-
const emits = defineEmits<{
|
56
|
-
(event: 'select-node', value: string | number): void
|
57
|
-
(event: 'show-nodes', value: string | number): void
|
58
|
-
(event: 'set-action', value: UI_T_BackupActionType): void
|
59
|
-
}>()
|
60
|
-
|
61
|
-
const localization = computed<UI_I_Localization>(() => useLocal())
|
62
|
-
const { $recursion }: any = useNuxtApp()
|
63
|
-
|
64
|
-
const typeFromRoute = computed<UI_T_TargetType>(
|
65
|
-
() => useRoute().params.type.toString() as UI_T_TargetType
|
66
|
-
)
|
67
|
-
|
68
|
-
const detailData = computed<UI_I_BackupsTreeNode | null>(() => {
|
69
|
-
const node =
|
70
|
-
$recursion.find(props.backupsTree, true, 'isActive', 'nodes') || null
|
71
|
-
return node?.type === 'backup' ? node : null
|
72
|
-
})
|
73
|
-
|
74
|
-
const onSelectNode = (item: UI_I_BackupsTreeNode): void => {
|
75
|
-
emits('select-node', item.id)
|
76
|
-
if (item.type === 'group') {
|
77
|
-
onShowNodes(item.id.toString())
|
78
|
-
}
|
79
|
-
}
|
80
|
-
const onShowNodes = (id: string | number): void => {
|
81
|
-
emits('show-nodes', id)
|
82
|
-
}
|
83
|
-
|
84
|
-
const onShowModal = (action: UI_T_BackupActionType): void => {
|
85
|
-
emits('set-action', action)
|
86
|
-
}
|
87
|
-
</script>
|
88
|
-
|
89
|
-
<style scoped lang="scss">
|
90
|
-
.main-content-backups {
|
91
|
-
padding: 10px 5px 10px 0;
|
92
|
-
|
93
|
-
.fill-parent {
|
94
|
-
overflow: visible;
|
95
|
-
|
96
|
-
.backup-view {
|
97
|
-
// TODO fix
|
98
|
-
height: calc(90% - 24px);
|
99
|
-
}
|
100
|
-
}
|
101
|
-
}
|
102
|
-
</style>
|
1
|
+
<template>
|
2
|
+
<div class="main-content-backups h-full overflow-hidden">
|
3
|
+
<common-pages-backups-tools
|
4
|
+
:project="props.project"
|
5
|
+
:backups-count="backupsTree.length"
|
6
|
+
:backups-loading="backupsLoading"
|
7
|
+
:selected-node="selectedNode"
|
8
|
+
:target-type="typeFromRoute"
|
9
|
+
@select="onShowModal"
|
10
|
+
/>
|
11
|
+
|
12
|
+
<atoms-loader-pre-loader
|
13
|
+
v-show="backupsLoading"
|
14
|
+
id="loader"
|
15
|
+
:show="true"
|
16
|
+
class="backups-loading w-full h-full flex items-center justify-center"
|
17
|
+
test-id="backups-tree-spinner"
|
18
|
+
/>
|
19
|
+
<div class="fill-parent w-full h-full">
|
20
|
+
<div v-if="backupsTree.length" class="backup-view mt-1 flex w-full">
|
21
|
+
<common-tree-view
|
22
|
+
:loading="backupsLoading"
|
23
|
+
:nodes="backupsTree"
|
24
|
+
@select-node="onSelectNode"
|
25
|
+
@show-nodes="onShowNodes"
|
26
|
+
/>
|
27
|
+
<common-pages-backups-detail-view :detail="detailData" />
|
28
|
+
</div>
|
29
|
+
<div v-else class="empty-block flex justify-center items-center w-full">
|
30
|
+
{{ localization.common.noBackupAvailable }}
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</template>
|
35
|
+
|
36
|
+
<script setup lang="ts">
|
37
|
+
import type { UI_T_Project } from '~/lib/models/types'
|
38
|
+
import type { UI_I_Localization } from '~/lib/models/interfaces'
|
39
|
+
import type {
|
40
|
+
UI_T_TargetType,
|
41
|
+
UI_T_BackupActionType,
|
42
|
+
} from '~/components/common/pages/backups/lib/models/types'
|
43
|
+
import type {
|
44
|
+
UI_I_Backup,
|
45
|
+
UI_I_BackupsTreeNode,
|
46
|
+
} from '~/components/common/pages/backups/lib/models/interfaces'
|
47
|
+
|
48
|
+
const props = defineProps<{
|
49
|
+
project: UI_T_Project
|
50
|
+
backups: UI_I_Backup[]
|
51
|
+
backupsTree: UI_I_BackupsTreeNode[]
|
52
|
+
backupsLoading: boolean
|
53
|
+
selectedNode: UI_I_BackupsTreeNode | null
|
54
|
+
}>()
|
55
|
+
const emits = defineEmits<{
|
56
|
+
(event: 'select-node', value: string | number): void
|
57
|
+
(event: 'show-nodes', value: string | number): void
|
58
|
+
(event: 'set-action', value: UI_T_BackupActionType): void
|
59
|
+
}>()
|
60
|
+
|
61
|
+
const localization = computed<UI_I_Localization>(() => useLocal())
|
62
|
+
const { $recursion }: any = useNuxtApp()
|
63
|
+
|
64
|
+
const typeFromRoute = computed<UI_T_TargetType>(
|
65
|
+
() => useRoute().params.type.toString() as UI_T_TargetType
|
66
|
+
)
|
67
|
+
|
68
|
+
const detailData = computed<UI_I_BackupsTreeNode | null>(() => {
|
69
|
+
const node =
|
70
|
+
$recursion.find(props.backupsTree, true, 'isActive', 'nodes') || null
|
71
|
+
return node?.type === 'backup' ? node : null
|
72
|
+
})
|
73
|
+
|
74
|
+
const onSelectNode = (item: UI_I_BackupsTreeNode): void => {
|
75
|
+
emits('select-node', item.id)
|
76
|
+
if (item.type === 'group') {
|
77
|
+
onShowNodes(item.id.toString())
|
78
|
+
}
|
79
|
+
}
|
80
|
+
const onShowNodes = (id: string | number): void => {
|
81
|
+
emits('show-nodes', id)
|
82
|
+
}
|
83
|
+
|
84
|
+
const onShowModal = (action: UI_T_BackupActionType): void => {
|
85
|
+
emits('set-action', action)
|
86
|
+
}
|
87
|
+
</script>
|
88
|
+
|
89
|
+
<style scoped lang="scss">
|
90
|
+
.main-content-backups {
|
91
|
+
padding: 10px 5px 10px 0;
|
92
|
+
|
93
|
+
.fill-parent {
|
94
|
+
overflow: visible;
|
95
|
+
|
96
|
+
.backup-view {
|
97
|
+
// TODO fix
|
98
|
+
height: calc(90% - 24px);
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
</style>
|
@@ -43,7 +43,10 @@
|
|
43
43
|
<script lang="ts" setup>
|
44
44
|
import type { UI_I_WizardStep } from '~/node_modules/bfg-uikit/components/ui/wizard/lib/models/interfaces'
|
45
45
|
import type { UI_T_Project } from '~/lib/models/types'
|
46
|
-
import type {
|
46
|
+
import type {
|
47
|
+
UI_I_SendTaskParams,
|
48
|
+
UI_I_ModalPayload,
|
49
|
+
} from '~/lib/models/interfaces'
|
47
50
|
import type { UI_I_ScheduleNewTasksForm } from '~/components/common/pages/scheduledTasks/modals/lib/models/interfaces'
|
48
51
|
import type {
|
49
52
|
UI_I_BackupDatastoreTable,
|
@@ -69,7 +72,7 @@ const props = defineProps<{
|
|
69
72
|
selectedVmName: string
|
70
73
|
disks: UI_I_Pvm['disk_devices']
|
71
74
|
disksLoading: boolean
|
72
|
-
datastoreTable: UI_I_BackupDatastoreTable
|
75
|
+
datastoreTable: UI_I_BackupDatastoreTable | null
|
73
76
|
datastoreTableLoading: boolean
|
74
77
|
restoreDatastore: UI_I_DatastoreTableItem[]
|
75
78
|
isRestoreDatastoreLoading: boolean
|
@@ -101,7 +101,7 @@ const props = defineProps<{
|
|
101
101
|
selectedVmName: string
|
102
102
|
disks: UI_I_Pvm['disk_devices']
|
103
103
|
disksLoading: boolean
|
104
|
-
datastoreTable: UI_I_BackupDatastoreTable
|
104
|
+
datastoreTable: UI_I_BackupDatastoreTable | null
|
105
105
|
datastoreTableLoading: boolean
|
106
106
|
}>()
|
107
107
|
|
@@ -1,59 +1,59 @@
|
|
1
|
-
<template>
|
2
|
-
<div class="datastores h-full">
|
3
|
-
<common-pages-backups-modals-create-backup-datastores-table-view
|
4
|
-
v-model:selected="model.backup_storage"
|
5
|
-
:data-table="props.datastoreTable?.items"
|
6
|
-
:total-items="props.datastoreTable?.total_items || 0"
|
7
|
-
:total-pages="props.datastoreTable?.total_pages || 1"
|
8
|
-
:loading="props.datastoreTableLoading"
|
9
|
-
/>
|
10
|
-
</div>
|
11
|
-
</template>
|
12
|
-
|
13
|
-
<script lang="ts" setup>
|
14
|
-
import type {
|
15
|
-
UI_I_BackupDatastoreTable,
|
16
|
-
UI_I_CreateBackupForm
|
17
|
-
} from '~/components/common/pages/backups/modals/lib/models/interfaces'
|
18
|
-
|
19
|
-
const props = defineProps<{
|
20
|
-
datastoreTable: UI_I_BackupDatastoreTable
|
21
|
-
datastoreTableLoading: boolean
|
22
|
-
}>()
|
23
|
-
const emits = defineEmits<{
|
24
|
-
(event: 'change', value: string[]): void
|
25
|
-
}>()
|
26
|
-
|
27
|
-
const model = defineModel<UI_I_CreateBackupForm>({ required: true })
|
28
|
-
|
29
|
-
const selectedKeys = ref<string[]>([])
|
30
|
-
|
31
|
-
watch(
|
32
|
-
() => props.datastoreTable,
|
33
|
-
() => {
|
34
|
-
selectedKeys.value = []
|
35
|
-
},
|
36
|
-
{ deep: true, immediate: true }
|
37
|
-
)
|
38
|
-
|
39
|
-
watch(
|
40
|
-
() => model.value.backup_storage,
|
41
|
-
(newValue: string) => {
|
42
|
-
const selectedNames: string[] = []
|
43
|
-
|
44
|
-
props.datastoreTable?.items.forEach((item) => {
|
45
|
-
if (newValue === item.id) selectedNames.push(item.name)
|
46
|
-
})
|
47
|
-
|
48
|
-
emits('change', selectedNames)
|
49
|
-
},
|
50
|
-
{ deep: true, immediate: true }
|
51
|
-
)
|
52
|
-
</script>
|
53
|
-
|
54
|
-
<style lang="scss" scoped>
|
55
|
-
.backups-table-content {
|
56
|
-
height: 100%;
|
57
|
-
padding: 0 10px 10px 10px;
|
58
|
-
}
|
59
|
-
</style>
|
1
|
+
<template>
|
2
|
+
<div class="datastores h-full">
|
3
|
+
<common-pages-backups-modals-create-backup-datastores-table-view
|
4
|
+
v-model:selected="model.backup_storage"
|
5
|
+
:data-table="props.datastoreTable?.items || []"
|
6
|
+
:total-items="props.datastoreTable?.total_items || 0"
|
7
|
+
:total-pages="props.datastoreTable?.total_pages || 1"
|
8
|
+
:loading="props.datastoreTableLoading"
|
9
|
+
/>
|
10
|
+
</div>
|
11
|
+
</template>
|
12
|
+
|
13
|
+
<script lang="ts" setup>
|
14
|
+
import type {
|
15
|
+
UI_I_BackupDatastoreTable,
|
16
|
+
UI_I_CreateBackupForm
|
17
|
+
} from '~/components/common/pages/backups/modals/lib/models/interfaces'
|
18
|
+
|
19
|
+
const props = defineProps<{
|
20
|
+
datastoreTable: UI_I_BackupDatastoreTable | null
|
21
|
+
datastoreTableLoading: boolean
|
22
|
+
}>()
|
23
|
+
const emits = defineEmits<{
|
24
|
+
(event: 'change', value: string[]): void
|
25
|
+
}>()
|
26
|
+
|
27
|
+
const model = defineModel<UI_I_CreateBackupForm>({ required: true })
|
28
|
+
|
29
|
+
const selectedKeys = ref<string[]>([])
|
30
|
+
|
31
|
+
watch(
|
32
|
+
() => props.datastoreTable,
|
33
|
+
() => {
|
34
|
+
selectedKeys.value = []
|
35
|
+
},
|
36
|
+
{ deep: true, immediate: true }
|
37
|
+
)
|
38
|
+
|
39
|
+
watch(
|
40
|
+
() => model.value.backup_storage,
|
41
|
+
(newValue: string) => {
|
42
|
+
const selectedNames: string[] = []
|
43
|
+
|
44
|
+
props.datastoreTable?.items.forEach((item) => {
|
45
|
+
if (newValue === item.id) selectedNames.push(item.name)
|
46
|
+
})
|
47
|
+
|
48
|
+
emits('change', selectedNames)
|
49
|
+
},
|
50
|
+
{ deep: true, immediate: true }
|
51
|
+
)
|
52
|
+
</script>
|
53
|
+
|
54
|
+
<style lang="scss" scoped>
|
55
|
+
.backups-table-content {
|
56
|
+
height: 100%;
|
57
|
+
padding: 0 10px 10px 10px;
|
58
|
+
}
|
59
|
+
</style>
|