@page "/dms" @using MudBlazor @using Pldpro.Web.UI.Models @inject Pldpro.Web.UI.Services.IDocumentClient Client @inject NavigationManager Nav DMS Dokumenten-Management @foreach (var b in _buckets) { @b } Aktualisieren Upload Zur Liste Gesamt @_total.ToString("N0") Eingegangen @_eingegangen.ToString("N0") Freigegeben @_freigegeben.ToString("N0") Bezahlt @_bezahlt.ToString("N0") Zuletzt hinzugefügt Filtern Datei Pfad Größe Geändert @context.FileName @context.PathPrefix @(context.Size?.ToString("N0")) @context.LastModified @code { private List _buckets = new(); private string? _bucket; private string? _query; private string? _prefix; private int _total; private int _eingegangen; private int _freigegeben; private int _bezahlt; private List _latest = new(); protected override async Task OnInitializedAsync() { _buckets = (await Client.ListBucketsAsync()).ToList(); _bucket = _buckets.FirstOrDefault(); await Reload(); } private async Task Reload() { if (string.IsNullOrWhiteSpace(_bucket)) { _total = _eingegangen = _freigegeben = _bezahlt = 0; _latest = new(); StateHasChanged(); return; } // Kennzahlen: einmal komplette Liste (für kleine Datenmengen ok) var (allItems, total) = await Client.SearchAsync(_bucket!, _query, _prefix, 0, int.MaxValue); _total = total; // Aktuell sind Status nur UI-intern; wenn später persistiert, hier echte Counts laden. _eingegangen = allItems.Count(i => i.Status == DocumentStatus.Eingegangen); _freigegeben = allItems.Count(i => i.Status == DocumentStatus.Freigegeben); _bezahlt = allItems.Count(i => i.Status == DocumentStatus.Bezahlt); // Letzte 10 var (latest, _) = await Client.SearchAsync(_bucket!, _query, _prefix, 0, 10); _latest = latest .OrderByDescending(i => i.LastModified ?? DateTime.MinValue) .Take(10) .ToList(); StateHasChanged(); } private void Download(DocumentListItem item) { var url = Client.GetDownloadUrl(item.Bucket, item.Key); Nav.NavigateTo(url, forceLoad: true); } private static string EncodeKeyForPath(string key) => string.Join("/", (key ?? string.Empty) .Split('/', StringSplitOptions.RemoveEmptyEntries) .Select(Uri.EscapeDataString)); }