diff --git a/ui/src/config/section/config.js b/ui/src/config/section/config.js index 1e6531b896b..8b77c65d411 100644 --- a/ui/src/config/section/config.js +++ b/ui/src/config/section/config.js @@ -42,7 +42,7 @@ export default { label: 'label.configure.ldap', listView: true, args: [ - 'hostname', 'port' + 'hostname', 'port', 'domainid' ] }, { diff --git a/ui/src/views/iam/AddLdapAccount.vue b/ui/src/views/iam/AddLdapAccount.vue index c80dc918890..ce91f0ceff0 100644 --- a/ui/src/views/iam/AddLdapAccount.vue +++ b/ui/src/views/iam/AddLdapAccount.vue @@ -48,8 +48,14 @@ + layout="vertical" > + + + + {{ opt.name }} + + + + :loading="domainLoading" + @change="fetchListLdapUsers($event)" > {{ opt.name }} @@ -99,7 +106,7 @@ :placeholder="apiParams.networkdomain.description" /> - + import { api } from '@/api' import { timeZone } from '@/utils/timezone' +import store from '@/store' export default { name: 'AddLdapAccount', @@ -131,6 +139,8 @@ export default { listDomains: [], listRoles: [], timeZoneMap: [], + filters: [], + selectedFilter: '', listLoading: false, timeZoneLoading: false, domainLoading: false, @@ -175,32 +185,53 @@ export default { title: this.$t('label.email'), dataIndex: 'email', scopedSlots: { customRender: 'email' } + }, + { + title: this.$t('Conflict'), + dataIndex: 'conflictingusersource', + scopedSlots: { customRender: 'conflictingusersource' } } ] + this.filters = [ + { + id: 'NoFilter', + name: 'No filter' + }, + { + id: 'LocalDomain', + name: 'Local domain' + }, + { + id: 'AnyDomain', + name: 'Any domain' + }, + { + id: 'PotentialImport', + name: 'Potential import' + } + ] + this.selectedFilter = this.filters[0].id }, mounted () { this.fetchData() }, methods: { async fetchData () { - this.listLoading = true this.timeZoneLoading = true this.domainLoading = true this.roleLoading = true + this.fetchListLdapUsers() const [ listTimeZone, - listLdapUsers, listDomains, listRoles ] = await Promise.all([ this.fetchTimeZone(), - this.fetchListLdapUsers(), this.fetchListDomains(), this.fetchListRoles() ]).catch(error => { this.$notifyError(error) }).finally(() => { - this.listLoading = false this.timeZoneLoading = false this.domainLoading = false this.roleLoading = false @@ -208,8 +239,6 @@ export default { this.timeZoneMap = listTimeZone && listTimeZone.length > 0 ? listTimeZone : [] this.listDomains = listDomains && listDomains.length > 0 ? listDomains : [] this.listRoles = listRoles && listRoles.length > 0 ? listRoles : [] - this.dataSource = listLdapUsers - this.oldDataSource = listLdapUsers }, fetchTimeZone (value) { return new Promise((resolve, reject) => { @@ -220,22 +249,32 @@ export default { }) }) }, - fetchListLdapUsers () { - return new Promise((resolve, reject) => { - const params = {} - params.listtype = 'new' - api('listLdapUsers', params).then(json => { - const listLdapUsers = json.ldapuserresponse.LdapUser - if (listLdapUsers) { - const ldapUserLength = listLdapUsers.length - for (let i = 0; i < ldapUserLength; i++) { - listLdapUsers[i].name = [listLdapUsers[i].firstname, listLdapUsers[i].lastname].join(' ') - } + fetchListLdapUsers (domain) { + this.listLoading = true + const params = {} + params.listtype = 'new' + params.userfilter = this.selectedFilter + params.domainid = store.getters.userInfo.domainid + if (domain) { + const result = this.listDomains.filter(item => item.name === domain) + if (result) { + params.domainid = result[0].id + } + } + api('listLdapUsers', params).then(json => { + const listLdapUsers = json.ldapuserresponse.LdapUser + if (listLdapUsers) { + const ldapUserLength = listLdapUsers.length + for (let i = 0; i < ldapUserLength; i++) { + listLdapUsers[i].name = [listLdapUsers[i].firstname, listLdapUsers[i].lastname].join(' ') } - resolve(listLdapUsers) - }).catch(error => { - reject(error) - }) + } + this.dataSource = listLdapUsers + this.oldDataSource = listLdapUsers + }).catch(error => { + this.$notifyError(error) + }).finally(() => { + this.listLoading = false }) }, fetchListDomains () { @@ -263,7 +302,7 @@ export default { handleSubmit (e) { e.preventDefault() this.form.validateFields((err, values) => { - if (err || this.selectedRowKeys.length === 0) { + if (err) { return } let apiName = 'ldapCreateAccount' @@ -273,14 +312,12 @@ export default { const params = {} params.domainid = domain[0].id params.roleid = role[0].id + params.account = values.account params.timezone = values.timezone params.networkdomain = values.networkdomain - params.group = values.group - if (params.group && params.group.trim().length > 0) { + if (values.group && values.group.trim().length > 0) { + params.group = values.group apiName = 'importLdapUsers' - } - this.selectedRowKeys.forEach(username => { - params.username = username promises.push(new Promise((resolve, reject) => { api(apiName, params).then(json => { resolve(json) @@ -288,7 +325,18 @@ export default { reject(error) }) })) - }) + } else { + this.selectedRowKeys.forEach(username => { + params.username = username + promises.push(new Promise((resolve, reject) => { + api(apiName, params).then(json => { + resolve(json) + }).catch(error => { + reject(error) + }) + })) + }) + } this.loading = true Promise.all(promises).then(response => { for (let i = 0; i < response.length; i++) {