diff options
Diffstat (limited to 'lib/bidding/vendor')
| -rw-r--r-- | lib/bidding/vendor/partners-bidding-detail.tsx | 25 | ||||
| -rw-r--r-- | lib/bidding/vendor/partners-bidding-list-columns.tsx | 7 | ||||
| -rw-r--r-- | lib/bidding/vendor/partners-bidding-pre-quote.tsx | 33 |
3 files changed, 58 insertions, 7 deletions
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 ( <DropdownMenu> <DropdownMenuTrigger asChild> @@ -194,10 +197,12 @@ export function getPartnersBiddingListColumns({ setRowAction }: PartnersBiddingL <FileText className="mr-2 h-4 w-4" /> 입찰 상세보기 </DropdownMenuItem> + {!isClosed && ( <DropdownMenuItem onClick={handlePreQuote}> <Calculator className="mr-2 h-4 w-4" /> 사전견적하기 </DropdownMenuItem> + )} </DropdownMenuContent> </DropdownMenu> ) 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 ( |
