| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| <template> | |
| <div> | |
| <list-view | |
| :tabLoading="tabLoading" | |
| :columns="columns" | |
| :items="events" | |
| :actions="actions" | |
| :columnKeys="columnKeys" | |
| :selectedColumns="selectedColumnKeys" | |
| ref="listview" | |
| @update-selected-columns="updateSelectedColumns" | |
| @refresh="this.fetchData"/> | |
| <a-pagination | |
| class="row-element" | |
| style="margin-top: 10px" | |
| size="small" | |
| :current="page" | |
| :pageSize="pageSize" | |
| :total="totalCount" | |
| :showTotal="total => `${$t('label.showing')} ${Math.min(total, 1+((page-1)*pageSize))}-${Math.min(page*pageSize, total)} ${$t('label.of')} ${total} ${$t('label.items')}`" | |
| :pageSizeOptions="pageSizeOptions" | |
| @change="changePage" | |
| @showSizeChange="changePage" | |
| showSizeChanger | |
| showQuickJumper> | |
| <template #buildOptionText="props"> | |
| <span>{{ props.value }} / {{ $t('label.page') }}</span> | |
| </template> | |
| </a-pagination> | |
| </div> | |
| </template> | |
| <script> | |
| import { getAPI } from '@/api' | |
| import { genericCompare } from '@/utils/sort.js' | |
| import ListView from '@/components/view/ListView' | |
| const EVENTS_TAB_COLUMNS_KEY = 'events_tab_columns' | |
| export default { | |
| name: 'EventsTab', | |
| components: { | |
| ListView | |
| }, | |
| props: { | |
| resource: { | |
| type: Object, | |
| required: true | |
| }, | |
| resourceType: { | |
| type: String, | |
| required: true | |
| }, | |
| loading: { | |
| type: Boolean, | |
| required: true | |
| } | |
| }, | |
| data () { | |
| return { | |
| tabLoading: false, | |
| columnKeys: ['level', 'type', 'state', 'description', 'username', 'account', 'domain', 'created'], | |
| selectedColumnKeys: [], | |
| columns: [], | |
| cols: [], | |
| events: [], | |
| actions: [], | |
| page: 1, | |
| pageSize: 20, | |
| totalCount: 0, | |
| resourceTypeValue: '' | |
| } | |
| }, | |
| computed: { | |
| pageSizeOptions () { | |
| var sizes = [20, 50, 100, 200, this.$store.getters.defaultListViewPageSize] | |
| if (this.device !== 'desktop') { | |
| sizes.unshift(10) | |
| } | |
| return [...new Set(sizes)].sort(function (a, b) { | |
| return a - b | |
| }).map(String) | |
| } | |
| }, | |
| created () { | |
| this.setDefaultColumns() | |
| this.pageSize = this.pageSizeOptions[0] * 1 | |
| this.fetchData() | |
| }, | |
| watch: { | |
| resource: { | |
| handler () { | |
| this.fetchEvents() | |
| } | |
| } | |
| }, | |
| methods: { | |
| setDefaultColumns () { | |
| const savedColumns = this.$localStorage.get(EVENTS_TAB_COLUMNS_KEY) | |
| if (savedColumns && Array.isArray(savedColumns) && savedColumns.length > 0) { | |
| this.selectedColumnKeys = savedColumns | |
| } else { | |
| this.selectedColumnKeys = this.columnKeys.filter(x => x !== 'description') | |
| } | |
| this.updateColumns() | |
| }, | |
| fetchData () { | |
| this.fetchEvents() | |
| }, | |
| fetchEvents () { | |
| this.events = [] | |
| if (!this.resource.id) { | |
| return | |
| } | |
| const params = { | |
| page: this.page, | |
| pagesize: this.pageSize, | |
| resourceid: this.resource.id, | |
| resourcetype: this.resourceType, | |
| listall: true | |
| } | |
| this.tabLoading = true | |
| getAPI('listEvents', params).then(json => { | |
| this.events = [] | |
| this.totalCount = json?.listeventsresponse?.count || 0 | |
| this.events = json?.listeventsresponse?.event || [] | |
| this.tabLoading = false | |
| }) | |
| }, | |
| changePage (page, pageSize) { | |
| this.page = page | |
| this.pageSize = pageSize | |
| this.fetchData() | |
| }, | |
| updateSelectedColumns (key) { | |
| if (this.selectedColumnKeys.includes(key)) { | |
| this.selectedColumnKeys = this.selectedColumnKeys.filter(x => x !== key) | |
| } else { | |
| this.selectedColumnKeys.push(key) | |
| } | |
| this.$localStorage.set(EVENTS_TAB_COLUMNS_KEY, this.selectedColumnKeys) | |
| this.updateColumns() | |
| }, | |
| updateColumns () { | |
| this.columns = [] | |
| for (var columnKey of this.columnKeys) { | |
| if (!this.selectedColumnKeys.includes(columnKey)) continue | |
| this.columns.push({ | |
| key: columnKey, | |
| title: this.$t('label.' + String(columnKey).toLowerCase()), | |
| dataIndex: columnKey, | |
| sorter: (a, b) => { return genericCompare(a[columnKey] || '', b[columnKey] || '') } | |
| }) | |
| } | |
| if (this.columns.length > 0) { | |
| this.columns[this.columns.length - 1].customFilterDropdown = true | |
| } | |
| } | |
| } | |
| } | |
| </script> |