@@ -158,8 +153,8 @@ export function PurchaseStatusSection({ data }: PurchaseStatusSectionProps) {
{/* 당월 매입 내역 (별도 카드) */}
}
- title="당월 매입 내역"
- subtitle="당월 매입 거래 상세"
+ title="최근 매입 내역"
+ subtitle="매입 거래 상세"
bodyClassName="p-0"
>
diff --git a/src/components/business/CEODashboard/types.ts b/src/components/business/CEODashboard/types.ts
index 6405def2..80434976 100644
--- a/src/components/business/CEODashboard/types.ts
+++ b/src/components/business/CEODashboard/types.ts
@@ -725,13 +725,13 @@ export const DEFAULT_DASHBOARD_SETTINGS: DashboardSettings = {
orders: true,
debtCollection: true,
safetyStock: true,
- taxReport: false,
- newVendor: false,
+ taxReport: true,
+ newVendor: true,
annualLeave: true,
vehicle: false,
equipment: false,
purchase: false,
- approvalRequest: false,
+ approvalRequest: true,
fundStatus: true,
},
},
@@ -774,13 +774,13 @@ export const DEFAULT_DASHBOARD_SETTINGS: DashboardSettings = {
orders: true,
debtCollection: true,
safetyStock: true,
- taxReport: false,
- newVendor: false,
+ taxReport: true,
+ newVendor: true,
annualLeave: true,
vehicle: false,
equipment: false,
purchase: false,
- approvalRequest: false,
+ approvalRequest: true,
fundStatus: true,
},
},
diff --git a/src/components/business/construction/management/ConstructionDetailClient.tsx b/src/components/business/construction/management/ConstructionDetailClient.tsx
index 986e6321..02df109a 100644
--- a/src/components/business/construction/management/ConstructionDetailClient.tsx
+++ b/src/components/business/construction/management/ConstructionDetailClient.tsx
@@ -1,6 +1,7 @@
'use client';
import { useState, useEffect, useCallback, useMemo } from 'react';
+import { invalidateDashboard } from '@/lib/dashboard-invalidation';
import dynamic from 'next/dynamic';
import { useRouter } from 'next/navigation';
import { getTodayString, formatDate } from '@/lib/utils/date';
@@ -243,6 +244,7 @@ export default function ConstructionDetailClient({ id, mode }: ConstructionDetai
try {
const result = await updateConstructionManagementDetail(id, formData);
if (result.success) {
+ invalidateDashboard('construction');
toast.success('저장되었습니다.');
return { success: true };
} else {
@@ -265,6 +267,7 @@ export default function ConstructionDetailClient({ id, mode }: ConstructionDetai
try {
const result = await completeConstruction(id);
if (result.success) {
+ invalidateDashboard('construction');
toast.success('시공이 완료되었습니다.');
router.push('/ko/construction/project/construction-management');
} else {
diff --git a/src/components/hr/AttendanceManagement/index.tsx b/src/components/hr/AttendanceManagement/index.tsx
index 30fe53e7..7e01e403 100644
--- a/src/components/hr/AttendanceManagement/index.tsx
+++ b/src/components/hr/AttendanceManagement/index.tsx
@@ -1,6 +1,7 @@
'use client';
import { useState, useMemo, useCallback, useEffect, useRef } from 'react';
+import { invalidateDashboard } from '@/lib/dashboard-invalidation';
import { useRouter } from 'next/navigation';
import {
Clock,
@@ -310,6 +311,7 @@ export function AttendanceManagement() {
if (attendanceDialogMode === 'create') {
const result = await createAttendance(data);
if (result.success && result.data) {
+ invalidateDashboard('attendance');
setAttendanceRecords(prev => [result.data!, ...prev]);
} else {
console.error('Create failed:', result.error);
@@ -317,6 +319,7 @@ export function AttendanceManagement() {
} else if (selectedAttendance) {
const result = await updateAttendance(selectedAttendance.id, data);
if (result.success && result.data) {
+ invalidateDashboard('attendance');
setAttendanceRecords(prev =>
prev.map(r => r.id === selectedAttendance.id ? result.data! : r)
);
diff --git a/src/components/hr/VacationManagement/index.tsx b/src/components/hr/VacationManagement/index.tsx
index f67e9eb1..5276d9e1 100644
--- a/src/components/hr/VacationManagement/index.tsx
+++ b/src/components/hr/VacationManagement/index.tsx
@@ -1,6 +1,7 @@
'use client';
import { useState, useMemo, useCallback, useEffect, useRef } from 'react';
+import { invalidateDashboard } from '@/lib/dashboard-invalidation';
import { format } from 'date-fns';
import { useDateRange } from '@/hooks';
import {
@@ -312,6 +313,7 @@ export function VacationManagement() {
const ids = Array.from(selectedItems).map((id) => parseInt(id, 10));
const result = await approveLeavesMany(ids);
if (result.success) {
+ invalidateDashboard('leave');
await fetchLeaveRequests();
await fetchUsageData(); // 휴가 사용현황도 갱신
} else {
@@ -340,6 +342,7 @@ export function VacationManagement() {
const ids = Array.from(selectedItems).map((id) => parseInt(id, 10));
const result = await rejectLeavesMany(ids, '관리자에 의해 반려됨');
if (result.success) {
+ invalidateDashboard('leave');
await fetchLeaveRequests();
} else {
console.error('[VacationManagement] 반려 실패:', result.error);
@@ -750,6 +753,7 @@ export function VacationManagement() {
reason: data.reason,
});
if (result.success) {
+ invalidateDashboard('leave');
await fetchGrantData();
await fetchUsageData();
} else {
@@ -780,6 +784,7 @@ export function VacationManagement() {
days: data.vacationDays,
});
if (result.success) {
+ invalidateDashboard('leave');
await fetchLeaveRequests();
await fetchUsageData();
} else {
diff --git a/src/components/layout/HeaderFavoritesBar.tsx b/src/components/layout/HeaderFavoritesBar.tsx
index d4421391..9600e0aa 100644
--- a/src/components/layout/HeaderFavoritesBar.tsx
+++ b/src/components/layout/HeaderFavoritesBar.tsx
@@ -2,7 +2,7 @@
import { useCallback, useEffect, useRef, useState } from 'react';
import { useRouter } from 'next/navigation';
-import { Bookmark, MoreHorizontal } from 'lucide-react';
+import { Pin, MoreHorizontal } from 'lucide-react';
import { Button } from '@/components/ui/button';
import {
Tooltip,
@@ -51,7 +51,7 @@ function StarDropdown({
className={`p-0 rounded-xl bg-blue-600 hover:bg-blue-700 text-white flex items-center justify-center ${className ?? 'w-10 h-10'}`}
title="즐겨찾기"
>
-
+
diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx
index fe7212f7..c065ba54 100644
--- a/src/components/layout/Sidebar.tsx
+++ b/src/components/layout/Sidebar.tsx
@@ -1,4 +1,4 @@
-import { Bookmark, ChevronRight, ChevronsDownUp, ChevronsUpDown, Circle } from 'lucide-react';
+import { Pin, ChevronRight, ChevronsDownUp, ChevronsUpDown, Circle } from 'lucide-react';
import type { MenuItem } from '@/stores/menuStore';
import { useEffect, useRef, useCallback } from 'react';
import { useFavoritesStore, MAX_FAVORITES } from '@/stores/favoritesStore';
@@ -159,7 +159,7 @@ function MenuItemComponent({
}`}
title={isFav ? '즐겨찾기 해제' : '즐겨찾기 추가'}
>
-
+
)}
@@ -224,7 +224,7 @@ function MenuItemComponent({
}`}
title={isFav ? '즐겨찾기 해제' : '즐겨찾기 추가'}
>
-