@page "/admin/revenue-trackings" @rendermode @(new InteractiveWebAssemblyRenderMode(prerender: false)) @using TaxBaik.Web.Services.AdminClients @using TaxBaik.WasmClient.Components.Admin.Shared @inject IRevenueTrackingBrowserClient RevenueClient @inject IClientBrowserClient ClientClient @inject ISnackbar Snackbar @attribute [Authorize] 수익 추적 관리 @if (revenues is null) { } else if (revenues.Count == 0) { 청구 기록이 없습니다. } else { @foreach (var item in revenues) { }
ID 고객 청구번호 청구일 청구액
@item.Id @clientMap.GetValueOrDefault(item.ClientId) @item.InvoiceNumber @item.InvoiceDate.ToString("yyyy-MM-dd") @item.Amount.ToString("C")
}
@code { [CascadingParameter] private Task? AuthStateTask { get; set; } private List? revenues; private List clients = []; private Dictionary clientMap = new(); private RenderFragment RevenueSkeleton => builder => { builder.OpenComponent(0); builder.AddAttribute(1, "Rows", 5); builder.AddAttribute(2, "Columns", 5); builder.CloseComponent(); }; protected override async Task OnInitializedAsync() { if (AuthStateTask != null) { var authState = await AuthStateTask; if (authState.User.Identity?.IsAuthenticated == true) { await LoadData(); } else { revenues = []; } } else { revenues = []; } } private async Task LoadData() { try { revenues = await RevenueClient.GetAllAsync(); var (clientItems, _) = await ClientClient.GetPagedAsync(pageSize: 1000); clients = clientItems.ToList(); clientMap = clients.ToDictionary(c => c.Id, GetClientDisplayName); } catch (Exception ex) { Snackbar.Add($"데이터 로드 실패: {ex.Message}", Severity.Error); } } private static string GetClientDisplayName(Client client) => !string.IsNullOrWhiteSpace(client.CompanyName) ? $"{client.Name} ({client.CompanyName})" : client.Name; }