"use client" import * as React from "react" import { ColumnDef } from "@tanstack/react-table" import { formatDate } from "@/lib/utils" import { Checkbox } from "@/components/ui/checkbox" import { Badge } from "@/components/ui/badge" import { } from "@/components/ui/dropdown-menu" import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" // Accepted Quotation 타입 정의 export interface AcceptedQuotationItem { id: number rfqId: number vendorId: number quotationCode: string | null quotationVersion: number | null totalPrice: string | null currency: string | null validUntil: Date | null status: string remark: string | null submittedAt: Date | null acceptedAt: Date | null createdAt: Date updatedAt: Date // RFQ 정보 rfqCode: string | null rfqType: string | null description: string | null dueDate: Date | null rfqStatus: string | null materialCode: string | null // Vendor 정보 vendorName: string vendorCode: string | null vendorEmail: string | null vendorCountry: string | null // Project 정보 projNm: string | null pspid: string | null sector: string | null } export function getColumns(): ColumnDef[] { // ---------------------------------------------------------------- // 1) select 컬럼 (체크박스) // ---------------------------------------------------------------- const selectColumn: ColumnDef = { id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" className="translate-y-0.5" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" className="translate-y-0.5" /> ), size: 40, enableSorting: false, enableHiding: false, } // ---------------------------------------------------------------- // 2) actions 컬럼 (Dropdown 메뉴) // ---------------------------------------------------------------- // const actionsColumn: ColumnDef = { // id: "actions", // cell: ({ row }) => ( // // // // // // setRowAction({ row, type: "open" })} // > // 견적서 보기 // // // // ), // size: 40, // enableSorting: false, // enableHiding: false, // } // ---------------------------------------------------------------- // 3) 데이터 컬럼들 정의 // ---------------------------------------------------------------- const dataColumns: ColumnDef[] = [ { accessorKey: "rfqCode", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.rfqCode || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "RFQ 코드", }, }, { accessorKey: "description", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.description || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "RFQ 설명", }, }, { accessorKey: "rfqType", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.rfqType || "-"}
), enableSorting: true, }, { accessorKey: "vendorName", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.vendorName}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "업체명", }, }, { accessorKey: "vendorCode", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.vendorCode || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "업체 코드", }, }, { accessorKey: "quotationCode", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.quotationCode || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "견적서 코드", }, }, { accessorKey: "totalPrice", header: ({ column }) => ( ), cell: ({ row }) => { const price = row.original.totalPrice; const currency = row.original.currency || "USD"; return (
{price ? `${Number(price).toLocaleString()} ${currency}` : "-"}
); }, enableSorting: true, enableHiding: true, meta: { excelHeader: "총 금액", }, }, { accessorKey: "status", header: ({ column }) => ( ), cell: ({ row }) => ( {row.original.status} ), enableSorting: true, enableHiding: true, meta: { excelHeader: "상태", }, }, { accessorKey: "projNm", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.projNm || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "프로젝트명", }, }, { accessorKey: "materialCode", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.materialCode || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "자재 코드", }, }, { accessorKey: "vendorCountry", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.vendorCountry || "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "국가", }, }, { accessorKey: "dueDate", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.dueDate ? formatDate(row.original.dueDate, "KR") : "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "마감일", }, }, { accessorKey: "acceptedAt", header: ({ column }) => ( ), cell: ({ row }) => (
{row.original.acceptedAt ? formatDate(row.original.acceptedAt, "KR") : "-"}
), enableSorting: true, enableHiding: true, meta: { excelHeader: "승인일", }, }, ] return [selectColumn, ...dataColumns] }