116 lines
4.2 KiB
Plaintext
116 lines
4.2 KiB
Plaintext
@inherits LayoutComponentBase
|
|
@inject NavigationManager Navigation
|
|
@inject IJSRuntime JS
|
|
@implements IDisposable
|
|
|
|
<div class="admin-shell">
|
|
<header class="admin-topbar">
|
|
<button type="button" class="admin-icon-button admin-menu-button" @onclick="ToggleDrawer" aria-label="메뉴 열기">
|
|
<span class="material-icons">menu</span>
|
|
</button>
|
|
|
|
<div class="admin-topbar-title">
|
|
<span class="admin-topbar-kicker">TaxBaik Admin</span>
|
|
<h1>세무회계 관리 대시보드</h1>
|
|
</div>
|
|
|
|
<div class="admin-topbar-actions">
|
|
<a class="admin-topbar-action" href="/taxbaik" target="_blank" rel="noreferrer">
|
|
<span class="material-icons">open_in_new</span>
|
|
공개 사이트
|
|
</a>
|
|
<a class="admin-topbar-action danger" href="/taxbaik/admin/logout">
|
|
<span class="material-icons">logout</span>
|
|
로그아웃
|
|
</a>
|
|
</div>
|
|
</header>
|
|
|
|
<aside class="@DrawerClass">
|
|
<div class="admin-drawer-brand">
|
|
<div class="admin-brand-mark">T</div>
|
|
<div>
|
|
<div class="admin-brand-title">TaxBaik</div>
|
|
<div class="admin-brand-subtitle">세무 운영 콘솔</div>
|
|
</div>
|
|
</div>
|
|
|
|
<nav class="admin-nav">
|
|
<a href="/taxbaik/admin/dashboard" class="admin-nav-link">대시보드</a>
|
|
|
|
<details open>
|
|
<summary>CRM & 세무관리</summary>
|
|
<a href="/taxbaik/admin/tax-profiles" class="admin-nav-link">세무 프로필</a>
|
|
<a href="/taxbaik/admin/tax-filing-schedules" class="admin-nav-link">신고 일정</a>
|
|
<a href="/taxbaik/admin/contracts" class="admin-nav-link">계약 관리</a>
|
|
<a href="/taxbaik/admin/consulting-activities" class="admin-nav-link">상담 활동</a>
|
|
<a href="/taxbaik/admin/revenue-trackings" class="admin-nav-link">수익 추적</a>
|
|
</details>
|
|
|
|
<details>
|
|
<summary>고객 관리</summary>
|
|
<a href="/taxbaik/admin/clients" class="admin-nav-link">고객 카드</a>
|
|
<a href="/taxbaik/admin/tax-filings" class="admin-nav-link">세무신고</a>
|
|
</details>
|
|
|
|
<details>
|
|
<summary>홈페이지</summary>
|
|
<a href="/taxbaik/admin/announcements" class="admin-nav-link">공지사항</a>
|
|
<a href="/taxbaik/admin/faqs" class="admin-nav-link">FAQ 관리</a>
|
|
<a href="/taxbaik/admin/blog" class="admin-nav-link">블로그 관리</a>
|
|
<a href="/taxbaik/admin/season-simulator" class="admin-nav-link">시즌 시뮬레이터</a>
|
|
</details>
|
|
|
|
<a href="/taxbaik/admin/inquiries" class="admin-nav-link">문의 관리</a>
|
|
<a href="/taxbaik/admin/settings" class="admin-nav-link">설정</a>
|
|
</nav>
|
|
|
|
<div class="admin-drawer-footer">
|
|
<div class="admin-footer-item">
|
|
<span class="material-icons">shield</span>
|
|
<span>보안 모드</span>
|
|
</div>
|
|
<div class="admin-footer-meta">Fluent UI Blazor 기반 관리자 콘솔</div>
|
|
</div>
|
|
</aside>
|
|
|
|
<main class="admin-content">
|
|
<div class="admin-content-inner">
|
|
@Body
|
|
</div>
|
|
</main>
|
|
</div>
|
|
|
|
@code {
|
|
private bool drawerOpen = true;
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
Navigation.LocationChanged += OnLocationChanged;
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (!firstRender)
|
|
return;
|
|
|
|
var viewportWidth = await JS.InvokeAsync<int>("taxbaikAdminSession.getViewportWidth");
|
|
drawerOpen = viewportWidth >= 960;
|
|
StateHasChanged();
|
|
}
|
|
|
|
private string DrawerClass => drawerOpen ? "admin-drawer open" : "admin-drawer";
|
|
|
|
private void OnLocationChanged(object? sender, LocationChangedEventArgs args)
|
|
{
|
|
_ = InvokeAsync(() => JS.InvokeVoidAsync("taxbaikAdminSession.showLoading"));
|
|
}
|
|
|
|
private void ToggleDrawer() => drawerOpen = !drawerOpen;
|
|
|
|
public void Dispose()
|
|
{
|
|
Navigation.LocationChanged -= OnLocationChanged;
|
|
}
|
|
}
|