From c8cccaf1198ae48754ac036b579732018f5b448a Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 23 Oct 2025 03:30:01 +0000 Subject: (최겸) 기술영업 조선 rfq 수정(벤더, 담당자 임시삭제기능 추가) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/techsales-rfq/table/project-detail-dialog.tsx | 87 +++++++++++++++++++++++ 1 file changed, 87 insertions(+) (limited to 'lib/techsales-rfq/table/project-detail-dialog.tsx') diff --git a/lib/techsales-rfq/table/project-detail-dialog.tsx b/lib/techsales-rfq/table/project-detail-dialog.tsx index 00202501..b2a14efa 100644 --- a/lib/techsales-rfq/table/project-detail-dialog.tsx +++ b/lib/techsales-rfq/table/project-detail-dialog.tsx @@ -1,6 +1,7 @@ "use client" import * as React from "react" +import { toast } from "sonner" import { Dialog, DialogContent, @@ -10,6 +11,8 @@ import { } from "@/components/ui/dialog" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" +import { type ProjectSeries } from "@/db/schema/projects" +import { getProjectSeriesForProject } from "@/lib/bidding-projects/service" // 기본적인 RFQ 타입 정의 (rfq-table.tsx와 일치) interface TechSalesRfq { @@ -41,6 +44,25 @@ interface TechSalesRfq { quotationCount: number } +// K/L 날짜를 4분기로 변환하는 함수 +function convertKLToQuarter(klDate: string | null): string { + if (!klDate) return "정보 없음" + + try { + // YYYYMMDD 형식의 날짜를 파싱 + const year = parseInt(klDate.substring(0, 4)) + const month = parseInt(klDate.substring(4, 6)) + + // 4분기 계산 (1-3월: 1Q, 4-6월: 2Q, 7-9월: 3Q, 10-12월: 4Q) + const quarter = Math.ceil(month / 3) + + return `${year} ${quarter}Q` + } catch (error) { + console.error("K/L 날짜 변환 오류:", error) + return "날짜 오류" + } +} + interface ProjectDetailDialogProps { open: boolean onOpenChange: (open: boolean) => void @@ -52,6 +74,30 @@ export function ProjectDetailDialog({ onOpenChange, selectedRfq, }: ProjectDetailDialogProps) { + const [projectSeries, setProjectSeries] = React.useState([]) + const [isLoadingSeries, setIsLoadingSeries] = React.useState(false) + + React.useEffect(() => { + async function loadSeries() { + if (!selectedRfq?.pspid) return + + setIsLoadingSeries(true) + try { + const result = await getProjectSeriesForProject(selectedRfq.pspid) + setProjectSeries(result) + } catch (error) { + console.error("프로젝트 시리즈 로드 오류:", error) + toast.error("프로젝트 시리즈 로드 실패") + } finally { + setIsLoadingSeries(false) + } + } + + if (open && selectedRfq) { + loadSeries() + } + }, [selectedRfq, open]) + if (!selectedRfq) { return null } @@ -104,6 +150,47 @@ export function ProjectDetailDialog({ + + {/* 시리즈 정보 */} +
+

시리즈 정보

+
+ {isLoadingSeries ? ( +
+ 시리즈 정보 로딩 중... +
+ ) : projectSeries.length > 0 ? ( +
+ {projectSeries.map((series) => ( +
+
+
+ 시리즈번호: +
{series.sersNo}
+
+
+ K/L (Keel Laying): +
{convertKLToQuarter(series.klDt)}
+
+
+ 도크코드: +
{series.dockNo || "N/A"}
+
+
+ 도크명: +
{series.dockNm || "N/A"}
+
+
+
+ ))} +
+ ) : ( +
+ 시리즈 데이터가 없습니다. +
+ )} +
+
{/* 닫기 버튼 */} -- cgit v1.2.3