feat(WEB): 공사관리 시스템 및 CEO 대시보드 기능 확장
- 공사현장관리: 프로젝트 상세, 공정관리, 칸반보드 구현 - 이슈관리: 현장 이슈 등록/조회 기능 추가 - 근로자현황: 일별 근로자 출역 현황 페이지 추가 - 유틸리티관리: 현장 유틸리티 관리 페이지 추가 - 기성청구: 기성청구 관리 페이지 추가 - CEO 대시보드: 현황판(StatusBoardSection) 추가, 설정 다이얼로그 개선 - 발주관리: 모바일 필터 적용, 리스트 UI 개선 - 공용 컴포넌트: MobileFilter, IntegratedListTemplateV2 개선, CalendarHeader 반응형 개선 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -93,4 +93,37 @@
|
||||
|
||||
---
|
||||
|
||||
*2025-11-27 작성*
|
||||
## 공통 UI 컴포넌트 사용 규칙
|
||||
|
||||
### 로딩 스피너
|
||||
|
||||
**필수**: 로딩 상태 표시 시 반드시 공통 스피너 컴포넌트 사용
|
||||
|
||||
```tsx
|
||||
import {
|
||||
ContentLoadingSpinner,
|
||||
PageLoadingSpinner,
|
||||
TableLoadingSpinner,
|
||||
ButtonSpinner
|
||||
} from '@/components/ui/loading-spinner';
|
||||
```
|
||||
|
||||
| 컴포넌트 | 용도 | 예시 |
|
||||
|----------|------|------|
|
||||
| `ContentLoadingSpinner` | 상세/수정 페이지 컨텐츠 영역 | `if (isLoading) return <ContentLoadingSpinner />;` |
|
||||
| `PageLoadingSpinner` | 페이지 전환, 전체 페이지 | loading.tsx, 초기 로딩 |
|
||||
| `TableLoadingSpinner` | 테이블/리스트 영역 | 데이터 테이블 로딩 |
|
||||
| `ButtonSpinner` | 버튼 내부 (저장 중 등) | `{isSaving && <ButtonSpinner />}` |
|
||||
|
||||
**금지 패턴:**
|
||||
```tsx
|
||||
// ❌ 텍스트만 사용 금지
|
||||
<div className="text-muted-foreground">로딩 중...</div>
|
||||
|
||||
// ❌ 직접 스피너 구현 금지
|
||||
<div className="animate-spin rounded-full h-8 w-8 border-b-2 border-blue-500" />
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*2025-11-27 작성 / 2026-01-12 스피너 규칙 추가*
|
||||
|
||||
52
claudedocs/[IMPL-2026-01-12] project-detail-checklist.md
Normal file
52
claudedocs/[IMPL-2026-01-12] project-detail-checklist.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# 프로젝트 실행관리 상세 페이지 구현 체크리스트
|
||||
|
||||
## 구현 일자: 2026-01-12
|
||||
|
||||
## 페이지 구조
|
||||
- 페이지 경로: `/construction/project/management/[id]`
|
||||
- 칸반 보드 형태의 상세 페이지
|
||||
- 프로젝트 → 단계 → 상세 연동
|
||||
|
||||
---
|
||||
|
||||
## 작업 목록
|
||||
|
||||
### 1. 타입 및 데이터 준비
|
||||
- [x] types.ts - 상세 페이지용 타입 추가 (Stage, StageDetail, ProjectDetail 등)
|
||||
- [x] actions.ts - 상세 페이지 목업 데이터 추가
|
||||
|
||||
### 2. 칸반 보드 컴포넌트
|
||||
- [x] ProjectKanbanBoard.tsx - 칸반 보드 컨테이너
|
||||
- [x] KanbanColumn.tsx - 칸반 컬럼 공통 컴포넌트
|
||||
- [x] ProjectCard.tsx - 프로젝트 카드 (진행률, 계약금, 기간)
|
||||
- [x] StageCard.tsx - 단계 카드 (입찰/계약/시공)
|
||||
- [x] DetailCard.tsx - 상세 카드 (현장설명회 등 단순 목록)
|
||||
|
||||
### 3. 프로젝트 종료 팝업
|
||||
- [x] ProjectEndDialog.tsx - 프로젝트 종료 다이얼로그
|
||||
|
||||
### 4. 메인 페이지 조립
|
||||
- [x] ProjectDetailClient.tsx - 메인 클라이언트 컴포넌트
|
||||
- [x] page.tsx - 상세 페이지 진입점
|
||||
|
||||
### 5. 검증
|
||||
- [ ] 칸반 보드 동작 확인 (프로젝트→단계→상세 연동)
|
||||
- [ ] 프로젝트 종료 팝업 동작 확인
|
||||
- [ ] 리스트 페이지에서 상세 페이지 이동 확인
|
||||
|
||||
---
|
||||
|
||||
## 참고 사항
|
||||
- 1차 구현: 상세 하위 목록 없는 경우 (현장설명회) 먼저 구현
|
||||
- 이후 추가로 보면서 맞춰가기
|
||||
- 기존 리스트 페이지 패턴 참고
|
||||
|
||||
---
|
||||
|
||||
## 진행 상황
|
||||
- 시작: 2026-01-12
|
||||
- 현재 상태: 1차 구현 완료, 브라우저 검증 대기
|
||||
|
||||
## 테스트 URL
|
||||
- 리스트 페이지: http://localhost:3000/ko/construction/project/management
|
||||
- 상세 페이지: http://localhost:3000/ko/construction/project/management/1
|
||||
@@ -0,0 +1,180 @@
|
||||
# 모바일 필터 공통화 마이그레이션 체크리스트
|
||||
|
||||
> **작업 내용**: `IntegratedListTemplateV2` 사용 페이지에 `filterConfig` 방식 모바일 필터 적용
|
||||
> **시작일**: 2026-01-13
|
||||
> **완료 기준**: 모든 테이블 리스트 페이지에서 모바일 바텀시트 필터가 정상 동작
|
||||
|
||||
---
|
||||
|
||||
## ✅ 이미 완료된 페이지 (6개)
|
||||
|
||||
- [x] 발주관리 (`OrderManagementListClient.tsx`) - filterConfig 방식
|
||||
- [x] 기성청구관리 (`ProgressBillingManagementListClient.tsx`) - filterConfig 방식
|
||||
- [x] 공과관리 (`UtilityManagementListClient.tsx`) - filterConfig 방식
|
||||
- [x] 시공관리 (`ConstructionManagementListClient.tsx`) - filterConfig 방식 ✨변경
|
||||
- [x] 거래처관리 (`PartnerListClient.tsx`) - filterConfig 방식 ✨신규
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 건설 도메인 (12개)
|
||||
|
||||
### 입찰관리
|
||||
- [ ] 현장설명회관리 (`SiteBriefingListClient.tsx`)
|
||||
- [ ] 견적관리 (`EstimateListClient.tsx`)
|
||||
- [ ] 입찰관리 (`BiddingListClient.tsx`)
|
||||
|
||||
### 계약관리
|
||||
- [ ] 계약관리 (`ContractListClient.tsx`)
|
||||
- [ ] 인수인계보고서 (`HandoverReportListClient.tsx`)
|
||||
|
||||
### 발주관리
|
||||
- [ ] 현장관리 (`SiteManagementListClient.tsx`)
|
||||
- [ ] 구조검토관리 (`StructureReviewListClient.tsx`)
|
||||
|
||||
### 공사관리
|
||||
- [ ] 이슈관리 (`IssueManagementListClient.tsx`)
|
||||
- [ ] 작업인력현황 (`WorkerStatusListClient.tsx`)
|
||||
|
||||
### 기준정보
|
||||
- [ ] 품목관리 (`ItemManagementClient.tsx`)
|
||||
- [ ] 단가관리 (`PricingListClient.tsx`)
|
||||
- [ ] 노임관리 (`LaborManagementClient.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## 👥 HR 도메인 (5개)
|
||||
|
||||
- [ ] 급여관리 (`hr/SalaryManagement/index.tsx`)
|
||||
- [ ] 사원관리 (`hr/EmployeeManagement/index.tsx`)
|
||||
- [ ] 휴가관리 (`hr/VacationManagement/index.tsx`)
|
||||
- [ ] 근태관리 (`hr/AttendanceManagement/index.tsx`)
|
||||
- [ ] 카드관리 (`hr/CardManagement/index.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## 💰 회계 도메인 (14개)
|
||||
|
||||
- [ ] 거래처관리 (`accounting/VendorManagement/index.tsx`)
|
||||
- [ ] 매입관리 (`accounting/PurchaseManagement/index.tsx`)
|
||||
- [ ] 매출관리 (`accounting/SalesManagement/index.tsx`)
|
||||
- [ ] 입금관리 (`accounting/DepositManagement/index.tsx`)
|
||||
- [ ] 출금관리 (`accounting/WithdrawalManagement/index.tsx`)
|
||||
- [ ] 어음관리 (`accounting/BillManagement/index.tsx`)
|
||||
- [ ] 거래처원장 (`accounting/VendorLedger/index.tsx`)
|
||||
- [ ] 지출예상내역서 (`accounting/ExpectedExpenseManagement/index.tsx`)
|
||||
- [ ] 입출금계좌조회 (`accounting/BankTransactionInquiry/index.tsx`)
|
||||
- [ ] 카드내역조회 (`accounting/CardTransactionInquiry/index.tsx`)
|
||||
- [ ] 악성채권추심 (`accounting/BadDebtCollection/index.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## 📦 생산/자재/품질/출고 도메인 (6개)
|
||||
|
||||
- [ ] 작업지시관리 (`production/WorkOrders/WorkOrderList.tsx`)
|
||||
- [ ] 작업실적조회 (`production/WorkResults/WorkResultList.tsx`)
|
||||
- [ ] 재고현황 (`material/StockStatus/StockStatusList.tsx`)
|
||||
- [ ] 입고관리 (`material/ReceivingManagement/ReceivingList.tsx`)
|
||||
- [ ] 검사관리 (`quality/InspectionManagement/InspectionList.tsx`)
|
||||
- [ ] 출하관리 (`outbound/ShipmentManagement/ShipmentList.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## 📝 전자결재 도메인 (3개)
|
||||
|
||||
- [ ] 기안함 (`approval/DraftBox/index.tsx`)
|
||||
- [ ] 결재함 (`approval/ApprovalBox/index.tsx`)
|
||||
- [ ] 참조함 (`approval/ReferenceBox/index.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ 설정 도메인 (4개)
|
||||
|
||||
- [ ] 계좌관리 (`settings/AccountManagement/index.tsx`)
|
||||
- [ ] 팝업관리 (`settings/PopupManagement/PopupList.tsx`)
|
||||
- [ ] 결제내역 (`settings/PaymentHistoryManagement/index.tsx`)
|
||||
- [ ] 권한관리 (`settings/PermissionManagement/index.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## 📋 기타 도메인 (9개)
|
||||
|
||||
- [ ] 품목기준관리 (`items/ItemListClient.tsx`)
|
||||
- [ ] 견적관리 (`quotes/QuoteManagementClient.tsx`)
|
||||
- [ ] 단가관리-일반 (`pricing/PricingListClient.tsx`)
|
||||
- [ ] 공정관리 (`process-management/ProcessListClient.tsx`)
|
||||
- [ ] 게시판목록 (`board/BoardList/index.tsx`)
|
||||
- [ ] 게시판관리 (`board/BoardManagement/index.tsx`)
|
||||
- [ ] 공지사항 (`customer-center/NoticeManagement/NoticeList.tsx`)
|
||||
- [ ] 이벤트 (`customer-center/EventManagement/EventList.tsx`)
|
||||
- [ ] 1:1문의 (`customer-center/InquiryManagement/InquiryList.tsx`)
|
||||
|
||||
---
|
||||
|
||||
## 📊 진행 현황
|
||||
|
||||
| 도메인 | 완료 | 전체 | 진행률 |
|
||||
|--------|------|------|--------|
|
||||
| 건설 (완료) | 6 | 6 | 100% |
|
||||
| 건설 (미완료) | 0 | 12 | 0% |
|
||||
| HR | 0 | 5 | 0% |
|
||||
| 회계 | 0 | 11 | 0% |
|
||||
| 생산/자재/품질/출고 | 0 | 6 | 0% |
|
||||
| 전자결재 | 0 | 3 | 0% |
|
||||
| 설정 | 0 | 4 | 0% |
|
||||
| 기타 | 0 | 9 | 0% |
|
||||
| **총계** | **6** | **56** | **11%** |
|
||||
|
||||
---
|
||||
|
||||
## 작업 방법
|
||||
|
||||
각 페이지에 다음 패턴으로 `filterConfig` 추가:
|
||||
|
||||
```tsx
|
||||
// 1. filterConfig 정의
|
||||
const filterConfig: FilterFieldConfig[] = useMemo(() => [
|
||||
{ key: 'field1', label: '필드1', type: 'multi', options: field1Options },
|
||||
{ key: 'field2', label: '필드2', type: 'single', options: field2Options },
|
||||
], [field1Options, field2Options]);
|
||||
|
||||
// 2. filterValues 객체
|
||||
const filterValues: FilterValues = useMemo(() => ({
|
||||
field1: field1Filters,
|
||||
field2: field2Filter,
|
||||
}), [field1Filters, field2Filter]);
|
||||
|
||||
// 3. handleFilterChange 함수
|
||||
const handleFilterChange = useCallback((key: string, value: string | string[]) => {
|
||||
switch (key) {
|
||||
case 'field1': setField1Filters(value as string[]); break;
|
||||
case 'field2': setField2Filter(value as string); break;
|
||||
}
|
||||
setCurrentPage(1);
|
||||
}, []);
|
||||
|
||||
// 4. handleFilterReset 함수
|
||||
const handleFilterReset = useCallback(() => {
|
||||
setField1Filters([]);
|
||||
setField2Filter('all');
|
||||
setCurrentPage(1);
|
||||
}, []);
|
||||
|
||||
// 5. IntegratedListTemplateV2에 props 전달
|
||||
<IntegratedListTemplateV2
|
||||
filterConfig={filterConfig}
|
||||
filterValues={filterValues}
|
||||
onFilterChange={handleFilterChange}
|
||||
onFilterReset={handleFilterReset}
|
||||
filterTitle="페이지명 필터"
|
||||
// ... 기존 props
|
||||
/>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 변경 이력
|
||||
|
||||
| 날짜 | 작업 내용 |
|
||||
|------|----------|
|
||||
| 2026-01-13 | 체크리스트 문서 생성, MobileFilter 스크롤 버그 수정 |
|
||||
| 2026-01-13 | 시공관리 mobileFilterSlot → filterConfig 방식으로 변경, 협력업체관리 filterConfig 적용 |
|
||||
@@ -34,6 +34,19 @@ Last Updated: 2026-01-12
|
||||
| **구조검토관리** | `/ko/construction/order/structure-review` | 🆕 NEW |
|
||||
| **발주관리** | `/ko/construction/order/order-management` | 🆕 NEW |
|
||||
|
||||
### 공사관리 (Construction)
|
||||
| 페이지 | URL | 상태 |
|
||||
|---|---|---|
|
||||
| **시공관리** | `/ko/construction/project/construction-management` | ✅ 완료 |
|
||||
| **이슈관리** | `/ko/construction/project/issue-management` | ✅ 완료 |
|
||||
| **공과관리** | `/ko/construction/project/utility-management` | 🆕 NEW |
|
||||
| **작업인력현황** | `/ko/construction/project/worker-status` | ✅ 완료 |
|
||||
|
||||
### 기성청구관리 (Billing)
|
||||
| 페이지 | URL | 상태 |
|
||||
|---|---|---|
|
||||
| **기성청구관리** | `/ko/construction/billing/progress-billing-management` | 🆕 NEW |
|
||||
|
||||
### 기준정보 (Base Info) - 발주관리 하위
|
||||
| 페이지 | URL | 상태 |
|
||||
|---|---|---|
|
||||
@@ -41,6 +54,3 @@ Last Updated: 2026-01-12
|
||||
| **품목관리** | `/ko/construction/order/base-info/items` | 🆕 NEW |
|
||||
| **단가관리** | `/ko/construction/order/base-info/pricing` | 🆕 NEW |
|
||||
| **노임관리** | `/ko/construction/order/base-info/labor` | 🆕 NEW |
|
||||
|
||||
## 공사 관리 (Construction)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user