+
@if (IsUploadButtonAtFirst && ShowAddButton())
{
@@ -41,6 +41,10 @@
@RenderAdd
}
+ @if (ShowPreviewList)
+ {
+
+ }
diff --git a/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs b/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs
index 53ca10c21f0..f0f32d4e66c 100644
--- a/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs
+++ b/src/BootstrapBlazor/Components/Upload/AvatarUpload.razor.cs
@@ -115,6 +115,12 @@ public partial class AvatarUpload
.AddClass(InvalidStatusIcon)
.Build();
+ private bool ShowPreviewList => Files.Count != 0;
+
+ private string PreviewerId => $"prev_{Id}";
+
+ private List PreviewList => [.. Files.Select(i => i.PrevUrl)];
+
///
///
///
@@ -144,6 +150,18 @@ protected override async Task TriggerOnChanged(UploadFile file)
await base.TriggerOnChanged(file);
}
+ ///
+ /// 预览当前头像方法
+ ///
+ ///
+ public async Task Preview()
+ {
+ if(ShowPreviewList)
+ {
+ await InvokeVoidAsync("preview", PreviewerId, 0);
+ }
+ }
+
private IReadOnlyCollection _results = [];
///
diff --git a/src/BootstrapBlazor/wwwroot/modules/upload.js b/src/BootstrapBlazor/wwwroot/modules/upload.js
index abf6f2c7d77..a8e445fb1d0 100644
--- a/src/BootstrapBlazor/wwwroot/modules/upload.js
+++ b/src/BootstrapBlazor/wwwroot/modules/upload.js
@@ -84,6 +84,13 @@ export function init(id) {
})
}
+export function preview(previewerId, index) {
+ const prev = Data.get(previewerId);
+ if (prev) {
+ prev.viewer.show(index);
+ }
+}
+
export async function getPreviewUrl(id, fileName) {
let url = '';
const upload = Data.get(id);
diff --git a/test/UnitTest/Components/UploadAvatarTest.cs b/test/UnitTest/Components/UploadAvatarTest.cs
index 508f34aaaf5..74a4f13648c 100644
--- a/test/UnitTest/Components/UploadAvatarTest.cs
+++ b/test/UnitTest/Components/UploadAvatarTest.cs
@@ -76,6 +76,9 @@ await cut.InvokeAsync(() => input.Instance.OnChange.InvokeAsync(new InputFileCha
new()
})));
+ // call preview
+ await cut.InvokeAsync(() => cut.Instance.Preview());
+
// upload-item-delete
var button = cut.Find(".upload-item-delete");
await cut.InvokeAsync(() => button.Click());