diff --git a/src/components/AppAccountListTable/index.vue b/src/components/AppAccountListTable/index.vue index f6aa0cd38..d9c7a19c1 100644 --- a/src/components/AppAccountListTable/index.vue +++ b/src/components/AppAccountListTable/index.vue @@ -57,7 +57,7 @@ export default { formatter: DetailFormatter, formatterArgs: { getRoute({ row }) { - switch (row['app_category']) { + switch (row['category']) { case 'remote_app': return { name: 'RemoteAppDetail', diff --git a/src/components/ListTable/TableAction/ExportDialog.vue b/src/components/ListTable/TableAction/ExportDialog.vue index fe058b05e..5babaa8ba 100644 --- a/src/components/ListTable/TableAction/ExportDialog.vue +++ b/src/components/ListTable/TableAction/ExportDialog.vue @@ -60,8 +60,8 @@ export default { }, performExport: { type: Function, - default(selectedRows, exportOptions, query) { - return this.defaultPerformExport(selectedRows, exportOptions, query) + default(selectedRows, exportOptions, query, exportType) { + return this.defaultPerformExport(selectedRows, exportOptions, query, exportType) } }, canExportAll: { @@ -143,7 +143,7 @@ export default { mounted() { this.$eventBus.$on('showExportDialog', ({ selectedRows, url, name }) => { // Todo: 没有时间了,只能先这么处理了 - if (url === this.url || url.indexOf('account') > -1) { + if (url === this.url || url.indexOf(this.url) > -1 || url.indexOf('account') > -1) { this.showExportDialog() } }) @@ -167,7 +167,7 @@ export default { a.click() window.URL.revokeObjectURL(url) }, - async defaultPerformExport(selectRows, exportOption, q) { + async defaultPerformExport(selectRows, exportOption, q, exportTypeOption) { const url = (process.env.VUE_APP_ENV === 'production') ? (`${this.url}`) : (`${process.env.VUE_APP_BASE_API}${this.url}`) const query = Object.assign({}, q) if (exportOption === 'selected') { @@ -179,7 +179,7 @@ export default { const spm = await createSourceIdCache(resources) query['spm'] = spm.spm } - query['format'] = this.exportTypeOption + query['format'] = exportTypeOption const queryStr = (url.indexOf('?') > -1 ? '&' : '?') + queryUtil.stringify(query, '=', '&') @@ -187,11 +187,11 @@ export default { }, async handleExport() { const listTableRef = this.$parent.$parent.$parent.$parent - const query = listTableRef.dataTable.getQuery() + const query = listTableRef['dataTable'].getQuery() delete query['limit'] delete query['offset'] await this.beforeExport() - return this.performExport(this.selectedRows, this.exportOption, query) + return this.performExport(this.selectedRows, this.exportOption, query, this.exportTypeOption) }, async handleExportConfirm() { await this.handleExport() diff --git a/src/components/ListTable/index.vue b/src/components/ListTable/index.vue index 324899079..87a3ebaf7 100644 --- a/src/components/ListTable/index.vue +++ b/src/components/ListTable/index.vue @@ -1,8 +1,21 @@ @@ -50,6 +63,9 @@ export default { this.$log.debug('Header actions', this.headerActions) this.$log.debug('ListTable: iTableConfig change', config) return config + }, + tableUrl() { + return this.iTableConfig.url } }, watch: { diff --git a/src/components/TreeTable/index.vue b/src/components/TreeTable/index.vue index 974b0bf83..f72112814 100644 --- a/src/components/TreeTable/index.vue +++ b/src/components/TreeTable/index.vue @@ -77,9 +77,9 @@ export default { } }, methods: { - handleUrlChange(_url) { - this.$set(this.iTableConfig, 'url', _url) - this.$emit('urlChange', _url) + handleUrlChange(url) { + this.$set(this.iTableConfig, 'url', url) + this.$emit('urlChange', url) this.forceRerender() }, forceRerender() { diff --git a/src/layout/components/GenericDetailPage/index.vue b/src/layout/components/GenericDetailPage/index.vue index 13627c204..d215d3f6f 100644 --- a/src/layout/components/GenericDetailPage/index.vue +++ b/src/layout/components/GenericDetailPage/index.vue @@ -175,8 +175,12 @@ export default { }, defaultUpdate() { const id = this.$route.params.id - const routeName = this.validActions.updateRoute - this.$router.push({ name: routeName, params: { id: id }}) + let route = this.validActions.updateRoute + if (typeof route === 'string') { + route = { name: route, params: {}} + } + route.params.id = id + this.$router.push(route) }, getObject() { const url = this.validActions.detailApiUrl diff --git a/src/views/perms/ApplicationPermission/ApplicationPermissionDetail/index.vue b/src/views/perms/ApplicationPermission/ApplicationPermissionDetail/index.vue index 966b9812c..48ffde85f 100644 --- a/src/views/perms/ApplicationPermission/ApplicationPermissionDetail/index.vue +++ b/src/views/perms/ApplicationPermission/ApplicationPermissionDetail/index.vue @@ -1,7 +1,7 @@ @@ -22,7 +22,7 @@ export default { }, data() { return { - RemoteAppPermission: {}, + app: { type: '', category: '', id: '' }, config: { activeMenu: 'ApplicationPermissionDetail', submenu: [ @@ -41,7 +41,20 @@ export default { ], actions: { detailApiUrl: `/api/v1/perms/application-permissions/${this.$route.params.id}/`, - deleteApiUrl: `/api/v1/perms/application-permissions/${this.$route.params.id}/` + deleteApiUrl: `/api/v1/perms/application-permissions/${this.$route.params.id}/`, + updateCallback: () => { + const route = { + name: 'ApplicationPermissionUpdate', + query: { + type: this.app.type, + category: this.app.category + }, + params: { + id: this.app.id + } + } + this.$router.push(route) + } } } } diff --git a/src/views/sessions/CommandList.vue b/src/views/sessions/CommandList.vue index 277627518..d96c6c1ed 100644 --- a/src/views/sessions/CommandList.vue +++ b/src/views/sessions/CommandList.vue @@ -21,6 +21,7 @@ import { DetailFormatter } from '@/components/TableFormatters' import isFalsey from '@/components/DataTable/compenents/el-data-table/utils/is-falsey' import deepmerge from 'deepmerge' import * as queryUtil from '@/components/DataTable/compenents/el-data-table/utils/query' +import { createSourceIdCache } from '@/api/common' export default { components: { @@ -66,7 +67,7 @@ export default { label: this.$t('sessions.riskLevel'), width: '105px', formatter: (row, col, cellValue) => { - const display = row.risk_level_display + const display = row['risk_level_display'] if (cellValue === 0) { return display } else { @@ -117,6 +118,33 @@ export default { hasImport: false, hasDatePicker: true, canExportSelected: true, + exportOptions: { + // Todo: 优化这里,和抽象组件重复了 + performExport: async(selectRows, exportOption, q, exportTypeOption) => { + let url = this.tableConfig.url + url = (process.env.VUE_APP_ENV === 'production') ? (`${url}`) : (`${process.env.VUE_APP_BASE_API}${url}`) + const query = Object.assign({}, q) + if (exportOption === 'selected') { + const resources = [] + const data = selectRows + for (let index = 0; index < data.length; index++) { + resources.push(data[index].id) + } + const spm = await createSourceIdCache(resources) + query['spm'] = spm.spm + } + query['format'] = exportTypeOption + const queryStr = + (url.indexOf('?') > -1 ? '&' : '?') + + queryUtil.stringify(query, '=', '&') + url = url + queryStr + this.$log.debug('Export url: ', this.url, '=>', url) + const a = document.createElement('a') + a.href = url + a.click() + window.URL.revokeObjectURL(url + queryStr) + } + }, datePicker: { dateStart: dateFrom, dateEnd: dateTo @@ -138,7 +166,7 @@ export default { } }, callback: { - onSelected: function(event, treeNode) { + onSelected: (event, treeNode) => { // 禁止点击根节点 if (treeNode.id === 'root') { return @@ -147,8 +175,8 @@ export default { this.$message.error(this.$t('sessions.EsDisabled')) return } - this.tableConfig.url = `/api/v1/terminal/commands/?command_storage_id=${treeNode.id}` - }.bind(this) + this.tableConfig.url = `/api/v1/terminal/commands/?command_storage_id=${treeNode.id}&order=-timestamp` + } } } }