ソースを参照

Revert "feat: 😀给参数配置表增加租户隔离"

喵你个旺呀 1 年間 前
コミット
68e701b834

+ 5 - 5
Admin.NET/Admin.NET.Core/Entity/SysConfig.cs

@@ -7,13 +7,13 @@
 namespace Admin.NET.Core;
 
 /// <summary>
-/// 系统配置参数
+/// 系统参数配置表
 /// </summary>
-[SugarTable(null, "系统配置参数表")]
+[SugarTable(null, "系统参数配置表")]
 [SysTable]
 [SugarIndex("index_{table}_N", nameof(Name), OrderByType.Asc)]
 [SugarIndex("index_{table}_C", nameof(Code), OrderByType.Asc, IsUnique = true)]
-public partial class SysConfig : EntityBase
+public partial class SysConfig : EntityTenant
 {
     /// <summary>
     /// 名称
@@ -30,9 +30,9 @@ public partial class SysConfig : EntityBase
     public string? Code { get; set; }
 
     /// <summary>
-    /// 属性默认
+    /// 属性值
     /// </summary>
-    [SugarColumn(ColumnDescription = "属性默认值", Length = -1)]
+    [SugarColumn(ColumnDescription = "属性值", Length = -1)]
     [MaxLength(64)]
     [IgnoreUpdateSeedColumn]
     public string? Value { get; set; }

+ 0 - 35
Admin.NET/Admin.NET.Core/Entity/SysConfigValue.cs

@@ -1,35 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-namespace Admin.NET.Core;
-
-/// <summary>
-/// 系统配置参数值表
-/// </summary>
-[SugarTable(null, "系统配置参数值表")]
-[SysTable]
-[SugarIndex("index_{table}_N", nameof(ConfigId), OrderByType.Asc)]
-public partial class SysConfigValue : EntityTenant
-{
-    /// <summary>
-    /// 配置Id
-    /// </summary>
-    [SugarColumn(ColumnDescription = "配置Id")]
-    public long ConfigId { get; set; }
-
-    /// <summary>
-    /// 属性默认值
-    /// </summary>
-    [MaxLength(64)]
-    [SugarColumn(ColumnDescription = "属性默认值", Length = -1)]
-    public string? Value { get; set; }
-
-    /// <summary>
-    /// 配置
-    /// </summary>
-    [Navigate(NavigateType.OneToOne, nameof(ConfigId))]
-    public SysConfig Config { get; set; }
-}

+ 2 - 2
Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs

@@ -374,9 +374,9 @@ public enum ErrorCodeEnum
     D3009,
 
     /// <summary>
-    /// 非超管用户禁止操作系统内置数据
+    /// 非超管用户禁止操作系统字典
     /// </summary>
-    [ErrorCodeItemMetadata("非超管用户禁止操作系统内置数据")]
+    [ErrorCodeItemMetadata("非超管用户禁止操作系统字典")]
     D3010,
 
     /// <summary>

+ 26 - 83
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -15,20 +15,17 @@ namespace Admin.NET.Core.Service;
 public class SysConfigService : IDynamicApiController, ITransient
 {
     private static readonly SysTenantService SysTenantService = App.GetService<SysTenantService>();
-    private readonly SqlSugarRepository<SysConfigValue> _sysConfigValueRep;
     private readonly SqlSugarRepository<SysConfig> _sysConfigRep;
     private readonly SqlSugarRepository<SysTenant> _sysTenantRep;
     private readonly SysCacheService _sysCacheService;
     private readonly UserManager _userManager;
 
     public SysConfigService(
-        SqlSugarRepository<SysConfigValue> sysConfigValueRep,
         SqlSugarRepository<SysTenant> sysTenantRep,
         SqlSugarRepository<SysConfig> sysConfigRep,
         SysCacheService sysCacheService,
         UserManager userManager)
     {
-        _sysConfigValueRep = sysConfigValueRep;
         _sysCacheService = sysCacheService;
         _sysConfigRep = sysConfigRep;
         _sysTenantRep = sysTenantRep;
@@ -43,9 +40,8 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取参数配置分页列表")]
     public async Task<SqlSugarPagedList<SysConfig>> Page(PageConfigInput input)
     {
-        var queryable = await GetConfigQueryable();
-        return await queryable
-            .WhereIF(!_userManager.SuperAdmin, u => u.SysFlag == YesNoEnum.N)
+        return await _sysConfigRep.AsQueryable().ClearFilter()
+            .WhereIF(!_userManager.SuperAdmin, u => u.TenantId == _userManager.TenantId)
             .WhereIF(!string.IsNullOrWhiteSpace(input.Name?.Trim()), u => u.Name.Contains(input.Name))
             .WhereIF(!string.IsNullOrWhiteSpace(input.Code?.Trim()), u => u.Code.Contains(input.Code))
             .WhereIF(!string.IsNullOrWhiteSpace(input.GroupCode?.Trim()), u => u.GroupCode.Equals(input.GroupCode))
@@ -60,8 +56,7 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取参数配置列表")]
     public async Task<List<SysConfig>> List(PageConfigInput input)
     {
-        var queryable = await GetConfigQueryable();
-        return await queryable
+        return await GetConfigQueryable()
             .WhereIF(!string.IsNullOrWhiteSpace(input.GroupCode?.Trim()), u => u.GroupCode.Equals(input.GroupCode))
             .ToListAsync();
     }
@@ -98,32 +93,8 @@ public class SysConfigService : IDynamicApiController, ITransient
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D9000);
 
         var config = input.Adapt<SysConfig>();
-        if (input.SysFlag != YesNoEnum.Y)
-        {
-            config.Value = null;
-            var configValue = await _sysConfigValueRep.AsQueryable().ClearFilter()
-                .WhereIF(_userManager.TenantId > 0, u => u.TenantId == _userManager.TenantId)
-                .WhereIF(_userManager.TenantId <= 0, u => u.TenantId == SqlSugarConst.DefaultTenantId)
-                .SingleAsync(u => u.ConfigId == config.Id);
-            if (configValue == null)
-            {
-                await _sysConfigValueRep.InsertAsync(new SysConfigValue()
-                {
-                    ConfigId = config.Id,
-                    Value = input.Value
-                });
-            }
-            else
-            {
-                configValue.Value = input.Value;
-                await _sysConfigValueRep.UpdateAsync(configValue);
-            }
-        }
-        else
-        {
-            await _sysConfigValueRep.DeleteAsync(u => u.ConfigId == input.Id);
-        }
-        await _sysConfigRep.AsUpdateable(config).ExecuteCommandAsync();
+        await _sysConfigRep.AsUpdateable(config).IgnoreColumns(true).ExecuteCommandAsync();
+
         Remove(config);
     }
 
@@ -141,8 +112,8 @@ public class SysConfigService : IDynamicApiController, ITransient
         // 禁止删除系统参数
         if (config.SysFlag == YesNoEnum.Y) throw Oops.Oh(ErrorCodeEnum.D9001);
 
-        await _sysConfigValueRep.DeleteAsync(u => u.ConfigId == config.Id);
         await _sysConfigRep.DeleteAsync(config);
+
         Remove(config);
     }
 
@@ -163,7 +134,6 @@ public class SysConfigService : IDynamicApiController, ITransient
             if (config.SysFlag == YesNoEnum.Y) continue;
 
             await _sysConfigRep.DeleteAsync(config);
-            await _sysConfigValueRep.DeleteAsync(u => u.ConfigId == config.Id);
 
             Remove(config);
         }
@@ -177,8 +147,7 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取参数配置详情")]
     public async Task<SysConfig> GetDetail([FromQuery] ConfigInput input)
     {
-        var query = await GetConfigQueryable();
-        return await query.FirstAsync(u => u.Id == input.Id);
+        return await _sysConfigRep.GetFirstAsync(u => u.Id == input.Id);
     }
 
     /// <summary>
@@ -194,47 +163,13 @@ public class SysConfigService : IDynamicApiController, ITransient
         var value = _sysCacheService.Get<string>($"{CacheConst.KeyConfig}{code}");
         if (string.IsNullOrEmpty(value))
         {
-            var query = await GetConfigQueryable();
-            var config = await query.FirstAsync(u => u.Code == code);
-            value = config?.Value;
+            value = (await GetConfigQueryable().FirstAsync(u => u.Code == code))?.Value;
             _sysCacheService.Set($"{CacheConst.KeyConfig}{code}", value);
         }
         if (string.IsNullOrWhiteSpace(value)) return default;
         return (T)Convert.ChangeType(value, typeof(T));
     }
 
-    /// <summary>
-    /// 获取参数配置查询器
-    /// </summary>
-    /// <returns></returns>
-    [NonAction]
-    public Task<ISugarQueryable<SysConfig>> GetConfigQueryable()
-    {
-        var tenantId = _userManager.TenantId;
-        if (_userManager.TenantId <= 0) tenantId = SqlSugarConst.DefaultTenantId;
-        return Task.FromResult(
-            _sysConfigRep.AsQueryable()
-                .LeftJoin<SysConfigValue>((u, w) => u.Id == w.ConfigId).ClearFilter()
-                .Where((u, w) => w.TenantId == null || w.TenantId == tenantId)
-                .Select((u, w) => new SysConfig
-                {
-                    Id = u.Id,
-                    Name = u.Name,
-                    Code = u.Code,
-                    GroupCode = u.GroupCode,
-                    SysFlag = u.SysFlag,
-                    Remark = u.Remark,
-                    Value = w.Value ?? u.Value,
-                    CreateTime = SqlFunc.IIF(u.SysFlag == YesNoEnum.Y, u.CreateTime, w.CreateTime),
-                    UpdateTime = SqlFunc.IIF(u.SysFlag == YesNoEnum.Y, u.UpdateTime, w.UpdateTime),
-                    CreateUserId = SqlFunc.IIF(u.SysFlag == YesNoEnum.Y, u.CreateUserId, w.CreateUserId),
-                    CreateUserName = SqlFunc.IIF(u.SysFlag == YesNoEnum.Y, u.CreateUserName, w.CreateUserName),
-                    UpdateUserId = SqlFunc.IIF(u.SysFlag == YesNoEnum.Y, u.UpdateUserId, w.UpdateUserId),
-                    UpdateUserName = SqlFunc.IIF(u.SysFlag == YesNoEnum.Y, u.UpdateUserName, w.UpdateUserName),
-                })
-            );
-    }
-
     /// <summary>
     /// 更新参数配置值
     /// </summary>
@@ -244,12 +179,11 @@ public class SysConfigService : IDynamicApiController, ITransient
     [NonAction]
     public async Task UpdateConfigValue(string code, string value)
     {
-        var query = await GetConfigQueryable();
-        var config = await query.FirstAsync(u => u.Code == code);
+        var config = await GetConfigQueryable().FirstAsync(u => u.Code == code);
         if (config == null) return;
 
         config.Value = value;
-        await UpdateConfig(config.Adapt<UpdateConfigInput>());
+        await _sysConfigRep.AsUpdateable(config).ExecuteCommandAsync();
 
         Remove(config);
     }
@@ -261,8 +195,9 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取分组列表")]
     public async Task<List<string>> GetGroupList()
     {
-        var query = await GetConfigQueryable();
-        return await query.GroupBy(u => u.GroupCode).Select(u => u.GroupCode).ToListAsync();
+        return await GetConfigQueryable()
+            .GroupBy(u => u.GroupCode)
+            .Select(u => u.GroupCode).ToListAsync();
     }
 
     /// <summary>
@@ -298,14 +233,12 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("批量更新参数配置值")]
     public async Task BatchUpdateConfig(List<BatchConfigInput> input)
     {
-        var query = await GetConfigQueryable();
         foreach (var config in input)
         {
-            var info = await query.FirstAsync(c => c.Code == config.Code);
+            var info = await GetConfigQueryable().FirstAsync(c => c.Code == config.Code);
             if (info == null || info.SysFlag == YesNoEnum.Y) continue;
 
-            info.Value = config.Value;
-            await UpdateConfig(info.Adapt<UpdateConfigInput>());
+            await _sysConfigRep.AsUpdateable().SetColumns(u => u.Value == config.Value).Where(u => u.Code == config.Code).ExecuteCommandAsync();
             Remove(info);
         }
     }
@@ -323,7 +256,7 @@ public class SysConfigService : IDynamicApiController, ITransient
         tenant ??= await _sysTenantRep.GetFirstAsync(u => u.Id == SqlSugarConst.DefaultTenantId);
         _ = tenant ?? throw Oops.Oh(ErrorCodeEnum.D1002);
 
-        var wayList = await _sysConfigRep.Change<SysUserRegWay>().AsQueryable().ClearFilter()
+        var wayList = await _sysConfigRep.Context.Queryable<SysUserRegWay>().ClearFilter()
             .Where(u => u.TenantId == tenant.Id)
             .Select(u => new { Label = u.Name, Value = u.Id })
             .ToListAsync();
@@ -368,6 +301,16 @@ public class SysConfigService : IDynamicApiController, ITransient
         await _sysConfigRep.Context.Updateable(tenant).ExecuteCommandAsync();
     }
 
+    /// <summary>
+    /// 获取参数配置查询器
+    /// </summary>
+    /// <returns></returns>
+    [NonAction]
+    public ISugarQueryable<SysConfig> GetConfigQueryable()
+    {
+        return _sysConfigRep.AsQueryable().ClearFilter().Where(u => u.SysFlag == YesNoEnum.Y || u.TenantId == _userManager.TenantId);
+    }
+
     private void Remove(SysConfig config)
     {
         _sysCacheService.Remove($"{CacheConst.KeyConfig}Value:{config.Code}");

+ 2 - 4
Web/src/views/system/config/component/editConfig.vue

@@ -46,7 +46,7 @@
 							</el-input>
 						</el-form-item>
 					</el-col>
-					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="userInfo.accountType === AccountTypeEnum.NUMBER_999">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
 						<el-form-item label="内置参数" prop="sysFlag" :rules="[{ required: true, message: '内置参数不能为空', trigger: 'blur' }]">
 							<el-radio-group v-model="state.ruleForm.sysFlag" :disabled="state.ruleForm.sysFlag == 1 && state.ruleForm.id != undefined">
 								<el-radio :value="1">是</el-radio>
@@ -86,10 +86,8 @@ import { reactive, ref } from 'vue';
 
 import { getAPI } from '/@/utils/axios-utils';
 import { SysConfigApi } from '/@/api-services/api';
-import {AccountTypeEnum, UpdateConfigInput} from '/@/api-services/models';
-import {useUserInfo} from "/@/stores/userInfo";
+import { UpdateConfigInput } from '/@/api-services/models';
 
-const userInfo = useUserInfo().userInfos;
 const props = defineProps({
 	title: String,
 });