feat(WEB): 공사관리 리스트 공통화 및 캘린더/포맷터 기능 개선

공사관리 리스트 공통화:
- 입찰/계약/견적/인수인계/이슈/품목/노무/현장/파트너/단가/기성/현장브리핑/구조검토/유틸리티/작업자현황 리스트 공통 포맷터 적용
- 중복 포맷팅 로직 제거 (-530줄)

캘린더 기능 개선:
- CEODashboard CalendarSection 기능 확장
- ScheduleCalendar DayCell/MonthView/WeekView 개선
- ui/calendar 컴포넌트 기능 추가

유틸리티 개선:
- date.ts 날짜 유틸 함수 추가
- formatAmount.ts 금액 포맷 함수 추가

신규 추가:
- useListHandlers 훅 추가
- src/constants/ 디렉토리 추가
- 포맷터 공통화 계획 문서 추가
- SAM ERP/MES 정체성 분석 문서 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-05 17:38:38 +09:00
parent 2639724f9f
commit 32d6e3bbbd
36 changed files with 852 additions and 530 deletions

View File

@@ -11,9 +11,9 @@
* - 삭제 기능 없음 (조회/수정 전용)
*/
import { useState, useMemo, useCallback, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { useState, useMemo, useEffect } from 'react';
import { FileText, Pencil } from 'lucide-react';
import { useListHandlers } from '@/hooks/useListHandlers';
import { Button } from '@/components/ui/button';
import { TableCell, TableRow } from '@/components/ui/table';
import { Checkbox } from '@/components/ui/checkbox';
@@ -68,7 +68,10 @@ export default function ProgressBillingManagementListClient({
initialData = [],
initialStats,
}: ProgressBillingManagementListClientProps) {
const router = useRouter();
// ===== 공통 핸들러 Hook =====
const { handleRowClick, handleEdit } = useListHandlers<ProgressBilling>(
'construction/billing/progress-billing-management'
);
// ===== 외부 상태 (UniversalListPage 외부에서 관리) =====
const [activeStatTab, setActiveStatTab] = useState<'all' | 'contractWaiting' | 'contractComplete'>('all');
@@ -88,21 +91,6 @@ export default function ProgressBillingManagementListClient({
}
}, [initialStats]);
// ===== 핸들러 =====
const handleRowClick = useCallback(
(item: ProgressBilling) => {
router.push(`/ko/construction/billing/progress-billing-management/${item.id}?mode=view`);
},
[router]
);
const handleEdit = useCallback(
(item: ProgressBilling) => {
router.push(`/ko/construction/billing/progress-billing-management/${item.id}?mode=edit`);
},
[router]
);
// ===== UniversalListPage Config =====
const config: UniversalListConfig<ProgressBilling> = useMemo(
() => ({