From b7cb442937f26e66d292fe194f12a615ab05f5ca Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sun, 5 Jul 2026 19:13:59 +0900 Subject: [PATCH] fix(admin): minimize crm render path --- .../Admin/Pages/ConsultingActivities.razor | 246 ++---------------- .../Admin/Pages/RevenueTrackings.razor | 227 ++-------------- .../Components/Admin/Shared/AdminShell.razor | 135 ++++------ 3 files changed, 100 insertions(+), 508 deletions(-) diff --git a/src/TaxBaik.Web.Client/Components/Admin/Pages/ConsultingActivities.razor b/src/TaxBaik.Web.Client/Components/Admin/Pages/ConsultingActivities.razor index b915d8a..88fd559 100644 --- a/src/TaxBaik.Web.Client/Components/Admin/Pages/ConsultingActivities.razor +++ b/src/TaxBaik.Web.Client/Components/Admin/Pages/ConsultingActivities.razor @@ -5,7 +5,6 @@ @inject IConsultingActivityBrowserClient ActivityClient @inject IClientBrowserClient ClientClient @inject ISnackbar Snackbar -@inject IDialogService DialogService @attribute [Authorize] 상담 활동 관리 @@ -14,11 +13,8 @@
CRM & 세무관리 상담 활동 관리 - 고객별 상담 이력과 팔로업을 추적합니다. + 초기 렌더 진단용 최소 화면입니다.
- - 새 활동 기록 - @@ -27,102 +23,36 @@ } else if (activities.Count == 0) { - - - 상담 활동이 없습니다. - + 상담 활동이 없습니다. } else { - - - - - - @if (clientMap.TryGetValue(context.Item.ClientId, out var clientName)) - { - - @clientName - - } - - - - - - - @{ - var desc = context.Item.Description ?? ""; - if (desc.Length > 30) desc = desc.Substring(0, 30) + "..."; - } - @desc - - - - - @if (context.Item.NextFollowupDate.HasValue) - { - var daysLeft = (context.Item.NextFollowupDate.Value.Date - DateTime.Today).Days; - - @context.Item.NextFollowupDate.Value.ToString("yyyy-MM-dd") - - } - - - - - - - - - - - - + + + + + + + + + + + + @foreach (var item in activities) + { + + + + + + + + } + +
ID고객활동 유형활동일시설명
@item.Id@clientMap.GetValueOrDefault(item.ClientId)@item.ActivityType@item.ActivityDate.ToString("g")@item.Description
}
- - - @(editingActivity == null ? "새 활동 기록" : "활동 기록 수정") - - - -
- - -
- - - - -
-
- - 취소 - 저장 - -
- @code { [CascadingParameter] private Task? AuthStateTask { get; set; } @@ -130,10 +60,6 @@ private List? activities; private List clients = []; private Dictionary clientMap = new(); - private MudForm? form; - private bool isDialogOpen; - private ConsultingActivity? editingActivity; - private ConsultingActivityForm activityForm = new(); private RenderFragment ActivitySkeleton => builder => { @@ -178,126 +104,6 @@ } } - private void OpenCreateDialog() - { - editingActivity = null; - activityForm = new ConsultingActivityForm - { - ActivityDate = DateTime.Now, - ClientId = clients.FirstOrDefault()?.Id ?? 0 - }; - isDialogOpen = true; - } - - private async Task OpenEditDialog(ConsultingActivity activity) - { - editingActivity = activity; - activityForm = new ConsultingActivityForm - { - ClientId = activity.ClientId, - ActivityType = activity.ActivityType, - ActivityDate = activity.ActivityDate, - Description = activity.Description, - NextFollowupDate = activity.NextFollowupDate - }; - isDialogOpen = true; - } - - private async Task SaveActivity() - { - if (form != null) - { - await form.Validate(); - if (!form.IsValid) - { - Snackbar.Add("필수 항목을 입력해주세요.", Severity.Warning); - return; - } - } - - try - { - if (editingActivity == null) - { - var actDate = activityForm.ActivityDate ?? DateTime.Now; - var newId = await ActivityClient.CreateAsync( - activityForm.ClientId, - activityForm.ActivityType, - actDate, - activityForm.Description, - null, - activityForm.NextFollowupDate); - - if (newId > 0) - { - Snackbar.Add("활동이 기록되었습니다.", Severity.Success); - CloseDialog(); - await LoadData(); - } - } - else - { - await ActivityClient.UpdateAsync( - editingActivity.Id, - null, - activityForm.NextFollowupDate); - - Snackbar.Add("활동이 업데이트되었습니다.", Severity.Success); - CloseDialog(); - await LoadData(); - } - } - catch (Exception ex) - { - Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error); - } - } - - private async Task DeleteActivity(int id) - { - var parameters = new DialogParameters - { - { "Title", "삭제 확인" }, - { "Message", "이 활동을 삭제하시겠습니까?" } - }; - - var dialog = await DialogService.ShowAsync("", parameters); - var result = await dialog.Result; - - if (result?.Canceled ?? true) - return; - - try - { - await ActivityClient.DeleteAsync(id); - Snackbar.Add("활동이 삭제되었습니다.", Severity.Success); - await LoadData(); - } - catch (Exception ex) - { - Snackbar.Add($"삭제 실패: {ex.Message}", Severity.Error); - } - } - - private void CloseDialog() - { - isDialogOpen = false; - editingActivity = null; - activityForm = new(); - } - private static string GetClientDisplayName(Client client) - => !string.IsNullOrWhiteSpace(client.CompanyName) - ? client.CompanyName - : !string.IsNullOrWhiteSpace(client.Name) - ? client.Name - : $"Client #{client.Id}"; - private class ConsultingActivityForm - { - public int ClientId { get; set; } - public string ActivityType { get; set; } = ""; - public DateTime? ActivityDate { get; set; } = DateTime.Now; - public string Description { get; set; } = ""; - public DateTime? NextFollowupDate { get; set; } - } + => !string.IsNullOrWhiteSpace(client.CompanyName) ? $"{client.Name} ({client.CompanyName})" : client.Name; } diff --git a/src/TaxBaik.Web.Client/Components/Admin/Pages/RevenueTrackings.razor b/src/TaxBaik.Web.Client/Components/Admin/Pages/RevenueTrackings.razor index 4fafcc3..7486550 100644 --- a/src/TaxBaik.Web.Client/Components/Admin/Pages/RevenueTrackings.razor +++ b/src/TaxBaik.Web.Client/Components/Admin/Pages/RevenueTrackings.razor @@ -5,7 +5,6 @@ @inject IRevenueTrackingBrowserClient RevenueClient @inject IClientBrowserClient ClientClient @inject ISnackbar Snackbar -@inject IDialogService DialogService @attribute [Authorize] 수익 추적 관리 @@ -14,11 +13,8 @@
CRM & 세무관리 수익 추적 관리 - 청구, 납부, 미수금 상태를 한 화면에서 관리합니다. + 초기 렌더 진단용 최소 화면입니다.
- - 새 청구 추가 - @@ -27,99 +23,36 @@ } else if (revenues.Count == 0) { - - - 청구 기록이 없습니다. - + 청구 기록이 없습니다. } else { - - - - - - @if (clientMap.TryGetValue(context.Item.ClientId, out var clientName)) - { - - @clientName - - } - - - - - - - - @if (context.Item.PaymentStatus == "paid") - { - 납부 - } - else - { - 미납 - } - - - - - - @if (context.Item.PaymentStatus != "paid") - { - - } - - - - - - + + + + + + + + + + + + @foreach (var item in revenues) + { + + + + + + + + } + +
ID고객청구번호청구일청구액
@item.Id@clientMap.GetValueOrDefault(item.ClientId)@item.InvoiceNumber@item.InvoiceDate.ToString("yyyy-MM-dd")@item.Amount.ToString("C")
}
- - - - 새 청구 추가 - - - -
- - -
- - - - - -
-
- - 취소 - 저장 - -
- @code { [CascadingParameter] private Task? AuthStateTask { get; set; } @@ -127,9 +60,6 @@ private List? revenues; private List clients = []; private Dictionary clientMap = new(); - private MudForm? form; - private bool isDialogOpen; - private RevenueForm revenueForm = new(); private RenderFragment RevenueSkeleton => builder => { @@ -174,111 +104,6 @@ } } - private void OpenCreateDialog() - { - revenueForm = new RevenueForm - { - ClientId = clients.FirstOrDefault()?.Id ?? 0, - InvoiceDate = DateTime.Today, - DueDate = DateTime.Today.AddDays(14) - }; - isDialogOpen = true; - } - - private async Task SaveRevenue() - { - if (form != null) - { - await form.Validate(); - if (!form.IsValid) - { - Snackbar.Add("필수 항목을 입력해주세요.", Severity.Warning); - return; - } - } - - try - { - var newId = await RevenueClient.CreateAsync( - revenueForm.ClientId, - revenueForm.InvoiceNumber, - revenueForm.InvoiceDate ?? DateTime.Now, - revenueForm.Amount, - revenueForm.ServiceType, - revenueForm.DueDate); - - if (newId > 0) - { - Snackbar.Add("청구가 추가되었습니다.", Severity.Success); - CloseDialog(); - await LoadData(); - } - } - catch (Exception ex) - { - Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error); - } - } - - private async Task MarkPaid(int id) - { - try - { - await RevenueClient.MarkPaidAsync(id, DateTime.Now); - Snackbar.Add("납부가 처리되었습니다.", Severity.Success); - await LoadData(); - } - catch (Exception ex) - { - Snackbar.Add($"처리 실패: {ex.Message}", Severity.Error); - } - } - - private async Task DeleteRevenue(int id) - { - var parameters = new DialogParameters - { - { "Title", "삭제 확인" }, - { "Message", "이 청구를 삭제하시겠습니까?" } - }; - - var dialog = await DialogService.ShowAsync("", parameters); - var result = await dialog.Result; - - if (result?.Canceled ?? true) - return; - - try - { - await RevenueClient.DeleteAsync(id); - Snackbar.Add("청구가 삭제되었습니다.", Severity.Success); - await LoadData(); - } - catch (Exception ex) - { - Snackbar.Add($"삭제 실패: {ex.Message}", Severity.Error); - } - } - - private void CloseDialog() - { - isDialogOpen = false; - revenueForm = new(); - } - private static string GetClientDisplayName(Client client) - => !string.IsNullOrWhiteSpace(client.CompanyName) - ? client.CompanyName - : !string.IsNullOrWhiteSpace(client.Name) - ? client.Name - : $"Client #{client.Id}"; - private class RevenueForm - { - public int ClientId { get; set; } - public string InvoiceNumber { get; set; } = ""; - public DateTime? InvoiceDate { get; set; } - public decimal Amount { get; set; } - public string? ServiceType { get; set; } - public DateTime? DueDate { get; set; } - } + => !string.IsNullOrWhiteSpace(client.CompanyName) ? $"{client.Name} ({client.CompanyName})" : client.Name; } diff --git a/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminShell.razor b/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminShell.razor index ddabcc9..f89f878 100644 --- a/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminShell.razor +++ b/src/TaxBaik.Web.Client/Components/Admin/Shared/AdminShell.razor @@ -1,100 +1,66 @@ @inject NavigationManager Navigation @implements IDisposable - - - +
+
+
- TaxBaik - 세무회계 관리 대시보드 +
TaxBaik
+
세무회계 관리 대시보드
- -
- - 공개 사이트 - - - - - - 로그아웃 - + 공개 사이트 + 로그아웃
- +
- -
-
T
-
- TaxBaik - 세무 운영 콘솔 +
+ @if (drawerOpen) + { + + } + +
+
+ @ChildContent
-
- - 대시보드 - - 세무 프로필 - 신고 일정 - 계약 관리 - 상담 활동 - 수익 추적 - - - 고객 카드 - 세무신고 - - - 공지사항 - FAQ 관리 - 블로그 관리 - 시즌 시뮬레이터 - - 문의 관리 - 설정 - 공통관리 - -
-
Version
-
vunknown
-
unknown
-
- - - - - @ChildContent - - - + +
+
@code { [Parameter] public RenderFragment? ChildContent { get; set; } private bool drawerOpen = true; - private bool expandedCRMGroup = true; - private bool expandedCustomerGroup = false; - private bool expandedWebsiteGroup = false; protected override void OnInitialized() { @@ -110,11 +76,6 @@ drawerOpen = !drawerOpen; } - private void NavigateTo(string url) - { - Navigation.NavigateTo(url); - } - public void Dispose() { Navigation.LocationChanged -= OnLocationChanged;