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