diff --git a/src/BootstrapBlazor/Components/Message/Message.razor.cs b/src/BootstrapBlazor/Components/Message/Message.razor.cs index e70cfd1667e..4f25bb97256 100644 --- a/src/BootstrapBlazor/Components/Message/Message.razor.cs +++ b/src/BootstrapBlazor/Components/Message/Message.razor.cs @@ -133,6 +133,8 @@ public async Task Dismiss(string id) { await option.OnDismiss(); } + if (option is { DismissMode: MessageDismissMode.DeleteSource }) + _messages.Remove(option); } /// diff --git a/src/BootstrapBlazor/Components/Message/Message.razor.js b/src/BootstrapBlazor/Components/Message/Message.razor.js index 051ee869ce3..cf45b589fe3 100644 --- a/src/BootstrapBlazor/Components/Message/Message.razor.js +++ b/src/BootstrapBlazor/Components/Message/Message.razor.js @@ -46,10 +46,13 @@ export function show(id, msgId) { clearTimeout(hideHandler); // remove Id - msg.items.pop(); + const rmDom = msg.items.pop(); if (msg.items.length === 0) { // call server method prepare remove dom msg.invoke.invokeMethodAsync(msg.callback); + } else { + const alertId = rmDom.el.id; + msg.invoke.invokeMethodAsync('Dismiss', alertId); } }, 500); }; diff --git a/src/BootstrapBlazor/Components/Message/MessageOption.cs b/src/BootstrapBlazor/Components/Message/MessageOption.cs index 5376a7b1513..134267b3697 100644 --- a/src/BootstrapBlazor/Components/Message/MessageOption.cs +++ b/src/BootstrapBlazor/Components/Message/MessageOption.cs @@ -54,4 +54,9 @@ public class MessageOption : PopupOptionBase /// 获得/设置 消息显示模式,默认为 /// public MessageShowMode ShowMode { get; set; } = MessageShowMode.Multiple; + + /// + /// 获得/设置 消息关闭模式,默认为 + /// + public MessageDismissMode DismissMode { get; set; } = MessageDismissMode.OnlyHidden; } diff --git a/src/BootstrapBlazor/Enums/MessageShowMode.cs b/src/BootstrapBlazor/Enums/MessageShowMode.cs index 214c08c8440..a3d5bd7944f 100644 --- a/src/BootstrapBlazor/Enums/MessageShowMode.cs +++ b/src/BootstrapBlazor/Enums/MessageShowMode.cs @@ -20,3 +20,18 @@ public enum MessageShowMode /// Multiple } + +/// +/// 消息关闭模式 +/// +public enum MessageDismissMode +{ + /// + /// 关闭时仅隐藏原弹窗,保持占位直到所有弹窗均隐藏时一次性清空,这是之前的默认行为 + /// + OnlyHidden, + /// + /// 关闭时直接删除原弹窗的数据对象,不存在占位 + /// + DeleteSource, +} diff --git a/test/UnitTest/Components/MessageTest.cs b/test/UnitTest/Components/MessageTest.cs index 4879e4cd552..3aafccfc6da 100644 --- a/test/UnitTest/Components/MessageTest.cs +++ b/test/UnitTest/Components/MessageTest.cs @@ -133,4 +133,24 @@ await cut.InvokeAsync(() => service.Show(new MessageOption() ShowMode = MessageShowMode.Single }, cut.Instance)); } + + [Fact] + public async Task DisMissMode_Ok() + { + var service = Context.Services.GetRequiredService(); + var cut = Context.RenderComponent(); + await cut.InvokeAsync(() => service.Show(new MessageOption() + { + Content = "Test Content", + IsAutoHide = false, + ShowDismiss = true, + Icon = "fa-solid fa-font-awesome", + DismissMode = MessageDismissMode.DeleteSource + }, cut.Instance)); + var alert = cut.Find(".alert"); + Assert.NotNull(alert); + Assert.NotNull(alert.Id); + + await cut.Instance.Dismiss(alert.Id); + } }