'use client'; /** * 작업일지 모달 * * - 헤더: sam-design 작업일지 스타일 * - 내부 문서: 스크린샷 기준 작업일지 양식 */ import { Printer, X } from 'lucide-react'; import { Dialog, DialogContent, DialogTitle, } from '@/components/ui/dialog'; import { VisuallyHidden } from '@radix-ui/react-visually-hidden'; import { Button } from '@/components/ui/button'; import { printArea } from '@/lib/print-utils'; import type { WorkOrder } from '../ProductionDashboard/types'; import { PROCESS_LABELS } from '../ProductionDashboard/types'; interface WorkLogModalProps { open: boolean; onOpenChange: (open: boolean) => void; order: WorkOrder | null; } export function WorkLogModal({ open, onOpenChange, order }: WorkLogModalProps) { const handlePrint = () => { printArea({ title: '작업일지 인쇄' }); }; if (!order) return null; const today = new Date().toLocaleDateString('ko-KR', { year: 'numeric', month: '2-digit', day: '2-digit', }).replace(/\. /g, '-').replace('.', ''); const documentNo = `WL-${order.process.toUpperCase().slice(0, 3)}`; const lotNo = `KD-TS-${new Date().toISOString().slice(2, 10).replace(/-/g, '')}-01`; // 샘플 품목 데이터 (스크린샷 기준) const items = [ { no: 1, name: '스크린 사타 (표준형)', location: '1층/A-01', spec: '3000×2500', qty: 1, status: '대기' }, { no: 2, name: '스크린 사타 (표준형)', location: '2층/A-02', spec: '3000×2500', qty: 1, status: '대기' }, { no: 3, name: '스크린 사타 (표준형)', location: '3층/A-03', spec: '-', qty: '-', status: '대기' }, ]; // 작업내역 데이터 (스크린샷 기준) const workStats = { workType: '필름 스크린', workWidth: '1016mm', general: 3, ironing: 3, sandblast: 3, packing: 1, orderQty: 3, completedQty: 1, progress: 33, }; return ( {/* 접근성을 위한 숨겨진 타이틀 */} 작업일지 - {order.orderNo} {/* 모달 헤더 - sam-design 스타일 (인쇄 시 숨김) */}
작업일지 {PROCESS_LABELS[order.process]} 생산부서 ({documentNo})
{/* 문서 본문 (인쇄 시 이 영역만 출력) */}
{/* 문서 헤더: 로고 + 제목 + 결재라인 */}
{/* 좌측: 로고 영역 */}
KD 정동기업
{/* 중앙: 문서 제목 */}

작 업 일 지

{documentNo}

{PROCESS_LABELS[order.process]} 생산부서

{/* 우측: 결재라인 */}
{/* 첫 번째 행: 결재 + 작성/검토/승인 */} {/* 두 번째 행: 이름 + 날짜 */} {/* 세 번째 행: 부서 */}
작성 검토 승인
{order.assignees[0] || '-'}
{new Date().toLocaleDateString('ko-KR', { month: '2-digit', day: '2-digit' }).replace('. ', '/').replace('.', '')}
판매/전진 생산 품질
{/* 기본 정보 테이블 */}
{/* Row 1 */}
발주처
{order.client}
현장명
{order.projectName}
{/* Row 2 */}
작업일자
{today}
LOT NO.
{lotNo}
{/* Row 3 */}
납기일
{new Date(order.dueDate).toLocaleDateString('ko-KR', { year: 'numeric', month: '2-digit', day: '2-digit', }).replace(/\. /g, '-').replace('.', '')}
규격
W- x H-
{/* 품목 테이블 */}
{/* 테이블 헤더 */}
No
품목명
출/부호
규격
수량
상태
{/* 테이블 데이터 */} {items.map((item, index) => (
{item.no}
{item.name}
{item.location}
{item.spec}
{item.qty}
{item.status}
))}
{/* 작업내역 */}
{/* 검정 헤더 */}
{PROCESS_LABELS[order.process]} 작업내역
{/* 작업내역 그리드 */}
화단 유형
{workStats.workType}
화단 폭
{workStats.workWidth}
화단일반
{workStats.general} EA
이싱
{workStats.ironing} EA
센드락 작업
{workStats.sandblast} EA
포장
{workStats.packing} EA
{/* 수량 및 진행률 */}
지시수량
{workStats.orderQty} EA
완료수량
{workStats.completedQty} EA
진행률
{workStats.progress}%
{/* 특이 사항 */}
특이사항
{order.instruction || '-'}
); }