Files
taxbaik/src/TaxBaik.Web.Client/Components/Admin/Pages/RevenueTrackings.razor
T
kjh2064 08347a4e20
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m46s
Refactor admin dashboard and standardize UI shells
2026-07-07 23:16:31 +09:00

104 lines
3.1 KiB
Plaintext

@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]
<PageTitle>수익 추적 관리</PageTitle>
<AdminPageHeader Title="수익 추적 관리" Eyebrow="CRM & 세무관리" Subtitle="청구 기록과 수익 흐름을 확인합니다." />
<AdminDataPanel Loading="@(revenues is null)" SkeletonContent="@RevenueSkeleton">
@if (revenues is null)
{
}
else if (revenues.Count == 0)
{
<MudAlert Severity="Severity.Info" Class="mt-4">청구 기록이 없습니다.</MudAlert>
}
else
{
<table class="admin-grid table">
<thead>
<tr>
<th>ID</th>
<th>고객</th>
<th>청구번호</th>
<th>청구일</th>
<th>청구액</th>
</tr>
</thead>
<tbody>
@foreach (var item in revenues)
{
<tr>
<td>@item.Id</td>
<td>@clientMap.GetValueOrDefault(item.ClientId)</td>
<td>@item.InvoiceNumber</td>
<td>@item.InvoiceDate.ToString("yyyy-MM-dd")</td>
<td>@item.Amount.ToString("C")</td>
</tr>
}
</tbody>
</table>
}
</AdminDataPanel>
@code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private List<RevenueTracking>? revenues;
private List<Client> clients = [];
private Dictionary<int, string> clientMap = new();
private RenderFragment RevenueSkeleton => builder =>
{
builder.OpenComponent<AdminSkeletonRows>(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;
}