1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
"use client";
import { ColumnDef } from "@tanstack/react-table";
import { Badge } from "@/components/ui/badge";
import type { DocumentListItem } from "@/lib/swp/document-service";
export const swpDocumentColumns: ColumnDef<DocumentListItem>[] = [
{
accessorKey: "LTST_ACTV_STAT",
header: "상태",
cell: ({ row }) => {
const status = row.original.LTST_ACTV_STAT;
if (!status) return "-";
const color =
status.includes("Complete") ? "bg-green-100 text-green-800" :
status.includes("Progress") ? "bg-blue-100 text-blue-800" :
status.includes("Pending") || status.includes("Ready") ? "bg-yellow-100 text-yellow-800" :
"bg-gray-100 text-gray-800";
return (
<Badge variant="outline" className={color}>
{status}
</Badge>
);
},
size: 120,
},
{
accessorKey: "DOC_NO",
header: "문서번호",
cell: ({ row }) => (
<div className="font-mono text-sm">{row.original.DOC_NO}</div>
),
size: 250,
},
{
accessorKey: "DOC_TITLE",
header: "문서제목",
cell: ({ row }) => (
<div className="max-w-md truncate" title={row.original.DOC_TITLE}>
{row.original.DOC_TITLE}
</div>
),
size: 300,
},
{
accessorKey: "PROJ_NO",
header: "프로젝트",
cell: ({ row }) => (
<div>
<div className="font-medium">{row.original.PROJ_NO}</div>
{row.original.PROJ_NM && (
<div className="text-xs text-muted-foreground max-w-[150px] truncate">
{row.original.PROJ_NM}
</div>
)}
</div>
),
size: 150,
},
{
accessorKey: "PKG_NO",
header: "패키지",
cell: ({ row }) => row.original.PKG_NO || "-",
size: 100,
},
{
accessorKey: "VNDR_CD",
header: "업체",
cell: ({ row }) => (
<div>
{row.original.VNDR_CD && (
<div className="text-xs text-muted-foreground">{row.original.VNDR_CD}</div>
)}
{row.original.CPY_NM && (
<div className="text-sm truncate max-w-[120px]" title={row.original.CPY_NM}>
{row.original.CPY_NM}
</div>
)}
</div>
),
size: 120,
},
{
accessorKey: "STAGE",
header: "스테이지",
cell: ({ row }) => {
const stage = row.original.STAGE;
if (!stage) return "-";
const color =
stage === "IFC" ? "bg-green-100 text-green-800" :
stage === "IFA" ? "bg-blue-100 text-blue-800" :
"bg-gray-100 text-gray-800";
return (
<Badge variant="outline" className={color}>
{stage}
</Badge>
);
},
size: 80,
},
{
accessorKey: "LTST_REV_NO",
header: "최신 REV",
cell: ({ row }) => row.original.LTST_REV_NO || "-",
size: 80,
},
{
id: "stats",
header: "파일",
cell: ({ row }) => (
<div className="text-center">
<div className="text-sm font-medium">
{row.original.fileCount}개
</div>
{row.original.standbyFileCount > 0 && (
<div className="text-xs text-yellow-600">
대기중 {row.original.standbyFileCount}
</div>
)}
</div>
),
size: 100,
},
];
|