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>
<PackageReference Include="EasyAbp.Abp.SettingUi.Application.Contracts" Version="1.5.0" />
<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)" />

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"));
#region IdentityServer
var identityServerManagementGroup =

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

@ -1,4 +1,5 @@
using CompanyName.ProjectName.DataDictionaryManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account;
using Volo.Abp.FeatureManagement;
using Volo.Abp.Identity;
@ -19,7 +20,8 @@ namespace CompanyName.ProjectName
typeof(AbpSettingManagementApplicationContractsModule),
typeof(AbpTenantManagementApplicationContractsModule),
typeof(AbpObjectExtendingModule),
typeof(DataDictionaryManagementApplicationContractsModule)
typeof(DataDictionaryManagementApplicationContractsModule),
typeof(AbpSettingUiApplicationContractsModule)
)]
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>
<PackageReference Include="EasyAbp.Abp.SettingUi.Application" Version="1.5.0" />
<PackageReference Include="Volo.Abp.Account.Application" Version="$(AbpPackageVersion)" />
<PackageReference Include="Volo.Abp.Identity.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.NotificationManagement;
using CompanyName.ProjectName.QueryManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account;
using Volo.Abp.AuditLogging;
using Volo.Abp.AutoMapper;
@ -26,7 +27,8 @@ namespace CompanyName.ProjectName
typeof(QueryManagementDomainModule),
typeof(DataDictionaryManagementApplicationModule),
typeof(NotificationManagementApplicationModule),
typeof(QueryManagementApplicationModule)
typeof(QueryManagementApplicationModule),
typeof(AbpSettingUiApplicationModule)
)]
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.ManageConnectionStrings",
"SettingManagement",
"SettingManagement.Emailing"
"SettingManagement.Emailing",
"SettingUi"
};
var permissions = new List<PermissionTreeDto>();
@ -187,6 +188,22 @@ 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;
}
}

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

@ -9,6 +9,7 @@
</PropertyGroup>
<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.IdentityServer.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": {
"Menu:Home": "Home",
"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.",
"Permission:Query": "Query",
"Permission:Create": "Create",
@ -17,6 +18,7 @@
"Permission:IdentityServerManagement:Client": "Client",
"Permission:IdentityServerManagement:ApiResource": "ApiResource",
"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": {
"Menu:Home": "首页",
"Welcome": "欢迎",
"Test": "测试",
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.",
"Permission:Query": "查询",
"Permission:Create": "创建",
"Permission:Update": "编辑",
@ -18,6 +18,7 @@
"Permission:IdentityServerManagement:Client": "客户端",
"Permission:IdentityServerManagement:ApiResource": "Api资源",
"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 EasyAbp.Abp.SettingUi;
using Volo.Abp.AuditLogging;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.FeatureManagement;
@ -23,8 +24,9 @@ namespace CompanyName.ProjectName
typeof(AbpIdentityServerDomainSharedModule),
typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpSettingManagementDomainSharedModule),
typeof(AbpTenantManagementDomainSharedModule)
)]
typeof(AbpTenantManagementDomainSharedModule),
typeof(AbpSettingUiDomainSharedModule)
)]
public class ProjectNameDomainSharedModule : AbpModule
{
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
{
@ -8,6 +10,29 @@ namespace CompanyName.ProjectName.Settings
{
//Define your own settings here. Example:
//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
{
private const string Prefix = "ProjectName";
public const string Prefix = "setting_";
//Add your own setting names here. Example:
//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.NotificationManagement;
using CompanyName.ProjectName.QueryManagement;
using EasyAbp.Abp.SettingUi;
using Volo.Abp.Account;
using Volo.Abp.FeatureManagement;
using Volo.Abp.Identity;

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

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

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

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

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

@ -37,6 +37,16 @@ const admin: AppRouteModule = {
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',
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 baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
@ -4671,14 +4671,15 @@ export class SampleServiceProxy extends ServiceProxyBase {
}
/**
* Setting
* @return Success
*/
sample( cancelToken?: CancelToken | undefined): Promise<SampleDto> {
let url_ = this.baseUrl + "/api/DataDictionaryManagement/sample";
all( cancelToken?: CancelToken | undefined): Promise<SettingGroup[]> {
let url_ = this.baseUrl + "/Settings/all";
url_ = url_.replace(/[?&]$/, "");
let options_ = <AxiosRequestConfig>{
method: "GET",
method: "POST",
url: url_,
headers: {
"Accept": "text/plain"
@ -4695,11 +4696,11 @@ export class SampleServiceProxy extends ServiceProxyBase {
throw _error;
}
}).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;
let _headers: any = {};
if (response.headers && typeof response.headers === "object") {
@ -4713,7 +4714,14 @@ export class SampleServiceProxy extends ServiceProxyBase {
const _responseText = response.data;
let result200: any = null;
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;
} else if (status === 403) {
const _responseText = response.data;
@ -4755,21 +4763,26 @@ export class SampleServiceProxy extends ServiceProxyBase {
const _responseText = response.data;
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
*/
authorized( cancelToken?: CancelToken | undefined): Promise<SampleDto> {
let url_ = this.baseUrl + "/api/DataDictionaryManagement/sample/authorized";
update(body: UpdateSettingInput | undefined , cancelToken?: CancelToken | undefined): Promise<void> {
let url_ = this.baseUrl + "/Settings/update";
url_ = url_.replace(/[?&]$/, "");
const content_ = JSON.stringify(body);
let options_ = <AxiosRequestConfig>{
method: "GET",
data: content_,
method: "POST",
url: url_,
headers: {
"Accept": "text/plain"
"Content-Type": "application/json",
},
cancelToken
};
@ -4783,11 +4796,11 @@ export class SampleServiceProxy extends ServiceProxyBase {
throw _error;
}
}).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;
let _headers: any = {};
if (response.headers && typeof response.headers === "object") {
@ -4799,10 +4812,7 @@ export class SampleServiceProxy extends ServiceProxyBase {
}
if (status === 200) {
const _responseText = response.data;
let result200: any = null;
let resultData200 = _responseText;
result200 = SampleDto.fromJS(resultData200);
return result200;
return Promise.resolve<void>(<any>null);
} else if (status === 403) {
const _responseText = response.data;
let result403: any = null;
@ -4843,7 +4853,7 @@ export class SampleServiceProxy extends ServiceProxyBase {
const _responseText = response.data;
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;
}
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 {
email!: string;
appName!: string;
@ -12941,6 +12915,130 @@ export interface ISetReadInput {
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 {
readonly value!: string | undefined;
readonly label!: string | undefined;
@ -14189,6 +14287,54 @@ export interface IUpdateScopeInput {
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 {
userId!: string;
userInfo!: IdentityUserUpdateDto;

2
vben271/src/settings/projectSetting.ts

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

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

@ -23,7 +23,7 @@ export const searchFormSchema: FormSchema[] = [
component: 'RangePicker',
label: '创建时间:',
labelWidth: 80,
colProps: { span: 4 },
colProps: { span: 6 },
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