Files
sam-react-prod/claudedocs/guides/[IMPL-2025-01-26] list-page-ui-standardization-checklist.md
유병철 f3b07ac875 chore(WEB): claudedocs 디렉토리 도메인별 재구조화
- 루트 문서 30개를 도메인별 하위 폴더로 이동
- accounting/, architecture/, dev/, guides/, security/ 등 카테고리 분류
- archive/ 폴더에 QA 스크린샷 이동
- _index.md 문서 맵 업데이트

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 09:35:22 +09:00

8.8 KiB

리스트 페이지 UI 표준화 체크리스트

📋 프로젝트 개요

  • 목적: 모든 리스트 페이지에 공정관리/출금관리 UI 패턴 적용
  • 시작일: 2025-01-26
  • 프로토타입: ProcessListClient, WithdrawalManagement

🎯 적용 패턴

1. 검색창 패턴

dateRangeSelector: {
  enabled: true,
  showPresets: true,
  startDate,
  endDate,
  onStartDateChange: setStartDate,
  onEndDateChange: setEndDate,
  extraActions: (
    <div className="relative w-full xl:flex-1">
      <Search className="absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-muted-foreground" />
      <Input
        type="text"
        placeholder="검색..."
        value={searchQuery}
        onChange={(e) => setSearchQuery(e.target.value)}
        className="pl-9 w-full bg-white"
      />
    </div>
  ),
},
hideSearch: true,

2. beforeTableContent 모바일 레이아웃

beforeTableContent: ({ selectedItems }) => (
  <div className="flex flex-col xl:flex-row xl:items-center xl:justify-end w-full gap-3">
    <div className="flex items-center justify-start xl:justify-end gap-2">
      {/* 버튼들 */}
    </div>
  </div>
),

3. customFilterFn 방어적 코딩

customFilterFn: (items) => {
  if (!items || items.length === 0) return items;
  return items.filter((item) => {
    // 필터 로직
  });
},

그룹 A: DateRangeSelector 사용 페이지 (26개)

회계관리 (5개)

  • src/components/accounting/SalesManagement/index.tsx
  • src/components/accounting/PurchaseManagement/index.tsx
  • src/components/accounting/DepositManagement/index.tsx
  • src/components/accounting/CardTransactionInquiry/index.tsx
  • src/components/accounting/BadDebtCollection/index.tsx ※dateRangeSelector 없음, customFilterFn만 수정

인사관리 (4개)

  • src/components/hr/EmployeeManagement/index.tsx
  • src/components/hr/AttendanceManagement/index.tsx
  • src/components/hr/SalaryManagement/index.tsx
  • src/components/hr/VacationManagement/index.tsx ※headerActions 패턴 사용

건설관리 (17개)

  • src/components/business/construction/bidding/BiddingListClient.tsx
  • src/components/business/construction/contract/ContractListClient.tsx
  • src/components/business/construction/estimates/EstimateListClient.tsx
  • src/components/business/construction/handover-report/HandoverReportListClient.tsx
  • src/components/business/construction/issue-management/IssueManagementListClient.tsx
  • src/components/business/construction/item-management/ItemManagementClient.tsx ※externalSearch 패턴 - hideSearch만 추가
  • src/components/business/construction/labor-management/LaborManagementClient.tsx
  • src/components/business/construction/management/ConstructionManagementListClient.tsx
  • [N/A] src/components/business/construction/management/ProjectListClient.tsx ※UniversalListPage 미사용 (커스텀 Gantt차트 구현)
  • src/components/business/construction/order-management/OrderManagementListClient.tsx
  • src/components/business/construction/partners/PartnerListClient.tsx ※dateRangeSelector 없음, customFilterFn 방어코드만 추가
  • src/components/business/construction/progress-billing/ProgressBillingManagementListClient.tsx
  • src/components/business/construction/site-briefings/SiteBriefingListClient.tsx
  • src/components/business/construction/site-management/SiteManagementListClient.tsx
  • src/components/business/construction/structure-review/StructureReviewListClient.tsx
  • src/components/business/construction/utility-management/UtilityManagementListClient.tsx
  • src/components/business/construction/worker-status/WorkerStatusListClient.tsx

그룹 B: DateRangeSelector 미사용 페이지 (11개)

기준정보 (2개)

  • [N/A] src/components/items/ItemListClient.tsx ※useItemList 훅 패턴, customFilterFn 없음
  • [N/A] src/components/pricing/PricingListClient.tsx ※tabFilter/searchFilter 패턴, customFilterFn 없음

회계관리 (1개)

  • src/components/accounting/VendorManagement/index.tsx ※customFilterFn 방어코드 추가

인사관리 (1개)

  • [N/A] src/components/hr/CardManagement/index.tsx ※tabFilter/searchFilter 패턴, customFilterFn 없음

게시판 (1개)

  • [N/A] src/components/board/BoardManagement/index.tsx ※tabFilter/searchFilter 패턴, customFilterFn 없음

설정 (2개)

  • [N/A] src/components/settings/PermissionManagement/index.tsx ※externalSearch 패턴, customFilterFn 없음
  • [N/A] src/components/settings/AccountManagement/index.tsx ※getList 내 검색 처리, customFilterFn 없음

고객센터 (3개)

  • src/components/customer-center/NoticeManagement/NoticeList.tsx ※customFilterFn 방어코드 추가
  • src/components/customer-center/InquiryManagement/InquiryList.tsx ※customFilterFn 방어코드 추가
  • src/components/customer-center/EventManagement/EventList.tsx ※customFilterFn 방어코드 추가

그룹 C: IntegratedListTemplateV2 마이그레이션 (7개)

※ 분석 결과: 모두 UniversalListPage 이미 사용 중, customFilterFn 없거나 그룹 B에서 처리됨

  • [N/A] src/components/accounting/ExpectedExpenseManagement/index.tsx ※이미 UniversalListPage, tableData에서 필터링
  • [N/A] src/components/accounting/BillManagement/index.tsx ※이미 UniversalListPage, 서버 사이드 필터링
  • src/components/customer-center/NoticeManagement/NoticeList.tsx ※그룹 B에서 처리됨
  • src/components/customer-center/InquiryManagement/InquiryList.tsx ※그룹 B에서 처리됨
  • src/components/customer-center/EventManagement/EventList.tsx ※그룹 B에서 처리됨
  • [N/A] src/components/quotes/QuoteManagementClient.tsx ※이미 UniversalListPage, tabFilter/searchFilter만 사용
  • [N/A] src/components/settings/PopupManagement/PopupList.tsx ※이미 UniversalListPage, searchFilter만 사용

📊 진행 현황

그룹 총 개수 완료 N/A 진행률
A 26 25 1 100%
B 11 4 7 100%
C 7 3 4 100%
합계 44 32 12 100%

📝 작업 로그

2025-01-26

  • 체크리스트 생성
  • 프로토타입 분석 완료 (ProcessListClient, WithdrawalManagement)
  • 그룹 A 회계관리 5개 완료:
    • SalesManagement: extraActions 검색창, hideSearch, 모바일 레이아웃, 방어적 코딩
    • PurchaseManagement: extraActions 검색창, hideSearch, 모바일 레이아웃, 방어적 코딩
    • DepositManagement: extraActions 검색창, hideSearch, 모바일 레이아웃, 방어적 코딩
    • CardTransactionInquiry: extraActions 검색창, hideSearch, 모바일 레이아웃, 방어적 코딩
    • BadDebtCollection: 방어적 코딩만 (dateRangeSelector 없음)
  • 그룹 A 인사관리 4개 완료:
    • EmployeeManagement: extraActions 검색창, hideSearch, 방어적 코딩
    • AttendanceManagement: extraActions 검색창, hideSearch, 방어적 코딩
    • SalaryManagement: extraActions 검색창, hideSearch
    • VacationManagement: headerActions 내 검색창, hideSearch (다른 구조 사용)
  • 그룹 A 건설관리 16개 완료 (1개 N/A):
    • BiddingListClient, ContractListClient, EstimateListClient, HandoverReportListClient: 전체 패턴 적용
    • IssueManagementListClient, LaborManagementClient, ConstructionManagementListClient, OrderManagementListClient: 전체 패턴 적용
    • ProgressBillingManagementListClient, SiteBriefingListClient, SiteManagementListClient: 전체 패턴 적용
    • StructureReviewListClient, UtilityManagementListClient, WorkerStatusListClient: 전체 패턴 적용
    • ItemManagementClient: externalSearch 패턴 사용 - hideSearch만 추가
    • PartnerListClient: dateRangeSelector 없음 - 방어적 코딩만 추가
    • ProjectListClient: UniversalListPage 미사용 (커스텀 Gantt차트) - 제외
  • 그룹 B 분석 및 수정 완료 (11개 분석, 4개 수정):
    • 대부분 tabFilter/searchFilter 또는 externalSearch 패턴 사용 (customFilterFn 없음)
    • VendorManagement: customFilterFn 방어코드 추가
    • NoticeList: customFilterFn 방어코드 추가
    • InquiryList: customFilterFn 방어코드 추가
    • EventList: customFilterFn 방어코드 추가
    • N/A 처리: ItemListClient, PricingListClient, CardManagement, BoardManagement, PermissionManagement, AccountManagement (다른 패턴 사용)
  • 그룹 C 분석 완료 (7개 분석):
    • 모든 파일이 이미 UniversalListPage 사용 중 (IntegratedListTemplateV2 아님)
    • NoticeList, InquiryList, EventList: 그룹 B에서 방어코드 추가됨
    • ExpectedExpenseManagement, BillManagement: 서버 사이드/테이블 데이터 필터링 사용
    • QuoteManagementClient, PopupList: tabFilter/searchFilter 패턴만 사용
  • 프로젝트 완료: 총 44개 파일 분석, 32개 수정, 12개 N/A (다른 패턴 사용)