Explorar o código

1、日志增加租户Id 2、其他优化

zuohuaijun %!s(int64=3) %!d(string=hai) anos
pai
achega
2f9c739a96

+ 5 - 174
Admin.NET/Admin.NET.Core/Admin.NET.Core.xml

@@ -1317,21 +1317,11 @@
             用户Id
             用户Id
             </summary>
             </summary>
         </member>
         </member>
-        <member name="P:Admin.NET.Core.SysTenant.SysUser">
-            <summary>
-            用户
-            </summary>
-        </member>
         <member name="P:Admin.NET.Core.SysTenant.OrgId">
         <member name="P:Admin.NET.Core.SysTenant.OrgId">
             <summary>
             <summary>
             机构Id
             机构Id
             </summary>
             </summary>
         </member>
         </member>
-        <member name="P:Admin.NET.Core.SysTenant.SysOrg">
-            <summary>
-            机构
-            </summary>
-        </member>
         <member name="P:Admin.NET.Core.SysTenant.Host">
         <member name="P:Admin.NET.Core.SysTenant.Host">
             <summary>
             <summary>
             主机
             主机
@@ -3172,156 +3162,6 @@
             <param name="defaultValue"></param>
             <param name="defaultValue"></param>
             <returns></returns>
             <returns></returns>
         </member>
         </member>
-        <member name="T:Admin.NET.Core.RepositoryExtension">
-            <summary>
-            仓储拓展
-            </summary>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDelete``1(SqlSugar.ISugarRepository,``0)">
-            <summary>
-            实体假删除 _rep.FakeDelete(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="repository"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDelete``1(SqlSugar.ISqlSugarClient,``0)">
-            <summary>
-            实体假删除 db.FakeDelete(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="db"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDeleteAsync``1(SqlSugar.ISugarRepository,``0)">
-            <summary>
-            实体假删除异步 _rep.FakeDeleteAsync(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="repository"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.FakeDeleteAsync``1(SqlSugar.ISqlSugarClient,``0)">
-            <summary>
-            实体假删除 db.FakeDelete(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="db"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.OrderBuilder``1(SqlSugar.ISugarQueryable{``0},Admin.NET.Core.BasePageInput,System.String,System.Boolean)">
-            <summary>
-            排序方式(默认降序)
-            </summary>
-            <param name="queryable"></param>
-            <param name="pageInput"> </param>
-            <param name="defualtSortField"> 默认排序字段 </param>
-            <param name="descSort"> 是否降序 </param>
-            <returns> </returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLog``1(SqlSugar.ISugarRepository,``0,System.Boolean)">
-            <summary>
-            更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="repository"></param>
-            <param name="entity"></param>
-            <param name="ignoreAllNullColumns"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLog``1(SqlSugar.ISqlSugarClient,``0,System.Boolean)">
-            <summary>
-            更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="db"></param>
-            <param name="entity"></param>
-            <param name="ignoreAllNullColumns"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLogAsync``1(SqlSugar.ISugarRepository,``0,System.Boolean)">
-            <summary>
-            更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="repository"></param>
-            <param name="entity"></param>
-            <param name="ignoreAllNullColumns"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.UpdateWithDiffLogAsync``1(SqlSugar.ISqlSugarClient,``0,System.Boolean)">
-            <summary>
-            更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="db"></param>
-            <param name="entity"></param>
-            <param name="ignoreAllNullColumns"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLog``1(SqlSugar.ISugarRepository,``0)">
-            <summary>
-            新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="repository"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLog``1(SqlSugar.ISqlSugarClient,``0)">
-            <summary>
-            新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="db"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLogAsync``1(SqlSugar.ISugarRepository,``0)">
-            <summary>
-            新增实体并记录差异日志 _rep.InsertWithDiffLogAsync(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="repository"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.InsertWithDiffLogAsync``1(SqlSugar.ISqlSugarClient,``0)">
-            <summary>
-            新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
-            </summary>
-            <typeparam name="T"></typeparam>
-            <param name="db"></param>
-            <param name="entity"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.AS``1(SqlSugar.ISugarQueryable{``0})">
-            <summary>
-            多库查询
-            </summary>
-            <param name="queryable"></param>
-            <returns> </returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.AS``2(SqlSugar.ISugarQueryable{``0,``1})">
-            <summary>
-            多库查询
-            </summary>
-            <typeparam name="T"></typeparam>
-            <typeparam name="T2"></typeparam>
-            <param name="queryable"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.RepositoryExtension.GetTableName``1(SqlSugar.IAdo)">
-            <summary>
-            根据实体类型获取表信息
-            </summary>
-            <typeparam name="T"></typeparam>
-            <returns></returns>
-        </member>
         <member name="T:Admin.NET.Core.ResultFilter">
         <member name="T:Admin.NET.Core.ResultFilter">
             <summary>
             <summary>
             结果筛选器
             结果筛选器
@@ -6036,6 +5876,11 @@
             状态
             状态
             </summary>
             </summary>
         </member>
         </member>
+        <member name="P:Admin.NET.Core.Service.TenantInput.UserId">
+            <summary>
+            用户Id
+            </summary>
+        </member>
         <member name="P:Admin.NET.Core.Service.PageTenantInput.Name">
         <member name="P:Admin.NET.Core.Service.PageTenantInput.Name">
             <summary>
             <summary>
             名称
             名称
@@ -6156,20 +6001,6 @@
             <param name="input"></param>
             <param name="input"></param>
             <returns></returns>
             <returns></returns>
         </member>
         </member>
-        <member name="M:Admin.NET.Core.Service.SysTenantService.GetTenant(System.Int64)">
-            <summary>
-            获取租户
-            </summary>
-            <param name="tenantId"></param>
-            <returns></returns>
-        </member>
-        <member name="M:Admin.NET.Core.Service.SysTenantService.GetTenantAdminUser(System.Int64)">
-            <summary>
-            获取租户管理员用户
-            </summary>
-            <param name="tenantId"></param>
-            <returns></returns>
-        </member>
         <member name="M:Admin.NET.Core.Service.SysTenantService.UpdateTenantCache">
         <member name="M:Admin.NET.Core.Service.SysTenantService.UpdateTenantCache">
             <summary>
             <summary>
             缓存所有租户
             缓存所有租户

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysLogEx.cs

@@ -4,7 +4,7 @@
 /// 系统异常日志表
 /// 系统异常日志表
 /// </summary>
 /// </summary>
 [SugarTable("sys_log_ex", "系统异常日志表")]
 [SugarTable("sys_log_ex", "系统异常日志表")]
-public class SysLogEx : EntityBase
+public class SysLogEx : EntityTenant
 {
 {
     /// <summary>
     /// <summary>
     /// 记录器类别名称
     /// 记录器类别名称

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysLogOp.cs

@@ -4,7 +4,7 @@
 /// 系统操作日志表
 /// 系统操作日志表
 /// </summary>
 /// </summary>
 [SugarTable("sys_log_op", "系统操作日志表")]
 [SugarTable("sys_log_op", "系统操作日志表")]
-public class SysLogOp : EntityBase
+public class SysLogOp : EntityTenant
 {
 {
     /// <summary>
     /// <summary>
     /// 记录器类别名称
     /// 记录器类别名称

+ 1 - 1
Admin.NET/Admin.NET.Core/Entity/SysLogVis.cs

@@ -4,7 +4,7 @@
 /// 系统访问日志表
 /// 系统访问日志表
 /// </summary>
 /// </summary>
 [SugarTable("sys_log_vis", "系统访问日志表")]
 [SugarTable("sys_log_vis", "系统访问日志表")]
-public class SysLogVis : EntityBase
+public class SysLogVis : EntityTenant
 {
 {
     /// <summary>
     /// <summary>
     /// 是否执行成功(Y-是,N-否)
     /// 是否执行成功(Y-是,N-否)

+ 0 - 14
Admin.NET/Admin.NET.Core/Entity/SysTenant.cs

@@ -12,26 +12,12 @@ public class SysTenant : EntityBase
     [SugarColumn(ColumnDescription = "用户Id")]
     [SugarColumn(ColumnDescription = "用户Id")]
     public long UserId { get; set; }
     public long UserId { get; set; }
 
 
-    /// <summary>
-    /// 用户
-    /// </summary>
-    [SugarColumn(IsIgnore = true)]
-    [Navigate(NavigateType.OneToOne, nameof(UserId))]
-    public SysUser SysUser { get; set; }
-
     /// <summary>
     /// <summary>
     /// 机构Id
     /// 机构Id
     /// </summary>
     /// </summary>
     [SugarColumn(ColumnDescription = "机构Id")]
     [SugarColumn(ColumnDescription = "机构Id")]
     public long OrgId { get; set; }
     public long OrgId { get; set; }
 
 
-    /// <summary>
-    /// 机构
-    /// </summary>
-    [SugarColumn(IsIgnore = true)]
-    [Navigate(NavigateType.OneToOne, nameof(OrgId))]
-    public SysOrg SysOrg { get; set; }
-
     /// <summary>
     /// <summary>
     /// 主机
     /// 主机
     /// </summary>
     /// </summary>

+ 0 - 244
Admin.NET/Admin.NET.Core/Extension/RepositoryExtension.cs

@@ -1,244 +0,0 @@
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 仓储拓展
-/// </summary>
-public static class RepositoryExtension
-{
-    /// <summary>
-    /// 实体假删除 _rep.FakeDelete(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="repository"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static int FakeDelete<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
-    {
-        return repository.Context.FakeDelete(entity);
-    }
-
-    /// <summary>
-    /// 实体假删除 db.FakeDelete(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="db"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static int FakeDelete<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
-    {
-        return db.Updateable(entity).ReSetValue(x => { x.IsDelete = true; })
-            .IgnoreColumns(ignoreAllNullColumns: true)
-            .EnableDiffLogEvent()   // 记录差异日志
-            .UpdateColumns(x => new { x.IsDelete, x.UpdateTime, x.UpdateUserId })  // 允许更新的字段-AOP拦截自动设置UpdateTime、UpdateUserId
-            .ExecuteCommand();
-    }
-
-    /// <summary>
-    /// 实体假删除异步 _rep.FakeDeleteAsync(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="repository"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static Task<int> FakeDeleteAsync<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
-    {
-        return repository.Context.FakeDeleteAsync(entity);
-    }
-
-    /// <summary>
-    /// 实体假删除 db.FakeDelete(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="db"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static Task<int> FakeDeleteAsync<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
-    {
-        return db.Updateable(entity).ReSetValue(x => { x.IsDelete = true; })
-            .IgnoreColumns(ignoreAllNullColumns: true)
-            .EnableDiffLogEvent()   // 记录差异日志
-            .UpdateColumns(x => new { x.IsDelete, x.UpdateTime, x.UpdateUserId })  // 允许更新的字段-AOP拦截自动设置UpdateTime、UpdateUserId
-            .ExecuteCommandAsync();
-    }
-
-    /// <summary>
-    /// 排序方式(默认降序)
-    /// </summary>
-    /// <param name="queryable"></param>
-    /// <param name="pageInput"> </param>
-    /// <param name="defualtSortField"> 默认排序字段 </param>
-    /// <param name="descSort"> 是否降序 </param>
-    /// <returns> </returns>
-    public static ISugarQueryable<T> OrderBuilder<T>(this ISugarQueryable<T> queryable, BasePageInput pageInput, string defualtSortField = "Id", bool descSort = true)
-    {
-        var orderStr = "";
-        // 约定默认每张表都有Id排序
-        if (!string.IsNullOrWhiteSpace(defualtSortField))
-        {
-            orderStr = descSort ? defualtSortField + " Desc" : defualtSortField + " Asc";
-        }
-        TypeAdapterConfig config = new();
-        config.ForType<T, BasePageInput>().IgnoreNullValues(true);
-        Mapper mapper = new(config); // 务必将mapper设为单实例
-        var nowPagerInput = mapper.Map<BasePageInput>(pageInput);
-        // 排序是否可用-排序字段和排序顺序都为非空才启用排序
-        if (!string.IsNullOrEmpty(nowPagerInput.Field) && !string.IsNullOrEmpty(nowPagerInput.Order))
-        {
-            orderStr = $"{nowPagerInput.Field} {(nowPagerInput.Order == nowPagerInput.DescStr ? "Desc" : "Asc")}";
-        }
-        return queryable.OrderByIF(!string.IsNullOrWhiteSpace(orderStr), orderStr);
-    }
-
-    /// <summary>
-    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="repository"></param>
-    /// <param name="entity"></param>
-    /// <param name="ignoreAllNullColumns"></param>
-    /// <returns></returns>
-    public static int UpdateWithDiffLog<T>(this ISugarRepository repository, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
-    {
-        return repository.Context.UpdateWithDiffLog(entity, ignoreAllNullColumns);
-    }
-
-    /// <summary>
-    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLog(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="db"></param>
-    /// <param name="entity"></param>
-    /// <param name="ignoreAllNullColumns"></param>
-    /// <returns></returns>
-    public static int UpdateWithDiffLog<T>(this ISqlSugarClient db, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
-    {
-        return db.Updateable(entity)
-            .IgnoreColumns(ignoreAllNullColumns: ignoreAllNullColumns)
-            .EnableDiffLogEvent()
-            .ExecuteCommand();
-    }
-
-    /// <summary>
-    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="repository"></param>
-    /// <param name="entity"></param>
-    /// <param name="ignoreAllNullColumns"></param>
-    /// <returns></returns>
-    public static Task<int> UpdateWithDiffLogAsync<T>(this ISugarRepository repository, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
-    {
-        return repository.Context.UpdateWithDiffLogAsync(entity, ignoreAllNullColumns);
-    }
-
-    /// <summary>
-    /// 更新实体并记录差异日志 _rep.UpdateWithDiffLogAsync(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="db"></param>
-    /// <param name="entity"></param>
-    /// <param name="ignoreAllNullColumns"></param>
-    /// <returns></returns>
-    public static Task<int> UpdateWithDiffLogAsync<T>(this ISqlSugarClient db, T entity, bool ignoreAllNullColumns = true) where T : EntityBase, new()
-    {
-        return db.Updateable(entity)
-            .IgnoreColumns(ignoreAllNullColumns: ignoreAllNullColumns)
-            .EnableDiffLogEvent()
-            .ExecuteCommandAsync();
-    }
-
-    /// <summary>
-    /// 新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="repository"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static int InsertWithDiffLog<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
-    {
-        return repository.Context.InsertWithDiffLog(entity);
-    }
-
-    /// <summary>
-    /// 新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="db"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static int InsertWithDiffLog<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
-    {
-        return db.Insertable(entity).EnableDiffLogEvent().ExecuteCommand();
-    }
-
-    /// <summary>
-    /// 新增实体并记录差异日志 _rep.InsertWithDiffLogAsync(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="repository"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static Task<int> InsertWithDiffLogAsync<T>(this ISugarRepository repository, T entity) where T : EntityBase, new()
-    {
-        return repository.Context.InsertWithDiffLogAsync(entity);
-    }
-
-    /// <summary>
-    /// 新增实体并记录差异日志 _rep.InsertWithDiffLog(entity)
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <param name="db"></param>
-    /// <param name="entity"></param>
-    /// <returns></returns>
-    public static Task<int> InsertWithDiffLogAsync<T>(this ISqlSugarClient db, T entity) where T : EntityBase, new()
-    {
-        return db.Insertable(entity).EnableDiffLogEvent().ExecuteCommandAsync();
-    }
-
-    /// <summary>
-    /// 多库查询
-    /// </summary>
-    /// <param name="queryable"></param>
-    /// <returns> </returns>
-    public static ISugarQueryable<T> AS<T>(this ISugarQueryable<T> queryable)
-    {
-        return queryable.AS<T>(GetTableName<T>(queryable.Context.Ado));
-    }
-
-    /// <summary>
-    /// 多库查询
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <typeparam name="T2"></typeparam>
-    /// <param name="queryable"></param>
-    /// <returns></returns>
-    public static ISugarQueryable<T, T2> AS<T, T2>(this ISugarQueryable<T, T2> queryable)
-    {
-        return queryable.AS<T2>(GetTableName<T2>(queryable.Context.Ado));
-    }
-
-    /// <summary>
-    /// 根据实体类型获取表信息
-    /// </summary>
-    /// <typeparam name="T"></typeparam>
-    /// <returns></returns>
-    private static string GetTableName<T>(IAdo ado)
-    {
-        var entityType = typeof(T);
-        var attr = entityType.GetCustomAttribute<TenantAttribute>();
-        var configId = attr == null ? SqlSugarConst.ConfigId : attr.configId.ToString();
-        var tableName = entityType.GetCustomAttribute<SugarTable>().TableName;
-
-        //根据实际的数据库类型 修改此处  如果固定使用一个数据库,可用直接写死
-        var wholeTableName = $"{configId}.dbo.{tableName}";
-        if (ado is MySqlProvider)
-        {
-            wholeTableName = $"{configId}.{tableName}";
-        }
-        else if (ado is SqlServerProvider)
-        {
-            wholeTableName = $"{configId}.dbo.{tableName}";
-        }
-        return wholeTableName;
-    }
-}

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Notice/SysNoticeService.cs

@@ -34,7 +34,7 @@ public class SysNoticeService : IDynamicApiController, ITransient
     [HttpGet("/sysNotice/page")]
     [HttpGet("/sysNotice/page")]
     public async Task<SqlSugarPagedList<SysNotice>> GetPageNotice([FromQuery] PageNoticeInput input)
     public async Task<SqlSugarPagedList<SysNotice>> GetPageNotice([FromQuery] PageNoticeInput input)
     {
     {
-        return await _sysNoticeRep.Context.Queryable<SysNotice>()
+        return await _sysNoticeRep.AsQueryable()
             .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.Title.Contains(input.Title.Trim()))
             .WhereIF(!string.IsNullOrWhiteSpace(input.Title), u => u.Title.Contains(input.Title.Trim()))
             .WhereIF(input.Type > 0, u => u.Type == input.Type)
             .WhereIF(input.Type > 0, u => u.Type == input.Type)
             .OrderBy(u => u.CreateTime, OrderByType.Desc)
             .OrderBy(u => u.CreateTime, OrderByType.Desc)

+ 5 - 0
Admin.NET/Admin.NET.Core/Service/Tenant/Dto/TenantInput.cs

@@ -6,6 +6,11 @@ public class TenantInput : BaseIdInput
     /// 状态
     /// 状态
     /// </summary>
     /// </summary>
     public StatusEnum Status { get; set; }
     public StatusEnum Status { get; set; }
+
+    /// <summary>
+    /// 用户Id
+    /// </summary>
+    public long UserId { get; set; }
 }
 }
 
 
 public class PageTenantInput : BasePageInput
 public class PageTenantInput : BasePageInput

+ 7 - 33
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -262,7 +262,7 @@ public class SysTenantService : IDynamicApiController, ITransient
         await _sysOrgRep.UpdateSetColumnsTrueAsync(u => new SysOrg() { Name = input.Name }, u => u.Id == input.OrgId);
         await _sysOrgRep.UpdateSetColumnsTrueAsync(u => new SysOrg() { Name = input.Name }, u => u.Id == input.OrgId);
 
 
         // 更新系统用户
         // 更新系统用户
-        await _sysUserRep.UpdateSetColumnsTrueAsync(u => new SysUser() { Account = input.AdminName, Phone = input.Phone, Email = input.Email }, u => u.Id == input.OrgId);
+        await _sysUserRep.UpdateSetColumnsTrueAsync(u => new SysUser() { Account = input.AdminName, Phone = input.Phone, Email = input.Email }, u => u.Id == input.UserId);
 
 
         await UpdateTenantCache();
         await UpdateTenantCache();
     }
     }
@@ -275,8 +275,9 @@ public class SysTenantService : IDynamicApiController, ITransient
     [HttpPost("/sysTenant/grantMenu")]
     [HttpPost("/sysTenant/grantMenu")]
     public async Task GrantMenu(RoleMenuInput input)
     public async Task GrantMenu(RoleMenuInput input)
     {
     {
-        var tenantAdminUser = await GetTenantAdminUser(input.Id);
+        var tenantAdminUser = await _sysUserRep.GetFirstAsync(u => u.TenantId == input.Id && u.AccountType == AccountTypeEnum.Admin);
         if (tenantAdminUser == null) return;
         if (tenantAdminUser == null) return;
+
         var roleIds = await _sysUserRoleService.GetUserRoleIdList(tenantAdminUser.Id);
         var roleIds = await _sysUserRoleService.GetUserRoleIdList(tenantAdminUser.Id);
         input.Id = roleIds[0]; // 重置租户管理员角色Id
         input.Id = roleIds[0]; // 重置租户管理员角色Id
         await _sysRoleMenuService.GrantRoleMenu(input);
         await _sysRoleMenuService.GrantRoleMenu(input);
@@ -290,9 +291,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     [HttpGet("/sysTenant/ownMenuTree")]
     [HttpGet("/sysTenant/ownMenuTree")]
     public async Task<List<SysMenu>> OwnMenuTree([FromQuery] TenantInput input)
     public async Task<List<SysMenu>> OwnMenuTree([FromQuery] TenantInput input)
     {
     {
-        var tenantAdminUser = await GetTenantAdminUser(input.Id);
-        if (tenantAdminUser == null) return new List<SysMenu>();
-        var roleIds = await _sysUserRoleService.GetUserRoleIdList(tenantAdminUser.Id);
+        var roleIds = await _sysUserRoleService.GetUserRoleIdList(input.UserId);
         return await _sysRoleMenuService.GetRoleMenuTree(new List<long> { roleIds[0] });
         return await _sysRoleMenuService.GetRoleMenuTree(new List<long> { roleIds[0] });
     }
     }
 
 
@@ -304,9 +303,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     [HttpGet("/sysTenant/ownMenuList")]
     [HttpGet("/sysTenant/ownMenuList")]
     public async Task<List<long>> OwnMenuList([FromQuery] TenantInput input)
     public async Task<List<long>> OwnMenuList([FromQuery] TenantInput input)
     {
     {
-        var tenantAdminUser = await GetTenantAdminUser(input.Id);
-        if (tenantAdminUser == null) return new List<long>();
-        var roleIds = await _sysUserRoleService.GetUserRoleIdList(tenantAdminUser.Id);
+        var roleIds = await _sysUserRoleService.GetUserRoleIdList(input.UserId);
         return await _sysRoleMenuService.GetRoleMenuList(new List<long> { roleIds[0] });
         return await _sysRoleMenuService.GetRoleMenuList(new List<long> { roleIds[0] });
     }
     }
 
 
@@ -319,31 +316,8 @@ public class SysTenantService : IDynamicApiController, ITransient
     public async Task ResetTenantPwd(TenantInput input)
     public async Task ResetTenantPwd(TenantInput input)
     {
     {
         var password = await _sysConfigService.GetConfigValue<string>(CommonConst.SysPassword);
         var password = await _sysConfigService.GetConfigValue<string>(CommonConst.SysPassword);
-
-        var tenantAdminUser = await GetTenantAdminUser(input.Id);
-        tenantAdminUser.Password = MD5Encryption.Encrypt(password);
-        await _sysUserRep.UpdateAsync(tenantAdminUser);
-    }
-
-    /// <summary>
-    /// 获取租户
-    /// </summary>
-    /// <param name="tenantId"></param>
-    /// <returns></returns>
-    [NonAction]
-    public async Task<SysTenant> GetTenant(long tenantId)
-    {
-        return await _sysTenantRep.GetFirstAsync(u => u.Id == tenantId);
-    }
-
-    /// <summary>
-    /// 获取租户管理员用户
-    /// </summary>
-    /// <param name="tenantId"></param>
-    /// <returns></returns>
-    private async Task<SysUser> GetTenantAdminUser(long tenantId)
-    {
-        return await _sysUserRep.GetFirstAsync(u => u.TenantId == tenantId && u.AccountType == AccountTypeEnum.Admin);
+        var encryptPassword = MD5Encryption.Encrypt(password);
+        await _sysUserRep.UpdateSetColumnsTrueAsync(u => new SysUser() { Password = password }, u => u.Id == input.UserId);
     }
     }
 
 
     /// <summary>
     /// <summary>

+ 30 - 14
Web/src/api-services/apis/sys-tenant-api.ts

@@ -201,10 +201,11 @@ export const SysTenantApiAxiosParamCreator = function (configuration?: Configura
          * @summary 获取租户管理员角色拥有菜单树
          * @summary 获取租户管理员角色拥有菜单树
          * @param {number} id 主键Id
          * @param {number} id 主键Id
          * @param {StatusEnum} [status] 状态
          * @param {StatusEnum} [status] 状态
+         * @param {number} [userId] 用户Id
          * @param {*} [options] Override http request option.
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          * @throws {RequiredError}
          */
          */
-        sysTenantOwnMenuListGet: async (id: number, status?: StatusEnum, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+        sysTenantOwnMenuListGet: async (id: number, status?: StatusEnum, userId?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
             // verify required parameter 'id' is not null or undefined
             // verify required parameter 'id' is not null or undefined
             if (id === null || id === undefined) {
             if (id === null || id === undefined) {
                 throw new RequiredError('id','Required parameter id was null or undefined when calling sysTenantOwnMenuListGet.');
                 throw new RequiredError('id','Required parameter id was null or undefined when calling sysTenantOwnMenuListGet.');
@@ -226,6 +227,10 @@ export const SysTenantApiAxiosParamCreator = function (configuration?: Configura
                 localVarQueryParameter['Status'] = status;
                 localVarQueryParameter['Status'] = status;
             }
             }
 
 
+            if (userId !== undefined) {
+                localVarQueryParameter['UserId'] = userId;
+            }
+
             if (id !== undefined) {
             if (id !== undefined) {
                 localVarQueryParameter['Id'] = id;
                 localVarQueryParameter['Id'] = id;
             }
             }
@@ -251,10 +256,11 @@ export const SysTenantApiAxiosParamCreator = function (configuration?: Configura
          * @summary 获取租户管理员角色拥有菜单树
          * @summary 获取租户管理员角色拥有菜单树
          * @param {number} id 主键Id
          * @param {number} id 主键Id
          * @param {StatusEnum} [status] 状态
          * @param {StatusEnum} [status] 状态
+         * @param {number} [userId] 用户Id
          * @param {*} [options] Override http request option.
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          * @throws {RequiredError}
          */
          */
-        sysTenantOwnMenuTreeGet: async (id: number, status?: StatusEnum, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+        sysTenantOwnMenuTreeGet: async (id: number, status?: StatusEnum, userId?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
             // verify required parameter 'id' is not null or undefined
             // verify required parameter 'id' is not null or undefined
             if (id === null || id === undefined) {
             if (id === null || id === undefined) {
                 throw new RequiredError('id','Required parameter id was null or undefined when calling sysTenantOwnMenuTreeGet.');
                 throw new RequiredError('id','Required parameter id was null or undefined when calling sysTenantOwnMenuTreeGet.');
@@ -276,6 +282,10 @@ export const SysTenantApiAxiosParamCreator = function (configuration?: Configura
                 localVarQueryParameter['Status'] = status;
                 localVarQueryParameter['Status'] = status;
             }
             }
 
 
+            if (userId !== undefined) {
+                localVarQueryParameter['UserId'] = userId;
+            }
+
             if (id !== undefined) {
             if (id !== undefined) {
                 localVarQueryParameter['Id'] = id;
                 localVarQueryParameter['Id'] = id;
             }
             }
@@ -560,11 +570,12 @@ export const SysTenantApiFp = function(configuration?: Configuration) {
          * @summary 获取租户管理员角色拥有菜单树
          * @summary 获取租户管理员角色拥有菜单树
          * @param {number} id 主键Id
          * @param {number} id 主键Id
          * @param {StatusEnum} [status] 状态
          * @param {StatusEnum} [status] 状态
+         * @param {number} [userId] 用户Id
          * @param {*} [options] Override http request option.
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          * @throws {RequiredError}
          */
          */
-        async sysTenantOwnMenuListGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListInt64>>> {
-            const localVarAxiosArgs = await SysTenantApiAxiosParamCreator(configuration).sysTenantOwnMenuListGet(id, status, options);
+        async sysTenantOwnMenuListGet(id: number, status?: StatusEnum, userId?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListInt64>>> {
+            const localVarAxiosArgs = await SysTenantApiAxiosParamCreator(configuration).sysTenantOwnMenuListGet(id, status, userId, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
                 return axios.request(axiosRequestArgs);
@@ -575,11 +586,12 @@ export const SysTenantApiFp = function(configuration?: Configuration) {
          * @summary 获取租户管理员角色拥有菜单树
          * @summary 获取租户管理员角色拥有菜单树
          * @param {number} id 主键Id
          * @param {number} id 主键Id
          * @param {StatusEnum} [status] 状态
          * @param {StatusEnum} [status] 状态
+         * @param {number} [userId] 用户Id
          * @param {*} [options] Override http request option.
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          * @throws {RequiredError}
          */
          */
-        async sysTenantOwnMenuTreeGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysMenu>>> {
-            const localVarAxiosArgs = await SysTenantApiAxiosParamCreator(configuration).sysTenantOwnMenuTreeGet(id, status, options);
+        async sysTenantOwnMenuTreeGet(id: number, status?: StatusEnum, userId?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultListSysMenu>>> {
+            const localVarAxiosArgs = await SysTenantApiAxiosParamCreator(configuration).sysTenantOwnMenuTreeGet(id, status, userId, options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
                 return axios.request(axiosRequestArgs);
@@ -701,22 +713,24 @@ export const SysTenantApiFactory = function (configuration?: Configuration, base
          * @summary 获取租户管理员角色拥有菜单树
          * @summary 获取租户管理员角色拥有菜单树
          * @param {number} id 主键Id
          * @param {number} id 主键Id
          * @param {StatusEnum} [status] 状态
          * @param {StatusEnum} [status] 状态
+         * @param {number} [userId] 用户Id
          * @param {*} [options] Override http request option.
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          * @throws {RequiredError}
          */
          */
-        async sysTenantOwnMenuListGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListInt64>> {
-            return SysTenantApiFp(configuration).sysTenantOwnMenuListGet(id, status, options).then((request) => request(axios, basePath));
+        async sysTenantOwnMenuListGet(id: number, status?: StatusEnum, userId?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListInt64>> {
+            return SysTenantApiFp(configuration).sysTenantOwnMenuListGet(id, status, userId, options).then((request) => request(axios, basePath));
         },
         },
         /**
         /**
          * 
          * 
          * @summary 获取租户管理员角色拥有菜单树
          * @summary 获取租户管理员角色拥有菜单树
          * @param {number} id 主键Id
          * @param {number} id 主键Id
          * @param {StatusEnum} [status] 状态
          * @param {StatusEnum} [status] 状态
+         * @param {number} [userId] 用户Id
          * @param {*} [options] Override http request option.
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          * @throws {RequiredError}
          */
          */
-        async sysTenantOwnMenuTreeGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysMenu>> {
-            return SysTenantApiFp(configuration).sysTenantOwnMenuTreeGet(id, status, options).then((request) => request(axios, basePath));
+        async sysTenantOwnMenuTreeGet(id: number, status?: StatusEnum, userId?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultListSysMenu>> {
+            return SysTenantApiFp(configuration).sysTenantOwnMenuTreeGet(id, status, userId, options).then((request) => request(axios, basePath));
         },
         },
         /**
         /**
          * 
          * 
@@ -823,24 +837,26 @@ export class SysTenantApi extends BaseAPI {
      * @summary 获取租户管理员角色拥有菜单树
      * @summary 获取租户管理员角色拥有菜单树
      * @param {number} id 主键Id
      * @param {number} id 主键Id
      * @param {StatusEnum} [status] 状态
      * @param {StatusEnum} [status] 状态
+     * @param {number} [userId] 用户Id
      * @param {*} [options] Override http request option.
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @throws {RequiredError}
      * @memberof SysTenantApi
      * @memberof SysTenantApi
      */
      */
-    public async sysTenantOwnMenuListGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListInt64>> {
-        return SysTenantApiFp(this.configuration).sysTenantOwnMenuListGet(id, status, options).then((request) => request(this.axios, this.basePath));
+    public async sysTenantOwnMenuListGet(id: number, status?: StatusEnum, userId?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListInt64>> {
+        return SysTenantApiFp(this.configuration).sysTenantOwnMenuListGet(id, status, userId, options).then((request) => request(this.axios, this.basePath));
     }
     }
     /**
     /**
      * 
      * 
      * @summary 获取租户管理员角色拥有菜单树
      * @summary 获取租户管理员角色拥有菜单树
      * @param {number} id 主键Id
      * @param {number} id 主键Id
      * @param {StatusEnum} [status] 状态
      * @param {StatusEnum} [status] 状态
+     * @param {number} [userId] 用户Id
      * @param {*} [options] Override http request option.
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @throws {RequiredError}
      * @memberof SysTenantApi
      * @memberof SysTenantApi
      */
      */
-    public async sysTenantOwnMenuTreeGet(id: number, status?: StatusEnum, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysMenu>> {
-        return SysTenantApiFp(this.configuration).sysTenantOwnMenuTreeGet(id, status, options).then((request) => request(this.axios, this.basePath));
+    public async sysTenantOwnMenuTreeGet(id: number, status?: StatusEnum, userId?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultListSysMenu>> {
+        return SysTenantApiFp(this.configuration).sysTenantOwnMenuTreeGet(id, status, userId, options).then((request) => request(this.axios, this.basePath));
     }
     }
     /**
     /**
      * 
      * 

+ 0 - 14
Web/src/api-services/models/add-tenant-input.ts

@@ -13,8 +13,6 @@
  */
  */
 import { DbType } from './db-type';
 import { DbType } from './db-type';
 import { StatusEnum } from './status-enum';
 import { StatusEnum } from './status-enum';
-import { SysOrg } from './sys-org';
-import { SysUser } from './sys-user';
 import { TenantTypeEnum } from './tenant-type-enum';
 import { TenantTypeEnum } from './tenant-type-enum';
 /**
 /**
  * 
  * 
@@ -64,24 +62,12 @@ export interface AddTenantInput {
      * @memberof AddTenantInput
      * @memberof AddTenantInput
      */
      */
     userId?: number;
     userId?: number;
-    /**
-     * 
-     * @type {SysUser}
-     * @memberof AddTenantInput
-     */
-    sysUser?: SysUser;
     /**
     /**
      * 机构Id
      * 机构Id
      * @type {number}
      * @type {number}
      * @memberof AddTenantInput
      * @memberof AddTenantInput
      */
      */
     orgId?: number;
     orgId?: number;
-    /**
-     * 
-     * @type {SysOrg}
-     * @memberof AddTenantInput
-     */
-    sysOrg?: SysOrg;
     /**
     /**
      * 主机
      * 主机
      * @type {string}
      * @type {string}

+ 6 - 0
Web/src/api-services/models/sys-log-ex.ts

@@ -53,6 +53,12 @@ export interface SysLogEx {
      * @memberof SysLogEx
      * @memberof SysLogEx
      */
      */
     isDelete?: boolean;
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof SysLogEx
+     */
+    tenantId?: number | null;
     /**
     /**
      * 记录器类别名称
      * 记录器类别名称
      * @type {string}
      * @type {string}

+ 6 - 0
Web/src/api-services/models/sys-log-op.ts

@@ -53,6 +53,12 @@ export interface SysLogOp {
      * @memberof SysLogOp
      * @memberof SysLogOp
      */
      */
     isDelete?: boolean;
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof SysLogOp
+     */
+    tenantId?: number | null;
     /**
     /**
      * 记录器类别名称
      * 记录器类别名称
      * @type {string}
      * @type {string}

+ 6 - 0
Web/src/api-services/models/sys-log-vis.ts

@@ -55,6 +55,12 @@ export interface SysLogVis {
      * @memberof SysLogVis
      * @memberof SysLogVis
      */
      */
     isDelete?: boolean;
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof SysLogVis
+     */
+    tenantId?: number | null;
     /**
     /**
      * 
      * 
      * @type {YesNoEnum}
      * @type {YesNoEnum}

+ 6 - 0
Web/src/api-services/models/tenant-input.ts

@@ -30,4 +30,10 @@ export interface TenantInput {
      * @memberof TenantInput
      * @memberof TenantInput
      */
      */
     status?: StatusEnum;
     status?: StatusEnum;
+    /**
+     * 用户Id
+     * @type {number}
+     * @memberof TenantInput
+     */
+    userId?: number;
 }
 }

+ 0 - 14
Web/src/api-services/models/tenant-output.ts

@@ -13,8 +13,6 @@
  */
  */
 import { DbType } from './db-type';
 import { DbType } from './db-type';
 import { StatusEnum } from './status-enum';
 import { StatusEnum } from './status-enum';
-import { SysOrg } from './sys-org';
-import { SysUser } from './sys-user';
 import { TenantTypeEnum } from './tenant-type-enum';
 import { TenantTypeEnum } from './tenant-type-enum';
 /**
 /**
  * 
  * 
@@ -64,24 +62,12 @@ export interface TenantOutput {
      * @memberof TenantOutput
      * @memberof TenantOutput
      */
      */
     userId?: number;
     userId?: number;
-    /**
-     * 
-     * @type {SysUser}
-     * @memberof TenantOutput
-     */
-    sysUser?: SysUser;
     /**
     /**
      * 机构Id
      * 机构Id
      * @type {number}
      * @type {number}
      * @memberof TenantOutput
      * @memberof TenantOutput
      */
      */
     orgId?: number;
     orgId?: number;
-    /**
-     * 
-     * @type {SysOrg}
-     * @memberof TenantOutput
-     */
-    sysOrg?: SysOrg;
     /**
     /**
      * 主机
      * 主机
      * @type {string}
      * @type {string}

+ 0 - 14
Web/src/api-services/models/update-tenant-input.ts

@@ -13,8 +13,6 @@
  */
  */
 import { DbType } from './db-type';
 import { DbType } from './db-type';
 import { StatusEnum } from './status-enum';
 import { StatusEnum } from './status-enum';
-import { SysOrg } from './sys-org';
-import { SysUser } from './sys-user';
 import { TenantTypeEnum } from './tenant-type-enum';
 import { TenantTypeEnum } from './tenant-type-enum';
 /**
 /**
  * 
  * 
@@ -64,24 +62,12 @@ export interface UpdateTenantInput {
      * @memberof UpdateTenantInput
      * @memberof UpdateTenantInput
      */
      */
     userId?: number;
     userId?: number;
-    /**
-     * 
-     * @type {SysUser}
-     * @memberof UpdateTenantInput
-     */
-    sysUser?: SysUser;
     /**
     /**
      * 机构Id
      * 机构Id
      * @type {number}
      * @type {number}
      * @memberof UpdateTenantInput
      * @memberof UpdateTenantInput
      */
      */
     orgId?: number;
     orgId?: number;
-    /**
-     * 
-     * @type {SysOrg}
-     * @memberof UpdateTenantInput
-     */
-    sysOrg?: SysOrg;
     /**
     /**
      * 主机
      * 主机
      * @type {string}
      * @type {string}

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

@@ -104,7 +104,7 @@ import GrantMenu from '/@/views/system/tenant/component/grantMenu.vue';
 
 
 import { getAPI } from '/@/utils/axios-utils';
 import { getAPI } from '/@/utils/axios-utils';
 import { SysTenantApi } from '/@/api-services/api';
 import { SysTenantApi } from '/@/api-services/api';
-import { SysTenant } from '/@/api-services/models';
+import { TenantOutput } from '/@/api-services/models';
 
 
 export default defineComponent({
 export default defineComponent({
 	name: 'sysTenant',
 	name: 'sysTenant',
@@ -114,7 +114,7 @@ export default defineComponent({
 		const grantMenuRef = ref();
 		const grantMenuRef = ref();
 		const state = reactive({
 		const state = reactive({
 			loading: false,
 			loading: false,
-			tenantData: [] as Array<SysTenant>,
+			tenantData: [] as Array<TenantOutput>,
 			queryParams: {
 			queryParams: {
 				name: undefined,
 				name: undefined,
 				phone: undefined,
 				phone: undefined,