feat(WEB): 상세 페이지 권한 체계 통합 및 레이아웃/문서 기능 개선

권한 시스템 통합:
- BadDebtDetail, LaborDetail, PricingDetail 권한 로직 정리
- BoardDetail, ClientDetail, ItemDetail 권한 적용 개선
- ProcessDetail, StepDetail, PermissionDetail 권한 리팩토링
- ContractDetail, HandoverReport, ProgressBilling 권한 연동
- ReceivingDetail, ShipmentDetail, WorkOrderDetail 권한 적용
- InspectionDetail, OrderSalesDetail, QuoteFooterBar 권한 개선

기능 개선:
- AuthenticatedLayout 구조 리팩토링
- JointbarInspectionDocument 문서 레이아웃 개선
- PricingTableForm 폼 기능 보강
- DynamicItemForm, SectionsTab 개선
- 주문관리 상세/생산지시 페이지 개선
- VendorLedgerDetail 수정

설정:
- Claude hooks 추가 (빌드 차단, 파일 크기 체크, 미사용 import 체크)
- 품질감사 문서관리 계획 문서 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-04 20:26:27 +09:00
parent c1b63b850a
commit bb7e7a75e9
30 changed files with 737 additions and 665 deletions

View File

@@ -16,7 +16,7 @@
import { useState, useCallback, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { Upload, FileText, Search, X, Plus } from 'lucide-react';
import { Upload, FileText, Search, X, Plus, ClipboardCheck } from 'lucide-react';
import { FileDropzone } from '@/components/ui/file-dropzone';
import { ItemSearchModal } from '@/components/quotes/ItemSearchModal';
import { InspectionModalV2 } from '@/app/[locale]/(protected)/quality/qms/components/InspectionModalV2';
@@ -687,21 +687,12 @@ export function ReceivingDetail({ id, mode = 'view' }: Props) {
}, [formData, adjustments]);
// ===== 커스텀 헤더 액션 (view/edit 모드) =====
// 수정 버튼은 IntegratedDetailTemplate의 DetailActions에서 아이콘으로 제공하므로 중복 제거
const customHeaderActions = (isViewMode || isEditMode) && detail ? (
<div className="flex items-center gap-2">
<Button variant="outline" onClick={handleInspection}>
</Button>
{isViewMode && (
<Button
variant="default"
className="bg-gray-900 text-white hover:bg-gray-800"
onClick={() => router.push(`/ko/material/receiving-management/${id}?mode=edit`)}
>
</Button>
)}
</div>
<Button variant="outline" size="sm" onClick={handleInspection}>
<ClipboardCheck className="w-4 h-4 md:mr-2" />
<span className="hidden md:inline"></span>
</Button>
) : undefined;
// 에러 상태 표시 (view/edit 모드에서만)