From 7b0421c7eeeb1e505f4af280babb78a63e6f68c4 Mon Sep 17 00:00:00 2001 From: Tony <6914529@qq.com> Date: Wed, 7 Jan 2026 09:57:10 +0800 Subject: [PATCH 1/5] =?UTF-8?q?cardupload=E5=A2=9E=E5=8A=A0=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=A1=AE=E8=AE=A4=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cardupload增加删除确认属性 --- .../Components/Samples/UploadCards.razor | 10 ++++++-- .../Components/Samples/UploadCards.razor.cs | 3 ++- .../Components/Upload/CardUpload.razor | 25 +++++++++++++++---- .../Components/Upload/FileListUploadBase.cs | 6 +++++ 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor b/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor index b783ed6e38b..c65276e5ad5 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor @@ -1,4 +1,4 @@ -@page "/upload-card" +@page "/upload-card" @inject IOptions WebsiteOption @inject IStringLocalizer Localizer @inject ToastService ToastService @@ -52,6 +52,12 @@ +
+ + + + +
@@ -68,7 +74,7 @@ diff --git a/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor.cs index 5459c1edb11..c12661e580a 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/UploadCards.razor.cs @@ -1,4 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. +// 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 @@ -17,6 +17,7 @@ public partial class UploadCards : IDisposable private bool _showProgress = true; private bool _showZoomButton = true; private bool _showDeleteButton = true; + private bool _showDeleteConfirmButton = true; private bool _showDownloadButton = true; private List DefaultFormatFileList { get; } = diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor b/src/BootstrapBlazor/Components/Upload/CardUpload.razor index 1cd0f01ca64..0eeb7b6a155 100644 --- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor +++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor @@ -67,11 +67,26 @@
@if (ShowDeleteButton) { - + @if (ShowDeleteConfirmButton) + { + + } + else + { + + } + } @if (GetShowProgress(item)) diff --git a/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs b/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs index c42e230eeb4..e2545c79b05 100644 --- a/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs +++ b/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs @@ -17,6 +17,12 @@ public class FileListUploadBase : UploadBase [Parameter] public bool ShowDeleteButton { get; set; } + /// + /// 获得/设置 删除前是否显示确认对话框,依赖 ShowDeleteButton 属性为true时有效 + /// + [Parameter] + public bool ShowDeleteConfirmButton { get; set; } + /// /// 获得/设置 删除按钮图标 /// From fdc17709d34f4ba9c3900e24cbde4efe90b2ee93 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 7 Jan 2026 12:02:24 +0800 Subject: [PATCH 2/5] chore: bump version 10.2.1 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 5467994fe63..8075f3488e6 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 10.2.1-beta05 + 10.2.1 From 10a5904d000c29c08150f1bf690e3a0329b47ec7 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 7 Jan 2026 12:29:44 +0800 Subject: [PATCH 3/5] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E5=9F=BA?= =?UTF-8?q?=E7=B1=BB=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs b/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs index e2545c79b05..c42e230eeb4 100644 --- a/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs +++ b/src/BootstrapBlazor/Components/Upload/FileListUploadBase.cs @@ -17,12 +17,6 @@ public class FileListUploadBase : UploadBase [Parameter] public bool ShowDeleteButton { get; set; } - /// - /// 获得/设置 删除前是否显示确认对话框,依赖 ShowDeleteButton 属性为true时有效 - /// - [Parameter] - public bool ShowDeleteConfirmButton { get; set; } - /// /// 获得/设置 删除按钮图标 /// From efe1497949a35eaca2846a744081d78de957baad Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 7 Jan 2026 12:30:05 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E7=A1=AE=E8=AE=A4=E5=BC=B9=E7=AA=97=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Upload/CardUpload.razor | 19 +++++---- .../Components/Upload/CardUpload.razor.cs | 42 +++++++++++++++++++ src/BootstrapBlazor/Locales/en.json | 3 ++ src/BootstrapBlazor/Locales/zh.json | 3 ++ 4 files changed, 58 insertions(+), 9 deletions(-) diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor b/src/BootstrapBlazor/Components/Upload/CardUpload.razor index 0eeb7b6a155..040c857b915 100644 --- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor +++ b/src/BootstrapBlazor/Components/Upload/CardUpload.razor @@ -69,14 +69,15 @@ { @if (ShowDeleteConfirmButton) { - + OnConfirm="@(async ()=> await OnCardFileDelete(item))" /> } else { @@ -86,7 +87,7 @@ } - + } @if (GetShowProgress(item)) @@ -114,6 +115,6 @@ @code { RenderFragment RenderAdd => @
- +
; } diff --git a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs index 7f746015eb1..82685e0863b 100644 --- a/src/BootstrapBlazor/Components/Upload/CardUpload.razor.cs +++ b/src/BootstrapBlazor/Components/Upload/CardUpload.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; /// @@ -135,6 +137,44 @@ public partial class CardUpload [Parameter] public List? AllowExtensions { get; set; } + /// + /// 获得/设置 删除前是否显示确认对话框,依赖 属性为 true 时有效 + /// + [Parameter] + public bool ShowDeleteConfirmButton { get; set; } + + /// + /// 获得/设置 删除确认弹窗中确认按钮颜色 默认 + /// + [Parameter] + public Color DeleteConfirmButtonColor { get; set; } = Color.Danger; + + /// + /// 获得/设置 删除确认弹窗中确认按钮图标 默认 null 未设置 + /// + [Parameter] + public string? DeleteConfirmButtonIcon { get; set; } + + /// + /// 获得/设置 删除确认弹窗中确认文本内容 默认 null 未设置 使用资源文件中内置文字 + /// + [Parameter] + public string? DeleteConfirmContent { get; set; } + /// + /// 获得/设置 删除确认弹窗中确认按钮显示文字 默认 null 未设置 + /// + [Parameter] + public string? DeleteConfirmButtonText { get; set; } + + /// + /// 获得/设置 删除确认弹窗中取消按钮显示文字 默认 null 未设置 + /// + [Parameter] + public string? DeleteCloseButtonText { get; set; } + + [Inject, NotNull] + private IStringLocalizer>? Localizer { get; set; } + /// /// /// @@ -146,6 +186,8 @@ protected override void OnParametersSet() StatusIcon ??= IconTheme.GetIconByKey(ComponentIcons.CardUploadStatusIcon); ZoomIcon ??= IconTheme.GetIconByKey(ComponentIcons.CardUploadZoomIcon); RemoveIcon ??= IconTheme.GetIconByKey(ComponentIcons.CardUploadRemoveIcon); + + DeleteConfirmContent ??= Localizer["DeleteConfirmContent"]; } /// diff --git a/src/BootstrapBlazor/Locales/en.json b/src/BootstrapBlazor/Locales/en.json index a195655f28f..6005210830b 100644 --- a/src/BootstrapBlazor/Locales/en.json +++ b/src/BootstrapBlazor/Locales/en.json @@ -402,5 +402,8 @@ }, "BootstrapBlazor.Components.LoadMore": { "NoMoreText": "No More Data" + }, + "BootstrapBlazor.Components.CardUpload": { + "DeleteConfirmContent": "Are you sure you want to delete the current data?" } } diff --git a/src/BootstrapBlazor/Locales/zh.json b/src/BootstrapBlazor/Locales/zh.json index e443d0dea41..733b6bd261d 100644 --- a/src/BootstrapBlazor/Locales/zh.json +++ b/src/BootstrapBlazor/Locales/zh.json @@ -402,5 +402,8 @@ }, "BootstrapBlazor.Components.LoadMore": { "NoMoreText": "没有更多数据了" + }, + "BootstrapBlazor.Components.CardUpload": { + "DeleteConfirmContent": "确定删除当前数据吗?" } } From 225e9aae349d3873ceeb6019fbe3715b7b6c504d Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Wed, 7 Jan 2026 14:29:30 +0800 Subject: [PATCH 5/5] =?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/UploadCardTest.cs | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/UnitTest/Components/UploadCardTest.cs b/test/UnitTest/Components/UploadCardTest.cs index fd2bf363a11..7bcfc90022d 100644 --- a/test/UnitTest/Components/UploadCardTest.cs +++ b/test/UnitTest/Components/UploadCardTest.cs @@ -321,6 +321,31 @@ public void ActionButtonTemplate_Ok() cut.Contains("action-button-test"); } + [Fact] + public async Task ShowConfirmButton_Ok() + { + var cut = Context.Render>(pb => + { + pb.Add(a => a.DefaultFileList, + [ + new() { FileName = "test.png" } + ]); + pb.Add(a => a.ShowDeleteButton, true); + pb.Add(a => a.ShowDeleteConfirmButton, true); + pb.Add(a => a.DeleteConfirmButtonColor, Color.Danger); + pb.Add(a => a.DeleteConfirmButtonIcon, "icon-delete"); + pb.Add(a => a.DeleteConfirmContent, "content-delete"); + pb.Add(a => a.DeleteConfirmButtonText, "confirm"); + pb.Add(a => a.DeleteCloseButtonText, "cancel"); + }); + + var button = cut.FindComponent(); + Assert.NotNull(button); + Assert.NotNull(button.Instance.OnConfirm); + + await cut.InvokeAsync(button.Instance.OnConfirm); + } + private class MockBrowserFile(string name = "UploadTestFile", string contentType = "text", TimeSpan? delay = null) : IBrowserFile { public string Name { get; } = name;