@page "/admin/inquiries/{InquiryId:int}" @attribute [Authorize] @using TaxBaik.Web.Services @inject IInquiryBrowserClient InquiryClient @inject NavigationManager Navigation @inject ISnackbar Snackbar 문의 상세 Inquiry Details 문의 상세 문의 정보를 확인하고 처리 상태를 관리합니다. @if (inquiry != null) { Navigation.NavigateTo("/taxbaik/admin/inquiries"))"> 문의 목록으로 문의 정보 이름 @inquiry.Name 연락처 @inquiry.Phone 이메일 @(inquiry.Email ?? "-") 분야 @inquiry.ServiceType 문의 내용 @inquiry.Message 접수일시 @inquiry.CreatedAt.ToLocalTime().ToString("yyyy-MM-dd HH:mm") 담당자 메모 메모 저장 처리 상태 @foreach (var (key, label) in InquiryStatusMapper.Labels) { @label } @if (inquiry.ClientId == null) { 고객 카드 생성 이 문의를 고객 카드로 등록합니다. 고객으로 등록 } else { 연결된 고객 고객 카드 보기 } } else { 문의를 찾을 수 없습니다. } @code { [Parameter] public int InquiryId { get; set; } private Domain.Entities.Inquiry? inquiry; private string adminMemo = ""; protected override async Task OnInitializedAsync() { inquiry = await InquiryClient.GetByIdAsync(InquiryId); adminMemo = inquiry?.AdminMemo ?? ""; } private async Task OnStatusChanged(string status) { if (inquiry == null) return; try { var success = await InquiryClient.UpdateStatusAsync(inquiry.Id, status); if (success) { inquiry.Status = status; Snackbar.Add("상태가 변경되었습니다.", Severity.Success); } else { Snackbar.Add("상태 변경에 실패했습니다.", Severity.Error); } } catch (Exception ex) { Snackbar.Add($"오류: {ex.Message}", Severity.Error); } } private async Task SaveMemo() { if (inquiry == null) return; try { var success = await InquiryClient.UpdateAdminMemoAsync(inquiry.Id, adminMemo); if (success) { inquiry.AdminMemo = adminMemo; Snackbar.Add("메모가 저장되었습니다.", Severity.Success); } else { Snackbar.Add("메모 저장에 실패했습니다.", Severity.Error); } } catch (Exception ex) { Snackbar.Add($"오류: {ex.Message}", Severity.Error); } } private async Task ConvertToClient() { if (inquiry == null) return; try { var clientId = await InquiryClient.ConvertToClientAsync( inquiry.Id, inquiry.Name, inquiry.Phone, inquiry.ServiceType); if (clientId > 0) { inquiry.ClientId = clientId; inquiry.Status = "consulting"; Snackbar.Add("고객 카드가 생성되었습니다.", Severity.Success); } else { Snackbar.Add("고객 카드 생성에 실패했습니다.", Severity.Error); } } catch (Exception ex) { Snackbar.Add($"오류: {ex.Message}", Severity.Error); } } private Color StatusColor(string status) => status switch { "new" => Color.Default, "consulting" => Color.Info, "contracted" => Color.Success, "rejected" => Color.Error, "closed" => Color.Dark, _ => Color.Default }; }