feat(WEB): CEO 대시보드 Phase 2 API 연동 완료
- StatusBoard(현황판) API Hook 및 타입 추가 - TodayIssue(오늘의 이슈) API Hook 및 타입 추가 - Calendar(캘린더) API Hook 및 타입 추가 - Vat(부가세) API Hook 및 타입 추가 - Entertainment(접대비) API Hook 및 타입 추가 - Welfare(복리후생비) API Hook 및 타입 추가 - CEODashboard.tsx에 모든 Phase 2 Hook 통합 - API 응답 → Frontend 타입 변환 transformer 추가 - WelfareCalculationType 'percentage' → 'ratio' 타입 일치 수정
This commit is contained in:
@@ -25,7 +25,7 @@ import { DEFAULT_DASHBOARD_SETTINGS } from './types';
|
||||
import { ScheduleDetailModal, DetailModal } from './modals';
|
||||
import { DashboardSettingsDialog } from './dialogs/DashboardSettingsDialog';
|
||||
import { mockData } from './mockData';
|
||||
import { useCEODashboard } from '@/hooks/useCEODashboard';
|
||||
import { useCEODashboard, useTodayIssue, useCalendar, useVat, useEntertainment, useWelfare } from '@/hooks/useCEODashboard';
|
||||
import {
|
||||
getMonthlyExpenseModalConfig,
|
||||
getCardManagementModalConfig,
|
||||
@@ -42,6 +42,21 @@ export function CEODashboard() {
|
||||
cardManagementFallback: mockData.cardManagement,
|
||||
});
|
||||
|
||||
// TodayIssue API Hook (Phase 2)
|
||||
const todayIssueData = useTodayIssue(30);
|
||||
|
||||
// Calendar API Hook (Phase 2)
|
||||
const calendarData = useCalendar();
|
||||
|
||||
// Vat API Hook (Phase 2)
|
||||
const vatData = useVat();
|
||||
|
||||
// Entertainment API Hook (Phase 2)
|
||||
const entertainmentData = useEntertainment();
|
||||
|
||||
// Welfare API Hook (Phase 2)
|
||||
const welfareData = useWelfare();
|
||||
|
||||
// 전체 로딩 상태 (모든 API 호출 중일 때)
|
||||
const isLoading = useMemo(() => {
|
||||
return (
|
||||
@@ -49,9 +64,15 @@ export function CEODashboard() {
|
||||
apiData.receivable.loading &&
|
||||
apiData.debtCollection.loading &&
|
||||
apiData.monthlyExpense.loading &&
|
||||
apiData.cardManagement.loading
|
||||
apiData.cardManagement.loading &&
|
||||
apiData.statusBoard.loading &&
|
||||
todayIssueData.loading &&
|
||||
calendarData.loading &&
|
||||
vatData.loading &&
|
||||
entertainmentData.loading &&
|
||||
welfareData.loading
|
||||
);
|
||||
}, [apiData]);
|
||||
}, [apiData, todayIssueData.loading, calendarData.loading, vatData.loading, entertainmentData.loading, welfareData.loading]);
|
||||
|
||||
// API 데이터와 mockData를 병합 (API 우선, 실패 시 fallback)
|
||||
const data = useMemo<CEODashboardData>(() => ({
|
||||
@@ -62,9 +83,14 @@ export function CEODashboard() {
|
||||
debtCollection: apiData.debtCollection.data ?? mockData.debtCollection,
|
||||
monthlyExpense: apiData.monthlyExpense.data ?? mockData.monthlyExpense,
|
||||
cardManagement: apiData.cardManagement.data ?? mockData.cardManagement,
|
||||
// Phase 2 섹션들: 아직 mockData 사용
|
||||
// todayIssue, todayIssueList, entertainment, welfare, vat, calendarSchedules
|
||||
}), [apiData, mockData]);
|
||||
// Phase 2 섹션들
|
||||
todayIssue: apiData.statusBoard.data ?? mockData.todayIssue,
|
||||
todayIssueList: todayIssueData.data?.items ?? mockData.todayIssueList,
|
||||
calendarSchedules: calendarData.data?.items ?? mockData.calendarSchedules,
|
||||
vat: vatData.data ?? mockData.vat,
|
||||
entertainment: entertainmentData.data ?? mockData.entertainment,
|
||||
welfare: welfareData.data ?? mockData.welfare,
|
||||
}), [apiData, todayIssueData.data, calendarData.data, vatData.data, entertainmentData.data, welfareData.data, mockData]);
|
||||
|
||||
// 일정 상세 모달 상태
|
||||
const [isScheduleModalOpen, setIsScheduleModalOpen] = useState(false);
|
||||
|
||||
@@ -3,9 +3,9 @@ import type { DetailModalConfig } from '../types';
|
||||
/**
|
||||
* 복리후생비 현황 모달 설정
|
||||
* 모든 카드가 동일한 상세 모달
|
||||
* @param calculationType - 계산 방식 ('fixed': 직원당 정액 금액/월, 'percentage': 연봉 총액 비율)
|
||||
* @param calculationType - 계산 방식 ('fixed': 직원당 정액 금액/월, 'ratio': 연봉 총액 비율)
|
||||
*/
|
||||
export function getWelfareModalConfig(calculationType: 'fixed' | 'percentage'): DetailModalConfig {
|
||||
export function getWelfareModalConfig(calculationType: 'fixed' | 'ratio'): DetailModalConfig {
|
||||
// 계산 방식에 따른 조건부 calculationCards 생성
|
||||
const calculationCards = calculationType === 'fixed'
|
||||
? {
|
||||
|
||||
Reference in New Issue
Block a user