From c1ed466b8b594eab7f0183a8b11f2258161409d8 Mon Sep 17 00:00:00 2001 From: Orange Date: Mon, 15 Mar 2021 19:01:08 +0800 Subject: [PATCH 1/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=AF=A6=E6=83=85=E9=80=89=E6=8B=A9=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E7=9A=84Bugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AssetPermissionDetail/AssetPermissionAsset.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/perms/AssetPermission/AssetPermissionDetail/AssetPermissionAsset.vue b/src/views/perms/AssetPermission/AssetPermissionDetail/AssetPermissionAsset.vue index b9cffa28f..ba8b27525 100644 --- a/src/views/perms/AssetPermission/AssetPermissionDetail/AssetPermissionAsset.vue +++ b/src/views/perms/AssetPermission/AssetPermissionDetail/AssetPermissionAsset.vue @@ -143,7 +143,7 @@ export default { icon: 'fa-edit', title: this.$t('perms.addSystemUserToThisPermission'), objectsAjax: { - url: '/api/v1/assets/system-users/', + url: '/api/v1/assets/system-users/?protocol__in=rdp,ssh,vnc,telnet', transformOption: (item) => { return { label: item.name + '(' + item.username + ')', value: item.id } } From 78fa90c9f83524d3f4a989ac441ec07c4582d390 Mon Sep 17 00:00:00 2001 From: Orange Date: Mon, 15 Mar 2021 19:21:40 +0800 Subject: [PATCH 2/7] =?UTF-8?q?fix:=20=E6=89=B9=E9=87=8F=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=A1=A8=E6=A0=BCAction=E5=8F=96=E5=80=BC=E4=B8=BARow.id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ops/TaskDetail/AdhocDetail/AdhocExecutionHistory.vue | 4 ++-- src/views/ops/TaskDetail/TaskAdhoc.vue | 4 ++-- src/views/ops/TaskDetail/TaskHistory.vue | 4 ++-- src/views/ops/TaskList.vue | 4 ++-- .../User/UserDetail/UserApplicationsPermissionRules.vue | 2 +- .../ChangeAuthPlanExecutionTaskList.vue | 4 ++-- .../ChangeAuthPlanExecutionList.vue | 8 ++++---- src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue | 4 ++-- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/views/ops/TaskDetail/AdhocDetail/AdhocExecutionHistory.vue b/src/views/ops/TaskDetail/AdhocDetail/AdhocExecutionHistory.vue index 44f95389d..ab97cc7e2 100644 --- a/src/views/ops/TaskDetail/AdhocDetail/AdhocExecutionHistory.vue +++ b/src/views/ops/TaskDetail/AdhocDetail/AdhocExecutionHistory.vue @@ -82,8 +82,8 @@ export default { name: 'detail', title: this.$t('ops.detail'), type: 'primary', - callback: function({ cellValue, tableData }) { - return this.$router.push({ name: 'HistoryExecutionDetail', params: { id: cellValue }}) + callback: function({ row, tableData }) { + return this.$router.push({ name: 'HistoryExecutionDetail', params: { id: row.id }}) } } ] diff --git a/src/views/ops/TaskDetail/TaskAdhoc.vue b/src/views/ops/TaskDetail/TaskAdhoc.vue index c8c5c1014..c91578347 100644 --- a/src/views/ops/TaskDetail/TaskAdhoc.vue +++ b/src/views/ops/TaskDetail/TaskAdhoc.vue @@ -79,8 +79,8 @@ export default { name: 'detail', title: this.$t('ops.detail'), type: 'primary', - callback: function({ cellValue, tableData }) { - return this.$router.push({ name: 'AdhocDetail', params: { id: cellValue }}) + callback: function({ row, tableData }) { + return this.$router.push({ name: 'AdhocDetail', params: { id: row.id }}) } } ] diff --git a/src/views/ops/TaskDetail/TaskHistory.vue b/src/views/ops/TaskDetail/TaskHistory.vue index d0e4732d5..4539186fc 100644 --- a/src/views/ops/TaskDetail/TaskHistory.vue +++ b/src/views/ops/TaskDetail/TaskHistory.vue @@ -91,8 +91,8 @@ export default { name: 'detail', title: this.$t('ops.detail'), type: 'primary', - callback: function({ cellValue, tableData }) { - return this.$router.push({ name: 'HistoryExecutionDetail', params: { id: cellValue }}) + callback: function({ row, tableData }) { + return this.$router.push({ name: 'HistoryExecutionDetail', params: { id: row.id }}) } } ] diff --git a/src/views/ops/TaskList.vue b/src/views/ops/TaskList.vue index dd1c31819..3f5a42eb2 100644 --- a/src/views/ops/TaskList.vue +++ b/src/views/ops/TaskList.vue @@ -77,9 +77,9 @@ export default { name: 'run', title: this.$t('ops.run'), type: 'primary', - callback: function({ cellValue, tableData }) { + callback: function({ row, tableData }) { this.$axios.get( - `/api/v1/ops/tasks/${cellValue}/run/` + `/api/v1/ops/tasks/${row.id}/run/` ).then(res => { window.open(`/#/ops/celery/task/${res.task}/log/`, '', 'width=900,height=600') }) diff --git a/src/views/users/User/UserDetail/UserApplicationsPermissionRules.vue b/src/views/users/User/UserDetail/UserApplicationsPermissionRules.vue index e4c601b2d..e5869b930 100644 --- a/src/views/users/User/UserDetail/UserApplicationsPermissionRules.vue +++ b/src/views/users/User/UserDetail/UserApplicationsPermissionRules.vue @@ -50,7 +50,7 @@ export default { actions: { formatterArgs: { onUpdate: ({ row, col, cellValue }) => { - this.$router.push({ name: 'ApplicationPermissionUpdate', params: { id: cellValue }}) + this.$router.push({ name: 'ApplicationPermissionUpdate', params: { id: row.id }}) }, performDelete: ({ row, col }) => { const id = row.id diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue b/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue index ad5b110ef..52ee50269 100644 --- a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue +++ b/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionDetail/ChangeAuthPlanExecutionTaskList.vue @@ -51,9 +51,9 @@ export default { name: 'retry', type: 'info', title: this.$t('xpack.ChangeAuthPlan.Retry'), - callback: function({ cellValue, tableData }) { + callback: function({ row, tableData }) { this.$axios.put( - `/api/v1/xpack/change-auth-plan/plan-execution-subtask/${cellValue}/`, + `/api/v1/xpack/change-auth-plan/plan-execution-subtask/${row.id}/`, ).then(res => { window.open(`/#/ops/celery/task/${res.task}/log/`, '_blank', 'toolbar=yes, width=900, height=600') }) diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue b/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue index 6230fbbd9..45cc73dd2 100644 --- a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue +++ b/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanDetail/ChangeAuthPlanExecution/ChangeAuthPlanExecutionList.vue @@ -74,16 +74,16 @@ export default { name: 'log', type: 'primary', title: this.$t('xpack.ChangeAuthPlan.Log'), - callback: function({ cellValue, tableData }) { - window.open(`/#/ops/celery/task/${cellValue}/log/`, '_blank', 'toolbar=yes, width=900, height=600') + callback: function({ row }) { + window.open(`/#/ops/celery/task/${row.id}/log/`, '_blank', 'toolbar=yes, width=900, height=600') } }, { name: 'detail', title: this.$t('xpack.ChangeAuthPlan.Detail'), type: 'info', - callback: function({ cellValue, tableData }) { - return this.$router.push({ name: 'ChangeAuthPlanExecutionDetail', params: { id: cellValue }}) + callback: function({ row }) { + return this.$router.push({ name: 'ChangeAuthPlanExecutionDetail', params: { id: row.id }}) } } ] diff --git a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue b/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue index 27ab404b7..1ac28d6d1 100644 --- a/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue +++ b/src/views/xpack/ChangeAuthPlan/ChangeAuthPlanList.vue @@ -64,10 +64,10 @@ export default { title: vm.$t('xpack.Execute'), name: 'execute', type: 'info', - callback: function(data) { + callback: function({ row }) { this.$axios.post( `/api/v1/xpack/change-auth-plan/plan-execution/`, - { plan: data.cellValue } + { plan: row.id } ).then(res => { window.open(`/#/ops/celery/task/${res.task}/log/`, '_blank', 'toolbar=yes, width=900, height=600') }) From 79c89676a665e8ab7ec11f4ec3801fc17e70ac18 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 15 Mar 2021 18:55:41 +0800 Subject: [PATCH 3/7] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E7=94=A8=E6=88=B7=E5=92=8C=E5=88=A0=E9=99=A4=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=9A=84=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/AutoDataTable/index.vue | 3 +- src/layout/components/NavBar/Organization.vue | 5 +- src/store/getters.js | 9 +- src/store/modules/users.js | 8 +- src/views/users/User/UserList.vue | 123 +++++------------- 5 files changed, 53 insertions(+), 95 deletions(-) diff --git a/src/components/AutoDataTable/index.vue b/src/components/AutoDataTable/index.vue index 7360e7ab8..6d2b6d558 100644 --- a/src/components/AutoDataTable/index.vue +++ b/src/components/AutoDataTable/index.vue @@ -66,7 +66,8 @@ export default { async optionUrlMetaAndGenCols() { const url = (this.config.url.indexOf('?') === -1) ? `${this.config.url}?draw=1&display=1` : `${this.config.url}&draw=1&display=1` this.$store.dispatch('common/getUrlMeta', { url: url }).then(data => { - this.meta = data.actions[this.method.toUpperCase()] || {} + const method = this.method.toUpperCase() + this.meta = data.actions && data.actions[method] ? data.actions[method] : {} this.generateTotalColumns() }).then(() => { // 根据当前列重新生成最终渲染表格 diff --git a/src/layout/components/NavBar/Organization.vue b/src/layout/components/NavBar/Organization.vue index 3f8be89f2..943d9605c 100644 --- a/src/layout/components/NavBar/Organization.vue +++ b/src/layout/components/NavBar/Organization.vue @@ -48,7 +48,10 @@ export default { }, methods: { needShow() { - return !this.isCollapse && this.userAdminOrgList.length > 1 && this.inAdminPage + const otherOrgs = this.userAdminOrgList.filter(org => { + return !org.is_root && !org.is_default + }) + return !this.isCollapse && otherOrgs.length > 0 && this.inAdminPage }, changeOrg(orgId) { orgUtil.changeOrg(orgId) diff --git a/src/store/getters.js b/src/store/getters.js index 7df7ce1ef..def065b3e 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -4,7 +4,9 @@ const getters = { token: state => state.users.token, currentOrg: state => state.users.currentOrg, currentOrgIsDefault: state => state.users.currentOrg.is_default, - currentOrgIsRoot: state => state.users.currentOrg.is_root, + currentOrgIsRoot: state => { + return state.users.currentOrg && state.users.currentOrg.is_root + }, currentRole: state => state.users.currentRole, userAdminOrgList: state => state.users.orgs, currentUser: state => state.users.profile, @@ -16,6 +18,9 @@ const getters = { currentOrgPerms: state => state.users.perms, MFAVerifyAt: state => state.users.MFAVerifyAt, MFA_TTl: state => state.settings.publicSettings.SECURITY_MFA_VERIFY_TTL, - tableConfig: state => state.table.tableConfig + tableConfig: state => state.table.tableConfig, + currentUserIsSuperAdmin: state => { + return state.users.sysRole === 'Admin' + } } export default getters diff --git a/src/store/modules/users.js b/src/store/modules/users.js index 05139e1a2..feee1dcdc 100644 --- a/src/store/modules/users.js +++ b/src/store/modules/users.js @@ -16,9 +16,11 @@ const getDefaultState = () => { currentRole: getCurrentRoleFromCookie(), profile: {}, roles: {}, + sysRole: '', orgs: [], perms: 0b00000000, - MFAVerifyAt: null + MFAVerifyAt: null, + isSuperAdmin: false } } @@ -52,6 +54,9 @@ const mutations = { SET_ROLES(state, roles) { state.roles = roles }, + SET_SYS_ROLE(state, role) { + state.sysRole = role + }, SET_PERMS(state, perms) { state.perms = perms }, @@ -111,6 +116,7 @@ const actions = { return dispatch('getProfile').then((profile) => { const { current_org_roles: currentOrgRoles, role } = profile const roles = rolec.parseUserRoles(currentOrgRoles, role) + commit('SET_SYS_ROLE', role) commit('SET_ROLES', roles) commit('SET_PERMS', rolec.sumPerms(roles)) resolve(roles) diff --git a/src/views/users/User/UserList.vue b/src/views/users/User/UserList.vue index 2ebcc2249..86e2cda37 100644 --- a/src/views/users/User/UserList.vue +++ b/src/views/users/User/UserList.vue @@ -31,6 +31,15 @@ export default { }, data() { const vm = this + const hasDelete = () => { + return vm.currentUserIsSuperAdmin + } + const hasRemove = () => { + if (!vm.publicSettings.XPACK_LICENSE_IS_VALID) { + return false + } + return !vm.currentOrgIsRoot + } return { tableConfig: { url: '/api/v1/users/users/', @@ -69,7 +78,7 @@ export default { }, actions: { formatterArgs: { - hasDelete: () => this.currentOrgIsRoot, + hasDelete: hasDelete, canUpdate: function(row, cellValue) { return row.can_update }, @@ -81,7 +90,7 @@ export default { title: this.$t('users.Remove'), name: 'remove', type: 'warning', - has: () => !this.currentOrgIsRoot, + has: hasRemove, can: function(row, cellValue) { return row.can_delete }, @@ -93,27 +102,27 @@ export default { } }, headerActions: { - hasBulkDelete: false, + hasBulkDelete: hasDelete, canCreate: true, extraActions: [ { name: this.$t('users.InviteUser'), title: this.$t('users.InviteUser'), - has: - (JSON.parse(this.$cookie.get('jms_current_org')) - ? JSON.parse(this.$cookie.get('jms_current_org')).id - : '') !== 'DEFAULT', + has: () => { + return !this.currentOrgIsRoot && this.publicSettings.XPACK_LICENSE_IS_VALID + }, callback: function() { this.InviteDialogSetting.InviteDialogVisible = true }.bind(this) } ], extraMoreActions: [ { - title: this.$t('common.deleteSelected'), - name: 'deleteSelected', + title: this.$t('common.removeSelected'), + name: 'removeSelected', + has: hasRemove, can({ selectedRows }) { return selectedRows.length > 0 }, - callback: this.bulkDeleteCallback.bind(this) + callback: this.bulkRemoveCallback.bind(this) }, { name: 'disableSelected', @@ -203,95 +212,29 @@ export default { } }, computed: { - ...mapGetters(['currentOrgIsRoot', 'currentUser', 'device']) - }, - mounted() { - if (!this.currentOrgIsRoot) { - this.headerActions.extraMoreActions[0].title = this.$t( - 'common.removeSelected' - ) - } + ...mapGetters([ + 'currentOrgIsRoot', 'currentUser', 'publicSettings', + 'device', 'currentOrgIsDefault', 'currentUserIsSuperAdmin' + ]) }, methods: { removeUserFromOrg({ row, col, reload }) { - const msg = - this.$t('users.removeFromOrgWarningMsg') + ' "' + row.name + '"' - const title = this.$t('common.Info') - const performDelete = function() { - const url = `/api/v1/users/users/${row.id}/` - return this.$axios.delete(url) - } - this.$alert(msg, title, { - type: 'warning', - confirmButtonClass: 'el-button--danger', - showCancelButton: true, - beforeClose: async(action, instance, done) => { - if (action !== 'confirm') return done() - instance.confirmButtonLoading = true - try { - await performDelete.bind(this)({ row: row, col: col }) - done() - reload() - this.$message.success(this.$t('common.removeSuccessMsg')) - } catch (error) { - this.$message.error(this.$t('common.removeErrorMsg' + ' ' + error)) - } finally { - instance.confirmButtonLoading = false - } - } + const url = `/api/v1/users/users/${row.id}/remove/` + this.$axios.post(url).then(() => { + reload() + this.$message.success(this.$t('common.removeSuccessMsg')) }) }, - bulkDeleteCallback({ selectedRows, reloadTable }) { - let msgPrefix = this.$t('common.deleteWarningMsg') - if (!this.currentOrgIsRoot) { - msgPrefix = this.$t('common.removeWarningMsg') - } - const msg = - msgPrefix + - ' ' + - selectedRows.length + - ' ' + - this.$t('common.rows') + - ' ?' - const title = this.$t('common.Info') - const performDelete = this.performBulkDelete - this.$alert(msg, title, { - type: 'warning', - confirmButtonClass: 'el-button--danger', - showCancelButton: true, - beforeClose: async(action, instance, done) => { - if (action !== 'confirm') return done() - instance.confirmButtonLoading = true - try { - await performDelete(selectedRows) - done() - reloadTable() - let successMsg = this.$t('common.bulkDeleteSuccessMsg') - if (!this.currentOrgIsRoot) { - successMsg = this.$t('common.bulkRemoveSuccessMsg') - } - this.$message.success(successMsg) - } catch (error) { - // let errorMsg = this.$t('common.bulkDeleteErrorMsg') - // if (!this.currentOrgIsRoot) { - // errorMsg = this.$t('common.bulkRemoveErrorMsg') - // } - // this.$message.error(errorMsg + error) - } finally { - instance.confirmButtonLoading = false - } - } - }).catch(() => { - /* 取消*/ - }) - }, - async performBulkDelete(selectedRows) { + async bulkRemoveCallback({ selectedRows, reloadTable }) { const ids = selectedRows.map(v => { return v.id }) const data = await createSourceIdCache(ids) - const url = `${this.tableConfig.url}?spm=` + data.spm - return this.$axios.delete(url) + const url = `${this.tableConfig.url}/remove/?spm=` + data.spm + this.$axios.post(url).then(() => { + reloadTable() + this.$message.success(this.$t('common.removeSuccessMsg')) + }) }, handleInviteDialogClose() { this.InviteDialogSetting.InviteDialogVisible = false From 4b152bf9bf8b10c8636a1c6c1babf3c3976ced98 Mon Sep 17 00:00:00 2001 From: ibuler Date: Mon, 15 Mar 2021 11:40:56 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Droot=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=8F=AF=E4=BB=A5=E5=88=9B=E5=BB=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: 修复全局组织可以clone的问题 --- .../ListTable/TableAction/LeftSide.vue | 2 +- .../ListTable/formatters/ActionsFormatter.vue | 4 +- .../components/GenericTreeListPage/index.vue | 3 +- .../AdminUser/AdminUserDetail/AssetList.vue | 4 +- src/views/assets/Asset/AssetList.vue | 4 +- src/views/xpack/Cloud/Account/AccountList.vue | 92 ++++++++----------- 6 files changed, 49 insertions(+), 60 deletions(-) diff --git a/src/components/ListTable/TableAction/LeftSide.vue b/src/components/ListTable/TableAction/LeftSide.vue index a81f3bac7..8b22cd8e5 100644 --- a/src/components/ListTable/TableAction/LeftSide.vue +++ b/src/components/ListTable/TableAction/LeftSide.vue @@ -82,7 +82,7 @@ export default { title: this.$t('common.Create'), type: 'primary', has: true, - can: true, + can: this.canCreate, dropdown: [], callback: this.handleCreate } diff --git a/src/components/ListTable/formatters/ActionsFormatter.vue b/src/components/ListTable/formatters/ActionsFormatter.vue index 31fceb513..16182ab4c 100644 --- a/src/components/ListTable/formatters/ActionsFormatter.vue +++ b/src/components/ListTable/formatters/ActionsFormatter.vue @@ -84,7 +84,9 @@ export default { canUpdate: true, // can set function(row, value) hasDelete: true, // can set function(row, value) canDelete: true, - hasClone: true, + hasClone: () => { + return !this.$store.getters.currentOrgIsRoot + }, canClone: true, updateRoute: this.$route.name.replace('List', 'Update'), cloneRoute: this.$route.name.replace('List', 'Create'), diff --git a/src/layout/components/GenericTreeListPage/index.vue b/src/layout/components/GenericTreeListPage/index.vue index 180d3bc4d..ee0868754 100644 --- a/src/layout/components/GenericTreeListPage/index.vue +++ b/src/layout/components/GenericTreeListPage/index.vue @@ -4,7 +4,7 @@ @@ -39,6 +39,7 @@ export default { iHeaderActions() { const attrs = _.cloneDeep(this.headerActions) const canCreate = _.get(attrs, 'canCreate', null) + // this.$log.debug('Current org: ', this.currentOrg) if (canCreate === null && this.currentOrg && this.currentOrg.is_root) { _.set(attrs, 'canCreate', false) } diff --git a/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue b/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue index 3b9991b8e..acb1cad4d 100644 --- a/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue +++ b/src/views/assets/AdminUser/AdminUserDetail/AssetList.vue @@ -16,7 +16,7 @@ import QuickActions from '@/components/QuickActions/index' import ListTable from '@/components/ListTable' import RelationCard from '@/components/RelationCard' -import { BooleanFormatter } from '@/components/ListTable/formatters' +import { ChoicesFormatter } from '@/components/ListTable/formatters' export default { name: 'AssetList', @@ -44,7 +44,7 @@ export default { }, connectivity: { label: this.$t('assets.Reachable'), - formatter: BooleanFormatter, + formatter: ChoicesFormatter, formatterArgs: { iconChoices: { 0: 'fa-times text-danger', diff --git a/src/views/assets/Asset/AssetList.vue b/src/views/assets/Asset/AssetList.vue index b77cb21e7..403ec3b5f 100644 --- a/src/views/assets/Asset/AssetList.vue +++ b/src/views/assets/Asset/AssetList.vue @@ -67,7 +67,7 @@ diff --git a/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue b/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue index aaeb1474f..5adb193f7 100644 --- a/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue +++ b/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue @@ -64,6 +64,16 @@ export default { } }, methods: { + getUrl() { + const params = this.$route.params + let url = `/api/v1/acls/login-asset-acls/` + if (params.id) { + url = `${url}${params.id}` + } else { + url = `${url}` + } + return url + }, getMethod() { const params = this.$route.params if (params.id) { @@ -82,28 +92,26 @@ export default { return validValues }, performSubmit(validValues) { - if (validValues.assets.ip_group) { - console.log(validValues.assets.ip_group) - validValues.assets.ip_group = validValues.assets.ip_group.split(',') + if (!Array.isArray(validValues.assets.ip_group)) { + validValues.assets.ip_group = validValues.assets.ip_group ? validValues.assets.ip_group.split(',') : [] } - if (validValues.assets.hostname_group) { - validValues.assets.hostname_group = validValues.assets.hostname_group.split(',') + if (!Array.isArray(validValues.assets.hostname_group)) { + validValues.assets.hostname_group = validValues.assets.hostname_group ? validValues.assets.hostname_group.split(',') : [] } - if (validValues.system_users.protocol_group) { - validValues.system_users.protocol_group = validValues.system_users.protocol_group.split(',') + if (!Array.isArray(validValues.system_users.protocol_group)) { + validValues.system_users.protocol_group = validValues.system_users.protocol_group ? validValues.system_users.protocol_group.split(',') : [] } - if (validValues.system_users.name_group) { - validValues.system_users.name_group = validValues.system_users.name_group.split(',') + if (!Array.isArray(validValues.system_users.name_group)) { + validValues.system_users.name_group = validValues.system_users.name_group ? validValues.system_users.name_group.split(',') : [] } - if (validValues.system_users.username_group) { - validValues.system_users.username_group = validValues.system_users.username_group.split(',') + if (!Array.isArray(validValues.system_users.username_group)) { + validValues.system_users.username_group = validValues.system_users.username_group ? validValues.system_users.username_group.split(',') : [] } - if (validValues.users.username_group) { - validValues.users.username_group = validValues.users.username_group.split(',') + if (!Array.isArray(validValues.users.username_group)) { + validValues.users.username_group = validValues.users.username_group ? validValues.users.username_group.split(',') : [] } - const baseUrl = `/api/v1/acls/login-asset-acls/` const method = this.getMethod() - return this.$axios[method](`${baseUrl}`, validValues) + return this.$axios[method](`${this.getUrl()}`, validValues) } } } diff --git a/src/views/acl/AssetAcl/AssetAclList.vue b/src/views/acl/AssetAcl/AssetAclList.vue index cc1cddb44..57118a531 100644 --- a/src/views/acl/AssetAcl/AssetAclList.vue +++ b/src/views/acl/AssetAcl/AssetAclList.vue @@ -22,6 +22,9 @@ export default { user_username_group: { prop: 'users.username_group', showOverflowTooltip: true, + formatter: function(row) { + return {row.users.username_group.toString()} + }, label: this.$t('acl.username_group') }, reviewers: { @@ -29,23 +32,43 @@ export default { }, hostname_group: { prop: 'assets.hostname_group', - label: this.$t('acl.hostname_group') + label: this.$t('acl.hostname_group'), + showOverflowTooltip: true, + formatter: function(row) { + return {row.assets.hostname_group.toString()} + } }, ip_group: { prop: 'assets.ip_group', - label: this.$t('acl.asset_ip_group') + label: this.$t('acl.asset_ip_group'), + showOverflowTooltip: true, + formatter: function(row) { + return {row.assets.ip_group.toString()} + } }, name_group: { prop: 'system_users.name_group', - label: this.$t('acl.system_users_name_group') + label: this.$t('acl.system_users_name_group'), + showOverflowTooltip: true, + formatter: function(row) { + return {row.system_users.name_group.toString()} + } }, protocol_group: { prop: 'system_users.protocol_group', - label: this.$t('acl.system_users_protocol_group') + label: this.$t('acl.system_users_protocol_group'), + showOverflowTooltip: true, + formatter: function(row) { + return {row.system_users.protocol_group.toString()} + } }, systemuser_username_group: { prop: 'system_users.username_group', - label: this.$t('acl.system_users_username_group') + label: this.$t('acl.system_users_username_group'), + showOverflowTooltip: true, + formatter: function(row) { + return {row.system_users.username_group.toString()} + } } } }, diff --git a/src/views/acl/UserAcl/UserAclCreateUpdate.vue b/src/views/acl/UserAcl/UserAclCreateUpdate.vue index 849599fc8..b1739b62a 100644 --- a/src/views/acl/UserAcl/UserAclCreateUpdate.vue +++ b/src/views/acl/UserAcl/UserAclCreateUpdate.vue @@ -76,11 +76,11 @@ export default { return validValues }, performSubmit(validValues) { - if (validValues.ip_group) { - validValues.ip_group = validValues.ip_group.split(',') + if (!Array.isArray(validValues.ip_group)) { + validValues.ip_group = validValues.ip_group ? validValues.ip_group.split(',') : [] } const method = this.getMethod() - return this.$axios[method](`${this.getUrl()}}`, validValues) + return this.$axios[method](`${this.getUrl()}`, validValues) } } } From 65cd456ae9d530c29c5eab08ca814e83ab41f959 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Mon, 15 Mar 2021 19:40:02 +0800 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AF=86=E7=A0=81?= =?UTF-8?q?=E5=8C=A3=E5=AD=90=E5=8C=85=E5=90=AB=E5=85=8B=E9=9A=86=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=20(#659)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Orange --- src/components/AssetUserTable/index.vue | 5 +++++ src/views/xpack/Vault/VaultList.vue | 1 + 2 files changed, 6 insertions(+) diff --git a/src/components/AssetUserTable/index.vue b/src/components/AssetUserTable/index.vue index 12ba2a820..616ae8619 100644 --- a/src/components/AssetUserTable/index.vue +++ b/src/components/AssetUserTable/index.vue @@ -88,6 +88,10 @@ export default { hasExport: { type: Boolean, default: true + }, + hasClone: { + type: Boolean, + default: true } }, data() { @@ -146,6 +150,7 @@ export default { formatterArgs: { hasUpdate: false, // can set function(row, value) hasDelete: false, // can set function(row, value) + hasClone: this.hasClone, moreActionsTitle: this.$t('common.More'), extraActions: [ { diff --git a/src/views/xpack/Vault/VaultList.vue b/src/views/xpack/Vault/VaultList.vue index 3365a0507..cdf21c511 100644 --- a/src/views/xpack/Vault/VaultList.vue +++ b/src/views/xpack/Vault/VaultList.vue @@ -105,6 +105,7 @@ export default { assetUserConfig: { hasLeftActions: true, hasCreate: true, + hasClone: false, url: '/api/v1/assets/asset-users/', handleImport: function({ selectedRows }) { this.selectedRows = selectedRows