'use client'; /** * 단계 상세 뷰 컴포넌트 * * 기획서 스크린샷 2 기준: * - 기본 정보: 단계코드, 단계명, 필수여부, 승인여부, 검사여부, 상태 * - 연결 정보: 유형(팝업/없음), 도달(입고완료 자재 목록 등) * - 완료 정보: 유형(선택 완료 시 완료/클릭 시 완료) */ import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { ArrowLeft, Edit, Trash2 } from 'lucide-react'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { PageLayout } from '@/components/organisms/PageLayout'; import { PageHeader } from '@/components/organisms/PageHeader'; import { useMenuStore } from '@/store/menuStore'; import { usePermission } from '@/hooks/usePermission'; import { deleteProcessStep } from './actions'; import { toast } from 'sonner'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; import type { ProcessStep } from '@/types/process'; interface StepDetailProps { step: ProcessStep; processId: string; } export function StepDetail({ step, processId }: StepDetailProps) { const router = useRouter(); const sidebarCollapsed = useMenuStore((state) => state.sidebarCollapsed); const { canUpdate, canDelete } = usePermission(); const [showDeleteDialog, setShowDeleteDialog] = useState(false); const [isDeleting, setIsDeleting] = useState(false); const handleEdit = () => { router.push( `/ko/master-data/process-management/${processId}/steps/${step.id}?mode=edit` ); }; const handleBack = () => { router.push(`/ko/master-data/process-management/${processId}`); }; const handleDelete = async () => { setIsDeleting(true); try { const result = await deleteProcessStep(processId, step.id); if (result.success) { toast.success('단계가 삭제되었습니다.'); router.push(`/ko/master-data/process-management/${processId}`); } else { toast.error(result.error || '삭제에 실패했습니다.'); } } catch { toast.error('삭제 중 오류가 발생했습니다.'); } finally { setIsDeleting(false); setShowDeleteDialog(false); } }; return (
{/* 기본 정보 */} 기본 정보
단계코드
{step.stepCode}
단계명
{step.stepName}
필수여부
{step.isRequired ? '필수' : '선택'}
승인여부
{step.needsApproval ? '필요' : '불필요'}
검사여부
{step.needsInspection ? '필요' : '불필요'}
상태
{step.isActive ? '사용' : '미사용'}
{/* 연결 정보 */} 연결 정보
유형
{step.connectionType}
도달
{step.connectionTarget || '-'}
{/* 완료 정보 */} 완료 정보
유형
{step.completionType}
{/* 하단 액션 버튼 (sticky) */}
{canDelete && ( )} {canUpdate && ( )}
{/* 삭제 확인 다이얼로그 */} 단계 삭제 '{step.stepName}' 단계를 삭제하시겠습니까? 이 작업은 되돌릴 수 없습니다. 취소 {isDeleting ? '삭제 중...' : '삭제'}
); }