From 6c11fccc84f4c84fa72ee01f9caad9f76f35cea2 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 16 Sep 2025 09:20:58 +0000 Subject: (대표님, 최겸) 계약, 업로드 관련, 메뉴처리, 입찰, 프리쿼트, rfqLast관련, tbeLast관련 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/bidding/vendor/partners-bidding-detail.tsx | 25 ++++++++++++++++ .../vendor/partners-bidding-list-columns.tsx | 7 ++++- lib/bidding/vendor/partners-bidding-pre-quote.tsx | 33 ++++++++++++++++++---- 3 files changed, 58 insertions(+), 7 deletions(-) (limited to 'lib/bidding/vendor') diff --git a/lib/bidding/vendor/partners-bidding-detail.tsx b/lib/bidding/vendor/partners-bidding-detail.tsx index 4b316eee..89ca426b 100644 --- a/lib/bidding/vendor/partners-bidding-detail.tsx +++ b/lib/bidding/vendor/partners-bidding-detail.tsx @@ -296,6 +296,19 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD const handleSaveDraft = async () => { if (!biddingDetail || !userId) return + // 입찰 마감 상태 체크 + const biddingStatus = biddingDetail.status + const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal' + + if (isClosed) { + toast({ + title: "접근 제한", + description: "입찰이 마감되어 더 이상 입찰에 참여할 수 없습니다.", + variant: "destructive", + }) + return + } + if (prItemQuotations.length === 0) { toast({ title: '저장할 데이터 없음', @@ -350,6 +363,18 @@ export function PartnersBiddingDetail({ biddingId, companyId }: PartnersBiddingD const handleSubmitResponse = () => { if (!biddingDetail) return + // 입찰 마감 상태 체크 + const biddingStatus = biddingDetail.status + const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal' + + if (isClosed) { + toast({ + title: "접근 제한", + description: "입찰이 마감되어 더 이상 입찰에 참여할 수 없습니다.", + variant: "destructive", + }) + return + } // 필수값 검증 if (!responseData.finalQuoteAmount.trim()) { diff --git a/lib/bidding/vendor/partners-bidding-list-columns.tsx b/lib/bidding/vendor/partners-bidding-list-columns.tsx index 431f7e9a..534e8838 100644 --- a/lib/bidding/vendor/partners-bidding-list-columns.tsx +++ b/lib/bidding/vendor/partners-bidding-list-columns.tsx @@ -177,7 +177,10 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL }) } } - + + const biddingStatus = row.original.status + const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal' + return ( @@ -194,10 +197,12 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL 입찰 상세보기 + {!isClosed && ( 사전견적하기 + )} ) diff --git a/lib/bidding/vendor/partners-bidding-pre-quote.tsx b/lib/bidding/vendor/partners-bidding-pre-quote.tsx index bdc860f4..4ec65413 100644 --- a/lib/bidding/vendor/partners-bidding-pre-quote.tsx +++ b/lib/bidding/vendor/partners-bidding-pre-quote.tsx @@ -254,6 +254,19 @@ export function PartnersBiddingPreQuote({ biddingId, companyId }: PartnersBiddin }) return } + // 입찰 마감 상태 체크 + const biddingStatus = biddingDetail.status + const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal' + + if (isClosed) { + toast({ + title: "접근 제한", + description: "입찰이 마감되어 더 이상 사전견적을 제출할 수 없습니다.", + variant: "destructive", + }) + router.back() + return + } if (!userId) { toast({ @@ -356,6 +369,20 @@ export function PartnersBiddingPreQuote({ biddingId, companyId }: PartnersBiddin const handleSubmitResponse = () => { if (!biddingDetail) return + // 입찰 마감 상태 체크 + const biddingStatus = biddingDetail.status + const isClosed = biddingStatus === 'bidding_closed' || biddingStatus === 'vendor_selected' || biddingStatus === 'bidding_disposal' + + if (isClosed) { + toast({ + title: "접근 제한", + description: "입찰이 마감되어 더 이상 사전견적을 제출할 수 없습니다.", + variant: "destructive", + }) + router.back() + return + } + // 견적마감일 체크 if (biddingDetail.preQuoteDeadline) { const now = new Date() @@ -519,12 +546,6 @@ export function PartnersBiddingPreQuote({ biddingId, companyId }: PartnersBiddin }) } - const formatCurrency = (amount: number) => { - return new Intl.NumberFormat('ko-KR', { - style: 'currency', - currency: biddingDetail?.currency || 'KRW', - }).format(amount) - } if (isLoading) { return ( -- cgit v1.2.3