'use client'; /** * 작업 카드 컴포넌트 * * 각 작업 항목을 카드 형태로 표시 * 버튼: 전량완료, 공정상세, 자재투입, 작업일지, 이슈보고 * 공정상세 토글 시 ProcessDetailSection 표시 */ import { useState } from 'react'; import { CheckCircle, Layers, Package, FileText, AlertTriangle, ChevronDown } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import type { WorkOrder } from '../ProductionDashboard/types'; import { PROCESS_LABELS, STATUS_LABELS } from '../ProductionDashboard/types'; import { ProcessDetailSection } from './ProcessDetailSection'; interface WorkCardProps { order: WorkOrder; onComplete: (order: WorkOrder) => void; onProcessDetail: (order: WorkOrder) => void; onMaterialInput: (order: WorkOrder) => void; onWorkLog: (order: WorkOrder) => void; onIssueReport: (order: WorkOrder) => void; } export function WorkCard({ order, onComplete, onProcessDetail, onMaterialInput, onWorkLog, onIssueReport, }: WorkCardProps) { const [isExpanded, setIsExpanded] = useState(false); // 상태별 배지 스타일 const statusBadgeStyle = { waiting: 'bg-gray-100 text-gray-700 border-gray-200', inProgress: 'bg-blue-100 text-blue-700 border-blue-200', completed: 'bg-green-100 text-green-700 border-green-200', }; // 납기일 포맷 (YYYY. M. D.) const formatDueDate = (dateStr: string) => { const date = new Date(dateStr); return `${date.getFullYear()}. ${date.getMonth() + 1}. ${date.getDate()}.`; }; return ( {/* 상단: 작업번호 + 상태 + 순위 */}
{order.orderNo} {STATUS_LABELS[order.status]}
{order.priority <= 3 && ( 순위 {order.priority} )}
{/* 제품명 + 수량 */}

{order.productName}

{order.client}

{order.projectName}

{order.quantity}

EA

{/* 공정 + 납기 */}
{PROCESS_LABELS[order.process]} 납기: {formatDueDate(order.dueDate)} {order.isDelayed && order.delayDays && ( +{order.delayDays}일 지연 )}
{/* 지시사항 */} {order.instruction && (
{order.instruction}
)} {/* 버튼 영역 - 첫 번째 줄 */}
{/* 버튼 영역 - 두 번째 줄 (이슈보고) */}
{/* 공정상세 섹션 (토글) */} onMaterialInput(order)} />
); }