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/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/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/components/ListTable/formatters/ArrayFormatter.vue b/src/components/ListTable/formatters/ArrayFormatter.vue index 53e59472f..0d46818e9 100644 --- a/src/components/ListTable/formatters/ArrayFormatter.vue +++ b/src/components/ListTable/formatters/ArrayFormatter.vue @@ -1,15 +1,12 @@ 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/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/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) } } } diff --git a/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue b/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue index f1c72f18c..8e0c02ad0 100644 --- a/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue +++ b/src/views/assets/AdminUser/AdminUserDetail/AccountList.vue @@ -2,7 +2,7 @@
- +
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/AdminUser/AdminUserDetail/Detail.vue b/src/views/assets/AdminUser/AdminUserDetail/Detail.vue index 4cdc74e4c..748e08a51 100644 --- a/src/views/assets/AdminUser/AdminUserDetail/Detail.vue +++ b/src/views/assets/AdminUser/AdminUserDetail/Detail.vue @@ -3,22 +3,17 @@ - - -