diff --git a/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor b/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor index 7f23b58d..376e47da 100644 --- a/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor +++ b/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor @@ -8,8 +8,8 @@ @foreach (var category in Value.Children) {
-
-
@category.Name
+
@category.Name
+
@foreach (var app in category.Children) { diff --git a/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor.cs b/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor.cs index a301805d..cd3f0d4e 100644 --- a/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor.cs +++ b/src/Masa.Stack.Components/Shared/GlobalNavigations/ExpansionMenuWrapper.razor.cs @@ -24,6 +24,25 @@ public partial class ExpansionMenuWrapper : MasaComponentBase private string CssSelectorForScroll => string.IsNullOrWhiteSpace(CssForScroll) ? string.Empty : "." + CssForScroll; + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + if (Value is not null) + { + await MasonryInitAsync(); + } + } + } + + protected virtual async Task MasonryInitAsync() + { + foreach (var category in Value.Children) + { + await JsRuntime.InvokeVoidAsync("MasaStackComponents.masonryInit", $".{idPrefix}_{category.Id}", ".app", 24); + } + } + protected virtual async Task ItemClick(ExpansionMenu menu) { if (Value.MetaData.Situation == ExpansionMenuSituation.Authorization) diff --git a/src/Masa.Stack.Components/wwwroot/css/app.css b/src/Masa.Stack.Components/wwwroot/css/app.css index ddc4204d..c04f5765 100644 --- a/src/Masa.Stack.Components/wwwroot/css/app.css +++ b/src/Masa.Stack.Components/wwwroot/css/app.css @@ -91,12 +91,12 @@ h1:focus { } .masa-stack-components .global-nav .global-nav-content__main { - -moz-column-count: 3; /* Firefox */ - -webkit-column-count: 3; /* Safari 和 Chrome */ - column-count: 3; - -moz-column-gap: 24px; /* Firefox */ - -webkit-column-gap: 24px; /* Safari 和 Chrome */ - column-gap: 24px; + /*-moz-column-count: 3;*/ /* Firefox */ + /*-webkit-column-count: 3;*/ /* Safari 和 Chrome */ + /*column-count: 3; + -moz-column-gap: 24px;*/ /* Firefox */ + /*-webkit-column-gap: 24px;*/ /* Safari 和 Chrome */ + /*column-gap: 24px;*/ } .masa-stack-components .global-nav .global-nav-content__main .title_category_active { @@ -127,20 +127,27 @@ h1:focus { break-inside: avoid-column; background: #F6F8FD; padding: 16px; + + width: calc(33.33% - 16px); + margin-bottom: 24px; } .masa-stack-components .global-nav-content__main .category_title_app { -webkit-column-break-inside: avoid; page-break-inside: avoid; break-inside: avoid-column; + + display: flex; + flex-wrap: wrap; + gap: 24px; /* 设置行间距和列间距 */ } - .masa-stack-components .global-nav .apps .category_title_app :nth-child(2):not([style*="display:none"]).app { + .masa-stack-components .global-nav .apps .category_title_app :not([style*="display:none"]).app { border-top-left-radius: 20px; border-top-right-radius: 20px; } - .masa-stack-components .global-nav .apps .category_title_app .app:last-child:not([style*="display:none"]) { + .masa-stack-components .global-nav .apps .category_title_app .app:not([style*="display:none"]) { border-bottom-right-radius: 20px; border-bottom-left-radius: 20px; } diff --git a/src/Masa.Stack.Components/wwwroot/js/components.js b/src/Masa.Stack.Components/wwwroot/js/components.js index c7948104..8887b324 100644 --- a/src/Masa.Stack.Components/wwwroot/js/components.js +++ b/src/Masa.Stack.Components/wwwroot/js/components.js @@ -138,6 +138,16 @@ window.MasaStackComponents.getTimezoneOffset = function() { return new Date().getTimezoneOffset(); } +window.MasaStackComponents.masonryInit = (selector, itemSelector, gutter) => { + const elem = document.querySelector(selector); + new Masonry(elem, { + itemSelector: itemSelector, + columnWidth: itemSelector, + gutter: gutter, + percentPosition: true + }); +} + function debounce(fn, wait) { let timer = null; return function (...args) { diff --git a/tests/MasaWebApp/Pages/_Layout.cshtml b/tests/MasaWebApp/Pages/_Layout.cshtml index 71e7de1c..fbca7cf6 100644 --- a/tests/MasaWebApp/Pages/_Layout.cshtml +++ b/tests/MasaWebApp/Pages/_Layout.cshtml @@ -29,6 +29,7 @@ +