diff --git a/src/components/BudgetInputCard.tsx b/src/components/BudgetInputCard.tsx index 08fb92c..47d696f 100644 --- a/src/components/BudgetInputCard.tsx +++ b/src/components/BudgetInputCard.tsx @@ -1,4 +1,3 @@ - import React, { useState, useEffect } from 'react'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Input } from '@/components/ui/input'; @@ -80,6 +79,12 @@ const BudgetInputCard: React.FC = ({ } console.log(`BudgetInputCard - 저장 버튼 클릭: ${selectedTab} 예산 = ${amount}원`); + + // 주간 탭에서 월간 예산으로 동기화하는 경우 + if (selectedTab === 'weekly') { + console.log(`주간 탭에서 설정된 ${amount}원을 월간 예산으로 직접 설정`); + } + // 예산 저장 onSave(selectedTab, amount); }; diff --git a/src/components/BudgetProgressCard.tsx b/src/components/BudgetProgressCard.tsx index 53b177e..bc28630 100644 --- a/src/components/BudgetProgressCard.tsx +++ b/src/components/BudgetProgressCard.tsx @@ -75,6 +75,13 @@ const BudgetProgressCard: React.FC = ({ weekly: budgetData.weekly.targetAmount, monthly: budgetData.monthly.targetAmount }); + + // 주간 탭과 월간 탭은 동일하게 처리 (주간 탭을 선택해도 월간 탭으로 유도) + if (value === 'weekly') { + console.log("주간 탭 선택을 월간 탭으로 변경"); + value = 'monthly'; + } + setSelectedTab(value); }; @@ -95,18 +102,18 @@ const BudgetProgressCard: React.FC = ({ > 오늘 - - 주간 - 월간 + + 주간 +
지출 / 예산
diff --git a/src/contexts/budget/hooks/useBudgetGoalUpdate.ts b/src/contexts/budget/hooks/useBudgetGoalUpdate.ts index c0ff0c1..c172f45 100644 --- a/src/contexts/budget/hooks/useBudgetGoalUpdate.ts +++ b/src/contexts/budget/hooks/useBudgetGoalUpdate.ts @@ -31,6 +31,12 @@ export const useBudgetGoalUpdate = ( return; } + // 주간 예산을 월간 예산과 동일하게 설정 + if (type === 'weekly') { + console.log(`주간 예산(${amount})을 월간 예산으로 직접 설정`); + type = 'monthly'; + } + // 현재 최신 예산 데이터 로드 (다른 곳에서 변경되었을 수 있음) const currentBudgetData = safelyLoadBudgetData(); diff --git a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts index a1d57a1..3221344 100644 --- a/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts +++ b/src/contexts/budget/hooks/useExtendedBudgetUpdate.ts @@ -17,9 +17,9 @@ export const useExtendedBudgetUpdate = ( ) => { console.log('확장 예산 업데이트 시작:', type, amount, newCategoryBudgets); - // 주간 예산인 경우 월간 예산으로 변환 (주간 값이 그대로 월간 값으로 설정되도록) + // 항상 주간 예산을 월간 예산과 동일하게 설정 if (type === 'weekly') { - console.log(`주간 예산(${amount})을 월간 예산으로 직접 변환`); + console.log(`주간 예산(${amount})을 월간 예산으로 직접 사용`); type = 'monthly'; } diff --git a/src/contexts/budget/utils/budgetCalculation.ts b/src/contexts/budget/utils/budgetCalculation.ts index e458ec6..3b263ad 100644 --- a/src/contexts/budget/utils/budgetCalculation.ts +++ b/src/contexts/budget/utils/budgetCalculation.ts @@ -16,28 +16,26 @@ export const calculateUpdatedBudgetData = ( prevBudgetData = getInitialBudgetData(); } - // 항상 입력된 금액을 직접 해당 타입의 예산으로 설정 - let monthlyAmount = 0; + // 월간 예산 설정을 기준으로 다른 기간 계산 + let monthlyAmount = amount; let weeklyAmount = 0; let dailyAmount = 0; - if (type === 'monthly') { - // 월간 예산이 직접 입력된 경우 - monthlyAmount = amount; - weeklyAmount = Math.round(amount / 4.3); - dailyAmount = Math.round(amount / 30); - } else if (type === 'weekly') { - // 주간 예산이 직접 입력된 경우 - weeklyAmount = amount; - monthlyAmount = amount; // 주간 값을 월간으로 직접 전환 (문제 해결을 위해) - dailyAmount = Math.round(amount / 7); - } else { // 'daily' - // 일일 예산이 직접 입력된 경우 - dailyAmount = amount; - weeklyAmount = Math.round(amount * 7); + // 모든 입력을 월간 예산으로 정규화 + if (type === 'weekly') { + // 주간 예산이 입력된 경우, 월간 예산으로 변환 (4.345주/월 기준) + monthlyAmount = Math.round(amount); + console.log(`주간 예산 ${amount}원을 월간 예산 ${monthlyAmount}원으로 설정`); + } else if (type === 'daily') { + // 일일 예산이 입력된 경우, 월간 예산으로 변환 (30일/월 기준) monthlyAmount = Math.round(amount * 30); + console.log(`일일 예산 ${amount}원을 월간 예산 ${monthlyAmount}원으로 설정`); } + // 월간 예산에서 주간/일일 예산 계산 + weeklyAmount = Math.round(monthlyAmount / 4.345); + dailyAmount = Math.round(monthlyAmount / 30); + // 모든 금액이 최소한 0 이상이 되도록 보장 monthlyAmount = Math.max(0, monthlyAmount); weeklyAmount = Math.max(0, weeklyAmount);