Browse Source

Select all / deselect all on the permission moda

Resolved https://github.com/abpframework/abp/issues/981
pull/1002/head
Yunus Emre Kalkan 7 years ago
parent
commit
2be65dd720
  1. 3
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebAutoMapperProfile.cs
  2. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/en.json
  3. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/tr.json
  4. 17
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml
  5. 13
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs
  6. 147
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js

3
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebAutoMapperProfile.cs

@ -1,4 +1,5 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
using Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement;
namespace Volo.Abp.PermissionManagement.Web
@ -7,7 +8,7 @@ namespace Volo.Abp.PermissionManagement.Web
{
public AbpPermissionManagementWebAutoMapperProfile()
{
CreateMap<PermissionGroupDto, PermissionManagementModal.PermissionGroupViewModel>();
CreateMap<PermissionGroupDto, PermissionManagementModal.PermissionGroupViewModel>().Ignore(p=>p.IsAllPermissionsGranted);
CreateMap<PermissionGrantInfoDto, PermissionManagementModal.PermissionGrantInfoViewModel>()
.ForMember(p => p.Depth, opts => opts.Ignore());

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/en.json

@ -3,6 +3,8 @@
"texts": {
"Permissions": "Permissions",
"OnlyProviderPermissons": "Only this provider",
"All": "All"
"All": "All",
"SelectAllInAllTabs": "Grant all permissions",
"SelectAllInThisTab": "Select all"
}
}

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Localization/Resources/AbpPermissionManagement/tr.json

@ -3,6 +3,8 @@
"texts": {
"Permissions": "İzinler",
"OnlyProviderPermissons": "Sadece bu sağlayıcı",
"All": "Hepsi"
"All": "Hepsi",
"SelectAllInAllTabs": "Tüm izinleri ver",
"SelectAllInThisTab": "Hepsini seç"
}
}

17
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml

@ -13,16 +13,23 @@
<abp-modal size="Large">
<abp-modal-header title="@(L["Permissions"].Value) - @Model.EntityDisplayName"></abp-modal-header>
<abp-modal-body class="custom-scroll-container">
<input asp-for="@Model.ProviderKey" />
<input asp-for="@Model.ProviderName" />
<abp-input asp-for="SelectAllInAllTabs" label="@L["SelectAllInAllTabs"].Value"/>
<hr class="mt-2 mb-2"/>
<input asp-for="@Model.ProviderKey"/>
<input asp-for="@Model.ProviderName"/>
<abp-tabs name="PermissionsTabs" tab-style="PillVertical" vertical-header-size="_4" class="custom-scroll-container">
@for (var i = 0; i < Model.Groups.Count; i++)
{
<abp-tab title="@Model.Groups[i].DisplayName" name="v-pills-tab-@Model.Groups[i].GetNormalizedGroupName()">
<h4>@Model.Groups[i].DisplayName</h4>
<hr class="mt-3 mb-3" />
<hr class="mt-2 mb-3"/>
<div class="custom-scroll-content">
<div class="pl-1 pt-1">
<abp-input asp-for="@Model.Groups[i].IsAllPermissionsGranted" name="SelectAllInThisTab"
id="SelectAllInThisTab-@Model.Groups[i].GetNormalizedGroupName()"
data-tab-id="v-pills-tab-@Model.Groups[i].GetNormalizedGroupName()"
label="@L["SelectAllInThisTab"].Value"/>
<hr class="mb-3"/>
@for (var j = 0; j < Model.Groups[i].Permissions.Count; j++)
{
<abp-input asp-for="@Model.Groups[i].Permissions[j].IsGranted"
@ -30,8 +37,8 @@
disabled="@Model.Groups[i].Permissions[j].IsDisabled(Model.ProviderName)"
group-data-permission-name="@Model.Groups[i].Permissions[j].Name"
group-data-parent-name="@(Model.Groups[i].Permissions[j].ParentName ?? "")"
group-style="margin-left: @(Model.Groups[i].Permissions[j].Depth * 20)px" />
<input asp-for="@Model.Groups[i].Permissions[j].Name" />
group-style="margin-left: @(Model.Groups[i].Permissions[j].Depth * 20)px"/>
<input asp-for="@Model.Groups[i].Permissions[j].Name"/>
}
</div>
</div>

13
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs

@ -25,6 +25,10 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
public string EntityDisplayName { get; set; }
public bool SelectAllInThisTab { get; set; }
public bool SelectAllInAllTabs { get; set; }
private readonly IPermissionAppService _permissionAppService;
public PermissionManagementModal(IPermissionAppService permissionAppService)
@ -49,6 +53,13 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
{
new FlatTreeDepthFinder<PermissionGrantInfoViewModel>().SetDepths(group.Permissions);
}
foreach (var group in Groups)
{
group.IsAllPermissionsGranted = group.Permissions.All(p => p.IsGranted);
}
SelectAllInAllTabs = Groups.All(g => g.IsAllPermissionsGranted);
}
public async Task<IActionResult> OnPostAsync()
@ -80,6 +91,8 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
{
public string Name { get; set; }
public bool IsAllPermissionsGranted { get; set; }
public string DisplayName { get; set; }
public List<PermissionGrantInfoViewModel> Permissions { get; set; }

147
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js

@ -12,7 +12,7 @@
$tab.find('.custom-checkbox')
.filter('[data-permission-name="' + parentName + '"]')
.find('input[type="checkbox"]')
.each(function() {
.each(function () {
var $parent = $(this);
$parent.prop('checked', true);
checkParents($tab, $parent);
@ -35,21 +35,159 @@
});
}
this.initDom = function($el) {
function handleUncheck($tab) {
var $checkBox = $tab.find('input[name="SelectAllInThisTab"]');
if ($checkBox.is(':checked')) {
if ($tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').length > 1) {
$($checkBox).prop('indeterminate', true);
}
else {
$checkBox.prop('checked', false);
}
}
else if ($checkBox.is(':indeterminate')) {
var allUnchecked = true;
$tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () {
if ($(this).is(':checked') === true) {
allUnchecked = false;
}
});
if (allUnchecked) {
$($checkBox).prop('indeterminate', false);
$checkBox.prop('checked', false);
}
}
}
function handleCheck($tab) {
var $checkBox = $tab.find('input[name="SelectAllInThisTab"]');
var allChecked = true;
$tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () {
if ($(this).is(':checked') === false) {
allChecked = false;
}
});
if (allChecked) {
$($checkBox).prop('indeterminate', false);
$checkBox.prop('checked', true);
}
else {
$($checkBox).prop('indeterminate', true);
}
}
function initSelectAllInThisTab() {
var tabs = $('.tab-pane');
for (var i = 0; i < tabs.length; i++) {
var $tab = $(tabs[i]);
var $checkBox = $tab.find('input[name="SelectAllInThisTab"]');
var allChecked = true;
var allUnChecked = true;
$tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () {
if ($(this).is(':checked') === true) {
allUnChecked = false;
} else {
allChecked = false;
}
});
if (allChecked) {
$($checkBox).prop('checked', true);
}
else if (allUnChecked) {
$($checkBox).prop('checked', false);
}
else {
$($checkBox).prop('indeterminate', true);
}
}
}
function setSelectAllInAllTabs() {
var $checkBox = $('#SelectAllInAllTabs');
var anyIndeterminate = false;
var allChecked = true;
var allUnChecked = true;
$('input[name="SelectAllInThisTab"]').each(function () {
if ($(this).is(':checked') === true) {
allUnChecked = false;
} else {
allChecked = false;
}
if ($(this).is(':indeterminate') === true) {
anyIndeterminate = true;
}
});
if (anyIndeterminate) {
$($checkBox).prop('indeterminate', true);
return;
} else {
$($checkBox).prop('indeterminate', false);
}
if (allChecked) {
$($checkBox).prop('checked', true);
}
else if (allUnChecked) {
$($checkBox).prop('checked', false);
}
else {
$($checkBox).prop('indeterminate', true);
}
}
this.initDom = function ($el) {
$el.find('.tab-pane').each(function () {
var $tab = $(this);
$tab.find('input[type="checkbox"]').each(function () {
$tab.find('input[type="checkbox"]').not('[name="SelectAllInThisTab"]').each(function () {
var $checkBox = $(this);
$checkBox.change(function () {
if ($checkBox.is(':checked')) {
checkParents($tab, $checkBox);
handleCheck($tab);
} else {
uncheckChildren($tab, $checkBox);
handleUncheck($tab);
}
setSelectAllInAllTabs();
});
});
});
$('input[name="SelectAllInThisTab"]').change(function () {
var $checkBox = $(this);
var $tab = $('#' + $checkBox.attr('data-tab-id'));
if ($checkBox.is(':checked')) {
$tab.find('input[type="checkbox"]').prop('checked', true);
} else {
$tab.find('input[type="checkbox"]').prop('checked', false);
}
$($checkBox).prop('indeterminate', false);
setSelectAllInAllTabs();
});
$('input[name="SelectAllInAllTabs"]').change(function () {
var $checkBox = $(this);
if ($checkBox.is(':checked')) {
$('.tab-pane input[type="checkbox"]').prop('checked', true);
} else {
$('.tab-pane input[type="checkbox"]').prop('checked', false);
}
$($checkBox).prop('indeterminate', false);
});
$(function () {
$(".custom-scroll-content").mCustomScrollbar({
theme: "minimal-dark"
@ -58,6 +196,9 @@
theme: "minimal-dark"
});
});
initSelectAllInThisTab();
setSelectAllInAllTabs();
};
};
})(jQuery);
Loading…
Cancel
Save