From 5932ae56d39fd7f17a96196ec00c436efdf05fe7 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 10:51:49 +0800 Subject: [PATCH 01/35] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4=20UseSearc?= =?UTF-8?q?hForm=20=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Table/Table.razor | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor b/src/BootstrapBlazor/Components/Table/Table.razor index afec765852c..7f378c6ab56 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor +++ b/src/BootstrapBlazor/Components/Table/Table.razor @@ -1098,13 +1098,7 @@ - @if (UseSearchForm) - { - - - } - else if (CustomerSearchModel != null && CustomerSearchTemplate != null) + @if (CustomerSearchModel != null && CustomerSearchTemplate != null) { @CustomerSearchTemplate(CustomerSearchModel) } @@ -1112,6 +1106,12 @@ { @SearchTemplate(SearchModel) } + else if(UseSearchForm) + { + + + } else { From 4037c11945afe4190531ab95aeb7ff1cbe836141 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 18:30:12 +0800 Subject: [PATCH 02/35] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20BuildSearchM?= =?UTF-8?q?etaData=20=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ISearchItemExtensions.cs | 116 +++++++++++++----- 1 file changed, 86 insertions(+), 30 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index 0af92952b2b..e2aaeef66ba 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -13,39 +13,95 @@ namespace BootstrapBlazor.Components; /// public static class ISearchItemExtensions { - /// - /// 创建 搜索项的 RenderFragment 实例 - /// Creates a RenderFragment instance for the search item - /// - /// - public static RenderFragment CreateRenderFragment(this ISearchItem item) => builder => + extension(ISearchItem item) { - var metaData = item.MetaData; - switch (metaData) + /// + /// 通过 数据类型推断 实例 + /// + /// + /// + public ISearchFormItemMetaData? BuildSearchMetaData(SearchFormLocalizerOptions options) { - case NumberSearchMetaData numberSearchMetaData: - builder.AddNumberSearchComponent(item, numberSearchMetaData); - break; - case DateTimeSearchMetaData datetimeSearchMetaData: - builder.AddDateTimeSearchComponent(item, datetimeSearchMetaData); - break; - case DateTimeRangeSearchMetaData datetimeRangeSearchMetaData: - builder.AddDateTimeRangeSearchComponent(item, datetimeRangeSearchMetaData); - break; - case CheckboxListSearchMetaData checkboxListSearchMetaData: - builder.AddCheckboxListSearchComponent(item, checkboxListSearchMetaData); - break; - case MultipleSelectSearchMetaData multipleSelectSearchMetaData: - builder.AddMultipleSelectSearchComponent(item, multipleSelectSearchMetaData); - break; - case SelectSearchMetaData selectSearchMetaData: - builder.AddSelectSearchComponent(item, selectSearchMetaData); - break; - case StringSearchMetaData stringSearchMetaData: - builder.AddStringSearchComponent(item, stringSearchMetaData); - break; + if (item.PropertyType is null) + { + return null; + } + + var fieldType = Nullable.GetUnderlyingType(item.PropertyType) ?? item.PropertyType; + ISearchFormItemMetaData? metaData = null; + if (fieldType.IsEnum) + { + metaData = new SelectSearchMetaData() + { + Items = fieldType.ToSelectList(new SelectedItem() { Value = "", Text = options.SelectAllText }), + }; + } + else if (fieldType.IsNumberWithDotSeparator()) + { + metaData = new NumberSearchMetaData() + { + StartValueLabelText = options.NumberStartValueLabelText, + EndValueLabelText = options.NumberEndValueLabelText, + ValueType = fieldType + }; + } + else if (fieldType.IsBoolean()) + { + metaData = new SelectSearchMetaData() + { + Items = new List() + { + new SelectedItem() { Value = "", Text = options.BooleanAllText }, + new SelectedItem() { Value = "True", Text = options.BooleanTrueText }, + new SelectedItem() { Value = "False", Text = options.BooleanFalseText } + } + }; + } + else if (fieldType.IsDateTime()) + { + metaData = new DateTimeRangeSearchMetaData(); + } + else + { + metaData = new StringSearchMetaData() { FilterAction = FilterAction.Contains }; + } + + return metaData; } - }; + + /// + /// 创建 搜索项的 RenderFragment 实例 + /// Creates a RenderFragment instance for the search item + /// + public RenderFragment CreateRenderFragment() => builder => + { + var metaData = item.MetaData; + switch (metaData) + { + case NumberSearchMetaData numberSearchMetaData: + builder.AddNumberSearchComponent(item, numberSearchMetaData); + break; + case DateTimeSearchMetaData datetimeSearchMetaData: + builder.AddDateTimeSearchComponent(item, datetimeSearchMetaData); + break; + case DateTimeRangeSearchMetaData datetimeRangeSearchMetaData: + builder.AddDateTimeRangeSearchComponent(item, datetimeRangeSearchMetaData); + break; + case CheckboxListSearchMetaData checkboxListSearchMetaData: + builder.AddCheckboxListSearchComponent(item, checkboxListSearchMetaData); + break; + case MultipleSelectSearchMetaData multipleSelectSearchMetaData: + builder.AddMultipleSelectSearchComponent(item, multipleSelectSearchMetaData); + break; + case SelectSearchMetaData selectSearchMetaData: + builder.AddSelectSearchComponent(item, selectSearchMetaData); + break; + case StringSearchMetaData stringSearchMetaData: + builder.AddStringSearchComponent(item, stringSearchMetaData); + break; + } + }; + } extension(RenderTreeBuilder builder) { From 34735cfceea6b357ec3f076e5f007258c671cf71 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 18:31:23 +0800 Subject: [PATCH 03/35] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20Model=20?= =?UTF-8?q?=E4=B8=8D=E5=8F=AF=E4=B8=BA=E7=A9=BA=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dialog/DialogBase.cs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dialog/DialogBase.cs b/src/BootstrapBlazor/Components/Dialog/DialogBase.cs index efd76d67d26..758a157bd32 100644 --- a/src/BootstrapBlazor/Components/Dialog/DialogBase.cs +++ b/src/BootstrapBlazor/Components/Dialog/DialogBase.cs @@ -67,18 +67,4 @@ public abstract class DialogBase : BootstrapModuleComponentBase /// [Parameter] public bool ShowUnsetGroupItemsOnTop { get; set; } - - /// - /// OnInitialized 方法 - /// OnInitialized Method - /// - protected override void OnInitialized() - { - base.OnInitialized(); - - if (Model == null) - { - throw new InvalidOperationException("Model value not set to null"); - } - } } From 7b603c0079abd3773eb1b83e9433fe6e2b3c3556 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 18:32:10 +0800 Subject: [PATCH 04/35] =?UTF-8?q?feat(SearchDialog):=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=20UseSearchForm=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dialog/SearchDialog.razor | 14 ++++++-- .../Components/Dialog/SearchDialog.razor.cs | 32 +++++++++++++++++-- .../Components/Dialog/SearchDialogOption.cs | 18 +++++++++++ 3 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor index 5b61cea04c3..e9dea8214d3 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor @@ -1,8 +1,18 @@ -@namespace BootstrapBlazor.Components +@namespace BootstrapBlazor.Components @typeparam TModel @inherits DialogBase -@if (BodyTemplate != null) +@if (UseSearchForm) +{ + + + +} +else if(BodyTemplate != null) {
@BodyTemplate.Invoke(Model) diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs index 3e09c49f490..98145752ae0 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs @@ -59,6 +59,27 @@ public partial class SearchDialog [Parameter] public string? SearchIcon { get; set; } + /// + /// 获得/设置 是否使用 SearchForm 组件进行搜索条件编辑 默认 false 不使用 + /// Gets or sets Whether to use SearchForm component for editing search conditions. Default is false + /// + [Parameter] + public bool UseSearchForm { get; set; } + + /// + /// 获得/设置 搜索表单项集合 + /// Gets or sets Search Form Items collection + /// + [Parameter] + public List? SearchItems { get; set; } + + /// + /// 获得/设置 过滤器改变回调事件 Func 版本 + /// Gets or sets the filter changed callback event Func version + /// + [Parameter] + public Func? OnChanged { get; set; } + [Inject] [NotNull] private IStringLocalizer>? Localizer { get; set; } @@ -68,8 +89,7 @@ public partial class SearchDialog private IIconTheme? IconTheme { get; set; } /// - /// OnParametersSet 方法 - /// OnParametersSet Method + /// /// protected override void OnParametersSet() { @@ -81,4 +101,12 @@ protected override void OnParametersSet() ClearIcon ??= IconTheme.GetIconByKey(ComponentIcons.SearchDialogClearIcon); SearchIcon ??= IconTheme.GetIconByKey(ComponentIcons.SearchDialogSearchIcon); } + + private async Task OnSearchFormFilterChanged(FilterKeyValueAction action) + { + if (OnChanged != null) + { + await OnChanged(action); + } + } } diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs b/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs index bbb2bc8f246..6100d35fff6 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs @@ -92,4 +92,22 @@ public SearchDialogOption() /// Gets or sets Search Callback Delegate /// public Func? OnSearchClick { get; set; } + + /// + /// 获得/设置 是否使用 SearchForm 组件进行搜索条件编辑 默认 false 不使用 + /// Gets or sets Whether to use SearchForm component for editing search conditions. Default is false + /// + public bool UseSearchForm { get; set; } + + /// + /// 获得/设置 搜索表单项集合 + /// Gets or sets Search Form Items collection + /// + public List? SearchItems { get; set; } + + /// + /// 获得/设置 过滤器改变回调事件 Func 版本 + /// Gets or sets the filter changed callback event Func version + /// + public Func? OnFilterChanged { get; set; } } From 945e3770853a972f6f19ce45399d29e025b12ab1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 18:32:52 +0800 Subject: [PATCH 05/35] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20Reset=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E7=94=A8=E4=BA=8E=E6=B8=85=E7=A9=BA=E6=90=9C?= =?UTF-8?q?=E7=B4=A2=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Searches/DateTimeRangeSearchMetaData.cs | 10 ++++++++++ .../Components/Searches/DateTimeSearchMetaData.cs | 10 ++++++++++ .../Components/Searches/ISearchFormItemMetaData.cs | 6 ++++++ .../Components/Searches/NumberSearchMetaData.cs | 11 +++++++++++ .../Components/Searches/SearchMetaDataBase.cs | 5 +++++ .../Components/Searches/StringSearchMetaData.cs | 10 ++++++++++ 6 files changed, 52 insertions(+) diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs index 071fdfda0b2..d7700954b0f 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs @@ -72,4 +72,14 @@ public async Task ValueChangedHandler(DateTimeRangeValue? value) await ValueChanged(); } } + + /// + /// + /// + public override void Reset() + { + base.Reset(); + + Value = null; + } } diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs index 0c85edfd2b2..d068599e7ee 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs @@ -56,4 +56,14 @@ public async Task ValueChangedHandler(DateTime? value) await ValueChanged(); } } + + /// + /// + /// + public override void Reset() + { + base.Reset(); + + Value = null; + } } diff --git a/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs b/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs index aaffbc6037f..eefbb57440c 100644 --- a/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs @@ -52,4 +52,10 @@ public interface ISearchFormItemMetaData /// Gets or sets the callback to get the filter instance, called by the method. Setting this callback allows customizing the logic for obtaining the filter instance. /// Func? GetFilterCallback { get; set; } + + /// + /// 重置方法 + /// Reset method + /// + void Reset(); } diff --git a/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs index ed8de2a9cd9..1dd41943138 100644 --- a/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs @@ -129,4 +129,15 @@ public async Task EndValueChangedHandler(string? value) await ValueChanged(); } } + + /// + /// + /// + public override void Reset() + { + base.Reset(); + + StartValue = null; + EndValue = null; + } } diff --git a/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs b/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs index 7a54bb3dea2..90e1782815d 100644 --- a/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs +++ b/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs @@ -70,4 +70,9 @@ public abstract class SearchMetaDataBase : ISearchFormItemMetaData } return null; } + + /// + /// + /// + public virtual void Reset() { } } diff --git a/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs index 2c2c7900393..81059048c6e 100644 --- a/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs @@ -56,4 +56,14 @@ public async Task ValueChangedHandler(string? value) await ValueChanged(); } } + + /// + /// + /// + public override void Reset() + { + base.Reset(); + + Value = null; + } } From 7af410f16a5a82462dcf72a69dee44ab06613e0a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 18:33:18 +0800 Subject: [PATCH 06/35] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SearchForm/SearchForm.razor.cs | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index da4413a6bee..f541149d57e 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -11,28 +11,12 @@ namespace BootstrapBlazor.Components; /// public partial class SearchForm : IShowLabel { - /// - /// 获得/设置 过滤器实例 - /// Gets or sets the filter instance - /// - [Parameter] - [EditorRequired] - [NotNull] - public FilterKeyValueAction? Filter { get; set; } - - /// - /// 获得/设置 过滤器改变回调事件 - /// Gets or sets the filter changed callback event - /// - [Parameter] - public EventCallback FilterChanged { get; set; } - /// /// 获得/设置 过滤器改变回调事件 Func 版本 /// Gets or sets the filter changed callback event Func version /// [Parameter] - public Func? OnFilterChanged { get; set; } + public Func? OnChanged { get; set; } /// /// 获得/设置 每行显示组件数量 默认为 null @@ -169,13 +153,9 @@ private RenderFragment AutoGenerateTemplate(ISearchItem item) { var action = GetFilterKeyValueAction(); - if (FilterChanged.HasDelegate) - { - await FilterChanged.InvokeAsync(action); - } - if (OnFilterChanged != null) + if (OnChanged != null) { - await OnFilterChanged.Invoke(action); + await OnChanged.Invoke(action); } }; From 15f5b417bf6207829cd085fb33d5956eee2b34ff Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 19:58:12 +0800 Subject: [PATCH 07/35] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E4=BC=A0=E9=80=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs b/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs index 82791a4a4e7..4fed321476f 100644 --- a/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs +++ b/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs @@ -67,7 +67,10 @@ public static async Task ShowSearchDialog(this DialogService service, Se [nameof(SearchDialog.ResetButtonText)] = option.ResetButtonText, [nameof(SearchDialog.QueryButtonText)] = option.QueryButtonText, [nameof(SearchDialog.Model)] = option.Model, - [nameof(SearchDialog.BodyTemplate)] = option.DialogBodyTemplate + [nameof(SearchDialog.BodyTemplate)] = option.DialogBodyTemplate, + [nameof(SearchDialog.UseSearchForm)] = option.UseSearchForm, + [nameof(SearchDialog.SearchItems)] = option.SearchItems, + [nameof(SearchDialog.OnChanged)] = option.OnFilterChanged }; option.Component = BootstrapDynamicComponent.CreateComponent>(parameters); await service.Show(option, dialog); From 232ee42b99b6208ee30e3a1a579068bb021a33c1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 19:58:51 +0800 Subject: [PATCH 08/35] =?UTF-8?q?feat:=20=E8=A1=A8=E6=A0=BC=E9=AB=98?= =?UTF-8?q?=E7=BA=A7=E6=90=9C=E7=B4=A2=E6=94=AF=E6=8C=81=20UseSearchForm?= =?UTF-8?q?=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor | 14 +- .../Components/Table/Table.razor.Search.cs | 126 ++++++++++++------ 2 files changed, 95 insertions(+), 45 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor b/src/BootstrapBlazor/Components/Table/Table.razor index 7f378c6ab56..d36ae847447 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor +++ b/src/BootstrapBlazor/Components/Table/Table.razor @@ -1098,7 +1098,13 @@
- @if (CustomerSearchModel != null && CustomerSearchTemplate != null) + @if (UseSearchForm) + { + + + } + else if (CustomerSearchModel != null && CustomerSearchTemplate != null) { @CustomerSearchTemplate(CustomerSearchModel) } @@ -1106,12 +1112,6 @@ { @SearchTemplate(SearchModel) } - else if(UseSearchForm) - { - - - } else { diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs index 0269069f4f4..aaa0659882c 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs @@ -115,8 +115,8 @@ public partial class Table public SearchMode SearchMode { get; set; } /// - /// 获得/设置 是否使用搜索表单 默认为 false - /// Gets or sets Whether to use search form. Default false + /// 获得/设置 是否使用搜索表单 默认为 false 开启本功能后 CustomerSearchTemplate 与 SearchTemplate 均不生效 + /// Gets or sets Whether to use search form. Default false. When enabled, both CustomerSearchTemplate and SearchTemplate are disabled /// [Parameter] public bool UseSearchForm { get; set; } @@ -164,44 +164,46 @@ public partial class Table public Func? OnResetSearchAsync { get; set; } private FilterKeyValueAction? _searchFilter; - private IEnumerable? _searchItems; + private List? _searchItems; + private FilterKeyValueAction? _advanceSearchFilter; - private IEnumerable SearchFormItems + private List SearchFormItems { get { - if (SearchFormLocalizerOptions is null) - { - SearchFormLocalizerOptions = new SearchFormLocalizerOptions() - { - SelectAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.SelectAllText)], - BooleanAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanAllText)], - BooleanTrueText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanTrueText)], - BooleanFalseText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanFalseText)], - NumberStartValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberStartValueLabelText)], - NumberEndValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberEndValueLabelText)] - }; - } - _searchItems ??= GetSearchItems(SearchFormLocalizerOptions.Value); + _searchItems ??= GetSearchFormItems(); return _searchItems; } } - private IEnumerable GetSearchItems(SearchFormLocalizerOptions options) + private List GetSearchFormItems() { + if (SearchFormLocalizerOptions is null) + { + SearchFormLocalizerOptions = new SearchFormLocalizerOptions() + { + SelectAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.SelectAllText)], + BooleanAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanAllText)], + BooleanTrueText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanTrueText)], + BooleanFalseText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanFalseText)], + NumberStartValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberStartValueLabelText)], + NumberEndValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberEndValueLabelText)] + }; + } + if (SearchItems != null) { - // TODO: 增加内部创建默认 ISearchItemMetaData 逻辑,减少用户使用成本 - //foreach (var item in SearchItems) - //{ - // // 创建默认 ISearchItemMetaData - // item.MetaData ??= column.BuildSearchMetaData(options); - //} - - return SearchItems; + // 增加内部创建默认 ISearchItemMetaData 逻辑,减少用户使用成本 + foreach (var item in SearchItems) + { + // 创建默认 ISearchItemMetaData + item.MetaData ??= item.BuildSearchMetaData(SearchFormLocalizerOptions.Value); + } + + return SearchItems.ToList(); } - return GetSearchColumns().Select(i => i.ParseSearchItem(options)).ToList(); + return GetSearchColumns().Select(i => i.ParseSearchItem(SearchFormLocalizerOptions.Value)).ToList(); } private Task OnSearchFormFilterChanged(FilterKeyValueAction action) @@ -217,7 +219,21 @@ private Task OnSearchFormFilterChanged(FilterKeyValueAction action) protected async Task ResetSearchClick() { await ToggleLoading(true); - if (CustomerSearchModel != null) + if (UseSearchForm) + { + _searchFilter = null; + _advanceSearchFilter = null; + + if (_searchItems != null) + { + foreach (var item in _searchItems) + { + item.MetaData?.Reset(); + } + } + _searchItems = null; + } + else if (CustomerSearchModel != null) { CustomerSearchModel.Reset(); } @@ -230,7 +246,6 @@ protected async Task ResetSearchClick() Utility.Reset(SearchModel, CreateSearchModel()); } - _searchItems = null; await SearchClick(); await ToggleLoading(false); } @@ -287,17 +302,37 @@ protected async Task ShowSearchDialog() { await DialogService.ShowSearchDialog(CreateCustomerModelDialog()); } + else if (UseSearchForm) + { + await DialogService.ShowSearchDialog(CreateSearchFormDialog()); + } else { await DialogService.ShowSearchDialog(CreateModelDialog()); } - SearchDialogOption CreateModelDialog() => new() + SearchDialogOption CreateCustomerModelDialog() => new() { - Class = "modal-dialog-table", IsScrolling = ScrollingDialogContent, Title = SearchModalTitle, - Model = SearchModel, + Model = CustomerSearchModel, + DialogBodyTemplate = CustomerSearchTemplate, + OnResetSearchClick = ResetSearchClick, + OnSearchClick = SearchClick, + RowType = SearchDialogRowType, + ItemsPerRow = SearchDialogItemsPerRow, + Size = SearchDialogSize, + LabelAlign = SearchDialogLabelAlign, + IsDraggable = SearchDialogIsDraggable, + ShowMaximizeButton = SearchDialogShowMaximizeButton, + ShowUnsetGroupItemsOnTop = ShowUnsetGroupItemsOnTop + }; + + SearchDialogOption CreateSearchFormDialog() => new() + { + Class = "modal-dialog-table modal-dialog-search-form", + IsScrolling = ScrollingDialogContent, + Title = SearchModalTitle, DialogBodyTemplate = SearchTemplate, OnResetSearchClick = ResetSearchClick, OnSearchClick = SearchClick, @@ -308,23 +343,33 @@ protected async Task ShowSearchDialog() Items = Columns.Where(i => i.GetSearchable()), IsDraggable = SearchDialogIsDraggable, ShowMaximizeButton = SearchDialogShowMaximizeButton, - ShowUnsetGroupItemsOnTop = ShowUnsetGroupItemsOnTop + ShowUnsetGroupItemsOnTop = ShowUnsetGroupItemsOnTop, + UseSearchForm = true, + SearchItems = SearchFormItems, + OnFilterChanged = action => + { + _advanceSearchFilter = action; + return Task.CompletedTask; + } }; - SearchDialogOption CreateCustomerModelDialog() => new() + SearchDialogOption CreateModelDialog() => new() { + Class = "modal-dialog-table", IsScrolling = ScrollingDialogContent, Title = SearchModalTitle, - Model = CustomerSearchModel, - DialogBodyTemplate = CustomerSearchTemplate, + Model = SearchModel, + DialogBodyTemplate = SearchTemplate, OnResetSearchClick = ResetSearchClick, OnSearchClick = SearchClick, RowType = SearchDialogRowType, ItemsPerRow = SearchDialogItemsPerRow, - Size = SearchDialogSize, LabelAlign = SearchDialogLabelAlign, + Size = SearchDialogSize, + Items = Columns.Where(i => i.GetSearchable()), IsDraggable = SearchDialogIsDraggable, - ShowMaximizeButton = SearchDialogShowMaximizeButton + ShowMaximizeButton = SearchDialogShowMaximizeButton, + ShowUnsetGroupItemsOnTop = ShowUnsetGroupItemsOnTop }; } @@ -349,6 +394,11 @@ protected IEnumerable GetCustomerSearches() /// protected List GetAdvanceSearches() { + if (UseSearchForm) + { + return _advanceSearchFilter.ToSearches(); + } + var searches = new List(); if (ShowAdvancedSearch && SearchMode == SearchMode.Popup && CustomerSearchModel == null) { From 0a2cabca5b32ab7e0b36104dcbe612fee7d5d812 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 19:59:06 +0800 Subject: [PATCH 09/35] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesSearch.razor | 14 +++++++++----- .../Samples/Table/TablesSearch.razor.cs | 10 ++++++++++ src/BootstrapBlazor.Server/Locales/en-US.json | 1 + src/BootstrapBlazor.Server/Locales/zh-CN.json | 1 + .../wwwroot/css/site.css | 18 ++++++++++++++++++ 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor index d3527ae19d7..f748ca451f5 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor @@ -65,19 +65,22 @@ items = items.Where(options.Searches.GetFilterFunc<Foo>(FilterLogic.Or)); } -
-
+
+
-
+
-
+
-
+
+
+ +
@@ -87,6 +90,7 @@ ShowToolbar="true" IsMultipleSelect="true" ShowExtendButtons="true" ShowSearch="true" ShowResetButton="ShowResetButton" ShowSearchButton="ShowSearchButton" ShowSearchText="ShowSearchText" AddModalTitle="@Localizer["AddModelTitle"]" EditModalTitle="@Localizer["EditModelTitle"]" + UseSearchForm="UseSearchForm" SearchItems="_searchItems" OnQueryAsync="@OnQueryAsync" OnAddAsync="@OnAddAsync" OnSaveAsync="@OnSaveAsync" OnDeleteAsync="@OnDeleteAsync"> diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs index f647ca7c1b8..2ecc8269cab 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs @@ -34,6 +34,10 @@ public partial class TablesSearch private SearchMode SearchModeValue { get; set; } + private bool UseSearchForm { get; set; } + + private List _searchItems = []; + private bool SearchModeFlag { get => SearchModeValue == SearchMode.Popup; @@ -58,6 +62,7 @@ private bool SearchModeFlag protected override void OnInitialized() { base.OnInitialized(); + Items = Foo.GenerateFoo(FooLocalizer); SearchItems = new List() { @@ -77,6 +82,11 @@ protected override void OnInitialized() Value = Localizer["SelectedItemValue2"].Value }, }; + + _searchItems = [ + new SearchItem(nameof(Foo.Name), typeof(string), FooLocalizer[nameof(Foo.Name)]), + new SearchItem(nameof(Foo.DateTime), typeof(DateTime), FooLocalizer[nameof(Foo.DateTime)]) + ]; } private static Task OnAddAsync() => Task.FromResult(new Foo() { DateTime = DateTime.Now }); diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 01c5e9ecd6d..2363156fa36 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -5061,6 +5061,7 @@ "DisplayText2": "Fuzzy Search", "DisplayText3": "Display reset", "DisplayText4": "Display Search", + "DisplayText5": "SearchForm", "EditModelTitle": "Edit Test Data Window", "NamePlaceholder": "Please enter your name within 50 characters", "SearchFormDesc": "When UseSearchForm is enabled and SearchItems is not provided, it will default to using TableColumn with Searchable=\"true\". You can customize the metadata through the SearchFormItemMetaData property in TableColumn", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index 98b254d1041..3795fdecec2 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -5061,6 +5061,7 @@ "DisplayText2": "模糊搜索", "DisplayText3": "显示清空", "DisplayText4": "显示搜索", + "DisplayText5": "搜索表单", "EditModelTitle": "编辑测试数据窗口", "NamePlaceholder": "请输入姓名,50字以内", "SearchFormDesc": "使用 UseSearchForm 开启搜索表单时未提供 SearchItems 默认尝试使用设置 Searchable=\"true\"TableColumn 进行构建,可以通过 TableColumn 中的 SearchFormItemMetaData 属性定制化元数据", diff --git a/src/BootstrapBlazor.Server/wwwroot/css/site.css b/src/BootstrapBlazor.Server/wwwroot/css/site.css index 2e76660c99a..4479a59f0e9 100644 --- a/src/BootstrapBlazor.Server/wwwroot/css/site.css +++ b/src/BootstrapBlazor.Server/wwwroot/css/site.css @@ -398,3 +398,21 @@ code { .icon-list .bb-iconpark-icon { --bb-svg-icon-width: 16px; } + +.bb-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); +} + +.bb-grid-item { + display: flex; + flex-direction: row; + align-items: center; +} + + .bb-grid-item > .form-label { + min-width: 80px; + text-align: right; + margin-right: .5rem; + margin-bottom: 0; + } From cfb045929f3324cb6f41ae812b8cb3415704b1e5 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 21:07:35 +0800 Subject: [PATCH 10/35] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/SearchFormTest.cs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index 488b26ff700..7655753a6ed 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -19,16 +19,11 @@ public async Task Filter_Ok() var searchItem = new SearchItem(nameof(Foo.Name), typeof(string), "Name") { Cols = 6 }; var cut = Context.Render(pb => { - pb.Add(a => a.Filter, filterKeyValueAction); - pb.Add(a => a.OnFilterChanged, action => + pb.Add(a => a.OnChanged, action => { filterKeyValueAction = action; return Task.CompletedTask; }); - pb.Add(a => a.FilterChanged, EventCallback.Factory.Create(this, v => - { - filterKeyValueAction = v; - })); pb.Add(a => a.ItemsPerRow, 4); pb.Add(a => a.RowType, RowType.Inline); pb.Add(a => a.LabelAlign, Alignment.Right); @@ -55,9 +50,6 @@ public async Task Filter_Ok() await stringSearchMetaData.ValueChangedHandler("test1"); Assert.Single(filterKeyValueAction.Filters); Assert.Equal("test1", filterKeyValueAction.Filters[0].FieldValue); - - var searchForm = cut.Instance; - Assert.NotNull(searchForm.Filter); } [Fact] @@ -144,10 +136,8 @@ public void Buttons_Ok() [Fact] public void MetaData_Ok() { - var filterKeyValueAction = new FilterKeyValueAction(); var cut = Context.Render(pb => { - pb.Add(a => a.Filter, filterKeyValueAction); pb.Add(a => a.Items, new List() { new SearchItem(nameof(Foo.Count), typeof(string), nameof(Foo.Count)) From 529b4e7d40665e926db99853899183f0f5efcab3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 21:46:00 +0800 Subject: [PATCH 11/35] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20Items=20?= =?UTF-8?q?=E8=B5=8B=E5=80=BC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Dialog/DialogBase.cs | 7 +++++++ .../Components/Dialog/EditDialog.razor.cs | 5 +++++ .../Components/Dialog/SearchDialog.razor | 2 +- .../Components/Dialog/SearchDialog.razor.cs | 12 ++++++++++++ .../Components/Table/Table.razor.Search.cs | 1 - .../Extensions/DialogServiceExtensions.cs | 2 +- src/BootstrapBlazor/Utils/Utility.cs | 2 +- 7 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dialog/DialogBase.cs b/src/BootstrapBlazor/Components/Dialog/DialogBase.cs index 758a157bd32..705718a649f 100644 --- a/src/BootstrapBlazor/Components/Dialog/DialogBase.cs +++ b/src/BootstrapBlazor/Components/Dialog/DialogBase.cs @@ -67,4 +67,11 @@ public abstract class DialogBase : BootstrapModuleComponentBase /// [Parameter] public bool ShowUnsetGroupItemsOnTop { get; set; } + + /// + /// 通过模型标签获得所有搜索列集合 + /// Gets all searchable columns by model attributes + /// + /// + protected IEnumerable GetItemsByColumns() => Utility.GenerateColumns(item => item.GetSearchable()); } diff --git a/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs index 8c02b419e85..99ab49321c7 100644 --- a/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs @@ -173,6 +173,11 @@ protected override void OnParametersSet() CloseConfirmTitle ??= Localizer[nameof(CloseConfirmTitle)]; CloseConfirmContent ??= Localizer[nameof(CloseConfirmContent)]; + + if (BodyTemplate == null) + { + Items ??= GetItemsByColumns(); + } } private async Task OnClosingCallback() diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor index e9dea8214d3..60ff7c99125 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor @@ -12,7 +12,7 @@
} -else if(BodyTemplate != null) +else if (BodyTemplate != null) {
@BodyTemplate.Invoke(Model) diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs index 98145752ae0..4a69ecb602b 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs @@ -100,6 +100,18 @@ protected override void OnParametersSet() ClearIcon ??= IconTheme.GetIconByKey(ComponentIcons.SearchDialogClearIcon); SearchIcon ??= IconTheme.GetIconByKey(ComponentIcons.SearchDialogSearchIcon); + + if (UseSearchForm) + { + return; + } + + if (BodyTemplate != null) + { + return; + } + + Items ??= GetItemsByColumns(); } private async Task OnSearchFormFilterChanged(FilterKeyValueAction action) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs index aaa0659882c..0123e2a1bed 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs @@ -340,7 +340,6 @@ protected async Task ShowSearchDialog() ItemsPerRow = SearchDialogItemsPerRow, LabelAlign = SearchDialogLabelAlign, Size = SearchDialogSize, - Items = Columns.Where(i => i.GetSearchable()), IsDraggable = SearchDialogIsDraggable, ShowMaximizeButton = SearchDialogShowMaximizeButton, ShowUnsetGroupItemsOnTop = ShowUnsetGroupItemsOnTop, diff --git a/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs b/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs index 4fed321476f..1a9aa36ed2e 100644 --- a/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs +++ b/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs @@ -46,7 +46,7 @@ public static async Task ShowSearchDialog(this DialogService service, Se { [nameof(SearchDialog.ShowUnsetGroupItemsOnTop)] = option.ShowUnsetGroupItemsOnTop, [nameof(SearchDialog.ShowLabel)] = option.ShowLabel, - [nameof(SearchDialog.Items)] = option.Items ?? Utility.GenerateColumns(item => item.GetSearchable()), + [nameof(SearchDialog.Items)] = option.Items, [nameof(SearchDialog.OnResetSearchClick)] = new Func(async () => { if (option.OnResetSearchClick != null) diff --git a/src/BootstrapBlazor/Utils/Utility.cs b/src/BootstrapBlazor/Utils/Utility.cs index b9559902117..8835c168b7d 100644 --- a/src/BootstrapBlazor/Utils/Utility.cs +++ b/src/BootstrapBlazor/Utils/Utility.cs @@ -580,7 +580,7 @@ internal static IEnumerable OrderFunc(this List cols /// 筛选条件 /// Filter condition /// - public static IEnumerable GenerateColumns(Func predicate) => GetTableColumns().Where(predicate); + public static IEnumerable GenerateColumns(Func predicate) => GetTableColumns().Where(predicate).ToList(); /// /// RenderTreeBuilder 扩展方法 通过 IEditorItem 与 model 创建 Display 组件 From 229002caa63d518331a5c0d75534aa139acaa43a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 21:46:20 +0800 Subject: [PATCH 12/35] =?UTF-8?q?refactor:=20=E6=8F=90=E5=8D=87=20UseSearc?= =?UTF-8?q?hForm=20=E4=BC=98=E5=85=88=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.Search.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs index 0123e2a1bed..8b928496cf3 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs @@ -298,13 +298,13 @@ protected async Task SearchClick() /// protected async Task ShowSearchDialog() { - if (CustomerSearchModel != null && CustomerSearchTemplate != null) + if (UseSearchForm) { - await DialogService.ShowSearchDialog(CreateCustomerModelDialog()); + await DialogService.ShowSearchDialog(CreateSearchFormDialog()); } - else if (UseSearchForm) + else if (CustomerSearchModel != null && CustomerSearchTemplate != null) { - await DialogService.ShowSearchDialog(CreateSearchFormDialog()); + await DialogService.ShowSearchDialog(CreateCustomerModelDialog()); } else { From f25024940371adebbc7c62fe3421dddeefd6a56a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 22:02:37 +0800 Subject: [PATCH 13/35] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20EditDialog?= =?UTF-8?q?=20=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dialog/EditDialog.razor.cs | 5 +++++ test/UnitTest/Components/EditDialogTest.cs | 21 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 test/UnitTest/Components/EditDialogTest.cs diff --git a/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs index 99ab49321c7..8a5b2038403 100644 --- a/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/EditDialog.razor.cs @@ -165,6 +165,11 @@ protected override void OnParametersSet() { base.OnParametersSet(); + if (Model == null) + { + throw new InvalidOperationException($"参数 {nameof(Model)} 未赋值; {nameof(Model)} can not be null."); + } + CloseButtonIcon ??= IconTheme.GetIconByKey(ComponentIcons.DialogCloseButtonIcon); SaveButtonIcon ??= IconTheme.GetIconByKey(ComponentIcons.DialogSaveButtonIcon); diff --git a/test/UnitTest/Components/EditDialogTest.cs b/test/UnitTest/Components/EditDialogTest.cs new file mode 100644 index 00000000000..1b25a7ac2aa --- /dev/null +++ b/test/UnitTest/Components/EditDialogTest.cs @@ -0,0 +1,21 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the Apache 2.0 License +// See the LICENSE file in the project root for more information. +// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone + +namespace UnitTest.Components; + +public class EditDialogTest : BootstrapBlazorTestBase +{ + [Fact] + public void Items_Ok() + { + var foo = new Foo(); + var cut = Context.Render>(pb => + { + pb.Add(a => a.Model, foo); + }); + + cut.Contains("bb-editor"); + } +} From ef7da26acbce3398619f1fed88ff9a7aff90554a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 22:02:57 +0800 Subject: [PATCH 14/35] =?UTF-8?q?refactor:=20=E6=9B=B4=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E8=99=9A=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Searches/DateTimeRangeSearchMetaData.cs | 2 -- .../Components/Searches/DateTimeSearchMetaData.cs | 2 -- src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs | 2 -- src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs | 2 +- src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs | 2 -- 5 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs index d7700954b0f..23d3a9368e0 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs @@ -78,8 +78,6 @@ public async Task ValueChangedHandler(DateTimeRangeValue? value) /// public override void Reset() { - base.Reset(); - Value = null; } } diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs index d068599e7ee..8aaf70c9488 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs @@ -62,8 +62,6 @@ public async Task ValueChangedHandler(DateTime? value) /// public override void Reset() { - base.Reset(); - Value = null; } } diff --git a/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs index 1dd41943138..330f8fab4c4 100644 --- a/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs @@ -135,8 +135,6 @@ public async Task EndValueChangedHandler(string? value) /// public override void Reset() { - base.Reset(); - StartValue = null; EndValue = null; } diff --git a/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs b/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs index 90e1782815d..4c771449397 100644 --- a/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs +++ b/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs @@ -74,5 +74,5 @@ public abstract class SearchMetaDataBase : ISearchFormItemMetaData /// /// /// - public virtual void Reset() { } + public abstract void Reset(); } diff --git a/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs index 81059048c6e..35797d8d126 100644 --- a/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs @@ -62,8 +62,6 @@ public async Task ValueChangedHandler(string? value) /// public override void Reset() { - base.Reset(); - Value = null; } } From 09797d321b536c351f1d8e04ca69c3dd2c2a7f4c Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 22:16:46 +0800 Subject: [PATCH 15/35] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20Reset=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SearchForm/ISearchItem.cs | 6 ++++++ .../Components/SearchForm/SearchItem.cs | 10 +++++++--- .../Components/Table/Table.razor.Search.cs | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs index b2e4b8389b1..c1c871e138d 100644 --- a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs @@ -79,4 +79,10 @@ public interface ISearchItem /// Filter instance /// FilterKeyValueAction? GetFilter(); + + /// + /// 重置对象搜索值 + /// Resets the object search values + /// + void Reset(); } diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs index 6cc8596a880..9e001c23b74 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs @@ -6,8 +6,8 @@ namespace BootstrapBlazor.Components; /// -/// EditorItem 搜索表单渲染项实体类 -/// EditorItem form field class +/// SearchItem 搜索表单渲染项实体类 +/// SearchItem form field class /// /// /// @@ -67,6 +67,10 @@ public class SearchItem(string fieldName, Type fieldType, string? fieldText = nu /// /// /// - /// public FilterKeyValueAction? GetFilter() => MetaData?.GetFilter(FieldName); + + /// + /// + /// + public void Reset() => MetaData?.Reset(); } diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs index 8b928496cf3..5c2f5dd47c7 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs @@ -228,7 +228,7 @@ protected async Task ResetSearchClick() { foreach (var item in _searchItems) { - item.MetaData?.Reset(); + item.Reset(); } } _searchItems = null; From 352a70aa476db03290c08b7a63071e9b3b43634d Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 22:26:04 +0800 Subject: [PATCH 16/35] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ISearchItemExtensions.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index e2aaeef66ba..53be13d158d 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -50,11 +50,11 @@ public static class ISearchItemExtensions metaData = new SelectSearchMetaData() { Items = new List() - { - new SelectedItem() { Value = "", Text = options.BooleanAllText }, - new SelectedItem() { Value = "True", Text = options.BooleanTrueText }, - new SelectedItem() { Value = "False", Text = options.BooleanFalseText } - } + { + new SelectedItem() { Value = "", Text = options.BooleanAllText }, + new SelectedItem() { Value = "True", Text = options.BooleanTrueText }, + new SelectedItem() { Value = "False", Text = options.BooleanFalseText } + } }; } else if (fieldType.IsDateTime()) From c48c648caf6ce72641cb67d50de53d4df37aa51b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 21 Mar 2026 22:26:15 +0800 Subject: [PATCH 17/35] =?UTF-8?q?test:=20=E6=8F=90=E9=AB=98=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=A6=86=E7=9B=96=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/SearchFormTest.cs | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index 7655753a6ed..b7bed38d04f 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -179,4 +179,59 @@ public void GetFilter_Ok() action = item.GetFilter(); Assert.NotNull(action); } + + [Fact] + public void BuildSearchMetaData_PropertyType_Null_Ok() + { + var options = new SearchFormLocalizerOptions(); + var item = new SearchItem("Name", null!); + + // PropertyType 为 null 返回 null + Assert.Null(item.BuildSearchMetaData(options)); + } + + [Fact] + public void BuildSearchMetaData_Enum_Ok() + { + var options = new SearchFormLocalizerOptions(); + var item = new SearchItem("Name", typeof(EnumEducation)); + + Assert.IsType(item.BuildSearchMetaData(options)); + } + + [Fact] + public void BuildSearchMetaData_Number_Ok() + { + var options = new SearchFormLocalizerOptions(); + var item = new SearchItem("Name", typeof(int)); + + Assert.IsType(item.BuildSearchMetaData(options)); + } + + [Fact] + public void BuildSearchMetaData_Bool_Ok() + { + var options = new SearchFormLocalizerOptions(); + var item = new SearchItem("Name", typeof(bool)); + + Assert.IsType(item.BuildSearchMetaData(options)); + } + + [Fact] + public void BuildSearchMetaData_DateTime_Ok() + { + var options = new SearchFormLocalizerOptions(); + var item = new SearchItem("Name", typeof(DateTime)); + + Assert.IsType(item.BuildSearchMetaData(options)); + } + + [Fact] + public void Reset_Ok() + { + var item = new SearchItem("Name", typeof(string)); + + // Metadata 为空时不报错 + item.Reset(); + } } From 2c614dd1f2d1e2875bd22b028aa4d748d2d3c87b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 09:34:15 +0800 Subject: [PATCH 18/35] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=A2=9E=E5=8A=A0=20RenderButtons=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Dialog/SearchDialog.razor | 13 +++++-------- .../Components/Dialog/SearchDialog.razor.cs | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor index 60ff7c99125..caa447c760e 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor @@ -6,11 +6,10 @@ { + + @RenderButtons + - } else if (BodyTemplate != null) { @@ -18,8 +17,7 @@ else if (BodyTemplate != null) @BodyTemplate.Invoke(Model)
} else @@ -27,8 +25,7 @@ else - - + @RenderButtons diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs index 4a69ecb602b..8e7b7f1c44b 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs @@ -116,9 +116,26 @@ protected override void OnParametersSet() private async Task OnSearchFormFilterChanged(FilterKeyValueAction action) { + // 通知父组件过滤器改变事件,此时并没有触发 OnSearchClick 搜索事件,父组件可以在 OnChanged 事件中获取当前过滤器状态并决定是否触发搜索事件 if (OnChanged != null) { await OnChanged(action); } } + + private RenderFragment RenderButtons => builder => + { + builder.OpenComponent(0); + builder.AddAttribute(10, nameof(DialogCloseButton.Icon), ClearIcon); + builder.AddAttribute(20, nameof(DialogCloseButton.Text), ResetButtonText); + builder.AddAttribute(30, nameof(DialogCloseButton.OnClickWithoutRender), OnResetSearchClick); + builder.CloseComponent(); + + builder.OpenComponent(100); + builder.AddAttribute(101, nameof(DialogCloseButton.Color), Color.Primary); + builder.AddAttribute(110, nameof(DialogCloseButton.Icon), SearchIcon); + builder.AddAttribute(120, nameof(DialogCloseButton.Text), QueryButtonText); + builder.AddAttribute(130, nameof(DialogCloseButton.OnClickWithoutRender), OnSearchClick); + builder.CloseComponent(); + }; } From cbbff37a23206dfb14eead8162ce451becc2a30f Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 09:35:08 +0800 Subject: [PATCH 19/35] =?UTF-8?q?feat(SearchForm):=20=E5=86=85=E7=BD=AE?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=9B=E5=BB=BA=20MetaData=20=E5=AE=9E?= =?UTF-8?q?=E4=BE=8B=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SearchForm/SearchForm.razor.cs | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index f541149d57e..75f1f6c47c6 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -3,6 +3,8 @@ // See the LICENSE file in the project root for more information. // Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone +using Microsoft.Extensions.Localization; + namespace BootstrapBlazor.Components; /// @@ -90,6 +92,10 @@ public partial class SearchForm : IShowLabel [Parameter] public EditorFormGroupType GroupType { get; set; } + [Inject] + [NotNull] + private IStringLocalizer? SearchFormLocalizer { get; set; } + private string? ClassString => CssBuilder.Default("bb-editor bb-search-form") .AddClass("bb-editor-group-row-header", GroupType == EditorFormGroupType.RowHeader) .AddClassFromAttributes(AdditionalAttributes) @@ -122,46 +128,40 @@ protected override void OnParametersSet() Items ??= []; } - /// - /// 获得当前搜索表单过滤结果 - /// Gets the current search form filter result - /// - public FilterKeyValueAction GetFilterKeyValueAction() - { - var action = new FilterKeyValueAction() - { - Filters = [] - }; - - foreach (var item in Items) - { - var filter = item.GetFilter(); - if (filter != null) - { - action.Filters.Add(filter); - } - } - - return action; - } - private RenderFragment AutoGenerateTemplate(ISearchItem item) { - item.ShowLabel ??= ShowLabel; + item.ShowLabel ??= ShowLabel ?? true; item.ShowLabelTooltip ??= ShowLabelTooltip; + item.MetaData ??= item.BuildSearchMetaData(GetSearchOptions()); item.MetaData?.ValueChanged ??= async () => { - var action = GetFilterKeyValueAction(); - if (OnChanged != null) { - await OnChanged.Invoke(action); + var filter = Items.ToFilter(); + await OnChanged.Invoke(filter); } }; return item.CreateRenderFragment(); } + private SearchFormLocalizerOptions? _options; + + private SearchFormLocalizerOptions GetSearchOptions() + { + _options ??= new SearchFormLocalizerOptions() + { + SelectAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.SelectAllText)], + BooleanAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanAllText)], + BooleanTrueText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanTrueText)], + BooleanFalseText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanFalseText)], + NumberStartValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberStartValueLabelText)], + NumberEndValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberEndValueLabelText)] + }; + + return _options.Value; + } + private string? GetCssString(ISearchItem item) { int cols = Math.Max(0, Math.Min(12, item.Cols)); From ed88b3a6f281dcf61ba6a8a926c8c2d06723e5b4 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 09:35:22 +0800 Subject: [PATCH 20/35] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20ToFilter=20?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/ISearchItemExtensions.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index 53be13d158d..935357e3b70 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -220,4 +220,35 @@ private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetaData builder.CloseComponent(); } } + + extension(IEnumerable? items) + { + /// + /// 将 ISearchItem 集合转换为 FilterKeyValueAction 实例 + /// Converts a collection of ISearchItem to an instance of FilterKeyValueAction + /// + public FilterKeyValueAction ToFilter() + { + var action = new FilterKeyValueAction() + { + Filters = [] + }; + + if (items == null) + { + return action; + } + + foreach (var item in items) + { + var filter = item.GetFilter(); + if (filter != null) + { + action.Filters.Add(filter); + } + } + + return action; + } + } } From a9fc310f969a32d1817dfd9e9750a62c8415132b Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 09:38:41 +0800 Subject: [PATCH 21/35] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20Reset=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/SearchFormTest.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index b7bed38d04f..da1674f4aff 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -197,6 +197,7 @@ public void BuildSearchMetaData_Enum_Ok() var item = new SearchItem("Name", typeof(EnumEducation)); Assert.IsType(item.BuildSearchMetaData(options)); + item.Reset(); } [Fact] @@ -206,6 +207,7 @@ public void BuildSearchMetaData_Number_Ok() var item = new SearchItem("Name", typeof(int)); Assert.IsType(item.BuildSearchMetaData(options)); + item.Reset(); } [Fact] @@ -215,6 +217,7 @@ public void BuildSearchMetaData_Bool_Ok() var item = new SearchItem("Name", typeof(bool)); Assert.IsType(item.BuildSearchMetaData(options)); + item.Reset(); } [Fact] @@ -224,6 +227,7 @@ public void BuildSearchMetaData_DateTime_Ok() var item = new SearchItem("Name", typeof(DateTime)); Assert.IsType(item.BuildSearchMetaData(options)); + item.Reset(); } [Fact] From 69f4d1d6346accc5d2b8e4944b8938a04ca06849 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 10:13:06 +0800 Subject: [PATCH 22/35] =?UTF-8?q?feat:=20SearchForm=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=20SearchFormLocalizerOptions=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Dialog/SearchDialog.razor | 2 +- .../Components/Dialog/SearchDialog.razor.cs | 7 +++++++ .../Components/Dialog/SearchDialogOption.cs | 6 ++++++ .../Components/SearchForm/SearchForm.razor.cs | 9 ++++++++- .../Components/Table/Table.razor.Search.cs | 2 ++ .../Extensions/DialogServiceExtensions.cs | 3 ++- 6 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor index caa447c760e..b7e6b419316 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor @@ -5,7 +5,7 @@ @if (UseSearchForm) { + SearchFormLocalizerOptions="SearchFormLocalizerOptions" OnChanged="OnSearchFormFilterChanged"> @RenderButtons diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs index 8e7b7f1c44b..217ff345c80 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialog.razor.cs @@ -80,6 +80,13 @@ public partial class SearchDialog [Parameter] public Func? OnChanged { get; set; } + /// + /// 获得/设置 搜索表单本地化配置项 + /// Gets or sets Search Form Localization Options + /// + [Parameter] + public SearchFormLocalizerOptions? SearchFormLocalizerOptions { get; set; } + [Inject] [NotNull] private IStringLocalizer>? Localizer { get; set; } diff --git a/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs b/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs index 6100d35fff6..2f9b5b02a9e 100644 --- a/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs +++ b/src/BootstrapBlazor/Components/Dialog/SearchDialogOption.cs @@ -110,4 +110,10 @@ public SearchDialogOption() /// Gets or sets the filter changed callback event Func version /// public Func? OnFilterChanged { get; set; } + + /// + /// 获得/设置 搜索表单本地化配置项 + /// Gets or sets Search Form Localization Options + /// + public SearchFormLocalizerOptions? SearchFormLocalizerOptions { get; set; } } diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index 75f1f6c47c6..f6f4ed68335 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -92,6 +92,13 @@ public partial class SearchForm : IShowLabel [Parameter] public EditorFormGroupType GroupType { get; set; } + /// + /// 获得/设置 搜索表单本地化配置项 + /// Gets or sets Search Form Localization Options + /// + [Parameter] + public SearchFormLocalizerOptions? SearchFormLocalizerOptions { get; set; } + [Inject] [NotNull] private IStringLocalizer? SearchFormLocalizer { get; set; } @@ -149,7 +156,7 @@ private RenderFragment AutoGenerateTemplate(ISearchItem item) private SearchFormLocalizerOptions GetSearchOptions() { - _options ??= new SearchFormLocalizerOptions() + _options ??= SearchFormLocalizerOptions ?? new SearchFormLocalizerOptions() { SelectAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.SelectAllText)], BooleanAllText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.BooleanAllText)], diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs index 5c2f5dd47c7..2990594a8a6 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs @@ -224,6 +224,7 @@ protected async Task ResetSearchClick() _searchFilter = null; _advanceSearchFilter = null; + // 重置 SearchItems 中的搜索条件值 if (_searchItems != null) { foreach (var item in _searchItems) @@ -343,6 +344,7 @@ protected async Task ShowSearchDialog() IsDraggable = SearchDialogIsDraggable, ShowMaximizeButton = SearchDialogShowMaximizeButton, ShowUnsetGroupItemsOnTop = ShowUnsetGroupItemsOnTop, + SearchFormLocalizerOptions = SearchFormLocalizerOptions, UseSearchForm = true, SearchItems = SearchFormItems, OnFilterChanged = action => diff --git a/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs b/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs index 1a9aa36ed2e..78ec2d5eed7 100644 --- a/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs +++ b/src/BootstrapBlazor/Extensions/DialogServiceExtensions.cs @@ -70,7 +70,8 @@ public static async Task ShowSearchDialog(this DialogService service, Se [nameof(SearchDialog.BodyTemplate)] = option.DialogBodyTemplate, [nameof(SearchDialog.UseSearchForm)] = option.UseSearchForm, [nameof(SearchDialog.SearchItems)] = option.SearchItems, - [nameof(SearchDialog.OnChanged)] = option.OnFilterChanged + [nameof(SearchDialog.OnChanged)] = option.OnFilterChanged, + [nameof(SearchDialog.SearchFormLocalizerOptions)] = option.SearchFormLocalizerOptions }; option.Component = BootstrapDynamicComponent.CreateComponent>(parameters); await service.Show(option, dialog); From 00f016a31130c0bf3aa5a44f2ce6be61e822465d Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 10:21:14 +0800 Subject: [PATCH 23/35] =?UTF-8?q?refactor:=20=E6=96=B9=E6=B3=95=20BuildSea?= =?UTF-8?q?rchMetaData=20=E4=B8=8D=E8=BF=94=E5=9B=9E=E7=A9=BA=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SearchForm/SearchForm.razor.cs | 2 +- src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index f6f4ed68335..6c7a96eef71 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -140,7 +140,7 @@ private RenderFragment AutoGenerateTemplate(ISearchItem item) item.ShowLabel ??= ShowLabel ?? true; item.ShowLabelTooltip ??= ShowLabelTooltip; item.MetaData ??= item.BuildSearchMetaData(GetSearchOptions()); - item.MetaData?.ValueChanged ??= async () => + item.MetaData.ValueChanged ??= async () => { if (OnChanged != null) { diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index 935357e3b70..4d416185306 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -20,13 +20,8 @@ public static class ISearchItemExtensions /// /// /// - public ISearchFormItemMetaData? BuildSearchMetaData(SearchFormLocalizerOptions options) + public ISearchFormItemMetaData BuildSearchMetaData(SearchFormLocalizerOptions options) { - if (item.PropertyType is null) - { - return null; - } - var fieldType = Nullable.GetUnderlyingType(item.PropertyType) ?? item.PropertyType; ISearchFormItemMetaData? metaData = null; if (fieldType.IsEnum) From a8dc2f18eda21d34ef9aeab7274a65495449c563 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 10:21:42 +0800 Subject: [PATCH 24/35] =?UTF-8?q?refactor:=20=E9=80=BB=E8=BE=91=E4=B8=8B?= =?UTF-8?q?=E6=B2=89=E5=88=B0=20SearchForm=20=E4=B8=AD=E7=AE=80=E5=8C=96?= =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E5=86=85=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Table/Table.razor.Search.cs | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs index 2990594a8a6..7dcfd1ee53d 100644 --- a/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs +++ b/src/BootstrapBlazor/Components/Table/Table.razor.Search.cs @@ -178,6 +178,11 @@ private List SearchFormItems private List GetSearchFormItems() { + if (SearchItems != null) + { + return SearchItems.ToList(); + } + if (SearchFormLocalizerOptions is null) { SearchFormLocalizerOptions = new SearchFormLocalizerOptions() @@ -190,19 +195,6 @@ private List GetSearchFormItems() NumberEndValueLabelText = SearchFormLocalizer[nameof(Components.SearchFormLocalizerOptions.NumberEndValueLabelText)] }; } - - if (SearchItems != null) - { - // 增加内部创建默认 ISearchItemMetaData 逻辑,减少用户使用成本 - foreach (var item in SearchItems) - { - // 创建默认 ISearchItemMetaData - item.MetaData ??= item.BuildSearchMetaData(SearchFormLocalizerOptions.Value); - } - - return SearchItems.ToList(); - } - return GetSearchColumns().Select(i => i.ParseSearchItem(SearchFormLocalizerOptions.Value)).ToList(); } From 093f3a6063b7b378ab011be1e7dd176b0ea70dd7 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 10:22:01 +0800 Subject: [PATCH 25/35] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20SearchForm?= =?UTF-8?q?=20=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/SearchFormTest.cs | 62 ++++++++++++++++------ 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index da1674f4aff..6b4ff1a23b6 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -52,6 +52,35 @@ public async Task Filter_Ok() Assert.Equal("test1", filterKeyValueAction.Filters[0].FieldValue); } + [Fact] + public void SearchFormLocalizerOptions_Ok() + { + var searchFormLocalizerOptions = new SearchFormLocalizerOptions() + { + NumberStartValueLabelText = "Start-Text", + NumberEndValueLabelText = "End-Text" + }; + var cut = Context.Render(pb => + { + pb.Add(a => a.SearchFormLocalizerOptions, searchFormLocalizerOptions); + pb.Add(a => a.Items, new List() + { + new SearchItem(nameof(Foo.Count), typeof(int), nameof(Foo.Count)) + }); + }); + + cut.Contains("Start-Text"); + cut.Contains("End-Text"); + } + + [Fact] + public void ToFilter_Ok() + { + List? items = null; + var filter = items.ToFilter(); + Assert.NotNull(filter); + } + [Fact] public void LabelAlign_Ok() { @@ -180,23 +209,14 @@ public void GetFilter_Ok() Assert.NotNull(action); } - [Fact] - public void BuildSearchMetaData_PropertyType_Null_Ok() - { - var options = new SearchFormLocalizerOptions(); - var item = new SearchItem("Name", null!); - - // PropertyType 为 null 返回 null - Assert.Null(item.BuildSearchMetaData(options)); - } - [Fact] public void BuildSearchMetaData_Enum_Ok() { var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(EnumEducation)); - Assert.IsType(item.BuildSearchMetaData(options)); + item.MetaData = item.BuildSearchMetaData(options); + Assert.IsType(item.MetaData); item.Reset(); } @@ -206,7 +226,8 @@ public void BuildSearchMetaData_Number_Ok() var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(int)); - Assert.IsType(item.BuildSearchMetaData(options)); + item.MetaData = item.BuildSearchMetaData(options); + Assert.IsType(item.MetaData); item.Reset(); } @@ -216,17 +237,28 @@ public void BuildSearchMetaData_Bool_Ok() var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(bool)); - Assert.IsType(item.BuildSearchMetaData(options)); + item.MetaData = item.BuildSearchMetaData(options); + Assert.IsType(item.MetaData); item.Reset(); } [Fact] - public void BuildSearchMetaData_DateTime_Ok() + public void BuildSearchMetaData_DateTimeRange_Ok() { var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(DateTime)); - Assert.IsType(item.BuildSearchMetaData(options)); + item.MetaData = item.BuildSearchMetaData(options); + Assert.IsType(item.MetaData); + item.Reset(); + } + + [Fact] + public void BuildSearchMetaData_DateTime_Ok() + { + var item = new SearchItem("Name", typeof(DateTime)) { MetaData = new DateTimeSearchMetaData() }; + + Assert.IsType(item.MetaData); item.Reset(); } From 87148b18ff5f3812c0bfc4ca6300beb35404cdc7 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 10:22:19 +0800 Subject: [PATCH 26/35] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=20SearchDialog?= =?UTF-8?q?=20=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/SearchDialogTest.cs | 66 ++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/UnitTest/Components/SearchDialogTest.cs diff --git a/test/UnitTest/Components/SearchDialogTest.cs b/test/UnitTest/Components/SearchDialogTest.cs new file mode 100644 index 00000000000..f2968b7bfd0 --- /dev/null +++ b/test/UnitTest/Components/SearchDialogTest.cs @@ -0,0 +1,66 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the Apache 2.0 License +// See the LICENSE file in the project root for more information. +// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone + +namespace UnitTest.Components; + +public class SearchDialogTest : BootstrapBlazorTestBase +{ + [Fact] + public async Task UseSearchForm_Ok() + { + FilterKeyValueAction? filter = null; + bool reset = false; + bool search = false; + var foo = new Foo(); + var cut = Context.Render>(pb => + { + pb.Add(a => a.UseSearchForm, true); + pb.Add(a => a.SearchItems, new List() + { + new SearchItem("Name", typeof(string), "姓名"), + new SearchItem("Address", typeof(string), "地址") + { + MetaData = new StringSearchMetaData() + } + }); + pb.Add(a => a.OnChanged, action => + { + filter = action; + return Task.CompletedTask; + }); + pb.Add(a => a.OnResetSearchClick, () => + { + reset = true; + return Task.CompletedTask; + }); + pb.Add(a => a.OnSearchClick, () => + { + search = true; + return Task.CompletedTask; + }); + }); + + // 测试更新搜索值 + var input = cut.Find("input"); + await cut.InvokeAsync(() => input.Change("test-value")); + Assert.NotNull(filter); + + Assert.Single(filter.Filters); + Assert.Equal("test-value", filter.Filters[0].FieldValue); + + var buttons = cut.FindComponents(); + Assert.Equal(2, buttons.Count); + + // 测试重置按钮 + var resetButton = buttons[0]; + await cut.InvokeAsync(() => resetButton.Instance.OnClickWithoutRender!.Invoke()); + Assert.True(reset); + + // 测试搜索按钮 + var searchButton = buttons[1]; + await cut.InvokeAsync(() => searchButton.Instance.OnClickWithoutRender!.Invoke()); + Assert.True(search); + } +} From 658e706a916e276b6228ead9b3396edd55b40ad2 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 10:41:45 +0800 Subject: [PATCH 27/35] =?UTF-8?q?refactor:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableDialogTest.cs | 37 +++++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/test/UnitTest/Components/TableDialogTest.cs b/test/UnitTest/Components/TableDialogTest.cs index a67c0333005..0792c2af283 100644 --- a/test/UnitTest/Components/TableDialogTest.cs +++ b/test/UnitTest/Components/TableDialogTest.cs @@ -256,9 +256,10 @@ public async Task EditAsync_Ok() var searchButton = cut.Find(".fa-magnifying-glass-plus"); await cut.InvokeAsync(() => searchButton.Click()); - cut.WaitForAssertion(() => cut.Find(".fa-magnifying-glass")); + await cut.WaitForAssertionAsync(() => cut.Find(".fa-magnifying-glass")); var queryButton = cut.Find(".fa-magnifying-glass"); await cut.InvokeAsync(() => queryButton.Click()); + await cut.InvokeAsync(() => modal.Instance.CloseCallback()); table.Render(pb => { @@ -271,9 +272,10 @@ public async Task EditAsync_Ok() searchButton = cut.Find(".fa-magnifying-glass-plus"); await cut.InvokeAsync(() => searchButton.Click()); - cut.WaitForAssertion(() => cut.Find(".fa-magnifying-glass")); + await cut.WaitForAssertionAsync(() => cut.Find(".fa-magnifying-glass")); queryButton = cut.Find(".fa-magnifying-glass"); await cut.InvokeAsync(() => queryButton.Click()); + await cut.InvokeAsync(() => modal.Instance.CloseCallback()); table = cut.FindComponent>(); table.Render(pb => @@ -291,9 +293,38 @@ public async Task EditAsync_Ok() searchButton = cut.Find(".fa-magnifying-glass-plus"); await cut.InvokeAsync(() => searchButton.Click()); - cut.WaitForAssertion(() => cut.Find(".fa-magnifying-glass")); + await cut.WaitForAssertionAsync(() => cut.Find(".fa-magnifying-glass")); queryButton = cut.Find(".fa-magnifying-glass"); await cut.InvokeAsync(() => queryButton.Click()); + await cut.InvokeAsync(() => modal.Instance.CloseCallback()); + + // 开启 UseSearchForm 优先级最高 + table.Render(pb => + { + pb.Add(a => a.UseSearchForm, true); + pb.Add(a => a.SearchItems, new List() + { + new SearchItem("Name", typeof(string), "Name"), + new SearchItem("Address", typeof(string), "Address") + { + MetaData = new StringSearchMetaData() { PlaceHolder = "Address-Placeholder" } + } + }); + }); + // 弹出高级搜索弹窗内部使用 SearchForm 组件,测试 SearchForm 组件的功能 + searchButton = cut.Find(".fa-magnifying-glass-plus"); + await cut.InvokeAsync(() => searchButton.Click()); + await cut.WaitForAssertionAsync(() => cut.Find(".fa-magnifying-glass")); + + // 查找重置搜索按钮关闭弹窗 + var searchDialog = cut.FindComponent>(); + Assert.NotNull(searchDialog); + searchDialog.Contains("Address-Placeholder"); + + // 测试点击重置按钮 + var resetButton = cut.Find(".fa-trash-can"); + await cut.InvokeAsync(() => resetButton.Click()); + await cut.InvokeAsync(() => modal.Instance.CloseCallback()); } [Fact] From 72b7462954dbe4106ce3fd47740d8987d5119077 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 11:04:54 +0800 Subject: [PATCH 28/35] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableDialogTest.cs | 36 ++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/test/UnitTest/Components/TableDialogTest.cs b/test/UnitTest/Components/TableDialogTest.cs index 0792c2af283..98023c54281 100644 --- a/test/UnitTest/Components/TableDialogTest.cs +++ b/test/UnitTest/Components/TableDialogTest.cs @@ -299,6 +299,7 @@ public async Task EditAsync_Ok() await cut.InvokeAsync(() => modal.Instance.CloseCallback()); // 开启 UseSearchForm 优先级最高 + FilterKeyValueAction? filter = null; table.Render(pb => { pb.Add(a => a.UseSearchForm, true); @@ -310,21 +311,54 @@ public async Task EditAsync_Ok() MetaData = new StringSearchMetaData() { PlaceHolder = "Address-Placeholder" } } }); + pb.Add(a => a.OnQueryAsync, options => + { + filter = options.ToFilter(); + return Task.FromResult(new QueryData() + { + Items = items, + TotalCount = items.Count, + IsAdvanceSearch = true, + IsSearch = true, + IsFiltered = true, + IsSorted = true + }); + }); }); // 弹出高级搜索弹窗内部使用 SearchForm 组件,测试 SearchForm 组件的功能 searchButton = cut.Find(".fa-magnifying-glass-plus"); await cut.InvokeAsync(() => searchButton.Click()); await cut.WaitForAssertionAsync(() => cut.Find(".fa-magnifying-glass")); - // 查找重置搜索按钮关闭弹窗 + // 查找高级搜索弹窗组件 var searchDialog = cut.FindComponent>(); Assert.NotNull(searchDialog); searchDialog.Contains("Address-Placeholder"); + // 更新搜索条件值 + var searchItem = searchDialog.FindComponent>(); + Assert.NotNull(searchItem.Instance.OnValueChanged); + await cut.InvokeAsync(() => searchItem.Instance.OnValueChanged("Test_Name")); + + // 测试点击搜索按钮 + searchButton = cut.Find(".fa-magnifying-glass"); + await cut.InvokeAsync(() => searchButton.Click()); + // 关闭弹窗 + await cut.InvokeAsync(() => modal.Instance.CloseCallback()); + Assert.NotNull(filter); + Assert.Single(filter.Filters); + // 测试点击重置按钮 + searchButton = cut.Find(".fa-magnifying-glass-plus"); + await cut.InvokeAsync(() => searchButton.Click()); + await cut.WaitForAssertionAsync(() => cut.Find(".fa-magnifying-glass")); + var resetButton = cut.Find(".fa-trash-can"); await cut.InvokeAsync(() => resetButton.Click()); + // 关闭弹窗 await cut.InvokeAsync(() => modal.Instance.CloseCallback()); + Assert.NotNull(filter); + Assert.Empty(filter.Filters); } [Fact] From b88fe5883448f041dcbbeb24dc6abcb0652f92d0 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 11:06:02 +0800 Subject: [PATCH 29/35] =?UTF-8?q?test:=20=E6=9B=B4=E6=96=B0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/TableDialogTest.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/UnitTest/Components/TableDialogTest.cs b/test/UnitTest/Components/TableDialogTest.cs index 98023c54281..cde07b4287d 100644 --- a/test/UnitTest/Components/TableDialogTest.cs +++ b/test/UnitTest/Components/TableDialogTest.cs @@ -414,7 +414,8 @@ public async Task EditDialog_Ok() await cut.InvokeAsync(() => closeButton.Click()); // 关闭 Swal 确认弹窗 - var swalModal = cut.FindComponents().Last(); + var count = cut.FindComponents().Count; + var swalModal = cut.FindComponents()[count - 1]; await cut.InvokeAsync(() => swalModal.Instance.CloseCallback()); } From a1c8f374347112f1bcff457b2ffcee333c73622e Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 14:28:46 +0800 Subject: [PATCH 30/35] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=E6=89=A9?= =?UTF-8?q?=E5=B1=95=E6=96=B9=E6=B3=95=20CreateSearchItemComponentByMetada?= =?UTF-8?q?ta?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index 6c7a96eef71..99b00d1e924 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -149,7 +149,7 @@ private RenderFragment AutoGenerateTemplate(ISearchItem item) } }; - return item.CreateRenderFragment(); + return item.CreateSearchItemComponentByMetadata(); } private SearchFormLocalizerOptions? _options; From 84a3377b770dae03a5f16a67fde9d720ac142d0d Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 14:29:16 +0800 Subject: [PATCH 31/35] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=A4=BA?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesSearch.razor | 45 ++++++++++--------- src/BootstrapBlazor.Server/Locales/en-US.json | 1 + src/BootstrapBlazor.Server/Locales/zh-CN.json | 1 + 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor index f748ca451f5..2746a64f63f 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor @@ -11,6 +11,29 @@

@((MarkupString)Localizer["SearchTableTips"].Value)

+ +
+

@((MarkupString)Localizer["SearchFormDesc"].Value)

+
@((MarkupString)Localizer["SearchFormTips"].Value)
+
+ + + + + + + + +
+
+ @@ -161,25 +184,3 @@ - - -
-
@((MarkupString)Localizer["SearchFormDesc"].Value)
-
- - - - - - - - -
-
diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 2363156fa36..4c45c2a87d2 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -5066,6 +5066,7 @@ "NamePlaceholder": "Please enter your name within 50 characters", "SearchFormDesc": "When UseSearchForm is enabled and SearchItems is not provided, it will default to using TableColumn with Searchable=\"true\". You can customize the metadata through the SearchFormItemMetaData property in TableColumn", "SearchFormIntro": "Enable the search form feature by setting UseSearchForm=\"true\", and configure the search items within the form using SearchItems, suitable for scenarios with custom complex search conditions", + "SearchFormTips": "Enabling UseSearchForm will prevent SearchTemplate, CustomerSearchModel, and CustomerSearchTemplate from taking effect.", "SearchFormTitle": "Search Form", "SearchTableGroupBoxText": "Search Criteria", "SearchTableIntro": "Set ShowSearch to display the query component, customize the search UI by setting the SearchTemplate template", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index 3795fdecec2..c048bb3dad5 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -5065,6 +5065,7 @@ "EditModelTitle": "编辑测试数据窗口", "NamePlaceholder": "请输入姓名,50字以内", "SearchFormDesc": "使用 UseSearchForm 开启搜索表单时未提供 SearchItems 默认尝试使用设置 Searchable=\"true\"TableColumn 进行构建,可以通过 TableColumn 中的 SearchFormItemMetaData 属性定制化元数据", + "SearchFormTips": "开启 UseSearchFormSearchTemplate CustomerSearchModel CustomerSearchTemplate 均不生效", "SearchFormIntro": "通过设置 UseSearchForm=\"true\" 开启搜索表单功能,通过 SearchItems 配置搜索表单内搜索项,适用于自定义复杂搜索条件的场景", "SearchFormTitle": "搜索表单", "SearchTableGroupBoxText": "搜索条件", From a92deecb99b82694b5e67841a80bb7bf2a79ce35 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 14:37:02 +0800 Subject: [PATCH 32/35] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20Meta=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesSearch.razor.cs | 4 +- .../Attributes/AutoGenerateColumnAttribute.cs | 2 +- .../Components/SearchForm/ISearchItem.cs | 2 +- .../Components/SearchForm/SearchForm.razor.cs | 2 +- .../Components/SearchForm/SearchItem.cs | 2 +- ...Data.cs => CheckboxListSearchMetadata1.cs} | 2 +- ...ata.cs => DateTimeRangeSearchMetadata1.cs} | 2 +- ...MetaData.cs => DateTimeSearchMetadata1.cs} | 2 +- ...etaData.cs => ISearchFormItemMetadata1.cs} | 2 +- ...ta.cs => MultipleSelectSearchMetadata1.cs} | 4 +- ...ta.cs => MultipleStringSearchMetadata1.cs} | 4 +- ...chMetaData.cs => NumberSearchMetadata1.cs} | 2 +- ...MetaDataBase.cs => SearchMetadataBase1.cs} | 12 ++--- ...chMetaData.cs => SelectSearchMetadata1.cs} | 2 +- ...chMetaData.cs => StringSearchMetadata1.cs} | 4 +- .../Components/Table/ITableColumn.cs | 2 +- .../Components/Table/InternalTableColumn.cs | 2 +- .../Components/Table/TableColumn.cs | 2 +- .../Extensions/ISearchItemExtensions.cs | 46 +++++++++---------- .../Extensions/ITableColumnExtensions.cs | 18 ++++---- .../Attributes/AutoGenerateClassTest.cs | 2 +- .../Components/InternalTableColumnTest.cs | 2 +- test/UnitTest/Components/SearchDialogTest.cs | 2 +- .../Components/SearchFormItemMetaDataTest.cs | 16 +++---- test/UnitTest/Components/SearchFormTest.cs | 42 ++++++++--------- test/UnitTest/Components/TableDialogTest.cs | 2 +- test/UnitTest/Components/TableTest.cs | 4 +- .../Extensions/ITableColumnExtensionsTest.cs | 2 +- 28 files changed, 95 insertions(+), 95 deletions(-) rename src/BootstrapBlazor/Components/Searches/{CheckboxListSearchMetaData.cs => CheckboxListSearchMetadata1.cs} (86%) rename src/BootstrapBlazor/Components/Searches/{DateTimeRangeSearchMetaData.cs => DateTimeRangeSearchMetadata1.cs} (97%) rename src/BootstrapBlazor/Components/Searches/{DateTimeSearchMetaData.cs => DateTimeSearchMetadata1.cs} (96%) rename src/BootstrapBlazor/Components/Searches/{ISearchFormItemMetaData.cs => ISearchFormItemMetadata1.cs} (98%) rename src/BootstrapBlazor/Components/Searches/{MultipleSelectSearchMetaData.cs => MultipleSelectSearchMetadata1.cs} (92%) rename src/BootstrapBlazor/Components/Searches/{MultipleStringSearchMetaData.cs => MultipleStringSearchMetadata1.cs} (92%) rename src/BootstrapBlazor/Components/Searches/{NumberSearchMetaData.cs => NumberSearchMetadata1.cs} (98%) rename src/BootstrapBlazor/Components/Searches/{SearchMetaDataBase.cs => SearchMetadataBase1.cs} (83%) rename src/BootstrapBlazor/Components/Searches/{SelectSearchMetaData.cs => SelectSearchMetadata1.cs} (92%) rename src/BootstrapBlazor/Components/Searches/{StringSearchMetaData.cs => StringSearchMetadata1.cs} (93%) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs index 2ecc8269cab..dd9676a8b68 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs @@ -44,13 +44,13 @@ private bool SearchModeFlag set => SearchModeValue = value ? SearchMode.Popup : SearchMode.Top; } - private ISearchFormItemMetaData _nameSearchFormItemMetaData = new StringSearchMetaData() + private ISearchFormItemMetadata1 _nameSearchFormItemMetaData = new StringSearchMetadata1() { PlaceHolder = "请输入名称搜索(支持模糊匹配)", FilterAction = FilterAction.Contains, }; - private ISearchFormItemMetaData _addressSearchFormItemMetaData = new StringSearchMetaData() + private ISearchFormItemMetadata1 _addressSearchFormItemMetaData = new StringSearchMetadata1() { PlaceHolder = "请输入地址搜索(支持模糊匹配)", FilterAction = FilterAction.Contains, diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs index d7d6c0784ef..3a36bc3b0ed 100644 --- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs +++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs @@ -180,7 +180,7 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu bool? ITableColumn.Searchable { get => Searchable; set => Searchable = value ?? false; } - ISearchFormItemMetaData? ITableColumn.SearchFormItemMetaData { get; set; } + ISearchFormItemMetadata1? ITableColumn.SearchFormItemMetaData { get; set; } bool? ITableColumn.Filterable { get => Filterable; set => Filterable = value ?? false; } diff --git a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs index c1c871e138d..2768e8b841f 100644 --- a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs @@ -68,7 +68,7 @@ public interface ISearchItem /// 获得/设置 搜索元数据 /// Gets or sets the search metadata /// - ISearchFormItemMetaData? MetaData { get; set; } + ISearchFormItemMetadata1? MetaData { get; set; } /// /// 获得 过滤器实例 diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index 99b00d1e924..4a78d99307f 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -139,7 +139,7 @@ private RenderFragment AutoGenerateTemplate(ISearchItem item) { item.ShowLabel ??= ShowLabel ?? true; item.ShowLabelTooltip ??= ShowLabelTooltip; - item.MetaData ??= item.BuildSearchMetaData(GetSearchOptions()); + item.MetaData ??= item.BuildSearchMetadata(GetSearchOptions()); item.MetaData.ValueChanged ??= async () => { if (OnChanged != null) diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs index 9e001c23b74..e2adeceb535 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs @@ -62,7 +62,7 @@ public class SearchItem(string fieldName, Type fieldType, string? fieldText = nu /// /// /// - public ISearchFormItemMetaData? MetaData { get; set; } + public ISearchFormItemMetadata1? MetaData { get; set; } /// /// diff --git a/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata1.cs similarity index 86% rename from src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata1.cs index 36ca1990cd1..b03d5977361 100644 --- a/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata1.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// CheckboxList 搜索类型元数据类 /// CheckboxList search meta data class /// -public class CheckboxListSearchMetaData : MultipleSelectSearchMetaData +public class CheckboxListSearchMetadata1 : MultipleSelectSearchMetadata1 { } diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata1.cs similarity index 97% rename from src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata1.cs index 23d3a9368e0..10432324c44 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata1.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 时间区间搜索元数据类 /// DateTime range search meta data class /// -public class DateTimeRangeSearchMetaData : SearchMetaDataBase +public class DateTimeRangeSearchMetadata1 : SearchMetadataBase1 { /// /// 获得/设置 搜索值 diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata1.cs similarity index 96% rename from src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata1.cs index 8aaf70c9488..e6d4d75cdff 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata1.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 时间搜索元数据类 /// DateTime search meta data class /// -public class DateTimeSearchMetaData : SearchMetaDataBase +public class DateTimeSearchMetadata1 : SearchMetadataBase1 { /// /// 获得/设置 搜索值 diff --git a/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs b/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata1.cs similarity index 98% rename from src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs rename to src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata1.cs index eefbb57440c..317f0299020 100644 --- a/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata1.cs @@ -11,7 +11,7 @@ namespace BootstrapBlazor.Components; /// 搜索元数据接口 /// Search metadata interface /// -public interface ISearchFormItemMetaData +public interface ISearchFormItemMetadata1 { /// /// 获得/设置 搜索值变化回调 diff --git a/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata1.cs similarity index 92% rename from src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata1.cs index 85bbb7e9639..579811d1789 100644 --- a/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata1.cs @@ -9,10 +9,10 @@ namespace BootstrapBlazor.Components; /// 多选类型搜索元数据类 /// Multiple select type search metadata class /// -public class MultipleSelectSearchMetaData : SelectSearchMetaData +public class MultipleSelectSearchMetadata1 : SelectSearchMetadata1 { /// - /// + /// /// public override FilterKeyValueAction? GetFilter(string fieldName) { diff --git a/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata1.cs similarity index 92% rename from src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata1.cs index 2e0eb2d0572..627af955f6f 100644 --- a/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata1.cs @@ -9,10 +9,10 @@ namespace BootstrapBlazor.Components; /// 多个字符串搜索元数据类 /// Multiple string search meta data class /// -public class MultipleStringSearchMetaData : StringSearchMetaData +public class MultipleStringSearchMetadata1 : StringSearchMetadata1 { /// - /// + /// /// public override FilterKeyValueAction? GetFilter(string fieldName) { diff --git a/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/NumberSearchMetadata1.cs similarity index 98% rename from src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/NumberSearchMetadata1.cs index 330f8fab4c4..1c1c96e0569 100644 --- a/src/BootstrapBlazor/Components/Searches/NumberSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/NumberSearchMetadata1.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 数字类型搜索元数据类 /// Number type search metadata class /// -public class NumberSearchMetaData : SearchMetaDataBase +public class NumberSearchMetadata1 : SearchMetadataBase1 { /// /// 获得/设置 搜索开始值 diff --git a/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs b/src/BootstrapBlazor/Components/Searches/SearchMetadataBase1.cs similarity index 83% rename from src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs rename to src/BootstrapBlazor/Components/Searches/SearchMetadataBase1.cs index 4c771449397..455673c7a09 100644 --- a/src/BootstrapBlazor/Components/Searches/SearchMetaDataBase.cs +++ b/src/BootstrapBlazor/Components/Searches/SearchMetadataBase1.cs @@ -11,7 +11,7 @@ namespace BootstrapBlazor.Components; /// 搜索元数据基类 /// Search meta data base class /// -public abstract class SearchMetaDataBase : ISearchFormItemMetaData +public abstract class SearchMetadataBase1 : ISearchFormItemMetadata1 { /// /// 获得/设置 占位符文本 @@ -20,29 +20,29 @@ public abstract class SearchMetaDataBase : ISearchFormItemMetaData public string? PlaceHolder { get; set; } /// - /// + /// /// public Func? ValueChanged { get; set; } /// - /// + /// /// [JsonConverter(typeof(JsonStringEnumConverter))] public FilterLogic FilterLogic { get; set; } /// - /// + /// /// [JsonConverter(typeof(JsonStringEnumConverter))] public FilterAction FilterAction { get; set; } /// - /// + /// /// public Func? GetFilterCallback { get; set; } /// - /// + /// /// public abstract FilterKeyValueAction? GetFilter(string fieldName); diff --git a/src/BootstrapBlazor/Components/Searches/SelectSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata1.cs similarity index 92% rename from src/BootstrapBlazor/Components/Searches/SelectSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/SelectSearchMetadata1.cs index 63c6dd2ccf8..8a95f9e01c3 100644 --- a/src/BootstrapBlazor/Components/Searches/SelectSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata1.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 选择类型搜索元数据类 /// Select type search metadata class /// -public class SelectSearchMetaData : StringSearchMetaData +public class SelectSearchMetadata1 : StringSearchMetadata1 { /// /// 获得/设置 选择项集合 diff --git a/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs b/src/BootstrapBlazor/Components/Searches/StringSearchMetadata1.cs similarity index 93% rename from src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs rename to src/BootstrapBlazor/Components/Searches/StringSearchMetadata1.cs index 35797d8d126..40a5671084d 100644 --- a/src/BootstrapBlazor/Components/Searches/StringSearchMetaData.cs +++ b/src/BootstrapBlazor/Components/Searches/StringSearchMetadata1.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 字符串搜索元数据类 /// String search meta data class /// -public class StringSearchMetaData : SearchMetaDataBase +public class StringSearchMetadata1 : SearchMetadataBase1 { /// /// 获得/设置 搜索值 @@ -18,7 +18,7 @@ public class StringSearchMetaData : SearchMetaDataBase public string? Value { get; set; } /// - /// + /// /// public override FilterKeyValueAction? GetFilter(string fieldName) { diff --git a/src/BootstrapBlazor/Components/Table/ITableColumn.cs b/src/BootstrapBlazor/Components/Table/ITableColumn.cs index e3e2da6ba9b..b35df10c132 100644 --- a/src/BootstrapBlazor/Components/Table/ITableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/ITableColumn.cs @@ -51,7 +51,7 @@ public interface ITableColumn : IEditorItem /// 获得/设置 搜索元数据 /// Gets or sets the search metadata /// - ISearchFormItemMetaData? SearchFormItemMetaData { get; set; } + ISearchFormItemMetadata1? SearchFormItemMetaData { get; set; } /// /// 获得/设置 列宽 diff --git a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs index 5a0ac686ae1..f6da110e59b 100644 --- a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs @@ -37,7 +37,7 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = /// /// /// - public ISearchFormItemMetaData? SearchFormItemMetaData { get; set; } + public ISearchFormItemMetadata1? SearchFormItemMetaData { get; set; } /// /// diff --git a/src/BootstrapBlazor/Components/Table/TableColumn.cs b/src/BootstrapBlazor/Components/Table/TableColumn.cs index f7a67a40ae3..c62a4f02ed3 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumn.cs @@ -154,7 +154,7 @@ public class TableColumn : BootstrapComponentBase, ITableColumn /// /// [Parameter] - public ISearchFormItemMetaData? SearchFormItemMetaData { get; set; } + public ISearchFormItemMetadata1? SearchFormItemMetaData { get; set; } /// /// diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index 4d416185306..e5ec7935533 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -16,24 +16,24 @@ public static class ISearchItemExtensions extension(ISearchItem item) { /// - /// 通过 数据类型推断 实例 + /// 通过 数据类型推断 实例 /// /// /// - public ISearchFormItemMetaData BuildSearchMetaData(SearchFormLocalizerOptions options) + public ISearchFormItemMetadata1 BuildSearchMetadata(SearchFormLocalizerOptions options) { var fieldType = Nullable.GetUnderlyingType(item.PropertyType) ?? item.PropertyType; - ISearchFormItemMetaData? metaData = null; + ISearchFormItemMetadata1? metaData = null; if (fieldType.IsEnum) { - metaData = new SelectSearchMetaData() + metaData = new SelectSearchMetadata1() { Items = fieldType.ToSelectList(new SelectedItem() { Value = "", Text = options.SelectAllText }), }; } else if (fieldType.IsNumberWithDotSeparator()) { - metaData = new NumberSearchMetaData() + metaData = new NumberSearchMetadata1() { StartValueLabelText = options.NumberStartValueLabelText, EndValueLabelText = options.NumberEndValueLabelText, @@ -42,7 +42,7 @@ public ISearchFormItemMetaData BuildSearchMetaData(SearchFormLocalizerOptions op } else if (fieldType.IsBoolean()) { - metaData = new SelectSearchMetaData() + metaData = new SelectSearchMetadata1() { Items = new List() { @@ -54,11 +54,11 @@ public ISearchFormItemMetaData BuildSearchMetaData(SearchFormLocalizerOptions op } else if (fieldType.IsDateTime()) { - metaData = new DateTimeRangeSearchMetaData(); + metaData = new DateTimeRangeSearchMetadata1(); } else { - metaData = new StringSearchMetaData() { FilterAction = FilterAction.Contains }; + metaData = new StringSearchMetadata1() { FilterAction = FilterAction.Contains }; } return metaData; @@ -68,30 +68,30 @@ public ISearchFormItemMetaData BuildSearchMetaData(SearchFormLocalizerOptions op /// 创建 搜索项的 RenderFragment 实例 /// Creates a RenderFragment instance for the search item /// - public RenderFragment CreateRenderFragment() => builder => + public RenderFragment CreateSearchItemComponentByMetadata() => builder => { var metaData = item.MetaData; switch (metaData) { - case NumberSearchMetaData numberSearchMetaData: + case NumberSearchMetadata1 numberSearchMetaData: builder.AddNumberSearchComponent(item, numberSearchMetaData); break; - case DateTimeSearchMetaData datetimeSearchMetaData: + case DateTimeSearchMetadata1 datetimeSearchMetaData: builder.AddDateTimeSearchComponent(item, datetimeSearchMetaData); break; - case DateTimeRangeSearchMetaData datetimeRangeSearchMetaData: + case DateTimeRangeSearchMetadata1 datetimeRangeSearchMetaData: builder.AddDateTimeRangeSearchComponent(item, datetimeRangeSearchMetaData); break; - case CheckboxListSearchMetaData checkboxListSearchMetaData: + case CheckboxListSearchMetadata1 checkboxListSearchMetaData: builder.AddCheckboxListSearchComponent(item, checkboxListSearchMetaData); break; - case MultipleSelectSearchMetaData multipleSelectSearchMetaData: + case MultipleSelectSearchMetadata1 multipleSelectSearchMetaData: builder.AddMultipleSelectSearchComponent(item, multipleSelectSearchMetaData); break; - case SelectSearchMetaData selectSearchMetaData: + case SelectSearchMetadata1 selectSearchMetaData: builder.AddSelectSearchComponent(item, selectSearchMetaData); break; - case StringSearchMetaData stringSearchMetaData: + case StringSearchMetadata1 stringSearchMetaData: builder.AddStringSearchComponent(item, stringSearchMetaData); break; } @@ -100,7 +100,7 @@ public RenderFragment CreateRenderFragment() => builder => extension(RenderTreeBuilder builder) { - private void AddStringSearchComponent(ISearchItem item, StringSearchMetaData stringSearchMetaData) + private void AddStringSearchComponent(ISearchItem item, StringSearchMetadata1 stringSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(BootstrapInput<>.Value), stringSearchMetaData.Value); @@ -113,7 +113,7 @@ private void AddStringSearchComponent(ISearchItem item, StringSearchMetaData str builder.CloseComponent(); } - private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetaData numberSearchMetaData) + private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata1 numberSearchMetaData) { if (item.ShowLabel ?? true) { @@ -149,7 +149,7 @@ private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetaData num builder.CloseComponent(); } - private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetaData selectSearchMetaData) + private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetadata1 selectSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(Select<>.Value), selectSearchMetaData.Value); @@ -163,7 +163,7 @@ private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetaData sel builder.CloseComponent(); } - private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSearchMetaData multipleSelectSearchMetaData) + private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSearchMetadata1 multipleSelectSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(MultiSelect<>.Value), multipleSelectSearchMetaData.Value); @@ -177,7 +177,7 @@ private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSe builder.CloseComponent(); } - private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearchMetaData checkboxListSearchMetaData) + private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearchMetadata1 checkboxListSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(CheckboxList<>.Value), checkboxListSearchMetaData.Value); @@ -190,7 +190,7 @@ private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearch builder.CloseComponent(); } - private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSearchMetaData datetimeRangeSearchMetaData) + private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSearchMetadata1 datetimeRangeSearchMetaData) { builder.OpenComponent(0); builder.AddAttribute(10, nameof(DateTimeRange.Value), datetimeRangeSearchMetaData.Value); @@ -202,7 +202,7 @@ private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSear builder.CloseComponent(); } - private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetaData datetimeSearchMetaData) + private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetadata1 datetimeSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(DateTimePicker<>.Value), datetimeSearchMetaData.Value); diff --git a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs index 7534e364570..4e2d94dfd1a 100644 --- a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs @@ -35,7 +35,7 @@ public static ISearchItem ParseSearchItem(this ITableColumn column, SearchFormLo return item; } - private static ISearchFormItemMetaData BuildSearchMetaData(this ITableColumn column, SearchFormLocalizerOptions options) + private static ISearchFormItemMetadata1 BuildSearchMetaData(this ITableColumn column, SearchFormLocalizerOptions options) { // 自定义搜索项逻辑 if (column.SearchFormItemMetaData is not null) @@ -43,33 +43,33 @@ private static ISearchFormItemMetaData BuildSearchMetaData(this ITableColumn col return column.SearchFormItemMetaData; } - ISearchFormItemMetaData? metaData = null; + ISearchFormItemMetadata1? metaData = null; var fieldType = column.PropertyType; var type = Nullable.GetUnderlyingType(fieldType) ?? fieldType; if (Utility.IsCheckboxList(type, column.ComponentType)) { - metaData = new CheckboxListSearchMetaData() + metaData = new CheckboxListSearchMetadata1() { Items = column.Items }; } else if (column.IsLookup()) { - metaData = new SelectSearchMetaData() + metaData = new SelectSearchMetadata1() { Items = column.Items }; } else if (type.IsEnum) { - metaData = new SelectSearchMetaData() + metaData = new SelectSearchMetadata1() { Items = type.ToSelectList(new SelectedItem() { Value = "", Text = options.SelectAllText }), }; } else if (fieldType.IsNumberWithDotSeparator()) { - metaData = new NumberSearchMetaData() + metaData = new NumberSearchMetadata1() { StartValueLabelText = options.NumberStartValueLabelText, EndValueLabelText = options.NumberEndValueLabelText, @@ -78,7 +78,7 @@ private static ISearchFormItemMetaData BuildSearchMetaData(this ITableColumn col } else if (fieldType.IsBoolean()) { - metaData = new SelectSearchMetaData() + metaData = new SelectSearchMetadata1() { Items = new List() { @@ -90,11 +90,11 @@ private static ISearchFormItemMetaData BuildSearchMetaData(this ITableColumn col } else if (fieldType.IsDateTime()) { - metaData = new DateTimeRangeSearchMetaData(); + metaData = new DateTimeRangeSearchMetadata1(); } else { - metaData = new StringSearchMetaData() { FilterAction = FilterAction.Contains }; + metaData = new StringSearchMetadata1() { FilterAction = FilterAction.Contains }; } return metaData; diff --git a/test/UnitTest/Attributes/AutoGenerateClassTest.cs b/test/UnitTest/Attributes/AutoGenerateClassTest.cs index a4c5ef3155f..fbf37a7e1f9 100644 --- a/test/UnitTest/Attributes/AutoGenerateClassTest.cs +++ b/test/UnitTest/Attributes/AutoGenerateClassTest.cs @@ -210,7 +210,7 @@ public void AutoGenerateColumn_Ok() attrInterface.IsRequiredWhenEdit = true; Assert.True(attrInterface.IsRequiredWhenEdit); - attrInterface.SearchFormItemMetaData = new StringSearchMetaData(); + attrInterface.SearchFormItemMetaData = new StringSearchMetadata1(); Assert.NotNull(attrInterface.SearchFormItemMetaData); var attrEditor = (IEditorItem)attr; diff --git a/test/UnitTest/Components/InternalTableColumnTest.cs b/test/UnitTest/Components/InternalTableColumnTest.cs index bd7445f72d0..d220a144018 100644 --- a/test/UnitTest/Components/InternalTableColumnTest.cs +++ b/test/UnitTest/Components/InternalTableColumnTest.cs @@ -87,7 +87,7 @@ public void InternalTableColumn_Ok() SetValue("IsRequiredWhenEdit", true); SetValue("LookupService", null); SetValue("IgnoreWhenExport", true); - SetValue("SearchFormItemMetaData", new StringSearchMetaData()); + SetValue("SearchFormItemMetaData", new StringSearchMetadata1()); void SetValue(string propertyName, object? val) => type!.GetProperty(propertyName)!.SetValue(instance, val); } diff --git a/test/UnitTest/Components/SearchDialogTest.cs b/test/UnitTest/Components/SearchDialogTest.cs index f2968b7bfd0..05416c384ff 100644 --- a/test/UnitTest/Components/SearchDialogTest.cs +++ b/test/UnitTest/Components/SearchDialogTest.cs @@ -22,7 +22,7 @@ public async Task UseSearchForm_Ok() new SearchItem("Name", typeof(string), "姓名"), new SearchItem("Address", typeof(string), "地址") { - MetaData = new StringSearchMetaData() + MetaData = new StringSearchMetadata1() } }); pb.Add(a => a.OnChanged, action => diff --git a/test/UnitTest/Components/SearchFormItemMetaDataTest.cs b/test/UnitTest/Components/SearchFormItemMetaDataTest.cs index 6c05486dae0..cfc78e27dc7 100644 --- a/test/UnitTest/Components/SearchFormItemMetaDataTest.cs +++ b/test/UnitTest/Components/SearchFormItemMetaDataTest.cs @@ -11,7 +11,7 @@ public class SearchFormItemMetaDataTest public async Task StringSearchFormItemMetaData_Ok() { var valueChanged = false; - var meta = new StringSearchMetaData() + var meta = new StringSearchMetadata1() { FilterAction = FilterAction.Contains, FilterLogic = FilterLogic.And, @@ -69,7 +69,7 @@ public async Task StringSearchFormItemMetaData_Ok() [Fact] public void MultipleStringSearchFormItemMetaData_Ok() { - var meta = new MultipleStringSearchMetaData(); + var meta = new MultipleStringSearchMetadata1(); var action = meta.GetFilter("fieldKey"); Assert.Null(action); @@ -105,7 +105,7 @@ public void MultipleStringSearchFormItemMetaData_Ok() [Fact] public void SelectSearchFormItemMetaData_Ok() { - var meta = new SelectSearchMetaData() + var meta = new SelectSearchMetadata1() { Items = new List() { @@ -127,7 +127,7 @@ public void SelectSearchFormItemMetaData_Ok() [Fact] public void MultipleSelectSearchFormItemMetaData_Ok() { - var meta = new MultipleSelectSearchMetaData() + var meta = new MultipleSelectSearchMetadata1() { Items = new List() { @@ -170,7 +170,7 @@ public void MultipleSelectSearchFormItemMetaData_Ok() [Fact] public async Task NumberSearchFormItemMetaData_Ok() { - var meta = new NumberSearchMetaData() + var meta = new NumberSearchMetadata1() { StartValue = "10", StartValueLabelText = "Start", @@ -258,7 +258,7 @@ public async Task NumberSearchFormItemMetaData_Ok() [Fact] public void NumberSearchFormItemMetaData_ValueType() { - var meta = new NumberSearchMetaData() + var meta = new NumberSearchMetadata1() { StartValue = "10", EndValue = "20", @@ -279,7 +279,7 @@ public void NumberSearchFormItemMetaData_ValueType() [Fact] public async Task DateTimeSearchFormItemMetaData_Ok() { - var meta = new DateTimeSearchMetaData(); + var meta = new DateTimeSearchMetadata1(); var valueChanged = false; meta.ValueChanged = () => @@ -318,7 +318,7 @@ public async Task DateTimeSearchFormItemMetaData_Ok() [Fact] public async Task DateTimeRangeSearchFormItemMetaData_Ok() { - var meta = new DateTimeRangeSearchMetaData(); + var meta = new DateTimeRangeSearchMetadata1(); var valueChanged = false; meta.ValueChanged = () => diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index 6b4ff1a23b6..4d72e64d702 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -11,7 +11,7 @@ public class SearchFormTest : BootstrapBlazorTestBase public async Task Filter_Ok() { var filterKeyValueAction = new FilterKeyValueAction(); - var stringSearchMetaData = new StringSearchMetaData() + var stringSearchMetaData = new StringSearchMetadata1() { PlaceHolder = "placeholder-val", Value = "foo-name-value" @@ -84,7 +84,7 @@ public void ToFilter_Ok() [Fact] public void LabelAlign_Ok() { - var stringSearchMetaData = new StringSearchMetaData() + var stringSearchMetaData = new StringSearchMetadata1() { PlaceHolder = "placeholder-val", Value = "foo-name-value" @@ -130,11 +130,11 @@ public void Group_Ok() { GroupName = "Group1", GroupOrder= 1, - MetaData = new StringSearchMetaData() + MetaData = new StringSearchMetadata1() }, new SearchItem(nameof(Foo.Address), typeof(string), "Address") { - MetaData = new StringSearchMetaData() + MetaData = new StringSearchMetadata1() } }); }); @@ -171,27 +171,27 @@ public void MetaData_Ok() { new SearchItem(nameof(Foo.Count), typeof(string), nameof(Foo.Count)) { - MetaData = new NumberSearchMetaData() + MetaData = new NumberSearchMetadata1() }, new SearchItem(nameof(Foo.DateTime), typeof(string), nameof(Foo.DateTime)) { - MetaData = new DateTimeSearchMetaData() + MetaData = new DateTimeSearchMetadata1() }, new SearchItem(nameof(Foo.DateTime), typeof(string), nameof(Foo.DateTime)) { - MetaData = new DateTimeRangeSearchMetaData() + MetaData = new DateTimeRangeSearchMetadata1() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new SelectSearchMetaData() + MetaData = new SelectSearchMetadata1() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new MultipleSelectSearchMetaData() + MetaData = new MultipleSelectSearchMetadata1() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new CheckboxListSearchMetaData() + MetaData = new CheckboxListSearchMetadata1() } }); }); @@ -204,7 +204,7 @@ public void GetFilter_Ok() var action = item.GetFilter(); Assert.Null(action); - item.MetaData = new StringSearchMetaData() { Value = "test" }; + item.MetaData = new StringSearchMetadata1() { Value = "test" }; action = item.GetFilter(); Assert.NotNull(action); } @@ -215,8 +215,8 @@ public void BuildSearchMetaData_Enum_Ok() var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(EnumEducation)); - item.MetaData = item.BuildSearchMetaData(options); - Assert.IsType(item.MetaData); + item.MetaData = item.BuildSearchMetadata(options); + Assert.IsType(item.MetaData); item.Reset(); } @@ -226,8 +226,8 @@ public void BuildSearchMetaData_Number_Ok() var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(int)); - item.MetaData = item.BuildSearchMetaData(options); - Assert.IsType(item.MetaData); + item.MetaData = item.BuildSearchMetadata(options); + Assert.IsType(item.MetaData); item.Reset(); } @@ -237,8 +237,8 @@ public void BuildSearchMetaData_Bool_Ok() var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(bool)); - item.MetaData = item.BuildSearchMetaData(options); - Assert.IsType(item.MetaData); + item.MetaData = item.BuildSearchMetadata(options); + Assert.IsType(item.MetaData); item.Reset(); } @@ -248,17 +248,17 @@ public void BuildSearchMetaData_DateTimeRange_Ok() var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(DateTime)); - item.MetaData = item.BuildSearchMetaData(options); - Assert.IsType(item.MetaData); + item.MetaData = item.BuildSearchMetadata(options); + Assert.IsType(item.MetaData); item.Reset(); } [Fact] public void BuildSearchMetaData_DateTime_Ok() { - var item = new SearchItem("Name", typeof(DateTime)) { MetaData = new DateTimeSearchMetaData() }; + var item = new SearchItem("Name", typeof(DateTime)) { MetaData = new DateTimeSearchMetadata1() }; - Assert.IsType(item.MetaData); + Assert.IsType(item.MetaData); item.Reset(); } diff --git a/test/UnitTest/Components/TableDialogTest.cs b/test/UnitTest/Components/TableDialogTest.cs index cde07b4287d..5e6337bed42 100644 --- a/test/UnitTest/Components/TableDialogTest.cs +++ b/test/UnitTest/Components/TableDialogTest.cs @@ -308,7 +308,7 @@ public async Task EditAsync_Ok() new SearchItem("Name", typeof(string), "Name"), new SearchItem("Address", typeof(string), "Address") { - MetaData = new StringSearchMetaData() { PlaceHolder = "Address-Placeholder" } + MetaData = new StringSearchMetadata1() { PlaceHolder = "Address-Placeholder" } } }); pb.Add(a => a.OnQueryAsync, options => diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 2a7dc14e032..6c10ba46fda 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -641,7 +641,7 @@ public async Task UseSearchForm_Ok() builder.AddAttribute(1, "Field", true); builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, nameof(Foo.Complete), typeof(bool))); builder.AddAttribute(3, nameof(ITableColumn.Searchable), true); - builder.AddAttribute(3, nameof(ITableColumn.SearchFormItemMetaData), new StringSearchMetaData()); + builder.AddAttribute(3, nameof(ITableColumn.SearchFormItemMetaData), new StringSearchMetadata1()); builder.CloseComponent(); }); }); @@ -679,7 +679,7 @@ public async Task SearchItems_Ok() pb.Add(a => a.UseSearchForm, true); pb.Add(a => a.SearchItems, new List() { - new SearchItem("Name", typeof(string), "名称") { MetaData = new StringSearchMetaData() } + new SearchItem("Name", typeof(string), "名称") { MetaData = new StringSearchMetadata1() } }); pb.Add(a => a.SearchMode, SearchMode.Top); pb.Add(a => a.OnQueryAsync, OnQueryAsync(localizer)); diff --git a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs index 458191b5e88..a8e36082d4e 100644 --- a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs +++ b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs @@ -115,7 +115,7 @@ public void CopyValue_Ok() IsRequiredWhenAdd = true, IsRequiredWhenEdit = true, - SearchFormItemMetaData = new StringSearchMetaData() + SearchFormItemMetaData = new StringSearchMetadata1() }; col.CopyValue(attr); Assert.NotNull(col.ComponentType); From 10f276bd94ab72f41f1d64d1bd2fdb3d5a8dd2fc Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 14:43:10 +0800 Subject: [PATCH 33/35] =?UTF-8?q?refactor:=20=E9=87=8D=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesSearch.razor.cs | 4 +- .../Attributes/AutoGenerateColumnAttribute.cs | 2 +- .../Components/SearchForm/ISearchItem.cs | 2 +- .../Components/SearchForm/SearchItem.cs | 2 +- ...data1.cs => CheckboxListSearchMetadata.cs} | 2 +- ...ata1.cs => DateTimeRangeSearchMetadata.cs} | 2 +- ...Metadata1.cs => DateTimeSearchMetadata.cs} | 2 +- ...etadata1.cs => ISearchFormItemMetadata.cs} | 2 +- ...ta1.cs => MultipleSelectSearchMetadata.cs} | 4 +- ...ta1.cs => MultipleStringSearchMetadata.cs} | 4 +- ...chMetadata1.cs => NumberSearchMetadata.cs} | 2 +- ...MetadataBase1.cs => SearchMetadataBase.cs} | 12 +++--- ...chMetadata1.cs => SelectSearchMetadata.cs} | 2 +- ...chMetadata1.cs => StringSearchMetadata.cs} | 4 +- .../Components/Table/ITableColumn.cs | 2 +- .../Components/Table/InternalTableColumn.cs | 2 +- .../Components/Table/TableColumn.cs | 2 +- .../Extensions/ISearchItemExtensions.cs | 38 +++++++++---------- .../Extensions/ITableColumnExtensions.cs | 16 ++++---- .../Components/SearchFormItemMetaDataTest.cs | 14 +++---- test/UnitTest/Components/SearchFormTest.cs | 24 ++++++------ 21 files changed, 72 insertions(+), 72 deletions(-) rename src/BootstrapBlazor/Components/Searches/{CheckboxListSearchMetadata1.cs => CheckboxListSearchMetadata.cs} (86%) rename src/BootstrapBlazor/Components/Searches/{DateTimeRangeSearchMetadata1.cs => DateTimeRangeSearchMetadata.cs} (97%) rename src/BootstrapBlazor/Components/Searches/{DateTimeSearchMetadata1.cs => DateTimeSearchMetadata.cs} (96%) rename src/BootstrapBlazor/Components/Searches/{ISearchFormItemMetadata1.cs => ISearchFormItemMetadata.cs} (98%) rename src/BootstrapBlazor/Components/Searches/{MultipleSelectSearchMetadata1.cs => MultipleSelectSearchMetadata.cs} (92%) rename src/BootstrapBlazor/Components/Searches/{MultipleStringSearchMetadata1.cs => MultipleStringSearchMetadata.cs} (92%) rename src/BootstrapBlazor/Components/Searches/{NumberSearchMetadata1.cs => NumberSearchMetadata.cs} (98%) rename src/BootstrapBlazor/Components/Searches/{SearchMetadataBase1.cs => SearchMetadataBase.cs} (83%) rename src/BootstrapBlazor/Components/Searches/{SelectSearchMetadata1.cs => SelectSearchMetadata.cs} (92%) rename src/BootstrapBlazor/Components/Searches/{StringSearchMetadata1.cs => StringSearchMetadata.cs} (93%) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs index dd9676a8b68..44da036aabe 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs @@ -44,13 +44,13 @@ private bool SearchModeFlag set => SearchModeValue = value ? SearchMode.Popup : SearchMode.Top; } - private ISearchFormItemMetadata1 _nameSearchFormItemMetaData = new StringSearchMetadata1() + private ISearchFormItemMetadata _nameSearchFormItemMetaData = new StringSearchMetadata1() { PlaceHolder = "请输入名称搜索(支持模糊匹配)", FilterAction = FilterAction.Contains, }; - private ISearchFormItemMetadata1 _addressSearchFormItemMetaData = new StringSearchMetadata1() + private ISearchFormItemMetadata _addressSearchFormItemMetaData = new StringSearchMetadata1() { PlaceHolder = "请输入地址搜索(支持模糊匹配)", FilterAction = FilterAction.Contains, diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs index 3a36bc3b0ed..b8f65695910 100644 --- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs +++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs @@ -180,7 +180,7 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu bool? ITableColumn.Searchable { get => Searchable; set => Searchable = value ?? false; } - ISearchFormItemMetadata1? ITableColumn.SearchFormItemMetaData { get; set; } + ISearchFormItemMetadata? ITableColumn.SearchFormItemMetaData { get; set; } bool? ITableColumn.Filterable { get => Filterable; set => Filterable = value ?? false; } diff --git a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs index 2768e8b841f..d84ffbd4611 100644 --- a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs @@ -68,7 +68,7 @@ public interface ISearchItem /// 获得/设置 搜索元数据 /// Gets or sets the search metadata /// - ISearchFormItemMetadata1? MetaData { get; set; } + ISearchFormItemMetadata? MetaData { get; set; } /// /// 获得 过滤器实例 diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs index e2adeceb535..aa77c9a35e1 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs @@ -62,7 +62,7 @@ public class SearchItem(string fieldName, Type fieldType, string? fieldText = nu /// /// /// - public ISearchFormItemMetadata1? MetaData { get; set; } + public ISearchFormItemMetadata? MetaData { get; set; } /// /// diff --git a/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata.cs similarity index 86% rename from src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata.cs index b03d5977361..a22bbe78031 100644 --- a/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/CheckboxListSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// CheckboxList 搜索类型元数据类 /// CheckboxList search meta data class /// -public class CheckboxListSearchMetadata1 : MultipleSelectSearchMetadata1 +public class CheckboxListSearchMetadata : MultipleSelectSearchMetadata { } diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata.cs similarity index 97% rename from src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata.cs index 10432324c44..3d52e3f8493 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeRangeSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 时间区间搜索元数据类 /// DateTime range search meta data class /// -public class DateTimeRangeSearchMetadata1 : SearchMetadataBase1 +public class DateTimeRangeSearchMetadata : SearchMetadataBase { /// /// 获得/设置 搜索值 diff --git a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata.cs similarity index 96% rename from src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata.cs index e6d4d75cdff..5e526678f3a 100644 --- a/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/DateTimeSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 时间搜索元数据类 /// DateTime search meta data class /// -public class DateTimeSearchMetadata1 : SearchMetadataBase1 +public class DateTimeSearchMetadata : SearchMetadataBase { /// /// 获得/设置 搜索值 diff --git a/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata1.cs b/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata.cs similarity index 98% rename from src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata.cs index 317f0299020..03557144c1c 100644 --- a/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/ISearchFormItemMetadata.cs @@ -11,7 +11,7 @@ namespace BootstrapBlazor.Components; /// 搜索元数据接口 /// Search metadata interface /// -public interface ISearchFormItemMetadata1 +public interface ISearchFormItemMetadata { /// /// 获得/设置 搜索值变化回调 diff --git a/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata.cs similarity index 92% rename from src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata.cs index 579811d1789..499406fb7ef 100644 --- a/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/MultipleSelectSearchMetadata.cs @@ -9,10 +9,10 @@ namespace BootstrapBlazor.Components; /// 多选类型搜索元数据类 /// Multiple select type search metadata class /// -public class MultipleSelectSearchMetadata1 : SelectSearchMetadata1 +public class MultipleSelectSearchMetadata : SelectSearchMetadata { /// - /// + /// /// public override FilterKeyValueAction? GetFilter(string fieldName) { diff --git a/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs similarity index 92% rename from src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs index 627af955f6f..a76ff09f50b 100644 --- a/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs @@ -9,10 +9,10 @@ namespace BootstrapBlazor.Components; /// 多个字符串搜索元数据类 /// Multiple string search meta data class /// -public class MultipleStringSearchMetadata1 : StringSearchMetadata1 +public class MultipleStringSearchMetadata : StringSearchMetadata1 { /// - /// + /// /// public override FilterKeyValueAction? GetFilter(string fieldName) { diff --git a/src/BootstrapBlazor/Components/Searches/NumberSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/NumberSearchMetadata.cs similarity index 98% rename from src/BootstrapBlazor/Components/Searches/NumberSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/NumberSearchMetadata.cs index 1c1c96e0569..c0c2bc5029f 100644 --- a/src/BootstrapBlazor/Components/Searches/NumberSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/NumberSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 数字类型搜索元数据类 /// Number type search metadata class /// -public class NumberSearchMetadata1 : SearchMetadataBase1 +public class NumberSearchMetadata : SearchMetadataBase { /// /// 获得/设置 搜索开始值 diff --git a/src/BootstrapBlazor/Components/Searches/SearchMetadataBase1.cs b/src/BootstrapBlazor/Components/Searches/SearchMetadataBase.cs similarity index 83% rename from src/BootstrapBlazor/Components/Searches/SearchMetadataBase1.cs rename to src/BootstrapBlazor/Components/Searches/SearchMetadataBase.cs index 455673c7a09..be00a6a3949 100644 --- a/src/BootstrapBlazor/Components/Searches/SearchMetadataBase1.cs +++ b/src/BootstrapBlazor/Components/Searches/SearchMetadataBase.cs @@ -11,7 +11,7 @@ namespace BootstrapBlazor.Components; /// 搜索元数据基类 /// Search meta data base class /// -public abstract class SearchMetadataBase1 : ISearchFormItemMetadata1 +public abstract class SearchMetadataBase : ISearchFormItemMetadata { /// /// 获得/设置 占位符文本 @@ -20,29 +20,29 @@ public abstract class SearchMetadataBase1 : ISearchFormItemMetadata1 public string? PlaceHolder { get; set; } /// - /// + /// /// public Func? ValueChanged { get; set; } /// - /// + /// /// [JsonConverter(typeof(JsonStringEnumConverter))] public FilterLogic FilterLogic { get; set; } /// - /// + /// /// [JsonConverter(typeof(JsonStringEnumConverter))] public FilterAction FilterAction { get; set; } /// - /// + /// /// public Func? GetFilterCallback { get; set; } /// - /// + /// /// public abstract FilterKeyValueAction? GetFilter(string fieldName); diff --git a/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs similarity index 92% rename from src/BootstrapBlazor/Components/Searches/SelectSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs index 8a95f9e01c3..77c40ed7b8e 100644 --- a/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 选择类型搜索元数据类 /// Select type search metadata class /// -public class SelectSearchMetadata1 : StringSearchMetadata1 +public class SelectSearchMetadata : StringSearchMetadata1 { /// /// 获得/设置 选择项集合 diff --git a/src/BootstrapBlazor/Components/Searches/StringSearchMetadata1.cs b/src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs similarity index 93% rename from src/BootstrapBlazor/Components/Searches/StringSearchMetadata1.cs rename to src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs index 40a5671084d..8f8c9210a96 100644 --- a/src/BootstrapBlazor/Components/Searches/StringSearchMetadata1.cs +++ b/src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 字符串搜索元数据类 /// String search meta data class /// -public class StringSearchMetadata1 : SearchMetadataBase1 +public class StringSearchMetadata1 : SearchMetadataBase { /// /// 获得/设置 搜索值 @@ -18,7 +18,7 @@ public class StringSearchMetadata1 : SearchMetadataBase1 public string? Value { get; set; } /// - /// + /// /// public override FilterKeyValueAction? GetFilter(string fieldName) { diff --git a/src/BootstrapBlazor/Components/Table/ITableColumn.cs b/src/BootstrapBlazor/Components/Table/ITableColumn.cs index b35df10c132..db86234a944 100644 --- a/src/BootstrapBlazor/Components/Table/ITableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/ITableColumn.cs @@ -51,7 +51,7 @@ public interface ITableColumn : IEditorItem /// 获得/设置 搜索元数据 /// Gets or sets the search metadata /// - ISearchFormItemMetadata1? SearchFormItemMetaData { get; set; } + ISearchFormItemMetadata? SearchFormItemMetaData { get; set; } /// /// 获得/设置 列宽 diff --git a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs index f6da110e59b..447d17cb5f6 100644 --- a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs @@ -37,7 +37,7 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = /// /// /// - public ISearchFormItemMetadata1? SearchFormItemMetaData { get; set; } + public ISearchFormItemMetadata? SearchFormItemMetaData { get; set; } /// /// diff --git a/src/BootstrapBlazor/Components/Table/TableColumn.cs b/src/BootstrapBlazor/Components/Table/TableColumn.cs index c62a4f02ed3..6b59fbd1734 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumn.cs @@ -154,7 +154,7 @@ public class TableColumn : BootstrapComponentBase, ITableColumn /// /// [Parameter] - public ISearchFormItemMetadata1? SearchFormItemMetaData { get; set; } + public ISearchFormItemMetadata? SearchFormItemMetaData { get; set; } /// /// diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index e5ec7935533..6e0ab49089e 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -16,24 +16,24 @@ public static class ISearchItemExtensions extension(ISearchItem item) { /// - /// 通过 数据类型推断 实例 + /// 通过 数据类型推断 实例 /// /// /// - public ISearchFormItemMetadata1 BuildSearchMetadata(SearchFormLocalizerOptions options) + public ISearchFormItemMetadata BuildSearchMetadata(SearchFormLocalizerOptions options) { var fieldType = Nullable.GetUnderlyingType(item.PropertyType) ?? item.PropertyType; - ISearchFormItemMetadata1? metaData = null; + ISearchFormItemMetadata? metaData = null; if (fieldType.IsEnum) { - metaData = new SelectSearchMetadata1() + metaData = new SelectSearchMetadata() { Items = fieldType.ToSelectList(new SelectedItem() { Value = "", Text = options.SelectAllText }), }; } else if (fieldType.IsNumberWithDotSeparator()) { - metaData = new NumberSearchMetadata1() + metaData = new NumberSearchMetadata() { StartValueLabelText = options.NumberStartValueLabelText, EndValueLabelText = options.NumberEndValueLabelText, @@ -42,7 +42,7 @@ public ISearchFormItemMetadata1 BuildSearchMetadata(SearchFormLocalizerOptions o } else if (fieldType.IsBoolean()) { - metaData = new SelectSearchMetadata1() + metaData = new SelectSearchMetadata() { Items = new List() { @@ -54,7 +54,7 @@ public ISearchFormItemMetadata1 BuildSearchMetadata(SearchFormLocalizerOptions o } else if (fieldType.IsDateTime()) { - metaData = new DateTimeRangeSearchMetadata1(); + metaData = new DateTimeRangeSearchMetadata(); } else { @@ -73,22 +73,22 @@ public RenderFragment CreateSearchItemComponentByMetadata() => builder => var metaData = item.MetaData; switch (metaData) { - case NumberSearchMetadata1 numberSearchMetaData: + case NumberSearchMetadata numberSearchMetaData: builder.AddNumberSearchComponent(item, numberSearchMetaData); break; - case DateTimeSearchMetadata1 datetimeSearchMetaData: + case DateTimeSearchMetadata datetimeSearchMetaData: builder.AddDateTimeSearchComponent(item, datetimeSearchMetaData); break; - case DateTimeRangeSearchMetadata1 datetimeRangeSearchMetaData: + case DateTimeRangeSearchMetadata datetimeRangeSearchMetaData: builder.AddDateTimeRangeSearchComponent(item, datetimeRangeSearchMetaData); break; - case CheckboxListSearchMetadata1 checkboxListSearchMetaData: + case CheckboxListSearchMetadata checkboxListSearchMetaData: builder.AddCheckboxListSearchComponent(item, checkboxListSearchMetaData); break; - case MultipleSelectSearchMetadata1 multipleSelectSearchMetaData: + case MultipleSelectSearchMetadata multipleSelectSearchMetaData: builder.AddMultipleSelectSearchComponent(item, multipleSelectSearchMetaData); break; - case SelectSearchMetadata1 selectSearchMetaData: + case SelectSearchMetadata selectSearchMetaData: builder.AddSelectSearchComponent(item, selectSearchMetaData); break; case StringSearchMetadata1 stringSearchMetaData: @@ -113,7 +113,7 @@ private void AddStringSearchComponent(ISearchItem item, StringSearchMetadata1 st builder.CloseComponent(); } - private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata1 numberSearchMetaData) + private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata numberSearchMetaData) { if (item.ShowLabel ?? true) { @@ -149,7 +149,7 @@ private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata1 nu builder.CloseComponent(); } - private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetadata1 selectSearchMetaData) + private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetadata selectSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(Select<>.Value), selectSearchMetaData.Value); @@ -163,7 +163,7 @@ private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetadata1 se builder.CloseComponent(); } - private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSearchMetadata1 multipleSelectSearchMetaData) + private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSearchMetadata multipleSelectSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(MultiSelect<>.Value), multipleSelectSearchMetaData.Value); @@ -177,7 +177,7 @@ private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSe builder.CloseComponent(); } - private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearchMetadata1 checkboxListSearchMetaData) + private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearchMetadata checkboxListSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(CheckboxList<>.Value), checkboxListSearchMetaData.Value); @@ -190,7 +190,7 @@ private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearch builder.CloseComponent(); } - private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSearchMetadata1 datetimeRangeSearchMetaData) + private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSearchMetadata datetimeRangeSearchMetaData) { builder.OpenComponent(0); builder.AddAttribute(10, nameof(DateTimeRange.Value), datetimeRangeSearchMetaData.Value); @@ -202,7 +202,7 @@ private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSear builder.CloseComponent(); } - private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetadata1 datetimeSearchMetaData) + private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetadata datetimeSearchMetaData) { builder.OpenComponent>(0); builder.AddAttribute(10, nameof(DateTimePicker<>.Value), datetimeSearchMetaData.Value); diff --git a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs index 4e2d94dfd1a..a690e366d1b 100644 --- a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs @@ -35,7 +35,7 @@ public static ISearchItem ParseSearchItem(this ITableColumn column, SearchFormLo return item; } - private static ISearchFormItemMetadata1 BuildSearchMetaData(this ITableColumn column, SearchFormLocalizerOptions options) + private static ISearchFormItemMetadata BuildSearchMetaData(this ITableColumn column, SearchFormLocalizerOptions options) { // 自定义搜索项逻辑 if (column.SearchFormItemMetaData is not null) @@ -43,33 +43,33 @@ private static ISearchFormItemMetadata1 BuildSearchMetaData(this ITableColumn co return column.SearchFormItemMetaData; } - ISearchFormItemMetadata1? metaData = null; + ISearchFormItemMetadata? metaData = null; var fieldType = column.PropertyType; var type = Nullable.GetUnderlyingType(fieldType) ?? fieldType; if (Utility.IsCheckboxList(type, column.ComponentType)) { - metaData = new CheckboxListSearchMetadata1() + metaData = new CheckboxListSearchMetadata() { Items = column.Items }; } else if (column.IsLookup()) { - metaData = new SelectSearchMetadata1() + metaData = new SelectSearchMetadata() { Items = column.Items }; } else if (type.IsEnum) { - metaData = new SelectSearchMetadata1() + metaData = new SelectSearchMetadata() { Items = type.ToSelectList(new SelectedItem() { Value = "", Text = options.SelectAllText }), }; } else if (fieldType.IsNumberWithDotSeparator()) { - metaData = new NumberSearchMetadata1() + metaData = new NumberSearchMetadata() { StartValueLabelText = options.NumberStartValueLabelText, EndValueLabelText = options.NumberEndValueLabelText, @@ -78,7 +78,7 @@ private static ISearchFormItemMetadata1 BuildSearchMetaData(this ITableColumn co } else if (fieldType.IsBoolean()) { - metaData = new SelectSearchMetadata1() + metaData = new SelectSearchMetadata() { Items = new List() { @@ -90,7 +90,7 @@ private static ISearchFormItemMetadata1 BuildSearchMetaData(this ITableColumn co } else if (fieldType.IsDateTime()) { - metaData = new DateTimeRangeSearchMetadata1(); + metaData = new DateTimeRangeSearchMetadata(); } else { diff --git a/test/UnitTest/Components/SearchFormItemMetaDataTest.cs b/test/UnitTest/Components/SearchFormItemMetaDataTest.cs index cfc78e27dc7..af3084c08a3 100644 --- a/test/UnitTest/Components/SearchFormItemMetaDataTest.cs +++ b/test/UnitTest/Components/SearchFormItemMetaDataTest.cs @@ -69,7 +69,7 @@ public async Task StringSearchFormItemMetaData_Ok() [Fact] public void MultipleStringSearchFormItemMetaData_Ok() { - var meta = new MultipleStringSearchMetadata1(); + var meta = new MultipleStringSearchMetadata(); var action = meta.GetFilter("fieldKey"); Assert.Null(action); @@ -105,7 +105,7 @@ public void MultipleStringSearchFormItemMetaData_Ok() [Fact] public void SelectSearchFormItemMetaData_Ok() { - var meta = new SelectSearchMetadata1() + var meta = new SelectSearchMetadata() { Items = new List() { @@ -127,7 +127,7 @@ public void SelectSearchFormItemMetaData_Ok() [Fact] public void MultipleSelectSearchFormItemMetaData_Ok() { - var meta = new MultipleSelectSearchMetadata1() + var meta = new MultipleSelectSearchMetadata() { Items = new List() { @@ -170,7 +170,7 @@ public void MultipleSelectSearchFormItemMetaData_Ok() [Fact] public async Task NumberSearchFormItemMetaData_Ok() { - var meta = new NumberSearchMetadata1() + var meta = new NumberSearchMetadata() { StartValue = "10", StartValueLabelText = "Start", @@ -258,7 +258,7 @@ public async Task NumberSearchFormItemMetaData_Ok() [Fact] public void NumberSearchFormItemMetaData_ValueType() { - var meta = new NumberSearchMetadata1() + var meta = new NumberSearchMetadata() { StartValue = "10", EndValue = "20", @@ -279,7 +279,7 @@ public void NumberSearchFormItemMetaData_ValueType() [Fact] public async Task DateTimeSearchFormItemMetaData_Ok() { - var meta = new DateTimeSearchMetadata1(); + var meta = new DateTimeSearchMetadata(); var valueChanged = false; meta.ValueChanged = () => @@ -318,7 +318,7 @@ public async Task DateTimeSearchFormItemMetaData_Ok() [Fact] public async Task DateTimeRangeSearchFormItemMetaData_Ok() { - var meta = new DateTimeRangeSearchMetadata1(); + var meta = new DateTimeRangeSearchMetadata(); var valueChanged = false; meta.ValueChanged = () => diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index 4d72e64d702..9fde0ab79c6 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -171,27 +171,27 @@ public void MetaData_Ok() { new SearchItem(nameof(Foo.Count), typeof(string), nameof(Foo.Count)) { - MetaData = new NumberSearchMetadata1() + MetaData = new NumberSearchMetadata() }, new SearchItem(nameof(Foo.DateTime), typeof(string), nameof(Foo.DateTime)) { - MetaData = new DateTimeSearchMetadata1() + MetaData = new DateTimeSearchMetadata() }, new SearchItem(nameof(Foo.DateTime), typeof(string), nameof(Foo.DateTime)) { - MetaData = new DateTimeRangeSearchMetadata1() + MetaData = new DateTimeRangeSearchMetadata() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new SelectSearchMetadata1() + MetaData = new SelectSearchMetadata() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new MultipleSelectSearchMetadata1() + MetaData = new MultipleSelectSearchMetadata() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new CheckboxListSearchMetadata1() + MetaData = new CheckboxListSearchMetadata() } }); }); @@ -216,7 +216,7 @@ public void BuildSearchMetaData_Enum_Ok() var item = new SearchItem("Name", typeof(EnumEducation)); item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + Assert.IsType(item.MetaData); item.Reset(); } @@ -227,7 +227,7 @@ public void BuildSearchMetaData_Number_Ok() var item = new SearchItem("Name", typeof(int)); item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + Assert.IsType(item.MetaData); item.Reset(); } @@ -238,7 +238,7 @@ public void BuildSearchMetaData_Bool_Ok() var item = new SearchItem("Name", typeof(bool)); item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + Assert.IsType(item.MetaData); item.Reset(); } @@ -249,16 +249,16 @@ public void BuildSearchMetaData_DateTimeRange_Ok() var item = new SearchItem("Name", typeof(DateTime)); item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + Assert.IsType(item.MetaData); item.Reset(); } [Fact] public void BuildSearchMetaData_DateTime_Ok() { - var item = new SearchItem("Name", typeof(DateTime)) { MetaData = new DateTimeSearchMetadata1() }; + var item = new SearchItem("Name", typeof(DateTime)) { MetaData = new DateTimeSearchMetadata() }; - Assert.IsType(item.MetaData); + Assert.IsType(item.MetaData); item.Reset(); } From 38626b6d30548c13b41ed572796901c3c2cf7525 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 14:59:24 +0800 Subject: [PATCH 34/35] =?UTF-8?q?refactor:=20=E5=B1=9E=E6=80=A7=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Samples/Table/TablesSearch.razor | 4 +- .../Samples/Table/TablesSearch.razor.cs | 4 +- src/BootstrapBlazor.Server/Locales/en-US.json | 2 +- src/BootstrapBlazor.Server/Locales/zh-CN.json | 2 +- .../Attributes/AutoGenerateColumnAttribute.cs | 2 +- .../Components/SearchForm/ISearchItem.cs | 2 +- .../Components/SearchForm/SearchForm.razor.cs | 4 +- .../Components/SearchForm/SearchItem.cs | 8 +- .../Searches/MultipleStringSearchMetadata.cs | 2 +- .../Searches/SelectSearchMetadata.cs | 2 +- .../Searches/StringSearchMetadata.cs | 2 +- .../Components/Table/ITableColumn.cs | 2 +- .../Components/Table/InternalTableColumn.cs | 4 +- .../Components/Table/TableColumn.cs | 2 +- .../Extensions/ISearchItemExtensions.cs | 96 +++++++++---------- .../Extensions/ITableColumnExtensions.cs | 12 +-- .../Attributes/AutoGenerateClassTest.cs | 4 +- .../Components/InternalTableColumnTest.cs | 2 +- test/UnitTest/Components/SearchDialogTest.cs | 2 +- ...Test.cs => SearchFormItemMetadataTest1.cs} | 20 ++-- test/UnitTest/Components/SearchFormTest.cs | 62 ++++++------ test/UnitTest/Components/TableDialogTest.cs | 2 +- test/UnitTest/Components/TableTest.cs | 4 +- .../Extensions/ITableColumnExtensionsTest.cs | 4 +- 24 files changed, 125 insertions(+), 125 deletions(-) rename test/UnitTest/Components/{SearchFormItemMetaDataTest.cs => SearchFormItemMetadataTest1.cs} (95%) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor index 2746a64f63f..2a3838689a0 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor @@ -26,8 +26,8 @@ OnQueryAsync="@OnQueryAsync" OnAddAsync="@OnAddAsync" OnSaveAsync="@OnSaveAsync" OnDeleteAsync="@OnDeleteAsync"> - - + + diff --git a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs index 44da036aabe..eac28dafe95 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Table/TablesSearch.razor.cs @@ -44,13 +44,13 @@ private bool SearchModeFlag set => SearchModeValue = value ? SearchMode.Popup : SearchMode.Top; } - private ISearchFormItemMetadata _nameSearchFormItemMetaData = new StringSearchMetadata1() + private ISearchFormItemMetadata _nameSearchFormItemMetadata = new StringSearchMetadata() { PlaceHolder = "请输入名称搜索(支持模糊匹配)", FilterAction = FilterAction.Contains, }; - private ISearchFormItemMetadata _addressSearchFormItemMetaData = new StringSearchMetadata1() + private ISearchFormItemMetadata _addressSearchFormItemMetadata = new StringSearchMetadata() { PlaceHolder = "请输入地址搜索(支持模糊匹配)", FilterAction = FilterAction.Contains, diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 4c45c2a87d2..8900002c188 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -5064,7 +5064,7 @@ "DisplayText5": "SearchForm", "EditModelTitle": "Edit Test Data Window", "NamePlaceholder": "Please enter your name within 50 characters", - "SearchFormDesc": "When UseSearchForm is enabled and SearchItems is not provided, it will default to using TableColumn with Searchable=\"true\". You can customize the metadata through the SearchFormItemMetaData property in TableColumn", + "SearchFormDesc": "When UseSearchForm is enabled and SearchItems is not provided, it will default to using TableColumn with Searchable=\"true\". You can customize the metadata through the SearchFormItemMetadata property in TableColumn", "SearchFormIntro": "Enable the search form feature by setting UseSearchForm=\"true\", and configure the search items within the form using SearchItems, suitable for scenarios with custom complex search conditions", "SearchFormTips": "Enabling UseSearchForm will prevent SearchTemplate, CustomerSearchModel, and CustomerSearchTemplate from taking effect.", "SearchFormTitle": "Search Form", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index c048bb3dad5..8f412d54191 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -5064,7 +5064,7 @@ "DisplayText5": "搜索表单", "EditModelTitle": "编辑测试数据窗口", "NamePlaceholder": "请输入姓名,50字以内", - "SearchFormDesc": "使用 UseSearchForm 开启搜索表单时未提供 SearchItems 默认尝试使用设置 Searchable=\"true\"TableColumn 进行构建,可以通过 TableColumn 中的 SearchFormItemMetaData 属性定制化元数据", + "SearchFormDesc": "使用 UseSearchForm 开启搜索表单时未提供 SearchItems 默认尝试使用设置 Searchable=\"true\"TableColumn 进行构建,可以通过 TableColumn 中的 SearchFormItemMetadata 属性定制化元数据", "SearchFormTips": "开启 UseSearchFormSearchTemplate CustomerSearchModel CustomerSearchTemplate 均不生效", "SearchFormIntro": "通过设置 UseSearchForm=\"true\" 开启搜索表单功能,通过 SearchItems 配置搜索表单内搜索项,适用于自定义复杂搜索条件的场景", "SearchFormTitle": "搜索表单", diff --git a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs index b8f65695910..cb307e7320e 100644 --- a/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs +++ b/src/BootstrapBlazor/Attributes/AutoGenerateColumnAttribute.cs @@ -180,7 +180,7 @@ public class AutoGenerateColumnAttribute : AutoGenerateBaseAttribute, ITableColu bool? ITableColumn.Searchable { get => Searchable; set => Searchable = value ?? false; } - ISearchFormItemMetadata? ITableColumn.SearchFormItemMetaData { get; set; } + ISearchFormItemMetadata? ITableColumn.SearchFormItemMetadata { get; set; } bool? ITableColumn.Filterable { get => Filterable; set => Filterable = value ?? false; } diff --git a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs index d84ffbd4611..831ea646ed2 100644 --- a/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/ISearchItem.cs @@ -68,7 +68,7 @@ public interface ISearchItem /// 获得/设置 搜索元数据 /// Gets or sets the search metadata /// - ISearchFormItemMetadata? MetaData { get; set; } + ISearchFormItemMetadata? Metadata { get; set; } /// /// 获得 过滤器实例 diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs index 4a78d99307f..8241074c84a 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchForm.razor.cs @@ -139,8 +139,8 @@ private RenderFragment AutoGenerateTemplate(ISearchItem item) { item.ShowLabel ??= ShowLabel ?? true; item.ShowLabelTooltip ??= ShowLabelTooltip; - item.MetaData ??= item.BuildSearchMetadata(GetSearchOptions()); - item.MetaData.ValueChanged ??= async () => + item.Metadata ??= item.BuildSearchMetadata(GetSearchOptions()); + item.Metadata.ValueChanged ??= async () => { if (OnChanged != null) { diff --git a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs index aa77c9a35e1..5a33c25c5b2 100644 --- a/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs +++ b/src/BootstrapBlazor/Components/SearchForm/SearchItem.cs @@ -60,17 +60,17 @@ public class SearchItem(string fieldName, Type fieldType, string? fieldText = nu public int Cols { get; set; } /// - /// + /// /// - public ISearchFormItemMetadata? MetaData { get; set; } + public ISearchFormItemMetadata? Metadata { get; set; } /// /// /// - public FilterKeyValueAction? GetFilter() => MetaData?.GetFilter(FieldName); + public FilterKeyValueAction? GetFilter() => Metadata?.GetFilter(FieldName); /// /// /// - public void Reset() => MetaData?.Reset(); + public void Reset() => Metadata?.Reset(); } diff --git a/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs b/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs index a76ff09f50b..8a41f158b61 100644 --- a/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs +++ b/src/BootstrapBlazor/Components/Searches/MultipleStringSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 多个字符串搜索元数据类 /// Multiple string search meta data class /// -public class MultipleStringSearchMetadata : StringSearchMetadata1 +public class MultipleStringSearchMetadata : StringSearchMetadata { /// /// diff --git a/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs b/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs index 77c40ed7b8e..b21c6164046 100644 --- a/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs +++ b/src/BootstrapBlazor/Components/Searches/SelectSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 选择类型搜索元数据类 /// Select type search metadata class /// -public class SelectSearchMetadata : StringSearchMetadata1 +public class SelectSearchMetadata : StringSearchMetadata { /// /// 获得/设置 选择项集合 diff --git a/src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs b/src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs index 8f8c9210a96..3ae4cd720aa 100644 --- a/src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs +++ b/src/BootstrapBlazor/Components/Searches/StringSearchMetadata.cs @@ -9,7 +9,7 @@ namespace BootstrapBlazor.Components; /// 字符串搜索元数据类 /// String search meta data class /// -public class StringSearchMetadata1 : SearchMetadataBase +public class StringSearchMetadata : SearchMetadataBase { /// /// 获得/设置 搜索值 diff --git a/src/BootstrapBlazor/Components/Table/ITableColumn.cs b/src/BootstrapBlazor/Components/Table/ITableColumn.cs index db86234a944..60e109953a8 100644 --- a/src/BootstrapBlazor/Components/Table/ITableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/ITableColumn.cs @@ -51,7 +51,7 @@ public interface ITableColumn : IEditorItem /// 获得/设置 搜索元数据 /// Gets or sets the search metadata /// - ISearchFormItemMetadata? SearchFormItemMetaData { get; set; } + ISearchFormItemMetadata? SearchFormItemMetadata { get; set; } /// /// 获得/设置 列宽 diff --git a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs index 447d17cb5f6..d36ff2dc3b9 100644 --- a/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/InternalTableColumn.cs @@ -35,9 +35,9 @@ class InternalTableColumn(string fieldName, Type fieldType, string? fieldText = public bool? Searchable { get; set; } /// - /// + /// /// - public ISearchFormItemMetadata? SearchFormItemMetaData { get; set; } + public ISearchFormItemMetadata? SearchFormItemMetadata { get; set; } /// /// diff --git a/src/BootstrapBlazor/Components/Table/TableColumn.cs b/src/BootstrapBlazor/Components/Table/TableColumn.cs index 6b59fbd1734..24c9ad56a52 100644 --- a/src/BootstrapBlazor/Components/Table/TableColumn.cs +++ b/src/BootstrapBlazor/Components/Table/TableColumn.cs @@ -154,7 +154,7 @@ public class TableColumn : BootstrapComponentBase, ITableColumn /// /// [Parameter] - public ISearchFormItemMetadata? SearchFormItemMetaData { get; set; } + public ISearchFormItemMetadata? SearchFormItemMetadata { get; set; } /// /// diff --git a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs index 6e0ab49089e..196bb72e892 100644 --- a/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ISearchItemExtensions.cs @@ -58,7 +58,7 @@ public ISearchFormItemMetadata BuildSearchMetadata(SearchFormLocalizerOptions op } else { - metaData = new StringSearchMetadata1() { FilterAction = FilterAction.Contains }; + metaData = new StringSearchMetadata() { FilterAction = FilterAction.Contains }; } return metaData; @@ -70,29 +70,29 @@ public ISearchFormItemMetadata BuildSearchMetadata(SearchFormLocalizerOptions op /// public RenderFragment CreateSearchItemComponentByMetadata() => builder => { - var metaData = item.MetaData; + var metaData = item.Metadata; switch (metaData) { - case NumberSearchMetadata numberSearchMetaData: - builder.AddNumberSearchComponent(item, numberSearchMetaData); + case NumberSearchMetadata numberSearchMetadata: + builder.AddNumberSearchComponent(item, numberSearchMetadata); break; - case DateTimeSearchMetadata datetimeSearchMetaData: - builder.AddDateTimeSearchComponent(item, datetimeSearchMetaData); + case DateTimeSearchMetadata datetimeSearchMetadata: + builder.AddDateTimeSearchComponent(item, datetimeSearchMetadata); break; - case DateTimeRangeSearchMetadata datetimeRangeSearchMetaData: - builder.AddDateTimeRangeSearchComponent(item, datetimeRangeSearchMetaData); + case DateTimeRangeSearchMetadata datetimeRangeSearchMetadata: + builder.AddDateTimeRangeSearchComponent(item, datetimeRangeSearchMetadata); break; - case CheckboxListSearchMetadata checkboxListSearchMetaData: - builder.AddCheckboxListSearchComponent(item, checkboxListSearchMetaData); + case CheckboxListSearchMetadata checkboxListSearchMetadata: + builder.AddCheckboxListSearchComponent(item, checkboxListSearchMetadata); break; - case MultipleSelectSearchMetadata multipleSelectSearchMetaData: - builder.AddMultipleSelectSearchComponent(item, multipleSelectSearchMetaData); + case MultipleSelectSearchMetadata multipleSelectSearchMetadata: + builder.AddMultipleSelectSearchComponent(item, multipleSelectSearchMetadata); break; - case SelectSearchMetadata selectSearchMetaData: - builder.AddSelectSearchComponent(item, selectSearchMetaData); + case SelectSearchMetadata selectSearchMetadata: + builder.AddSelectSearchComponent(item, selectSearchMetadata); break; - case StringSearchMetadata1 stringSearchMetaData: - builder.AddStringSearchComponent(item, stringSearchMetaData); + case StringSearchMetadata stringSearchMetadata: + builder.AddStringSearchComponent(item, stringSearchMetadata); break; } }; @@ -100,20 +100,20 @@ public RenderFragment CreateSearchItemComponentByMetadata() => builder => extension(RenderTreeBuilder builder) { - private void AddStringSearchComponent(ISearchItem item, StringSearchMetadata1 stringSearchMetaData) + private void AddStringSearchComponent(ISearchItem item, StringSearchMetadata stringSearchMetadata) { builder.OpenComponent>(0); - builder.AddAttribute(10, nameof(BootstrapInput<>.Value), stringSearchMetaData.Value); - builder.AddAttribute(20, nameof(BootstrapInput<>.OnValueChanged), stringSearchMetaData.ValueChangedHandler); + builder.AddAttribute(10, nameof(BootstrapInput<>.Value), stringSearchMetadata.Value); + builder.AddAttribute(20, nameof(BootstrapInput<>.OnValueChanged), stringSearchMetadata.ValueChangedHandler); builder.AddAttribute(30, nameof(BootstrapInput<>.ShowLabel), item.ShowLabel ?? true); builder.AddAttribute(40, nameof(BootstrapInput<>.ShowLabelTooltip), item.ShowLabelTooltip); builder.AddAttribute(50, nameof(BootstrapInput<>.DisplayText), item.Text); builder.AddAttribute(60, nameof(BootstrapInput<>.SkipValidate), true); - builder.AddAttribute(70, nameof(BootstrapInput<>.PlaceHolder), stringSearchMetaData.PlaceHolder); + builder.AddAttribute(70, nameof(BootstrapInput<>.PlaceHolder), stringSearchMetadata.PlaceHolder); builder.CloseComponent(); } - private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata numberSearchMetaData) + private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata numberSearchMetadata) { if (item.ShowLabel ?? true) { @@ -127,74 +127,74 @@ private void AddNumberSearchComponent(ISearchItem item, NumberSearchMetadata num builder.AddAttribute(1, nameof(BootstrapInputGroup.ChildContent), new RenderFragment(builder => { builder.OpenComponent(10); - builder.AddAttribute(11, nameof(BootstrapInputGroupLabel.DisplayText), numberSearchMetaData.StartValueLabelText); + builder.AddAttribute(11, nameof(BootstrapInputGroupLabel.DisplayText), numberSearchMetadata.StartValueLabelText); builder.CloseComponent(); builder.OpenComponent>(20); - builder.AddAttribute(21, nameof(BootstrapInput<>.Value), numberSearchMetaData.StartValue); - builder.AddAttribute(22, nameof(BootstrapInput<>.OnValueChanged), numberSearchMetaData.StartValueChangedHandler); + builder.AddAttribute(21, nameof(BootstrapInput<>.Value), numberSearchMetadata.StartValue); + builder.AddAttribute(22, nameof(BootstrapInput<>.OnValueChanged), numberSearchMetadata.StartValueChangedHandler); builder.AddAttribute(23, nameof(BootstrapInput<>.SkipValidate), true); builder.CloseComponent(); builder.OpenComponent(30); - builder.AddAttribute(31, nameof(BootstrapInputGroupLabel.DisplayText), numberSearchMetaData.EndValueLabelText); + builder.AddAttribute(31, nameof(BootstrapInputGroupLabel.DisplayText), numberSearchMetadata.EndValueLabelText); builder.CloseComponent(); builder.OpenComponent>(40); - builder.AddAttribute(41, nameof(BootstrapInput<>.Value), numberSearchMetaData.EndValue); - builder.AddAttribute(42, nameof(BootstrapInput<>.OnValueChanged), numberSearchMetaData.EndValueChangedHandler); + builder.AddAttribute(41, nameof(BootstrapInput<>.Value), numberSearchMetadata.EndValue); + builder.AddAttribute(42, nameof(BootstrapInput<>.OnValueChanged), numberSearchMetadata.EndValueChangedHandler); builder.AddAttribute(43, nameof(BootstrapInput<>.SkipValidate), true); builder.CloseComponent(); })); builder.CloseComponent(); } - private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetadata selectSearchMetaData) + private void AddSelectSearchComponent(ISearchItem item, SelectSearchMetadata selectSearchMetadata) { builder.OpenComponent>(0); - builder.AddAttribute(10, nameof(Select<>.Value), selectSearchMetaData.Value); - builder.AddAttribute(20, nameof(Select<>.OnValueChanged), selectSearchMetaData.ValueChangedHandler); + builder.AddAttribute(10, nameof(Select<>.Value), selectSearchMetadata.Value); + builder.AddAttribute(20, nameof(Select<>.OnValueChanged), selectSearchMetadata.ValueChangedHandler); builder.AddAttribute(30, nameof(Select<>.ShowLabel), item.ShowLabel ?? true); builder.AddAttribute(40, nameof(Select<>.ShowLabelTooltip), item.ShowLabelTooltip); builder.AddAttribute(50, nameof(Select<>.DisplayText), item.Text); - builder.AddAttribute(60, nameof(Select<>.Items), selectSearchMetaData.Items); - builder.AddAttribute(70, nameof(Select<>.PlaceHolder), selectSearchMetaData.PlaceHolder); + builder.AddAttribute(60, nameof(Select<>.Items), selectSearchMetadata.Items); + builder.AddAttribute(70, nameof(Select<>.PlaceHolder), selectSearchMetadata.PlaceHolder); builder.AddAttribute(80, nameof(Select<>.SkipValidate), true); builder.CloseComponent(); } - private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSearchMetadata multipleSelectSearchMetaData) + private void AddMultipleSelectSearchComponent(ISearchItem item, MultipleSelectSearchMetadata multipleSelectSearchMetadata) { builder.OpenComponent>(0); - builder.AddAttribute(10, nameof(MultiSelect<>.Value), multipleSelectSearchMetaData.Value); - builder.AddAttribute(20, nameof(MultiSelect<>.OnValueChanged), multipleSelectSearchMetaData.ValueChangedHandler); + builder.AddAttribute(10, nameof(MultiSelect<>.Value), multipleSelectSearchMetadata.Value); + builder.AddAttribute(20, nameof(MultiSelect<>.OnValueChanged), multipleSelectSearchMetadata.ValueChangedHandler); builder.AddAttribute(30, nameof(MultiSelect<>.ShowLabel), item.ShowLabel ?? true); builder.AddAttribute(40, nameof(MultiSelect<>.ShowLabelTooltip), item.ShowLabelTooltip); builder.AddAttribute(50, nameof(MultiSelect<>.DisplayText), item.Text); - builder.AddAttribute(60, nameof(MultiSelect<>.Items), multipleSelectSearchMetaData.Items); - builder.AddAttribute(70, nameof(MultiSelect<>.PlaceHolder), multipleSelectSearchMetaData.PlaceHolder); + builder.AddAttribute(60, nameof(MultiSelect<>.Items), multipleSelectSearchMetadata.Items); + builder.AddAttribute(70, nameof(MultiSelect<>.PlaceHolder), multipleSelectSearchMetadata.PlaceHolder); builder.AddAttribute(80, nameof(MultiSelect<>.SkipValidate), true); builder.CloseComponent(); } - private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearchMetadata checkboxListSearchMetaData) + private void AddCheckboxListSearchComponent(ISearchItem item, CheckboxListSearchMetadata checkboxListSearchMetadata) { builder.OpenComponent>(0); - builder.AddAttribute(10, nameof(CheckboxList<>.Value), checkboxListSearchMetaData.Value); - builder.AddAttribute(20, nameof(CheckboxList<>.OnValueChanged), checkboxListSearchMetaData.ValueChangedHandler); + builder.AddAttribute(10, nameof(CheckboxList<>.Value), checkboxListSearchMetadata.Value); + builder.AddAttribute(20, nameof(CheckboxList<>.OnValueChanged), checkboxListSearchMetadata.ValueChangedHandler); builder.AddAttribute(30, nameof(CheckboxList<>.ShowLabel), item.ShowLabel ?? true); builder.AddAttribute(40, nameof(CheckboxList<>.ShowLabelTooltip), item.ShowLabelTooltip); builder.AddAttribute(50, nameof(CheckboxList<>.DisplayText), item.Text); - builder.AddAttribute(60, nameof(CheckboxList<>.Items), checkboxListSearchMetaData.Items); + builder.AddAttribute(60, nameof(CheckboxList<>.Items), checkboxListSearchMetadata.Items); builder.AddAttribute(70, nameof(CheckboxList<>.SkipValidate), true); builder.CloseComponent(); } - private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSearchMetadata datetimeRangeSearchMetaData) + private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSearchMetadata datetimeRangeSearchMetadata) { builder.OpenComponent(0); - builder.AddAttribute(10, nameof(DateTimeRange.Value), datetimeRangeSearchMetaData.Value); - builder.AddAttribute(20, nameof(DateTimeRange.OnValueChanged), datetimeRangeSearchMetaData.ValueChangedHandler); + builder.AddAttribute(10, nameof(DateTimeRange.Value), datetimeRangeSearchMetadata.Value); + builder.AddAttribute(20, nameof(DateTimeRange.OnValueChanged), datetimeRangeSearchMetadata.ValueChangedHandler); builder.AddAttribute(30, nameof(DateTimeRange.ShowLabel), item.ShowLabel ?? true); builder.AddAttribute(40, nameof(DateTimeRange.ShowLabelTooltip), item.ShowLabelTooltip); builder.AddAttribute(50, nameof(DateTimeRange.DisplayText), item.Text); @@ -202,16 +202,16 @@ private void AddDateTimeRangeSearchComponent(ISearchItem item, DateTimeRangeSear builder.CloseComponent(); } - private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetadata datetimeSearchMetaData) + private void AddDateTimeSearchComponent(ISearchItem item, DateTimeSearchMetadata datetimeSearchMetadata) { builder.OpenComponent>(0); - builder.AddAttribute(10, nameof(DateTimePicker<>.Value), datetimeSearchMetaData.Value); - builder.AddAttribute(20, nameof(DateTimePicker<>.OnValueChanged), datetimeSearchMetaData.ValueChangedHandler); + builder.AddAttribute(10, nameof(DateTimePicker<>.Value), datetimeSearchMetadata.Value); + builder.AddAttribute(20, nameof(DateTimePicker<>.OnValueChanged), datetimeSearchMetadata.ValueChangedHandler); builder.AddAttribute(30, nameof(DateTimePicker<>.ShowLabel), item.ShowLabel ?? true); builder.AddAttribute(40, nameof(DateTimePicker<>.ShowLabelTooltip), item.ShowLabelTooltip); builder.AddAttribute(50, nameof(DateTimePicker<>.DisplayText), item.Text); builder.AddAttribute(60, nameof(DateTimePicker<>.SkipValidate), true); - builder.AddAttribute(70, nameof(DateTimePicker<>.DatePlaceHolderText), datetimeSearchMetaData.PlaceHolder); + builder.AddAttribute(70, nameof(DateTimePicker<>.DatePlaceHolderText), datetimeSearchMetadata.PlaceHolder); builder.CloseComponent(); } } diff --git a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs index a690e366d1b..915c583bb87 100644 --- a/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs +++ b/src/BootstrapBlazor/Extensions/ITableColumnExtensions.cs @@ -29,18 +29,18 @@ public static ISearchItem ParseSearchItem(this ITableColumn column, SearchFormLo GroupName = column.GroupName, GroupOrder = column.GroupOrder, Order = column.Order, - MetaData = column.BuildSearchMetaData(options) + Metadata = column.BuildSearchMetadata(options) }; return item; } - private static ISearchFormItemMetadata BuildSearchMetaData(this ITableColumn column, SearchFormLocalizerOptions options) + private static ISearchFormItemMetadata BuildSearchMetadata(this ITableColumn column, SearchFormLocalizerOptions options) { // 自定义搜索项逻辑 - if (column.SearchFormItemMetaData is not null) + if (column.SearchFormItemMetadata is not null) { - return column.SearchFormItemMetaData; + return column.SearchFormItemMetadata; } ISearchFormItemMetadata? metaData = null; @@ -94,7 +94,7 @@ private static ISearchFormItemMetadata BuildSearchMetaData(this ITableColumn col } else { - metaData = new StringSearchMetadata1() { FilterAction = FilterAction.Contains }; + metaData = new StringSearchMetadata() { FilterAction = FilterAction.Contains }; } return metaData; @@ -202,7 +202,7 @@ private static void CopyValue(this ITableColumn col, ITableColumn dest) if (col.IsRequiredWhenAdd.HasValue) dest.IsRequiredWhenAdd = col.IsRequiredWhenAdd; if (col.IsRequiredWhenEdit.HasValue) dest.IsRequiredWhenEdit = col.IsRequiredWhenEdit; if (col.IgnoreWhenExport.HasValue) dest.IgnoreWhenExport = col.IgnoreWhenExport; - if (col.SearchFormItemMetaData != null) dest.SearchFormItemMetaData = col.SearchFormItemMetaData; + if (col.SearchFormItemMetadata != null) dest.SearchFormItemMetadata = col.SearchFormItemMetadata; } /// diff --git a/test/UnitTest/Attributes/AutoGenerateClassTest.cs b/test/UnitTest/Attributes/AutoGenerateClassTest.cs index fbf37a7e1f9..c8cda49e09e 100644 --- a/test/UnitTest/Attributes/AutoGenerateClassTest.cs +++ b/test/UnitTest/Attributes/AutoGenerateClassTest.cs @@ -210,8 +210,8 @@ public void AutoGenerateColumn_Ok() attrInterface.IsRequiredWhenEdit = true; Assert.True(attrInterface.IsRequiredWhenEdit); - attrInterface.SearchFormItemMetaData = new StringSearchMetadata1(); - Assert.NotNull(attrInterface.SearchFormItemMetaData); + attrInterface.SearchFormItemMetadata = new StringSearchMetadata(); + Assert.NotNull(attrInterface.SearchFormItemMetadata); var attrEditor = (IEditorItem)attr; attrEditor.Items = null; diff --git a/test/UnitTest/Components/InternalTableColumnTest.cs b/test/UnitTest/Components/InternalTableColumnTest.cs index d220a144018..496369adb1e 100644 --- a/test/UnitTest/Components/InternalTableColumnTest.cs +++ b/test/UnitTest/Components/InternalTableColumnTest.cs @@ -87,7 +87,7 @@ public void InternalTableColumn_Ok() SetValue("IsRequiredWhenEdit", true); SetValue("LookupService", null); SetValue("IgnoreWhenExport", true); - SetValue("SearchFormItemMetaData", new StringSearchMetadata1()); + SetValue("SearchFormItemMetadata", new StringSearchMetadata()); void SetValue(string propertyName, object? val) => type!.GetProperty(propertyName)!.SetValue(instance, val); } diff --git a/test/UnitTest/Components/SearchDialogTest.cs b/test/UnitTest/Components/SearchDialogTest.cs index 05416c384ff..6627fc78168 100644 --- a/test/UnitTest/Components/SearchDialogTest.cs +++ b/test/UnitTest/Components/SearchDialogTest.cs @@ -22,7 +22,7 @@ public async Task UseSearchForm_Ok() new SearchItem("Name", typeof(string), "姓名"), new SearchItem("Address", typeof(string), "地址") { - MetaData = new StringSearchMetadata1() + Metadata = new StringSearchMetadata() } }); pb.Add(a => a.OnChanged, action => diff --git a/test/UnitTest/Components/SearchFormItemMetaDataTest.cs b/test/UnitTest/Components/SearchFormItemMetadataTest1.cs similarity index 95% rename from test/UnitTest/Components/SearchFormItemMetaDataTest.cs rename to test/UnitTest/Components/SearchFormItemMetadataTest1.cs index af3084c08a3..f7cf7241ba0 100644 --- a/test/UnitTest/Components/SearchFormItemMetaDataTest.cs +++ b/test/UnitTest/Components/SearchFormItemMetadataTest1.cs @@ -5,13 +5,13 @@ namespace UnitTest.Components; -public class SearchFormItemMetaDataTest +public class SearchFormItemMetadataTest1 { [Fact] - public async Task StringSearchFormItemMetaData_Ok() + public async Task StringSearchFormItemMetadata_Ok() { var valueChanged = false; - var meta = new StringSearchMetadata1() + var meta = new StringSearchMetadata() { FilterAction = FilterAction.Contains, FilterLogic = FilterLogic.And, @@ -67,7 +67,7 @@ public async Task StringSearchFormItemMetaData_Ok() } [Fact] - public void MultipleStringSearchFormItemMetaData_Ok() + public void MultipleStringSearchFormItemMetadata_Ok() { var meta = new MultipleStringSearchMetadata(); var action = meta.GetFilter("fieldKey"); @@ -103,7 +103,7 @@ public void MultipleStringSearchFormItemMetaData_Ok() } [Fact] - public void SelectSearchFormItemMetaData_Ok() + public void SelectSearchFormItemMetadata_Ok() { var meta = new SelectSearchMetadata() { @@ -125,7 +125,7 @@ public void SelectSearchFormItemMetaData_Ok() } [Fact] - public void MultipleSelectSearchFormItemMetaData_Ok() + public void MultipleSelectSearchFormItemMetadata_Ok() { var meta = new MultipleSelectSearchMetadata() { @@ -168,7 +168,7 @@ public void MultipleSelectSearchFormItemMetaData_Ok() } [Fact] - public async Task NumberSearchFormItemMetaData_Ok() + public async Task NumberSearchFormItemMetadata_Ok() { var meta = new NumberSearchMetadata() { @@ -256,7 +256,7 @@ public async Task NumberSearchFormItemMetaData_Ok() } [Fact] - public void NumberSearchFormItemMetaData_ValueType() + public void NumberSearchFormItemMetadata_ValueType() { var meta = new NumberSearchMetadata() { @@ -277,7 +277,7 @@ public void NumberSearchFormItemMetaData_ValueType() } [Fact] - public async Task DateTimeSearchFormItemMetaData_Ok() + public async Task DateTimeSearchFormItemMetadata_Ok() { var meta = new DateTimeSearchMetadata(); @@ -316,7 +316,7 @@ public async Task DateTimeSearchFormItemMetaData_Ok() } [Fact] - public async Task DateTimeRangeSearchFormItemMetaData_Ok() + public async Task DateTimeRangeSearchFormItemMetadata_Ok() { var meta = new DateTimeRangeSearchMetadata(); diff --git a/test/UnitTest/Components/SearchFormTest.cs b/test/UnitTest/Components/SearchFormTest.cs index 9fde0ab79c6..8e251f6b01e 100644 --- a/test/UnitTest/Components/SearchFormTest.cs +++ b/test/UnitTest/Components/SearchFormTest.cs @@ -11,7 +11,7 @@ public class SearchFormTest : BootstrapBlazorTestBase public async Task Filter_Ok() { var filterKeyValueAction = new FilterKeyValueAction(); - var stringSearchMetaData = new StringSearchMetadata1() + var stringSearchMetadata = new StringSearchMetadata() { PlaceHolder = "placeholder-val", Value = "foo-name-value" @@ -41,13 +41,13 @@ public async Task Filter_Ok() cut.Contains("col-sm-6"); cut.Contains("form-inline-end"); - searchItem.MetaData = stringSearchMetaData; + searchItem.Metadata = stringSearchMetadata; cut.Render(); cut.Contains("placeholder-val"); cut.Contains("foo-name-value"); // 改变搜索项值 - await stringSearchMetaData.ValueChangedHandler("test1"); + await stringSearchMetadata.ValueChangedHandler("test1"); Assert.Single(filterKeyValueAction.Filters); Assert.Equal("test1", filterKeyValueAction.Filters[0].FieldValue); } @@ -84,7 +84,7 @@ public void ToFilter_Ok() [Fact] public void LabelAlign_Ok() { - var stringSearchMetaData = new StringSearchMetadata1() + var stringSearchMetadata = new StringSearchMetadata() { PlaceHolder = "placeholder-val", Value = "foo-name-value" @@ -100,11 +100,11 @@ public void LabelAlign_Ok() Text = "Name-Updated", GroupName = "Group1", GroupOrder = 1, - MetaData = stringSearchMetaData + Metadata = stringSearchMetadata }, new SearchItem(nameof(Foo.Address), typeof(string), "Address") { - MetaData = stringSearchMetaData + Metadata = stringSearchMetadata } }); }); @@ -130,11 +130,11 @@ public void Group_Ok() { GroupName = "Group1", GroupOrder= 1, - MetaData = new StringSearchMetadata1() + Metadata = new StringSearchMetadata() }, new SearchItem(nameof(Foo.Address), typeof(string), "Address") { - MetaData = new StringSearchMetadata1() + Metadata = new StringSearchMetadata() } }); }); @@ -163,7 +163,7 @@ public void Buttons_Ok() } [Fact] - public void MetaData_Ok() + public void Metadata_Ok() { var cut = Context.Render(pb => { @@ -171,27 +171,27 @@ public void MetaData_Ok() { new SearchItem(nameof(Foo.Count), typeof(string), nameof(Foo.Count)) { - MetaData = new NumberSearchMetadata() + Metadata = new NumberSearchMetadata() }, new SearchItem(nameof(Foo.DateTime), typeof(string), nameof(Foo.DateTime)) { - MetaData = new DateTimeSearchMetadata() + Metadata = new DateTimeSearchMetadata() }, new SearchItem(nameof(Foo.DateTime), typeof(string), nameof(Foo.DateTime)) { - MetaData = new DateTimeRangeSearchMetadata() + Metadata = new DateTimeRangeSearchMetadata() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new SelectSearchMetadata() + Metadata = new SelectSearchMetadata() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new MultipleSelectSearchMetadata() + Metadata = new MultipleSelectSearchMetadata() }, new SearchItem(nameof(Foo.Education), typeof(string), nameof(Foo.Education)) { - MetaData = new CheckboxListSearchMetadata() + Metadata = new CheckboxListSearchMetadata() } }); }); @@ -204,61 +204,61 @@ public void GetFilter_Ok() var action = item.GetFilter(); Assert.Null(action); - item.MetaData = new StringSearchMetadata1() { Value = "test" }; + item.Metadata = new StringSearchMetadata() { Value = "test" }; action = item.GetFilter(); Assert.NotNull(action); } [Fact] - public void BuildSearchMetaData_Enum_Ok() + public void BuildSearchMetadata_Enum_Ok() { var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(EnumEducation)); - item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + item.Metadata = item.BuildSearchMetadata(options); + Assert.IsType(item.Metadata); item.Reset(); } [Fact] - public void BuildSearchMetaData_Number_Ok() + public void BuildSearchMetadata_Number_Ok() { var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(int)); - item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + item.Metadata = item.BuildSearchMetadata(options); + Assert.IsType(item.Metadata); item.Reset(); } [Fact] - public void BuildSearchMetaData_Bool_Ok() + public void BuildSearchMetadata_Bool_Ok() { var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(bool)); - item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + item.Metadata = item.BuildSearchMetadata(options); + Assert.IsType(item.Metadata); item.Reset(); } [Fact] - public void BuildSearchMetaData_DateTimeRange_Ok() + public void BuildSearchMetadata_DateTimeRange_Ok() { var options = new SearchFormLocalizerOptions(); var item = new SearchItem("Name", typeof(DateTime)); - item.MetaData = item.BuildSearchMetadata(options); - Assert.IsType(item.MetaData); + item.Metadata = item.BuildSearchMetadata(options); + Assert.IsType(item.Metadata); item.Reset(); } [Fact] - public void BuildSearchMetaData_DateTime_Ok() + public void BuildSearchMetadata_DateTime_Ok() { - var item = new SearchItem("Name", typeof(DateTime)) { MetaData = new DateTimeSearchMetadata() }; + var item = new SearchItem("Name", typeof(DateTime)) { Metadata = new DateTimeSearchMetadata() }; - Assert.IsType(item.MetaData); + Assert.IsType(item.Metadata); item.Reset(); } diff --git a/test/UnitTest/Components/TableDialogTest.cs b/test/UnitTest/Components/TableDialogTest.cs index 5e6337bed42..8d35dce4099 100644 --- a/test/UnitTest/Components/TableDialogTest.cs +++ b/test/UnitTest/Components/TableDialogTest.cs @@ -308,7 +308,7 @@ public async Task EditAsync_Ok() new SearchItem("Name", typeof(string), "Name"), new SearchItem("Address", typeof(string), "Address") { - MetaData = new StringSearchMetadata1() { PlaceHolder = "Address-Placeholder" } + Metadata = new StringSearchMetadata() { PlaceHolder = "Address-Placeholder" } } }); pb.Add(a => a.OnQueryAsync, options => diff --git a/test/UnitTest/Components/TableTest.cs b/test/UnitTest/Components/TableTest.cs index 6c10ba46fda..bc8db5e329a 100644 --- a/test/UnitTest/Components/TableTest.cs +++ b/test/UnitTest/Components/TableTest.cs @@ -641,7 +641,7 @@ public async Task UseSearchForm_Ok() builder.AddAttribute(1, "Field", true); builder.AddAttribute(2, "FieldExpression", Utility.GenerateValueExpression(foo, nameof(Foo.Complete), typeof(bool))); builder.AddAttribute(3, nameof(ITableColumn.Searchable), true); - builder.AddAttribute(3, nameof(ITableColumn.SearchFormItemMetaData), new StringSearchMetadata1()); + builder.AddAttribute(3, nameof(ITableColumn.SearchFormItemMetadata), new StringSearchMetadata()); builder.CloseComponent(); }); }); @@ -679,7 +679,7 @@ public async Task SearchItems_Ok() pb.Add(a => a.UseSearchForm, true); pb.Add(a => a.SearchItems, new List() { - new SearchItem("Name", typeof(string), "名称") { MetaData = new StringSearchMetadata1() } + new SearchItem("Name", typeof(string), "名称") { Metadata = new StringSearchMetadata() } }); pb.Add(a => a.SearchMode, SearchMode.Top); pb.Add(a => a.OnQueryAsync, OnQueryAsync(localizer)); diff --git a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs index a8e36082d4e..89b2257256b 100644 --- a/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs +++ b/test/UnitTest/Extensions/ITableColumnExtensionsTest.cs @@ -115,7 +115,7 @@ public void CopyValue_Ok() IsRequiredWhenAdd = true, IsRequiredWhenEdit = true, - SearchFormItemMetaData = new StringSearchMetadata1() + SearchFormItemMetadata = new StringSearchMetadata() }; col.CopyValue(attr); Assert.NotNull(col.ComponentType); @@ -186,7 +186,7 @@ public void CopyValue_Ok() Assert.Equal("test-key", col.LookupServiceKey); Assert.Equal(true, col.LookupServiceData); - Assert.NotNull(col.SearchFormItemMetaData); + Assert.NotNull(col.SearchFormItemMetadata); } [Fact] From d32c21f97f648beb4ff7bcdd0cff54305ea8935d Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sun, 22 Mar 2026 15:00:27 +0800 Subject: [PATCH 35/35] =?UTF-8?q?refactor:=20=E9=87=8D=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...chFormItemMetadataTest1.cs => SearchFormItemMetadataTest.cs} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename test/UnitTest/Components/{SearchFormItemMetadataTest1.cs => SearchFormItemMetadataTest.cs} (99%) diff --git a/test/UnitTest/Components/SearchFormItemMetadataTest1.cs b/test/UnitTest/Components/SearchFormItemMetadataTest.cs similarity index 99% rename from test/UnitTest/Components/SearchFormItemMetadataTest1.cs rename to test/UnitTest/Components/SearchFormItemMetadataTest.cs index f7cf7241ba0..4ca7e2f8846 100644 --- a/test/UnitTest/Components/SearchFormItemMetadataTest1.cs +++ b/test/UnitTest/Components/SearchFormItemMetadataTest.cs @@ -5,7 +5,7 @@ namespace UnitTest.Components; -public class SearchFormItemMetadataTest1 +public class SearchFormItemMetadataTest { [Fact] public async Task StringSearchFormItemMetadata_Ok()