bfg-common 1.5.675 → 1.5.676

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/pages/auth/TheFooter.vue +104 -0
  2. package/lib/models/enums.ts +1 -65
  3. package/package.json +1 -1
  4. package/components/common/layout/bottomPanel/BottomPanel.vue +0 -84
  5. package/components/common/layout/bottomPanel/New.vue +0 -243
  6. package/components/common/layout/bottomPanel/Old.vue +0 -160
  7. package/components/common/layout/bottomPanel/alarms/Alarms.vue +0 -76
  8. package/components/common/layout/bottomPanel/alarms/lib/models/interfaces.ts +0 -23
  9. package/components/common/layout/bottomPanel/alarms/new/New.vue +0 -212
  10. package/components/common/layout/bottomPanel/alarms/new/lib/config/config.ts +0 -193
  11. package/components/common/layout/bottomPanel/alarms/new/lib/models/enums.ts +0 -10
  12. package/components/common/layout/bottomPanel/alarms/new/lib/models/interfaces.ts +0 -12
  13. package/components/common/layout/bottomPanel/alarms/old/Old.vue +0 -191
  14. package/components/common/layout/bottomPanel/alarms/old/lib/config/alarmTables.ts +0 -89
  15. package/components/common/layout/bottomPanel/alarms/old/lib/config/tableKeys.ts +0 -11
  16. package/components/common/layout/bottomPanel/alarms/old/lib/models/types.ts +0 -8
  17. package/components/common/layout/bottomPanel/lib/config/statusFilter.ts +0 -19
  18. package/components/common/layout/bottomPanel/lib/models/types.ts +0 -1
  19. package/components/common/layout/bottomPanel/recentTasks/RecentTasks.vue +0 -49
  20. package/components/common/layout/bottomPanel/recentTasks/lib/models/interfaces.ts +0 -14
  21. package/components/common/layout/bottomPanel/recentTasks/new/New.vue +0 -430
  22. package/components/common/layout/bottomPanel/recentTasks/new/lib/config/config.ts +0 -259
  23. package/components/common/layout/bottomPanel/recentTasks/old/Old.vue +0 -277
  24. package/components/common/layout/bottomPanel/recentTasks/old/lib/config/recentTaskTable.ts +0 -240
  25. package/components/common/layout/bottomPanel/recentTasks/old/lib/config/tableKeys.ts +0 -15
  26. package/components/common/layout/bottomPanel/recentTasks/old/lib/models/types.ts +0 -14
@@ -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>
@@ -18,70 +18,6 @@ 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',
85
21
  }
86
22
 
87
23
  export enum UI_E_State {
@@ -105,5 +41,5 @@ export enum UI_E_DatastoreState {
105
41
  UNHEALTHY,
106
42
  MAINTENANCE,
107
43
  INACCESSIBLE,
108
- UNMOUNTED,
44
+ UNMOUNTED ,
109
45
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bfg-common",
3
3
  "private": false,
4
- "version": "1.5.675",
4
+ "version": "1.5.676",
5
5
  "scripts": {
6
6
  "build": "nuxt build",
7
7
  "dev": "nuxt dev --port=3002",
@@ -1,84 +0,0 @@
1
- <template>
2
- <component
3
- :is="currentComponent"
4
- v-model:selected-tab="activeTabModel"
5
- v-model:status-filter="statusFilter"
6
- :panel-collapsed-model="panelCollapsedModel"
7
- :tab-list="props.tabList"
8
- :data-table-recent-tasks="props.dataTableRecentTasks"
9
- :total-items-recent-tasks="props.totalItemsRecentTasks"
10
- :total-pages-recent-tasks="props.totalPagesRecentTasks"
11
- :pagination-recent-tasks="props.paginationRecentTasks"
12
- :loading-recent-tasks="props.loadingRecentTasks"
13
- :data-table-alarms="props.dataTableAlarms"
14
- :loading-alarms="props.loadingAlarms"
15
- @collapse-panel="onCollapseBottomPanel"
16
- @change-tab="emits('change-tab')"
17
- @sort-recent-task="emits('sort-recent-task', $event)"
18
- @pagination-recent-task="emits('pagination-recent-task', $event)"
19
- @pause-global-refresh-alarms="emits('pause-global-refresh-alarms')"
20
- @get-alarms="emits('get-alarms', $event)"
21
- />
22
- </template>
23
-
24
- <script setup lang="ts">
25
- import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
26
- import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
27
- import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
28
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
29
- import type {
30
- UI_I_Alarm,
31
- UI_I_AlarmPayload,
32
- } from '~/components/common/layout/bottomPanel/alarms/lib/models/interfaces'
33
- import type { UI_T_BottomPanelTabType } from '~/components/common/layout/bottomPanel/lib/models/types'
34
- import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
35
-
36
- const panelCollapsedModel = defineModel<boolean>('panelCollapsed', {
37
- required: true,
38
- })
39
- const activeTabModel = defineModel<UI_T_BottomPanelTabType>('selectedTab', {
40
- required: true,
41
- })
42
- const props = withDefaults(
43
- defineProps<{
44
- tabList: UI_I_CollapseNavItem[]
45
- dataTableRecentTasks: UI_I_RecentTaskItem<UI_T_NodeType>[]
46
- totalItemsRecentTasks: number
47
- totalPagesRecentTasks: number
48
- paginationRecentTasks: UI_I_Pagination
49
- loadingRecentTasks: boolean
50
- dataTableAlarms?: UI_I_Alarm | null
51
- loadingAlarms?: boolean
52
- }>(),
53
- {
54
- dataTableAlarms: null,
55
- loadingAlarms: false,
56
- }
57
- )
58
-
59
- const emits = defineEmits<{
60
- (event: 'change-tab'): void
61
- (event: 'sort-recent-task', value: string): void
62
- (event: 'pagination-recent-task', value: UI_I_Pagination | null): void
63
- (event: 'pause-global-refresh-alarms'): void
64
- (event: 'get-alarms', value: UI_I_AlarmPayload): void
65
- }>()
66
-
67
- const { $store }: any = useNuxtApp()
68
-
69
- const isNewView = computed<boolean>(() => $store.getters['main/getIsNewView'])
70
-
71
- const currentComponent = computed(() =>
72
- isNewView.value
73
- ? defineAsyncComponent(() => import('./New.vue'))
74
- : defineAsyncComponent(() => import('./Old.vue'))
75
- )
76
-
77
- const onCollapseBottomPanel = (): void => {
78
- panelCollapsedModel.value = !panelCollapsedModel.value
79
- }
80
-
81
- const statusFilter = ref<UI_T_SelectedStatus>(-1)
82
- </script>
83
-
84
- <style scoped lang="scss"></style>
@@ -1,243 +0,0 @@
1
- <template>
2
- <div
3
- :class="[
4
- 'bottom-panel flex flex-col h-full',
5
- { collapsed: props.panelCollapsedModel },
6
- ]"
7
- >
8
- <div class="bottom-panel__tab-list flex">
9
- <div class="bottom-panel__collapse relative">
10
- <button
11
- id="bottom-panel-collapse"
12
- data-id="bottom-panel-toggle-button"
13
- class="btn-collapse flex items-center"
14
- @click="emits('collapse-panel')"
15
- >
16
- <ui-icon class="collapse-icon" name="arrow" />
17
- </button>
18
- </div>
19
- <ui-tabs
20
- v-model="activeTabModel"
21
- :tabs="tabListLocal"
22
- test-id="bottom-panel-tab-list"
23
- type="underline"
24
- class="bottom-panel__tab"
25
- @change="emits('change-tab')"
26
- >
27
- </ui-tabs>
28
-
29
- <div
30
- v-show="isShowRecentTasksActions"
31
- class="actions flex items-center gap-4 pr-4"
32
- >
33
- <ui-select
34
- v-model="statusFilter"
35
- :items="statusFilterItems"
36
- test-id="status-filter"
37
- class="status-filter-select"
38
- />
39
- <ui-button
40
- test-id="more-tasks-button"
41
- variant="primary"
42
- type="text"
43
- class="more-tasks-button"
44
- is-without-sizes
45
- @click="onNavigateToTasksPage"
46
- >
47
- {{ localization.tasks.moreTasks }}
48
- </ui-button>
49
- </div>
50
- </div>
51
- <div
52
- v-show="!props.panelCollapsedModel"
53
- class="bottom-panel__table-wrapper overflow-hidden"
54
- >
55
- <common-layout-bottom-panel-recent-tasks
56
- v-show="activeTabModel === 'recentTask'"
57
- v-model:status-filter="statusFilter"
58
- :data-table="props.dataTableRecentTasks"
59
- :total-items="props.totalItemsRecentTasks"
60
- :total-pages="props.totalPagesRecentTasks"
61
- :pagination="props.paginationRecentTasks"
62
- :loading="props.loadingRecentTasks"
63
- @sort="emits('sort-recent-task', $event)"
64
- @pagination="emits('pagination-recent-task', $event)"
65
- />
66
- <common-layout-bottom-panel-alarms
67
- v-show="activeTabModel === 'alarms'"
68
- :data-table="props.dataTableAlarms"
69
- :is-loading="props.loadingAlarms"
70
- @pause-global-refresh="emits('pause-global-refresh-alarms')"
71
- @get-alarms="emits('get-alarms', $event)"
72
- />
73
- </div>
74
- </div>
75
- </template>
76
-
77
- <script setup lang="ts">
78
- import type { UI_I_TabItem } from '~/node_modules/bfg-uikit/components/ui/tabs/models/interfaces'
79
- import type { UI_I_Dropdown } from '~/node_modules/bfg-uikit/components/ui/dropdown/models/interfaces'
80
- import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
81
- import type { UI_I_Localization } from '~/lib/models/interfaces'
82
- import type { UI_T_BottomPanelTabType } from '~/components/common/layout/bottomPanel/lib/models/types'
83
- import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
84
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
85
- import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
86
- import type {
87
- UI_I_Alarm,
88
- UI_I_AlarmPayload,
89
- } from '~/components/common/layout/bottomPanel/alarms/lib/models/interfaces'
90
- import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
91
- import { statusFilterItemsFunc } from '~/components/common/layout/bottomPanel/lib/config/statusFilter'
92
-
93
- const activeTabModel = defineModel<UI_T_BottomPanelTabType>('selectedTab', {
94
- required: true,
95
- })
96
- const statusFilter = defineModel<UI_T_SelectedStatus>('statusFilter', {
97
- required: true,
98
- })
99
-
100
- const props = defineProps<{
101
- panelCollapsedModel: boolean
102
- tabList: UI_I_CollapseNavItem[]
103
- dataTableRecentTasks: UI_I_RecentTaskItem<UI_T_NodeType>[]
104
- totalItemsRecentTasks: number
105
- totalPagesRecentTasks: number
106
- paginationRecentTasks: UI_I_Pagination
107
- loadingRecentTasks: boolean
108
- dataTableAlarms: UI_I_Alarm | null
109
- loadingAlarms: boolean
110
- }>()
111
-
112
- const emits = defineEmits<{
113
- (event: 'collapse-panel'): void
114
- (event: 'change-tab'): void
115
- (event: 'sort-recent-task', value: string): void
116
- (event: 'pagination-recent-task', value: UI_I_Pagination | null): void
117
- (event: 'pause-global-refresh-alarms'): void
118
- (event: 'get-alarms', value: UI_I_AlarmPayload): void
119
- }>()
120
-
121
- const tabListLocal = computed<UI_I_TabItem[]>(() =>
122
- props.tabList.map(({ value, text: name, testId, development }) => ({
123
- name,
124
- development,
125
- value: value + '',
126
- testId: testId + '',
127
- }))
128
- )
129
-
130
- const localization = computed<UI_I_Localization>(() => useLocal())
131
- const statusFilterItems = ref<UI_I_Dropdown[]>(
132
- statusFilterItemsFunc(localization.value)
133
- )
134
-
135
- const onNavigateToTasksPage = (): void => {
136
- const router = useRouter()
137
- router.push('/tasks')
138
- }
139
-
140
- const isShowRecentTasksActions = computed<boolean>(
141
- () => activeTabModel.value === 'recentTask' && !props.panelCollapsedModel
142
- )
143
- </script>
144
-
145
- <style>
146
- :root {
147
- --bottom-pannel-bg-color: #fff;
148
- --bottom-pannel-border-color: #e9ebed;
149
- --bottom-pannel-rtask-link-text: #008fd6;
150
- --bottom-pannel-rtask-link-hover-text: #0081c1;
151
- --bottom-pannel-divider-color: #e9ebeda3;
152
- --bottom-pannel-collapse-button-icon: #213444;
153
- }
154
- :root.dark-theme {
155
- --bottom-pannel-bg-color: #213444;
156
- --bottom-pannel-border-color: #e9ebed1f;
157
- --bottom-pannel-rtask-link-text: #2ba2de;
158
- --bottom-pannel-rtask-link-hover-text: #008fd6;
159
- --bottom-pannel-divider-color: #e9ebed1f;
160
- --bottom-pannel-collapse-button-icon: #e9eaec;
161
- }
162
- </style>
163
- <style scoped lang="scss">
164
- @import '~/assets/scss/common/mixins';
165
- .bottom-panel {
166
- background-color: var(--bottom-pannel-bg-color);
167
-
168
- &__tab-list {
169
- border-bottom: 1px solid var(--bottom-pannel-border-color);
170
- }
171
- &__tab {
172
- align-items: flex-end;
173
- margin-left: 16px;
174
-
175
- &.tabs-wrapper.is-link:before {
176
- display: none;
177
- }
178
- .collapsed &.tabs-wrapper.is-link {
179
- :deep(.tab-item.active.tab-underline) {
180
- border-bottom: 3px solid transparent;
181
- }
182
- }
183
- }
184
- &__table-wrapper {
185
- height: inherit;
186
- }
187
-
188
- .btn-collapse {
189
- border: 0;
190
- outline: none;
191
- background-color: transparent;
192
- cursor: pointer;
193
-
194
- .collapse-icon {
195
- width: 20px;
196
- height: 20px;
197
- transform: rotate(180deg);
198
- color: var(--bottom-pannel-collapse-button-icon);
199
-
200
- .collapsed & {
201
- transform: rotate(0deg);
202
- }
203
- }
204
- }
205
- &__collapse {
206
- padding: 12px 16px;
207
-
208
- &:before {
209
- content: '';
210
- position: absolute;
211
- top: 8px;
212
- right: 0;
213
- bottom: 8px;
214
- width: 1px;
215
- background-color: var(--bottom-pannel-divider-color);
216
- }
217
- }
218
-
219
- .actions {
220
- flex: 1;
221
- justify-content: flex-end;
222
-
223
- .more-tasks-button {
224
- width: auto;
225
- }
226
-
227
- :deep(.ui-select-toggle-button) {
228
- height: 24px;
229
- min-width: 80px;
230
- padding: 4px 4px 4px 8px;
231
- border-radius: 6px;
232
- }
233
- :deep(.ui-popup-window) {
234
- border-radius: 6px;
235
- width: unset !important;
236
- }
237
- }
238
- }
239
-
240
- :deep(.table-container.default-layout) {
241
- border-radius: 0;
242
- }
243
- </style>
@@ -1,160 +0,0 @@
1
- <template>
2
- <div
3
- :class="[
4
- 'bottom-panel flex flex-col h-full',
5
- { collapsed: props.panelCollapsedModel },
6
- ]"
7
- >
8
- <div class="flex">
9
- <div class="bottom-panel__trigger">
10
- <button
11
- id="bottom-panel-trigger"
12
- data-id="bottom-panel-toggle-button"
13
- class="btn-trigger flex items-center"
14
- @click="emits('collapse-panel')"
15
- >
16
- <atoms-the-icon class="trigger-icon" name="angle" />
17
- </button>
18
- </div>
19
- <atoms-nav-bar
20
- v-model="activeTabModel"
21
- :items="props.tabList"
22
- :class="[
23
- 'bottom-panel__tabs',
24
- props.panelCollapsedModel && 'collapsed',
25
- ]"
26
- test-id="bottom-panel-nav-bar"
27
- @change="emits('change-tab')"
28
- />
29
- </div>
30
- <div
31
- v-show="!props.panelCollapsedModel"
32
- class="bottom-panel__table-wrapper overflow-hidden"
33
- >
34
- <common-layout-bottom-panel-recent-tasks
35
- v-show="activeTabModel === 'recentTask'"
36
- v-model:status-filter="statusFilter"
37
- :data-table="props.dataTableRecentTasks"
38
- :total-items="props.totalItemsRecentTasks"
39
- :total-pages="props.totalPagesRecentTasks"
40
- :pagination="props.paginationRecentTasks"
41
- :loading="props.loadingRecentTasks"
42
- @sort="emits('sort-recent-task', $event)"
43
- @pagination="emits('pagination-recent-task', $event)"
44
- />
45
- <common-layout-bottom-panel-alarms
46
- v-show="activeTabModel === 'alarms'"
47
- :data-table="props.dataTableAlarms"
48
- :is-loading="props.loadingAlarms"
49
- @pause-global-refresh="emits('pause-global-refresh-alarms')"
50
- @get-alarms="emits('get-alarms', $event)"
51
- />
52
- </div>
53
- </div>
54
- </template>
55
-
56
- <script setup lang="ts">
57
- import type { UI_I_CollapseNavItem } from '~/components/atoms/collapse/lib/models/interfaces'
58
- import type { UI_I_RecentTaskItem } from '~/lib/models/store/tasks/interfaces'
59
- import type { UI_I_Pagination } from '~/lib/models/table/interfaces'
60
- import type {
61
- UI_I_Alarm,
62
- UI_I_AlarmPayload,
63
- } from '~/components/common/layout/bottomPanel/alarms/lib/models/interfaces'
64
- import type { UI_T_NodeType } from '~/components/common/pages/home/lib/models/types'
65
- import type { UI_T_BottomPanelTabType } from '~/components/common/layout/bottomPanel/lib/models/types'
66
- import type { UI_T_SelectedStatus } from '~/components/common/layout/bottomPanel/recentTasks/old/lib/models/types'
67
-
68
- const statusFilter = defineModel<UI_T_SelectedStatus>('statusFilter', {
69
- required: true,
70
- })
71
-
72
- const activeTabModel = defineModel<UI_T_BottomPanelTabType>('selectedTab', {
73
- required: true,
74
- })
75
-
76
- const props = defineProps<{
77
- panelCollapsedModel: boolean
78
- tabList: UI_I_CollapseNavItem[]
79
- dataTableRecentTasks: UI_I_RecentTaskItem<UI_T_NodeType>[]
80
- totalItemsRecentTasks: number
81
- totalPagesRecentTasks: number
82
- paginationRecentTasks: UI_I_Pagination
83
- loadingRecentTasks: boolean
84
- dataTableAlarms: UI_I_Alarm | null
85
- loadingAlarms: boolean
86
- }>()
87
-
88
- const emits = defineEmits<{
89
- (event: 'collapse-panel'): void
90
- (event: 'change-tab'): void
91
- (event: 'sort-recent-task', value: string): void
92
- (event: 'pagination-recent-task', value: UI_I_Pagination | null): void
93
- (event: 'pause-global-refresh-alarms'): void
94
- (event: 'get-alarms', value: UI_I_AlarmPayload): void
95
- }>()
96
- </script>
97
-
98
- <style scoped lang="scss">
99
- @import '~/assets/scss/common/mixins';
100
- .bottom-panel {
101
- background-color: var(--pannel-bg-color);
102
- & > div:first-child {
103
- height: 36px;
104
- }
105
- &__table-wrapper {
106
- height: inherit;
107
- :deep(.datagrid-outer-wrapper) {
108
- padding-top: 0;
109
- .datagrid {
110
- border-radius: 0;
111
- margin-top: 0;
112
- }
113
- }
114
- }
115
- &__tabs {
116
- &.collapsed {
117
- :deep(button.nav-link) {
118
- box-shadow: none;
119
- }
120
- }
121
- }
122
-
123
- &.collapsed {
124
- .btn-trigger {
125
- .trigger-icon {
126
- transform: rotate(0deg);
127
- }
128
- }
129
- }
130
- .btn-trigger {
131
- height: 31px;
132
- border: 0;
133
- outline: none;
134
- background-color: transparent;
135
- padding-left: 15px;
136
- cursor: pointer;
137
- .trigger-icon {
138
- width: 16px;
139
- height: 16px;
140
- fill: var(--triger-icon-color);
141
- transform: rotate(180deg);
142
- }
143
- }
144
- &__trigger {
145
- padding-right: 15px;
146
- margin-right: 15px;
147
- border-right: 0.05rem solid #ccc;
148
- box-shadow: inset 0 -0.05rem 0 var(--nav-panel-border-color);
149
- }
150
- }
151
- </style>
152
-
153
- <style>
154
- :root {
155
- --pannel-bg-color: #fafafa;
156
- }
157
- :root.dark-theme {
158
- --pannel-bg-color: #1b2a32;
159
- }
160
- </style>