@page "/admin/clients/create"
@page "/admin/clients/{Id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: false))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@using TaxBaik.Domain.Entities
@using TaxBaik.WasmClient.Components.Admin.Shared
@inject IClientBrowserClient ClientClient
@inject NavigationManager Navigation
@inject ISnackbar Snackbar
@(Id.HasValue ? "고객 수정" : "고객 등록")
목록으로
@if (isLoading)
{
}
else
{
@* 기본 정보 *@
기본 정보
@* 세무 정보 *@
세무 정보
@* 관리 정보 *@
관리 정보
@* 저장 버튼 *@
@(isSaving ? "저장 중..." : "저장")
취소
}
@code {
[Parameter] public int? Id { get; set; }
private MudForm form = null!;
private ClientFormModel dto = new() { Status = "active" };
private bool isValid;
private bool isLoading = true;
private bool isSaving;
private RenderFragment ClientEditSkeleton => builder =>
{
builder.OpenComponent(0);
builder.AddAttribute(1, "Rows", 6);
builder.AddAttribute(2, "Columns", 3);
builder.CloseComponent();
};
protected override async Task OnInitializedAsync()
{
if (Id.HasValue)
{
try
{
var client = await ClientClient.GetByIdAsync(Id.Value);
if (client is null)
{
Snackbar.Add("고객을 찾을 수 없습니다.", Severity.Error);
Navigation.NavigateTo("./clients");
return;
}
dto = new ClientFormModel
{
Name = client.Name,
CompanyName = client.CompanyName,
Phone = client.Phone,
Email = client.Email,
ServiceType = client.ServiceType,
TaxType = client.TaxType,
Status = client.Status,
Source = client.Source,
Memo = client.Memo
};
}
catch (Exception ex)
{
Snackbar.Add($"오류: {ex.Message}", Severity.Error);
Navigation.NavigateTo("./clients");
return;
}
}
isLoading = false;
}
private async Task SaveAsync()
{
await form.ValidateAsync();
if (!isValid) return;
isSaving = true;
try
{
if (Id.HasValue)
{
var result = await ClientClient.UpdateAsync(Id.Value, new CreateClientDto
{
Name = dto.Name,
CompanyName = dto.CompanyName,
Phone = dto.Phone,
Email = dto.Email,
ServiceType = dto.ServiceType,
TaxType = dto.TaxType,
Status = dto.Status,
Source = dto.Source,
Memo = dto.Memo
});
if (result != null)
Snackbar.Add("고객 정보가 수정되었습니다.", Severity.Success);
else
Snackbar.Add("수정에 실패했습니다.", Severity.Error);
}
else
{
var result = await ClientClient.CreateAsync(new CreateClientDto
{
Name = dto.Name,
CompanyName = dto.CompanyName,
Phone = dto.Phone,
Email = dto.Email,
ServiceType = dto.ServiceType,
TaxType = dto.TaxType,
Status = dto.Status,
Source = dto.Source,
Memo = dto.Memo
});
if (result != null)
Snackbar.Add("고객이 등록되었습니다.", Severity.Success);
else
Snackbar.Add("등록에 실패했습니다.", Severity.Error);
}
Navigation.NavigateTo("./clients");
}
catch (Exception ex)
{
Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error);
}
finally
{
isSaving = false;
}
}
}