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

@@ -3,14 +3,36 @@
import * as React from "react";
import { ChevronLeft, ChevronRight } from "lucide-react";
import { DayPicker } from "react-day-picker";
import { format, getDay } from "date-fns";
import { cn } from "./utils";
import { buttonVariants } from "./button";
import { isHoliday } from "@/constants/calendarEvents";
// 토요일 체크 함수 (react-day-picker modifier용)
const saturdayMatcher = (date: Date) => {
const dateStr = format(date, "yyyy-MM-dd");
// 토요일이면서 공휴일이 아닌 경우만
return getDay(date) === 6 && !isHoliday(dateStr);
};
// 일요일 체크 함수 (react-day-picker modifier용)
const sundayMatcher = (date: Date) => {
return getDay(date) === 0;
};
// 공휴일 체크 함수 (react-day-picker modifier용)
const holidayMatcher = (date: Date) => {
const dateStr = format(date, "yyyy-MM-dd");
return isHoliday(dateStr);
};
function Calendar({
className,
classNames,
showOutsideDays = true,
modifiers,
modifiersClassNames,
...props
}: React.ComponentProps<typeof DayPicker>) {
// Hydration 불일치 방지: 클라이언트에서만 렌더링
@@ -27,8 +49,25 @@ function Calendar({
);
}
// 공휴일/토요일/일요일 modifiers 병합
const mergedModifiers = {
saturday: saturdayMatcher,
sunday: sundayMatcher,
holiday: holidayMatcher,
...modifiers,
};
const mergedModifiersClassNames = {
saturday: "text-blue-500 font-semibold",
sunday: "text-red-500 font-semibold",
holiday: "text-red-500 font-semibold",
...modifiersClassNames,
};
return (
<DayPicker
modifiers={mergedModifiers}
modifiersClassNames={mergedModifiersClassNames}
showOutsideDays={showOutsideDays}
className={cn("p-0 w-full", className)}
classNames={{