diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-25 03:28:27 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-09-25 03:28:27 +0000 |
| commit | 4c2d4c235bd80368e31cae9c375e9a585f6a6844 (patch) | |
| tree | 7fd1847e1e30ef2052281453bfb7a1c45ac6627a /lib/rfq-last | |
| parent | f69e125f1a0b47bbc22e2784208bf829bcdd24f8 (diff) | |
(대표님) archiver 추가, 데이터룸구현
Diffstat (limited to 'lib/rfq-last')
| -rw-r--r-- | lib/rfq-last/service.ts | 6 | ||||
| -rw-r--r-- | lib/rfq-last/vendor-response/editor/quotation-items-table.tsx | 2 | ||||
| -rw-r--r-- | lib/rfq-last/vendor-response/editor/vendor-response-editor.tsx | 36 | ||||
| -rw-r--r-- | lib/rfq-last/vendor/rfq-vendor-table.tsx | 2 | ||||
| -rw-r--r-- | lib/rfq-last/vendor/vendor-detail-dialog.tsx | 10 |
5 files changed, 35 insertions, 21 deletions
diff --git a/lib/rfq-last/service.ts b/lib/rfq-last/service.ts index 82f8837a..be8e13e6 100644 --- a/lib/rfq-last/service.ts +++ b/lib/rfq-last/service.ts @@ -357,6 +357,8 @@ export async function createGeneralRfqAction(input: CreateGeneralRfqInput) { // 5. 마감일 기본값 설정 (입력값 없으면 생성일 + 7일) const dueDate = input.dueDate || getDefaultDueDate(); + console.log(dueDate,"dueDate") + // 6. rfqsLast 테이블에 기본 정보 삽입 const [newRfq] = await tx .insert(rfqsLast) @@ -3798,8 +3800,8 @@ export async function updateRfqDueDate( } // 6. 각 vendor별로 이메일 발송 - const emailPromises = [] - + const emailPromises: Promise<any>[] = [] + for (const detail of rfqDetailsData) { if (!detail.emailSentTo) continue 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 c9790880..4a8960ff 100644 --- a/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx +++ b/lib/rfq-last/vendor-response/editor/quotation-items-table.tsx @@ -53,6 +53,8 @@ export default function QuotationItemsTable({ prItems }: QuotationItemsTableProp const currency = watch("vendorCurrency") || "USD" const quotationItems = watch("quotationItems") + + console.log(prItems,"prItems") // PR 아이템 정보를 quotationItems에 초기화 useEffect(() => { diff --git a/lib/rfq-last/vendor-response/editor/vendor-response-editor.tsx b/lib/rfq-last/vendor-response/editor/vendor-response-editor.tsx index 6da704cd..569546dd 100644 --- a/lib/rfq-last/vendor-response/editor/vendor-response-editor.tsx +++ b/lib/rfq-last/vendor-response/editor/vendor-response-editor.tsx @@ -19,6 +19,22 @@ import { Shield, FileText, CheckCircle, XCircle, Clock, Download, Eye, Save, Sen import { Progress } from "@/components/ui/progress" import { Alert, AlertDescription } from "@/components/ui/alert" + +const quotationItemSchema = z.object({ + rfqPrItemId: z.number(), + unitPrice: z.number().min(0), + totalPrice: z.number().min(0), + vendorDeliveryDate: z.date().optional().nullable(), + leadTime: z.number().optional(), + manufacturer: z.string().optional(), + manufacturerCountry: z.string().optional(), + modelNo: z.string().optional(), + technicalCompliance: z.boolean(), + alternativeProposal: z.string().optional(), + discountRate: z.number().optional(), + itemRemark: z.string().optional(), + deviationReason: z.string().optional(), +}).passthrough(); // ⬅️ 여기가 핵심: 정의 안 된 키도 유지 // 폼 스키마 정의 const vendorResponseSchema = z.object({ // 상업 조건 @@ -59,21 +75,7 @@ const vendorResponseSchema = z.object({ technicalProposal: z.string().optional(), // 견적 아이템 - quotationItems: z.array(z.object({ - rfqPrItemId: z.number(), - unitPrice: z.number().min(0), - totalPrice: z.number().min(0), - vendorDeliveryDate: z.date().optional().nullable(), - leadTime: z.number().optional(), - manufacturer: z.string().optional(), - manufacturerCountry: z.string().optional(), - modelNo: z.string().optional(), - technicalCompliance: z.boolean(), - alternativeProposal: z.string().optional(), - discountRate: z.number().optional(), - itemRemark: z.string().optional(), - deviationReason: z.string().optional(), - })) +quotationItems: z.array(quotationItemSchema), }) type VendorResponseFormData = z.infer<typeof vendorResponseSchema> @@ -104,6 +106,8 @@ export default function VendorResponseEditor({ const [attachments, setAttachments] = useState<File[]>([]) const [uploadProgress, setUploadProgress] = useState(0) // 추가 + console.log(existingResponse,"existingResponse") + // Form 초기값 설정 const defaultValues: VendorResponseFormData = { @@ -175,6 +179,8 @@ export default function VendorResponseEditor({ } }, [errors]) + console.log(methods.getValues()) + const handleFormSubmit = (isSubmit: boolean = false) => { diff --git a/lib/rfq-last/vendor/rfq-vendor-table.tsx b/lib/rfq-last/vendor/rfq-vendor-table.tsx index 98d53f5d..ef906ed6 100644 --- a/lib/rfq-last/vendor/rfq-vendor-table.tsx +++ b/lib/rfq-last/vendor/rfq-vendor-table.tsx @@ -1206,7 +1206,7 @@ export function RfqVendorTable({ <Button variant="ghost" size="sm" - onClick={() => handleAction("response-detail", row.original)} + onClick={() => handleAction("view", row.original)} className="h-7 px-2" > <Eye className="h-3 w-3 mr-1" /> diff --git a/lib/rfq-last/vendor/vendor-detail-dialog.tsx b/lib/rfq-last/vendor/vendor-detail-dialog.tsx index 54aada1d..17eed54c 100644 --- a/lib/rfq-last/vendor/vendor-detail-dialog.tsx +++ b/lib/rfq-last/vendor/vendor-detail-dialog.tsx @@ -148,8 +148,8 @@ export function VendorResponseDetailDialog({ return ( <Dialog open={open} onOpenChange={onOpenChange}> - <DialogContent className="max-w-5xl max-h-[90vh] overflow-y-auto"> - <DialogHeader> + <DialogContent className="max-w-5xl max-h-[90vh] p-0 flex flex-col"> + <DialogHeader className="flex-shrink-0 sticky top-0 z-20 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60 border-b px-6 py-4"> <div className="flex items-center justify-between"> <div> <DialogTitle className="text-xl font-bold"> @@ -170,7 +170,9 @@ export function VendorResponseDetailDialog({ </div> </DialogHeader> - <Tabs defaultValue="overview" className="mt-4"> + <div className="flex-1 overflow-y-auto px-6 "> + + <Tabs defaultValue="overview" className="mb-2"> <TabsList className="grid w-full grid-cols-4"> <TabsTrigger value="overview">개요</TabsTrigger> <TabsTrigger value="quotation">견적정보</TabsTrigger> @@ -689,6 +691,8 @@ export function VendorResponseDetailDialog({ )} </TabsContent> </Tabs> + </div> + </DialogContent> </Dialog> ); |
