diff options
Diffstat (limited to 'lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx')
| -rw-r--r-- | lib/basic-contract/status-detail/basic-contracts-detail-columns.tsx | 72 |
1 files changed, 66 insertions, 6 deletions
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<React.SetStateAction<DataTableRowAction<BasicContractView> | null>> + gtcData: Record<number, { gtcDocumentId: number | null; hasComments: boolean }> + isLoadingGtcData: boolean + router: NextRouter; } +type NextRouter = ReturnType<typeof useRouter>; + + 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<BasicContractView>[] { +export function getDetailColumns({ + setRowAction, + gtcData, + isLoadingGtcData, + router +}: GetColumnsProps): ColumnDef<BasicContractView>[] { const selectColumn: ColumnDef<BasicContractView> = { id: "select", @@ -163,7 +184,7 @@ export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef<B minSize: 120, }, - // 업체명 + // 업체명 (GTC 정보 포함) { accessorKey: "vendorName", header: ({ column }) => ( @@ -171,11 +192,51 @@ export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef<B ), cell: ({ row }) => { 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 ( + <div className="flex items-center gap-2"> <div className="font-medium">{name || "-"}</div> + {isGTCTemplate && ( + <div className="flex items-center gap-1"> + {isLoadingGtcData ? ( + <Loader2 className="h-3 w-3 animate-spin text-gray-400" /> + ) : contractGtcData ? ( + <div className="flex items-center gap-1"> + {contractGtcData.hasComments && ( + <Badge + variant="secondary" + className="text-xs bg-orange-100 text-orange-700 cursor-pointer hover:bg-orange-200" + title={`GTC Document ID: ${contractGtcData.gtcDocumentId} - 클릭하여 협의이력 보기`} + onClick={handleOpenGTC} + > + <MessageCircle className="h-3 w-3 mr-1" /> + 협의이력 + </Badge> + )} + + </div> + ) : ( + <Badge variant="secondary" className="text-xs"> + GTC + </Badge> + )} + </div> + )} + </div> ) }, - minSize: 180, + minSize: 250, }, // 진행상태 @@ -349,7 +410,6 @@ export function getDetailColumns({ setRowAction }: GetColumnsProps): ColumnDef<B minSize: 120, }, - // 서명된 파일 { accessorKey: "signedFileName", |
