Browse Source

✨ 添加ES日志查询和设置管理

pull/10/head 4.4.0.3
王军 5 years ago
parent
commit
7c8e0c6289
  1. 33
      aspnet-core/modules/DataDictionaryManagement/src/CompanyName.ProjectName.DataDictionaryManagement.HttpApi/Samples/SampleController.cs
  2. 1
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj
  3. 2
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissionDefinitionProvider.cs
  4. 4
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/ProjectNameApplicationContractsModule.cs
  5. 14
      aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/UpdateSettingInput.cs
  6. 1
      aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj
  7. 4
      aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameApplicationModule.cs
  8. 19
      aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RoleAppService.cs
  9. 1
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj
  10. 4
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/en.json
  11. 5
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/zh-Hans.json
  12. 8
      aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/ProjectNameDomainSharedModule.cs
  13. 29
      aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettingDefinitionProvider.cs
  14. 4
      aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettings.cs
  15. 35
      aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Systems/SettingController.cs
  16. 1
      aspnet-core/services/src/CompanyName.ProjectName.HttpApi/ProjectNameHttpApiModule.cs
  17. 1
      vben271/src/locales/lang/en/routes/admin.ts
  18. 1
      vben271/src/locales/lang/zh-CN/routes/admin.ts
  19. 10
      vben271/src/router/routes/modules/admin.ts
  20. 256
      vben271/src/services/ServiceProxies.ts
  21. 2
      vben271/src/settings/projectSetting.ts
  22. 2
      vben271/src/views/admin/elasticSearch/ElasticSearch.ts
  23. 16
      vben271/src/views/admin/settings/Setting.ts
  24. 132
      vben271/src/views/admin/settings/Setting.vue

33
aspnet-core/modules/DataDictionaryManagement/src/CompanyName.ProjectName.DataDictionaryManagement.HttpApi/Samples/SampleController.cs

@ -1,33 +0,0 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
namespace CompanyName.ProjectName.DataDictionaryManagement.Samples
{
[RemoteService]
[Route("api/DataDictionaryManagement/sample")]
public class SampleController : DataDictionaryManagementController, ISampleAppService
{
private readonly ISampleAppService _sampleAppService;
public SampleController(ISampleAppService sampleAppService)
{
_sampleAppService = sampleAppService;
}
[HttpGet]
public async Task<SampleDto> GetAsync()
{
return await _sampleAppService.GetAsync();
}
[HttpGet]
[Route("authorized")]
[Authorize]
public async Task<SampleDto> GetAuthorizedAsync()
{
return await _sampleAppService.GetAsync();
}
}
}

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

@ -13,6 +13,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="EasyAbp.Abp.SettingUi.Application.Contracts" Version="1.5.0" />
<PackageReference Include="Volo.Abp.ObjectExtending" Version="$(AbpPackageVersion)" /> <PackageReference Include="Volo.Abp.ObjectExtending" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="$(AbpPackageVersion)" /> <PackageReference Include="Volo.Abp.Account.Application.Contracts" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="$(AbpPackageVersion)" /> <PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="$(AbpPackageVersion)" />

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

@ -21,8 +21,6 @@ namespace CompanyName.ProjectName.Permissions
var capManagement = abpIdentityGroup.AddPermission(ProjectNamePermissions.SystemManagement.Cap, L("Permission:CapManagement")); var capManagement = abpIdentityGroup.AddPermission(ProjectNamePermissions.SystemManagement.Cap, L("Permission:CapManagement"));
#region IdentityServer #region IdentityServer
var identityServerManagementGroup = var identityServerManagementGroup =

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

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

14
aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/UpdateSettingInput.cs

@ -0,0 +1,14 @@
using System.Collections.Generic;
namespace CompanyName.ProjectName.Settings
{
public class UpdateSettingInput
{
public Dictionary<string, string> Values { get; set; }
public UpdateSettingInput()
{
Values = new Dictionary<string, string>();
}
}
}

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

@ -16,6 +16,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="EasyAbp.Abp.SettingUi.Application" Version="1.5.0" />
<PackageReference Include="Volo.Abp.Account.Application" Version="$(AbpPackageVersion)" /> <PackageReference Include="Volo.Abp.Account.Application" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Identity.Application" Version="$(AbpPackageVersion)" /> <PackageReference Include="Volo.Abp.Identity.Application" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="$(AbpPackageVersion)" /> <PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="$(AbpPackageVersion)" />

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

@ -1,6 +1,7 @@
using CompanyName.ProjectName.DataDictionaryManagement; using CompanyName.ProjectName.DataDictionaryManagement;
using CompanyName.ProjectName.NotificationManagement; using CompanyName.ProjectName.NotificationManagement;
using CompanyName.ProjectName.QueryManagement; using CompanyName.ProjectName.QueryManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account; using Volo.Abp.Account;
using Volo.Abp.AuditLogging; using Volo.Abp.AuditLogging;
using Volo.Abp.AutoMapper; using Volo.Abp.AutoMapper;
@ -26,7 +27,8 @@ namespace CompanyName.ProjectName
typeof(QueryManagementDomainModule), typeof(QueryManagementDomainModule),
typeof(DataDictionaryManagementApplicationModule), typeof(DataDictionaryManagementApplicationModule),
typeof(NotificationManagementApplicationModule), typeof(NotificationManagementApplicationModule),
typeof(QueryManagementApplicationModule) typeof(QueryManagementApplicationModule),
typeof(AbpSettingUiApplicationModule)
)] )]
public class ProjectNameApplicationModule : AbpModule public class ProjectNameApplicationModule : AbpModule
{ {

19
aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RoleAppService.cs

@ -126,7 +126,8 @@ namespace CompanyName.ProjectName.Roles
"AbpTenantManagement.Tenants.ManageFeatures", "AbpTenantManagement.Tenants.ManageFeatures",
"AbpTenantManagement.Tenants.ManageConnectionStrings", "AbpTenantManagement.Tenants.ManageConnectionStrings",
"SettingManagement", "SettingManagement",
"SettingManagement.Emailing" "SettingManagement.Emailing",
"SettingUi"
}; };
var permissions = new List<PermissionTreeDto>(); var permissions = new List<PermissionTreeDto>();
@ -187,6 +188,22 @@ namespace CompanyName.ProjectName.Roles
} }
result.Permissions = permissions; 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; return result;
} }
} }

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

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

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

@ -3,6 +3,7 @@
"texts": { "texts": {
"Menu:Home": "Home", "Menu:Home": "Home",
"Welcome": "Welcome", "Welcome": "Welcome",
"Test": "Test",
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.", "LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.",
"Permission:Query": "Query", "Permission:Query": "Query",
"Permission:Create": "Create", "Permission:Create": "Create",
@ -17,6 +18,7 @@
"Permission:IdentityServerManagement:Client": "Client", "Permission:IdentityServerManagement:Client": "Client",
"Permission:IdentityServerManagement:ApiResource": "ApiResource", "Permission:IdentityServerManagement:ApiResource": "ApiResource",
"Permission:IdentityServerManagement:ApiScope": "ApiScope", "Permission:IdentityServerManagement:ApiScope": "ApiScope",
"Permission:IdentityServerManagement:IdentityResources": "IdentityResources" "Permission:IdentityServerManagement:IdentityResources": "IdentityResources",
"Permission:SettingUi:ShowSettingPage": "SettingManagement"
} }
} }

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

@ -3,8 +3,8 @@
"texts": { "texts": {
"Menu:Home": "首页", "Menu:Home": "首页",
"Welcome": "欢迎", "Welcome": "欢迎",
"Test": "测试",
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.", "LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
"Permission:Query": "查询", "Permission:Query": "查询",
"Permission:Create": "创建", "Permission:Create": "创建",
"Permission:Update": "编辑", "Permission:Update": "编辑",
@ -18,6 +18,7 @@
"Permission:IdentityServerManagement:Client": "客户端", "Permission:IdentityServerManagement:Client": "客户端",
"Permission:IdentityServerManagement:ApiResource": "Api资源", "Permission:IdentityServerManagement:ApiResource": "Api资源",
"Permission:IdentityServerManagement:ApiScope": "ApiScope", "Permission:IdentityServerManagement:ApiScope": "ApiScope",
"Permission:IdentityServerManagement:IdentityResources": "Identity资源" "Permission:IdentityServerManagement:IdentityResources": "Identity资源",
"Permission:SettingUi:ShowSettingPage": "设置管理"
} }
} }

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

@ -1,4 +1,5 @@
using CompanyName.ProjectName.Localization; using CompanyName.ProjectName.Localization;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.AuditLogging; using Volo.Abp.AuditLogging;
using Volo.Abp.BackgroundJobs; using Volo.Abp.BackgroundJobs;
using Volo.Abp.FeatureManagement; using Volo.Abp.FeatureManagement;
@ -23,8 +24,9 @@ namespace CompanyName.ProjectName
typeof(AbpIdentityServerDomainSharedModule), typeof(AbpIdentityServerDomainSharedModule),
typeof(AbpPermissionManagementDomainSharedModule), typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpSettingManagementDomainSharedModule), typeof(AbpSettingManagementDomainSharedModule),
typeof(AbpTenantManagementDomainSharedModule) typeof(AbpTenantManagementDomainSharedModule),
)] typeof(AbpSettingUiDomainSharedModule)
)]
public class ProjectNameDomainSharedModule : AbpModule public class ProjectNameDomainSharedModule : AbpModule
{ {
public override void PreConfigureServices(ServiceConfigurationContext context) public override void PreConfigureServices(ServiceConfigurationContext context)
@ -56,4 +58,4 @@ namespace CompanyName.ProjectName
}); });
} }
} }
} }

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

@ -1,4 +1,6 @@
using Volo.Abp.Settings; using CompanyName.ProjectName.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Settings;
namespace CompanyName.ProjectName.Settings namespace CompanyName.ProjectName.Settings
{ {
@ -8,6 +10,29 @@ namespace CompanyName.ProjectName.Settings
{ {
//Define your own settings here. Example: //Define your own settings here. Example:
//context.Add(new SettingDefinition(ProjectNameSettings.MySetting1)); //context.Add(new SettingDefinition(ProjectNameSettings.MySetting1));
Test(context);
}
/// <summary>
/// 测试Setting
/// </summary>
/// <param name="context"></param>
public void Test(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));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<ProjectNameResource>(name);
} }
} }
} }

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

@ -2,9 +2,11 @@
{ {
public static class ProjectNameSettings public static class ProjectNameSettings
{ {
private const string Prefix = "ProjectName"; public const string Prefix = "setting_";
//Add your own setting names here. Example: //Add your own setting names here. Example:
//public const string MySetting1 = Prefix + ".MySetting1"; //public const string MySetting1 = Prefix + ".MySetting1";
public const string TestGroup = "Test";
} }
} }

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

@ -0,0 +1,35 @@
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;
namespace CompanyName.ProjectName.Controllers.Systems
{
[Route("Settings")]
public class SettingController : ProjectNameController
{
private readonly ISettingUiAppService _settingUiAppService;
public SettingController(ISettingUiAppService settingUiAppService)
{
_settingUiAppService = settingUiAppService;
}
[HttpPost("all")]
[SwaggerOperation(summary: "获取所有Setting", Tags = new[] {"Settings"})]
public async Task<List<SettingGroup>> GetAsync()
{
return await _settingUiAppService.GroupSettingDefinitions();
}
[HttpPost("update")]
[SwaggerOperation(summary: "更新Setting", Tags = new[] {"Settings"})]
public async Task UpdateAsync(UpdateSettingInput input)
{
await _settingUiAppService.SetSettingValues(input.Values);
}
}
}

1
aspnet-core/services/src/CompanyName.ProjectName.HttpApi/ProjectNameHttpApiModule.cs

@ -3,6 +3,7 @@ using Localization.Resources.AbpUi;
using CompanyName.ProjectName.Localization; using CompanyName.ProjectName.Localization;
using CompanyName.ProjectName.NotificationManagement; using CompanyName.ProjectName.NotificationManagement;
using CompanyName.ProjectName.QueryManagement; using CompanyName.ProjectName.QueryManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account; using Volo.Abp.Account;
using Volo.Abp.FeatureManagement; using Volo.Abp.FeatureManagement;
using Volo.Abp.Identity; using Volo.Abp.Identity;

1
vben271/src/locales/lang/en/routes/admin.ts

@ -51,4 +51,5 @@ export default {
logLevel: 'Level', logLevel: 'Level',
logContent: 'Content', logContent: 'Content',
settingManagement: 'SettingManagement',
}; };

1
vben271/src/locales/lang/zh-CN/routes/admin.ts

@ -51,4 +51,5 @@ export default {
logLevel: '级别', logLevel: '级别',
logContent: '内容', logContent: '内容',
detail: '详情', detail: '详情',
settingManagement: '设置管理',
}; };

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

@ -37,6 +37,16 @@ const admin: AppRouteModule = {
icon: 'ant-design:lock-outlined', icon: 'ant-design:lock-outlined',
}, },
}, },
{
path: 'settings',
name: 'Settings',
component: () => import('/@/views/admin/settings/Setting.vue'),
meta: {
title: t('routes.admin.settingManagement'),
policy: 'AbpIdentity.Roles',
icon: 'ant-design:unordered-list-outlined',
},
},
{ {
path: 'abpAuditLogs', path: 'abpAuditLogs',
name: 'AuditLogs', name: 'AuditLogs',

256
vben271/src/services/ServiceProxies.ts

@ -4659,7 +4659,7 @@ export class RolesServiceProxy extends ServiceProxyBase {
} }
} }
export class SampleServiceProxy extends ServiceProxyBase { export class SettingsServiceProxy extends ServiceProxyBase {
private instance: AxiosInstance; private instance: AxiosInstance;
private baseUrl: string; private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
@ -4671,14 +4671,15 @@ export class SampleServiceProxy extends ServiceProxyBase {
} }
/** /**
* 获取所有Setting
* @return Success * @return Success
*/ */
sample( cancelToken?: CancelToken | undefined): Promise<SampleDto> { all( cancelToken?: CancelToken | undefined): Promise<SettingGroup[]> {
let url_ = this.baseUrl + "/api/DataDictionaryManagement/sample"; let url_ = this.baseUrl + "/Settings/all";
url_ = url_.replace(/[?&]$/, ""); url_ = url_.replace(/[?&]$/, "");
let options_ = <AxiosRequestConfig>{ let options_ = <AxiosRequestConfig>{
method: "GET", method: "POST",
url: url_, url: url_,
headers: { headers: {
"Accept": "text/plain" "Accept": "text/plain"
@ -4695,11 +4696,11 @@ export class SampleServiceProxy extends ServiceProxyBase {
throw _error; throw _error;
} }
}).then((_response: AxiosResponse) => { }).then((_response: AxiosResponse) => {
return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processSample(_response)); return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAll(_response));
}); });
} }
protected processSample(response: AxiosResponse): Promise<SampleDto> { protected processAll(response: AxiosResponse): Promise<SettingGroup[]> {
const status = response.status; const status = response.status;
let _headers: any = {}; let _headers: any = {};
if (response.headers && typeof response.headers === "object") { if (response.headers && typeof response.headers === "object") {
@ -4713,7 +4714,14 @@ export class SampleServiceProxy extends ServiceProxyBase {
const _responseText = response.data; const _responseText = response.data;
let result200: any = null; let result200: any = null;
let resultData200 = _responseText; let resultData200 = _responseText;
result200 = SampleDto.fromJS(resultData200); if (Array.isArray(resultData200)) {
result200 = [] as any;
for (let item of resultData200)
result200!.push(SettingGroup.fromJS(item));
}
else {
result200 = <any>null;
}
return result200; return result200;
} else if (status === 403) { } else if (status === 403) {
const _responseText = response.data; const _responseText = response.data;
@ -4755,21 +4763,26 @@ export class SampleServiceProxy extends ServiceProxyBase {
const _responseText = response.data; const _responseText = response.data;
return throwException("An unexpected server error occurred.", status, _responseText, _headers); return throwException("An unexpected server error occurred.", status, _responseText, _headers);
} }
return Promise.resolve<SampleDto>(<any>null); return Promise.resolve<SettingGroup[]>(<any>null);
} }
/** /**
* 更新Setting
* @param body (optional)
* @return Success * @return Success
*/ */
authorized( cancelToken?: CancelToken | undefined): Promise<SampleDto> { update(body: UpdateSettingInput | undefined , cancelToken?: CancelToken | undefined): Promise<void> {
let url_ = this.baseUrl + "/api/DataDictionaryManagement/sample/authorized"; let url_ = this.baseUrl + "/Settings/update";
url_ = url_.replace(/[?&]$/, ""); url_ = url_.replace(/[?&]$/, "");
const content_ = JSON.stringify(body);
let options_ = <AxiosRequestConfig>{ let options_ = <AxiosRequestConfig>{
method: "GET", data: content_,
method: "POST",
url: url_, url: url_,
headers: { headers: {
"Accept": "text/plain" "Content-Type": "application/json",
}, },
cancelToken cancelToken
}; };
@ -4783,11 +4796,11 @@ export class SampleServiceProxy extends ServiceProxyBase {
throw _error; throw _error;
} }
}).then((_response: AxiosResponse) => { }).then((_response: AxiosResponse) => {
return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processAuthorized(_response)); return this.transformResult(url_, _response, (_response: AxiosResponse) => this.processUpdate(_response));
}); });
} }
protected processAuthorized(response: AxiosResponse): Promise<SampleDto> { protected processUpdate(response: AxiosResponse): Promise<void> {
const status = response.status; const status = response.status;
let _headers: any = {}; let _headers: any = {};
if (response.headers && typeof response.headers === "object") { if (response.headers && typeof response.headers === "object") {
@ -4799,10 +4812,7 @@ export class SampleServiceProxy extends ServiceProxyBase {
} }
if (status === 200) { if (status === 200) {
const _responseText = response.data; const _responseText = response.data;
let result200: any = null; return Promise.resolve<void>(<any>null);
let resultData200 = _responseText;
result200 = SampleDto.fromJS(resultData200);
return result200;
} else if (status === 403) { } else if (status === 403) {
const _responseText = response.data; const _responseText = response.data;
let result403: any = null; let result403: any = null;
@ -4843,7 +4853,7 @@ export class SampleServiceProxy extends ServiceProxyBase {
const _responseText = response.data; const _responseText = response.data;
return throwException("An unexpected server error occurred.", status, _responseText, _headers); return throwException("An unexpected server error occurred.", status, _responseText, _headers);
} }
return Promise.resolve<SampleDto>(<any>null); return Promise.resolve<void>(<any>null);
} }
} }
@ -12773,42 +12783,6 @@ export interface IReturnValueApiDescriptionModel {
typeSimple: string | undefined; typeSimple: string | undefined;
} }
export class SampleDto implements ISampleDto {
value!: number;
constructor(data?: ISampleDto) {
if (data) {
for (var property in data) {
if (data.hasOwnProperty(property))
(<any>this)[property] = (<any>data)[property];
}
}
}
init(_data?: any) {
if (_data) {
this.value = _data["value"];
}
}
static fromJS(data: any): SampleDto {
data = typeof data === 'object' ? data : {};
let result = new SampleDto();
result.init(data);
return result;
}
toJSON(data?: any) {
data = typeof data === 'object' ? data : {};
data["value"] = this.value;
return data;
}
}
export interface ISampleDto {
value: number;
}
export class SendPasswordResetCodeDto implements ISendPasswordResetCodeDto { export class SendPasswordResetCodeDto implements ISendPasswordResetCodeDto {
email!: string; email!: string;
appName!: string; appName!: string;
@ -12941,6 +12915,130 @@ export interface ISetReadInput {
receiveId: string; receiveId: string;
} }
export class SettingGroup implements ISettingGroup {
groupName!: string | undefined;
groupDisplayName!: string | undefined;
settingInfos!: SettingInfo[] | undefined;
permission!: string | undefined;
constructor(data?: ISettingGroup) {
if (data) {
for (var property in data) {
if (data.hasOwnProperty(property))
(<any>this)[property] = (<any>data)[property];
}
}
}
init(_data?: any) {
if (_data) {
this.groupName = _data["groupName"];
this.groupDisplayName = _data["groupDisplayName"];
if (Array.isArray(_data["settingInfos"])) {
this.settingInfos = [] as any;
for (let item of _data["settingInfos"])
this.settingInfos!.push(SettingInfo.fromJS(item));
}
this.permission = _data["permission"];
}
}
static fromJS(data: any): SettingGroup {
data = typeof data === 'object' ? data : {};
let result = new SettingGroup();
result.init(data);
return result;
}
toJSON(data?: any) {
data = typeof data === 'object' ? data : {};
data["groupName"] = this.groupName;
data["groupDisplayName"] = this.groupDisplayName;
if (Array.isArray(this.settingInfos)) {
data["settingInfos"] = [];
for (let item of this.settingInfos)
data["settingInfos"].push(item.toJSON());
}
data["permission"] = this.permission;
return data;
}
}
export interface ISettingGroup {
groupName: string | undefined;
groupDisplayName: string | undefined;
settingInfos: SettingInfo[] | undefined;
permission: string | undefined;
}
export class SettingInfo implements ISettingInfo {
name!: string | undefined;
displayName!: string | undefined;
description!: string | undefined;
value!: string | undefined;
properties!: { [key: string]: any; } | undefined;
permission!: string | undefined;
constructor(data?: ISettingInfo) {
if (data) {
for (var property in data) {
if (data.hasOwnProperty(property))
(<any>this)[property] = (<any>data)[property];
}
}
}
init(_data?: any) {
if (_data) {
this.name = _data["name"];
this.displayName = _data["displayName"];
this.description = _data["description"];
this.value = _data["value"];
if (_data["properties"]) {
this.properties = {} as any;
for (let key in _data["properties"]) {
if (_data["properties"].hasOwnProperty(key))
(<any>this.properties)![key] = _data["properties"][key];
}
}
this.permission = _data["permission"];
}
}
static fromJS(data: any): SettingInfo {
data = typeof data === 'object' ? data : {};
let result = new SettingInfo();
result.init(data);
return result;
}
toJSON(data?: any) {
data = typeof data === 'object' ? data : {};
data["name"] = this.name;
data["displayName"] = this.displayName;
data["description"] = this.description;
data["value"] = this.value;
if (this.properties) {
data["properties"] = {};
for (let key in this.properties) {
if (this.properties.hasOwnProperty(key))
(<any>data["properties"])[key] = this.properties[key];
}
}
data["permission"] = this.permission;
return data;
}
}
export interface ISettingInfo {
name: string | undefined;
displayName: string | undefined;
description: string | undefined;
value: string | undefined;
properties: { [key: string]: any; } | undefined;
permission: string | undefined;
}
export class StringStringFromSelector implements IStringStringFromSelector { export class StringStringFromSelector implements IStringStringFromSelector {
readonly value!: string | undefined; readonly value!: string | undefined;
readonly label!: string | undefined; readonly label!: string | undefined;
@ -14189,6 +14287,54 @@ export interface IUpdateScopeInput {
scopes: string[] | undefined; scopes: string[] | undefined;
} }
export class UpdateSettingInput implements IUpdateSettingInput {
values!: { [key: string]: string; } | undefined;
constructor(data?: IUpdateSettingInput) {
if (data) {
for (var property in data) {
if (data.hasOwnProperty(property))
(<any>this)[property] = (<any>data)[property];
}
}
}
init(_data?: any) {
if (_data) {
if (_data["values"]) {
this.values = {} as any;
for (let key in _data["values"]) {
if (_data["values"].hasOwnProperty(key))
(<any>this.values)![key] = _data["values"][key];
}
}
}
}
static fromJS(data: any): UpdateSettingInput {
data = typeof data === 'object' ? data : {};
let result = new UpdateSettingInput();
result.init(data);
return result;
}
toJSON(data?: any) {
data = typeof data === 'object' ? data : {};
if (this.values) {
data["values"] = {};
for (let key in this.values) {
if (this.values.hasOwnProperty(key))
(<any>data["values"])[key] = this.values[key];
}
}
return data;
}
}
export interface IUpdateSettingInput {
values: { [key: string]: string; } | undefined;
}
export class UpdateUserInput implements IUpdateUserInput { export class UpdateUserInput implements IUpdateUserInput {
userId!: string; userId!: string;
userInfo!: IdentityUserUpdateDto; userInfo!: IdentityUserUpdateDto;

2
vben271/src/settings/projectSetting.ts

@ -27,7 +27,7 @@ const setting: ProjectConfig = {
permissionMode: PermissionModeEnum.ROUTE_MAPPING, permissionMode: PermissionModeEnum.ROUTE_MAPPING,
// Permission-related cache is stored in sessionStorage or localStorage // Permission-related cache is stored in sessionStorage or localStorage
permissionCacheType: CacheTypeEnum.LOCAL, permissionCacheType: CacheTypeEnum.SESSION,
// Session timeout processing // Session timeout processing
sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP, sessionTimeoutProcessing: SessionTimeoutProcessingEnum.ROUTE_JUMP,

2
vben271/src/views/admin/elasticSearch/ElasticSearch.ts

@ -23,7 +23,7 @@ export const searchFormSchema: FormSchema[] = [
component: 'RangePicker', component: 'RangePicker',
label: '创建时间:', label: '创建时间:',
labelWidth: 80, labelWidth: 80,
colProps: { span: 4 }, colProps: { span: 6 },
defaultValue: [moment().subtract(0, 'days'), moment().add(1, 'days')], defaultValue: [moment().subtract(0, 'days'), moment().add(1, 'days')],
}, },
]; ];

16
vben271/src/views/admin/settings/Setting.ts

@ -0,0 +1,16 @@
import { SettingsServiceProxy } from '/@/services/ServiceProxies';
/**
* 获取所有settings
* @returns
*/
export async function getAllSettingsAsync() {
const _settingsServiceProxy = new SettingsServiceProxy();
return _settingsServiceProxy.all();
}
export async function updateSettingsAsync({ request }) {
const _settingsServiceProxy = new SettingsServiceProxy();
return _settingsServiceProxy.update(request);
}

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

@ -0,0 +1,132 @@
<template>
<PageWrapper v-loading="loading">
<div ref="wrapperRef" :class="prefixCls">
<Tabs tab-position="left" :tabBarStyle="tabBarStyle">
<template v-for="item in settingList" :key="item.groupName">
<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-input v-model:value="setting.value" style="width: 80%" />
</div>
<div v-if="setting.properties.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)"
>{{ t('common.saveText') }}</a-button
>
</a-form>
</CollapseContainer>
</TabPane>
</template>
</Tabs>
</div>
</PageWrapper>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs, onMounted } from 'vue';
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 { getAllSettingsAsync, updateSettingsAsync } from './Setting';
import { useI18n } from '/@/hooks/web/useI18n';
import { PageWrapper } from '/@/components/Page';
import { message } from 'ant-design-vue';
export default defineComponent({
components: {
ScrollContainer,
CollapseContainer,
Tabs,
TabPane: Tabs.TabPane,
PageWrapper,
},
setup() {
let settingList: SettingGroup[] = [];
const { t } = useI18n();
const state = reactive({
settingList,
loading: true,
});
onMounted(async () => {
state.loading = true;
const result = await getAllSettingsAsync();
state.settingList = result;
state.loading = false;
});
const updateSettingValues = async (item: any) => {
try {
const prefix = 'setting_';
var request = new UpdateSettingInput();
request.values as {};
let items: { [key: string]: string } = {};
item.forEach((e) => {
items[prefix + e.name] = String(e.value);
});
request.values = items;
await updateSettingsAsync({ request });
message.success(t('common.operationSuccess'));
} catch (error) {
message.success(t('common.operationFail'));
}
};
return {
prefixCls: 'account-setting',
tabBarStyle: {
width: '220px',
},
labelCol: { span: 4 },
wrapperCol: { span: 14 },
...toRefs(state),
t,
updateSettingValues,
};
},
});
</script>
<style lang="less">
.account-setting {
margin: 12px;
background-color: @component-background;
.base-title {
padding-left: 0;
}
.ant-tabs-tab-active {
background-color: @item-active-bg;
}
}
</style>
Loading…
Cancel
Save