diff --git a/src/components/quality/InspectionManagement/InspectionDetail.tsx b/src/components/quality/InspectionManagement/InspectionDetail.tsx index 39ffc3a1..17aed631 100644 --- a/src/components/quality/InspectionManagement/InspectionDetail.tsx +++ b/src/components/quality/InspectionManagement/InspectionDetail.tsx @@ -21,6 +21,7 @@ import { Plus, Trash2, ClipboardCheck, + Pencil, } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; @@ -121,12 +122,15 @@ const EMPTY_FORM: InspectionFormData = { export function InspectionDetail({ id }: InspectionDetailProps) { const router = useRouter(); const searchParams = useSearchParams(); - const isEditMode = searchParams.get('mode') === 'edit'; + const isEditModeParam = searchParams.get('mode') === 'edit'; // 상세 데이터 const [inspection, setInspection] = useState(null); const [isLoading, setIsLoading] = useState(true); + // 완료 상태면 편집 모드 강제 해제 + const isEditMode = isEditModeParam && inspection?.status !== '완료'; + // 수정 폼 데이터 const [formData, setFormData] = useState(EMPTY_FORM); @@ -809,7 +813,8 @@ export function InspectionDetail({ id }: InspectionDetailProps) { ); } - // View 모드: 검사제품요청서 보기, 제품검사하기, 검사 완료 버튼 표시 + // View 모드: 검사제품요청서 보기, 제품검사하기, 수정(완료시 disabled), 검사 완료 + const isCompleted = inspection.status === '완료'; return ( <> - {inspection.status !== '완료' && ( - )} + {!isCompleted && (() => { + const hasIncomplete = !inspectionStats || inspectionStats.none > 0 || inspectionStats.inProgress > 0; + return ( + + ); + })()} ); - }, [isEditMode, inspection]); + }, [isEditMode, inspection, inspectionStats]); // ===== View 모드 렌더링 ===== const renderViewContent = useCallback(() => { @@ -1295,11 +1311,12 @@ export function InspectionDetail({ id }: InspectionDetailProps) { const mode = isEditMode ? 'edit' : 'view'; const dynamicConfig = useMemo(() => { - if (isEditMode) { - return { ...inspectionConfig, title: '제품검사' }; + const base = isEditMode ? { ...inspectionConfig, title: '제품검사' } : inspectionConfig; + if (inspection?.status === '완료') { + return { ...base, permissions: { ...base.permissions, canEdit: false } }; } - return inspectionConfig; - }, [isEditMode]); + return base; + }, [isEditMode, inspection?.status]); // 데이터 없음 if (!isLoading && !inspection) { @@ -1322,7 +1339,7 @@ export function InspectionDetail({ id }: InspectionDetailProps) { itemId={id} isLoading={isLoading} onSubmit={handleSubmit} - onEdit={handleEdit} + onEdit={inspection?.status !== '완료' ? handleEdit : undefined} headerActions={headerActions} renderView={() => renderViewContent()} renderForm={() => renderFormContent()}