@page "/admin/clients/create"
@page "/admin/clients/{Id:int}/edit"
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@using TaxBaik.Web.Services
@using TaxBaik.Domain.Entities
@inject IClientBrowserClient ClientClient
@inject NavigationManager Navigation
@inject IJSRuntime JS
@(Id.HasValue ? "고객 수정" : "고객 등록")
CRM
@(Id.HasValue ? "고객 수정" : "고객 등록")
@if (isLoading)
{
}
else
{
}
@code {
[Parameter] public int? Id { get; set; }
private CreateClientDto dto = new() { Status = "active" };
private bool isLoading = true;
private bool isSaving;
protected override async Task OnInitializedAsync()
{
if (Id.HasValue)
{
try
{
var client = await ClientClient.GetByIdAsync(Id.Value);
if (client is null)
{
await JS.InvokeVoidAsync("alert", "고객을 찾을 수 없습니다.");
Navigation.NavigateTo("/taxbaik/admin/clients");
return;
}
dto = new CreateClientDto
{
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)
{
await JS.InvokeVoidAsync("alert", $"오류: {ex.Message}");
Navigation.NavigateTo("/taxbaik/admin/clients");
return;
}
}
isLoading = false;
}
private async Task SaveAsync()
{
isSaving = true;
try
{
if (string.IsNullOrWhiteSpace(dto.Name))
{
await JS.InvokeVoidAsync("alert", "고객명을 입력하세요.");
return;
}
if (Id.HasValue)
{
var result = await ClientClient.UpdateAsync(Id.Value, dto);
await JS.InvokeVoidAsync("alert", result != null ? "고객 정보가 수정되었습니다." : "수정에 실패했습니다.");
}
else
{
var result = await ClientClient.CreateAsync(dto);
await JS.InvokeVoidAsync("alert", result != null ? "고객이 등록되었습니다." : "등록에 실패했습니다.");
}
Navigation.NavigateTo("/taxbaik/admin/clients");
}
catch (Exception ex)
{
await JS.InvokeVoidAsync("alert", $"저장 실패: {ex.Message}");
}
finally
{
isSaving = false;
}
}
}