Files
taxbaik/TaxBaik.Web/Components/Admin/Pages/Inquiries/InquiryEdit.razor
T

144 lines
4.2 KiB
Plaintext

@page "/admin/inquiries/{id:int}/edit"
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@using TaxBaik.Application.Services
@using TaxBaik.Web.Components.Admin.Forms
@inject InquiryService InquiryService
@inject NavigationManager Navigation
@inject ISnackbar Snackbar
@inject IDialogService DialogService
<PageTitle>문의 수정</PageTitle>
<section class="admin-page-hero">
<div>
<MudText Typo="Typo.caption" Class="admin-eyebrow">Customer Relations</MudText>
<MudText Typo="Typo.h4" Class="admin-page-title">문의 수정</MudText>
<MudText Typo="Typo.body2" Class="admin-page-subtitle">고객 문의 정보를 수정합니다.</MudText>
</div>
<MudButton Variant="Variant.Outlined" StartIcon="@Icons.Material.Filled.Close" @onclick="GoBack">취소</MudButton>
</section>
@if (isLoading)
{
<MudProgressLinear Color="Color.Primary" Indeterminate="true" Class="mt-4" />
}
else if (inquiry == null)
{
<MudAlert Severity="Severity.Error" Class="mt-4">문의를 찾을 수 없습니다.</MudAlert>
}
else
{
<MudPaper Class="pa-4 mt-4" Elevation="1">
<InquiryForm ButtonText="수정" InitialData="formModel" OnSubmit="HandleUpdate" OnCancel="GoBack" />
<MudDivider Class="my-4" />
<MudButton Variant="Variant.Outlined" Color="Color.Error" @onclick="DeleteInquiry" Class="mt-2">
문의 삭제
</MudButton>
</MudPaper>
}
@code {
[Parameter]
public int Id { get; set; }
private Domain.Entities.Inquiry? inquiry;
private InquiryForm.InquiryFormModel? formModel;
private bool isLoading = true;
protected override async Task OnInitializedAsync()
{
try
{
inquiry = await InquiryService.GetByIdAsync(Id);
if (inquiry != null)
{
formModel = new InquiryForm.InquiryFormModel
{
Name = inquiry.Name,
Phone = inquiry.Phone,
Email = inquiry.Email,
ServiceType = inquiry.ServiceType,
Message = inquiry.Message,
Status = inquiry.Status,
AdminMemo = inquiry.AdminMemo
};
}
}
catch (Exception ex)
{
Snackbar.Add($"문의 로드 실패: {ex.Message}", Severity.Error);
}
finally
{
isLoading = false;
}
}
private void GoBack()
{
Navigation.NavigateTo("/taxbaik/admin/inquiries");
}
private async Task HandleUpdate(InquiryForm.InquiryFormModel model)
{
if (inquiry == null)
return;
try
{
inquiry.Name = model.Name;
inquiry.Phone = model.Phone;
inquiry.Email = model.Email;
inquiry.ServiceType = model.ServiceType;
inquiry.Message = model.Message;
inquiry.AdminMemo = model.AdminMemo;
if (inquiry.Status != model.Status)
{
await InquiryService.UpdateStatusAsync(inquiry.Id, model.Status);
}
await InquiryService.UpdateAdminMemoAsync(inquiry.Id, model.AdminMemo);
Snackbar.Add("문의가 수정되었습니다.", Severity.Success);
Navigation.NavigateTo("/taxbaik/admin/inquiries");
}
catch (ValidationException ex)
{
Snackbar.Add(ex.Message, Severity.Error);
}
catch (Exception ex)
{
Snackbar.Add($"수정 실패: {ex.Message}", Severity.Error);
}
}
private async Task DeleteInquiry()
{
if (inquiry == null)
return;
var result = await DialogService.ShowMessageBox(
"문의 삭제",
"정말 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
"삭제", "취소");
if (result != true)
return;
try
{
await InquiryService.DeleteAsync(inquiry.Id);
Snackbar.Add("문의가 삭제되었습니다.", Severity.Success);
Navigation.NavigateTo("/taxbaik/admin/inquiries");
}
catch (Exception ex)
{
Snackbar.Add($"삭제 실패: {ex.Message}", Severity.Error);
}
}
}