ccba017e3e
DB: - V007__CreateFaqs.sql: faqs 테이블 (question, answer, category, sort_order, is_active) + 기본 FAQ 4개 시드 Domain: - Faq 엔티티 - IFaqRepository (GetActiveAsync, GetAllAsync, CRUD) Infrastructure: - FaqRepository: sort_order 정렬, CRUD Application: - FaqService: Categories 상수, Validate (질문·답변 필수) Admin UI (Blazor): - FaqList.razor: 전체 목록, 활성/비활성 상태 칩, 삭제 확인 - FaqEdit.razor: 질문/답변/카테고리/순서/활성 토글 폼 - MainLayout: 홈페이지 그룹 하위에 FAQ 관리 메뉴 추가 홈페이지: - Index.cshtml 하드코딩 FAQ → ActiveFaqs DB 루프로 교체 - FAQ 없으면 섹션 전체 숨김 (빈 DB에 안전) - IndexModel: FaqService 주입, Task.WhenAll 병렬 로드 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
77 lines
3.3 KiB
Plaintext
77 lines
3.3 KiB
Plaintext
@inherits LayoutComponentBase
|
|
|
|
<MudLayout Class="admin-shell">
|
|
<MudAppBar Elevation="0" Class="admin-topbar">
|
|
<MudIconButton Icon="@Icons.Material.Filled.Menu"
|
|
Color="Color.Inherit"
|
|
Edge="Edge.Start"
|
|
Class="admin-menu-button"
|
|
OnClick="@ToggleDrawer" />
|
|
<div class="admin-topbar-title">
|
|
<MudText Typo="Typo.caption">TaxBaik Backoffice</MudText>
|
|
<MudText Typo="Typo.h6">백원숙 세무회계 관리자</MudText>
|
|
</div>
|
|
<MudSpacer />
|
|
<MudButton Class="admin-topbar-action"
|
|
Variant="Variant.Outlined"
|
|
Color="Color.Inherit"
|
|
StartIcon="@Icons.Material.Filled.OpenInNew"
|
|
Href="/taxbaik">
|
|
공개 사이트
|
|
</MudButton>
|
|
<MudButton Class="admin-topbar-action"
|
|
Variant="Variant.Filled"
|
|
Color="Color.Primary"
|
|
StartIcon="@Icons.Material.Filled.Logout"
|
|
Href="/taxbaik/admin/logout">
|
|
로그아웃
|
|
</MudButton>
|
|
</MudAppBar>
|
|
|
|
<MudDrawer @bind-open="@drawerOpen"
|
|
Elevation="0"
|
|
Variant="DrawerVariant.Responsive"
|
|
Breakpoint="Breakpoint.Md"
|
|
Class="admin-drawer">
|
|
<div class="admin-drawer-brand">
|
|
<div class="admin-brand-mark">T</div>
|
|
<div>
|
|
<MudText Typo="Typo.subtitle1">TaxBaik</MudText>
|
|
<MudText Typo="Typo.caption">세무 운영 콘솔</MudText>
|
|
</div>
|
|
</div>
|
|
<MudNavMenu Class="admin-nav">
|
|
<MudNavLink Href="/taxbaik/admin/dashboard" Match="NavLinkMatch.All" Icon="@Icons.Material.Filled.Dashboard">대시보드</MudNavLink>
|
|
<MudNavGroup Title="고객 관리" Icon="@Icons.Material.Filled.PeopleAlt" Expanded="true">
|
|
<MudNavLink Href="/taxbaik/admin/clients" Icon="@Icons.Material.Filled.ContactPage">고객 카드</MudNavLink>
|
|
</MudNavGroup>
|
|
<MudNavGroup Title="홈페이지" Icon="@Icons.Material.Filled.Home" Expanded="false">
|
|
<MudNavLink Href="/taxbaik/admin/announcements" Icon="@Icons.Material.Filled.Campaign">공지사항</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/faqs" Icon="@Icons.Material.Filled.QuestionAnswer">FAQ 관리</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/blog" Icon="@Icons.Material.Filled.Article">블로그 관리</MudNavLink>
|
|
</MudNavGroup>
|
|
<MudNavLink Href="/taxbaik/admin/inquiries" Icon="@Icons.Material.Filled.Forum">문의 관리</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/settings" Icon="@Icons.Material.Filled.Tune">설정</MudNavLink>
|
|
</MudNavMenu>
|
|
<div class="admin-drawer-footer">
|
|
<MudText Typo="Typo.caption">운영 기준</MudText>
|
|
<MudText Typo="Typo.body2">변경 사항은 배포 후 Playwright로 검증합니다.</MudText>
|
|
</div>
|
|
</MudDrawer>
|
|
|
|
<MudMainContent Class="admin-main">
|
|
<MudContainer MaxWidth="MaxWidth.False" Class="admin-content">
|
|
@Body
|
|
</MudContainer>
|
|
</MudMainContent>
|
|
</MudLayout>
|
|
|
|
@code {
|
|
private bool drawerOpen = true;
|
|
|
|
private void ToggleDrawer()
|
|
{
|
|
drawerOpen = !drawerOpen;
|
|
}
|
|
}
|