From 6f22fc9ebc8d175041aa18cf0986592e57d03f63 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Thu, 3 Jul 2025 02:47:09 +0000 Subject: (최겸) 기술영업 벤더별 아이템 조회 기능 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../table/possible-items-table-columns.tsx | 140 +++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 lib/tech-vendor-possible-items/table/possible-items-table-columns.tsx (limited to 'lib/tech-vendor-possible-items/table/possible-items-table-columns.tsx') diff --git a/lib/tech-vendor-possible-items/table/possible-items-table-columns.tsx b/lib/tech-vendor-possible-items/table/possible-items-table-columns.tsx new file mode 100644 index 00000000..520c089e --- /dev/null +++ b/lib/tech-vendor-possible-items/table/possible-items-table-columns.tsx @@ -0,0 +1,140 @@ +"use client"; + +import { ColumnDef } from "@tanstack/react-table"; +import { Checkbox } from "@/components/ui/checkbox"; +import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header"; +import Link from "next/link"; +// 타입만 import +type TechVendorPossibleItemsData = { + id: number; + vendorId: number; + vendorCode: string | null; + vendorName: string; + techVendorType: string; + itemCode: string; + createdAt: Date; + updatedAt: Date; +}; +import { format } from "date-fns"; +import { ko } from "date-fns/locale"; +import { Badge } from "@/components/ui/badge"; + +export function getColumns(): ColumnDef[] { + return [ + { + id: "select", + header: ({ table }) => ( + table.toggleAllPageRowsSelected(!!value)} + aria-label="모두 선택" + className="translate-y-[2px]" + /> + ), + cell: ({ row }) => ( + row.toggleSelected(!!value)} + aria-label="행 선택" + className="translate-y-[2px]" + /> + ), + enableSorting: false, + enableHiding: false, + }, + { + accessorKey: "itemCode", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const itemCode = row.getValue("itemCode") as string; + return
{itemCode}
; + }, + }, + { + accessorKey: "vendorCode", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const vendorCode = row.getValue("vendorCode") as string; + return
{vendorCode || "-"}
; + }, + }, + { + accessorKey: "vendorName", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const vendorName = row.getValue("vendorName") as string; + const vendorId = row.original.vendorId; + return ( + + {vendorName} + + ); + }, + }, + { + accessorKey: "techVendorType", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const techVendorType = row.getValue("techVendorType") as string; + + // JSON 배열인지 확인하고 파싱 + let types: string[] = []; + try { + const parsed = JSON.parse(techVendorType || "[]"); + types = Array.isArray(parsed) ? parsed : [techVendorType]; + } catch { + types = [techVendorType]; + } + + return ( +
+ {types.map((type, index) => ( + + {type} + + ))} +
+ ); + }, + filterFn: (row, id, value) => { + const techVendorType = row.getValue(id) as string; + try { + const parsed = JSON.parse(techVendorType || "[]"); + const types = Array.isArray(parsed) ? parsed : [techVendorType]; + return types.some(type => type.includes(value)); + } catch { + return techVendorType?.includes(value) || false; + } + }, + }, + + { + accessorKey: "createdAt", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const createdAt = row.getValue("createdAt") as Date; + return ( +
+ {format(createdAt, "yyyy-MM-dd HH:mm", { locale: ko })} +
+ ); + }, + }, + ]; +} \ No newline at end of file -- cgit v1.2.3