"use client"; import * as React from "react"; import { Eye, FileText, Building, User, Calendar, Clock, MessageSquare, CheckCircle, ShieldCheck, } from "lucide-react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Separator } from "@/components/ui/separator"; import { formatDate } from "@/lib/utils"; import { LegalWorksDetailView } from "@/db/schema"; // ----------------------------------------------------------------------------- // TYPES // ----------------------------------------------------------------------------- type LegalWorkData = LegalWorksDetailView; interface LegalWorkDetailDialogProps { open: boolean; onOpenChange: (open: boolean) => void; work: LegalWorkData | null; } // ----------------------------------------------------------------------------- // HELPERS // ----------------------------------------------------------------------------- // 상태별 배지 스타일 const getStatusBadgeVariant = (status: string) => { switch (status) { case "검토요청": return "bg-blue-100 text-blue-800 border-blue-200"; case "담당자배정": return "bg-yellow-100 text-yellow-800 border-yellow-200"; case "검토중": return "bg-orange-100 text-orange-800 border-orange-200"; case "답변완료": return "bg-green-100 text-green-800 border-green-200"; case "재검토요청": return "bg-purple-100 text-purple-800 border-purple-200"; case "보류": return "bg-gray-100 text-gray-800 border-gray-200"; case "취소": return "bg-red-100 text-red-800 border-red-200"; default: return "bg-gray-100 text-gray-800 border-gray-200"; } }; export function LegalWorkDetailDialog({ open, onOpenChange, work, }: LegalWorkDetailDialogProps) { if (!work) return null; // --------------------------------------------------------------------------- // CONDITIONAL FLAGS // --------------------------------------------------------------------------- const isLegalReview = work.reviewDepartment === "법무검토"; const isCompliance = work.reviewDepartment === "준법문의"; const isDomesticContract = work.inquiryType === "국내계약"; const isDomesticAdvisory = work.inquiryType === "국내자문"; const isOverseasContract = work.inquiryType === "해외계약"; const isOverseasAdvisory = work.inquiryType === "해외자문"; const isContractTypeActive = isDomesticContract || isOverseasContract || isOverseasAdvisory; const isDomesticContractFieldsActive = isDomesticContract; const isFactualRelationActive = isDomesticAdvisory || isOverseasAdvisory; const isOverseasFieldsActive = isOverseasContract || isOverseasAdvisory; // --------------------------------------------------------------------------- // RENDER // --------------------------------------------------------------------------- return ( {/* 헤더 */}
법무업무 상세보기 법무업무 #{work.id}의 상세 정보를 확인합니다.
{/* 본문 */}
{/* 1. 기본 정보 */} 기본 정보
업무 ID: #{work.id}
구분: {work.category} {work.isUrgent && ( 긴급 )}
상태: {work.status}
벤더: {work.vendorCode} - {work.vendorName}
의뢰일: {formatDate(work.consultationDate, "KR")}
답변요청일: {formatDate(work.requestDate, "KR")}
{/* 2. 담당자 정보 */} 담당자 정보
검토요청자

{work.reviewer || "미지정"}

법무답변자

{work.legalResponder || "미배정"}

{work.expectedAnswerDate && (
답변예정일

{formatDate(work.expectedAnswerDate, "KR")}

)} {work.legalCompletionDate && (
법무완료일

{formatDate(work.legalCompletionDate, "KR")}

)}
{/* 3. 법무업무 상세 정보 */} 법무업무 상세 정보
검토부문 {work.reviewDepartment}
{work.inquiryType && (
문의종류 {work.inquiryType}
)} {isCompliance && (
공개여부 {work.isPublic ? "공개" : "비공개"}
)}
{/* 법무검토 전용 필드 */} {isLegalReview && ( <> {work.contractProjectName && ( <>
계약명 / 프로젝트명

{work.contractProjectName}

)} {/* 계약서 종류 */} {isContractTypeActive && work.contractType && (
계약서 종류 {work.contractType}
)} {/* 국내계약 전용 필드 */} {isDomesticContractFieldsActive && (
{work.contractCounterparty && (
계약상대방

{work.contractCounterparty}

)} {work.counterpartyType && (
계약상대방 구분

{work.counterpartyType}

)} {work.contractPeriod && (
계약기간

{work.contractPeriod}

)} {work.contractAmount && (
계약금액

{work.contractAmount}

)}
)} {/* 사실관계 */} {isFactualRelationActive && work.factualRelation && (
사실관계

{work.factualRelation}

)} {/* 해외 전용 필드 */} {isOverseasFieldsActive && (
{work.projectNumber && (
프로젝트번호

{work.projectNumber}

)} {work.shipownerOrderer && (
선주 / 발주처

{work.shipownerOrderer}

)} {work.projectType && (
프로젝트종류

{work.projectType}

)} {work.governingLaw && (
준거법

{work.governingLaw}

)}
)} )}
{/* 4. 요청 내용 */} 요청 내용 {work.title && (
제목

{work.title}

)}
상세 내용
{work.requestContent ? (
) : (

요청 내용이 없습니다.

)}
{work.attachmentCount > 0 && (
첨부파일 {work.attachmentCount}개
)} {/* 5. 답변 내용 */} 답변 내용
{work.responseContent ? (
) : (

아직 답변이 등록되지 않았습니다.

)}
); }