diff --git a/aspnet-core/modules/DataDictionaryManagement/src/CompanyName.ProjectName.DataDictionaryManagement.HttpApi/Samples/SampleController.cs b/aspnet-core/modules/DataDictionaryManagement/src/CompanyName.ProjectName.DataDictionaryManagement.HttpApi/Samples/SampleController.cs deleted file mode 100644 index 798ed6ec..00000000 --- a/aspnet-core/modules/DataDictionaryManagement/src/CompanyName.ProjectName.DataDictionaryManagement.HttpApi/Samples/SampleController.cs +++ /dev/null @@ -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 GetAsync() - { - return await _sampleAppService.GetAsync(); - } - - [HttpGet] - [Route("authorized")] - [Authorize] - public async Task GetAuthorizedAsync() - { - return await _sampleAppService.GetAsync(); - } - } -} diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj b/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj index 5c57adc5..c1a365b2 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj +++ b/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/CompanyName.ProjectName.Application.Contracts.csproj @@ -13,6 +13,7 @@ + diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissionDefinitionProvider.cs b/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissionDefinitionProvider.cs index 435c2233..eb91a766 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Permissions/ProjectNamePermissionDefinitionProvider.cs +++ b/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 = diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/ProjectNameApplicationContractsModule.cs b/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/ProjectNameApplicationContractsModule.cs index dadbbc9b..8015c6ab 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/ProjectNameApplicationContractsModule.cs +++ b/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 { diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/UpdateSettingInput.cs b/aspnet-core/services/src/CompanyName.ProjectName.Application.Contracts/Settings/UpdateSettingInput.cs new file mode 100644 index 00000000..9589c9a5 --- /dev/null +++ b/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 Values { get; set; } + + public UpdateSettingInput() + { + Values = new Dictionary(); + } + } +} \ No newline at end of file diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj b/aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj index fd211ba6..c8cfc40a 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj +++ b/aspnet-core/services/src/CompanyName.ProjectName.Application/CompanyName.ProjectName.Application.csproj @@ -16,6 +16,7 @@ + diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameApplicationModule.cs b/aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameApplicationModule.cs index 4ca4ae5e..94febc7a 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Application/ProjectNameApplicationModule.cs +++ b/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 { diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RoleAppService.cs b/aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RoleAppService.cs index bc541123..203833d0 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Application/Roles/RoleAppService.cs +++ b/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(); @@ -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; } } diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj b/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj index b5ddbf44..fe12cca8 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj +++ b/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/CompanyName.ProjectName.Domain.Shared.csproj @@ -9,6 +9,7 @@ + diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/en.json b/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/en.json index 1369cd1a..94ca13bd 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/en.json +++ b/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" } } diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/zh-Hans.json b/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/zh-Hans.json index f686d0dd..2e4d975d 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/Localization/ProjectName/zh-Hans.json +++ b/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": "设置管理" } } \ No newline at end of file diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/ProjectNameDomainSharedModule.cs b/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/ProjectNameDomainSharedModule.cs index 688485f2..283f66cd 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Domain.Shared/ProjectNameDomainSharedModule.cs +++ b/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 }); } } -} +} \ No newline at end of file diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettingDefinitionProvider.cs b/aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettingDefinitionProvider.cs index 4f447592..ae274970 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettingDefinitionProvider.cs +++ b/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); + } + + /// + /// 测试Setting + /// + /// + 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(name); } } -} +} \ No newline at end of file diff --git a/aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettings.cs b/aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettings.cs index 686cd2dc..1e08bc8f 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.Domain/Settings/ProjectNameSettings.cs +++ b/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"; } } \ No newline at end of file diff --git a/aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Systems/SettingController.cs b/aspnet-core/services/src/CompanyName.ProjectName.HttpApi/Controllers/Systems/SettingController.cs new file mode 100644 index 00000000..10932d0b --- /dev/null +++ b/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> GetAsync() + { + return await _settingUiAppService.GroupSettingDefinitions(); + } + + [HttpPost("update")] + [SwaggerOperation(summary: "更新Setting", Tags = new[] {"Settings"})] + public async Task UpdateAsync(UpdateSettingInput input) + { + await _settingUiAppService.SetSettingValues(input.Values); + } + } +} \ No newline at end of file diff --git a/aspnet-core/services/src/CompanyName.ProjectName.HttpApi/ProjectNameHttpApiModule.cs b/aspnet-core/services/src/CompanyName.ProjectName.HttpApi/ProjectNameHttpApiModule.cs index 9ecdf35c..e1742ec1 100644 --- a/aspnet-core/services/src/CompanyName.ProjectName.HttpApi/ProjectNameHttpApiModule.cs +++ b/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; diff --git a/vben271/src/locales/lang/en/routes/admin.ts b/vben271/src/locales/lang/en/routes/admin.ts index 8075592f..11191571 100644 --- a/vben271/src/locales/lang/en/routes/admin.ts +++ b/vben271/src/locales/lang/en/routes/admin.ts @@ -51,4 +51,5 @@ export default { logLevel: 'Level', logContent: 'Content', + settingManagement: 'SettingManagement', }; diff --git a/vben271/src/locales/lang/zh-CN/routes/admin.ts b/vben271/src/locales/lang/zh-CN/routes/admin.ts index 438858d7..b11bfcaf 100644 --- a/vben271/src/locales/lang/zh-CN/routes/admin.ts +++ b/vben271/src/locales/lang/zh-CN/routes/admin.ts @@ -51,4 +51,5 @@ export default { logLevel: '级别', logContent: '内容', detail: '详情', + settingManagement: '设置管理', }; diff --git a/vben271/src/router/routes/modules/admin.ts b/vben271/src/router/routes/modules/admin.ts index 79a79c5d..08531726 100644 --- a/vben271/src/router/routes/modules/admin.ts +++ b/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', diff --git a/vben271/src/services/ServiceProxies.ts b/vben271/src/services/ServiceProxies.ts index 190f51e6..92e1c1d0 100644 --- a/vben271/src/services/ServiceProxies.ts +++ b/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 { - let url_ = this.baseUrl + "/api/DataDictionaryManagement/sample"; + all( cancelToken?: CancelToken | undefined): Promise { + let url_ = this.baseUrl + "/Settings/all"; url_ = url_.replace(/[?&]$/, ""); let options_ = { - 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 { + protected processAll(response: AxiosResponse): Promise { 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 = 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(null); + return Promise.resolve(null); } /** + * 更新Setting + * @param body (optional) * @return Success */ - authorized( cancelToken?: CancelToken | undefined): Promise { - let url_ = this.baseUrl + "/api/DataDictionaryManagement/sample/authorized"; + update(body: UpdateSettingInput | undefined , cancelToken?: CancelToken | undefined): Promise { + let url_ = this.baseUrl + "/Settings/update"; url_ = url_.replace(/[?&]$/, ""); + const content_ = JSON.stringify(body); + let options_ = { - 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 { + protected processUpdate(response: AxiosResponse): Promise { 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(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(null); + return Promise.resolve(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)) - (this)[property] = (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)) + (this)[property] = (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)) + (this)[property] = (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)) + (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)) + (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)) + (this)[property] = (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)) + (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)) + (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; diff --git a/vben271/src/settings/projectSetting.ts b/vben271/src/settings/projectSetting.ts index 0d4415b8..493a5732 100644 --- a/vben271/src/settings/projectSetting.ts +++ b/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, diff --git a/vben271/src/views/admin/elasticSearch/ElasticSearch.ts b/vben271/src/views/admin/elasticSearch/ElasticSearch.ts index a99405b0..e57cea50 100644 --- a/vben271/src/views/admin/elasticSearch/ElasticSearch.ts +++ b/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')], }, ]; diff --git a/vben271/src/views/admin/settings/Setting.ts b/vben271/src/views/admin/settings/Setting.ts new file mode 100644 index 00000000..46fe2c1e --- /dev/null +++ b/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); +} diff --git a/vben271/src/views/admin/settings/Setting.vue b/vben271/src/views/admin/settings/Setting.vue new file mode 100644 index 00000000..0d2c730e --- /dev/null +++ b/vben271/src/views/admin/settings/Setting.vue @@ -0,0 +1,132 @@ + + + +