From cdca54972910c6a0d9b242fcf17454e5a7af88d3 Mon Sep 17 00:00:00 2001 From: cKey <35512826+colinin@users.noreply.github.com> Date: Thu, 19 Nov 2020 18:20:10 +0800 Subject: [PATCH] Refactor the setting-management module --- aspnet-core/LINGYUN.MicroService.All.sln | 14 - .../LINGYUN.MicroService.BackendAdmin.sln | 48 + .../LINGYUN/Abp/Account/AccountAppService.cs | 2 +- .../Account/AbpAccountDomainSharedModule.cs | 2 +- .../LINGYUN.Abp.EventBus.CAP.xml | 41 +- ...ingManagement.Application.Contracts.csproj | 4 + .../Dto/AccountSettingsDto.cs | 4 +- .../Dto/FileManagementSettingsDto.cs | 14 + .../Dto/IdentitySettingGroupDto.cs | 11 + .../Dto/IdentitySettingsDto.cs | 90 +- .../Dto/LocalizationSettingsDto.cs | 2 +- .../Abp/SettingManagement/Dto/OptionDto.cs | 19 + .../Dto/SettingDetailsDto.cs | 42 + .../Abp/SettingManagement/Dto/SettingDto.cs | 40 +- .../SettingManagement/Dto/SettingGroupDto.cs | 31 + .../Dto/TimingSettingsDto.cs | 10 + .../Abp/SettingManagement/Dto/ValueType.cs | 34 + .../SettingManagement/ISettingAppService.cs | 17 +- .../Localization/ApplicationContracts/en.json | 36 +- .../ApplicationContracts/zh-Hans.json | 36 +- ...N.Abp.SettingManagement.Application.csproj | 4 + .../SettingManagement/SettingAppService.cs | 382 ++++++-- .../SettingManagement/SettingController.cs | 54 +- .../AccountSettingDefinitionProvider.cs | 35 + vueJs/debug.log | 1 + vueJs/src/api/settings.ts | 106 +-- .../components/GlobalSettingEditForm.vue | 14 +- .../settings/components/SettingEditForm.vue | 826 ++---------------- .../components/TenantSettingEditForm.vue | 14 +- 29 files changed, 920 insertions(+), 1013 deletions(-) create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/FileManagementSettingsDto.cs create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingGroupDto.cs create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/OptionDto.cs create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDetailsDto.cs create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingGroupDto.cs create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/TimingSettingsDto.cs create mode 100644 aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/ValueType.cs create mode 100644 aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs create mode 100644 vueJs/debug.log diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln index 722ce79af..e4d009f8d 100644 --- a/aspnet-core/LINGYUN.MicroService.All.sln +++ b/aspnet-core/LINGYUN.MicroService.All.sln @@ -73,10 +73,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Applica EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{8E569C1C-2637-4D89-804C-50FBC83948FB}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Domain", "modules\account\LINGYUN.Abp.Account.Domain\LINGYUN.Abp.Account.Domain.csproj", "{79D3F30B-AB84-4E14-B721-6D8820C8443D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Domain.Shared", "modules\account\LINGYUN.Abp.Account.Domain.Shared\LINGYUN.Abp.Account.Domain.Shared.csproj", "{9CE1A399-E466-496C-8FCC-1DC25059C51F}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "modules\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{FF1839EA-FB6B-4ED5-9804-E40427046D35}" @@ -365,14 +361,6 @@ Global {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.Build.0 = Release|Any CPU - {79D3F30B-AB84-4E14-B721-6D8820C8443D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79D3F30B-AB84-4E14-B721-6D8820C8443D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79D3F30B-AB84-4E14-B721-6D8820C8443D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79D3F30B-AB84-4E14-B721-6D8820C8443D}.Release|Any CPU.Build.0 = Release|Any CPU - {9CE1A399-E466-496C-8FCC-1DC25059C51F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CE1A399-E466-496C-8FCC-1DC25059C51F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CE1A399-E466-496C-8FCC-1DC25059C51F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CE1A399-E466-496C-8FCC-1DC25059C51F}.Release|Any CPU.Build.0 = Release|Any CPU {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.Build.0 = Debug|Any CPU {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -735,8 +723,6 @@ Global {9E72FEB9-A626-4312-892B-CDD043879758} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} {8B09385A-719C-4B83-B61E-0ECD5D2734BD} = {9E72FEB9-A626-4312-892B-CDD043879758} {8E569C1C-2637-4D89-804C-50FBC83948FB} = {9E72FEB9-A626-4312-892B-CDD043879758} - {79D3F30B-AB84-4E14-B721-6D8820C8443D} = {9E72FEB9-A626-4312-892B-CDD043879758} - {9CE1A399-E466-496C-8FCC-1DC25059C51F} = {9E72FEB9-A626-4312-892B-CDD043879758} {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D} = {9E72FEB9-A626-4312-892B-CDD043879758} {FF1839EA-FB6B-4ED5-9804-E40427046D35} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} diff --git a/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln b/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln index 37f83a36e..7b3a457d9 100644 --- a/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln +++ b/aspnet-core/LINGYUN.MicroService.BackendAdmin.sln @@ -43,6 +43,22 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permissions-management", "p EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{7521486D-2144-4AFA-86AD-8E8021479DE6}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "file-management", "file-management", "{8F972C8E-F047-4883-A4BF-3423A2BAED36}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain.Shared", "modules\file-management\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj", "{49F8CD24-85EA-479A-A376-CC31A0618AE7}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{D4AB1BF0-95EC-4E34-9C39-E888ED30C535}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{A387EF32-1FAD-412F-893D-43485CE59DB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{9BABF219-AAAA-4611-8B49-BFCCBD046934}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -101,6 +117,30 @@ Global {7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.Build.0 = Release|Any CPU + {49F8CD24-85EA-479A-A376-CC31A0618AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {49F8CD24-85EA-479A-A376-CC31A0618AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {49F8CD24-85EA-479A-A376-CC31A0618AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {49F8CD24-85EA-479A-A376-CC31A0618AE7}.Release|Any CPU.Build.0 = Release|Any CPU + {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4}.Release|Any CPU.Build.0 = Release|Any CPU + {E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67}.Release|Any CPU.Build.0 = Release|Any CPU + {D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4AB1BF0-95EC-4E34-9C39-E888ED30C535}.Release|Any CPU.Build.0 = Release|Any CPU + {A387EF32-1FAD-412F-893D-43485CE59DB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A387EF32-1FAD-412F-893D-43485CE59DB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A387EF32-1FAD-412F-893D-43485CE59DB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A387EF32-1FAD-412F-893D-43485CE59DB4}.Release|Any CPU.Build.0 = Release|Any CPU + {9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9BABF219-AAAA-4611-8B49-BFCCBD046934}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9BABF219-AAAA-4611-8B49-BFCCBD046934}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -124,6 +164,14 @@ Global {376B2235-ADA7-4EC7-A27D-8F97EC6A57CD} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} {D25C4814-71AB-4A9D-8C76-298A7DE1A747} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C} {7521486D-2144-4AFA-86AD-8E8021479DE6} = {D25C4814-71AB-4A9D-8C76-298A7DE1A747} + {8F972C8E-F047-4883-A4BF-3423A2BAED36} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C} + {49F8CD24-85EA-479A-A376-CC31A0618AE7} = {8F972C8E-F047-4883-A4BF-3423A2BAED36} + {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C} + {AA2F7243-976C-47F3-9B4E-20CC22F8FCF4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} + {E758D3A7-DB93-4EAC-A2ED-C2322D4F7D67} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} + {D4AB1BF0-95EC-4E34-9C39-E888ED30C535} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} + {A387EF32-1FAD-412F-893D-43485CE59DB4} = {9DAD2CA8-16B6-4006-BD8E-EE3E9BAA3770} + {9BABF219-AAAA-4611-8B49-BFCCBD046934} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF} diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs index 9f53e47e3..7df961677 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs @@ -66,7 +66,7 @@ namespace LINGYUN.Abp.Account var userName = input.UserName; if (userName.IsNullOrWhiteSpace()) { - userName = "wxid-" + wehchatOpenId.OpenId.ToMd5(); + userName = "wxid-" + wehchatOpenId.OpenId.ToMd5().ToLower(); } var userEmail = input.EmailAddress;//如果邮件地址不验证,随意写入一个 diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Domain.Shared/LINGYUN/Abp/Account/AbpAccountDomainSharedModule.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Domain.Shared/LINGYUN/Abp/Account/AbpAccountDomainSharedModule.cs index 3cfc71775..cda7cd239 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Domain.Shared/LINGYUN/Abp/Account/AbpAccountDomainSharedModule.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Domain.Shared/LINGYUN/Abp/Account/AbpAccountDomainSharedModule.cs @@ -1,4 +1,4 @@ -using LINGYUN.Abp.Account.Localization; +using Volo.Abp.Account.Localization; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; diff --git a/aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN.Abp.EventBus.CAP.xml b/aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN.Abp.EventBus.CAP.xml index 99d51c538..c27f8e704 100644 --- a/aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN.Abp.EventBus.CAP.xml +++ b/aspnet-core/modules/common/LINGYUN.Abp.EventBus.CAP/modules/common/LINGYUN.Abp.EventBus.CAP/LINGYUN.Abp.EventBus.CAP.xml @@ -59,7 +59,7 @@ Storage - + 创建过期消息清理任务 @@ -121,6 +121,28 @@ + + + 过期消息清理配置项 + + + + + 发布消息处理失败通知 + + + + + 批量清理数量 + default: 1000 + + + + + 执行间隔(ms) + default: 3600000 (1 hours) + + AbpECAPExecutionFailedException @@ -277,23 +299,6 @@ - - - 过期消息清理配置项 - - - - - 批量清理数量 - default: 1000 - - - - - 执行间隔(ms) - default: 3600000 (1 hours) - - CAP ServiceCollectionExtensions diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN.Abp.SettingManagement.Application.Contracts.csproj b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN.Abp.SettingManagement.Application.Contracts.csproj index f5e4417ff..3f8c62d17 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN.Abp.SettingManagement.Application.Contracts.csproj +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN.Abp.SettingManagement.Application.Contracts.csproj @@ -22,4 +22,8 @@ + + + + diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/AccountSettingsDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/AccountSettingsDto.cs index 038571024..7acfaa318 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/AccountSettingsDto.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/AccountSettingsDto.cs @@ -5,10 +5,10 @@ /// /// 是否允许用户自行注册帐户 /// - public bool IsSelfRegistrationEnabled { get; set; } + public SettingDetailsDto IsSelfRegistrationEnabled { get; set; } /// /// 服务器是否将允许用户使用本地帐户进行身份验证 /// - public bool EnableLocalLogin { get; set; } + public SettingDetailsDto EnableLocalLogin { get; set; } } } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/FileManagementSettingsDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/FileManagementSettingsDto.cs new file mode 100644 index 000000000..27d45496d --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/FileManagementSettingsDto.cs @@ -0,0 +1,14 @@ +namespace LINGYUN.Abp.SettingManagement +{ + public class FileManagementSettingsDto + { + /// + /// 限制上传文件大小 + /// + public SettingDetailsDto FileLimitLength { get; set; } + /// + /// 允许的文件扩展名 + /// + public SettingDetailsDto AllowFileExtensions { get; set; } + } +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingGroupDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingGroupDto.cs new file mode 100644 index 000000000..2ecb109bd --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingGroupDto.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace LINGYUN.Abp.SettingManagement +{ + public class IdentitySettingGroupDto + { + + } +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingsDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingsDto.cs index edf706e9e..303df86d7 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingsDto.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/IdentitySettingsDto.cs @@ -1,83 +1,111 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace LINGYUN.Abp.SettingManagement +namespace LINGYUN.Abp.SettingManagement { - public class IdentitySettingsDto - { - public IdentityPasswordSettings Password { get; set; } - public IdentityLockoutSettings Lockout { get; set; } - public IdentitySignInSettings SignIn { get; set; } - public IdentityUserSettings User { get; set; } - } - - public class IdentityPasswordSettings + public class PasswordDto { /// /// 密码的最小长度 /// - public int RequiredLength { get; set; } + public SettingDetailsDto RequiredLength { get; set; } /// /// 密码必须包含唯一字符的数量 /// - public int RequiredUniqueChars { get; set; } + public SettingDetailsDto RequiredUniqueChars { get; set; } /// /// 密码是否必须包含非字母数字 /// - public bool RequireNonAlphanumeric { get; set; } + public SettingDetailsDto RequireNonAlphanumeric { get; set; } /// /// 密码是否必须包含小写字母 /// - public bool RequireLowercase { get; set; } + public SettingDetailsDto RequireLowercase { get; set; } /// /// 密码是否必须包含大写字母 /// - public bool RequireUppercase { get; set; } + public SettingDetailsDto RequireUppercase { get; set; } /// /// 密码是否必须包含数字 /// - public bool RequireDigit { get; set; } + public SettingDetailsDto RequireDigit { get; set; } } - public class IdentityLockoutSettings + public class LockoutDto { /// /// 允许新用户被锁定 /// - public bool AllowedForNewUsers { get; set; } + public SettingDetailsDto AllowedForNewUsers { get; set; } /// /// 当锁定发生时用户被的锁定的时间(秒) /// - public int LockoutDuration { get; set; } + public SettingDetailsDto LockoutDuration { get; set; } /// /// 如果启用锁定, 当用户被锁定前失败的访问尝试次数 /// - public int MaxFailedAccessAttempts { get; set; } + public SettingDetailsDto MaxFailedAccessAttempts { get; set; } } - public class IdentitySignInSettings + public class SignInDto { /// /// 登录时是否需要验证电子邮箱 /// - public bool RequireConfirmedEmail { get; set; } + public SettingDetailsDto RequireConfirmedEmail { get; set; } /// /// 用户是否可以确认手机号码 /// - public bool EnablePhoneNumberConfirmation { get; set; } + public SettingDetailsDto EnablePhoneNumberConfirmation { get; set; } /// /// 登录时是否需要验证手机号码 /// - public bool RequireConfirmedPhoneNumber { get; set; } + public SettingDetailsDto RequireConfirmedPhoneNumber { get; set; } } - public class IdentityUserSettings + public class UserDto { /// /// 是否允许用户更新用户名 /// - public bool IsUserNameUpdateEnabled { get; set; } + public SettingDetailsDto IsUserNameUpdateEnabled { get; set; } /// /// 是否允许用户更新电子邮箱 /// - public bool IsEmailUpdateEnabled { get; set; } + public SettingDetailsDto IsEmailUpdateEnabled { get; set; } + /// + /// 用户注册短信验证码模板号 + /// + public SettingDetailsDto SmsNewUserRegister { get; set; } + /// + /// 用户登录短信验证码模板号 + /// + public SettingDetailsDto SmsUserSignin { get; set; } + /// + /// 用户重置密码短信验证码模板号 + /// + public SettingDetailsDto SmsResetPassword { get; set; } + /// + /// 验证码重复间隔时间 + /// + public SettingDetailsDto SmsRepetInterval { get; set; } + /// + /// 用户手机验证短信模板 + /// + public SettingDetailsDto SmsPhoneNumberConfirmed { get; set; } + } + + public class OrganizationUnitDto + { + /// + /// 单个用户最大组织机构数量 + /// + public SettingDetailsDto MaxUserMembershipCount { get; set; } + } + + public class TwoFactorDto + { + /// + /// 双因素认证行为 + /// + public SettingDetailsDto Behaviour { get; set; } + /// + /// 用户是否可以变更双因素模式 + /// + public SettingDetailsDto UsersCanChange { get; set; } } } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/LocalizationSettingsDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/LocalizationSettingsDto.cs index 966363e36..5c2941494 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/LocalizationSettingsDto.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/LocalizationSettingsDto.cs @@ -5,6 +5,6 @@ /// /// 应用程序的默认语言 /// - public string DefaultLanguage { get; set; } + public SettingDetailsDto DefaultLanguage { get; set; } } } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/OptionDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/OptionDto.cs new file mode 100644 index 000000000..3bfc6eabd --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/OptionDto.cs @@ -0,0 +1,19 @@ +namespace LINGYUN.Abp.SettingManagement +{ + public class OptionDto + { + public string Name { get; set; } + public string Value { get; set; } + + public OptionDto() + { + + } + + public OptionDto(string name, string value) + { + Name = name; + Value = value; + } + } +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDetailsDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDetailsDto.cs new file mode 100644 index 000000000..fa10b6fb3 --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDetailsDto.cs @@ -0,0 +1,42 @@ +using System.Collections.Generic; + +namespace LINGYUN.Abp.SettingManagement +{ + public class SettingDetailsDto + { + public string Name { get; set; } + + public string DisplayName { get; set; } + + public string Description { get; set; } + + public string Value { get; set; } + + public string DefaultValue { get; set; } + + public bool IsEncrypted { get; set; } + + public ValueType ValueType { get; set; } + /// + /// 选项列表,仅当 ValueType 为 Option有效 + /// + public List Options { get; set; } = new List(); + + public SettingDetailsDto AddOption(string name, string value) + { + Options.Add(new OptionDto + { + Name = name, + Value = value + }); + + return this; + } + + public SettingDetailsDto AddOptions(IEnumerable options) + { + Options.AddRange(options); + return this; + } + } +} \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDto.cs index 21177ff3a..c88ba4fe9 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDto.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingDto.cs @@ -1,15 +1,43 @@ -namespace LINGYUN.Abp.SettingManagement +using Microsoft.Extensions.Localization; +using System.Collections.Generic; +using Volo.Abp.Settings; + +namespace LINGYUN.Abp.SettingManagement { public class SettingDto { - public string Name { get; set; } - public string DisplayName { get; set; } public string Description { get; set; } - public string Value { get; set; } + public List Details { get; set; } = new List(); + + public SettingDto() + { + + } + + public SettingDto(string displayName, string description = "") + { + DisplayName = displayName; + Description = description; + } + + public SettingDetailsDto AddDetail(SettingDefinition setting, IStringLocalizerFactory factory, string value, ValueType type) + { + var detail = new SettingDetailsDto() + { + DefaultValue = setting.DefaultValue, + IsEncrypted = setting.IsEncrypted, + Description = setting.Description.Localize(factory), + DisplayName = setting.DisplayName.Localize(factory), + Name = setting.Name, + Value = value, + ValueType = type + }; + Details.Add(detail); - public string DefaultValue { get; set; } + return detail; + } } -} \ No newline at end of file +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingGroupDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingGroupDto.cs new file mode 100644 index 000000000..aec50aa94 --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/SettingGroupDto.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; + +namespace LINGYUN.Abp.SettingManagement +{ + public class SettingGroupDto + { + public string DisplayName { get; set; } + + public string Description { get; set; } + + public List Settings { get; set; } = new List(); + + public SettingGroupDto() + { + + } + + public SettingGroupDto(string displayName, string description = "") + { + DisplayName = displayName; + Description = description; + } + + public SettingDto AddSetting(string displayName, string description = "") + { + var setting = new SettingDto(displayName, description); + Settings.Add(setting); + return setting; + } + } +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/TimingSettingsDto.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/TimingSettingsDto.cs new file mode 100644 index 000000000..ac12c00b9 --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/TimingSettingsDto.cs @@ -0,0 +1,10 @@ +namespace LINGYUN.Abp.SettingManagement +{ + public class TimingSettingsDto + { + /// + /// 时区 + /// + public string TimeZone { get; set; } + } +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/ValueType.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/ValueType.cs new file mode 100644 index 000000000..5ba92e13a --- /dev/null +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Dto/ValueType.cs @@ -0,0 +1,34 @@ +namespace LINGYUN.Abp.SettingManagement +{ + public enum ValueType + { + /// + /// 字符 + /// + String = 0, + /// + /// 数字 + /// + Number = 1, + /// + /// 布尔 + /// + Boolean = 2, + /// + /// 日期 + /// + Date = 3, + /// + /// 数组 + /// + Array = 4, + /// + /// 选项 + /// + Option = 5, + /// + /// 对象 + /// + Object = 10 + } +} diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs index a6390392d..1a49ad46a 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/ISettingAppService.cs @@ -1,7 +1,4 @@ -using JetBrains.Annotations; -using System; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; +using System.Threading.Tasks; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -9,20 +6,12 @@ namespace LINGYUN.Abp.SettingManagement { public interface ISettingAppService : IApplicationService { - Task> GetAllGlobalAsync(); - Task SetGlobalAsync(UpdateSettingsDto input); - Task> GetAllForCurrentTenantAsync(); - Task SetCurrentTenantAsync(UpdateSettingsDto input); - Task> GetAllForUserAsync([Required] Guid userId); - - Task SetForUserAsync([Required] Guid userId, UpdateSettingsDto input); - - Task> GetAllForCurrentUserAsync(); + Task> GetAllForGlobalAsync(); - Task SetCurrentUserAsync(UpdateSettingsDto input); + Task> GetAllForCurrentTenantAsync(); } } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/en.json b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/en.json index 7f4f13bfe..17d9ce8f2 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/en.json +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/en.json @@ -4,6 +4,40 @@ "Permission:SettingManagement": "SettingManagement", "Permission:Settings": "Settings", "Permission:Update": "Update", - "Permission:Manager": "Manager" + "Permission:Manager": "Manager", + "DisplayName:System": "System", + "Description:System": "System", + "DisplayName:System.Language": "Language", + "Description:System.Language": "Language", + "DisplayName:System.Timing": "Timing", + "Description:System.Timing": "Timing", + "DisplayName:Security": "Security", + "Description:Security": "Security", + "DisplayName:Security.Account": "Account", + "Description:Security.Account": "Account", + "DisplayName:Identity": "Identity", + "Description:Identity": "Identity", + "DisplayName:Identity.Lockout": "Lockout", + "Description:Identity.Lockout": "Lockout", + "DisplayName:Identity.User": "User", + "Description:Identity.User": "User", + "DisplayName:Identity.SignIn": "SignIn", + "Description:Identity.SignIn": "SignIn", + "DisplayName:Identity.Password": "Password", + "Description:Identity.Password": "Password", + "DisplayName:Identity.TwoFactor": "TwoFactor", + "Description:Identity.TwoFactor": "TwoFactor", + "DisplayName:Identity.OrganizationUnit": "OrganizationUnit", + "Description:Identity.OrganizationUnit": "OrganizationUnit", + "DisplayName:Emailing": "Emailing", + "Description:Emailing": "Emailing", + "DisplayName:Emailing.Default": "Default", + "Description:Emailing.Default": "Default", + "DisplayName:Emailing.Smtp": "Smtp", + "Description:Emailing.Smtp": "Smtp", + "DisplayName:FileManagement": "File Management", + "Description:FileManagement": "File Management", + "DisplayName:FileManagement.FileSystem": "File System", + "Description:FileManagement.FileSystem": "File System" } } \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/zh-Hans.json b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/zh-Hans.json index f7c019e50..f8b88c2c6 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/zh-Hans.json +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application.Contracts/LINGYUN/Abp/SettingManagement/Localization/ApplicationContracts/zh-Hans.json @@ -4,6 +4,40 @@ "Permission:SettingManagement": "系统设置", "Permission:Settings": "配置管理", "Permission:Update": "变更", - "Permission:Manager": "管理" + "Permission:Manager": "管理", + "DisplayName:System": "系统设置", + "Description:System": "与系统相关的配置项", + "DisplayName:System.Language": "语言", + "Description:System.Language": "应用程序的多语言配置", + "DisplayName:System.Timing": "时区", + "Description:System.Timing": "应用程序的时区配置", + "DisplayName:Security": "安全设置", + "Description:Security": "与应用安全相关的配置", + "DisplayName:Security.Account": "用户账户", + "Description:Security.Account": "管理用户账户配置", + "DisplayName:Identity": "身份认证", + "Description:Identity": "应用程序身份认证相关配置", + "DisplayName:Identity.Lockout": "用户锁定", + "Description:Identity.Lockout": "当用户登录失败达到上限的锁定策略", + "DisplayName:Identity.User": "用户配置", + "Description:Identity.User": "用户配置", + "DisplayName:Identity.SignIn": "用户登录", + "Description:Identity.SignIn": "用户登录有关的策略配置", + "DisplayName:Identity.Password": "密码配置", + "Description:Identity.Password": "用户密码配置策略", + "DisplayName:Identity.TwoFactor": "双因素配置", + "Description:Identity.TwoFactor": "双因素认证配置策略", + "DisplayName:Identity.OrganizationUnit": "组织机构", + "Description:Identity.OrganizationUnit": "组织机构配置策略", + "DisplayName:Emailing": "邮件设置", + "Description:Emailing": "邮件通知相关的配置", + "DisplayName:Emailing.Default": "默认配置", + "Description:Emailing.Default": "邮件通知的默认配置", + "DisplayName:Emailing.Smtp": "Smtp配置", + "Description:Emailing.Smtp": "Smtp配置", + "DisplayName:FileManagement": "文件管理", + "Description:FileManagement": "文件管理", + "DisplayName:FileManagement.FileSystem": "文件系统", + "Description:FileManagement.FileSystem": "文件系统" } } \ No newline at end of file diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN.Abp.SettingManagement.Application.csproj b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN.Abp.SettingManagement.Application.csproj index d2d6ee69e..7ede35509 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN.Abp.SettingManagement.Application.csproj +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN.Abp.SettingManagement.Application.csproj @@ -7,10 +7,14 @@ + + + + diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs index 6d8cad325..d1b1471ea 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingAppService.cs @@ -1,16 +1,24 @@ -using Microsoft.AspNetCore.Authorization; +using LINGYUN.Abp.FileManagement.Settings; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; +using Volo.Abp.Account.Settings; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Caching; +using Volo.Abp.Emailing; +using Volo.Abp.Identity.Features; +using Volo.Abp.Identity.Settings; +using Volo.Abp.Localization; using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement; using Volo.Abp.SettingManagement.Localization; using Volo.Abp.Settings; +using Volo.Abp.Timing; using Volo.Abp.Users; namespace LINGYUN.Abp.SettingManagement @@ -18,6 +26,8 @@ namespace LINGYUN.Abp.SettingManagement [Authorize(AbpSettingManagementPermissions.Settings.Default)] public class SettingAppService : ApplicationService, ISettingAppService { + protected AbpLocalizationOptions LocalizationOptions { get; } + protected ISettingManager SettingManager { get; } protected ISettingDefinitionManager SettingDefinitionManager { get; } @@ -25,11 +35,13 @@ namespace LINGYUN.Abp.SettingManagement public SettingAppService( ISettingManager settingManager, IDistributedCache cache, + IOptions localizationOptions, ISettingDefinitionManager settingDefinitionManager) { Cache = cache; SettingManager = settingManager; SettingDefinitionManager = settingDefinitionManager; + LocalizationOptions = localizationOptions.Value; LocalizationResource = typeof(AbpSettingManagementResource); } @@ -58,108 +70,312 @@ namespace LINGYUN.Abp.SettingManagement } } - [Authorize(AbpSettingManagementPermissions.Settings.Manager)] - public virtual async Task SetForUserAsync([Required] Guid userId, UpdateSettingsDto input) - { - foreach (var setting in input.Settings) - { - await SettingManager.SetForUserAsync(userId, setting.Name, setting.Value); - } - - await CurrentUnitOfWork.SaveChangesAsync(); - } - [Authorize] - public virtual async Task SetCurrentUserAsync(UpdateSettingsDto input) + public virtual async Task> GetAllForCurrentTenantAsync() { - foreach (var setting in input.Settings) - { - await SettingManager.SetForUserAsync(CurrentUser.GetId(), setting.Name, setting.Value); - } - - await CurrentUnitOfWork.SaveChangesAsync(); + return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString()); } [AllowAnonymous] - public virtual async Task> GetAllGlobalAsync() + public virtual async Task> GetAllForGlobalAsync() { - // return GetAllSetting(await SettingManager.GetAllGlobalAsync()); - - return await GetAllSettingAsync(GlobalSettingValueProvider.ProviderName, null); + return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null); } - public virtual async Task> GetAllForCurrentTenantAsync() + protected virtual async Task> GetAllForProviderAsync(string providerName, string providerKey) { - if (CurrentTenant.IsAvailable) - { - // return GetAllSetting(await SettingManager.GetAllForTenantAsync(CurrentTenant.GetId(), false)); + /* + * 2020-11-19 + * colin@foxmail.com + * + * 之所以重构为这种看似硬编码的设计,是因为硬编码的都是常用的自带的配置 + * + * 自定义的应用模块可以实现返回相同Dto的配置服务,然后通过路由的聚合功能, + * 轻松加入到前端的设置管理(因为vue前端已设计为动态表单页面) + * + * 最初的设计才是不合理的,前端不能硬编码设置管理界面,这应该是后端的事情 + */ - return await GetAllSettingAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString()); - } - return new ListResultDto(); + var settingGroups = new List(); - } + #region 系统设置 - public virtual async Task> GetAllForUserAsync([Required] Guid userId) - { - // return GetAllSetting(await SettingManager.GetAllForUserAsync(userId)); + var sysSettingGroup = new SettingGroupDto(L["DisplayName:System"], L["Description:System"]); + // 语言 + var languageSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Language"], L["Description:System.Language"]); + languageSetting.AddDetail( + SettingDefinitionManager.Get(LocalizationSettingNames.DefaultLanguage), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage, providerName, providerKey), + ValueType.Option) + .AddOptions(LocalizationOptions.Languages.Select(l => new OptionDto(l.DisplayName, l.CultureName))); + // 时区 + var timingSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Timing"], L["Description:System.Timing"]); + timingSetting.AddDetail( + SettingDefinitionManager.Get(TimingSettingNames.TimeZone), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(TimingSettingNames.TimeZone, providerName, providerKey), + ValueType.String); + settingGroups.Add(sysSettingGroup); - return await GetAllSettingAsync(UserSettingValueProvider.ProviderName, userId.ToString()); - } + #endregion - [Authorize] - public virtual async Task> GetAllForCurrentUserAsync() - { - // return GetAllSetting(await SettingManager.GetAllForUserAsync(CurrentUser.GetId())); + #region 安全设置 - return await GetAllSettingAsync(UserSettingValueProvider.ProviderName, CurrentUser.GetId().ToString()); - } + var securitySettingGroup = new SettingGroupDto(L["DisplayName:Security"], L["Description:Security"]); - protected virtual ListResultDto GetAllSetting(List settings) - { - var settingsDto = new List(); - foreach (var setting in settings) - { - var settingDefinition = SettingDefinitionManager.Get(setting.Name); - var settingInfo = new SettingDto - { - Name = setting.Name, - Value = setting.Value ?? settingDefinition.DefaultValue, - DefaultValue = settingDefinition.DefaultValue, - Description = settingDefinition.Description.Localize(StringLocalizerFactory), - DisplayName = settingDefinition.DisplayName.Localize(StringLocalizerFactory) - }; - settingsDto.Add(settingInfo); - } + // 用户账户 + var accountSetting = securitySettingGroup.AddSetting(L["DisplayName:Security.Account"], L["Description:Security.Account"]); + // 启用本地登录 + accountSetting.AddDetail( + SettingDefinitionManager.Get(AccountSettingNames.EnableLocalLogin), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(AccountSettingNames.EnableLocalLogin, providerName, providerKey), + ValueType.Boolean); + accountSetting.AddDetail( + SettingDefinitionManager.Get(AccountSettingNames.IsSelfRegistrationEnabled), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled, providerName, providerKey), + ValueType.Boolean); - return new ListResultDto(settingsDto); - } + settingGroups.Add(securitySettingGroup); - protected virtual async Task> GetAllSettingAsync(string providerName, string providerKey) - { - var settingsDto = new List(); + #endregion - var settings = await SettingManager.GetAllAsync(providerName, providerKey); - foreach (var setting in settings) - { - var settingDefinition = SettingDefinitionManager.Get(setting.Name); - if (settingDefinition.Providers.Count > 0 && - !settingDefinition.Providers.Any(p => p.Equals(providerName))) - { - continue; - } - var settingInfo = new SettingDto - { - Name = setting.Name, - Value = setting.Value ?? settingDefinition.DefaultValue, - DefaultValue = settingDefinition.DefaultValue, - Description = settingDefinition.Description.Localize(StringLocalizerFactory), - DisplayName = settingDefinition.DisplayName.Localize(StringLocalizerFactory) - }; - settingsDto.Add(settingInfo); - } + #region 身份标识设置 + + // 身份标识设置 + var identitySetting = new SettingGroupDto(L["DisplayName:Identity"], L["Description:Identity"]); + + #region 用户锁定 + + var lockoutSetting = identitySetting.AddSetting(L["DisplayName:Identity.Lockout"], L["Description:Identity.Lockout"]); + lockoutSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, providerName, providerKey), + ValueType.Boolean); + lockoutSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Lockout.LockoutDuration), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.LockoutDuration, providerName, providerKey), + ValueType.Number); + lockoutSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, providerName, providerKey), + ValueType.Number); + + #endregion + + #region 用户 + + var userSetting = identitySetting.AddSetting(L["DisplayName:Identity.User"], L["Description:Identity.User"]); + userSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.User.IsEmailUpdateEnabled), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled, providerName, providerKey), + ValueType.Boolean); + userSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.User.IsUserNameUpdateEnabled), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled, providerName, providerKey), + ValueType.Boolean); + userSetting.AddDetail( + SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister, providerName, providerKey), + ValueType.String); + userSetting.AddDetail( + SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword, providerName, providerKey), + ValueType.String); + userSetting.AddDetail( + SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin, providerName, providerKey), + ValueType.String); + userSetting.AddDetail( + SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed, providerName, providerKey), + ValueType.String); + userSetting.AddDetail( + SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval, providerName, providerKey), + ValueType.Number); + + #endregion + + #region 登录 + + var signinSetting = identitySetting.AddSetting(L["DisplayName:Identity.SignIn"], L["Description:Identity.SignIn"]); + signinSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation, providerName, providerKey), + ValueType.Boolean); + signinSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey), + ValueType.Boolean); + signinSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey), + ValueType.Boolean); + + #endregion + + #region 密码 + + var passwordSetting = identitySetting.AddSetting(L["DisplayName:Identity.Password"], L["Description:Identity.Password"]); + passwordSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireDigit), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireDigit, providerName, providerKey), + ValueType.Boolean); + passwordSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey), + ValueType.Number); + passwordSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey), + ValueType.Number); + passwordSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey), + ValueType.Boolean); + passwordSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey), + ValueType.Boolean); + passwordSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey), + ValueType.Boolean); + + #endregion + + #region 双因素 + + var twoFactorSetting = identitySetting.AddSetting(L["DisplayName:Identity.TwoFactor"], L["Description:Identity.TwoFactor"]); + twoFactorSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.Behaviour), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.Behaviour, providerName, providerKey), + ValueType.Option) + .AddOption(IdentityTwoFactorBehaviour.Optional.ToString(), IdentityTwoFactorBehaviour.Optional.ToString()) + .AddOption(IdentityTwoFactorBehaviour.Forced.ToString(), IdentityTwoFactorBehaviour.Forced.ToString()) + .AddOption(IdentityTwoFactorBehaviour.Disabled.ToString(), IdentityTwoFactorBehaviour.Disabled.ToString()); + twoFactorSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.UsersCanChange), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.UsersCanChange, providerName, providerKey), + ValueType.Boolean); + + #endregion + + #region 组织机构 + + var ouSetting = identitySetting.AddSetting(L["DisplayName:Identity.OrganizationUnit"], L["Description:Identity.OrganizationUnit"]); + ouSetting.AddDetail( + SettingDefinitionManager.Get(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount, providerName, providerKey), + ValueType.Number); + + settingGroups.Add(identitySetting); + + #endregion + + #endregion + + #region 邮件设置 + + var emailSettingGroup = new SettingGroupDto(L["DisplayName:Emailing"], L["Description:Emailing"]); + var defaultMailSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Default"], L["Description:Emailing.Default"]); + defaultMailSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.DefaultFromAddress), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromAddress, providerName, providerKey), + ValueType.String); + defaultMailSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey), + ValueType.String); + + var smtpSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Smtp"], L["Description:Emailing.Smtp"]); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.EnableSsl), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.EnableSsl, providerName, providerKey), + ValueType.Boolean); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey), + ValueType.Boolean); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey), + ValueType.String); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey), + ValueType.String); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey), + ValueType.Number); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey), + ValueType.String); + smtpSetting.AddDetail( + SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey), + ValueType.String); + + settingGroups.Add(emailSettingGroup); + + #endregion + + #region 文件设置 + + var fileSettingGroup = new SettingGroupDto(L["DisplayName:FileManagement"], L["Description:FileManagement"]); + var fileSystemSetting = fileSettingGroup.AddSetting(L["DisplayName:FileManagement.FileSystem"], L["Description:FileManagement.FileSystem"]); + fileSystemSetting.AddDetail( + SettingDefinitionManager.Get(AbpFileManagementSettingNames.FileLimitLength), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(AbpFileManagementSettingNames.FileLimitLength, providerName, providerKey), + ValueType.Number); + fileSystemSetting.AddDetail( + SettingDefinitionManager.Get(AbpFileManagementSettingNames.AllowFileExtensions), + StringLocalizerFactory, + await SettingManager.GetOrNullAsync(AbpFileManagementSettingNames.AllowFileExtensions, providerName, providerKey), + ValueType.String); + + settingGroups.Add(fileSettingGroup); + + #endregion - return new ListResultDto(settingsDto); + return new ListResultDto(settingGroups); } } } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs index f92964ab4..29a68f8a1 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingController.cs @@ -1,6 +1,4 @@ using Microsoft.AspNetCore.Mvc; -using System; -using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; @@ -19,60 +17,32 @@ namespace LINGYUN.Abp.SettingManagement _settingAppService = settingAppService; } - [HttpGet] - [Route("by-current-user")] - public virtual async Task> GetAllForCurrentUserAsync() - { - return await _settingAppService.GetAllForCurrentUserAsync(); - } - - [HttpGet] + [HttpPut] [Route("by-current-tenant")] - public virtual async Task> GetAllForCurrentTenantAsync() + public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input) { - return await _settingAppService.GetAllForCurrentTenantAsync(); + await _settingAppService.SetCurrentTenantAsync(input); } - [HttpGet] - [Route("by-user/{userId}")] - public virtual async Task> GetAllForUserAsync([Required] Guid userId) + [HttpPut] + [Route("by-global")] + public virtual async Task SetGlobalAsync(UpdateSettingsDto input) { - return await _settingAppService.GetAllForUserAsync(userId); + await _settingAppService.SetGlobalAsync(input); } [HttpGet] [Route("by-global")] - public virtual async Task> GetAllGlobalAsync() - { - return await _settingAppService.GetAllGlobalAsync(); - } - - [HttpPut] - [Route("by-current-user")] - public virtual async Task SetCurrentUserAsync(UpdateSettingsDto input) + public virtual async Task> GetAllForGlobalAsync() { - await _settingAppService.SetCurrentUserAsync(input); + return await _settingAppService.GetAllForGlobalAsync(); } - [HttpPut] + [HttpGet] [Route("by-current-tenant")] - public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input) - { - await _settingAppService.SetCurrentTenantAsync(input); - } - - [HttpPut] - [Route("by-user/{userId}")] - public virtual async Task SetForUserAsync([Required] Guid userId, UpdateSettingsDto input) + public virtual async Task> GetAllForCurrentTenantAsync() { - await _settingAppService.SetForUserAsync(userId, input); - } - - [HttpPut] - [Route("by-global")] - public virtual async Task SetGlobalAsync(UpdateSettingsDto input) - { - await _settingAppService.SetGlobalAsync(input); + return await _settingAppService.GetAllForCurrentTenantAsync(); } } } diff --git a/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs new file mode 100644 index 000000000..8966ded0a --- /dev/null +++ b/aspnet-core/services/admin/LINGYUN.Abp.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs @@ -0,0 +1,35 @@ +using Volo.Abp.Account.Localization; +using Volo.Abp.Account.Settings; +using Volo.Abp.Localization; +using Volo.Abp.Settings; + +namespace LINGYUN.Abp.BackendAdmin.Settings +{ + // 后台管理项目不引用 Volo.Abp.Account.Application模块,只能自建一个配置 + public class AccountSettingDefinitionProvider : SettingDefinitionProvider + { + public override void Define(ISettingDefinitionContext context) + { + context.Add( + new SettingDefinition( + AccountSettingNames.IsSelfRegistrationEnabled, + "true", + L("DisplayName:Abp.Account.IsSelfRegistrationEnabled"), + L("Description:Abp.Account.IsSelfRegistrationEnabled"), isVisibleToClients: true) + ); + + context.Add( + new SettingDefinition( + AccountSettingNames.EnableLocalLogin, + "true", + L("DisplayName:Abp.Account.EnableLocalLogin"), + L("Description:Abp.Account.EnableLocalLogin"), isVisibleToClients: true) + ); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} diff --git a/vueJs/debug.log b/vueJs/debug.log new file mode 100644 index 000000000..3e5cfa668 --- /dev/null +++ b/vueJs/debug.log @@ -0,0 +1 @@ +[1119/165237.273:ERROR:directory_reader_win.cc(43)] FindFirstFile: ϵͳҲָ· (0x3) diff --git a/vueJs/src/api/settings.ts b/vueJs/src/api/settings.ts index 710758def..2a74cb49c 100644 --- a/vueJs/src/api/settings.ts +++ b/vueJs/src/api/settings.ts @@ -9,7 +9,7 @@ export default class SettingApiService { */ public static getGlobalSettings() { const _url = '/api/setting-management/settings/by-global' - return ApiService.Get>(_url, IdentityService) + return ApiService.Get>(_url, IdentityService) } /** @@ -25,7 +25,7 @@ export default class SettingApiService { */ public static getCurrentTenantSettings() { const _url = '/api/setting-management/settings/by-current-tenant' - return ApiService.Get>(_url, IdentityService) + return ApiService.Get>(_url, IdentityService) } /** @@ -36,38 +36,6 @@ export default class SettingApiService { return ApiService.Put(_url, payload, IdentityService) } - /** - * 获取当前用户配置 - */ - public static getCurrentUserSettings() { - const _url = '/api/setting-management/settings/by-current-user' - return ApiService.Get>(_url, IdentityService) - } - - /** - * 设置当前用户配置 - */ - public static setCurrentUserSettings(payload: SettingsUpdate) { - const _url = '/api/setting-management/settings/by-current-user' - return ApiService.Put(_url, payload, IdentityService) - } - - /** - * 获取用户配置 - */ - public static getUserSettings(userId: string) { - const _url = '/api/setting-management/settings/by-user/' + userId - return ApiService.Get>(_url, IdentityService) - } - - /** - * 设置当前用户配置 - */ - public static setUserSettings(userId: string, payload: SettingsUpdate) { - const _url = '/api/setting-management/settings/by-user/' + userId - return ApiService.Put(_url, payload, IdentityService) - } - /** * 保存配置 * @param providerName 配置提供者名称 @@ -90,22 +58,22 @@ export class SettingBase { value!: any } -/** 设置对象 */ -export class Setting extends SettingBase { - /** 显示名称 */ - displayName!: string - /** 说明 */ - description!: string - /** 默认设置 */ - defaultValue!: string - - public getValue() { - if (this.value) { - return this.value - } - return this.defaultValue - } -} +// /** 设置对象 */ +// export class Setting extends SettingBase { +// /** 显示名称 */ +// displayName!: string +// /** 说明 */ +// description!: string +// /** 默认设置 */ +// defaultValue!: string + +// public getValue() { +// if (this.value) { +// return this.value +// } +// return this.defaultValue +// } +// } /** 配置变更对象 */ export class SettingUpdate extends SettingBase {} @@ -119,3 +87,41 @@ export class SettingsUpdate { this.settings = new Array() } } + +export enum ValueType { + String = 0, + Number = 1, + Boolean = 2, + Date = 3, + Array = 4, + Option = 5, + Object = 10 +} + +export class Option { + name!: string + value!: string +} + +export class SettingDetail { + name!: string + displayName!: string + description?: string + value?: string + defaultValue!: string + valueType!: ValueType + isEncrypted = false + options = new Array