Files
sam-react-prod/claudedocs/guides/[IMPL-2026-01-14] universal-list-component-checklist.md
유병철 b59150551e chore(WEB): PermissionManagement 오류 수정 및 claudedocs 폴더 정리
- PermissionManagement externalSelection 콜백 함수 오류 수정
  - setSelectedItems → onToggleSelection, onToggleSelectAll, getItemId 변경
- claudedocs 문서 폴더별 정리 (26개 파일)
  - dashboard/, guides/, settings/, construction/, sales/ 등

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-17 13:11:35 +09:00

45 KiB
Raw Blame History

UniversalListPage 컴포넌트 통합 작업

목표: 55개 리스트 페이지를 1개의 공통 컴포넌트로 통합 시작일: 2026-01-14 원칙: 기존 기능 100% 유지, 테이블 영역만 공통화 상태: 전체 완료 (55/55 페이지, 100%)


📊 페이지 수 산정 (2026-01-16 확정)

최종 페이지 수: 55개

항목 개수 설명
UniversalListPage 사용 파일 62개 전체 import 기준
템플릿 export 파일 -1개 templates/index.ts (export only)
중복 파일 쌍 -6개 wrapper + client 패턴
실제 페이지 수 55개

중복 파일 쌍 목록 (6쌍)

동일한 페이지인데 wrapper(index.tsx)와 client 컴포넌트가 분리된 경우:

# 페이지 파일 1 (wrapper) 파일 2 (client)
1 거래처관리(회계) VendorManagement/index.tsx VendorManagementClient.tsx
2 어음관리 BillManagement/index.tsx BillManagementClient.tsx
3 결제내역 PaymentHistoryManagement/index.tsx PaymentHistoryClient.tsx
4 카드관리 CardManagement/index.tsx CardManagementUnified.tsx
5 게시판목록 BoardList/index.tsx BoardListUnified.tsx
6 발주관리 OrderManagementListClient.tsx OrderManagementUnified.tsx

마이그레이션 제외 페이지

파일 제외 사유
construction/projects/ProjectListClient.tsx PageLayout 직접 사용 (IntegratedListTemplateV2 미사용)
settings/PermissionManagement/index.tsx IntegratedListTemplateV2 미사용
customer-center/FAQManagement/FAQList.tsx IntegratedListTemplateV2 미사용
pricing/PricingListClient.tsx (일반) IntegratedListTemplateV2 미사용
영업 도메인 3개 별도 구조 사용 (추후 검토)

Note

: 수량이 변동되는 원인은 중복 파일(wrapper/client 패턴)과 제외 대상 파일 때문입니다.


🎯 핵심 목적 (절대 잊지 말 것!)

이 공통화 작업의 근본적인 목적은 모바일에서 필터를 바텀시트로 보여주기 위함이다.

filterConfig 사용 규칙

  • filterConfig를 사용하면 자동으로 PC/모바일 분기 처리됨
    • PC (1280px+): 인라인 필터 (테이블 헤더 영역)
    • 모바일 (~1279px): 바텀시트 필터 (MobileFilter 컴포넌트)
  • 새로운 모바일 필터 기능을 만들지 말 것! 이미 공통화되어 있음
  • 정렬, 상태 필터 등 모든 필터는 filterConfig로 정의

예시

// ✅ 올바른 방식 - filterConfig 사용
filterConfig: [
  {
    key: 'sort',
    label: '정렬',
    type: 'single',
    options: [{ value: 'latest', label: '최신순' }, ...],
  },
],

// ❌ 잘못된 방식 - 별도 모바일 필터 구현
mobileTableHeaderActions: ... // 이런 거 만들지 말 것!

🚨 작업 정책 (필독!)

본 페이지 직접 작업 원칙

  • 테스트 페이지 생성 금지: -test 접미사 페이지 만들지 말 것
  • feature 브랜치 활용: 이미 feature/universal-list-component 브랜치에서 작업 중
  • 본 페이지에 바로 적용: 마이그레이션은 원본 파일에 직접 수행
  • 롤백 가능: 문제 발생 시 git checkout 또는 브랜치 전환으로 복구

삭제된 테스트 페이지 (2026-01-14)

삭제된 테스트 페이지 본 페이지
/board-test/ /board/
/construction/order/order-management-test/ /construction/order/order-management/
/hr/card-management-test/ /hr/card-management/
/customer-center/notices-test/ /customer-center/notices/

Phase 1: 준비 작업

  • Git 브랜치 생성 (feature/universal-list-component)
  • 기존 IntegratedListTemplateV2 분석 완료 확인
  • 공통 패턴 / 특이 케이스 최종 정리

Phase 2: 핵심 컴포넌트 구현

2.1 타입 정의

  • UniversalListConfig<T> 인터페이스 정의
  • TableColumn, FilterConfig 등 공통 타입 정의
  • 특이 케이스용 옵션 타입 정의 (모달, 동적 탭 등)

2.2 UniversalListPage 컴포넌트

  • 기본 구조 구현 (상태 관리, 핸들러)
  • IntegratedListTemplateV2 연동
  • renderTableRow / renderMobileCard 콜백 처리
  • 삭제 AlertDialog 통합
  • 검색/필터/페이지네이션 통합

2.3 특이 케이스 지원

  • detailMode: 'page' | 'modal' 옵션
  • 동적 탭 지원 (fetchTabs 함수 옵션)
  • 커스텀 액션 버튼 지원 (customActions)
  • 문서 미리보기 모달 지원 (DetailModalComponent)

Phase 2.5: 공통 옵션화 리팩토링 완료

목적: headerActions의 달력/버튼을 config 옵션으로 통합하여 위치/스타일 공통 관리

2.5.1 DateRangeSelector 옵션화

  • UniversalListConfigdateRangeSelector 옵션 추가
  • IntegratedListTemplateV2에서 달력 렌더링 위치 통합
  • 기존 페이지 headerActions → config 옵션으로 마이그레이션
// config 옵션 정의
dateRangeSelector?: {
  enabled: boolean;
  showPresets?: boolean;  // 당월, 전월, 오늘 등 프리셋 버튼
  startDate?: string;
  endDate?: string;
  onStartDateChange?: (date: string) => void;
  onEndDateChange?: (date: string) => void;
};

2.5.2 등록 버튼 옵션화

  • UniversalListConfigcreateButton 옵션 추가
  • 버튼 위치 오른쪽 끝 고정 (공통)
  • 기존 페이지 headerActions → config 옵션으로 마이그레이션
// config 옵션 정의
createButton?: {
  label: string;           // '등록', '공정 등록' 등
  onClick: () => void;
  icon?: LucideIcon;       // 기본값: Plus
};

2.5.3 레이아웃 규칙

[달력 (왼쪽)] -------------- [등록 버튼 (오른쪽 끝)]

마이그레이션 완료 파일 (Level 1)

파일 달력 등록버튼 상태
InquiryList.tsx 완료
NoticeList.tsx 완료
EventList.tsx 완료
PopupList.tsx 완료

Note

: 나머지 페이지들은 Level 2+ 마이그레이션 시 적용 예정


Phase 3: 파일럿 마이그레이션

⚠️ 2026-01-14 수정: 이전 세션에서 완료 표시했으나 실제 코드 미적용 확인됨. 파일럿은 건너뛰고 Level 1부터 순차 진행.

  • 기본 케이스 - 카드관리(HR) → Level 3으로 이동 (복잡한 상태)
  • 특이 케이스 - 게시판목록 → Level 4로 이동 (동적 탭)
  • 특이 케이스 - 발주관리 → Level 2로 이동 (ScheduleCalendar)

Level 1 마이그레이션 진행 상황 (15/15 완료 )

# 파일 상태 완료일
1 production/WorkOrders/WorkOrderList.tsx 완료 2026-01-14
2 production/WorkResults/WorkResultList.tsx 완료 2026-01-14
3 outbound/ShipmentManagement/ShipmentList.tsx 완료 2026-01-14
4 material/StockStatus/StockStatusList.tsx 완료 2026-01-14
5 material/ReceivingManagement/ReceivingList.tsx 완료 2026-01-14
6 quality/InspectionManagement/InspectionList.tsx 완료 2026-01-14
7 items/ItemListClient.tsx 완료 2026-01-14
8 settings/PaymentHistoryManagement/PaymentHistoryClient.tsx 완료 2026-01-14
9 settings/PopupManagement/PopupList.tsx 완료 2026-01-14
10 customer-center/EventManagement/EventList.tsx 완료 2026-01-14
11 customer-center/InquiryManagement/InquiryList.tsx 완료 2026-01-14
12 customer-center/NoticeManagement/NoticeList.tsx 완료 2026-01-14
13 quotes/QuoteManagementClient.tsx 완료 2026-01-14
14 process-management/ProcessListClient.tsx 완료 2026-01-14
15 settings/AccountManagement/index.tsx 완료 2026-01-14

Level 2 마이그레이션 진행 상황 (건설 17개 + 회계 13개 = 총 30개)

Note

: ProjectListClient는 PageLayout 직접 사용 (IntegratedListTemplateV2 미사용)으로 마이그레이션 대상에서 제외

건설 도메인 (17개 대상, 17개 완료 )

# 파일 특이사항 상태 완료일
1 construction/estimates/EstimateListClient.tsx 거래처(다중), 견적자(다중), 상태, 정렬 완료 2026-01-14
2 construction/bidding/BiddingListClient.tsx 거래처(다중), 입찰자(다중), 상태, 정렬 완료 2026-01-14
3 construction/site-briefings/SiteBriefingListClient.tsx 거래처(다중), 타입, 상태, 정렬 완료 2026-01-14
4 construction/contract/ContractListClient.tsx 거래처(다중), 계약담당자(다중), 공사PM(다중) 완료 2026-01-14
5 construction/partners/PartnerListClient.tsx 탭(전체/신규), 악성채권, 정렬 완료 2026-01-14
6 construction/handover-report/HandoverReportListClient.tsx 거래처, 계약담당자, 공사PM 완료 2026-01-15
7 construction/worker-status/WorkerStatusListClient.tsx 거래처, 현장, 구분, 부서, 이름 완료 2026-01-15
8 construction/utility-management/UtilityManagementListClient.tsx 7개 필터, AlertDialog 완료 2026-01-15
9 construction/progress-billing/ProgressBillingManagementListClient.tsx showQuickButtons 완료 2026-01-15
10 construction/structure-review/StructureReviewListClient.tsx AlertDialog, createButton 완료 2026-01-15
11 construction/site-management/SiteManagementListClient.tsx AlertDialog 완료 2026-01-15
12 construction/pricing-management/PricingListClient.tsx renderCustomTableHeader (동적 컬럼) 완료 2026-01-15
13 construction/issue-management/IssueManagementListClient.tsx bulkActions (회수 기능) 완료 2026-01-15
14 construction/order-management/OrderManagementListClient.tsx ScheduleCalendar (beforeTableContent) 완료 2026-01-15
15 construction/management/ConstructionManagementListClient.tsx ScheduleCalendar (beforeTableContent) 완료 2026-01-15
16 construction/labor-management/LaborManagementClient.tsx 노무 관리 필터 완료 2026-01-15
17 construction/item-management/ItemManagementClient.tsx 품목 분류 필터 완료 2026-01-15

회계 도메인 (13개 대상, 13개 완료 )

# 파일 특이사항 상태 완료일
1 accounting/VendorManagement/index.tsx 5개 single 필터, Stats 카드 완료 2026-01-15
2 accounting/SalesManagement/index.tsx Switch, beforeTableContent, tableHeaderActions, tableFooter 완료 2026-01-15
3 accounting/PurchaseManagement/index.tsx Switch, beforeTableContent, tableHeaderActions, tableFooter 완료 2026-01-15
4 accounting/DepositManagement/index.tsx beforeTableContent (새로고침), tableHeaderActions 완료 2026-01-15
5 accounting/WithdrawalManagement/index.tsx 계정과목명 저장, beforeTableContent, tableHeaderActions 완료 2026-01-15
6 accounting/BillManagement/index.tsx 어음관리 필터, RadioGroup 완료 2026-01-15
7 accounting/BadDebtCollection/index.tsx 부실채권 관리, Switch 토글, 3개 필터 완료 2026-01-15
8 accounting/BankTransactionInquiry/index.tsx 서버사이드 페이지네이션, tableFooter, 3개 필터 완료 2026-01-15
9 accounting/CardTransactionInquiry/index.tsx 상세 모달, 계정과목명 일괄 저장, 2개 필터 완료 2026-01-15
10 accounting/VendorLedger/index.tsx 서버사이드 페이지네이션, 엑셀 다운로드, tableFooter 완료 2026-01-15
11 accounting/ExpectedExpenseManagement/index.tsx 매우 복잡 (월별 그룹핑, 폼 다이얼로그, externalPagination/externalSelection) 완료 2026-01-15
12 accounting/BillManagement/BillManagementClient.tsx dateRangeSelector, beforeTableContent (상태+저장+라디오), externalPagination/Selection 완료 2026-01-15
13 accounting/VendorManagement/VendorManagementClient.tsx computeStats, 5개 필터, 클라이언트 필터링, externalPagination/Selection 완료 2026-01-15

📋 마이그레이션 페이지별 테스트 체크리스트

데스크톱 기능 테스트

  • 테이블 렌더링 (데이터 표시, 컬럼 정렬)
  • 행 선택 (체크박스 동작, 선택 카운터)
  • 수정/삭제 버튼 (선택 시 표시, 페이지 이동)
  • 필터 동작 (검색, 필터 적용, 초기화)
  • 페이지네이션 (페이지 이동, 개수 변경)
  • 탭 동작 (탭 전환, 데이터 필터링)

📱 모바일 반응형 테스트

최소 지원 너비: 280px (모바일 최소 사이즈 기준)

  • 레이아웃 깨짐 확인: 280px까지 축소 시 요소 겹침/튀어나감 없음
  • 줄바꿈 정상: 긴 텍스트 줄바꿈 처리 확인
  • 버튼/뱃지: 영역 밖으로 튀어나가지 않음
  • 모바일 필터: 하단에서 슬라이드업 정상 동작
  • 필터 적용/초기화: 모바일 필터 버튼 정상 작동
  • 모바일 카드 뷰: renderMobileCard 정상 표시
  • 터치 동작: 체크박스, 버튼 터치 반응 정상

스크린샷 비교

  • 데스크톱: 기존 페이지 vs 마이그레이션 페이지 비교
  • 모바일: 기존 페이지 vs 마이그레이션 페이지 비교

📊 복잡도별 분류 (마이그레이션 우선순위)

통합 후 이점: 새 기능 추가/버그 수정 시 55개 파일 → 1개 파일만 수정

Level 1 (기본) - 15개 1순위

단순 테이블 + 기본 탭 필터만 있는 경우

파일 설명
production/WorkOrders/WorkOrderList.tsx 탭 기반 상태 필터링
production/WorkResults/WorkResultList.tsx 기본 리스트
outbound/ShipmentManagement/ShipmentList.tsx 상태별 통계, 탭 필터
material/StockStatus/StockStatusList.tsx 재고 현황
material/ReceivingManagement/ReceivingList.tsx 기본 수입 목록
quality/InspectionManagement/InspectionList.tsx 검사 상태별 탭
items/ItemListClient.tsx 품목 유형별 탭
settings/PaymentHistoryManagement/PaymentHistoryClient.tsx 결제 이력
settings/PopupManagement/PopupList.tsx 팝업 관리
customer-center/EventManagement/EventList.tsx 이벤트 관리
customer-center/InquiryManagement/InquiryList.tsx 문의 관리
customer-center/NoticeManagement/NoticeList.tsx 공지사항
quotes/QuoteManagementClient.tsx 견적 관리
process-management/ProcessListClient.tsx 프로세스 관리
settings/AccountManagement/index.tsx 계정 관리

Level 2 (필터 복잡) - 30개 2순위

FilterFieldConfig 기반 다중 필터, 정렬 옵션 (주류 패턴)

건설 도메인 (17개)

파일 특이사항
construction/site-briefings/SiteBriefingListClient.tsx 거래처(다중), 타입, 상태, 정렬
construction/estimates/EstimateListClient.tsx 거래처(다중), 견적자(다중), 상태, 정렬
construction/bidding/BiddingListClient.tsx 입찰 정보 필터
construction/contract/ContractListClient.tsx 계약 정보 필터
construction/partners/PartnerListClient.tsx 협력업체 필터
construction/handover-report/HandoverReportListClient.tsx 준공 보고 필터
construction/worker-status/WorkerStatusListClient.tsx 근로자 상태 필터
construction/utility-management/UtilityManagementListClient.tsx 유틸리티 관리 필터
construction/progress-billing/ProgressBillingManagementListClient.tsx 기성 청구 필터
construction/structure-review/StructureReviewListClient.tsx 구조 검토 필터
construction/site-management/SiteManagementListClient.tsx 현장 정보 필터
construction/pricing-management/PricingListClient.tsx 동적 컬럼 (renderCustomTableHeader)
construction/issue-management/IssueManagementListClient.tsx 거래처, 현장, 구분, 중요도, 상태
construction/order-management/OrderManagementListClient.tsx ScheduleCalendar (beforeTableContent)
construction/management/ConstructionManagementListClient.tsx ScheduleCalendar (beforeTableContent)
construction/labor-management/LaborManagementClient.tsx 노무 관리 필터
construction/item-management/ItemManagementClient.tsx 품목 분류 필터

회계 도메인 (13개)

파일 특이사항
accounting/VendorManagement/VendorManagementClient.tsx 거래처 분류(다중), 신용등급, 거래등급
accounting/VendorManagement/index.tsx VendorManagementClient wrapper
accounting/PurchaseManagement/index.tsx 구매 관리 필터
accounting/SalesManagement/index.tsx 판매 관리 필터
accounting/DepositManagement/index.tsx 입금 관리 필터
accounting/WithdrawalManagement/index.tsx 출금 관리 필터
accounting/BadDebtCollection/index.tsx 부실채권 관리 필터
accounting/ExpectedExpenseManagement/index.tsx 예상 지출 관리 필터
accounting/BillManagement/index.tsx 청구서 관리 wrapper
accounting/BillManagement/BillManagementClient.tsx 청구서 관리 필터
accounting/BankTransactionInquiry/index.tsx 입출금계좌조회
accounting/CardTransactionInquiry/index.tsx 카드내역조회
accounting/VendorLedger/index.tsx 거래처원장

Level 3~5 마이그레이션 (2026-01-15) 완료

결론 변경: Level 3~5 컴포넌트(10개)도 UniversalListPage로 마이그레이션 진행 이유: 장기적 유지보수 및 모바일 대응 일원화를 위해 모든 리스트 페이지 통합

Phase 3-1: UniversalListPage 기능 확장 완료

기능 설명 상태
renderDialogs 커스텀 다이얼로그 슬롯 [x] 완료
dynamicHeaderActions 선택 상태 기반 동적 헤더 액션 [x] 완료 (tableHeaderActions에 selectedItems 전달)
fetchTabs API 기반 동적 탭 생성 [x] 완료 (이미 구현되어 있었음)
columnsPerTab 탭별 다른 컬럼 구조 지원 [x] 완료
extraFilters 추가 필터 슬롯 [x] 완료 (이미 구현되어 있었음)

Phase 3-2: 게시판 도메인 마이그레이션 (2개) 완료

# 파일 특이사항 상태
1 board/BoardManagement/index.tsx AlertDialog + 선택 기반 수정/삭제 [x] 완료
2 board/BoardList/index.tsx API 동적 탭 (fetchTabs) + 서버사이드 페이지네이션 [x] 완료

Phase 3-3: 전자결재 도메인 마이그레이션 (3개) 완료

# 파일 특이사항 상태
1 approval/DraftBox/index.tsx DocumentDetailModal + 상신/삭제 + 동적 헤더 [x] 완료
2 approval/ApprovalBox/index.tsx DocumentDetailModal + 승인/반려 다이얼로그 [x] 완료
3 approval/ReferenceBox/index.tsx DocumentDetailModal + 열람/미열람 처리 [x] 완료

Phase 3-4: HR 도메인 마이그레이션 (5개) 완료

# 파일 특이사항 상태
1 hr/CardManagement/index.tsx 3개 탭 + AlertDialog (가장 단순) [x] 완료
2 hr/SalaryManagement/index.tsx SalaryDetailDialog + 선택 기반 동적 버튼 [x] 완료
3 hr/AttendanceManagement/index.tsx 9개 탭 + 2개 다이얼로그 + extraFilters [x] 완료
4 hr/EmployeeManagement/index.tsx 4개 탭 + 복수 다이얼로그 + DateRangeSelector [x] 완료
5 hr/VacationManagement/index.tsx 3개 탭(탭별 상이한 컬럼) + 4개 다이얼로그 [x] 완료

최종 분류 통계 완료

레벨 개수 상태 비고
Level 1 (기본) 15개 완료 UniversalListPage 마이그레이션
Level 2 (필터) 30개 완료 UniversalListPage 마이그레이션
Level 3~5 (복잡) 10개 완료 UniversalListPage 마이그레이션
합계 55개 완료 전체 통합 완료!

Phase 4: 도메인별 마이그레이션

4.1 건설 도메인 (18개)

  • 현장설명회관리 (SiteBriefingListClient)
  • 견적관리 (EstimateListClient)
  • 입찰관리 (BiddingListClient)
  • 계약관리 (ContractListClient)
  • 인수인계보고서 (HandoverReportListClient)
  • 현장관리 (SiteManagementListClient)
  • 구조검토관리 (StructureReviewListClient)
  • 이슈관리 (IssueManagementListClient)
  • 작업인력현황 (WorkerStatusListClient)
  • 품목관리 (ItemManagementClient)
  • 단가관리 (PricingListClient)
  • 노임관리 (LaborManagementClient)
  • 발주관리 (OrderManagementListClient)
  • 기성청구관리 (ProgressBillingManagementListClient)
  • 공과관리 (UtilityManagementListClient)
  • 시공관리 (ConstructionManagementListClient)
  • 거래처관리 (PartnerListClient)
  • 프로젝트관리 (ProjectListClient)

4.2 HR 도메인 (5개)

  • 급여관리 (SalaryManagement)
  • 사원관리 (EmployeeManagement)
  • 휴가관리 (VacationManagement)
  • 근태관리 (AttendanceManagement)
  • 카드관리 (CardManagement)

4.3 회계 도메인 (11개)

  • 거래처관리 (VendorManagement)
  • 매입관리 (PurchaseManagement)
  • 매출관리 (SalesManagement)
  • 입금관리 (DepositManagement)
  • 출금관리 (WithdrawalManagement)
  • 어음관리 (BillManagement)
  • 거래처원장 (VendorLedger)
  • 지출예상내역서 (ExpectedExpenseManagement)
  • 입출금계좌조회 (BankTransactionInquiry)
  • 카드내역조회 (CardTransactionInquiry)
  • 악성채권추심 (BadDebtCollection)

4.4 생산/자재/품질/출고 도메인 (6개)

  • 작업지시관리 (WorkOrderList)
  • 작업실적조회 (WorkResultList)
  • 재고현황 (StockStatusList)
  • 입고관리 (ReceivingList)
  • 검사관리 (InspectionList)
  • 출하관리 (ShipmentList)

4.5 전자결재 도메인 (3개) ⚠️ 특이 케이스

  • 기안함 (DraftBox) - 문서 미리보기 모달 + 상신
  • 결재함 (ApprovalBox) - 문서 미리보기 모달 + 승인/반려
  • 참조함 (ReferenceBox) - 문서 미리보기 모달 + 읽음/안읽음

4.6 설정 도메인 (4개)

  • 계좌관리 (AccountManagement)
  • 팝업관리 (PopupList)
  • 결제내역 (PaymentHistoryManagement)
  • 권한관리 (PermissionManagement)

4.7 영업 도메인 (3개) 🆕

  • 수주관리 (order-management-sales/page.tsx)
  • 생산발주 (order-management-sales/production-orders/page.tsx)
  • 거래처관리-영업 (client-management-sales-admin/page.tsx)

4.8 기타 도메인 (9개)

  • 품목기준관리 (ItemListClient)
  • 견적관리 (QuoteManagementClient)
  • 단가관리-일반 (PricingListClient)
  • 공정관리 (ProcessListClient)
  • 게시판목록 (BoardList) ⚠️ 동적 탭
  • 게시판관리 (BoardManagement)
  • 공지사항 (NoticeList)
  • 이벤트 (EventList)
  • 1:1문의 (InquiryList)

Phase 5: 최종 검증 (QA 체크리스트)

QA 검수 기준

  • PC: 테이블 렌더링, 필터, 페이지네이션, 행 선택, 수정/삭제
  • 모바일: 카드 뷰, 바텀시트 필터, 터치 동작
  • 공통: API 연동, 데이터 표시, 에러 처리

Level 1 - 기본 페이지 (15개) QA 완료

# 페이지 경로 PC 모바일 비고
1 작업지시관리 /production/work-orders [x] [x]
2 작업실적조회 /production/work-results [x] [x]
3 출하관리 /outbound/shipment [x] [x]
4 재고현황 /material/stock-status [x] [x]
5 입고관리 /material/receiving [x] [x]
6 검사관리 /quality/inspection [x] [x]
7 품목기준관리 /items [x] [x]
8 결제내역 /settings/payment-history [x] [x]
9 팝업관리 /settings/popup [x] [x]
10 이벤트관리 /customer-center/events [x] [x] 모바일 탭 이슈 해결 완료
11 1:1문의 /customer-center/inquiries [x] [x] 필터 동작 검증 완료
12 공지사항 /customer-center/notices [x] [x]
13 견적관리 /quotes [x] [x]
14 공정관리 /process-management [x] [x]
15 계좌관리 /settings/accounts [x] [x]

Level 2 - 건설 도메인 (17개) QA 완료

# 페이지 경로 PC 모바일 비고
1 견적관리 /construction/estimates [x] [x]
2 입찰관리 /construction/bidding [x] [x]
3 현장설명회 /construction/site-briefings [x] [x]
4 계약관리 /construction/contracts [x] [x]
5 협력업체 /construction/partners [x] [x]
6 인수인계보고서 /construction/handover-report [x] [x]
7 작업인력현황 /construction/worker-status [x] [x]
8 공과관리 /construction/utility [x] [x]
9 기성청구관리 /construction/progress-billing [x] [x]
10 구조검토관리 /construction/structure-review [x] [x]
11 현장관리 /construction/sites [x] [x]
12 단가관리 /construction/pricing [x] [x] 동적 컬럼
13 이슈관리 /construction/issues [x] [x]
14 발주관리 /construction/order/order-management [x] [x] ScheduleCalendar
15 시공관리 /construction/management [x] [x] ScheduleCalendar
16 노임관리 /construction/labor [x] [x]
17 품목관리 /construction/items [x] [x]

Level 2 - 회계 도메인 (13개) QA 완료

# 페이지 경로 PC 모바일 비고
1 거래처관리 /accounting/vendors [x] [x]
2 매출관리 /accounting/sales [x] [x] filterConfig 추가
3 매입관리 /accounting/purchases [x] [x] filterConfig 추가
4 입금관리 /accounting/deposits [x] [x]
5 출금관리 /accounting/withdrawals [x] [x]
6 어음관리 /accounting/bills [x] [x]
7 악성채권추심 /accounting/bad-debt [x] [x] filterConfig 추가
8 입출금계좌조회 /accounting/bank-transactions [x] [x] filterConfig 추가
9 카드내역조회 /accounting/card-transactions [x] [x]
10 거래처원장 /accounting/vendor-ledger [x] [x]
11 지출예상내역서 /accounting/expected-expenses [x] [x]
12 어음관리Client /accounting/bills [x] [x]
13 거래처관리Client /accounting/vendors [x] [x]

Level 3~5 - 복잡 페이지 (10개) QA 완료

# 페이지 경로 PC 모바일 비고
1 게시판관리 /board/management [x] [x]
2 게시판목록 /board [x] [x] 동적 탭
3 기안함 /approval/draft [x] [x] 문서 모달, 모바일 필터 추가
4 결재함 /approval/approval [x] [x] 승인/반려, 모바일 필터 추가
5 참조함 /approval/reference [x] [x] 모바일 필터 추가
6 카드관리 /hr/card-management [x] [x] 탭 필터만 (PC필터 없음)
7 급여관리 /hr/salary-management [x] [x] 정렬 필터
8 근태관리 /hr/attendance-management [x] [x] 9개 탭, 필터+정렬
9 사원관리 /hr/employee-management [x] [x] 필터+정렬
10 휴가관리 /hr/vacation-management [x] [x] 필터+정렬

QA 진행 현황

레벨 전체 PC 완료 모바일 완료 진행률
Level 1 15 15 15 100%
Level 2 건설 17 17 17 100%
Level 2 회계 13 13 13 100%
Level 3~5 10 10 10 100%
합계 55 55 55 100%

🚨 알려진 이슈

이슈 영향 범위 상태 비고
모바일 탭 미표시 탭 사용 페이지 전체 해결 완료 IntegratedListTemplateV2 수정 (hidden → block)

Phase 6: 다음 개선 사항 (Next Steps)

6.1 모바일 인피니티 스크롤 (Infinite Scroll)

목적: 모바일 카드 뷰에서 페이지네이션 대신 무한 스크롤로 UX 개선

구현 계획

config 옵션 추가:

// UniversalListConfig에 추가
infiniteScroll?: {
  enabled: boolean;
  mobileOnly?: boolean;  // 모바일에서만 적용 (기본: true)
  pageSize?: number;     // 한 번에 로드할 개수 (기본: 20)
  threshold?: number;    // 트리거 위치 (기본: 0.8 = 80% 스크롤)
};

동작 방식:

모바일 + infiniteScroll.enabled?
  ├─ Yes → 페이지네이션 숨김 + IntersectionObserver로 무한스크롤
  └─ No → 기존 페이지네이션 유지

기술 스택:

  • IntersectionObserver (네이티브) 또는 react-intersection-observer
  • 스크롤 80% 도달 시 다음 pageSize개 로드
  • 로딩 스피너 표시 → 데이터 append → 스피너 제거

적용 효과:

  • config 한 줄 추가로 55개 페이지 자동 적용
  • PC는 기존 페이지네이션 유지
  • 모바일만 무한스크롤 적용

구현 체크리스트

  • IntersectionObserver 훅 구현 (useInfiniteScroll)
  • UniversalListConfiginfiniteScroll 옵션 추가
  • IntegratedListTemplateV2에 무한스크롤 로직 추가
  • 모바일 감지 시 페이지네이션 → 무한스크롤 전환
  • 로딩 스피너 컴포넌트 추가
  • 파일럿 페이지 테스트
  • 전체 페이지 적용

특이 케이스 정리

페이지 특이점 처리 방안
DraftBox 문서 미리보기 모달 + 상신 detailMode: 'modal' + customActions
ApprovalBox 문서 미리보기 모달 + 승인/반려 detailMode: 'modal' + customActions
ReferenceBox 문서 미리보기 모달 + 읽음 처리 detailMode: 'modal' + customActions
BoardList 동적 탭 (API 기반) tabs: () => Promise<Tab[]>

변경 이력

날짜 작업 내용
2026-01-14 체크리스트 문서 생성, 작업 시작
2026-01-14 영업 도메인 3개 발견 (마이그레이션 대상 검토 필요)
2026-01-14 파일럿 3개 완료실제 미적용 확인됨
2026-01-14 복잡도별 분류 완료 (Level 1~5, 55개 파일)
2026-01-14 모바일 반응형 테스트 체크리스트 추가
2026-01-14 "본 페이지 직접 작업" 정책 추가, 테스트 페이지 4개 삭제
2026-01-14 Level 1: NoticeList, PopupList, EventList, InquiryList 마이그레이션 완료 (4/15)
2026-01-14 체크리스트 정합성 수정 - 파일럿 3개 미완료 확인, Level 1 진행 상황 테이블 추가
2026-01-14 Level 1 마이그레이션 진행: WorkOrderList, WorkResultList, ShipmentList, StockStatusList, ReceivingList, InspectionList 완료 (6개)
2026-01-14 Level 1 마이그레이션 진행: ItemListClient, PaymentHistoryClient, AccountManagement 완료 (3개 추가, 총 13/15)
2026-01-14 Level 1 완료! QuoteManagementClient, ProcessListClient 마이그레이션 완료 (15/15)
2026-01-14 Level 1 검수: 탭 기본값(ShipmentList, StockStatusList), optional chaining(UniversalListPage), 필터 중복(InquiryList), "총 N건" 위치 수정
2026-01-14 Phase 2.5 추가: 달력/버튼 공통 옵션화 리팩토링 계획 문서화
2026-01-14 Phase 2.5 완료: dateRangeSelector/createButton config 옵션 구현, Level 1 페이지 4개 마이그레이션 (InquiryList, NoticeList, EventList, PopupList)
2026-01-14 Level 2 시작: 건설 도메인 5개 완료 (EstimateListClient, BiddingListClient, SiteBriefingListClient, ContractListClient, PartnerListClient)
2026-01-14 ProjectListClient 제외 (PageLayout 직접 사용, IntegratedListTemplateV2 미사용)
2026-01-15 건설 도메인 6개 추가 완료 (HandoverReport, WorkerStatus, Utility, ProgressBilling, StructureReview, SiteManagement)
2026-01-15 UniversalListPage에 renderCustomTableHeader 지원 추가 (동적 컬럼용)
2026-01-15 건설 도메인 6개 추가 완료 (PricingList, IssueManagement, OrderManagement, ConstructionManagement, LaborManagement, ItemManagement)
2026-01-15 건설 도메인 17개 모두 완료!
2026-01-15 회계 도메인 5개 완료 (VendorManagement, SalesManagement, PurchaseManagement, DepositManagement, WithdrawalManagement)
2026-01-15 회계 도메인 6개 추가 완료 (BillManagement, BadDebtCollection, BankTransactionInquiry, CardTransactionInquiry, VendorLedger, ExpectedExpenseManagement)
2026-01-15 UniversalListPage에 externalPagination, externalSelection 지원 추가 (복잡한 외부 상태 관리용)
2026-01-15 회계 도메인 11/13 완료 (남은 2개: BillManagementClient, VendorManagementClient 확인 필요)
2026-01-15 회계 도메인 13/13 완료! BillManagementClient, VendorManagementClient 마이그레이션 완료
2026-01-15 Level 3~5 분석 완료 - 전자결재(3), HR(5), 게시판(2) 총 10개 파일 분석
2026-01-15 마이그레이션 최종 결론 변경: Level 3~5도 UniversalListPage로 마이그레이션 진행 결정
2026-01-15 Phase 3-1 완료: UniversalListPage 기능 확장 (renderDialogs, headerActions with selectedItems)
2026-01-15 Phase 3-2 완료: 게시판 도메인 마이그레이션 2개 (BoardManagement, BoardList)
2026-01-15 Phase 3-3 완료: 전자결재 도메인 마이그레이션 3개 (DraftBox, ApprovalBox, ReferenceBox)
2026-01-15 Phase 3-4 완료: HR 도메인 마이그레이션 5개 (CardManagement, SalaryManagement, AttendanceManagement, EmployeeManagement, VacationManagement)
2026-01-15 🎉 프로젝트 완료! Level 1~5 (55개) 전체 마이그레이션 완료
2026-01-15 Level 1 QA 완료! 15개 페이지 PC/모바일 검수, 이벤트관리 모바일 탭 이슈 발견 (공통 수정 예정)
2026-01-15 Level 2 건설 QA 완료! 17개 페이지 PC/모바일 검수 완료
2026-01-15 Level 2 회계 모바일 필터 추가! 매출관리, 매입관리, 악성채권추심, 은행거래조회 4개 페이지
2026-01-15 결재 도메인 모바일 필터 추가! 기안함, 결재함, 참조함 3개 페이지에 filterConfig + onFilterChange 추가
2026-01-15 Level 3~5 QA 완료! HR 도메인 5개 페이지 (카드/급여/근태/사원/휴가) 전체 검수 완료
2026-01-15 🎉 전체 QA 완료! 55개 페이지 PC/모바일 검수 100% 완료
2026-01-16 📊 페이지 수 최종 확정! 62개 파일 중 중복(6쌍) 및 제외 대상 정리 → 55개 페이지 확정
2026-01-16 Phase 5 기능 검수 시작 - 수동 QA 진행, 오류 발견 및 수정
2026-01-16 휴가관리 탭 카운트 수정 - config.tabs 변경 감지 useEffect 추가 (UniversalListPage)
2026-01-16 휴가관리 기능 검증 - 휴가신청/승인/거절 버튼 정상 동작 확인
2026-01-16 휴가관리 승인/거절 건수 표시 수정 - handleApproveClick/handleRejectClick에서 selected를 내부 state로 복사

백업 스크린샷 위치

폴더 개수 설명
~/Desktop/test-urls_리스트 게시판 스샷/ 34개 일반 도메인
~/Desktop/construction-test-urls_리스트 게시판 스샷/ 18개 건설 도메인
~/Desktop/추가_리스트_스샷/ 7개 누락 페이지
합계 59개 스크린샷 기준 (제외 대상 포함)

Note

: 스크린샷은 59개지만, 실제 마이그레이션 대상 페이지는 55개입니다. (제외 대상 4개, 중복 제거)


🔍 Phase 5: 전체 기능 검수 (2026-01-16)

목적: UniversalListPage 적용 후 모든 핵심 기능 정상 동작 확인 검수 항목: 검색 / 탭 / 필터 / 체크박스 / 상세이동 / 등록버튼

검수 항목 설명

항목 설명
🔍 검색 검색창 입력 후 필터링 동작
📑 탭 버튼 클릭 시 데이터 전환
🎛️ 필터 필터 선택/적용/초기화 동작
☑️ 체크박스 테이블 행 체크박스 선택 동작
👁️ 상세 테이블 로우 클릭 → 상세페이지/모달 이동
등록 등록 버튼 클릭 → 등록페이지 이동

HR 도메인 (5개)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 사원관리 /hr/employee-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
2 카드관리 /hr/card-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
3 근태관리 /hr/attendance-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
4 급여관리 /hr/salary-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
5 휴가관리 /hr/vacation-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄

전자결재 도메인 (3개)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 기안함 /approval/draft-box [ ] [ ] [ ] [ ] [ ] N/A 🔄
2 결재함 /approval/approval-box [ ] [ ] [ ] [ ] [ ] N/A 🔄
3 참조함 /approval/reference-box [ ] [ ] [ ] [ ] [ ] N/A 🔄

게시판 도메인 (2개)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 게시판관리 /settings/board-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
2 게시판목록 /boards/[boardCode] [ ] [ ] [ ] [ ] [ ] [ ] 🔄

건설 도메인 (17개)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 견적관리 /construction/estimates [ ] [ ] [ ] [ ] [ ] [ ] 🔄
2 입찰관리 /construction/bidding [ ] [ ] [ ] [ ] [ ] [ ] 🔄
3 현장설명회 /construction/site-briefings [ ] [ ] [ ] [ ] [ ] [ ] 🔄
4 계약관리 /construction/contracts [ ] [ ] [ ] [ ] [ ] [ ] 🔄
5 협력업체 /construction/partners [ ] [ ] [ ] [ ] [ ] [ ] 🔄
6 준공보고 /construction/handover-reports [ ] [ ] [ ] [ ] [ ] [ ] 🔄
7 근로자현황 /construction/worker-status [ ] [ ] [ ] [ ] [ ] [ ] 🔄
8 유틸리티관리 /construction/utility-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
9 기성관리 /construction/progress-billing [ ] [ ] [ ] [ ] [ ] [ ] 🔄
10 구조검토 /construction/structure-review [ ] [ ] [ ] [ ] [ ] [ ] 🔄
11 현장관리 /construction/sites [ ] [ ] [ ] [ ] [ ] [ ] 🔄
12 단가관리 /construction/pricing [ ] [ ] [ ] [ ] [ ] [ ] 🔄
13 이슈관리 /construction/issues [ ] [ ] [ ] [ ] [ ] [ ] 🔄
14 발주관리 /construction/order-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
15 공사관리 /construction/management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
16 노무관리 /construction/labor-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
17 품목관리 /construction/item-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄

회계 도메인 (13개)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 거래처관리 /accounting/vendor-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
2 매출관리 /accounting/sales-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
3 매입관리 /accounting/purchase-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
4 입금관리 /accounting/deposit-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
5 출금관리 /accounting/withdrawal-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
6 어음관리 /accounting/bill-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
7 부실채권 /accounting/bad-debt-collection [ ] [ ] [ ] [ ] [ ] [ ] 🔄
8 입출금조회 /accounting/bank-transactions [ ] [ ] [ ] [ ] [ ] N/A 🔄
9 카드조회 /accounting/card-transactions [ ] [ ] [ ] [ ] [ ] N/A 🔄
10 거래처원장 /accounting/vendor-ledger [ ] [ ] [ ] [ ] [ ] N/A 🔄
11 예상지출 /accounting/expected-expenses [ ] [ ] [ ] [ ] [ ] [ ] 🔄

기타 도메인 (15개)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 작업지시 /production/work-orders [ ] [ ] [ ] [ ] [ ] [ ] 🔄
2 작업실적 /production/work-results [ ] [ ] [ ] [ ] [ ] [ ] 🔄
3 출하관리 /outbound/shipment-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
4 재고현황 /material/stock-status [ ] [ ] [ ] [ ] [ ] N/A 🔄
5 입고관리 /material/receiving [ ] [ ] [ ] [ ] [ ] [ ] 🔄
6 검사관리 /quality/inspection [ ] [ ] [ ] [ ] [ ] [ ] 🔄
7 품목관리 /items [ ] [ ] [ ] [ ] [ ] [ ] 🔄
8 결제이력 /settings/payment-history [ ] [ ] [ ] [ ] [ ] N/A 🔄
9 팝업관리 /settings/popup-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
10 이벤트관리 /customer-center/events [ ] [ ] [ ] [ ] [ ] [ ] 🔄
11 문의관리 /customer-center/inquiries [ ] [ ] [ ] [ ] [ ] N/A 🔄
12 공지관리 /customer-center/notices [ ] [ ] [ ] [ ] [ ] [ ] 🔄
13 견적관리 /quotes [ ] [ ] [ ] [ ] [ ] [ ] 🔄
14 공정관리 /process-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄
15 계정관리 /settings/account-management [ ] [ ] [ ] [ ] [ ] [ ] 🔄

영업 도메인 (추가)

# 페이지 URL 🔍 검색 📑 🎛️ 필터 ☑️ 체크 👁️ 상세 등록 상태
1 거래처관리 /sales/client-management-sales-admin [ ] [ ] [ ] [ ] [ ] [ ] 🔄

🐛 발견된 오류 목록

# 페이지 오류 내용 원인 해결 상태
1 급여관리 달력 아이콘 짤림 (375px) Input width 너무 좁음 수정
2 급여관리 DateRangeSelector 미사용 직접 Input 사용 수정
3 거래처관리(영업) headerActions.call is not a function headerActions 함수 아님 수정
4 거래처관리(영업) NaN globalIndex externalPagination 형태 불일치 수정
5 휴가관리 externalSelection.onToggleSelection is not a function externalSelection 형태 불일치 수정
6 휴가관리 탭 변경 시 Invalid time value 날짜 필드 null 체크 없음 + 오타 수정
7 근태관리 프리셋 버튼 미표시 showPresets: false 수정
8 휴가관리 탭 카운트 모두 동일하게 표시 tabFilter 제거 후 count 동기화 안됨 수정
9 UniversalListPage config.tabs 변경 시 내부 상태 미동기화 useEffect 누락 수정
10 사원관리 프리셋 버튼 미표시 showPresets: false 수정
11 휴가관리 승인/거절 팝업 미표시 selectedItems 상태 불일치 수정
12 휴가관리 승인/거절 팝업에 선택 건수 0으로 표시 headerActions의 selected가 내부 state로 복사 안됨 수정
13 단가관리(판매) headerActions.call is not a function headerActions가 함수 아닌 ReactNode 수정