"use client" import * as React from "react" import { useRouter } from "next/navigation" import { Card, CardContent, CardHeader, CardTitle, CardDescription, CardFooter } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Textarea } from "@/components/ui/textarea" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { useToast } from "@/hooks/use-toast" import { CheckCircle, AlertCircle, FileText, Paperclip } from "lucide-react" import { PQGroupData } from "@/lib/pq/service" import { approvePQAction, rejectPQAction } from "@/lib/pq/service" // PQ 제출 정보 타입 interface PQSubmission { id: number vendorId: number vendorName: string vendorCode: string type: string status: string projectId: number | null projectName: string | null projectCode: string | null submittedAt: Date | null approvedAt: Date | null rejectedAt: Date | null rejectReason: string | null } interface PQReviewWrapperProps { pqData: PQGroupData[] vendorId: number pqSubmission: PQSubmission canReview: boolean } export function PQReviewWrapper({ pqData, vendorId, pqSubmission, canReview }: PQReviewWrapperProps) { const router = useRouter() const { toast } = useToast() const [isApproving, setIsApproving] = React.useState(false) const [isRejecting, setIsRejecting] = React.useState(false) const [showApproveDialog, setShowApproveDialog] = React.useState(false) const [showRejectDialog, setShowRejectDialog] = React.useState(false) const [rejectReason, setRejectReason] = React.useState("") // PQ 승인 처리 const handleApprove = async () => { try { setIsApproving(true) const result = await approvePQAction({ pqSubmissionId: pqSubmission.id, vendorId: vendorId }) if (result.ok) { toast({ title: "PQ 승인 완료", description: "PQ가 성공적으로 승인되었습니다.", }) // 페이지 새로고침 router.refresh() } else { toast({ title: "승인 실패", description: result.error || "PQ 승인 중 오류가 발생했습니다.", variant: "destructive" }) } } catch (error) { console.error("PQ 승인 오류:", error) toast({ title: "승인 실패", description: "PQ 승인 중 오류가 발생했습니다.", variant: "destructive" }) } finally { setIsApproving(false) setShowApproveDialog(false) } } // PQ 거부 처리 const handleReject = async () => { if (!rejectReason.trim()) { toast({ title: "거부 사유 필요", description: "거부 사유를 입력해주세요.", variant: "destructive" }) return } try { setIsRejecting(true) const result = await rejectPQAction({ pqSubmissionId: pqSubmission.id, vendorId: vendorId, rejectReason: rejectReason }) if (result.ok) { toast({ title: "PQ 거부 완료", description: "PQ가 거부되었습니다.", }) // 페이지 새로고침 router.refresh() } else { toast({ title: "거부 실패", description: result.error || "PQ 거부 중 오류가 발생했습니다.", variant: "destructive" }) } } catch (error) { console.error("PQ 거부 오류:", error) toast({ title: "거부 실패", description: "PQ 거부 중 오류가 발생했습니다.", variant: "destructive" }) } finally { setIsRejecting(false) setShowRejectDialog(false) } } return (
계약 정보
추가 요구사항