From 18954df6565108a469fb1608ea3715dd9bb1b02d Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 1 Sep 2025 09:12:09 +0000 Subject: (대표님) 구매 기본계약, gtc 개발 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic-contracts-detail-columns.tsx | 72 ++++++++++++++++++++-- 1 file changed, 66 insertions(+), 6 deletions(-) (limited to 'lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx') diff --git a/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx b/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx index 80c39d1e..9a140b27 100644 --- a/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx +++ b/lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx @@ -1,4 +1,4 @@ -// basic-contracts-detail-columns.tsx +// simple-basic-contracts-detail-columns.tsx "use client" import * as React from "react" @@ -10,7 +10,16 @@ import { Badge } from "@/components/ui/badge" import { Checkbox } from "@/components/ui/checkbox" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" import { Button } from "@/components/ui/button" -import { MoreHorizontal, Download, Eye, Mail, FileText, Clock } from "lucide-react" +import { + MoreHorizontal, + Download, + Eye, + Mail, + FileText, + Clock, + MessageCircle, + Loader2 +} from "lucide-react" import { DropdownMenu, DropdownMenuContent, @@ -20,11 +29,18 @@ import { import { BasicContractView } from "@/db/schema" import { downloadFile, quickPreview } from "@/lib/file-download" import { toast } from "sonner" +import { useRouter } from "next/navigation" interface GetColumnsProps { setRowAction: React.Dispatch | null>> + gtcData: Record + isLoadingGtcData: boolean + router: NextRouter; } +type NextRouter = ReturnType; + + const CONTRACT_STATUS_CONFIG = { PENDING: { label: "발송완료", color: "gray" }, VENDOR_SIGNED: { label: "협력업체 서명완료", color: "blue" }, @@ -35,7 +51,12 @@ const CONTRACT_STATUS_CONFIG = { REJECTED: { label: "거절됨", color: "red" }, } as const -export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef[] { +export function getDetailColumns({ + setRowAction, + gtcData, + isLoadingGtcData, + router +}: GetColumnsProps): ColumnDef[] { const selectColumn: ColumnDef = { id: "select", @@ -163,7 +184,7 @@ export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef ( @@ -171,11 +192,51 @@ export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef { const name = row.getValue("vendorName") as string | null + const contract = row.original + const isGTCTemplate = contract.templateName?.includes('GTC') + const contractGtcData = gtcData[contract.id] + + const handleOpenGTC = (e: React.MouseEvent) => { + e.stopPropagation() + if (contractGtcData?.gtcDocumentId) { + const gtcUrl = `/evcp/basic-contract/vendor-gtc/${contractGtcData.gtcDocumentId}?vendorId=${contract.vendorId}&vendorName=${encodeURIComponent(contract.vendorName || '')}&contractId=${contract.id}&templateId=${contract.templateId}` + window.open(gtcUrl, '_blank') + } + } + return ( +
{name || "-"}
+ {isGTCTemplate && ( +
+ {isLoadingGtcData ? ( + + ) : contractGtcData ? ( +
+ {contractGtcData.hasComments && ( + + + 협의이력 + + )} + +
+ ) : ( + + GTC + + )} +
+ )} +
) }, - minSize: 180, + minSize: 250, }, // 진행상태 @@ -349,7 +410,6 @@ export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef