f8f8f869fc
TaxBaik CI/CD / build-and-deploy (push) Successful in 52s
Step 4: Navigation Reorganization - Add new 'CRM & 세무관리' nav group (BusinessCenter icon) - Organize 5 CRM pages: TaxProfiles, TaxFilingSchedules, Contracts, ConsultingActivities, RevenueTrackings - Reorder nav groups: Dashboard → CRM (default expanded) → Customer → Website → Inquiries → Settings - Update 'Customer' group label and icons for clarity - Set expandedCRMGroup=true for immediate visibility Navigation Structure (Post-change): ` 대시보드 ├─ CRM & 세무관리 [EXPANDED] │ ├─ 세무 프로필 (Assignment icon) │ ├─ 신고 일정 (CalendarMonth icon) │ ├─ 계약 관리 (Description icon) │ ├─ 상담 활동 (ChatBubble icon) │ └─ 수익 추적 (Receipt icon) ├─ 고객 관리 │ ├─ 고객 카드 │ └─ 세무신고 ├─ 홈페이지 │ ├─ 공지사항 │ ├─ FAQ 관리 │ ├─ 블로그 관리 │ └─ 시즌 시뮬레이터 ├─ 문의 관리 └─ 설정 ` Design Rationale: - CRM group positioned first (after dashboard) for workflow priority - Default expanded = immediate page discovery - Icons from Material Design Filled set for consistency - Grouped by business domain, not by data type Build Status: 0 errors, 3 warnings (existing) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
139 lines
6.2 KiB
Plaintext
139 lines
6.2 KiB
Plaintext
@inherits LayoutComponentBase
|
|
@inject NavigationManager Navigation
|
|
@inject IJSRuntime JS
|
|
@implements IDisposable
|
|
|
|
<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" Color="Color.Secondary">TaxBaik Admin</MudText>
|
|
<MudText Typo="Typo.h6">세무회계 관리 대시보드</MudText>
|
|
</div>
|
|
<MudSpacer />
|
|
|
|
<!-- 상단 액션 바 -->
|
|
<div class="admin-topbar-actions">
|
|
<MudTooltip Text="공개 웹사이트 방문">
|
|
<MudButton Class="admin-topbar-action"
|
|
Variant="Variant.Text"
|
|
Color="Color.Inherit"
|
|
Size="Size.Small"
|
|
StartIcon="@Icons.Material.Filled.OpenInNew"
|
|
Href="/taxbaik"
|
|
Target="_blank">
|
|
공개 사이트
|
|
</MudButton>
|
|
</MudTooltip>
|
|
|
|
<MudDivider Vertical="true" FlexItem="true" Class="mx-2" />
|
|
|
|
<MudTooltip Text="로그아웃 (Ctrl+Q)">
|
|
<MudButton Class="admin-topbar-action"
|
|
Variant="Variant.Text"
|
|
Color="Color.Error"
|
|
Size="Size.Small"
|
|
StartIcon="@Icons.Material.Filled.Logout"
|
|
Href="/taxbaik/admin/logout">
|
|
로그아웃
|
|
</MudButton>
|
|
</MudTooltip>
|
|
</div>
|
|
</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="CRM & 세무관리" Icon="@Icons.Material.Filled.BusinessCenter" @bind-Expanded="@expandedCRMGroup">
|
|
<MudNavLink Href="/taxbaik/admin/tax-profiles" Icon="@Icons.Material.Filled.Assignment">세무 프로필</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/tax-filing-schedules" Icon="@Icons.Material.Filled.CalendarMonth">신고 일정</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/contracts" Icon="@Icons.Material.Filled.Description">계약 관리</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/consulting-activities" Icon="@Icons.Material.Filled.ChatBubble">상담 활동</MudNavLink>
|
|
<MudNavLink Href="/taxbaik/admin/revenue-trackings" Icon="@Icons.Material.Filled.Receipt">수익 추적</MudNavLink>
|
|
</MudNavGroup>
|
|
|
|
<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.Assessment">세무신고</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">
|
|
<MudDivider Class="my-2" />
|
|
<MudStack Spacing="1" Class="px-3 py-2">
|
|
<div class="admin-footer-item">
|
|
<MudIcon Icon="@Icons.Material.Filled.Info" Size="Size.Small" />
|
|
<MudText Typo="Typo.caption" Class="ml-2">시스템</MudText>
|
|
</div>
|
|
<MudText Typo="Typo.caption" Color="Color.Secondary">
|
|
운영 서버: 178.104.200.7
|
|
</MudText>
|
|
<MudText Typo="Typo.caption" Color="Color.Secondary">
|
|
업데이트: 자동 배포 시스템
|
|
</MudText>
|
|
<MudText Typo="Typo.caption" Color="Color.Secondary">
|
|
상태: 정상
|
|
</MudText>
|
|
</MudStack>
|
|
</div>
|
|
</MudDrawer>
|
|
|
|
<MudMainContent Class="admin-main">
|
|
<MudContainer MaxWidth="MaxWidth.False" Class="admin-content">
|
|
@Body
|
|
</MudContainer>
|
|
</MudMainContent>
|
|
</MudLayout>
|
|
|
|
@code {
|
|
private bool drawerOpen = true;
|
|
private bool expandedCRMGroup = true;
|
|
private bool expandedCustomerGroup = false;
|
|
private bool expandedWebsiteGroup = false;
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
Navigation.LocationChanged += OnLocationChanged;
|
|
}
|
|
|
|
private void OnLocationChanged(object? sender, LocationChangedEventArgs args)
|
|
{
|
|
_ = InvokeAsync(() => JS.InvokeVoidAsync("taxbaikAdminSession.showLoading"));
|
|
}
|
|
|
|
private void ToggleDrawer()
|
|
{
|
|
drawerOpen = !drawerOpen;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Navigation.LocationChanged -= OnLocationChanged;
|
|
}
|
|
}
|