From 969c25b56f6d29d7ffa4bc2ce04c5fb4e5846b34 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 14 Aug 2025 11:54:47 +0000 Subject: (대표님) 정규벤더등록, 벤더문서관리, 벤더데이터입력, 첨부파일관리 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../document-status-dialog.tsx | 213 +++++++++++++-------- 1 file changed, 136 insertions(+), 77 deletions(-) (limited to 'components/vendor-regular-registrations/document-status-dialog.tsx') diff --git a/components/vendor-regular-registrations/document-status-dialog.tsx b/components/vendor-regular-registrations/document-status-dialog.tsx index f8e2e1cd..db3defe6 100644 --- a/components/vendor-regular-registrations/document-status-dialog.tsx +++ b/components/vendor-regular-registrations/document-status-dialog.tsx @@ -8,13 +8,12 @@ import { } from "@/components/ui/dialog"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; -import { FileText, Download, CheckCircle, XCircle, Clock } from "lucide-react"; +import { FileText, Download, CheckCircle, XCircle, Clock, RefreshCw } from "lucide-react"; import { toast } from "sonner"; import type { VendorRegularRegistration } from "@/config/vendorRegularRegistrationsColumnsConfig"; import { documentStatusColumns, - contractAgreementColumns, } from "@/config/vendorRegularRegistrationsColumnsConfig"; import { downloadFile } from "@/lib/file-download"; @@ -22,6 +21,7 @@ interface DocumentStatusDialogProps { open: boolean; onOpenChange: (open: boolean) => void; registration: VendorRegularRegistration | null; + onRefresh?: () => void; } const StatusIcon = ({ status }: { status: string | boolean }) => { @@ -68,63 +68,87 @@ export function DocumentStatusDialog({ open, onOpenChange, registration, + onRefresh, }: DocumentStatusDialogProps) { if (!registration) return null; + // 디버깅: registration 데이터 확인 + console.log(`📋 DocumentStatusDialog - Partners 등록 데이터:`, { + companyName: registration.companyName, + businessNumber: registration.businessNumber, + representative: registration.representative, + safetyQualificationContent: registration.safetyQualificationContent, + basicContractsLength: registration.basicContracts?.length || 0, + additionalInfo: registration.additionalInfo + }); + // 파일 다운로드 핸들러 - const handleFileDownload = async (docKey: string, fileIndex: number = 0) => { - try { - const files = registration.documentFiles[docKey as keyof typeof registration.documentFiles]; - if (!files || files.length === 0) { - toast.error("다운로드할 파일이 없습니다."); - return; - } + // const handleFileDownload = async (docKey: string, fileIndex: number = 0) => { + // try { + // const files = registration.documentFiles[docKey as keyof typeof registration.documentFiles]; + // if (!files || files.length === 0) { + // toast.error("다운로드할 파일이 없습니다."); + // return; + // } - const file = files[fileIndex]; - if (!file) { - toast.error("파일을 찾을 수 없습니다."); - return; - } + // const file = files[fileIndex]; + // if (!file) { + // toast.error("파일을 찾을 수 없습니다."); + // return; + // } - // filePath와 fileName 추출 - const filePath = file.filePath || file.path; - const fileName = file.originalFileName || file.fileName || file.name; + // // filePath와 fileName 추출 + // const filePath = file.filePath || file.path; + // const fileName = file.originalFileName || file.fileName || file.name; - if (!filePath || !fileName) { - toast.error("파일 정보가 올바르지 않습니다."); - return; - } + // if (!filePath || !fileName) { + // toast.error("파일 정보가 올바르지 않습니다."); + // return; + // } - console.log(`📥 파일 다운로드 시작:`, { filePath, fileName, docKey }); + // console.log(`📥 파일 다운로드 시작:`, { filePath, fileName, docKey }); - // downloadFile 함수를 사용하여 파일 다운로드 - const result = await downloadFile(filePath, fileName, { - showToast: true, - onError: (error) => { - console.error("파일 다운로드 오류:", error); - toast.error(`파일 다운로드 실패: ${error}`); - }, - onSuccess: (fileName, fileSize) => { - console.log(`✅ 파일 다운로드 성공:`, { fileName, fileSize }); - } - }); + // // downloadFile 함수를 사용하여 파일 다운로드 + // const result = await downloadFile(filePath, fileName, { + // showToast: true, + // onError: (error) => { + // console.error("파일 다운로드 오류:", error); + // toast.error(`파일 다운로드 실패: ${error}`); + // }, + // onSuccess: (fileName, fileSize) => { + // console.log(`✅ 파일 다운로드 성공:`, { fileName, fileSize }); + // } + // }); - if (!result.success) { - console.error("파일 다운로드 실패:", result.error); - } - } catch (error) { - console.error("파일 다운로드 중 오류 발생:", error); - toast.error("파일 다운로드 중 오류가 발생했습니다."); - } - }; + // if (!result.success) { + // console.error("파일 다운로드 실패:", result.error); + // } + // } catch (error) { + // console.error("파일 다운로드 중 오류 발생:", error); + // toast.error("파일 다운로드 중 오류가 발생했습니다."); + // } + // }; return ( - - - 문서/자료 접수 현황 - {registration.companyName} + +
+ + 문서/자료 접수 현황 - {registration.companyName} +
+ {onRefresh && ( + + )}
@@ -160,12 +184,18 @@ export function DocumentStatusDialog({
상태
제출일자
액션
- + {documentStatusColumns.map((doc) => { const isSubmitted = registration.documentSubmissions[ doc.key as keyof typeof registration.documentSubmissions ] as boolean; + // 내자인 경우 통장사본은 표시하지 않음 + const isForeign = registration.country !== 'KR'; + if (doc.key === 'bankCopy' && !isForeign) { + return null; + } + return (
{doc.label} + {doc.key === 'bankCopy' && isForeign && ( + (외자 필수) + )}
@@ -182,7 +215,7 @@ export function DocumentStatusDialog({ {isSubmitted ? "2024.01.01" : "-"}
- {isSubmitted && ( + {/* {isSubmitted && ( - )} + )} */}
); @@ -211,37 +244,63 @@ export function DocumentStatusDialog({
서약일자
액션
- {contractAgreementColumns.map((agreement) => { - const status = registration.contractAgreements[ - agreement.key as keyof typeof registration.contractAgreements - ] as string; - - return ( -
-
- - {agreement.label} -
-
- -
-
- {status === "completed" ? "2024.01.01" : "-"} -
-
- {status === "completed" && ( - - )} + {!registration.basicContracts || registration.basicContracts.length === 0 ? ( +
+ 요청된 기본계약이 없습니다. +
+ ) : ( + registration.basicContracts.map((contract, index) => { + const isCompleted = contract.status === "COMPLETED"; + + return ( +
+
+ + {contract.templateName || "템플릿명 없음"} +
+
+ +
+
+ {isCompleted && contract.createdAt + ? new Intl.DateTimeFormat('ko-KR').format(new Date(contract.createdAt)) + : "-" + } +
+
+ {isCompleted && ( + + )} +
-
- ); - })} + ); + }) + )} +
+ + + {/* 안전적격성 평가 */} +
+

안전적격성 평가

+
+
+
+ + 안전적격성 평가 +
+ +
+ {registration.safetyQualificationContent && ( +
+

{registration.safetyQualificationContent}

+
+ )}
-- cgit v1.2.3