"use client" import * as React from "react" import { format } from "date-fns" import { ko } from "date-fns/locale" import { FileText, Download } from "lucide-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Separator } from "@/components/ui/separator" import { formatDate } from "../utils" interface SiteVisitRequest { id: number investigationId: number requesterId: number | null inspectionDuration: string | null requestedStartDate: Date | null requestedEndDate: Date | null shiAttendees: Record | null shiAttendeeDetails?: string | null vendorRequests: Record | null additionalRequests: string | null status: string sentAt: Date | null createdAt: Date updatedAt: Date // 실사정보 investigationMethod: string | null // QM담당자가 작성한 실사방법 investigationAddress: string | null investigationNotes: string | null forecastedAt: Date | null actualAt: Date | null result: string | null resultNotes: string | null // PQ 정보 pqItems: string | null | Array<{itemCode: string, itemName: string}> // 요청자 정보 requesterName: string | null requesterEmail: string | null requesterTitle: string | null // QM 매니저 정보 qmManagerName: string | null qmManagerEmail: string | null qmManagerTitle: string | null // 협력업체 정보 vendorInfo?: { id: number siteVisitRequestId: number factoryName: string factoryLocation: string factoryAddress: string factoryPicName: string factoryPicPhone: string factoryPicEmail: string factoryDirections: string | null accessProcedure: string | null hasAttachments: boolean otherInfo: string | null submittedAt: Date submittedBy: number createdAt: Date updatedAt: Date } | null // SHI 첨부파일 shiAttachments?: Array<{ id: number siteVisitRequestId: number vendorSiteVisitInfoId: number | null fileName: string originalFileName: string filePath: string fileSize: number mimeType: string createdAt: Date updatedAt: Date }> | null } interface SiteVisitDetailDialogProps { isOpen: boolean onOpenChange: (open: boolean) => void selectedRequest: SiteVisitRequest | null } export function SiteVisitDetailDialog({ isOpen, onOpenChange, selectedRequest, }: SiteVisitDetailDialogProps) { return ( 방문실사 상세 정보 작성한 방문실사 정보의 상세 내용입니다. {selectedRequest && (
{/* 기본 정보 */} {/* 협력업체 정보 */} {selectedRequest.vendorInfo && ( <>

작성한 협력업체 정보

공장 기본 정보

공장명: {selectedRequest.vendorInfo.factoryName}
공장위치: {selectedRequest.vendorInfo.factoryLocation}
공장주소: {selectedRequest.vendorInfo.factoryAddress}

공장 담당자 정보

이름: {selectedRequest.vendorInfo.factoryPicName}
전화번호: {selectedRequest.vendorInfo.factoryPicPhone}
이메일: {selectedRequest.vendorInfo.factoryPicEmail}
{selectedRequest.vendorInfo.factoryDirections && (

공장 가는 법

{selectedRequest.vendorInfo.factoryDirections}

)} {selectedRequest.vendorInfo.accessProcedure && (

공장 출입절차

{selectedRequest.vendorInfo.accessProcedure}

)}
{/* 기타 정보 */} {selectedRequest.vendorInfo.otherInfo && (

기타 정보

{selectedRequest.vendorInfo.otherInfo}

)} {/* 제출 정보 */}

제출 정보

제출일: {formatDate(selectedRequest.vendorInfo.submittedAt, "kr")}
첨부파일: {selectedRequest.vendorInfo.hasAttachments ? "있음" : "없음"}
)} {/* SHI 첨부파일 */} {selectedRequest.shiAttachments && selectedRequest.shiAttachments.length > 0 && ( <>

SHI 첨부파일 ({selectedRequest.shiAttachments.length}개)

{selectedRequest.shiAttachments.map((attachment) => (
{attachment.originalFileName} ({Math.round((attachment.fileSize || 0) / 1024)}KB)
))}
)} {/* 추가 요청사항 */} {selectedRequest.additionalRequests && ( <>

SHI 추가 요청사항

{selectedRequest.additionalRequests}

)}
)}
) }