summaryrefslogtreecommitdiff
path: root/lib/bidding/detail/table/bidding-detail-items-dialog.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bidding/detail/table/bidding-detail-items-dialog.tsx')
-rw-r--r--lib/bidding/detail/table/bidding-detail-items-dialog.tsx138
1 files changed, 138 insertions, 0 deletions
diff --git a/lib/bidding/detail/table/bidding-detail-items-dialog.tsx b/lib/bidding/detail/table/bidding-detail-items-dialog.tsx
new file mode 100644
index 00000000..2bab3ef0
--- /dev/null
+++ b/lib/bidding/detail/table/bidding-detail-items-dialog.tsx
@@ -0,0 +1,138 @@
+'use client'
+
+import * as React from 'react'
+import { Bidding } from '@/db/schema'
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+} from '@/components/ui/dialog'
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from '@/components/ui/table'
+import { Badge } from '@/components/ui/badge'
+import { formatDate } from '@/lib/utils'
+
+interface PrItem {
+ id: number
+ biddingId: number
+ itemName: string
+ itemCode: string
+ specification: string
+ quantity: number
+ unit: string
+ estimatedPrice: number
+ budget: number
+ deliveryDate: Date
+ notes: string
+ createdAt: Date
+ updatedAt: Date
+}
+
+interface BiddingDetailItemsDialogProps {
+ open: boolean
+ onOpenChange: (open: boolean) => void
+ prItems: PrItem[]
+ bidding: Bidding
+}
+
+export function BiddingDetailItemsDialog({
+ open,
+ onOpenChange,
+ prItems,
+ bidding
+}: BiddingDetailItemsDialogProps) {
+ return (
+ <Dialog open={open} onOpenChange={onOpenChange}>
+ <DialogContent className="max-w-6xl max-h-[80vh] overflow-y-auto">
+ <DialogHeader>
+ <DialogTitle>품목 정보</DialogTitle>
+ <DialogDescription>
+ 입찰번호: {bidding.biddingNumber} - 품목 상세 정보
+ </DialogDescription>
+ </DialogHeader>
+
+ <div className="space-y-4">
+ <div className="grid grid-cols-2 gap-4 text-sm">
+ <div>
+ <span className="font-medium">프로젝트:</span> {bidding.projectName || '-'}
+ </div>
+ <div>
+ <span className="font-medium">품목:</span> {bidding.itemName || '-'}
+ </div>
+ </div>
+
+ <div className="border rounded-lg">
+ <Table>
+ <TableHeader>
+ <TableRow>
+ <TableHead>품목코드</TableHead>
+ <TableHead>품목명</TableHead>
+ <TableHead>규격</TableHead>
+ <TableHead className="text-right">수량</TableHead>
+ <TableHead>단위</TableHead>
+ <TableHead className="text-right">예상단가</TableHead>
+ <TableHead className="text-right">예산</TableHead>
+ <TableHead>납기요청일</TableHead>
+ <TableHead>비고</TableHead>
+ </TableRow>
+ </TableHeader>
+ <TableBody>
+ {prItems.length > 0 ? (
+ prItems.map((item) => (
+ <TableRow key={item.id}>
+ <TableCell className="font-mono text-sm">
+ {item.itemCode}
+ </TableCell>
+ <TableCell className="font-medium">
+ {item.itemName}
+ </TableCell>
+ <TableCell className="text-sm">
+ {item.specification || '-'}
+ </TableCell>
+ <TableCell className="text-right">
+ {item.quantity ? Number(item.quantity).toLocaleString() : '-'}
+ </TableCell>
+ <TableCell>{item.unit}</TableCell>
+ <TableCell className="text-right font-mono">
+ {item.estimatedPrice ? Number(item.estimatedPrice).toLocaleString() : '-'} {bidding.currency}
+ </TableCell>
+ <TableCell className="text-right font-mono">
+ {item.budget ? Number(item.budget).toLocaleString() : '-'} {bidding.currency}
+ </TableCell>
+ <TableCell className="text-sm">
+ {item.deliveryDate ? formatDate(item.deliveryDate, 'KR') : '-'}
+ </TableCell>
+ <TableCell className="text-sm">
+ {item.notes || '-'}
+ </TableCell>
+ </TableRow>
+ ))
+ ) : (
+ <TableRow>
+ <TableCell colSpan={9} className="text-center py-8">
+ 등록된 품목이 없습니다.
+ </TableCell>
+ </TableRow>
+ )}
+ </TableBody>
+ </Table>
+ </div>
+
+ {prItems.length > 0 && (
+ <div className="text-sm text-muted-foreground">
+ 총 {prItems.length}개 품목
+ </div>
+ )}
+ </div>
+ </DialogContent>
+ </Dialog>
+ )
+}