Browse Source

移除EasyAbp.SettingUI

 重写设置管理模块
abp4.x
王军 4 years ago
parent
commit
6a0971d8a2
  1. 1
      aspnet-core/Directory.Build.props
  2. 1
      aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/ProjectNameHttpApiHostModule.cs
  3. 6
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj
  4. 1
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissionDefinitionProvider.cs
  5. 1
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissions.cs
  6. 4
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/ProjectNameApplicationContractsModule.cs
  7. 62
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/Dtos/SettingOutput.cs
  8. 3
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/ISettingAppService.cs
  9. 29
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Tenants/IVoloTenantAppService.cs
  10. 2
      aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj
  11. 1
      aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameAppService.cs
  12. 2
      aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameApplicationModule.cs
  13. 22
      aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RolePermissionAppService.cs
  14. 106
      aspnet-core/services/src/CompanyName.ProjectName.Application/Settings/SettingAppService.cs
  15. 81
      aspnet-core/services/src/CompanyName.ProjectName.Application/Tenants/VoloTenantAppService.cs
  16. 1
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj
  17. 6
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/en.json
  18. 52
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/zh-Hans.json
  19. 13
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/ProjectNameDomainSharedModule.cs
  20. 67
      aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettingDefinitionProvider.cs
  21. 30
      aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettings.cs
  22. 4
      aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Systems/SettingController.cs
  23. 54
      aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Tenants/AbpTenantController.cs
  24. 50
      aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Tenants/TenantController.cs
  25. 4
      vben271/src/router/routes/modules/admin.ts
  26. 1835
      vben271/src/services/ServiceProxies.ts
  27. 34
      vben271/src/views/admin/settings/Setting.vue

1
aspnet-core/Directory.Build.props

@ -8,7 +8,6 @@
<MicrosoftExtensionsHttpVersion>5.0.0</MicrosoftExtensionsHttpVersion>
<SystemComponentModelAnnotationsVersion>5.0.0</SystemComponentModelAnnotationsVersion>
<MicrosoftExtensionsDependencyModelVersion>5.0.0</MicrosoftExtensionsDependencyModelVersion>
<EasyAbpSttingVersion>1.5.0</EasyAbpSttingVersion>
<SerilogVersion>2.10.0</SerilogVersion>
<SerilogExtensionsLoggingVersion>3.0.1</SerilogExtensionsLoggingVersion>
<SerilogSinksAsyncVersion>1.4.0</SerilogSinksAsyncVersion>

1
aspnet-core/services/host/CompanyName.ProjectName.HttpApi.Host/ProjectNameHttpApiHostModule.cs

@ -217,6 +217,7 @@ namespace CompanyName.ProjectName
currentContext.Token = accessToken;
}
currentContext.Request.Headers.Remove("Authorization");
currentContext.Request.Headers.Add("Authorization",
$"Bearer {accessToken}");

6
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj

@ -13,7 +13,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="EasyAbp.Abp.SettingUi.Application.Contracts" Version="$(EasyAbpSttingVersion)" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.Contracts" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.ObjectExtending" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="$(AbpPackageVersion)" />
@ -35,8 +35,4 @@
<None Remove="AuditLogs\Dto\**" />
</ItemGroup>
<ItemGroup>
<Folder Include="Tenants" />
</ItemGroup>
</Project>

1
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissionDefinitionProvider.cs

@ -17,6 +17,7 @@ namespace CompanyName.ProjectName.Permissions
var auditManagement =
abpIdentityGroup.AddPermission(ProjectNamePermissions.SystemManagement.AuditLog, L("Permission:AuditLogManagement"));
var esManagement = abpIdentityGroup.AddPermission(ProjectNamePermissions.SystemManagement.ES, L("Permission:ESManagement"));
var settingManagement = abpIdentityGroup.AddPermission(ProjectNamePermissions.SystemManagement.Setting, L("Permission:SettingManagement"));
#region IdentityServer

1
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissions.cs

@ -20,6 +20,7 @@ namespace CompanyName.ProjectName.Permissions
public const string UserEnable = Default + ".Users.Enable";
public const string AuditLog = Default + ".AuditLog";
public const string ES = Default + ".ES";
public const string Setting = Default + ".Setting";
}

4
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/ProjectNameApplicationContractsModule.cs

@ -1,5 +1,4 @@
using CompanyName.ProjectName.DataDictionaryManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account;
using Volo.Abp.FeatureManagement;
using Volo.Abp.Identity;
@ -20,8 +19,7 @@ namespace CompanyName.ProjectName
typeof(AbpSettingManagementApplicationContractsModule),
typeof(AbpTenantManagementApplicationContractsModule),
typeof(AbpObjectExtendingModule),
typeof(DataDictionaryManagementApplicationContractsModule),
typeof(AbpSettingUiApplicationContractsModule)
typeof(DataDictionaryManagementApplicationContractsModule)
)]
public class ProjectNameApplicationContractsModule : AbpModule
{

62
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/Dtos/SettingOutput.cs

@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
namespace CompanyName.ProjectName.Settings
{
public class SettingOutput
{
/// <summary>
/// 分组
/// </summary>
public string Group { get; set; }
/// <summary>
/// 分组显示名称
/// </summary>
public string GroupDisplayName { get; set; }
public List<SettingItemOutput> SettingItemOutput { get; set; }
public SettingOutput()
{
SettingItemOutput = new List<SettingItemOutput>();
}
}
public class SettingItemOutput
{
public SettingItemOutput(string name, string displayName, string value, string type,string description)
{
Name = name;
DisplayName = displayName;
Value = value;
Type = type ?? "Text";
Description = description;
}
/// <summary>
/// 名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 显示名称
/// </summary>
public string DisplayName { get; set; }
/// <summary>
/// 描述
/// </summary>
public string Description { get; set; }
/// <summary>
/// 值
/// </summary>
public string Value { get; set; }
/// <summary>
/// 前端控件类型
/// </summary>
public string Type { get; set; }
}
}

3
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/ISettingAppService.cs

@ -1,6 +1,5 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using EasyAbp.Abp.SettingUi.Dto;
using Volo.Abp.Application.Services;
namespace CompanyName.ProjectName.Settings
@ -11,7 +10,7 @@ namespace CompanyName.ProjectName.Settings
/// 获取setting信息
/// </summary>
/// <returns></returns>
Task<List<SettingGroup>> GetAsync();
Task<List<SettingOutput>> GetAsync();
/// <summary>
/// 更新setting

29
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Tenants/IVoloTenantAppService.cs

@ -0,0 +1,29 @@
using System.Threading.Tasks;
using CompanyName.ProjectName.Extension.Customs.Dtos;
using CompanyName.ProjectName.Tenants.Dtos;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
using Volo.Abp.TenantManagement;
namespace CompanyName.ProjectName.Tenants
{
public interface IVoloTenantAppService : IApplicationService
{
Task<FindTenantResultDto> FindTenantByNameAsync(FindTenantByNameInput input);
Task<PagedResultDto<TenantDto>> ListAsync(PagingTenantInput input);
Task<TenantDto> CreateAsync(TenantCreateDto input);
Task<TenantDto> UpdateAsync(UpdateTenantInput input);
Task DeleteAsync(IdInput input);
Task<string> GetDefaultConnectionStringAsync(IdInput input);
Task UpdateDefaultConnectionStringAsync(UpdateConnectionStringInput input);
Task DeleteDefaultConnectionStringAsync(IdInput input);
}
}

2
aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj

@ -15,8 +15,8 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="EasyAbp.Abp.SettingUi.Application" Version="$(EasyAbpSttingVersion)" />
<PackageReference Include="Volo.Abp.Account.Application" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.Contracts" Version="4.4.0" />
<PackageReference Include="Volo.Abp.Identity.Application" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.TenantManagement.Application" Version="$(AbpPackageVersion)" />

1
aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameAppService.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Text;
using CompanyName.ProjectName.Localization;
using Volo.Abp.Application.Services;
using Volo.Abp.Localization;
namespace CompanyName.ProjectName
{

2
aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameApplicationModule.cs

@ -1,7 +1,6 @@
using CompanyName.ProjectName.DataDictionaryManagement;
using CompanyName.ProjectName.FreeSqlRepository;
using CompanyName.ProjectName.NotificationManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account;
using Volo.Abp.AuditLogging;
using Volo.Abp.AutoMapper;
@ -26,7 +25,6 @@ namespace CompanyName.ProjectName
typeof(AbpAuditLoggingDomainModule),
typeof(DataDictionaryManagementApplicationModule),
typeof(NotificationManagementApplicationModule),
typeof(AbpSettingUiApplicationModule),
typeof(FreeSqlRepositoryModule)
)]
public class ProjectNameApplicationModule : AbpModule

22
aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RolePermissionAppService.cs

@ -61,8 +61,7 @@ namespace CompanyName.ProjectName.Roles
"AbpTenantManagement.Tenants.ManageFeatures",
// "AbpTenantManagement.Tenants.ManageConnectionStrings",
"SettingManagement",
"SettingManagement.Emailing",
"SettingUi"
"SettingManagement.Emailing"
};
var permissions = new List<PermissionTreeDto>();
@ -99,24 +98,7 @@ namespace CompanyName.ProjectName.Roles
}
result.Permissions = permissions;
var settingUIPermisstion = "SettingUi.ShowSettingPage";
// https://github.com/EasyAbp/Abp.SettingUi/blob/develop/src/EasyAbp.Abp.SettingUi.Application/SettingUiAppService.cs
// 因为使用的SettingUI模块,想把权限添加到系统管理下
result.Permissions.First(e => e.Key == "AbpIdentity").Children.Add(
new PermissionTreeDto()
{
Key = settingUIPermisstion,
Title = L["Permission:SettingUi:ShowSettingPage"]
});
result.AllGrants.Add(settingUIPermisstion);
var setting = input.First(e => e.Name == "SettingUi").Permissions
.First(e => e.Name == settingUIPermisstion);
if (setting.IsGranted)
{
result.Grants.Add(settingUIPermisstion);
}
return result;
}

106
aspnet-core/services/src/CompanyName.ProjectName.Application/Settings/SettingAppService.cs

@ -1,31 +1,113 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.Abp.SettingUi;
using EasyAbp.Abp.SettingUi.Authorization;
using EasyAbp.Abp.SettingUi.Dto;
using CompanyName.ProjectName.Localization;
using CompanyName.ProjectName.Permissions;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Localization;
using Volo.Abp.Localization;
using Volo.Abp.SettingManagement;
using Volo.Abp.Settings;
namespace CompanyName.ProjectName.Settings
{
[Authorize(Policy = SettingUiPermissions.ShowSettingPage)]
[Authorize(policy: ProjectNamePermissions.SystemManagement.Setting)]
public class SettingAppService : ProjectNameAppService, ISettingAppService
{
private readonly ISettingUiAppService _settingUiAppService;
private readonly ISettingDefinitionManager _settingDefinitionManager;
private readonly ISettingManager _settingManager;
private readonly IStringLocalizer<ProjectNameResource> _localizer;
private readonly IStringLocalizerFactory _factory;
public SettingAppService(ISettingUiAppService settingUiAppService)
public SettingAppService(
ISettingDefinitionManager settingDefinitionManager,
ISettingManager settingManager,
IStringLocalizer<ProjectNameResource> localizer,
IStringLocalizerFactory factory)
{
_settingUiAppService = settingUiAppService;
_settingDefinitionManager = settingDefinitionManager;
_settingManager = settingManager;
_localizer = localizer;
_factory = factory;
}
public async Task<List<SettingGroup>> GetAsync()
public async Task<List<SettingOutput>> GetAsync()
{
return await _settingUiAppService.GroupSettingDefinitions();
var ss = _localizer.GetAllStrings();
var s = _localizer["Setting:Group:System"];
var s2 = _localizer["Volo.Abp.Identity:PasswordRequiresDigit"];
var allSettings = _settingDefinitionManager.GetAll().ToList();
var settings = allSettings
.Where(e => e.Properties.ContainsKey(ProjectNameSettings.Group.Defalut)).ToList();
var settingOutput = settings
.GroupBy(e => e.Properties[ProjectNameSettings.Group.Defalut].ToString()).Select(s =>
new SettingOutput
{
Group = s.Key,
GroupDisplayName = _localizer[s.Key]
}).ToList();
foreach (var item in settingOutput)
{
var currentSettings = settings.Where(e => e.Properties.ContainsValue(item.Group));
foreach (var itemDefinition in currentSettings)
{
var value = await SettingProvider.GetOrNullAsync(itemDefinition.Name);
var type = itemDefinition.Properties
.FirstOrDefault(f => f.Key == ProjectNameSettings.ControlType.Defalut).Value
.ToString();
item.SettingItemOutput.Add(new SettingItemOutput(
itemDefinition.Name,
L["DisplayName:" + itemDefinition.Name],
value,
type,
itemDefinition.Description.Localize(_factory)));
}
}
return await Task.FromResult(settingOutput);
}
public async Task UpdateAsync(UpdateSettingInput input)
{
await _settingUiAppService.SetSettingValues(input.Values);
foreach (var kv in input.Values)
{
// The key of the settingValues is in camel_Case, like "setting_Abp_Localization_DefaultLanguage",
// change it to "Abp.Localization.DefaultLanguage" form
if (!kv.Key.StartsWith(ProjectNameSettings.Prefix))
{
continue;
}
string name = kv.Key.RemovePreFix(ProjectNameSettings.Prefix);
var setting = _settingDefinitionManager.GetOrNull(name);
if (setting == null)
{
continue;
}
await SetSetting(setting, kv.Value);
}
}
private Task SetSetting(SettingDefinition setting, string value)
{
if (setting.Providers.Any(p => p == UserSettingValueProvider.ProviderName))
{
return _settingManager.SetForCurrentUserAsync(setting.Name, value);
}
if (setting.Providers.Any(p => p == GlobalSettingValueProvider.ProviderName))
{
return _settingManager.SetGlobalAsync(setting.Name, value);
}
//Default
return _settingManager.SetForCurrentTenantAsync(setting.Name, value);
}
}
}

81
aspnet-core/services/src/CompanyName.ProjectName.Application/Tenants/VoloTenantAppService.cs

@ -0,0 +1,81 @@
using System.Threading.Tasks;
using CompanyName.ProjectName.Extension.Customs.Dtos;
using CompanyName.ProjectName.Tenants.Dtos;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
using Volo.Abp.TenantManagement;
namespace CompanyName.ProjectName.Tenants
{
public class VoloTenantAppService : ProjectNameAppService, IVoloTenantAppService
{
private readonly IAbpTenantAppService _abpTenantAppService;
private readonly ITenantAppService _tenantAppService;
public VoloTenantAppService(
IAbpTenantAppService abpTenantAppService,
ITenantAppService tenantAppService)
{
_abpTenantAppService = abpTenantAppService;
_tenantAppService = tenantAppService;
}
public async Task<FindTenantResultDto> FindTenantByNameAsync(FindTenantByNameInput input)
{
return await _abpTenantAppService.FindTenantByNameAsync(input.Name);
}
[Authorize(policy:TenantManagementPermissions.Tenants.Default)]
public Task<PagedResultDto<TenantDto>> ListAsync(PagingTenantInput input)
{
var request = new GetTenantsInput
{
Filter = input.Filter, SkipCount = input.SkipCount, MaxResultCount = input.PageSize
};
return _tenantAppService.GetListAsync(request);
}
[Authorize(policy:TenantManagementPermissions.Tenants.Create)]
public Task<TenantDto> CreateAsync(TenantCreateDto input)
{
return _tenantAppService.CreateAsync(input);
}
[Authorize(policy:TenantManagementPermissions.Tenants.Update)]
public Task<TenantDto> UpdateAsync(UpdateTenantInput input)
{
var request = new TenantUpdateDto()
{
Name = input.Name.Trim()
};
return _tenantAppService.UpdateAsync(input.Id, request);
}
[Authorize(policy:TenantManagementPermissions.Tenants.Delete)]
public Task DeleteAsync(IdInput input)
{
return _tenantAppService.DeleteAsync(input.Id);
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public Task<string> GetDefaultConnectionStringAsync(IdInput input)
{
return _tenantAppService.GetDefaultConnectionStringAsync(input.Id);
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public Task UpdateDefaultConnectionStringAsync(UpdateConnectionStringInput input)
{
return _tenantAppService.UpdateDefaultConnectionStringAsync(input.Id,
input.ConnectionString);
}
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
public Task DeleteDefaultConnectionStringAsync(IdInput input)
{
return _tenantAppService.DeleteDefaultConnectionStringAsync(input.Id);
}
}
}

1
aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj

@ -9,7 +9,6 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EasyAbp.Abp.SettingUi.Domain.Shared" Version="$(EasyAbpSttingVersion)" />
<PackageReference Include="Volo.Abp.Identity.Domain.Shared" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.IdentityServer.Domain.Shared" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.BackgroundJobs.Domain.Shared" Version="$(AbpPackageVersion)" />

6
aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/en.json

@ -15,11 +15,15 @@
"Permission:HangfireManagement": "BackgroundTask",
"Permission:CapManagement": "IntegratedEvent",
"Permission:ESManagement": "ESManagement",
"Permission:SettingManagement": "SettingManagement",
"Permission:IdentityServerManagement": "IdentityServer",
"Permission:IdentityServerManagement:Client": "Client",
"Permission:IdentityServerManagement:ApiResource": "ApiResource",
"Permission:IdentityServerManagement:ApiScope": "ApiScope",
"Permission:IdentityServerManagement:IdentityResources": "IdentityResources",
"Permission:SettingUi:ShowSettingPage": "SettingManagement"
"Setting.Group.System": "System",
"Setting.Group.Other": "Other",
"DisplayName:Setting.Group.Other.Github": "Github",
"Description:Setting.Group.Other.Github": "Github"
}
}

52
aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/zh-Hans.json

@ -1,25 +1,29 @@
{
"culture": "zh-Hans",
"texts": {
"Menu:Home": "首页",
"Welcome": "欢迎",
"Test": "测试",
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
"Permission:Query": "查询",
"Permission:Create": "创建",
"Permission:Update": "编辑",
"Permission:Delete": "删除",
"Permission:Enable": "启用|禁用",
"Permission:AuditLogManagement": "审计日志",
"Permission:SystemManagement": "系统管理",
"Permission:HangfireManagement": "后台任务",
"Permission:CapManagement": "集成事件",
"Permission:ESManagement": "ES日志",
"Permission:IdentityServerManagement": "IdentityServer",
"Permission:IdentityServerManagement:Client": "客户端",
"Permission:IdentityServerManagement:ApiResource": "Api资源",
"Permission:IdentityServerManagement:ApiScope": "ApiScope",
"Permission:IdentityServerManagement:IdentityResources": "Identity资源",
"Permission:SettingUi:ShowSettingPage": "设置管理"
}
}
"culture": "zh-Hans",
"texts": {
"Menu:Home": "首页",
"Welcome": "欢迎",
"Test": "测试",
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
"Permission:Query": "查询",
"Permission:Create": "创建",
"Permission:Update": "编辑",
"Permission:Delete": "删除",
"Permission:Enable": "启用|禁用",
"Permission:AuditLogManagement": "审计日志",
"Permission:SystemManagement": "系统管理",
"Permission:HangfireManagement": "后台任务",
"Permission:CapManagement": "集成事件",
"Permission:ESManagement": "ES日志",
"Permission:SettingManagement": "设置管理",
"Permission:IdentityServerManagement": "IdentityServer",
"Permission:IdentityServerManagement:Client": "客户端",
"Permission:IdentityServerManagement:ApiResource": "Api资源",
"Permission:IdentityServerManagement:ApiScope": "ApiScope",
"Permission:IdentityServerManagement:IdentityResources": "Identity资源",
"Setting.Group.System": "系统",
"Setting.Group.Other": "其它",
"DisplayName:Setting.Group.Other.Github": "Github",
"Description:Setting.Group.Other.Github": "Github"
}
}

13
aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/ProjectNameDomainSharedModule.cs

@ -1,16 +1,19 @@
using CompanyName.ProjectName.Localization;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.AuditLogging;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.FeatureManagement;
using Volo.Abp.Identity;
using Volo.Abp.Identity.Localization;
using Volo.Abp.IdentityServer;
using Volo.Abp.Localization;
using Volo.Abp.Localization.ExceptionHandling;
using Volo.Abp.Localization.Resources.AbpLocalization;
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement;
using Volo.Abp.SettingManagement;
using Volo.Abp.TenantManagement;
using Volo.Abp.Timing.Localization.Resources.AbpTiming;
using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
@ -24,8 +27,7 @@ namespace CompanyName.ProjectName
typeof(AbpIdentityServerDomainSharedModule),
typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpSettingManagementDomainSharedModule),
typeof(AbpTenantManagementDomainSharedModule),
typeof(AbpSettingUiDomainSharedModule)
typeof(AbpTenantManagementDomainSharedModule)
)]
public class ProjectNameDomainSharedModule : AbpModule
{
@ -41,12 +43,15 @@ namespace CompanyName.ProjectName
{
options.FileSets.AddEmbedded<ProjectNameDomainSharedModule>("CompanyName.ProjectName");
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<ProjectNameResource>("zh-Hans")
.AddBaseTypes(typeof(AbpValidationResource))
.AddBaseTypes(typeof(AbpLocalizationResource))
.AddBaseTypes(typeof(IdentityResource))
.AddBaseTypes(typeof(AbpTimingResource))
.AddVirtualJson("/Localization/ProjectName");
options.DefaultResourceType = typeof(ProjectNameResource);

67
aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettingDefinitionProvider.cs

@ -10,24 +10,65 @@ namespace CompanyName.ProjectName.Settings
{
//Define your own settings here. Example:
//context.Add(new SettingDefinition(ProjectNameSettings.MySetting1));
Test(context);
OverrideDefalutSettings(context);
}
/// <summary>
/// 测试Setting
/// 重写默认setting添加自定义属性
/// </summary>
/// <param name="context"></param>
public void Test(ISettingDefinitionContext context)
private static void OverrideDefalutSettings(ISettingDefinitionContext context)
{
// 具体设置请参考 https://github.com/EasyAbp/Abp.SettingUi/blob/develop/docs/README_zh-Hans.md
context.Add(
new SettingDefinition(
name: "Test",
defaultValue: "Test Setting Module",
displayName: L("Test")
).WithProviders( // 设置级别
DefaultValueSettingValueProvider.ProviderName,
GlobalSettingValueProvider.ProviderName));
context.GetOrNull("Abp.Localization.DefaultLanguage")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeText);
context.GetOrNull("Abp.Identity.Password.RequiredLength")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeCheckBox);
context.GetOrNull("Abp.Identity.Password.RequiredUniqueChars")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeCheckBox);
context.GetOrNull("Abp.Identity.Password.RequireNonAlphanumeric")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeCheckBox);
context.GetOrNull("Abp.Identity.Password.RequireLowercase")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeCheckBox);
context.GetOrNull("Abp.Identity.Password.RequireUppercase")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeCheckBox);
context.GetOrNull("Abp.Identity.Password.RequireDigit")
.WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.SystemManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeCheckBox);
context.Add(new SettingDefinition(
ProjectNameSettings.Other.Github,
"https://github.com/WangJunZzz/abp-vnext-pro",
L("DisplayName:" + ProjectNameSettings.Other.Github),
L("Description:" + ProjectNameSettings.Other.Github)
).WithProperty(ProjectNameSettings.Group.Defalut,
ProjectNameSettings.Group.OtherManagement)
.WithProperty(ProjectNameSettings.ControlType.Defalut,
ProjectNameSettings.ControlType.TypeText));
}
private static LocalizableString L(string name)

30
aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettings.cs

@ -4,9 +4,33 @@
{
public const string Prefix = "setting_";
//Add your own setting names here. Example:
//public const string MySetting1 = Prefix + ".MySetting1";
/// <summary>
/// 前端控件类型
/// </summary>
public static class ControlType
{
public const string Defalut = "Type";
public const string TypeText = "Text";
public const string TypeCheckBox = "CheckBox";
}
public const string TestGroup = "Test";
/// <summary>
/// 系统控制分组
/// </summary>
public static class Group
{
public const string Defalut = "Setting.Group";
public const string SystemManagement = Defalut + ".System";
public const string OtherManagement = Defalut + ".Other";
}
/// <summary>
/// 其他控制分组
/// </summary>
public static class Other
{
private const string Defalut = "Setting.Group.Other";
public const string Github = Defalut + ".Github";
}
}
}

4
aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Systems/SettingController.cs

@ -1,8 +1,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using CompanyName.ProjectName.Settings;
using EasyAbp.Abp.SettingUi;
using EasyAbp.Abp.SettingUi.Dto;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
@ -20,7 +18,7 @@ namespace CompanyName.ProjectName.Controllers.Systems
[HttpPost("all")]
[SwaggerOperation(summary: "获取所有Setting", Tags = new[] { "Settings" })]
public async Task<List<SettingGroup>> GetAsync()
public async Task<List<SettingOutput>> GetAsync()
{
return await _settingAppService.GetAsync();
}

54
aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Tenants/AbpTenantController.cs

@ -1,26 +1,28 @@
using System.Threading.Tasks;
using CompanyName.ProjectName.Tenants.Dtos;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
namespace CompanyName.ProjectName.Controllers.Tenants
{
[Route("Tenants")]
public class AbpTenantController : ProjectNameController
{
private readonly IAbpTenantAppService _abpTenantAppService;
public AbpTenantController(IAbpTenantAppService abpTenantAppService)
{
_abpTenantAppService = abpTenantAppService;
}
[HttpPost("find")]
[SwaggerOperation(summary: "通过名称获取租户信息", Tags = new[] {"Tenants"})]
public async Task<FindTenantResultDto> FindTenantByNameAsync(FindTenantByNameInput input)
{
return await _abpTenantAppService.FindTenantByNameAsync(input.Name);
}
}
}
// using System;
// using System.Threading.Tasks;
// using CompanyName.ProjectName.Tenants.Dtos;
// using Microsoft.AspNetCore.Mvc;
// using Swashbuckle.AspNetCore.Annotations;
// using Volo.Abp.Application.Services;
// using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
//
// namespace CompanyName.ProjectName.Controllers.Tenants
// {
// [Route("Tenants")]
// public class AbpTenantController : ProjectNameController,IApplicationService
// {
// private readonly IAbpTenantAppService _abpTenantAppService;
//
// public AbpTenantController(IAbpTenantAppService abpTenantAppService)
// {
// _abpTenantAppService = abpTenantAppService;
// }
//
// [HttpPost("find")]
// [SwaggerOperation(summary: "通过名称获取租户信息", Tags = new[] {"Tenants"})]
// public async Task<FindTenantResultDto> FindTenantByNameAsync(FindTenantByNameInput input)
// {
// return await _abpTenantAppService.FindTenantByNameAsync(input.Name);
// }
// }
// }

50
aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Tenants/TenantController.cs

@ -1,77 +1,83 @@
using System.Threading.Tasks;
using CompanyName.ProjectName.Tenants.Dtos;
using CompanyName.ProjectName.Extension.Customs.Dtos;
using Microsoft.AspNetCore.Authorization;
using CompanyName.ProjectName.Tenants;
using Microsoft.AspNetCore.Mvc;
using Swashbuckle.AspNetCore.Annotations;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc.MultiTenancy;
using Volo.Abp.TenantManagement;
namespace CompanyName.ProjectName.Controllers.Tenants
{
[Route("Tenants")]
public class TenantController : ProjectNameController
public class TenantController : ProjectNameController, IVoloTenantAppService
{
private readonly ITenantAppService _tenantAppService;
private readonly IVoloTenantAppService _voloTenantAppService;
public TenantController(ITenantAppService tenantAppService)
public TenantController(IVoloTenantAppService voloTenantAppService)
{
_tenantAppService = tenantAppService;
_voloTenantAppService = voloTenantAppService;
}
[HttpPost("find")]
[SwaggerOperation(summary: "通过名称获取租户信息", Tags = new[] {"Tenants"})]
public Task<FindTenantResultDto> FindTenantByNameAsync(FindTenantByNameInput input)
{
return _voloTenantAppService.FindTenantByNameAsync(input);
}
[HttpPost("page")]
[SwaggerOperation(summary: "分页获取租户信息", Tags = new[] {"Tenants"})]
[SwaggerOperation(summary: "分页获取租户信息", Tags = new[] { "Tenants" })]
public Task<PagedResultDto<TenantDto>> ListAsync(PagingTenantInput input)
{
var request = new GetTenantsInput {Filter = input.Filter, SkipCount = input.SkipCount, MaxResultCount = input.PageSize};
return _tenantAppService.GetListAsync(request);
return _voloTenantAppService.ListAsync(input);
}
[HttpPost("create")]
[SwaggerOperation(summary: "创建租户", Tags = new[] {"Tenants"})]
[SwaggerOperation(summary: "创建租户", Tags = new[] { "Tenants" })]
public Task<TenantDto> CreateAsync(TenantCreateDto input)
{
return _tenantAppService.CreateAsync(input);
return _voloTenantAppService.CreateAsync(input);
}
[HttpPost("update")]
[SwaggerOperation(summary: "更新租户", Tags = new[] {"Tenants"})]
[SwaggerOperation(summary: "更新租户", Tags = new[] { "Tenants" })]
public Task<TenantDto> UpdateAsync(UpdateTenantInput input)
{
var request = new TenantUpdateDto()
{
Name = input.Name.Trim()
};
return _tenantAppService.UpdateAsync(input.Id, request);
return _voloTenantAppService.UpdateAsync(input);
}
[HttpPost("delete")]
[SwaggerOperation(summary: "删除租户", Tags = new[] {"Tenants"})]
[SwaggerOperation(summary: "删除租户", Tags = new[] { "Tenants" })]
public Task DeleteAsync(IdInput input)
{
return _tenantAppService.DeleteAsync(input.Id);
return _voloTenantAppService.DeleteAsync(input);
}
[HttpPost("getConnectionString")]
[SwaggerOperation(summary: "获取租户连接字符串", Tags = new[] {"Tenants"})]
[Authorize(TenantManagementPermissions.Tenants.ManageConnectionStrings)]
[SwaggerOperation(summary: "获取租户连接字符串", Tags = new[] { "Tenants" })]
public Task<string> GetDefaultConnectionStringAsync(IdInput input)
{
return _tenantAppService.GetDefaultConnectionStringAsync(input.Id);
return _voloTenantAppService.GetDefaultConnectionStringAsync(input);
}
[HttpPost("updateConnectionString")]
[SwaggerOperation(summary: "更新租户连接字符串", Tags = new[] {"Tenants"})]
[SwaggerOperation(summary: "更新租户连接字符串", Tags = new[] { "Tenants" })]
public Task UpdateDefaultConnectionStringAsync(UpdateConnectionStringInput input)
{
return _tenantAppService.UpdateDefaultConnectionStringAsync(input.Id, input.ConnectionString);
return _voloTenantAppService.UpdateDefaultConnectionStringAsync(input);
}
[HttpPost("deleteConnectionString")]
[SwaggerOperation(summary: "删除租户连接字符串", Tags = new[] {"Tenants"})]
[SwaggerOperation(summary: "删除租户连接字符串", Tags = new[] { "Tenants" })]
public Task DeleteDefaultConnectionStringAsync(IdInput input)
{
return _tenantAppService.DeleteDefaultConnectionStringAsync(input.Id);
return _voloTenantAppService.DeleteDefaultConnectionStringAsync(input);
}
}
}

4
vben271/src/router/routes/modules/admin.ts

@ -39,7 +39,7 @@ const admin: AppRouteModule = {
component: () => import('/@/views/admin/settings/Setting.vue'),
meta: {
title: t('routes.admin.settingManagement'),
policy: 'SettingUi.ShowSettingPage',
policy: 'System.Setting',
icon: 'ant-design:unordered-list-outlined',
},
},
@ -62,7 +62,7 @@ const admin: AppRouteModule = {
policy: 'System.ES',
icon: 'ant-design:snippets-twotone',
},
}
},
],
};

1835
vben271/src/services/ServiceProxies.ts

File diff suppressed because it is too large

34
vben271/src/views/admin/settings/Setting.vue

@ -2,47 +2,28 @@
<PageWrapper v-loading="loading">
<div ref="wrapperRef" :class="prefixCls">
<Tabs tab-position="left" :tabBarStyle="tabBarStyle">
<template v-for="item in settingList" :key="item.groupName">
<template v-for="item in settingList" :key="item.group">
<TabPane :tab="item.groupDisplayName">
<CollapseContainer :title="item.groupDisplayName" :canExpan="false">
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item v-for="setting in item.settingInfos" :label="setting.displayName">
<div
v-if="
setting.properties.Type === 'number' || setting.properties.Type === 'text'
"
>
<a-form-item v-for="setting in item.settingItemOutput" :label="setting.displayName">
<div v-if="setting.type === 'Text'">
<a-input v-model:value="setting.value" style="width: 80%" />
</div>
<div v-if="setting.properties.Type === 'checkbox'">
<div v-if="setting.type === 'CheckBox'">
<a-checkbox
:checked="!(setting.value == 'false' || setting.value == false)"
@update:checked="(val) => (setting.value = val)"
>
{{ setting.description }}
</a-checkbox>
<!-- <a-checkbox v-model:checked="setting.value" size="small">
{{ setting.description }}
</a-checkbox> -->
</div>
<div v-if="setting.properties.Type === 'select'">
<a-select default-value="setting.value" style="width: 120px" size="small">
<a-select-option
v-for="itemOption in setting.properties.Options.split('|')"
:value="itemOption"
:key="itemOption"
>
{{ itemOption }}
</a-select-option>
</a-select>
</div>
</a-form-item>
<a-button
style="margin-left: 65%"
type="primary"
@click="updateSettingValues(item.settingInfos)"
@click="updateSettingValues(item.settingItemOutput)"
>{{ t('common.saveText') }}</a-button
>
</a-form>
@ -59,7 +40,7 @@
import { Tabs } from 'ant-design-vue';
import { CollapseContainer } from '/@/components/Container/index';
import { ScrollContainer } from '/@/components/Container/index';
import { SettingGroup, UpdateSettingInput } from '/@/services/ServiceProxies';
import { SettingOutput, UpdateSettingInput } from '/@/services/ServiceProxies';
import { getAllSettingsAsync, updateSettingsAsync } from './Setting';
import { useI18n } from '/@/hooks/web/useI18n';
import { PageWrapper } from '/@/components/Page';
@ -73,7 +54,7 @@
PageWrapper,
},
setup() {
let settingList: SettingGroup[] = [];
let settingList: SettingOutput[] = [];
const { t } = useI18n();
const state = reactive({
settingList,
@ -88,6 +69,7 @@
const updateSettingValues = async (item: any) => {
try {
debugger;
const prefix = 'setting_';
var request = new UpdateSettingInput();
request.values as {};

Loading…
Cancel
Save