@page "/admin/inquiries/{InquiryId:int}"
@attribute [Authorize]
@using TaxBaik.Application.Services
@inject InquiryService InquiryService
@inject ClientService ClientService
@inject NavigationManager Navigation
@inject ISnackbar Snackbar
문의 상세
@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 InquiryService.GetByIdAsync(InquiryId);
adminMemo = inquiry?.AdminMemo ?? "";
}
private async Task OnStatusChanged(string status)
{
if (inquiry == null) return;
try
{
await InquiryService.UpdateStatusAsync(inquiry.Id, status, "관리자");
inquiry.Status = status;
Snackbar.Add("상태가 변경되었습니다.", Severity.Success);
}
catch (ValidationException ex)
{
Snackbar.Add(ex.Message, Severity.Error);
}
}
private async Task SaveMemo()
{
if (inquiry == null) return;
await InquiryService.UpdateAdminMemoAsync(inquiry.Id, adminMemo);
inquiry.AdminMemo = adminMemo;
Snackbar.Add("메모가 저장되었습니다.", Severity.Success);
}
private async Task ConvertToClient()
{
if (inquiry == null) return;
try
{
var clientId = await ClientService.CreateFromInquiryAsync(inquiry.Name, inquiry.Phone, inquiry.ServiceType);
await InquiryService.LinkClientAsync(inquiry.Id, clientId);
await InquiryService.UpdateStatusAsync(inquiry.Id, "consulting", "관리자");
inquiry.ClientId = clientId;
inquiry.Status = "consulting";
Snackbar.Add("고객 카드가 생성되었습니다.", Severity.Success);
}
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
};
}