bfg-common 1.5.676 → 1.5.677

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 (26) hide show
  1. package/components/common/layout/bottomPanel/BottomPanel.vue +84 -0
  2. package/components/common/layout/bottomPanel/New.vue +243 -0
  3. package/components/common/layout/bottomPanel/Old.vue +160 -0
  4. package/components/common/layout/bottomPanel/alarms/Alarms.vue +76 -0
  5. package/components/common/layout/bottomPanel/alarms/lib/models/interfaces.ts +23 -0
  6. package/components/common/layout/bottomPanel/alarms/new/New.vue +212 -0
  7. package/components/common/layout/bottomPanel/alarms/new/lib/config/config.ts +193 -0
  8. package/components/common/layout/bottomPanel/alarms/new/lib/models/enums.ts +10 -0
  9. package/components/common/layout/bottomPanel/alarms/new/lib/models/interfaces.ts +12 -0
  10. package/components/common/layout/bottomPanel/alarms/old/Old.vue +191 -0
  11. package/components/common/layout/bottomPanel/alarms/old/lib/config/alarmTables.ts +89 -0
  12. package/components/common/layout/bottomPanel/alarms/old/lib/config/tableKeys.ts +11 -0
  13. package/components/common/layout/bottomPanel/alarms/old/lib/models/types.ts +8 -0
  14. package/components/common/layout/bottomPanel/lib/config/statusFilter.ts +19 -0
  15. package/components/common/layout/bottomPanel/lib/models/types.ts +1 -0
  16. package/components/common/layout/bottomPanel/recentTasks/RecentTasks.vue +49 -0
  17. package/components/common/layout/bottomPanel/recentTasks/lib/models/interfaces.ts +14 -0
  18. package/components/common/layout/bottomPanel/recentTasks/new/New.vue +428 -0
  19. package/components/common/layout/bottomPanel/recentTasks/new/lib/config/config.ts +259 -0
  20. package/components/common/layout/bottomPanel/recentTasks/old/Old.vue +277 -0
  21. package/components/common/layout/bottomPanel/recentTasks/old/lib/config/recentTaskTable.ts +240 -0
  22. package/components/common/layout/bottomPanel/recentTasks/old/lib/config/tableKeys.ts +15 -0
  23. package/components/common/layout/bottomPanel/recentTasks/old/lib/models/types.ts +14 -0
  24. package/components/common/pages/auth/TheFooter.vue +104 -104
  25. package/lib/models/enums.ts +65 -1
  26. package/package.json +1 -1
@@ -0,0 +1,240 @@
1
+ import type { UI_I_Localization } from '~/lib/models/interfaces'
2
+ import type {
3
+ UI_I_BodyItem,
4
+ UI_I_ColumnKey,
5
+ UI_I_HeadItem,
6
+ } from '~/components/atoms/table/dataGrid/lib/models/interfaces'
7
+ import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
8
+ import type { UI_I_DataTargetForTable } from '~/components/common/layout/bottomPanel/recentTasks/lib/models/interfaces'
9
+ import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
10
+ import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
11
+ import { UI_E_NodeIconsByState } from '~/lib/models/enums'
12
+ import { UI_E_TabsByTypeEnum } from '~/components/common/pages/home/widgets/warnings/table/lib/models/enums'
13
+ import { UI_E_LocatorByRecentTaskStatus } from '~/lib/models/store/tasks/enums'
14
+ import { recentTaskTableKeys } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/config/tableKeys'
15
+ import {
16
+ constructColumnKey,
17
+ constructHeadItem,
18
+ } from '~/components/atoms/table/dataGrid/lib/utils/constructDataTable'
19
+
20
+ const getItems = (
21
+ localization: UI_I_Localization
22
+ ): [string, boolean, string, string][] => {
23
+ return [
24
+ [localization.tasks.taskName, true, '120px', recentTaskTableKeys[0]],
25
+ [localization.common.target, true, '180px', recentTaskTableKeys[1]],
26
+ [localization.common.status, true, '180px', recentTaskTableKeys[2]],
27
+ [localization.common.details, true, '180px', recentTaskTableKeys[3]],
28
+ [localization.common.initiator, true, '180px', recentTaskTableKeys[4]],
29
+ [localization.common.queuedFor, true, '180px', recentTaskTableKeys[5]],
30
+ [localization.common.startTime, true, '180px', recentTaskTableKeys[6]],
31
+ [localization.common.completionTime, true, '180px', recentTaskTableKeys[7]],
32
+ [localization.common.executionTime, true, '180px', recentTaskTableKeys[8]],
33
+ [localization.common.server, true, '180px', recentTaskTableKeys[9]],
34
+ [localization.common.zone, true, '180px', recentTaskTableKeys[10]],
35
+ ]
36
+ }
37
+
38
+ export const columnKeys = (
39
+ localization: UI_I_Localization
40
+ ): UI_I_ColumnKey[] => {
41
+ const result: UI_I_ColumnKey[] = []
42
+ getItems(localization).forEach((item, i) => {
43
+ const col = i === 1 || i === 2 || i === 10 ? 'icon' : `col${i}`
44
+ result.push(constructColumnKey(col, item[0], item[1]))
45
+ })
46
+ return result
47
+ }
48
+
49
+ export const headItems = (localization: UI_I_Localization): UI_I_HeadItem[] => {
50
+ const result: UI_I_HeadItem[] = []
51
+ getItems(localization).forEach((item, i) => {
52
+ const col = i === 1 || i === 2 || i === 10 ? 'icon' : `col${i}`
53
+ result.push(
54
+ constructHeadItem(
55
+ col,
56
+ item[0],
57
+ item[3],
58
+ true,
59
+ item[2],
60
+ '',
61
+ `recent-task-${item[3]}`
62
+ )
63
+ )
64
+ })
65
+ return result
66
+ }
67
+
68
+ export const bodyItems = (
69
+ data: UI_I_RecentTaskItem<UI_T_NodeType>[],
70
+ status: UI_T_SelectedStatus
71
+ ): UI_I_BodyItem[][] => {
72
+ const localization = useLocal()
73
+ const { $formattedDatetime, $time }: any = useNuxtApp()
74
+
75
+ const currentLanguage:
76
+ | 'en_US'
77
+ | 'ru_RU'
78
+ | 'hy_AM'
79
+ | 'be_BY'
80
+ | 'kk_KZ'
81
+ | 'zh_CHS' = useLocalStorage('lang') || 'en_US'
82
+
83
+ const bodyItems: UI_I_BodyItem[][] = []
84
+
85
+ data.forEach((recent: UI_I_RecentTaskItem<UI_T_NodeType>, key) => {
86
+ if (status !== -1 && recent.status !== status) return
87
+
88
+ const iconClassName = UI_E_NodeIconsByState[`${recent.targetType}_Normal`]
89
+ const id = recent.extra?.created_id || recent.target
90
+ const name =
91
+ recent.extra?.created_name || recent.args?.cloned_name || recent.target
92
+ const targetData: UI_I_DataTargetForTable = {
93
+ iconClassName,
94
+ id,
95
+ // id: recent.target,
96
+ nav: UI_E_TabsByTypeEnum[recent.targetType],
97
+ type: recent.targetType,
98
+ isLink: !!iconClassName,
99
+ testId: `${recent.targetType}-item-${name}`,
100
+ }
101
+
102
+ const statusData = {
103
+ iconClassName: recent.statusIcon,
104
+ isIconSvg: true,
105
+ testId: `${recent.taskName}-${
106
+ UI_E_LocatorByRecentTaskStatus[recent.status]
107
+ }-progress`,
108
+ operations: recent.statusDetails,
109
+ isShowStatusDetails: false,
110
+ }
111
+
112
+ const zoneData: UI_I_DataTargetForTable = {
113
+ iconClassName: 'vsphere-icon-vcenter',
114
+ id: recent.zone,
115
+ nav: 'v', // неважно
116
+ type: 'vm', // неважно
117
+ isLink: false,
118
+ testId: `${recent.zone}-item-${name}`,
119
+ }
120
+
121
+ const startTime = recent[recentTaskTableKeys[6]]
122
+ const formattedStartTime =
123
+ startTime === '--'
124
+ ? '--'
125
+ : $formattedDatetime(+startTime * 1000, {
126
+ hasSeconds: true,
127
+ })
128
+
129
+ const completionTime = recent[recentTaskTableKeys[7]]
130
+ const formattedCompletionTime =
131
+ completionTime === '--'
132
+ ? '--'
133
+ : $formattedDatetime(+completionTime * 1000, {
134
+ hasSeconds: true,
135
+ })
136
+
137
+ // const queuedFor = `${recent[recentTaskTableKeys[5]]} ms`
138
+ // const executionTime =
139
+ // recent[recentTaskTableKeys[8]] === '--'
140
+ // ? '--'
141
+ // : `${recent[recentTaskTableKeys[8]]} ms`
142
+ const queuedFor = $time.formatTime(
143
+ recent[recentTaskTableKeys[5]],
144
+ currentLanguage
145
+ )
146
+ const executionTime =
147
+ recent[recentTaskTableKeys[8]] === '--'
148
+ ? '--'
149
+ : $time.formatTime(recent[recentTaskTableKeys[8]], currentLanguage)
150
+
151
+ bodyItems.push([
152
+ {
153
+ key: 'col0',
154
+ text: recent[recentTaskTableKeys[0]],
155
+ id: key,
156
+ dataId: recent.id,
157
+ testId: `table-item-${recent.id}-${name}`,
158
+ },
159
+ {
160
+ key: 'icon',
161
+ text: recent[recentTaskTableKeys[1]],
162
+ data: targetData,
163
+ id: key,
164
+ testId: `table-item-${recent.id}-${name}`,
165
+ },
166
+ {
167
+ key: 'icon',
168
+ text:
169
+ localization.common[recent[recentTaskTableKeys[2]]] ||
170
+ recent[recentTaskTableKeys[2]],
171
+ data: statusData,
172
+ id: key,
173
+ testId: `table-item-${recent.id}-${name}`,
174
+ },
175
+ {
176
+ key: 'col3',
177
+ text: recent[recentTaskTableKeys[3]],
178
+ id: key,
179
+ testId: `table-item-${recent.id}-${name}`,
180
+ },
181
+ {
182
+ key: 'col4',
183
+ text: recent[recentTaskTableKeys[4]],
184
+ id: key,
185
+ testId: `table-item-${recent.id}-${name}`,
186
+ },
187
+ {
188
+ key: 'col5',
189
+ text: queuedFor,
190
+ id: key,
191
+ testId: `table-item-${recent.id}-${name}`,
192
+ data: {
193
+ sortValue: recent[recentTaskTableKeys[5]],
194
+ },
195
+ },
196
+ {
197
+ key: 'col6',
198
+ text: formattedStartTime,
199
+ id: key,
200
+ testId: `table-item-${recent.id}-${name}`,
201
+ data: {
202
+ sortValue: recent[recentTaskTableKeys[6]],
203
+ },
204
+ },
205
+ {
206
+ key: 'col7',
207
+ text: formattedCompletionTime,
208
+ id: key,
209
+ testId: `table-item-${recent.id}-${name}`,
210
+ data: {
211
+ sortValue: recent[recentTaskTableKeys[7]],
212
+ },
213
+ },
214
+ {
215
+ key: 'col8',
216
+ text: executionTime,
217
+ id: key,
218
+ testId: `table-item-${recent.id}-${name}`,
219
+ data: {
220
+ sortValue: recent[recentTaskTableKeys[8]],
221
+ },
222
+ },
223
+ {
224
+ key: 'col9',
225
+ text: recent[recentTaskTableKeys[9]],
226
+ id: key,
227
+ testId: `table-item-${recent.id}-${name}`,
228
+ },
229
+ {
230
+ key: 'icon',
231
+ text: recent[recentTaskTableKeys[10]],
232
+ data: zoneData,
233
+ id: key,
234
+ testId: `table-item-${recent.id}-${name}`,
235
+ },
236
+ ])
237
+ })
238
+
239
+ return bodyItems
240
+ }
@@ -0,0 +1,15 @@
1
+ import type { UI_T_RecentTaskTableKeys } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
2
+
3
+ export const recentTaskTableKeys: UI_T_RecentTaskTableKeys[] = [
4
+ 'taskName',
5
+ 'target',
6
+ 'statusText',
7
+ 'details',
8
+ 'initiator',
9
+ 'queuedFor',
10
+ 'startTime',
11
+ 'completion',
12
+ 'execution',
13
+ 'server',
14
+ 'zone',
15
+ ]
@@ -0,0 +1,14 @@
1
+ export type UI_T_RecentTaskTableKeys =
2
+ | 'taskName'
3
+ | 'target'
4
+ | 'statusText'
5
+ | 'details'
6
+ | 'initiator'
7
+ | 'queuedFor'
8
+ | 'startTime'
9
+ | 'completion'
10
+ | 'execution'
11
+ | 'server'
12
+ | 'zone'
13
+
14
+ export type UI_T_SelectedStatus = -1 | 1 | 3
@@ -1,104 +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>
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>
@@ -18,6 +18,70 @@ export enum UI_E_NodeIconsByState {
18
18
  'network_Error' = 'vsphere-icon-network-error',
19
19
  'network_Warning' = 'vsphere-icon-network-warning',
20
20
  'network_connected' = 'vsphere-icon-network',
21
+
22
+ // Для Прокуратор
23
+
24
+ 'network-error' = 'vsphere-icon-network-error',
25
+ 'network' = 'vsphere-icon-network',
26
+ 'network-warning' = 'vsphere-icon-network-warning',
27
+
28
+ 'folder_Normal' = 'vsphere-icon-folder',
29
+ 'folder_Error' = 'vsphere-icon-folder-error',
30
+ 'folder_Warning' = 'vsphere-icon-folder-warning',
31
+ 'folder_connected' = 'vsphere-icon-folder',
32
+
33
+ 'file_Normal' = 'vsphere-icon-file',
34
+ 'file_Error' = 'vsphere-icon-file-error',
35
+ 'file_Warning' = 'vsphere-icon-file-warning',
36
+ 'file_connected' = 'vsphere-icon-file',
37
+
38
+ // Для Сфер
39
+ 'zone_Normal' = 'vsphere-icon-vcenter',
40
+ 'zone_Error' = 'vsphere-icon-vcenter',
41
+ 'zone_Warning' = 'vsphere-icon-vcenter',
42
+ 'zone_connected' = 'vsphere-icon-vcenter',
43
+
44
+ 'zone_dir_Normal' = 'vsphere-icon-folder',
45
+ 'zone_dir_Error' = 'vsphere-icon-folder',
46
+ 'zone_dir_Warning' = 'vsphere-icon-folder',
47
+ 'zone_dir_connected' = 'vsphere-icon-folder',
48
+ 'dc_hc_dir_Normal' = 'vsphere-icon-folder',
49
+ 'dc_hc_dir_Error' = 'vsphere-icon-folder',
50
+ 'dc_hc_dir_Warning' = 'vsphere-icon-folder',
51
+ 'dc_hc_dir_connected' = 'vsphere-icon-folder',
52
+ 'dc_net_dir_Normal' = 'vsphere-icon-folder',
53
+ 'dc_net_dir_Error' = 'vsphere-icon-folder',
54
+ 'dc_net_dir_Warning' = 'vsphere-icon-folder',
55
+ 'dc_net_dir_connected' = 'vsphere-icon-folder',
56
+ 'dc_ds_dir_Normal' = 'vsphere-icon-folder',
57
+ 'dc_ds_dir_Error' = 'vsphere-icon-folder',
58
+ 'dc_ds_dir_Warning' = 'vsphere-icon-folder',
59
+ 'dc_ds_dir_connected' = 'vsphere-icon-folder',
60
+ 'dc_vmt_dir_Normal' = 'vsphere-icon-folder',
61
+ 'dc_vmt_dir_Error' = 'vsphere-icon-folder',
62
+ 'dc_vmt_dir_Warning' = 'vsphere-icon-folder',
63
+ 'dc_vmt_dir_connected' = 'vsphere-icon-folder',
64
+ 'dc_backup_dir_Normal' = 'vsphere-icon-folder',
65
+ 'dc_backup_dir_Error' = 'vsphere-icon-folder',
66
+ 'dc_backup_dir_Warning' = 'vsphere-icon-folder',
67
+ 'dc_backup_dir_connected' = 'vsphere-icon-folder',
68
+
69
+ 'datacenter_Normal' = 'vsphere-icon-datacenter',
70
+ 'datacenter_Error' = 'vsphere-icon-datacenter-error',
71
+ 'datacenter_Warning' = 'vsphere-icon-datacenter-warning',
72
+ 'datacenter_connected' = 'vsphere-icon-datacenter',
73
+
74
+ 'cluster_Normal' = 'vsphere-icon-cluster',
75
+ 'cluster_Error' = 'vsphere-icon-cluster-error',
76
+ 'cluster_Warning' = 'vsphere-icon-cluster-warning',
77
+ 'cluster_connected' = 'vsphere-icon-cluster',
78
+
79
+ 'host_Maintenance' = 'vsphere-icon-host-maintenance',
80
+
81
+ 'vmtemplate_Normal' = 'vsphere-icon-vm-template',
82
+ 'vmtemplate_Error' = 'vsphere-icon-vm-template',
83
+ 'vmtemplate_Warning' = 'vsphere-icon-vm-template',
84
+ 'vmtemplate_connected' = 'vsphere-icon-vm-template',
21
85
  }
22
86
 
23
87
  export enum UI_E_State {
@@ -41,5 +105,5 @@ export enum UI_E_DatastoreState {
41
105
  UNHEALTHY,
42
106
  MAINTENANCE,
43
107
  INACCESSIBLE,
44
- UNMOUNTED ,
108
+ UNMOUNTED,
45
109
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.676",
4
+ "version": "1.5.677",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",