summaryrefslogtreecommitdiff
path: root/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rfq-last/vendor-response/editor/quotation-items-table.tsx')
-rw-r--r--lib/rfq-last/vendor-response/editor/quotation-items-table.tsx70
1 files changed, 59 insertions, 11 deletions
diff --git a/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx b/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx
index 26c3808a..54866822 100644
--- a/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx
+++ b/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx
@@ -127,8 +127,38 @@ export default function QuotationItemsTable({ prItems }: QuotationItemsTableProp
) || 0
// 상세 정보 다이얼로그
- const ItemDetailDialog = ({ item, prItem, index }: any) => (
- <Dialog open={showDetail} onOpenChange={setShowDetail}>
+ const ItemDetailDialog = ({ item, prItem, index }: any) => {
+ const [localDeviationReason, setLocalDeviationReason] = useState("")
+ const [localItemRemark, setLocalItemRemark] = useState("")
+ const [localTechnicalCompliance, setLocalTechnicalCompliance] = useState(false)
+ const [localAlternativeProposal, setLocalAlternativeProposal] = useState("")
+
+ // 다이얼로그가 열릴 때 기존 값으로 초기화
+ useEffect(() => {
+ if (item) {
+ setLocalDeviationReason(item.deviationReason || "")
+ setLocalItemRemark(item.itemRemark || "")
+ setLocalTechnicalCompliance(item.technicalCompliance || false)
+ setLocalAlternativeProposal(item.alternativeProposal || "")
+ }
+ }, [item])
+
+ // 저장 버튼 클릭 핸들러
+ const handleSaveDetail = () => {
+ setValue(`quotationItems.${index}.deviationReason`, localDeviationReason)
+ setValue(`quotationItems.${index}.itemRemark`, localItemRemark)
+ setValue(`quotationItems.${index}.technicalCompliance`, localTechnicalCompliance)
+ setValue(`quotationItems.${index}.alternativeProposal`, localAlternativeProposal)
+ setShowDetail(false)
+ }
+
+ // 취소 버튼 클릭 핸들러
+ const handleCancelDetail = () => {
+ setShowDetail(false)
+ }
+
+ return (
+ <Dialog open={showDetail} onOpenChange={(open) => !open && setShowDetail(false)}>
<DialogContent className="max-w-3xl max-h-[80vh] overflow-y-auto">
<DialogHeader>
<DialogTitle>견적 상세 정보</DialogTitle>
@@ -221,24 +251,23 @@ export default function QuotationItemsTable({ prItems }: QuotationItemsTableProp
<div className="flex items-center space-x-2">
<Checkbox
id={`technicalCompliance-${index}`}
- checked={watch(`quotationItems.${index}.technicalCompliance`)}
- onCheckedChange={(checked) =>
- setValue(`quotationItems.${index}.technicalCompliance`, checked)
- }
+ checked={localTechnicalCompliance}
+ onCheckedChange={(checked) => setLocalTechnicalCompliance(checked === true)}
/>
<Label htmlFor={`technicalCompliance-${index}`}>
기술 사양 준수
</Label>
</div>
- {!watch(`quotationItems.${index}.technicalCompliance`) && (
+ {!localTechnicalCompliance && (
<div className="space-y-2">
<Label htmlFor={`alternativeProposal-${index}`}>
대안 제안 <span className="text-red-500">*</span>
</Label>
<Textarea
id={`alternativeProposal-${index}`}
- {...register(`quotationItems.${index}.alternativeProposal`)}
+ value={localAlternativeProposal}
+ onChange={(e) => setLocalAlternativeProposal(e.target.value)}
placeholder="기술 사양을 준수하지 않는 경우 대안을 제시해주세요"
className="min-h-[100px]"
/>
@@ -249,7 +278,8 @@ export default function QuotationItemsTable({ prItems }: QuotationItemsTableProp
<Label htmlFor={`deviationReason-${index}`}>편차 사유</Label>
<Textarea
id={`deviationReason-${index}`}
- {...register(`quotationItems.${index}.deviationReason`)}
+ value={localDeviationReason}
+ onChange={(e) => setLocalDeviationReason(e.target.value)}
placeholder="요구사항과 다른 부분이 있는 경우 사유를 입력하세요"
className="min-h-[80px]"
/>
@@ -300,16 +330,34 @@ export default function QuotationItemsTable({ prItems }: QuotationItemsTableProp
</CardHeader>
<CardContent>
<Textarea
- {...register(`quotationItems.${index}.itemRemark`)}
+ value={localItemRemark}
+ onChange={(e) => setLocalItemRemark(e.target.value)}
placeholder="아이템별 비고사항을 입력하세요"
className="min-h-[100px]"
/>
</CardContent>
</Card>
</div>
+
+ <DialogFooter>
+ <Button
+ type="button"
+ variant="outline"
+ onClick={handleCancelDetail}
+ >
+ 취소
+ </Button>
+ <Button
+ type="button"
+ onClick={handleSaveDetail}
+ >
+ 확인
+ </Button>
+ </DialogFooter>
</DialogContent>
</Dialog>
)
+}
return (
<Card>
@@ -358,7 +406,7 @@ export default function QuotationItemsTable({ prItems }: QuotationItemsTableProp
<TableHead className="w-[50px]">No</TableHead>
<TableHead className="w-[100px]">PR No</TableHead>
<TableHead className="min-w-[150px]">자재코드</TableHead>
- <TableHead className="min-w-[200px]">자재설명</TableHead>
+ <TableHead className="min-w-[200px]">자재명</TableHead>
<TableHead className="text-right w-[100px]">수량</TableHead>
<TableHead className="w-[150px]">단가</TableHead>
<TableHead className="text-right w-[150px]">총액</TableHead>