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