@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));
}