From 5fe800c27ff8caabbb0ac64c5dab8062aac43684 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 14 Oct 2025 08:35:00 +0000 Subject: (최겸) 구매 입찰 status 별 중복 응답 제한 및 기타 요구사항 반영 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../detail/table/bidding-detail-vendor-columns.tsx | 11 +++++++--- .../table/bidding-detail-vendor-edit-dialog.tsx | 24 ++++++++++++++++++---- .../detail/table/bidding-detail-vendor-table.tsx | 7 +++++-- .../bidding-detail-vendor-toolbar-actions.tsx | 5 ++++- lib/bidding/list/biddings-table-columns.tsx | 8 +++++++- lib/bidding/vendor/partners-bidding-detail.tsx | 12 +++++++---- 6 files changed, 52 insertions(+), 15 deletions(-) (limited to 'lib') diff --git a/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx b/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx index 782c5f7a..1de7c768 100644 --- a/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx +++ b/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx @@ -24,13 +24,15 @@ interface GetVendorColumnsProps { onViewItemDetails?: (vendor: QuotationVendor) => void onSendBidding?: (vendor: QuotationVendor) => void onUpdateParticipation?: (vendor: QuotationVendor, participated: boolean) => void + biddingStatus?: string // 입찰 상태 정보 추가 } export function getBiddingDetailVendorColumns({ onEdit, onViewItemDetails, onSendBidding, - onUpdateParticipation + onUpdateParticipation, + biddingStatus }: GetVendorColumnsProps): ColumnDef[] { return [ { @@ -168,14 +170,17 @@ export function getBiddingDetailVendorColumns({ 작업 - onEdit(vendor)} - disabled={vendor.isBiddingParticipated !== true} + disabled={vendor.isBiddingParticipated !== true || biddingStatus === 'vendor_selected'} > 발주비율 산정 {vendor.isBiddingParticipated !== true && ( (입찰참여 필요) )} + {biddingStatus === 'vendor_selected' && ( + (낙찰 완료) + )} {/* 입찰 참여여부 관리 */} diff --git a/lib/bidding/detail/table/bidding-detail-vendor-edit-dialog.tsx b/lib/bidding/detail/table/bidding-detail-vendor-edit-dialog.tsx index f43e850a..1a1b331e 100644 --- a/lib/bidding/detail/table/bidding-detail-vendor-edit-dialog.tsx +++ b/lib/bidding/detail/table/bidding-detail-vendor-edit-dialog.tsx @@ -22,13 +22,17 @@ interface BiddingDetailVendorEditDialogProps { open: boolean onOpenChange: (open: boolean) => void onSuccess: () => void + biddingAwardCount?: string // 낙찰수 정보 추가 + biddingStatus?: string // 입찰 상태 정보 추가 } export function BiddingDetailVendorEditDialog({ vendor, open, onOpenChange, - onSuccess + onSuccess, + biddingAwardCount, + biddingStatus }: BiddingDetailVendorEditDialogProps) { const { toast } = useToast() const [isPending, startTransition] = useTransition() @@ -41,11 +45,13 @@ export function BiddingDetailVendorEditDialog({ // vendor가 변경되면 폼 데이터 업데이트 React.useEffect(() => { if (vendor) { + // 낙찰수가 단수인 경우 발주비율을 100%로 자동 설정 + const defaultAwardRatio = biddingAwardCount === 'single' ? 100 : (vendor.awardRatio || 0) setFormData({ - awardRatio: vendor.awardRatio || 0, + awardRatio: defaultAwardRatio, }) } - }, [vendor]) + }, [vendor, biddingAwardCount]) const handleEdit = () => { if (!vendor) return @@ -129,13 +135,23 @@ export function BiddingDetailVendorEditDialog({ value={formData.awardRatio} onChange={(e) => setFormData({ ...formData, awardRatio: Number(e.target.value) })} placeholder="발주비율을 입력하세요" - disabled={vendor?.isBiddingParticipated !== true} + disabled={vendor?.isBiddingParticipated !== true || biddingAwardCount === 'single' || biddingStatus === 'vendor_selected'} /> {vendor?.isBiddingParticipated !== true && (

입찰에 참여한 업체만 발주비율을 설정할 수 있습니다.

)} + {biddingAwardCount === 'single' && vendor?.isBiddingParticipated === true && ( +

+ 단수 낙찰의 경우 발주비율은 자동으로 100%로 설정됩니다. +

+ )} + {biddingStatus === 'vendor_selected' && ( +

+ 낙찰이 완료되어 발주비율을 수정할 수 없습니다. +

+ )} diff --git a/lib/bidding/detail/table/bidding-detail-vendor-table.tsx b/lib/bidding/detail/table/bidding-detail-vendor-table.tsx index 3e8adda9..f2b05d4e 100644 --- a/lib/bidding/detail/table/bidding-detail-vendor-table.tsx +++ b/lib/bidding/detail/table/bidding-detail-vendor-table.tsx @@ -130,9 +130,10 @@ export function BiddingDetailVendorTableContent({ () => getBiddingDetailVendorColumns({ onEdit: onEdit || handleEdit, onViewPriceAdjustment: handleViewPriceAdjustment, - onViewItemDetails: onViewItemDetails + onViewItemDetails: onViewItemDetails, + biddingStatus: bidding.status }), - [onEdit, handleEdit, handleViewPriceAdjustment, onViewItemDetails] + [onEdit, handleEdit, handleViewPriceAdjustment, onViewItemDetails, bidding.status] ) const { table } = useDataTable({ @@ -174,6 +175,8 @@ export function BiddingDetailVendorTableContent({ open={isEditDialogOpen} onOpenChange={setIsEditDialogOpen} onSuccess={onRefresh} + biddingAwardCount={bidding.awardCount} + biddingStatus={bidding.status} /> 입찰 등록 + {bidding.status === 'received_quotation' && ( + (사전견적 제출 완료) + )} - -- cgit v1.2.3