summaryrefslogtreecommitdiff
path: root/lib/bidding/detail
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding/detail')
-rw-r--r--lib/bidding/detail/table/bidding-detail-vendor-columns.tsx22
-rw-r--r--lib/bidding/detail/table/bidding-detail-vendor-toolbar-actions.tsx59
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>
+
</>
)
}