104 lines
3.1 KiB
Plaintext
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;
|
|
}
|