diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-25 22:04:56 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-25 22:04:56 +0900 |
| commit | 2b59582194fc5c23140f52c42c793c324856a35e (patch) | |
| tree | 0db8ef0e913b3a44dfd6e3e20fe92b8e4984aeba /lib/avl/table/avl-detail-virtual-columns.tsx | |
| parent | 835df8ddc115ffa74414db2a4fab7efc0d0056a9 (diff) | |
(김준회) 벤더풀&AVL 구매 추가요청사항 반영
Diffstat (limited to 'lib/avl/table/avl-detail-virtual-columns.tsx')
| -rw-r--r-- | lib/avl/table/avl-detail-virtual-columns.tsx | 280 |
1 files changed, 280 insertions, 0 deletions
diff --git a/lib/avl/table/avl-detail-virtual-columns.tsx b/lib/avl/table/avl-detail-virtual-columns.tsx new file mode 100644 index 00000000..250ba8de --- /dev/null +++ b/lib/avl/table/avl-detail-virtual-columns.tsx @@ -0,0 +1,280 @@ +import { Checkbox } from "@/components/ui/checkbox" +import { Badge } from "@/components/ui/badge" +import { type ColumnDef } from "@tanstack/react-table" +import { DataTableColumnHeaderSimple } from "@/components/data-table/data-table-column-simple-header" +import type { AvlDetailItem } from "../types" + + +// 테이블 컬럼 정의 (Virtual Table용 - 너비 증가) +export const virtualColumns: ColumnDef<AvlDetailItem>[] = [ + { + header: "기본 정보", + columns: [ + { + accessorKey: "no", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="No." /> + ), + size: 90, // 60 + 30 + meta: { + excelHeader: "No.", + }, + }, + { + accessorKey: "equipBulkDivision", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="Equip/Bulk 구분" /> + ), + cell: ({ row }) => { + const value = row.getValue("equipBulkDivision") as string + return ( + <Badge variant="outline"> + {value || "-"} + </Badge> + ) + }, + size: 200, // 120 + 30 + meta: { + excelHeader: "Equip/Bulk 구분", + }, + }, + { + accessorKey: "disciplineName", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="설계공종" /> + ), + cell: ({ row }) => { + const value = row.getValue("disciplineName") as string + return <span>{value || "-"}</span> + }, + size: 150, // 120 + 30 + meta: { + excelHeader: "설계공종", + }, + }, + { + accessorKey: "materialNameCustomerSide", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="고객사 AVL 자재명" /> + ), + cell: ({ row }) => { + const value = row.getValue("materialNameCustomerSide") as string + return <span>{value || "-"}</span> + }, + size: 250, // 150 + 30 + meta: { + excelHeader: "고객사 AVL 자재명", + }, + }, + { + accessorKey: "packageName", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="패키지 정보" /> + ), + cell: ({ row }) => { + const value = row.getValue("packageName") as string + return <span>{value || "-"}</span> + }, + size: 160, // 130 + 30 + meta: { + excelHeader: "패키지 정보", + }, + }, + { + accessorKey: "materialGroupCode", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="자재그룹코드" /> + ), + cell: ({ row }) => { + const value = row.getValue("materialGroupCode") as string + return <span>{value || "-"}</span> + }, + size: 250, // 120 + 30 + meta: { + excelHeader: "자재그룹코드", + }, + }, + { + accessorKey: "materialGroupName", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="자재그룹명" /> + ), + cell: ({ row }) => { + const value = row.getValue("materialGroupName") as string + return <span>{value || "-"}</span> + }, + size: 360, // 130 + 30 + meta: { + excelHeader: "자재그룹명", + }, + }, + { + accessorKey: "vendorCode", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="협력업체코드" /> + ), + cell: ({ row }) => { + const value = row.getValue("vendorCode") as string + return <span>{value || "-"}</span> + }, + size: 200, // 120 + 30 + meta: { + excelHeader: "협력업체코드", + }, + }, + { + accessorKey: "vendorName", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="협력업체명" /> + ), + cell: ({ row }) => { + const value = row.getValue("vendorName") as string + return <span className="font-medium">{value || "-"}</span> + }, + size: 400, + meta: { + excelHeader: "협력업체명", + }, + }, + { + accessorKey: "avlVendorName", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="AVL 등재업체명" /> + ), + cell: ({ row }) => { + const value = row.getValue("avlVendorName") as string + return <span>{value || "-"}</span> + }, + size: 170, // 140 + 30 + meta: { + excelHeader: "AVL 등재업체명", + }, + }, + { + accessorKey: "tier", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="등급 (Tier)" /> + ), + cell: ({ row }) => { + const value = row.getValue("tier") as string + if (!value) return <span>-</span> + + const tierColor = { + "Tier 1": "bg-green-100 text-green-800", + "Tier 2": "bg-yellow-100 text-yellow-800", + "Tier 3": "bg-red-100 text-red-800" + }[value] || "bg-gray-100 text-gray-800" + + return ( + <Badge className={tierColor}> + {value} + </Badge> + ) + }, + size: 130, // 100 + 30 + meta: { + excelHeader: "등급 (Tier)", + }, + }, + ], + }, + // FA 정보 그룹 + { + header: "FA 정보", + columns: [ + { + accessorKey: "faTarget", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="FA 대상" /> + ), + cell: ({ row }) => { + const value = row.getValue("faTarget") as boolean + return ( + <Badge variant={value ? "default" : "secondary"}> + {value ? "대상" : "비대상"} + </Badge> + ) + }, + size: 110, // 80 + 30 + meta: { + excelHeader: "FA 대상", + }, + }, + { + accessorKey: "faStatus", + header: ({ column }) => ( + <DataTableColumnHeaderSimple column={column} title="FA 현황" /> + ), + cell: ({ row }) => { + const value = row.getValue("faStatus") as string + return <span>{value || "-"}</span> + }, + size: 130, // 100 + 30 + meta: { + excelHeader: "FA 현황", + }, + }, + ], + }, + // SHI Qualification 그룹 + { + header: "SHI Qualification", + columns: [ + { + accessorKey: "shiAvl", + header: "AVL", + cell: ({ row }) => { + const value = row.getValue("shiAvl") as boolean + return ( + <Checkbox + checked={value} + disabled + aria-label="SHI AVL 등재 여부" + /> + ) + }, + size: 110, // 80 + 30 + meta: { + excelHeader: "AVL", + }, + }, + { + accessorKey: "shiBlacklist", + header: "Blacklist", + cell: ({ row }) => { + const value = row.getValue("shiBlacklist") as boolean + return ( + <Checkbox + checked={value} + disabled + aria-label="SHI Blacklist 등재 여부" + /> + ) + }, + size: 130, // 100 + 30 + meta: { + excelHeader: "Blacklist", + }, + }, + { + accessorKey: "shiBcc", + header: "BCC", + cell: ({ row }) => { + const value = row.getValue("shiBcc") as boolean + return ( + <Checkbox + checked={value} + disabled + aria-label="SHI BCC 등재 여부" + /> + ) + }, + size: 110, // 80 + 30 + meta: { + excelHeader: "BCC", + }, + }, + ], + }, +] + |
