Przeglądaj źródła

feat: 增加字典租户隔离

喵你个旺呀 1 rok temu
rodzic
commit
eecb56d345
25 zmienionych plików z 253 dodań i 142 usunięć
  1. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysDictData.cs
  2. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysDictType.cs
  3. 1 1
      Admin.NET/Admin.NET.Core/Entity/SysPos.cs
  4. 6 5
      Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs
  5. 49 49
      Admin.NET/Admin.NET.Core/SeedData/SysDictDataSeedData.cs
  6. 7 7
      Admin.NET/Admin.NET.Core/SeedData/SysDictTypeSeedData.cs
  7. 5 0
      Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictDataInput.cs
  8. 5 0
      Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs
  9. 41 14
      Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs
  10. 36 9
      Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs
  11. 12 0
      Web/src/api-services/models/add-dict-data-input.ts
  12. 6 0
      Web/src/api-services/models/add-dict-type-input.ts
  13. 7 0
      Web/src/api-services/models/add-pos-input.ts
  14. 1 0
      Web/src/api-services/models/db-type.ts
  15. 7 7
      Web/src/api-services/models/info-save-input.ts
  16. 5 5
      Web/src/api-services/models/page-dict-data-input.ts
  17. 6 0
      Web/src/api-services/models/page-dict-type-input.ts
  18. 13 1
      Web/src/api-services/models/sys-dict-data.ts
  19. 6 0
      Web/src/api-services/models/sys-dict-type.ts
  20. 6 0
      Web/src/api-services/models/sys-log-diff.ts
  21. 7 0
      Web/src/api-services/models/sys-pos.ts
  22. 0 42
      Web/src/api-services/models/sys-user-ldap.ts
  23. 12 0
      Web/src/api-services/models/update-dict-data-input.ts
  24. 6 0
      Web/src/api-services/models/update-dict-type-input.ts
  25. 7 0
      Web/src/api-services/models/update-pos-input.ts

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

@@ -12,7 +12,7 @@ namespace Admin.NET.Core;
 [SugarTable(null, "系统字典值表")]
 [SysTable]
 [SugarIndex("index_{table}_C", nameof(Value), OrderByType.Asc)]
-public partial class SysDictData : EntityBase
+public partial class SysDictData : EntityTenant
 {
     /// <summary>
     /// 字典类型Id

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

@@ -13,7 +13,7 @@ namespace Admin.NET.Core;
 [SysTable]
 [SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
 [SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc)]
-public partial class SysDictType : EntityBase
+public partial class SysDictType : EntityTenant
 {
     /// <summary>
     /// 名称

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

@@ -49,7 +49,7 @@ public partial class SysPos : EntityTenant
     public StatusEnum Status { get; set; } = StatusEnum.Enable;
 
     /// <summary>
-    /// 在职人
+    /// 在职人
     /// </summary>
     [SugarColumn(IsIgnore = true)]
     public List<SysUser> UserList { get; set; }

+ 6 - 5
Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs

@@ -61,7 +61,7 @@ public class EnumToDictJob : IJob
                 .SplitInsert(_ => true)
                 .ToStorageAsync();
             await storageable2.BulkCopyAsync();
-            await storageable2.BulkUpdateAsync(nameof(SysDictData.Label), nameof(SysDictData.Value), nameof(SysDictData.Name));
+            await storageable2.BulkUpdateAsync(nameof(SysDictData.Label), nameof(SysDictData.Value), nameof(SysDictData.Name), nameof(SysDictData.TenantId));
 
             Console.WriteLine($"【{DateTime.Now}】系统枚举项转字典值数据: 插入{storageable2.InsertList.Count}条, 更新{storageable2.UpdateList.Count}条, 共{storageable2.TotalList.Count}条。");
 
@@ -80,15 +80,14 @@ public class EnumToDictJob : IJob
     }
 
     /// <summary>
-    /// 用于同步枚举转字典数据, 后期可删除
+    /// 用于同步枚举转字典数据
     /// </summary>
     /// <param name="db"></param>
     /// <param name="list"></param>
-    [Obsolete]
     private async Task SyncEnumToDictInfoAsync(SqlSugarClient db, List<SysDictType> list)
     {
         var codeList = list.Select(x => x.Code).ToList();
-        foreach (var dbDictType in await db.Queryable<SysDictType>().Where(x => codeList.Contains(x.Code)).ToListAsync() ?? new())
+        foreach (var dbDictType in await db.Queryable<SysDictType>().ClearFilter().Where(x => codeList.Contains(x.Code)).ToListAsync() ?? new())
         {
             var enumDictType = list.First(x => x.Code == dbDictType.Code);
             if (enumDictType.Id == dbDictType.Id)
@@ -122,7 +121,8 @@ public class EnumToDictJob : IJob
                 Id = 900000000000 + CommonUtil.GetFixedHashCode(type.TypeName),
                 Code = type.TypeName,
                 Name = type.TypeDescribe,
-                Remark = type.TypeRemark
+                Remark = type.TypeRemark,
+                TenantId = SqlSugarConst.DefaultTenantId
             };
             dictType.Children = type.EnumEntities.Select(x => new SysDictData
             {
@@ -133,6 +133,7 @@ public class EnumToDictJob : IJob
                 Value = x.Value.ToString(),
                 OrderNo = x.Value + OrderOffset,
                 TagType = x.Theme != "" ? x.Theme : DefaultTagType,
+                TenantId = SqlSugarConst.DefaultTenantId
             }).ToList();
             list.Add(dictType);
         }

+ 49 - 49
Admin.NET/Admin.NET.Core/SeedData/SysDictDataSeedData.cs

@@ -19,61 +19,61 @@ public class SysDictDataSeedData : ISqlSugarEntitySeedData<SysDictData>
     {
         return new[]
         {
-            new SysDictData{ Id=1300000000101, DictTypeId=1300000000101, Label="输入框", Value="Input", OrderNo=100, Remark="输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000102, DictTypeId=1300000000101, Label="字典选择器", Value="DictSelector", OrderNo=100, Remark="字典选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000103, DictTypeId=1300000000101, Label="常量选择器", Value="ConstSelector", OrderNo=100, Remark="常量选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000104, DictTypeId=1300000000101, Label="枚举选择器", Value="EnumSelector", OrderNo=100, Remark="枚举选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000105, DictTypeId=1300000000101, Label="树选择器", Value="ApiTreeSelector", OrderNo=100, Remark="树选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000106, DictTypeId=1300000000101, Label="外键", Value="ForeignKey", OrderNo=100, Remark="外键", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000107, DictTypeId=1300000000101, Label="数字输入框", Value="InputNumber", OrderNo=100, Remark="数字输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000108, DictTypeId=1300000000101, Label="时间选择", Value="DatePicker", OrderNo=100, Remark="时间选择", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000109, DictTypeId=1300000000101, Label="文本域", Value="InputTextArea", OrderNo=100, Remark="文本域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000110, DictTypeId=1300000000101, Label="上传", Value="Upload", OrderNo=100, Remark="上传", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000111, DictTypeId=1300000000101, Label="开关", Value="Switch", OrderNo=100, Remark="开关", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000101, DictTypeId=1300000000101, Label="输入框", Value="Input", OrderNo=100, Remark="输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000102, DictTypeId=1300000000101, Label="字典选择器", Value="DictSelector", OrderNo=100, Remark="字典选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000103, DictTypeId=1300000000101, Label="常量选择器", Value="ConstSelector", OrderNo=100, Remark="常量选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000104, DictTypeId=1300000000101, Label="枚举选择器", Value="EnumSelector", OrderNo=100, Remark="枚举选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000105, DictTypeId=1300000000101, Label="树选择器", Value="ApiTreeSelector", OrderNo=100, Remark="树选择器", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000106, DictTypeId=1300000000101, Label="外键", Value="ForeignKey", OrderNo=100, Remark="外键", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000107, DictTypeId=1300000000101, Label="数字输入框", Value="InputNumber", OrderNo=100, Remark="数字输入框", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000108, DictTypeId=1300000000101, Label="时间选择", Value="DatePicker", OrderNo=100, Remark="时间选择", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000109, DictTypeId=1300000000101, Label="文本域", Value="InputTextArea", OrderNo=100, Remark="文本域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000110, DictTypeId=1300000000101, Label="上传", Value="Upload", OrderNo=100, Remark="上传", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000111, DictTypeId=1300000000101, Label="开关", Value="Switch", OrderNo=100, Remark="开关", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
 
-            new SysDictData{ Id=1300000000201, DictTypeId=1300000000102, Label="等于", Value="==", OrderNo=1, Remark="等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000202, DictTypeId=1300000000102, Label="模糊", Value="like", OrderNo=1, Remark="模糊", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000203, DictTypeId=1300000000102, Label="大于", Value=">", OrderNo=1, Remark="大于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000204, DictTypeId=1300000000102, Label="小于", Value="<", OrderNo=1, Remark="小于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000205, DictTypeId=1300000000102, Label="不等于", Value="!=", OrderNo=1, Remark="不等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000206, DictTypeId=1300000000102, Label="大于等于", Value=">=", OrderNo=1, Remark="大于等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000207, DictTypeId=1300000000102, Label="小于等于", Value="<=", OrderNo=1, Remark="小于等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000208, DictTypeId=1300000000102, Label="不为空", Value="isNotNull", OrderNo=1, Remark="不为空", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000209, DictTypeId=1300000000102, Label="时间范围", Value="~", OrderNo=1, Remark="时间范围", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000201, DictTypeId=1300000000102, Label="等于", Value="==", OrderNo=1, Remark="等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000202, DictTypeId=1300000000102, Label="模糊", Value="like", OrderNo=1, Remark="模糊", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000203, DictTypeId=1300000000102, Label="大于", Value=">", OrderNo=1, Remark="大于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000204, DictTypeId=1300000000102, Label="小于", Value="<", OrderNo=1, Remark="小于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000205, DictTypeId=1300000000102, Label="不等于", Value="!=", OrderNo=1, Remark="不等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000206, DictTypeId=1300000000102, Label="大于等于", Value=">=", OrderNo=1, Remark="大于等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000207, DictTypeId=1300000000102, Label="小于等于", Value="<=", OrderNo=1, Remark="小于等于", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000208, DictTypeId=1300000000102, Label="不为空", Value="isNotNull", OrderNo=1, Remark="不为空", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000209, DictTypeId=1300000000102, Label="时间范围", Value="~", OrderNo=1, Remark="时间范围", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
 
-            new SysDictData{ Id=1300000000301, DictTypeId=1300000000103, Label="long", Value="long", OrderNo=1, Remark="long", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000302, DictTypeId=1300000000103, Label="string", Value="string", OrderNo=1, Remark="string", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000303, DictTypeId=1300000000103, Label="DateTime", Value="DateTime", OrderNo=1, Remark="DateTime", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000304, DictTypeId=1300000000103, Label="bool", Value="bool", OrderNo=1, Remark="bool", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000305, DictTypeId=1300000000103, Label="int", Value="int", OrderNo=1, Remark="int", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000306, DictTypeId=1300000000103, Label="double", Value="double", OrderNo=1, Remark="double", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000307, DictTypeId=1300000000103, Label="float", Value="float", OrderNo=1, Remark="float", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000308, DictTypeId=1300000000103, Label="decimal", Value="decimal", OrderNo=1, Remark="decimal", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000309, DictTypeId=1300000000103, Label="Guid", Value="Guid", OrderNo=1, Remark="Guid", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000310, DictTypeId=1300000000103, Label="DateTimeOffset", Value="DateTimeOffset", OrderNo=1, Remark="DateTimeOffset", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000301, DictTypeId=1300000000103, Label="long", Value="long", OrderNo=1, Remark="long", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000302, DictTypeId=1300000000103, Label="string", Value="string", OrderNo=1, Remark="string", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000303, DictTypeId=1300000000103, Label="DateTime", Value="DateTime", OrderNo=1, Remark="DateTime", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000304, DictTypeId=1300000000103, Label="bool", Value="bool", OrderNo=1, Remark="bool", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000305, DictTypeId=1300000000103, Label="int", Value="int", OrderNo=1, Remark="int", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000306, DictTypeId=1300000000103, Label="double", Value="double", OrderNo=1, Remark="double", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000307, DictTypeId=1300000000103, Label="float", Value="float", OrderNo=1, Remark="float", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000308, DictTypeId=1300000000103, Label="decimal", Value="decimal", OrderNo=1, Remark="decimal", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000309, DictTypeId=1300000000103, Label="Guid", Value="Guid", OrderNo=1, Remark="Guid", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000310, DictTypeId=1300000000103, Label="DateTimeOffset", Value="DateTimeOffset", OrderNo=1, Remark="DateTimeOffset", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
 
-            new SysDictData{ Id=1300000000401, DictTypeId=1300000000104, Label="下载压缩包", Value="100", OrderNo=1, Remark="下载压缩包", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000402, DictTypeId=1300000000104, Label="下载压缩包(前端)", Value="111", OrderNo=2, Remark="下载压缩包(前端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000403, DictTypeId=1300000000104, Label="下载压缩包(后端)", Value="121", OrderNo=3, Remark="下载压缩包(后端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000404, DictTypeId=1300000000104, Label="生成到本项目", Value="200", OrderNo=4, Remark="生成到本项目", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000405, DictTypeId=1300000000104, Label="生成到本项目(前端)", Value="211", OrderNo=5, Remark="生成到本项目(前端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000406, DictTypeId=1300000000104, Label="生成到本项目(后端)", Value="221", OrderNo=6, Remark="生成到本项目(后端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000401, DictTypeId=1300000000104, Label="下载压缩包", Value="100", OrderNo=1, Remark="下载压缩包", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000402, DictTypeId=1300000000104, Label="下载压缩包(前端)", Value="111", OrderNo=2, Remark="下载压缩包(前端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000403, DictTypeId=1300000000104, Label="下载压缩包(后端)", Value="121", OrderNo=3, Remark="下载压缩包(后端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000404, DictTypeId=1300000000104, Label="生成到本项目", Value="200", OrderNo=4, Remark="生成到本项目", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000405, DictTypeId=1300000000104, Label="生成到本项目(前端)", Value="211", OrderNo=5, Remark="生成到本项目(前端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000406, DictTypeId=1300000000104, Label="生成到本项目(后端)", Value="221", OrderNo=6, Remark="生成到本项目(后端)", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
 
-            new SysDictData{ Id=1300000000501, DictTypeId=1300000000105, Label="EntityBaseId【基础实体Id】", Value="EntityBaseId", OrderNo=1, Remark="【基础实体Id】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000502, DictTypeId=1300000000105, Label="EntityBase【基础实体】", Value="EntityBase", OrderNo=1, Remark="【基础实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000503, DictTypeId=1300000000105, Label="EntityTenantId【租户实体Id】", Value="EntityTenantId", OrderNo=1, Remark="【租户实体Id】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000504, DictTypeId=1300000000105, Label="EntityTenant【租户实体】", Value="EntityTenant", OrderNo=1, Remark="【租户实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000505, DictTypeId=1300000000105, Label="EntityBaseData【业务实体】", Value="EntityBaseData", OrderNo=1, Remark="【业务实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000506, DictTypeId=1300000000105, Label="EntityTenantBaseData【租户业务实体】", Value="EntityTenantBaseData", OrderNo=1, Remark="【租户业务实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000501, DictTypeId=1300000000105, Label="EntityBaseId【基础实体Id】", Value="EntityBaseId", OrderNo=1, Remark="【基础实体Id】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000502, DictTypeId=1300000000105, Label="EntityBase【基础实体】", Value="EntityBase", OrderNo=1, Remark="【基础实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000503, DictTypeId=1300000000105, Label="EntityTenantId【租户实体Id】", Value="EntityTenantId", OrderNo=1, Remark="【租户实体Id】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000504, DictTypeId=1300000000105, Label="EntityTenant【租户实体】", Value="EntityTenant", OrderNo=1, Remark="【租户实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000505, DictTypeId=1300000000105, Label="EntityBaseData【业务实体】", Value="EntityBaseData", OrderNo=1, Remark="【业务实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000506, DictTypeId=1300000000105, Label="EntityTenantBaseData【租户业务实体】", Value="EntityTenantBaseData", OrderNo=1, Remark="【租户业务实体】", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
 
-            new SysDictData{ Id=1300000000601, DictTypeId=1300000000106, Label="不需要", Value="off", OrderNo=100, Remark="不需要打印支持", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00") },
-            new SysDictData{ Id=1300000000602, DictTypeId=1300000000106, Label="绑定打印模版", Value="custom", OrderNo=101, Remark="绑定打印模版", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00") },
+            new SysDictData{ Id=1300000000601, DictTypeId=1300000000106, Label="不需要", Value="off", OrderNo=100, Remark="不需要打印支持", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000602, DictTypeId=1300000000106, Label="绑定打印模版", Value="custom", OrderNo=101, Remark="绑定打印模版", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
 
-            new SysDictData{ Id=1300000000701, DictTypeId=1300000000201, Label="集团", Value="101", OrderNo=100, Remark="集团", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000702, DictTypeId=1300000000201, Label="公司", Value="201", OrderNo=101, Remark="公司", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000703, DictTypeId=1300000000201, Label="部门", Value="301", OrderNo=102, Remark="部门", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000704, DictTypeId=1300000000201, Label="区域", Value="401", OrderNo=103, Remark="区域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
-            new SysDictData{ Id=1300000000705, DictTypeId=1300000000201, Label="组", Value="501", OrderNo=104, Remark="组", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
+            new SysDictData{ Id=1300000000701, DictTypeId=1300000000201, Label="集团", Value="101", OrderNo=100, Remark="集团", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000702, DictTypeId=1300000000201, Label="公司", Value="201", OrderNo=101, Remark="公司", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000703, DictTypeId=1300000000201, Label="部门", Value="301", OrderNo=102, Remark="部门", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000704, DictTypeId=1300000000201, Label="区域", Value="401", OrderNo=103, Remark="区域", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictData{ Id=1300000000705, DictTypeId=1300000000201, Label="组", Value="501", OrderNo=104, Remark="组", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
         };
     }
 }

+ 7 - 7
Admin.NET/Admin.NET.Core/SeedData/SysDictTypeSeedData.cs

@@ -19,13 +19,13 @@ public class SysDictTypeSeedData : ISqlSugarEntitySeedData<SysDictType>
     {
         return new[]
         {
-            new SysDictType{ Id=1300000000101, Name="代码生成控件类型", Code="code_gen_effect_type", OrderNo=100, Remark="代码生成控件类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictType{ Id=1300000000102, Name="代码生成查询类型", Code="code_gen_query_type", OrderNo=101, Remark="代码生成查询类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictType{ Id=1300000000103, Name="代码生成.NET类型", Code="code_gen_net_type", OrderNo=102, Remark="代码生成.NET类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictType{ Id=1300000000104, Name="代码生成方式", Code="code_gen_create_type", OrderNo=103, Remark="代码生成方式", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictType{ Id=1300000000105, Name="代码生成基类", Code="code_gen_base_class", OrderNo=104, Remark="代码生成基类", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00") },
-            new SysDictType{ Id=1300000000106, Name="代码生成打印类型", Code="code_gen_print_type", OrderNo=105, Remark="代码生成打印类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00") },
-            new SysDictType{ Id=1300000000201, Name="机构类型", Code="org_type", OrderNo=201, Remark="机构类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00") },
+            new SysDictType{ Id=1300000000101, Name="代码生成控件类型", Code="code_gen_effect_type", OrderNo=100, Remark="代码生成控件类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictType{ Id=1300000000102, Name="代码生成查询类型", Code="code_gen_query_type", OrderNo=101, Remark="代码生成查询类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictType{ Id=1300000000103, Name="代码生成.NET类型", Code="code_gen_net_type", OrderNo=102, Remark="代码生成.NET类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictType{ Id=1300000000104, Name="代码生成方式", Code="code_gen_create_type", OrderNo=103, Remark="代码生成方式", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictType{ Id=1300000000105, Name="代码生成基类", Code="code_gen_base_class", OrderNo=104, Remark="代码生成基类", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2022-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictType{ Id=1300000000106, Name="代码生成打印类型", Code="code_gen_print_type", OrderNo=105, Remark="代码生成打印类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-12-04 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
+            new SysDictType{ Id=1300000000201, Name="机构类型", Code="org_type", OrderNo=201, Remark="机构类型", Status=StatusEnum.Enable, CreateTime=DateTime.Parse("2023-02-10 00:00:00"),TenantId=SqlSugarConst.DefaultTenantId },
         };
     }
 }

+ 5 - 0
Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictDataInput.cs

@@ -21,6 +21,11 @@ public class PageDictDataInput : BasePageInput
     /// 字典文本
     /// </summary>
     public string Label { get; set; }
+    
+    /// <summary>
+    /// 租户Id
+    /// </summary>
+    public long TenantId { get; set; }
 }
 
 public class AddDictDataInput : SysDictData

+ 5 - 0
Admin.NET/Admin.NET.Core/Service/Dict/Dto/DictTypeInput.cs

@@ -21,6 +21,11 @@ public class PageDictTypeInput : BasePageInput
     /// 编码
     /// </summary>
     public string Code { get; set; }
+    
+    /// <summary>
+    /// 租户Id
+    /// </summary>
+    public long TenantId { get; set; }
 }
 
 public class AddDictTypeInput : SysDictType

+ 41 - 14
Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs

@@ -14,12 +14,15 @@ public class SysDictDataService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
     private readonly SysCacheService _sysCacheService;
+    private readonly UserManager _userManager;
 
     public SysDictDataService(SqlSugarRepository<SysDictData> sysDictDataRep,
-        SysCacheService sysCacheService)
+        SysCacheService sysCacheService,
+        UserManager userManager)
     {
         _sysDictDataRep = sysDictDataRep;
         _sysCacheService = sysCacheService;
+        _userManager = userManager;
     }
 
     /// <summary>
@@ -30,9 +33,12 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [DisplayName("获取字典值分页列表")]
     public async Task<SqlSugarPagedList<SysDictData>> Page(PageDictDataInput input)
     {
+        var ids = GetTenantIdList();
         return await _sysDictDataRep.AsQueryable()
             .Where(u => u.DictTypeId == input.DictTypeId)
+            .WhereIF(!_userManager.SuperAdmin, u => ids.Contains(u.TenantId.Value))
             .WhereIF(!string.IsNullOrEmpty(input.Label?.Trim()), u => u.Value.Contains(input.Label))
+            .WhereIF(_userManager.SuperAdmin && input.TenantId > 0, u => u.TenantId ==  input.TenantId)
             .OrderBy(u => new { u.OrderNo, Code = u.Value })
             .ToPagedListAsync(input.Page, input.PageSize);
     }
@@ -56,10 +62,10 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [DisplayName("增加字典值")]
     public async Task AddDictData(AddDictDataInput input)
     {
-        var isExist = await _sysDictDataRep.IsAnyAsync(u => u.Value == input.Value && u.DictTypeId == input.DictTypeId);
+        var isExist = await _sysDictDataRep.AsQueryable().ClearFilter().AnyAsync(u => u.Value == input.Value && u.DictTypeId == input.DictTypeId);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D3003);
 
-        var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == input.DictTypeId).Select(u => u.DictType.Code).FirstAsync();
+        var dictTypeCode = await _sysDictDataRep.AsQueryable().ClearFilter().Where(u => u.DictTypeId == input.DictTypeId).Select(u => u.DictType.Code).FirstAsync();
         _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         await _sysDictDataRep.InsertAsync(input.Adapt<SysDictData>());
@@ -75,13 +81,13 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [DisplayName("更新字典值")]
     public async Task UpdateDictData(UpdateDictDataInput input)
     {
-        var isExist = await _sysDictDataRep.IsAnyAsync(u => u.Id == input.Id);
+        var isExist = await _sysDictDataRep.AsQueryable().ClearFilter().AnyAsync(u => u.Id == input.Id);
         if (!isExist) throw Oops.Oh(ErrorCodeEnum.D3004);
 
-        isExist = await _sysDictDataRep.IsAnyAsync(u => u.Value == input.Value && u.DictTypeId == input.DictTypeId && u.Id != input.Id);
+        isExist = await _sysDictDataRep.AsQueryable().ClearFilter().AnyAsync(u => u.Value == input.Value && u.DictTypeId == input.DictTypeId && u.Id != input.Id);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D3003);
 
-        var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == input.DictTypeId).Select(u => u.DictType.Code).FirstAsync();
+        var dictTypeCode = await _sysDictDataRep.AsQueryable().ClearFilter().Where(u => u.DictTypeId == input.DictTypeId).Select(u => u.DictType.Code).FirstAsync();
         _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         await _sysDictDataRep.UpdateAsync(input.Adapt<SysDictData>());
@@ -97,9 +103,9 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [DisplayName("删除字典值")]
     public async Task DeleteDictData(DeleteDictDataInput input)
     {
-        var dictData = await _sysDictDataRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
+        var dictData = await GetSysDictDataQueryable().FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
 
-        var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == dictData.Id).Select(u => u.DictType.Code).FirstAsync();
+        var dictTypeCode = await GetSysDictDataQueryable().Where(u => u.DictTypeId == dictData.Id).Select(u => u.DictType.Code).FirstAsync();
         _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         await _sysDictDataRep.DeleteAsync(dictData);
@@ -125,9 +131,9 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [DisplayName("修改字典值状态")]
     public async Task SetStatus(DictDataInput input)
     {
-        var dictData = await _sysDictDataRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
+        var dictData = await _sysDictDataRep.AsQueryable().FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
 
-        var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == dictData.Id).Select(u => u.DictType.Code).FirstAsync();
+        var dictTypeCode = await _sysDictDataRep.AsQueryable().ClearFilter().Where(u => u.DictTypeId == dictData.Id).Select(u => u.DictType.Code).FirstAsync();
         _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         dictData.Status = input.Status;
@@ -142,13 +148,12 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [NonAction]
     public async Task<List<SysDictData>> GetDictDataListByDictTypeId(long dictTypeId)
     {
-        var dictType = await _sysDictDataRep.ChangeRepository<SqlSugarRepository<SysDictType>>().GetByIdAsync(dictTypeId);
+        var dictType = await App.GetService<SysDictTypeService>().GetDetail(new DictTypeInput { Id= dictTypeId });
         var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{dictTypeId}");
 
         if (dictDataList == null)
         {
-            dictDataList = await _sysDictDataRep.AsQueryable()
-                .Where(u => u.DictTypeId == dictTypeId).OrderBy(u => new { u.OrderNo, Code = u.Value }).ToListAsync();
+            dictDataList = await GetSysDictDataQueryable().Where(u => u.DictTypeId == dictTypeId).OrderBy(u => new { u.OrderNo, Code = u.Value }).ToListAsync();
             _sysCacheService.Set($"{CacheConst.KeyDict}{dictType.Code}", dictDataList);
         }
         return dictDataList;
@@ -165,9 +170,11 @@ public class SysDictDataService : IDynamicApiController, ITransient
         var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{code}");
         if (dictDataList == null)
         {
-            dictDataList = await _sysDictDataRep.Context.Queryable<SysDictType>()
+            var ids = GetTenantIdList();
+            dictDataList = await _sysDictDataRep.Context.Queryable<SysDictType>().ClearFilter()
                 .LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId)
                 .Where((u, a) => u.Code == code && u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable)
+                .WhereIF(!_userManager.SuperAdmin, (u, a) => ids.Contains(u.TenantId.Value) && ids.Contains(a.TenantId.Value))
                 .OrderBy((u, a) => new { a.OrderNo, Code = a.Value })
                 .Select((u, a) => a).ToListAsync();
             _sysCacheService.Set($"{CacheConst.KeyDict}{code}", dictDataList);
@@ -183,13 +190,33 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [DisplayName("根据查询条件获取字典值集合")]
     public async Task<List<SysDictData>> GetDataList([FromQuery] QueryDictDataInput input)
     {
+        var ids = GetTenantIdList();
         return await _sysDictDataRep.Context.Queryable<SysDictType>()
             .LeftJoin<SysDictData>((u, a) => u.Id == a.DictTypeId)
             .Where((u, a) => u.Code == input.Code)
             .WhereIF(input.Status.HasValue, (u, a) => a.Status == (StatusEnum)input.Status.Value)
+            .WhereIF(!_userManager.SuperAdmin, (u, a) => ids.Contains(u.TenantId.Value) && ids.Contains(a.TenantId.Value))
             .OrderBy((u, a) => new { a.OrderNo, Code = a.Value })
             .Select((u, a) => a).ToListAsync();
     }
+    
+    /// <summary>
+    /// 获取租户Id列表
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public List<long> GetTenantIdList() => App.GetService<SysDictTypeService>().GetTenantIdList();
+
+    /// <summary>
+    /// 获取SysDictData表查询实例
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public ISugarQueryable<SysDictData> GetSysDictDataQueryable()
+    {
+        var ids = GetTenantIdList(); 
+        return _sysDictDataRep.AsQueryable().ClearFilter().WhereIF(!_userManager.SuperAdmin, u => ids.Contains(u.TenantId.Value));
+    }
 
     /// <summary>
     /// 根据字典类型Id删除字典值

+ 36 - 9
Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs

@@ -15,14 +15,17 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     private readonly SqlSugarRepository<SysDictType> _sysDictTypeRep;
     private readonly SysDictDataService _sysDictDataService;
     private readonly SysCacheService _sysCacheService;
+    private readonly UserManager _userManager;
 
     public SysDictTypeService(SqlSugarRepository<SysDictType> sysDictTypeRep,
         SysDictDataService sysDictDataService,
-        SysCacheService sysCacheService)
+        SysCacheService sysCacheService,
+        UserManager userManager)
     {
         _sysDictTypeRep = sysDictTypeRep;
         _sysDictDataService = sysDictDataService;
         _sysCacheService = sysCacheService;
+        _userManager = userManager;
     }
 
     /// <summary>
@@ -33,6 +36,8 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     public async Task<SqlSugarPagedList<SysDictType>> Page(PageDictTypeInput input)
     {
         return await _sysDictTypeRep.AsQueryable()
+            .WhereIF(!_userManager.SuperAdmin, u => !SqlFunc.EndsWith(SqlFunc.ToLower(u.Code), nameof(Enum).ToLower()))
+            .WhereIF(_userManager.SuperAdmin && input.TenantId > 0, u => u.TenantId ==  input.TenantId)
             .WhereIF(!string.IsNullOrEmpty(input.Code?.Trim()), u => u.Code.Contains(input.Code))
             .WhereIF(!string.IsNullOrEmpty(input.Name?.Trim()), u => u.Name.Contains(input.Name))
             .OrderBy(u => new { u.OrderNo, u.Code })
@@ -46,7 +51,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     [DisplayName("获取字典类型列表")]
     public async Task<List<SysDictType>> GetList()
     {
-        return await _sysDictTypeRep.AsQueryable().OrderBy(u => new { u.OrderNo, u.Code }).ToListAsync();
+        return await GetSysDictDataQueryable().OrderBy(u => new { u.OrderNo, u.Code }).ToListAsync();
     }
 
     /// <summary>
@@ -54,11 +59,10 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [UnitOfWork]
     [DisplayName("获取字典类型-值列表")]
     public async Task<List<SysDictData>> GetDataList([FromQuery] GetDataDictTypeInput input)
     {
-        var dictType = await _sysDictTypeRep.GetFirstAsync(u => u.Code == input.Code) ?? throw Oops.Oh(ErrorCodeEnum.D3000);
+        var dictType = await GetSysDictDataQueryable().FirstAsync(u => u.Code == input.Code) ?? throw Oops.Oh(ErrorCodeEnum.D3000);
         return await _sysDictDataService.GetDictDataListByDictTypeId(dictType.Id);
     }
 
@@ -71,9 +75,9 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     [DisplayName("添加字典类型")]
     public async Task AddDictType(AddDictTypeInput input)
     {
-        if (input.Code.ToLower().EndsWith("enum")) throw Oops.Oh(ErrorCodeEnum.D3006);
+        if (input.Code.ToLower().EndsWith(nameof(Enum).ToLower())) throw Oops.Oh(ErrorCodeEnum.D3006);
 
-        var isExist = await _sysDictTypeRep.IsAnyAsync(u => u.Code == input.Code);
+        var isExist = await _sysDictTypeRep.AsQueryable().ClearFilter().AnyAsync(u => u.Code == input.Code);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D3001);
 
         await _sysDictTypeRep.InsertAsync(input.Adapt<SysDictType>());
@@ -92,9 +96,9 @@ public class SysDictTypeService : IDynamicApiController, ITransient
         var dict = await _sysDictTypeRep.GetFirstAsync(x => x.Id == input.Id);
         if (dict == null) throw Oops.Oh(ErrorCodeEnum.D3000);
 
-        if (dict.Code.ToLower().EndsWith("enum") && input.Code != dict.Code) throw Oops.Oh(ErrorCodeEnum.D3007);
+        if (dict.Code.ToLower().EndsWith(nameof(Enum).ToLower()) && input.Code != dict.Code) throw Oops.Oh(ErrorCodeEnum.D3007);
 
-        var isExist = await _sysDictTypeRep.IsAnyAsync(u => u.Code == input.Code && u.Id != input.Id);
+        var isExist = await _sysDictTypeRep.AsQueryable().ClearFilter().AnyAsync(u => u.Code == input.Code && u.Id != input.Id);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D3001);
 
         _sysCacheService.Remove($"{CacheConst.KeyDict}{input.Code}");
@@ -153,11 +157,34 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     [DisplayName("获取所有字典集合")]
     public async Task<dynamic> GetAllDictList()
     {
-        var ds = await _sysDictTypeRep.AsQueryable()
+        var ds = await GetSysDictDataQueryable()
             .InnerJoin<SysDictData>((u, a) => u.Id == a.DictTypeId)
             .Where((u, a) => u.IsDelete == false && a.Status == StatusEnum.Enable)
             .Select((u, a) => new { TypeCode = u.Code, a.Label, a.Value, a.Name, a.TagType, a.StyleSetting, a.ClassSetting, a.ExtData, a.Remark, a.OrderNo, a.Status })
             .ToListAsync();
         return ds.OrderBy(u => u.OrderNo).GroupBy(u => u.TypeCode).ToDictionary(u => u.Key, u => u);
     }
+    
+    /// <summary>
+    /// 获取SysDictData表查询实例
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public ISugarQueryable<SysDictType> GetSysDictDataQueryable()
+    {
+        var ids = GetTenantIdList();
+        return _sysDictTypeRep.AsQueryable().WhereIF(!_userManager.SuperAdmin, u => ids.Contains(u.TenantId.Value));
+    }
+    
+    /// <summary>
+    /// 获取租户Id列表
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public List<long> GetTenantIdList()
+    {
+        List<long> tenantIdList = new() { SqlSugarConst.DefaultTenantId };
+        if (_userManager.TenantId > 0) tenantIdList.Add(_userManager.TenantId);
+        return tenantIdList;
+    }
 }

+ 12 - 0
Web/src/api-services/models/add-dict-data-input.ts

@@ -66,6 +66,12 @@ export interface AddDictDataInput {
      * @memberof AddDictDataInput
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof AddDictDataInput
+     */
+    tenantId?: number | null;
     /**
      * 字典类型Id
      * @type {number}
@@ -84,6 +90,12 @@ export interface AddDictDataInput {
      * @memberof AddDictDataInput
      */
     value: string;
+    /**
+     * 编码
+     * @type {string}
+     * @memberof AddDictDataInput
+     */
+    code?: string | null;
     /**
      * 名称
      * @type {string}

+ 6 - 0
Web/src/api-services/models/add-dict-type-input.ts

@@ -67,6 +67,12 @@ export interface AddDictTypeInput {
      * @memberof AddDictTypeInput
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof AddDictTypeInput
+     */
+    tenantId?: number | null;
     /**
      * 名称
      * @type {string}

+ 7 - 0
Web/src/api-services/models/add-pos-input.ts

@@ -12,6 +12,7 @@
  * Do not edit the class manually.
  */
 import { StatusEnum } from './status-enum';
+import { SysUser } from './sys-user';
 /**
  * 
  * @export
@@ -96,6 +97,12 @@ export interface AddPosInput {
      * @memberof AddPosInput
      */
     status?: StatusEnum;
+    /**
+     * 在职人员
+     * @type {Array<SysUser>}
+     * @memberof AddPosInput
+     */
+    userList?: Array<SysUser> | null;
     /**
      * 名称
      * @type {string}

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

@@ -45,6 +45,7 @@ export enum DbType {
     NUMBER_25 = 25,
     NUMBER_26 = 26,
     NUMBER_27 = 27,
+    NUMBER_28 = 28,
     NUMBER_900 = 900
 }
 

+ 7 - 7
Web/src/api-services/models/info-save-input.ts

@@ -34,43 +34,43 @@ export interface InfoSaveInput {
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysTitle?: string | null;
+    sysTitle: string;
     /**
      * 系统副标题
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysViceTitle?: string | null;
+    sysViceTitle: string;
     /**
      * 系统描述
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysViceDesc?: string | null;
+    sysViceDesc: string;
     /**
      * 水印内容
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysWatermark?: string | null;
+    sysWatermark: string;
     /**
      * 版权说明
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysCopyright?: string | null;
+    sysCopyright: string;
     /**
      * ICP备案号
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysIcp?: string | null;
+    sysIcp: string;
     /**
      * ICP地址
      * @type {string}
      * @memberof InfoSaveInput
      */
-    sysIcpUrl?: string | null;
+    sysIcpUrl: string;
     /**
      * 登录二次验证
      * @type {boolean}

+ 5 - 5
Web/src/api-services/models/page-dict-data-input.ts

@@ -74,15 +74,15 @@ export interface PageDictDataInput {
      */
     dictTypeId?: number;
     /**
-     * 
+     * 字典文本
      * @type {string}
      * @memberof PageDictDataInput
      */
-    value?: string | null;
+    label?: string | null;
     /**
-     * 编码
-     * @type {string}
+     * 租户Id
+     * @type {number}
      * @memberof PageDictDataInput
      */
-    code?: string | null;
+    tenantId?: number;
 }

+ 6 - 0
Web/src/api-services/models/page-dict-type-input.ts

@@ -79,4 +79,10 @@ export interface PageDictTypeInput {
      * @memberof PageDictTypeInput
      */
     code?: string | null;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof PageDictTypeInput
+     */
+    tenantId?: number;
 }

+ 13 - 1
Web/src/api-services/models/sys-dict-data.ts

@@ -66,12 +66,24 @@ export interface SysDictData {
      * @memberof SysDictData
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof SysDictData
+     */
+    tenantId?: number | null;
     /**
      * 字典类型Id
      * @type {number}
      * @memberof SysDictData
      */
     dictTypeId?: number;
+    /**
+     * 显示文本
+     * @type {string}
+     * @memberof SysDictData
+     */
+    label: string;
     /**
      * 值
      * @type {string}
@@ -83,7 +95,7 @@ export interface SysDictData {
      * @type {string}
      * @memberof SysDictData
      */
-    code: string;
+    code?: string | null;
     /**
      * 名称
      * @type {string}

+ 6 - 0
Web/src/api-services/models/sys-dict-type.ts

@@ -67,6 +67,12 @@ export interface SysDictType {
      * @memberof SysDictType
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof SysDictType
+     */
+    tenantId?: number | null;
     /**
      * 名称
      * @type {string}

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

@@ -65,6 +65,12 @@ export interface SysLogDiff {
      * @memberof SysLogDiff
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof SysLogDiff
+     */
+    tenantId?: number | null;
     /**
      * 差异数据
      * @type {string}

+ 7 - 0
Web/src/api-services/models/sys-pos.ts

@@ -12,6 +12,7 @@
  * Do not edit the class manually.
  */
 import { StatusEnum } from './status-enum';
+import { SysUser } from './sys-user';
 /**
  * 系统职位表
  * @export
@@ -102,4 +103,10 @@ export interface SysPos {
      * @memberof SysPos
      */
     status?: StatusEnum;
+    /**
+     * 在职人员
+     * @type {Array<SysUser>}
+     * @memberof SysPos
+     */
+    userList?: Array<SysUser> | null;
 }

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

@@ -23,48 +23,6 @@ export interface SysUserLdap {
      * @memberof SysUserLdap
      */
     id?: number;
-    /**
-     * 创建时间
-     * @type {Date}
-     * @memberof SysUserLdap
-     */
-    createTime?: Date;
-    /**
-     * 更新时间
-     * @type {Date}
-     * @memberof SysUserLdap
-     */
-    updateTime?: Date | null;
-    /**
-     * 创建者Id
-     * @type {number}
-     * @memberof SysUserLdap
-     */
-    createUserId?: number | null;
-    /**
-     * 创建者姓名
-     * @type {string}
-     * @memberof SysUserLdap
-     */
-    createUserName?: string | null;
-    /**
-     * 修改者Id
-     * @type {number}
-     * @memberof SysUserLdap
-     */
-    updateUserId?: number | null;
-    /**
-     * 修改者姓名
-     * @type {string}
-     * @memberof SysUserLdap
-     */
-    updateUserName?: string | null;
-    /**
-     * 软删除
-     * @type {boolean}
-     * @memberof SysUserLdap
-     */
-    isDelete?: boolean;
     /**
      * 租户Id
      * @type {number}

+ 12 - 0
Web/src/api-services/models/update-dict-data-input.ts

@@ -66,6 +66,12 @@ export interface UpdateDictDataInput {
      * @memberof UpdateDictDataInput
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof UpdateDictDataInput
+     */
+    tenantId?: number | null;
     /**
      * 字典类型Id
      * @type {number}
@@ -84,6 +90,12 @@ export interface UpdateDictDataInput {
      * @memberof UpdateDictDataInput
      */
     value: string;
+    /**
+     * 编码
+     * @type {string}
+     * @memberof UpdateDictDataInput
+     */
+    code?: string | null;
     /**
      * 名称
      * @type {string}

+ 6 - 0
Web/src/api-services/models/update-dict-type-input.ts

@@ -67,6 +67,12 @@ export interface UpdateDictTypeInput {
      * @memberof UpdateDictTypeInput
      */
     isDelete?: boolean;
+    /**
+     * 租户Id
+     * @type {number}
+     * @memberof UpdateDictTypeInput
+     */
+    tenantId?: number | null;
     /**
      * 名称
      * @type {string}

+ 7 - 0
Web/src/api-services/models/update-pos-input.ts

@@ -12,6 +12,7 @@
  * Do not edit the class manually.
  */
 import { StatusEnum } from './status-enum';
+import { SysUser } from './sys-user';
 /**
  * 
  * @export
@@ -96,6 +97,12 @@ export interface UpdatePosInput {
      * @memberof UpdatePosInput
      */
     status?: StatusEnum;
+    /**
+     * 在职人员
+     * @type {Array<SysUser>}
+     * @memberof UpdatePosInput
+     */
+    userList?: Array<SysUser> | null;
     /**
      * 名称
      * @type {string}