@page "/admin/faqs/create"
@page "/admin/faqs/{Id:int}/edit"
@attribute [Authorize]
@using TaxBaik.Web.Services
@using TaxBaik.Domain.Entities
@inject IFaqBrowserClient FaqClient
@inject NavigationManager Navigation
@inject IJSRuntime JS
@(Id.HasValue ? "FAQ 수정" : "FAQ 등록")
홈페이지
@(Id.HasValue ? "FAQ 수정" : "FAQ 등록")
@if (isLoading)
{
}
else
{
}
@code {
[Parameter] public int? Id { get; set; }
private Faq faq = new() { SortOrder = 10, IsActive = true };
private bool isLoading = true;
private bool isSaving;
private string SortOrderText { get => faq.SortOrder.ToString(); set => faq.SortOrder = int.TryParse(value, out var n) ? n : 0; }
protected override async Task OnInitializedAsync()
{
if (Id.HasValue)
{
try
{
var existing = await FaqClient.GetByIdAsync(Id.Value);
if (existing is null)
{
await JS.InvokeVoidAsync("alert", "FAQ를 찾을 수 없습니다.");
Navigation.NavigateTo("/taxbaik/admin/faqs");
return;
}
faq = existing;
}
catch (Exception ex)
{
await JS.InvokeVoidAsync("alert", $"오류: {ex.Message}");
Navigation.NavigateTo("/taxbaik/admin/faqs");
return;
}
}
isLoading = false;
}
private async Task SaveAsync()
{
isSaving = true;
try
{
if (string.IsNullOrWhiteSpace(faq.Question) || string.IsNullOrWhiteSpace(faq.Answer))
{
await JS.InvokeVoidAsync("alert", "질문과 답변을 입력하세요.");
return;
}
if (Id.HasValue)
{
var result = await FaqClient.UpdateAsync(Id.Value, faq);
await JS.InvokeVoidAsync("alert", result != null ? "FAQ가 수정되었습니다." : "수정 실패");
}
else
{
var result = await FaqClient.CreateAsync(faq);
await JS.InvokeVoidAsync("alert", result != null ? "FAQ가 등록되었습니다." : "등록 실패");
}
Navigation.NavigateTo("/taxbaik/admin/faqs");
}
catch (Exception ex)
{
await JS.InvokeVoidAsync("alert", $"저장 실패: {ex.Message}");
}
finally
{
isSaving = false;
}
}
}