Files
taxbaik/TaxBaik.Web/Components/Admin/Layout/MainLayout.razor
T
kjh2064 ad48befb9a
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m17s
fix: logout, accordion, and drawer interactivity issues
**Issues Fixed:**

1.  Logout not working
   - Created Logout.razor page (was missing)
   - Properly calls AuthStateProvider.LogoutAsync()
   - Redirects to login page with forceLoad: true
   - Button click now triggers async logout flow

2.  Accordion state not persisting
   - Changed MudNavGroup from fixed Expanded=true/false
   - to @bind-Expanded data binding
   - Now properly toggles between expanded/collapsed
   - State persists across clicks
   - Added expandedCustomerGroup, expandedWebsiteGroup properties

3.  Drawer responsiveness
   - Already working with @bind-open="@drawerOpen"
   - ToggleDrawer() properly toggles state
   - Responsive behavior controlled via Breakpoint.Md

**Implementation:**
- Logout.razor: New page for async logout
  - Calls AuthStateProvider.LogoutAsync()
  - Clears TokenStore + localStorage
  - Redirects to /admin/login

- MainLayout.razor: Accordion interactivity
  - @bind-Expanded replaces hardcoded Expanded properties
  - Each group has independent state variable
  - Click properly toggles group expansion

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 12:58:27 +09:00

81 lines
3.7 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" @bind-Expanded="@expandedCustomerGroup">
<MudNavLink Href="/taxbaik/admin/clients" Icon="@Icons.Material.Filled.ContactPage">고객 카드</MudNavLink>
<MudNavLink Href="/taxbaik/admin/tax-filings" Icon="@Icons.Material.Filled.CalendarMonth">신고 일정</MudNavLink>
</MudNavGroup>
<MudNavGroup Title="홈페이지" Icon="@Icons.Material.Filled.Home" @bind-Expanded="@expandedWebsiteGroup">
<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>
<MudNavLink Href="/taxbaik/admin/season-simulator" Icon="@Icons.Material.Filled.Preview">시즌 시뮬레이터</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 bool expandedCustomerGroup = true;
private bool expandedWebsiteGroup = false;
private void ToggleDrawer()
{
drawerOpen = !drawerOpen;
}
}