Эх сурвалжийг харах

😎调整域账号相关代码

zuohuaijun 2 жил өмнө
parent
commit
1e25afd920

+ 6 - 4
Admin.NET/Admin.NET.Core/Entity/SysLdap.cs

@@ -65,14 +65,16 @@ public class SysLdap : EntityTenant
     /// <summary>
     /// 绑定域账号字段属性值
     /// </summary>
-    [SugarColumn(ColumnDescription = "绑定域账号字段属性值", Length = 24)]
+    [SugarColumn(ColumnDescription = "绑定域账号字段属性值", Length = 32)]
+    [Required]
     public virtual string BindAttrAccount { get; set; } = "sAMAccountName";
 
     /// <summary>
-    /// 绑定用户employeeID属性值
+    /// 绑定用户EmployeeId属性值
     /// </summary>
-    [SugarColumn(ColumnDescription = "绑定用户employeeID属性值", Length = 24)]
-    public virtual string BindAttrEmployeeId { get; set; } = "employeeID";
+    [SugarColumn(ColumnDescription = "绑定用户EmployeeId属性值", Length = 32)]
+    [Required]
+    public virtual string BindAttrEmployeeId { get; set; } = "EmployeeId";
 
     /// <summary>
     /// 状态

+ 2 - 6
Admin.NET/Admin.NET.Core/Service/Auth/Dto/SysLdapInput.cs

@@ -9,7 +9,7 @@
 namespace Admin.NET.Core.Service;
 
 /// <summary>
-/// 系统域登录信息配置表分页查询输入参数
+/// 系统域登录信息配置输入参数
 /// </summary>
 public class SysLdapInput : BasePageInput
 {
@@ -40,10 +40,6 @@ public class DetailSysLdapInput : BaseIdInput
 {
 }
 
-public class QueryByIdSysLdapInput : BaseIdInput
-{
-}
-
-public class UserSyncIdSysLdapInput:BaseIdInput
+public class SyncSysLdapInput : BaseIdInput
 {
 }

+ 13 - 10
Admin.NET/Admin.NET.Core/Service/Auth/SysLdapService.cs

@@ -30,6 +30,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
+    [DisplayName("获取系统域登录信息配置分页列表")]
     public async Task<SqlSugarPagedList<SysLdap>> Page(SysLdapInput input)
     {
         return await _sysLdapRep.AsQueryable()
@@ -45,6 +46,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [ApiDescriptionSettings(Name = "Add"), HttpPost]
+    [DisplayName("增加系统域登录信息配置")]
     public async Task<long> Add(AddSysLdapInput input)
     {
         var entity = input.Adapt<SysLdap>();
@@ -59,6 +61,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [ApiDescriptionSettings(Name = "Update"), HttpPost]
+    [DisplayName("更新系统域登录信息配置")]
     public async Task Update(UpdateSysLdapInput input)
     {
         var entity = input.Adapt<SysLdap>();
@@ -75,6 +78,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [ApiDescriptionSettings(Name = "Delete"), HttpPost]
+    [DisplayName("删除系统域登录信息配置")]
     public async Task Delete(DeleteSysLdapInput input)
     {
         var entity = await _sysLdapRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
@@ -87,7 +91,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [ApiDescriptionSettings(Name = "Detail")]
+    [DisplayName("获取系统域登录信息配置详情")]
     public async Task<SysLdap> GetDetail([FromQuery] DetailSysLdapInput input)
     {
         return await _sysLdapRep.GetFirstAsync(u => u.Id == input.Id);
@@ -98,7 +102,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [ApiDescriptionSettings(Name = "List")]
+    [DisplayName("获取系统域登录信息配置列表")]
     public async Task<List<SysLdap>> GetList([FromQuery] SysLdapInput input)
     {
         return await _sysLdapRep.AsQueryable().Select<SysLdap>().ToListAsync();
@@ -145,6 +149,7 @@ public class SysLdapService : IDynamicApiController, ITransient
                     throw Oops.Oh(ErrorCodeEnum.D0009);
                 case LdapException.InvalidCredentials:
                     return false;
+
                 default:
                     throw Oops.Oh(e.Message);
             }
@@ -161,18 +166,16 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [HttpPost]
-    [ApiDescriptionSettings(Name = "UserSync")]
-    public async Task UserSync(UserSyncIdSysLdapInput input)
+    [DisplayName("同步域用户")]
+    public async Task SyncSysLdapUser(SyncSysLdapInput input)
     {
         var ldap = await _sysLdapRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        LdapConnection ldapConn = new LdapConnection();
+        var ldapConn = new LdapConnection();
         try
         {
             ldapConn.Connect(ldap.Host, ldap.Port);
             ldapConn.Bind(ldap.Version, ldap.BindDn, ldap.BindPass);
             var userEntitys = ldapConn.Search(ldap.BaseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
-            string dn = string.Empty;
             var listUserLdap = new List<SysUserLdap>();
             while (userEntitys.HasMore())
             {
@@ -201,8 +204,9 @@ public class SysLdapService : IDynamicApiController, ITransient
                 }
             }
             if (listUserLdap.Count == 0)
-                return;           
-            await _sysUserLdapService.InsertUserLdapsAsync(ldap.TenantId.Value, listUserLdap);
+                return;
+
+            await _sysUserLdapService.InsertUserLdaps(ldap.TenantId.Value, listUserLdap);
         }
         catch (LdapException e)
         {
@@ -232,7 +236,6 @@ public class SysLdapService : IDynamicApiController, ITransient
     private void LdapUserSearchDn(LdapConnection conn, SysLdap ldap, List<SysUserLdap> listUserLdap, string baseDn)
     {
         var userEntitys = conn.Search(baseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
-        string dn = string.Empty;
         while (userEntitys.HasMore())
         {
             LdapEntry entity;

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/User/Dto/UserOutput.cs

@@ -24,7 +24,7 @@ public class UserOutput : SysUser
     /// 角色名称
     /// </summary>
     public string RoleName { get; set; }
-    
+
     /// <summary>
     /// 域用户
     /// </summary>

+ 18 - 18
Admin.NET/Admin.NET.Core/Service/User/SysUserLdapService.cs

@@ -6,58 +6,58 @@
 //
 // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
 
-using Furion.Localization;
-
 namespace Admin.NET.Core.Service;
+
 /// <summary>
-/// 用户域账号对照服务
+/// 用户域账号服务
 /// </summary>
-[ApiDescriptionSettings(Order = 490)]
-public class SysUserLdapService : IDynamicApiController, ITransient
+public class SysUserLdapService : ITransient
 {
     private readonly SqlSugarRepository<SysUserLdap> _sysUserLdapRep;
-    private readonly ISqlSugarClient _sqlSugarClient;
-    public SysUserLdapService(SqlSugarRepository<SysUserLdap> sysUserLdapRep, ISqlSugarClient sqlSugarClient)
+
+    public SysUserLdapService(SqlSugarRepository<SysUserLdap> sysUserLdapRep)
     {
         _sysUserLdapRep = sysUserLdapRep;
-        _sqlSugarClient = sqlSugarClient;
     }
 
     /// <summary>
-    /// 批量插入数据
+    /// 批量插入域账号
     /// </summary>
     /// <param name="tenantId"></param>
     /// <param name="sysUserLdaps"></param>
     /// <returns></returns>
-    public async Task InsertUserLdapsAsync(long tenantId, List<SysUserLdap> sysUserLdaps)
+    public async Task InsertUserLdaps(long tenantId, List<SysUserLdap> sysUserLdaps)
     {
         await _sysUserLdapRep.DeleteAsync(u => u.TenantId == tenantId);
+
         await _sysUserLdapRep.InsertRangeAsync(sysUserLdaps);
-        await _sqlSugarClient.Updateable<SysUserLdap>()
-                             .InnerJoin<SysUser>((l, u) => l.EmployeeId == u.Account && u.Status == StatusEnum.Enable && u.IsDelete == false && l.IsDelete == false)
-                             .SetColumns((l, u) => new SysUserLdap { UserId = u.Id })
-                             .ExecuteCommandAsync();
+
+        await _sysUserLdapRep.AsUpdateable()
+            .InnerJoin<SysUser>((l, u) => l.EmployeeId == u.Account && u.Status == StatusEnum.Enable && u.IsDelete == false && l.IsDelete == false)
+            .SetColumns((l, u) => new SysUserLdap { UserId = u.Id })
+            .ExecuteCommandAsync();
     }
 
     /// <summary>
-    /// 批量插入数据
+    /// 增加域账号
     /// </summary>
     /// <param name="tenantId"></param>
     /// <param name="userId"></param>
     /// <param name="account"></param>
     /// <param name="domainAccount"></param>
     /// <returns></returns>
-    public async Task AddUserLdapAsync(long tenantId, long userId, string account, string domainAccount)
+    public async Task AddUserLdap(long tenantId, long userId, string account, string domainAccount)
     {
         var userLdap = _sysUserLdapRep.GetFirstAsync(u => u.TenantId == tenantId && u.IsDelete == false && (u.Account == account || u.UserId == userId || u.EmployeeId == domainAccount));
         if (userLdap != null)
             await _sysUserLdapRep.DeleteByIdAsync(userLdap.Id);
+
         if (!string.IsNullOrWhiteSpace(domainAccount))
             await _sysUserLdapRep.InsertAsync(new SysUserLdap { EmployeeId = account, TenantId = tenantId, UserId = userId, Account = domainAccount });
     }
 
     /// <summary>
-    /// 删除用户关联数据
+    /// 删除域账号
     /// </summary>
     /// <param name="userId"></param>
     /// <returns></returns>
@@ -65,4 +65,4 @@ public class SysUserLdapService : IDynamicApiController, ITransient
     {
         await _sysUserLdapRep.DeleteAsync(u => u.UserId == userId);
     }
-}
+}

+ 8 - 5
Admin.NET/Admin.NET.Core/Service/User/SysUserService.cs

@@ -103,12 +103,14 @@ public class SysUserService : IDynamicApiController, ITransient
         var user = input.Adapt<SysUser>();
         user.Password = CryptogramUtil.Encrypt(password);
         var newUser = await _sysUserRep.AsInsertable(user).ExecuteReturnEntityAsync();
+
         input.Id = newUser.Id;
         await UpdateRoleAndExtOrg(input);
+
+        // 增加域账号
         if (!string.IsNullOrWhiteSpace(input.DomainAccount))
-        {
-            await _sysUserLdapService.AddUserLdapAsync(newUser.TenantId.Value, newUser.Id, newUser.Account, input.DomainAccount);
-        }
+            await _sysUserLdapService.AddUserLdap(newUser.TenantId.Value, newUser.Id, newUser.Account, input.DomainAccount);
+
         return newUser.Id;
     }
 
@@ -138,7 +140,8 @@ public class SysUserService : IDynamicApiController, ITransient
         var roleIds = await GetOwnRoleList(input.Id);
         if (input.OrgId != user.OrgId || !input.RoleIdList.OrderBy(u => u).SequenceEqual(roleIds.OrderBy(u => u)))
             await _sysOnlineUserService.ForceOffline(input.Id);
-        await _sysUserLdapService.AddUserLdapAsync(user.TenantId.Value, user.Id, user.Account, input.DomainAccount);
+        // 更新域账号
+        await _sysUserLdapService.AddUserLdap(user.TenantId.Value, user.Id, user.Account, input.DomainAccount);
     }
 
     /// <summary>
@@ -180,7 +183,7 @@ public class SysUserService : IDynamicApiController, ITransient
         // 删除用户扩展机构
         await _sysUserExtOrgService.DeleteUserExtOrgByUserId(input.Id);
 
-        //删除用户域关联信息
+        // 删除域账号
         await _sysUserLdapService.DeleteUserLdapByUserId(input.Id);
     }
 

+ 7 - 0
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs

@@ -50,6 +50,13 @@ public static class SqlSugarFilter
         {
             // 获取用户所属机构
             var orgIds = App.GetService<SysOrgService>().GetUserOrgIdList().GetAwaiter().GetResult();
+
+            var orglds = new List<long>();
+            Scoped.Create((factory, scope) =>
+            {
+                var serviceProvider = scope.ServiceProvider;
+                orglds = serviceProvider.GetService<SysOrgService>().GetUserOrgIdList().GetAwaiter().GetResult();
+            });
             if (orgIds == null || orgIds.Count == 0) return;
 
             // 获取业务实体数据表

+ 84 - 84
Web/src/api-services/apis/sys-ldap-api.ts

@@ -23,9 +23,9 @@ import { AdminResultListSysLdap } from '../models';
 import { AdminResultSqlSugarPagedListSysLdap } from '../models';
 import { AdminResultSysLdap } from '../models';
 import { DeleteSysLdapInput } from '../models';
+import { SyncSysLdapInput } from '../models';
 import { SysLdapInput } from '../models';
 import { UpdateSysLdapInput } from '../models';
-import { UserSyncSysLdapInput } from '../models';
 /**
  * SysLdapApi - axios parameter creator
  * @export
@@ -130,54 +130,6 @@ export const SysLdapApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
-         * @summary 删除系统域登录信息配置
-         * @param {UserSyncSysLdapInput} [body] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        apiSysLdapUserSyncPost: async (body?: UserSyncSysLdapInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysLdap/userSync`;
-            // use dummy base URL string because the URL constructor only accepts absolute URLs.
-            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication Bearer required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? await configuration.accessToken()
-                    : await configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
-
-            const query = new URLSearchParams(localVarUrlObj.search);
-            for (const key in localVarQueryParameter) {
-                query.set(key, localVarQueryParameter[key]);
-            }
-            for (const key in options.params) {
-                query.set(key, options.params[key]);
-            }
-            localVarUrlObj.search = (new URLSearchParams(query)).toString();
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
-
-            return {
-                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
          * @summary 获取系统域登录信息配置详情
          * @param {number} id 主键Id
          * @param {*} [options] Override http request option.
@@ -356,6 +308,54 @@ export const SysLdapApiAxiosParamCreator = function (configuration?: Configurati
         },
         /**
          * 
+         * @summary 同步域用户
+         * @param {SyncSysLdapInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        apiSysLdapSyncSysLdapUserPost: async (body?: SyncSysLdapInput, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysLdap/syncSysLdapUser`;
+            // use dummy base URL string because the URL constructor only accepts absolute URLs.
+            const localVarUrlObj = new URL(localVarPath, 'https://example.com');
+            let baseOptions;
+            if (configuration) {
+                baseOptions = configuration.baseOptions;
+            }
+            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};
+            const localVarHeaderParameter = {} as any;
+            const localVarQueryParameter = {} as any;
+
+            // authentication Bearer required
+            // http bearer authentication required
+            if (configuration && configuration.accessToken) {
+                const accessToken = typeof configuration.accessToken === 'function'
+                    ? await configuration.accessToken()
+                    : await configuration.accessToken;
+                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
+            }
+
+            localVarHeaderParameter['Content-Type'] = 'application/json-patch+json';
+
+            const query = new URLSearchParams(localVarUrlObj.search);
+            for (const key in localVarQueryParameter) {
+                query.set(key, localVarQueryParameter[key]);
+            }
+            for (const key in options.params) {
+                query.set(key, options.params[key]);
+            }
+            localVarUrlObj.search = (new URLSearchParams(query)).toString();
+            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
+            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
+            const needsSerialization = (typeof body !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
+            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || "");
+
+            return {
+                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,
+                options: localVarRequestOptions,
+            };
+        },
+        /**
+         * 
          * @summary 更新系统域登录信息配置
          * @param {UpdateSysLdapInput} [body] 
          * @param {*} [options] Override http request option.
@@ -441,20 +441,6 @@ export const SysLdapApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 同步系统域登录信息配置
-         * @param {UserSyncSysLdapInput} [body] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysLdapUserSyncPost(body?: UserSyncSysLdapInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
-            const localVarAxiosArgs = await SysLdapApiAxiosParamCreator(configuration).apiSysLdapUserSyncPost(body, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
          * @summary 获取系统域登录信息配置详情
          * @param {number} id 主键Id
          * @param {*} [options] Override http request option.
@@ -503,6 +489,20 @@ export const SysLdapApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
+         * @summary 同步域用户
+         * @param {SyncSysLdapInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLdapSyncSysLdapUserPost(body?: SyncSysLdapInput, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {
+            const localVarAxiosArgs = await SysLdapApiAxiosParamCreator(configuration).apiSysLdapSyncSysLdapUserPost(body, options);
+            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
+                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
+                return axios.request(axiosRequestArgs);
+            };
+        },
+        /**
+         * 
          * @summary 更新系统域登录信息配置
          * @param {UpdateSysLdapInput} [body] 
          * @param {*} [options] Override http request option.
@@ -546,16 +546,6 @@ export const SysLdapApiFactory = function (configuration?: Configuration, basePa
         },
         /**
          * 
-         * @summary 同步系统域登录信息配置
-         * @param {UserSyncSysLdapInput} [body] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async apiSysLdapUserSyncPost(body?: UserSyncSysLdapInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
-            return SysLdapApiFp(configuration).apiSysLdapUserSyncPost(body, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
          * @summary 获取系统域登录信息配置详情
          * @param {number} id 主键Id
          * @param {*} [options] Override http request option.
@@ -592,6 +582,16 @@ export const SysLdapApiFactory = function (configuration?: Configuration, basePa
         },
         /**
          * 
+         * @summary 同步域用户
+         * @param {SyncSysLdapInput} [body] 
+         * @param {*} [options] Override http request option.
+         * @throws {RequiredError}
+         */
+        async apiSysLdapSyncSysLdapUserPost(body?: SyncSysLdapInput, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {
+            return SysLdapApiFp(configuration).apiSysLdapSyncSysLdapUserPost(body, options).then((request) => request(axios, basePath));
+        },
+        /**
+         * 
          * @summary 更新系统域登录信息配置
          * @param {UpdateSysLdapInput} [body] 
          * @param {*} [options] Override http request option.
@@ -634,17 +634,6 @@ export class SysLdapApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 同步系统域登录信息配置
-     * @param {UserSyncSysLdapInput} [body] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SysLdapApi
-     */
-    public async apiSysLdapUserSyncPost(body?: UserSyncSysLdapInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
-        return SysLdapApiFp(this.configuration).apiSysLdapUserSyncPost(body, options).then((request) => request(this.axios, this.basePath));
-    }
-    /**
-     * 
      * @summary 获取系统域登录信息配置详情
      * @param {number} id 主键Id
      * @param {*} [options] Override http request option.
@@ -684,6 +673,17 @@ export class SysLdapApi extends BaseAPI {
     }
     /**
      * 
+     * @summary 同步域用户
+     * @param {SyncSysLdapInput} [body] 
+     * @param {*} [options] Override http request option.
+     * @throws {RequiredError}
+     * @memberof SysLdapApi
+     */
+    public async apiSysLdapSyncSysLdapUserPost(body?: SyncSysLdapInput, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {
+        return SysLdapApiFp(this.configuration).apiSysLdapSyncSysLdapUserPost(body, options).then((request) => request(this.axios, this.basePath));
+    }
+    /**
+     * 
      * @summary 更新系统域登录信息配置
      * @param {UpdateSysLdapInput} [body] 
      * @param {*} [options] Override http request option.

+ 16 - 0
Web/src/api-services/models/add-sys-ldap-input.ts

@@ -150,6 +150,22 @@ export interface AddSysLdapInput {
     version?: number;
 
     /**
+     * 绑定域账号字段属性值
+     *
+     * @type {string}
+     * @memberof AddSysLdapInput
+     */
+    bindAttrAccount: string;
+
+    /**
+     * 绑定用户EmployeeId属性值
+     *
+     * @type {string}
+     * @memberof AddSysLdapInput
+     */
+    bindAttrEmployeeId: string;
+
+    /**
      * @type {StatusEnum}
      * @memberof AddSysLdapInput
      */

+ 8 - 8
Web/src/api-services/models/add-user-input.ts

@@ -312,14 +312,6 @@ export interface AddUserInput {
     jobNum?: string | null;
 
     /**
-     * 域账号
-     *
-     * @type {string}
-     * @memberof UpdateUserInput
-     */
-    domainAccount?: string | null;
-
-    /**
      * 职级
      *
      * @type {string}
@@ -424,6 +416,14 @@ export interface AddUserInput {
     realName: string;
 
     /**
+     * 域用户
+     *
+     * @type {string}
+     * @memberof AddUserInput
+     */
+    domainAccount?: string | null;
+
+    /**
      * 角色集合
      *
      * @type {Array<number>}

+ 1 - 0
Web/src/api-services/models/index.ts

@@ -215,6 +215,7 @@ export * from './sql-sugar-paged-list-tenant-output';
 export * from './sql-sugar-paged-list-user-output';
 export * from './status-enum';
 export * from './swagger-submit-url-body';
+export * from './sync-sys-ldap-input';
 export * from './sys-code-gen';
 export * from './sys-code-gen-config';
 export * from './sys-config';

+ 3 - 3
Web/src/api-services/models/user-sync-sys-ldap-input.ts → Web/src/api-services/models/sync-sys-ldap-input.ts

@@ -16,15 +16,15 @@
  * 
  *
  * @export
- * @interface UserSyncSysLdapInput
+ * @interface SyncSysLdapInput
  */
-export interface UserSyncSysLdapInput {
+export interface SyncSysLdapInput {
 
     /**
      * 主键Id
      *
      * @type {number}
-     * @memberof UserSyncSysLdapInput
+     * @memberof SyncSysLdapInput
      */
     id: number;
 }

+ 1 - 1
Web/src/api-services/models/sys-ldap-input.ts

@@ -13,7 +13,7 @@
  */
 
  /**
- * 系统域登录信息配置表分页查询输入参数
+ * 系统域登录信息配置输入参数
  *
  * @export
  * @interface SysLdapInput

+ 16 - 0
Web/src/api-services/models/sys-ldap.ts

@@ -150,6 +150,22 @@ export interface SysLdap {
     version?: number;
 
     /**
+     * 绑定域账号字段属性值
+     *
+     * @type {string}
+     * @memberof SysLdap
+     */
+    bindAttrAccount: string;
+
+    /**
+     * 绑定用户EmployeeId属性值
+     *
+     * @type {string}
+     * @memberof SysLdap
+     */
+    bindAttrEmployeeId: string;
+
+    /**
      * @type {StatusEnum}
      * @memberof SysLdap
      */

+ 0 - 8
Web/src/api-services/models/sys-user.ts

@@ -327,14 +327,6 @@ export interface SysUser {
     jobNum?: string | null;
 
     /**
-     * 域账号
-     *
-     * @type {string}
-     * @memberof UpdateUserInput
-     */
-    domainAccount?: string | null;
-    
-    /**
      * 职级
      *
      * @type {string}

+ 16 - 0
Web/src/api-services/models/update-sys-ldap-input.ts

@@ -150,6 +150,22 @@ export interface UpdateSysLdapInput {
     version?: number;
 
     /**
+     * 绑定域账号字段属性值
+     *
+     * @type {string}
+     * @memberof UpdateSysLdapInput
+     */
+    bindAttrAccount: string;
+
+    /**
+     * 绑定用户EmployeeId属性值
+     *
+     * @type {string}
+     * @memberof UpdateSysLdapInput
+     */
+    bindAttrEmployeeId: string;
+
+    /**
      * @type {StatusEnum}
      * @memberof UpdateSysLdapInput
      */

+ 8 - 8
Web/src/api-services/models/update-user-input.ts

@@ -312,14 +312,6 @@ export interface UpdateUserInput {
     jobNum?: string | null;
 
     /**
-     * 域账号
-     *
-     * @type {string}
-     * @memberof UpdateUserInput
-     */
-    domainAccount?: string | null;
-    
-    /**
      * 职级
      *
      * @type {string}
@@ -424,6 +416,14 @@ export interface UpdateUserInput {
     realName: string;
 
     /**
+     * 域用户
+     *
+     * @type {string}
+     * @memberof UpdateUserInput
+     */
+    domainAccount?: string | null;
+
+    /**
      * 角色集合
      *
      * @type {Array<number>}

+ 8 - 8
Web/src/api-services/models/user-output.ts

@@ -327,14 +327,6 @@ export interface UserOutput {
     jobNum?: string | null;
 
     /**
-     * 域账号
-     *
-     * @type {string}
-     * @memberof UpdateUserInput
-     */
-    domainAccount?: string | null;
-    
-    /**
      * 职级
      *
      * @type {string}
@@ -445,4 +437,12 @@ export interface UserOutput {
      * @memberof UserOutput
      */
     roleName?: string | null;
+
+    /**
+     * 域用户
+     *
+     * @type {string}
+     * @memberof UserOutput
+     */
+    domainAccount?: string | null;
 }

+ 4 - 6
Web/src/views/system/ldap/component/editLdap.vue

@@ -41,14 +41,12 @@
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="绑定账号属性" prop="bindAttrAccount">
-							<el-input v-model="state.ruleForm.bindAttrAccount" placeholder="请输入域账号字段属性值" maxlength="24"
-								show-word-limit clearable />
+							<el-input v-model="state.ruleForm.bindAttrAccount" placeholder="请输入域账号字段属性值" maxlength="24" show-word-limit clearable />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
 						<el-form-item label="绑定账号属性" prop="bindAttrEmployeeId">
-							<el-input v-model="state.ruleForm.bindAttrEmployeeId" placeholder="请输入绑定用户employeeID属性!"
-								maxlength="24" show-word-limit clearable />
+							<el-input v-model="state.ruleForm.bindAttrEmployeeId" placeholder="请输入绑定用户EmployeeId属性!" maxlength="24" show-word-limit clearable />
 						</el-form-item>
 					</el-col>
 					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
@@ -130,8 +128,8 @@ const rules = ref<FormRules>({
 	bindPass: [{ required: true, message: '请输入绑定密码!', trigger: 'blur' }],
 	authFilter: [{ required: true, message: '请输入用户过滤规则!', trigger: 'blur' }],
 	version: [{ required: true, message: '请输入Ldap版本!', trigger: 'blur' }],
-	bindAttrAccount: [{ required: true, message: '请输入账号绑定字段!', trigger: 'blur', },],
-	bindAttrEmployeeId: [{ required: true, message: '绑定用户employeeID属性!', trigger: 'blur', },],
+	bindAttrAccount: [{ required: true, message: '请输入账号绑定字段!', trigger: 'blur' }],
+	bindAttrEmployeeId: [{ required: true, message: '绑定用户EmployeeId属性!', trigger: 'blur' }],
 });
 
 // 导出对象

+ 20 - 27
Web/src/views/system/ldap/index.vue

@@ -27,7 +27,7 @@
 				<el-table-column prop="port" label="端口" show-overflow-tooltip="" />
 				<el-table-column prop="baseDn" label="用户搜索基准" show-overflow-tooltip="" />
 				<el-table-column prop="bindDn" label="绑定DN" show-overflow-tooltip="" />
-				<el-table-column prop="bindPass" label="绑定密码" min-width="150" show-overflow-tooltip="" />
+				<el-table-column prop="bindPass" label="绑定密码" min-width="200" show-overflow-tooltip="" />
 				<el-table-column prop="authFilter" label="用户过滤规则" show-overflow-tooltip="" />
 				<el-table-column prop="version" label="Ldap版本" show-overflow-tooltip="" />
 				<el-table-column prop="status" label="状态" width="80" align="center" show-overflow-tooltip="">
@@ -41,18 +41,11 @@
 						<ModifyRecord :data="scope.row" />
 					</template>
 				</el-table-column>
-				<el-table-column label="操作" width="140" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('sysLdap:update') || auth('sysLdap:delete')">
+				<el-table-column label="操作" width="240" align="center" fixed="right" show-overflow-tooltip="" v-if="auth('sysLdap:update') || auth('sysLdap:delete')">
 					<template #default="scope">
 						<el-button icon="ele-Edit" size="small" text="" type="primary" @click="openEditSysLdap(scope.row)" v-auth="'sysLdap:update'"> 编辑 </el-button>
-						<el-dropdown>
-							<el-button icon="ele-MoreFilled" size="small" text type="primary" style="padding-left: 12px" />
-							<template #dropdown>
-								<el-dropdown-menu>
-									<el-dropdown-item icon="ele-OfficeBuilding" @click="syncDomainData(scope.row)" v-auth="'sysLdap:userSync'"> 同步域账户 </el-dropdown-item>
-									<el-dropdown-item icon="ele-Delete" @click="delSysLdap(scope.row)" divided v-auth="'sysLdap:delete'"> 删除角色 </el-dropdown-item>
-								</el-dropdown-menu>
-							</template>
-						</el-dropdown>
+						<el-button icon="ele-Delete" size="small" text type="danger" @click="delSysLdap(scope.row)" v-auth="'sysLdap:delete'"> 删除 </el-button>
+						<el-button icon="ele-Refresh" size="small" text type="primary" @click="syncDomainData(scope.row)" v-auth="'sysLdap:userSync'"> 同步域账户 </el-button>
 					</template>
 				</el-table-column>
 			</el-table>
@@ -132,24 +125,9 @@ const openEditSysLdap = (row: any) => {
 	editLdapRef.value?.openDialog(row);
 };
 
-//同步域账户
-const syncDomainData = (row: any) => {
-	ElMessageBox.confirm(`确定要同步吗?`, "提示", {
-		confirmButtonText: "确定",
-		cancelButtonText: "取消",
-		type: "warning",
-	})
-		.then(async () => {
-			await getAPI(SysLdapApi).apiSysLdapUserSyncPost({ id: row.id });
-			handleQuery();
-			ElMessage.success("删除成功");
-		})
-		.catch(() => { });
-};
-
 // 删除
 const delSysLdap = (row: any) => {
-	ElMessageBox.confirm(`确定要删除:【${row.host}】?`, '提示', {
+	ElMessageBox.confirm(`确定要删除域登录信息配置:【${row.host}】?`, '提示', {
 		confirmButtonText: '确定',
 		cancelButtonText: '取消',
 		type: 'warning',
@@ -173,4 +151,19 @@ const handleCurrentChange = (val: number) => {
 	state.tableParams.page = val;
 	handleQuery();
 };
+
+// 同步域账户
+const syncDomainData = (row: any) => {
+	ElMessageBox.confirm(`确定要同步域账户吗?`, '提示', {
+		confirmButtonText: '确定',
+		cancelButtonText: '取消',
+		type: 'warning',
+	})
+		.then(async () => {
+			await getAPI(SysLdapApi).apiSysLdapSyncSysLdapUserPost({ id: row.id });
+			handleQuery();
+			ElMessage.success('删除成功');
+		})
+		.catch(() => {});
+};
 </script>

+ 2 - 2
Web/src/views/system/user/index.vue

@@ -83,7 +83,7 @@
 									<template #dropdown>
 										<el-dropdown-menu>
 											<el-dropdown-item icon="ele-RefreshLeft" @click="resetUserPwd(scope.row)" :disabled="!auth('sysUser:resetPwd')"> 重置密码 </el-dropdown-item>
-											<el-dropdown-item icon="ele-Unlock" @click="unlockLogin(scope.row)" :disabled="!auth('sysUser:unlockLogin')"> 解除登录锁定 </el-dropdown-item>
+											<el-dropdown-item icon="ele-Unlock" @click="unlockLogin(scope.row)" divided :disabled="!auth('sysUser:unlockLogin')"> 解除锁定 </el-dropdown-item>
 											<el-dropdown-item icon="ele-Delete" @click="delUser(scope.row)" divided :disabled="!auth('sysUser:delete')"> 删除账号 </el-dropdown-item>
 										</el-dropdown-menu>
 									</template>
@@ -245,7 +245,7 @@ const resetUserPwd = async (row: any) => {
 
 // 解除登录锁定
 const unlockLogin = async (row: any) => {
-	ElMessageBox.confirm(`确定解除:【${row.account}】登录锁定?`, '提示', {
+	ElMessageBox.confirm(`确定解除登录锁定:【${row.account}】?`, '提示', {
 		confirmButtonText: '确定',
 		cancelButtonText: '取消',
 		type: 'warning',