From e84cf02a1cb4959a9d3bb5bbf37885c13a447f78 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Mon, 13 Oct 2025 17:29:33 +0900 Subject: (김준회) SHI/벤더 PO 구현 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../evcp/(evcp)/(master-data)/projects/page.tsx | 2 +- .../po/[id]/contract-detail-client.tsx | 143 ++++++++++++ .../evcp/(evcp)/(procurement)/po/[id]/page.tsx | 56 +++++ .../(partners)/po/[id]/contract-detail-client.tsx | 249 +++++++++++++++++++++ app/[lng]/partners/(partners)/po/[id]/page.tsx | 55 +++++ .../(ECC)/IF_ECC_EVCP_PO_INFORMATION/route.ts | 10 +- 6 files changed, 512 insertions(+), 3 deletions(-) create mode 100644 app/[lng]/evcp/(evcp)/(procurement)/po/[id]/contract-detail-client.tsx create mode 100644 app/[lng]/evcp/(evcp)/(procurement)/po/[id]/page.tsx create mode 100644 app/[lng]/partners/(partners)/po/[id]/contract-detail-client.tsx create mode 100644 app/[lng]/partners/(partners)/po/[id]/page.tsx (limited to 'app') diff --git a/app/[lng]/evcp/(evcp)/(master-data)/projects/page.tsx b/app/[lng]/evcp/(evcp)/(master-data)/projects/page.tsx index c3d429d1..c9e6b0e3 100644 --- a/app/[lng]/evcp/(evcp)/(master-data)/projects/page.tsx +++ b/app/[lng]/evcp/(evcp)/(master-data)/projects/page.tsx @@ -36,7 +36,7 @@ export default async function IndexPage(props: IndexPageProps) {

- 프로젝트 리스트 from S-EDP + 프로젝트 리스트

diff --git a/app/[lng]/evcp/(evcp)/(procurement)/po/[id]/contract-detail-client.tsx b/app/[lng]/evcp/(evcp)/(procurement)/po/[id]/contract-detail-client.tsx new file mode 100644 index 00000000..28a85e50 --- /dev/null +++ b/app/[lng]/evcp/(evcp)/(procurement)/po/[id]/contract-detail-client.tsx @@ -0,0 +1,143 @@ +"use client" + +import * as React from "react" +import { Button } from "@/components/ui/button" +import { Badge } from "@/components/ui/badge" +import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" +import { ChevronLeft } from "lucide-react" +import Link from "next/link" +import { toast } from "sonner" +import { saveSHIComment } from "@/lib/po/vendor-table/service" +import { useRouter } from "next/navigation" +import { ContractInfoCard } from "@/components/contract/contract-info-card" +import { ContractItemsCard } from "@/components/contract/contract-items-card" +import { Alert, AlertDescription } from "@/components/ui/alert" +import { AlertCircle } from "lucide-react" + +interface ContractDetailClientProps { + contract: any + lng: string +} + +export function ContractDetailClient({ contract, lng }: ContractDetailClientProps) { + const router = useRouter() + const [shiComment, setSHIComment] = React.useState(contract.shiComment || "") + const [isLoading, setIsLoading] = React.useState(false) + + const handleSaveComment = async () => { + try { + setIsLoading(true) + const result = await saveSHIComment(contract.id, shiComment) + if (result.success) { + toast.success(result.message) + router.refresh() + } else { + toast.error("의견 저장에 실패했습니다.") + } + } catch (error) { + toast.error("의견 저장 중 오류가 발생했습니다.") + } finally { + setIsLoading(false) + } + } + + return ( + <> + {/* 헤더 */} +
+
+ + + +
+

계약 상세

+
+ 계약번호: + {contract.contractNo} + + {contract.status} + +
+
+
+
+ +
+
+ + {/* 계약 거절 사유 표시 (있는 경우) */} + {contract.rejectionReason && ( + + + + 계약 거절 사유: {contract.rejectionReason} + + + )} + + {/* 계약 조건 */} + + + {/* 코멘트 */} + + + 코멘트 + + +
+
+ +
+ {contract.vendorComment || "코멘트가 없습니다."} +
+
+
+ +