diff options
Diffstat (limited to 'lib/bidding/detail')
| -rw-r--r-- | lib/bidding/detail/table/bidding-detail-vendor-columns.tsx | 22 | ||||
| -rw-r--r-- | lib/bidding/detail/table/bidding-detail-vendor-toolbar-actions.tsx | 59 |
2 files changed, 71 insertions, 10 deletions
diff --git a/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx b/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx index 6f35405d..80e50119 100644 --- a/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx +++ b/lib/bidding/detail/table/bidding-detail-vendor-columns.tsx @@ -76,17 +76,21 @@ export function getBiddingDetailVendorColumns({ cell: ({ row }) => { const hasAmount = row.original.quotationAmount && Number(row.original.quotationAmount) > 0 return ( - <div className="text-right font-mono"> + <div className="text-right font-mono font-bold"> {hasAmount ? ( - <button - onClick={() => onViewQuotationHistory?.(row.original)} - className="text-primary hover:text-primary/80 hover:underline cursor-pointer" - title="품목별 견적 상세 보기" - > - {Number(row.original.quotationAmount).toLocaleString()} {row.original.currency} - </button> + <> + <button + onClick={() => onViewQuotationHistory?.(row.original)} + className="text-primary hover:text-primary/80 hover:underline cursor-pointer" + title="품목별 견적 상세 보기" + > + <span className="border-b-2 border-primary"> + {Number(row.original.quotationAmount).toLocaleString()} {row.original.currency} + </span> + </button> + </> ) : ( - <span className="text-muted-foreground">- {row.original.currency}</span> + <span className="text-muted-foreground border-b-2 border-dashed font-bold">- {row.original.currency}</span> )} </div> ) diff --git a/lib/bidding/detail/table/bidding-detail-vendor-toolbar-actions.tsx b/lib/bidding/detail/table/bidding-detail-vendor-toolbar-actions.tsx index c1677ae7..f2c23de9 100644 --- a/lib/bidding/detail/table/bidding-detail-vendor-toolbar-actions.tsx +++ b/lib/bidding/detail/table/bidding-detail-vendor-toolbar-actions.tsx @@ -4,6 +4,7 @@ import * as React from "react" import { useRouter } from "next/navigation" import { useTransition } from "react" import { Button } from "@/components/ui/button" +import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Plus, Send, RotateCcw, XCircle, Trophy, FileText, DollarSign, RotateCw } from "lucide-react" import { registerBidding, markAsDisposal, createRebidding } from "@/lib/bidding/detail/service" import { sendBiddingBasicContracts, getSelectedVendorsForBidding } from "@/lib/bidding/pre-quote/service" @@ -37,6 +38,7 @@ export function BiddingDetailVendorToolbarActions({ const [isPricesDialogOpen, setIsPricesDialogOpen] = React.useState(false) const [isBiddingInvitationDialogOpen, setIsBiddingInvitationDialogOpen] = React.useState(false) const [selectedVendors, setSelectedVendors] = React.useState<any[]>([]) + const [isRoundIncreaseDialogOpen, setIsRoundIncreaseDialogOpen] = React.useState(false) // 본입찰 초대 다이얼로그가 열릴 때 선정된 업체들 조회 React.useEffect(() => { @@ -176,6 +178,32 @@ export function BiddingDetailVendorToolbarActions({ }) } + const handleRoundIncreaseWithNavigation = () => { + startTransition(async () => { + const result = await increaseRoundOrRebid(bidding.id, userId, 'round_increase') + + if (result.success) { + toast({ + title: "성공", + description: result.message, + }) + // 새로 생성된 입찰의 상세 페이지로 이동 + if (result.biddingId) { + router.push(`/evcp/bid/${result.biddingId}`) + } else { + router.push(`/evcp/bid`) + } + onSuccess() + } else { + toast({ + title: "오류", + description: result.error || "차수증가 중 오류가 발생했습니다.", + variant: 'destructive', + }) + } + }) + } + return ( <> <div className="flex items-center gap-2"> @@ -185,7 +213,7 @@ export function BiddingDetailVendorToolbarActions({ <Button variant="outline" size="sm" - onClick={handleRoundIncrease} + onClick={() => setIsRoundIncreaseDialogOpen(true)} disabled={isPending} > <RotateCw className="mr-2 h-4 w-4" /> @@ -250,6 +278,35 @@ export function BiddingDetailVendorToolbarActions({ onSuccess={onSuccess} /> + {/* 차수증가 확인 다이얼로그 */} + <Dialog open={isRoundIncreaseDialogOpen} onOpenChange={setIsRoundIncreaseDialogOpen}> + <DialogContent> + <DialogHeader> + <DialogTitle>차수증가 확인</DialogTitle> + <DialogDescription> + 입찰을 차수증가 처리하시겠습니까? 차수증가 후 새로운 입찰 화면으로 이동합니다. + </DialogDescription> + </DialogHeader> + <DialogFooter> + <Button + variant="outline" + onClick={() => setIsRoundIncreaseDialogOpen(false)} + > + 아니오 + </Button> + <Button + onClick={async () => { + setIsRoundIncreaseDialogOpen(false) + await handleRoundIncreaseWithNavigation() + }} + disabled={isPending} + > + 예 + </Button> + </DialogFooter> + </DialogContent> + </Dialog> + </> ) } |
