From bcc00305ab59b39afce52eab13139f8546142147 Mon Sep 17 00:00:00 2001 From: NEVERMINDY <17321086315@163.com> Date: Sun, 16 Oct 2022 12:45:49 +0800 Subject: [PATCH] Add amount limit to "Transfers" component --- .../Components/Transfer/Transfer.razor.cs | 51 +++++++++++++++++++ src/BootstrapBlazor/Locales/zh.json | 4 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs b/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs index cae2d43a3..9844c6ab1 100644 --- a/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs +++ b/src/BootstrapBlazor/Components/Transfer/Transfer.razor.cs @@ -104,6 +104,32 @@ public partial class Transfer [Parameter] public string? RightPannelSearchPlaceHolderString { get; set; } + /// + /// 获得/设置 右侧面板包含的最大数量, 默认为 0 不限制 + /// + [Parameter] + public int Max { get; set; } + + /// + /// 获得/设置 设置最大值时错误消息文字 + /// + [Parameter] + [NotNull] + public string? MaxErrorMessage { get; set; } + + /// + /// 获得/设置 右侧面板包含的最大数量,默认为 0 不限制 + /// + [Parameter] + public int Min { get; set; } + + /// + /// 获得/设置 设置最小值时错误消息文字 + /// + [Parameter] + [NotNull] + public string? MinErrorMessage { get; set; } + /// /// 获得/设置 数据样式回调方法 默认为 null /// @@ -154,6 +180,8 @@ public partial class Transfer LeftPanelText ??= Localizer[nameof(LeftPanelText)]; RightPanelText ??= Localizer[nameof(RightPanelText)]; + MinErrorMessage ??= Localizer[nameof(MinErrorMessage)]; + MaxErrorMessage ??= Localizer[nameof(MaxErrorMessage)]; var list = CurrentValueAsString.Split(',', StringSplitOptions.RemoveEmptyEntries); LeftItems.Clear(); @@ -174,6 +202,16 @@ public partial class Transfer RightItems.Add(item); } } + + if (Min > 0) + { + Rules.Add(new MinValidator() { Value = Min, ErrorMessage = MinErrorMessage }); + } + if (Max > 0) + { + Rules.Add(new MaxValidator() { Value = Max, ErrorMessage = MaxErrorMessage }); + } + } /// @@ -202,6 +240,19 @@ public partial class Transfer await OnSelectedItemsChanged(isLeft ? target : source); } } + + + if (Min > 0 || Max > 0) + { + var validationContext = new ValidationContext(Value!) { MemberName = FieldIdentifier?.FieldName }; + var validationResults = new List(); + + await ValidatePropertyAsync(RightItems, validationContext, validationResults); + ToggleMessage(validationResults, true); + } + + StateHasChanged(); + } /// diff --git a/src/BootstrapBlazor/Locales/zh.json b/src/BootstrapBlazor/Locales/zh.json index fd08ecffd..9e652ff90 100644 --- a/src/BootstrapBlazor/Locales/zh.json +++ b/src/BootstrapBlazor/Locales/zh.json @@ -283,7 +283,9 @@ }, "BootstrapBlazor.Components.Transfer": { "LeftPanelText": "全部", - "RightPanelText": "已选" + "RightPanelText": "已选", + "MinErrorMessage": "最少请选择{0}项", + "MaxErrorMessage": "最多可选择{0}项" }, "BootstrapBlazor.Components.TransferPanel": { "SearchPlaceHolderString": "请输入 ...", -- Gitee