@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; } } }