From b38984568b3b8624a76f18eac24e0c5f4997bf4b Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 27 Jun 2022 16:10:39 +0800 Subject: [PATCH 1/6] Introduce `SettingPageContributorManager`. --- .../SettingManagementMainMenuContributor.cs | 21 +---- .../ISettingPageContributor.cs | 2 - .../Pages/SettingManagement/Index.cshtml.cs | 17 ++-- .../SettingPageContributorBase.cs | 54 ++++++++++++ .../SettingPageContributorManager.cs | 88 +++++++++++++++++++ .../Settings/EmailingPageContributor.cs | 52 ++--------- 6 files changed, 158 insertions(+), 76 deletions(-) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs index 97eb89b6c6..a5775a8a42 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; using System.Linq; using System.Threading.Tasks; using Volo.Abp.Features; @@ -25,10 +24,8 @@ public class SettingManagementMainMenuContributor : IMenuContributor return; } - var settingManagementPageOptions = context.ServiceProvider.GetRequiredService>().Value; - var settingPageCreationContext = new SettingPageCreationContext(context.ServiceProvider); - if (!settingManagementPageOptions.Contributors.Any() || - !(await CheckAnyOfPagePermissionsGranted(settingManagementPageOptions, settingPageCreationContext))) + var settingPageContributorManager = context.ServiceProvider.GetRequiredService(); + if (!(await settingPageContributorManager.GetAvailableContributors()).Any()) { return; } @@ -46,18 +43,4 @@ public class SettingManagementMainMenuContributor : IMenuContributor ).RequireFeatures(SettingManagementFeatures.Enable) ); } - - protected virtual async Task CheckAnyOfPagePermissionsGranted( - SettingManagementPageOptions settingManagementPageOptions, - SettingPageCreationContext settingPageCreationContext) - { - foreach (var contributor in settingManagementPageOptions.Contributors) - { - if (await contributor.CheckPermissionsAsync(settingPageCreationContext)) - { - return true; - } - } - return false; - } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs index 4128e9cd05..16bb6962d9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs @@ -5,6 +5,4 @@ namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement; public interface ISettingPageContributor { Task ConfigureAsync(SettingPageCreationContext context); - - Task CheckPermissionsAsync(SettingPageCreationContext context); } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs index bf0b3e0d6b..0dcb3fb388 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs @@ -1,5 +1,4 @@ using System.Threading.Tasks; -using Microsoft.Extensions.Options; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; @@ -13,25 +12,19 @@ public class IndexModel : AbpPageModel { public SettingPageCreationContext SettingPageCreationContext { get; private set; } + protected SettingPageContributorManager SettingPageContributorManager { get; } + protected ILocalEventBus LocalEventBus { get; } - protected SettingManagementPageOptions Options { get; } - public IndexModel( - IOptions options, - ILocalEventBus localEventBus) + public IndexModel(ILocalEventBus localEventBus, SettingPageContributorManager settingPageContributorManager) { LocalEventBus = localEventBus; - Options = options.Value; + SettingPageContributorManager = settingPageContributorManager; } public virtual async Task OnGetAsync() { - SettingPageCreationContext = new SettingPageCreationContext(ServiceProvider); - - foreach (var contributor in Options.Contributors) - { - await contributor.ConfigureAsync(SettingPageCreationContext); - } + SettingPageCreationContext = await SettingPageContributorManager.ConfigureAsync(); return Page(); } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs new file mode 100644 index 0000000000..7e9d1f7954 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs @@ -0,0 +1,54 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement; + +public abstract class SettingPageContributorBase : ISettingPageContributor +{ + private readonly HashSet _requiredPermissions; + private readonly HashSet _requiredFeatures; + private readonly HashSet _requiredTenantSideFeatures; + + protected SettingPageContributorBase() + { + _requiredPermissions = new HashSet(); + _requiredFeatures = new HashSet(); + _requiredTenantSideFeatures = new HashSet(); + } + + protected virtual SettingPageContributorBase RequiredPermissions(params string[] permissions) + { + Check.NotNullOrEmpty(permissions, nameof(permissions)); + _requiredPermissions.AddIfNotContains(permissions); + return this; + } + + public virtual IReadOnlySet GetRequiredPermissions() + { + return _requiredPermissions; + } + + protected virtual SettingPageContributorBase RequiredFeatures(params string[] features) + { + Check.NotNullOrEmpty(features, nameof(features)); + _requiredFeatures.AddIfNotContains(features); + return this; + } + + protected virtual SettingPageContributorBase RequiredTenantSideFeatures(params string[] features) + { + Check.NotNullOrEmpty(features, nameof(features)); + _requiredTenantSideFeatures.AddIfNotContains(features); + return this; + } + + public virtual IReadOnlySet GetRequiredFeatures(MultiTenancySides? multiTenancySides = null) + { + return multiTenancySides == null || multiTenancySides != MultiTenancySides.Tenant + ? _requiredFeatures + : _requiredTenantSideFeatures; + } + + public abstract Task ConfigureAsync(SettingPageCreationContext context); +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs new file mode 100644 index 0000000000..6bd70f2eae --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Features; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement; + +public class SettingPageContributorManager : IScopedDependency +{ + protected IServiceProvider ServiceProvider { get; } + + protected ConcurrentDictionary> CachedAvailableContributors { get; set; } + + public SettingPageContributorManager(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + CachedAvailableContributors = new ConcurrentDictionary>(); + } + + public virtual async Task> GetAvailableContributors() + { + return CachedAvailableContributors.GetOrAdd(nameof(SettingPageContributorManager), await GetAvailableContributorsInternalAsync()); + } + + public virtual async Task ConfigureAsync() + { + var contributors = CachedAvailableContributors.GetOrAdd(nameof(SettingPageContributorManager), await GetAvailableContributorsInternalAsync()); + var context = new SettingPageCreationContext(ServiceProvider); + foreach (var contributor in contributors) + { + await contributor.ConfigureAsync(context); + } + return context; + } + + protected virtual async Task> GetAvailableContributorsInternalAsync() + { + var contributors = ServiceProvider.GetRequiredService>().Value.Contributors; + var contributorBases = contributors.Where(x => x is SettingPageContributorBase).Cast().ToList(); + + var permissions = new HashSet(); + permissions.AddIfNotContains(contributorBases.SelectMany(x => x.GetRequiredPermissions())); + + var featureChecker = ServiceProvider.GetRequiredService(); + var permissionChecker = ServiceProvider.GetRequiredService(); + var grantResult = await permissionChecker.IsGrantedAsync(permissions.ToArray()); + + var availableContributors = new List(); + foreach (var contributor in contributorBases) + { + var available = true; + + var requiredFeatures = contributor.GetRequiredFeatures(); + if (requiredFeatures.Any() && !await featureChecker.IsEnabledAsync(true, requiredFeatures.ToArray())) + { + available = false; + } + + if (available) + { + var requiredTenantSideFeatures = contributor.GetRequiredFeatures(MultiTenancySides.Tenant); + if (requiredTenantSideFeatures.Any() && !await featureChecker.IsEnabledAsync(true, requiredTenantSideFeatures.ToArray())) + { + available = false; + } + } + + if (available) + { + available = contributor.GetRequiredPermissions().All(x => grantResult.Result.ContainsKey(x) && grantResult.Result[x] == PermissionGrantResult.Granted); + } + + if (available) + { + availableContributors.Add(contributor); + } + } + + return availableContributors; + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs index 35e6714b9f..773088d140 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Settings/EmailingPageContributor.cs @@ -1,24 +1,22 @@ using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Localization; -using Volo.Abp.Features; -using Volo.Abp.MultiTenancy; using Volo.Abp.SettingManagement.Localization; using Volo.Abp.SettingManagement.Web.Pages.SettingManagement; using Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup; namespace Volo.Abp.SettingManagement.Web.Settings; -public class EmailingPageContributor : ISettingPageContributor +public class EmailingPageContributor : SettingPageContributorBase { - public async Task ConfigureAsync(SettingPageCreationContext context) + public EmailingPageContributor() + { + RequiredFeatures(SettingManagementFeatures.Enable); + RequiredTenantSideFeatures(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); + RequiredPermissions(SettingManagementPermissions.Emailing); + } + public override Task ConfigureAsync(SettingPageCreationContext context) { - if (!await CheckPermissionsInternalAsync(context)) - { - return; - } - var l = context.ServiceProvider.GetRequiredService>(); context.Groups.Add( new SettingPageGroup( @@ -27,38 +25,6 @@ public class EmailingPageContributor : ISettingPageContributor typeof(EmailSettingGroupViewComponent) ) ); - } - - public async Task CheckPermissionsAsync(SettingPageCreationContext context) - { - return await CheckPermissionsInternalAsync(context); - } - - private async Task CheckPermissionsInternalAsync(SettingPageCreationContext context) - { - if (!await CheckFeatureAsync(context)) - { - return false; - } - - var authorizationService = context.ServiceProvider.GetRequiredService(); - - return await authorizationService.IsGrantedAsync(SettingManagementPermissions.Emailing); - } - - private async Task CheckFeatureAsync(SettingPageCreationContext context) - { - var featureCheck = context.ServiceProvider.GetRequiredService(); - if (!await featureCheck.IsEnabledAsync(SettingManagementFeatures.Enable)) - { - return false; - } - - if (context.ServiceProvider.GetRequiredService().IsAvailable) - { - return await featureCheck.IsEnabledAsync(SettingManagementFeatures.AllowTenantsToChangeEmailSettings); - } - - return true; + return Task.CompletedTask; } } From dcb35f2d6296a3403fad50fde2f6d1c76b695116 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 27 Jun 2022 16:47:42 +0800 Subject: [PATCH 2/6] Make `CheckPermissionsAsync` obsolete. --- .../SettingManagement/ISettingPageContributor.cs | 6 +++++- .../SettingManagement/SettingPageContributorBase.cs | 5 +++++ .../SettingPageContributorManager.cs | 11 +++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs index 16bb6962d9..7bf0653380 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/ISettingPageContributor.cs @@ -1,8 +1,12 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement; public interface ISettingPageContributor { Task ConfigureAsync(SettingPageCreationContext context); + + [Obsolete("Use SettingPageContributorBase as base class and call `RequiredPermissions` or `RequiredFeatures` for better performance.")] + Task CheckPermissionsAsync(SettingPageCreationContext context); } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs index 7e9d1f7954..b79c452df9 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorBase.cs @@ -51,4 +51,9 @@ public abstract class SettingPageContributorBase : ISettingPageContributor } public abstract Task ConfigureAsync(SettingPageCreationContext context); + + public virtual Task CheckPermissionsAsync(SettingPageCreationContext context) + { + return Task.FromResult(true); + } } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs index 6bd70f2eae..e1f597b85a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/SettingPageContributorManager.cs @@ -83,6 +83,17 @@ public class SettingPageContributorManager : IScopedDependency } } + var context = new SettingPageCreationContext(ServiceProvider); + foreach (var contributor in contributors.Where(x => x is not SettingPageContributorBase)) + { +#pragma warning disable CS0618 + if (await contributor.CheckPermissionsAsync(context)) +#pragma warning restore CS0618 + { + availableContributors.Add(contributor); + } + } + return availableContributors; } } From 94b624c881b8fa7cb6bd82237e749c442e35d8f5 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 28 Jun 2022 12:47:32 +0800 Subject: [PATCH 3/6] Lazy loading settings page. --- .../Components/EmailSettingGroup/Default.js | 60 ++++++++++--------- .../Pages/SettingManagement/Index.cshtml | 28 +++++---- .../Pages/SettingManagement/Index.cshtml.cs | 14 +++++ .../Pages/SettingManagement/Index.js | 18 ++++++ 4 files changed, 79 insertions(+), 41 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js index ae8e694de3..aeced4f4dc 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js @@ -8,44 +8,46 @@ var l = abp.localization.getResource('AbpSettingManagement'); - $("#EmailSettingsForm").on('submit', function (event) { - event.preventDefault(); + abp.event.on('Abp.SettingManagement.View.Render.Volo.Abp.EmailSetting', function (eventData) { + $("#EmailSettingsForm").on('submit', function (event) { + event.preventDefault(); - if (!$(this).valid()) { - return; - } + if (!$(this).valid()) { + return; + } + + var form = $(this).serializeFormToObject(); + volo.abp.settingManagement.emailSettings.update(form).then(function (result) { + $(document).trigger("AbpSettingSaved"); + }); - var form = $(this).serializeFormToObject(); - volo.abp.settingManagement.emailSettings.update(form).then(function (result) { - $(document).trigger("AbpSettingSaved"); }); - }); + $('#SmtpUseDefaultCredentials').change(function () { + if (this.checked) { + $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideUp(); + } else { + $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideDown(); + } + }); - $('#SmtpUseDefaultCredentials').change(function () { - if (this.checked) { - $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideUp(); - } else { - $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideDown(); - } - }); + _sendTestEmailModal.onOpen(function () { + var $form = _sendTestEmailModal.getForm(); + _sendTestEmailModal.getForm().off('abp-ajax-success'); - _sendTestEmailModal.onOpen(function () { - var $form = _sendTestEmailModal.getForm(); - _sendTestEmailModal.getForm().off('abp-ajax-success'); + $form.on('abp-ajax-success', function () { + _sendTestEmailModal.setResult(); + }); + }) - $form.on('abp-ajax-success', function () { - _sendTestEmailModal.setResult(); + _sendTestEmailModal.onResult(function () { + abp.notify.success(l('SuccessfullySent')); }); - }) - - _sendTestEmailModal.onResult(function () { - abp.notify.success(l('SuccessfullySent')); - }); - $("#SendTestEmailButton").click(function (e) { - e.preventDefault(); - _sendTestEmailModal.open(); + $("#SendTestEmailButton").click(function (e) { + e.preventDefault(); + _sendTestEmailModal.open(); + }); }); }); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml index 6ee1d62299..3f9c347cc6 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml @@ -21,19 +21,23 @@
- - @foreach (var group in Model.SettingPageCreationContext.Groups) - { - -

@group.DisplayName

-
- @await Component.InvokeAsync(group.ComponentType, new +
+
+ +
+
+
+
+
diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs index 0dcb3fb388..1e55bd2f6a 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs @@ -1,3 +1,4 @@ +using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; @@ -34,6 +35,19 @@ public class IndexModel : AbpPageModel return Task.FromResult(Page()); } + public virtual async Task OnPostRenderViewAsync(string id) + { + var context = await SettingPageContributorManager.ConfigureAsync(); + + var view = context.Groups.FirstOrDefault(x => x.Id == id); + if (view != null) + { + return ViewComponent(view.ComponentType, view.Parameter); + } + + return NoContent(); + } + public virtual async Task OnPostRefreshConfigurationAsync() { await LocalEventBus.PublishAsync( diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js index 8af1bb6715..b7c0c5b32e 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js @@ -1,6 +1,24 @@ (function ($) { var l = abp.localization.getResource('AbpSettingManagement'); + $('#tabs-nav .nav-item').click(function () { + var id = $(this).attr("id") + abp.ui.block({ + elm: '#tab-content', + busy: true, + promise: abp.ajax({ + type: "POST", + url: "SettingManagement?handler=RenderView&id=" + id, + dataType: "html", + contentType: false, + processData: false + }).done(function (response) { + $('#tab-content').html(response); + abp.event.trigger('Abp.SettingManagement.View.Render.' + id); + }) + }); + }).first().click(); + $(document).on('AbpSettingSaved', function () { abp.notify.success(l('SuccessfullySaved')); From 4094f33e2f92db31b70606a57ff25d6e63bc4923 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 28 Jun 2022 15:35:11 +0800 Subject: [PATCH 4/6] Load tabs only once. --- .../Pages/SettingManagement/Index.cshtml | 7 ++++--- .../Pages/SettingManagement/Index.js | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml index 3f9c347cc6..9c79489c41 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml @@ -28,14 +28,15 @@ { var group = Model.SettingPageCreationContext.Groups[i]; var active = i == 0 ? "active" : string.Empty; - }
-
+
+
diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js index b7c0c5b32e..813608f28c 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js @@ -1,19 +1,26 @@ (function ($) { var l = abp.localization.getResource('AbpSettingManagement'); - $('#tabs-nav .nav-item').click(function () { - var id = $(this).attr("id") + $('#tabs-nav .nav-item .nav-link').click(function () { + var _this = $(this); + if(_this.attr('data-bs-target') !== undefined) { + return; + } + + var id = _this.attr("id") abp.ui.block({ elm: '#tab-content', busy: true, promise: abp.ajax({ - type: "POST", - url: "SettingManagement?handler=RenderView&id=" + id, + type: 'POST', + url: 'SettingManagement?handler=RenderView&id=' + id, dataType: "html", contentType: false, processData: false }).done(function (response) { - $('#tab-content').html(response); + $('#tab-content').children('.tab-pane').removeClass('show').removeClass('active'); + _this.attr('data-bs-target', '#' + $.escapeSelector($.escapeSelector(id))); + $('#tab-content').append('
' + response + '
'); abp.event.trigger('Abp.SettingManagement.View.Render.' + id); }) }); From 3c0e7d1146732fb592a7ff32c32700bc4004a257 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 28 Jun 2022 15:47:01 +0800 Subject: [PATCH 5/6] Use `data-id`. --- .../Pages/SettingManagement/Index.cshtml | 2 +- .../Pages/SettingManagement/Index.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml index 9c79489c41..0ff8e7d0ac 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml @@ -29,7 +29,7 @@ var group = Model.SettingPageCreationContext.Groups[i]; var active = i == 0 ? "active" : string.Empty; } diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js index 813608f28c..82e075b45e 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js @@ -7,7 +7,7 @@ return; } - var id = _this.attr("id") + var id = _this.data("id") abp.ui.block({ elm: '#tab-content', busy: true, From 0adbd3115b61c0854987b6f485ff27a6ac1c867b Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 28 Jun 2022 16:49:48 +0800 Subject: [PATCH 6/6] Add js file to setting views. --- .../AbpSettingManagementWebModule.cs | 18 +----- .../EmailSettingGroup/Default.cshtml | 4 +- .../Components/EmailSettingGroup/Default.js | 60 +++++++++---------- .../Pages/SettingManagement/Index.js | 1 - 4 files changed, 35 insertions(+), 48 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs index 61874c0b6b..b544d4a7bf 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/AbpSettingManagementWebModule.cs @@ -1,7 +1,5 @@ -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; -using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AutoMapper; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; @@ -29,7 +27,7 @@ public class AbpSettingManagementWebModule : AbpModule { options.AddAssemblyResource(typeof(AbpSettingManagementResource), typeof(AbpSettingManagementWebModule).Assembly); }); - + PreConfigure(mvcBuilder => { mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpSettingManagementWebModule).Assembly); @@ -54,21 +52,11 @@ public class AbpSettingManagementWebModule : AbpModule options.FileSets.AddEmbedded(); }); - Configure(options => - { - options.ScriptBundles - .Configure(typeof(IndexModel).FullName, - configuration => - { - configuration.AddFiles("/Pages/SettingManagement/Components/EmailSettingGroup/Default.js"); - }); - }); - Configure(options => { options.DisableModule(SettingManagementRemoteServiceConsts.ModuleName); }); - + context.Services.AddAutoMapperObjectMapper(); Configure(options => { diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml index caca43c1e1..a5e0275535 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.cshtml @@ -6,6 +6,8 @@ @inject IPermissionChecker PermissionChecker @model Volo.Abp.SettingManagement.Web.Pages.SettingManagement.Components.EmailSettingGroup.EmailSettingGroupViewComponent.UpdateEmailSettingsViewModel + +
@@ -36,4 +38,4 @@ -
\ No newline at end of file + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js index aeced4f4dc..ae8e694de3 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Components/EmailSettingGroup/Default.js @@ -8,46 +8,44 @@ var l = abp.localization.getResource('AbpSettingManagement'); - abp.event.on('Abp.SettingManagement.View.Render.Volo.Abp.EmailSetting', function (eventData) { - $("#EmailSettingsForm").on('submit', function (event) { - event.preventDefault(); + $("#EmailSettingsForm").on('submit', function (event) { + event.preventDefault(); - if (!$(this).valid()) { - return; - } - - var form = $(this).serializeFormToObject(); - volo.abp.settingManagement.emailSettings.update(form).then(function (result) { - $(document).trigger("AbpSettingSaved"); - }); + if (!$(this).valid()) { + return; + } + var form = $(this).serializeFormToObject(); + volo.abp.settingManagement.emailSettings.update(form).then(function (result) { + $(document).trigger("AbpSettingSaved"); }); - $('#SmtpUseDefaultCredentials').change(function () { - if (this.checked) { - $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideUp(); - } else { - $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideDown(); - } - }); + }); - _sendTestEmailModal.onOpen(function () { - var $form = _sendTestEmailModal.getForm(); - _sendTestEmailModal.getForm().off('abp-ajax-success'); + $('#SmtpUseDefaultCredentials').change(function () { + if (this.checked) { + $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideUp(); + } else { + $('#HideSectionWhenUseDefaultCredentialsIsChecked').slideDown(); + } + }); - $form.on('abp-ajax-success', function () { - _sendTestEmailModal.setResult(); - }); - }) + _sendTestEmailModal.onOpen(function () { + var $form = _sendTestEmailModal.getForm(); + _sendTestEmailModal.getForm().off('abp-ajax-success'); - _sendTestEmailModal.onResult(function () { - abp.notify.success(l('SuccessfullySent')); + $form.on('abp-ajax-success', function () { + _sendTestEmailModal.setResult(); }); + }) + + _sendTestEmailModal.onResult(function () { + abp.notify.success(l('SuccessfullySent')); + }); - $("#SendTestEmailButton").click(function (e) { - e.preventDefault(); - _sendTestEmailModal.open(); - }); + $("#SendTestEmailButton").click(function (e) { + e.preventDefault(); + _sendTestEmailModal.open(); }); }); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js index 82e075b45e..07b40c2c38 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.js @@ -21,7 +21,6 @@ $('#tab-content').children('.tab-pane').removeClass('show').removeClass('active'); _this.attr('data-bs-target', '#' + $.escapeSelector($.escapeSelector(id))); $('#tab-content').append('
' + response + '
'); - abp.event.trigger('Abp.SettingManagement.View.Render.' + id); }) }); }).first().click();