summaryrefslogtreecommitdiff
path: root/lib/dolce/table
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dolce/table')
-rw-r--r--lib/dolce/table/detail-drawing-columns.tsx119
-rw-r--r--lib/dolce/table/drawing-list-columns.tsx146
-rw-r--r--lib/dolce/table/file-list-columns.tsx18
-rw-r--r--lib/dolce/table/gtt-drawing-list-columns.tsx79
4 files changed, 245 insertions, 117 deletions
diff --git a/lib/dolce/table/detail-drawing-columns.tsx b/lib/dolce/table/detail-drawing-columns.tsx
index 7f519179..77d25953 100644
--- a/lib/dolce/table/detail-drawing-columns.tsx
+++ b/lib/dolce/table/detail-drawing-columns.tsx
@@ -2,7 +2,41 @@
import { ColumnDef } from "@tanstack/react-table";
import { DetailDwgReceiptItem } from "../actions";
+import { formatDolceDateTime } from "../utils/date-formatter";
+// DOLCE API ENM 필드가 제대로 번역되지 않아 직접 매핑
+const DRAWING_USAGE_MAP: Record<string, { ko: string; en: string }> = {
+ APP: { ko: "승인용", en: "Approval" },
+ WOR: { ko: "작업용", en: "Working" },
+ REC: { ko: "입수용 / GTT→SHI", en: "GTT→SHI" },
+ SUB: { ko: "제출용 / SHI→GTT", en: "SHI→GTT" },
+};
+
+const REGISTER_KIND_MAP: Record<string, { ko: string; en: string }> = {
+ APPR: { ko: "승인 제출용 도면(Full)", en: "For Approval(Full)" },
+ APPP: { ko: "승인 제출용 도면(Partial)", en: "For Approval(Partial)" },
+ WORK: { ko: "작업용 입수도면(Full)", en: "For Working(Full)" },
+ WORP: { ko: "작업용 입수도면(Partial)", en: "For Working(Partial)" },
+ RECW: { ko: "Working 도면입수(GTT→SHI)", en: "Working Dwg(GTT→SHI)" },
+ RECP: { ko: "Pre. 도면입수(GTT→SHI)", en: "Pre. Dwg(GTT→SHI)" },
+};
+
+// 카테고리는 API에서 ENM이 제공되는 것으로 가정 (필요시 추가)
+const translateDrawingUsage = (code: string | null, lng: string): string => {
+ if (!code) return "";
+ const mapped = DRAWING_USAGE_MAP[code];
+ if (!mapped) return code;
+ return lng === "en" ? mapped.en : mapped.ko;
+};
+
+const translateRegisterKind = (code: string | null, lng: string): string => {
+ if (!code) return "";
+ const mapped = REGISTER_KIND_MAP[code];
+ if (!mapped) return code;
+ return lng === "en" ? mapped.en : mapped.ko;
+};
+
+// 기본 컬럼 (기존 호환성 유지)
export const detailDrawingColumns: ColumnDef<DetailDwgReceiptItem>[] = [
{
accessorKey: "RegisterSerialNo",
@@ -78,3 +112,88 @@ export const detailDrawingColumns: ColumnDef<DetailDwgReceiptItem>[] = [
},
];
+// 다국어 지원 컬럼 생성 함수
+export function createDetailDrawingColumns(
+ lng: string,
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ t: any
+): ColumnDef<DetailDwgReceiptItem>[] {
+ return [
+ {
+ accessorKey: "RegisterSerialNo",
+ header: t("detailDrawing.columns.serialNo"),
+ minSize: 80,
+ cell: ({ row }) => {
+ return <div className="text-center">{row.getValue("RegisterSerialNo")}</div>;
+ },
+ },
+ {
+ accessorKey: "DrawingRevNo",
+ header: t("detailDrawing.columns.revNo"),
+ minSize: 100,
+ cell: ({ row }) => {
+ return <div className="font-medium">{row.getValue("DrawingRevNo")}</div>;
+ },
+ },
+ {
+ accessorKey: "Status",
+ header: t("detailDrawing.columns.status"),
+ minSize: 120,
+ cell: ({ row }) => {
+ return <div className="text-center">{row.getValue("Status")}</div>;
+ },
+ },
+ {
+ accessorKey: "CategoryENM",
+ header: t("detailDrawing.columns.category"),
+ minSize: 120,
+ cell: ({ row }) => {
+ const categoryENM = row.getValue("CategoryENM") as string;
+ const categoryNM = row.original.CategoryNM;
+ // 영어인 경우 ENM, 한국어인 경우 NM 사용
+ return <div>{lng === "en" ? (categoryENM || categoryNM) : (categoryNM || categoryENM)}</div>;
+ },
+ },
+ {
+ accessorKey: "DrawingUsageENM",
+ header: t("detailDrawing.columns.drawingUsage"),
+ minSize: 100,
+ cell: ({ row }) => {
+ // API의 ENM이 제대로 번역되지 않아 코드 값으로 직접 변환
+ const usageCode = row.getValue("DrawingUsageENM") as string | null;
+ const translated = translateDrawingUsage(usageCode, lng);
+ return <div>{translated || usageCode || row.original.DrawingUsageNM}</div>;
+ },
+ },
+ {
+ accessorKey: "RegisterKindENM",
+ header: t("detailDrawing.columns.registerKind"),
+ minSize: 180,
+ cell: ({ row }) => {
+ // API의 ENM이 제대로 번역되지 않아 코드 값으로 직접 변환
+ const kindCode = row.getValue("RegisterKindENM") as string | null;
+ const translated = translateRegisterKind(kindCode, lng);
+ return <div>{translated || kindCode || row.original.RegisterKindNM}</div>;
+ },
+ },
+ {
+ accessorKey: "CreateUserNM",
+ header: t("detailDrawing.columns.createdBy"),
+ minSize: 150,
+ cell: ({ row }) => {
+ const userENM = row.original.CreateUserENM;
+ const userNM = row.getValue("CreateUserNM") as string;
+ return <div>{lng === "en" ? (userENM || userNM) : (userNM || userENM)}</div>;
+ },
+ },
+ {
+ accessorKey: "CreateDt",
+ header: t("detailDrawing.columns.createdAt"),
+ minSize: 200,
+ cell: ({ row }) => {
+ const date = row.getValue("CreateDt") as string;
+ return <div className="text-sm text-muted-foreground">{formatDolceDateTime(date)}</div>;
+ },
+ },
+ ];
+}
diff --git a/lib/dolce/table/drawing-list-columns.tsx b/lib/dolce/table/drawing-list-columns.tsx
index 0e18266d..58631084 100644
--- a/lib/dolce/table/drawing-list-columns.tsx
+++ b/lib/dolce/table/drawing-list-columns.tsx
@@ -2,86 +2,86 @@
import { ColumnDef } from "@tanstack/react-table";
import { DwgReceiptItem } from "../actions";
+import { formatDolceDateYYYYMMDD, formatDolceDateTime } from "../utils/date-formatter";
-export const drawingListColumns: ColumnDef<DwgReceiptItem>[] = [
- {
- accessorKey: "DrawingNo",
- header: "도면번호",
- minSize: 200,
- cell: ({ row }) => {
- return <div className="font-medium">{row.getValue("DrawingNo")}</div>;
+export function drawingListColumns(lng: string, t: any): ColumnDef<DwgReceiptItem>[] {
+ return [
+ {
+ accessorKey: "DrawingNo",
+ header: t("drawingList.columns.drawingNo"),
+ minSize: 200,
+ cell: ({ row }) => {
+ return <div className="font-medium">{row.getValue("DrawingNo")}</div>;
+ },
},
- },
- {
- accessorKey: "DrawingName",
- header: "도면명",
- minSize: 400,
- cell: ({ row }) => {
- return <div>{row.getValue("DrawingName")}</div>;
+ {
+ accessorKey: "DrawingName",
+ header: t("drawingList.columns.drawingName"),
+ minSize: 600,
+ cell: ({ row }) => {
+ return <div>{row.getValue("DrawingName")}</div>;
+ },
},
- },
- {
- accessorKey: "Discipline",
- header: "설계공종",
- minSize: 80,
- },
- {
- accessorKey: "Manager",
- header: "담당자명",
- minSize: 200,
- cell: ({ row }) => {
- const managerENM = row.original.ManagerENM;
- const manager = row.getValue("Manager");
- return <div>{managerENM || manager}</div>;
+ {
+ accessorKey: "Discipline",
+ header: t("drawingList.columns.discipline"),
+ minSize: 80,
},
- },
- {
- accessorKey: "AppDwg_PlanDate",
- header: "승인도면 예정일",
- minSize: 140,
- cell: ({ row }) => {
- const date = row.getValue("AppDwg_PlanDate") as string;
- if (!date || date.length !== 8) return null;
- return `${date.substring(0, 4)}-${date.substring(4, 6)}-${date.substring(6, 8)}`;
+ {
+ accessorKey: "Manager",
+ header: t("drawingList.columns.manager"),
+ minSize: 200,
+ cell: ({ row }) => {
+ const managerENM = row.original.ManagerENM;
+ const manager = row.getValue("Manager");
+ return <div>{managerENM || manager}</div>;
+ },
},
- },
- {
- accessorKey: "AppDwg_ResultDate",
- header: "승인도면 결과일",
- minSize: 140,
- cell: ({ row }) => {
- const date = row.getValue("AppDwg_ResultDate") as string;
- if (!date || date.length !== 8) return null;
- return `${date.substring(0, 4)}-${date.substring(4, 6)}-${date.substring(6, 8)}`;
+ {
+ accessorKey: "AppDwg_PlanDate",
+ header: t("drawingList.columns.appDwgPlanDate"),
+ minSize: 140,
+ cell: ({ row }) => {
+ const date = row.getValue("AppDwg_PlanDate") as string;
+ return formatDolceDateYYYYMMDD(date);
+ },
},
- },
- {
- accessorKey: "WorDwg_PlanDate",
- header: "작업도면 예정일",
- minSize: 140,
- cell: ({ row }) => {
- const date = row.getValue("WorDwg_PlanDate") as string;
- if (!date || date.length !== 8) return null;
- return `${date.substring(0, 4)}-${date.substring(4, 6)}-${date.substring(6, 8)}`;
+ {
+ accessorKey: "AppDwg_ResultDate",
+ header: t("drawingList.columns.appDwgResultDate"),
+ minSize: 140,
+ cell: ({ row }) => {
+ const date = row.getValue("AppDwg_ResultDate") as string;
+ return formatDolceDateYYYYMMDD(date);
+ },
},
- },
- {
- accessorKey: "WorDwg_ResultDate",
- header: "작업도면 결과일",
- minSize: 140,
- cell: ({ row }) => {
- const date = row.getValue("WorDwg_ResultDate") as string;
- if (!date || date.length !== 8) return null;
- return `${date.substring(0, 4)}-${date.substring(4, 6)}-${date.substring(6, 8)}`;
+ {
+ accessorKey: "WorDwg_PlanDate",
+ header: t("drawingList.columns.worDwgPlanDate"),
+ minSize: 140,
+ cell: ({ row }) => {
+ const date = row.getValue("WorDwg_PlanDate") as string;
+ return formatDolceDateYYYYMMDD(date);
+ },
},
- },
- {
- accessorKey: "CreateDt",
- header: "생성일시",
- minSize: 200,
- cell: ({ row }) => {
- return <div className="text-sm text-muted-foreground">{row.getValue("CreateDt")}</div>;
+ {
+ accessorKey: "WorDwg_ResultDate",
+ header: t("drawingList.columns.worDwgResultDate"),
+ minSize: 140,
+ cell: ({ row }) => {
+ const date = row.getValue("WorDwg_ResultDate") as string;
+ return formatDolceDateYYYYMMDD(date);
+ },
},
- },
-];
+ {
+ accessorKey: "CreateDt",
+ header: t("drawingList.columns.createDt"),
+ minSize: 260,
+ cell: ({ row }) => {
+ const date = row.getValue("CreateDt") as string;
+ return <div className="text-sm text-muted-foreground">{formatDolceDateTime(date)}</div>;
+ },
+ },
+ ];
+}
diff --git a/lib/dolce/table/file-list-columns.tsx b/lib/dolce/table/file-list-columns.tsx
index f703d56d..36a579a3 100644
--- a/lib/dolce/table/file-list-columns.tsx
+++ b/lib/dolce/table/file-list-columns.tsx
@@ -4,17 +4,20 @@ import { ColumnDef } from "@tanstack/react-table";
import { FileInfoItem } from "../actions";
import { Button } from "@/components/ui/button";
import { Download } from "lucide-react";
+import { formatDolceDateTime } from "../utils/date-formatter";
interface FileListColumnsProps {
onDownload: (file: FileInfoItem) => void;
+ lng?: string;
}
export const createFileListColumns = ({
onDownload,
+ lng = "ko",
}: FileListColumnsProps): ColumnDef<FileInfoItem>[] => [
{
accessorKey: "FileSeq",
- header: "순번",
+ header: lng === "ko" ? "순번" : "No.",
minSize: 80,
cell: ({ row }) => {
return <div className="text-center">{row.getValue("FileSeq")}</div>;
@@ -22,7 +25,7 @@ export const createFileListColumns = ({
},
{
accessorKey: "FileName",
- header: "파일명",
+ header: lng === "ko" ? "파일명" : "File Name",
minSize: 300,
cell: ({ row }) => {
return <div className="font-medium">{row.getValue("FileName")}</div>;
@@ -30,7 +33,7 @@ export const createFileListColumns = ({
},
{
accessorKey: "FileSize",
- header: "파일크기",
+ header: lng === "ko" ? "파일크기" : "File Size",
minSize: 100,
cell: ({ row }) => {
const size = parseInt(row.getValue("FileSize") as string);
@@ -43,15 +46,16 @@ export const createFileListColumns = ({
},
{
accessorKey: "CreateDt",
- header: "생성일시",
+ header: lng === "ko" ? "생성일시" : "Created Date",
minSize: 200,
cell: ({ row }) => {
- return <div className="text-sm text-muted-foreground">{row.getValue("CreateDt")}</div>;
+ const date = row.getValue("CreateDt") as string;
+ return <div className="text-sm text-muted-foreground">{formatDolceDateTime(date)}</div>;
},
},
{
id: "actions",
- header: "다운로드",
+ header: lng === "ko" ? "다운로드" : "Download",
minSize: 120,
cell: ({ row }) => {
return (
@@ -61,7 +65,7 @@ export const createFileListColumns = ({
onClick={() => onDownload(row.original)}
>
<Download className="h-4 w-4 mr-2" />
- 다운로드
+ {lng === "ko" ? "다운로드" : "Download"}
</Button>
);
},
diff --git a/lib/dolce/table/gtt-drawing-list-columns.tsx b/lib/dolce/table/gtt-drawing-list-columns.tsx
index 2ff2d7e2..093fc10c 100644
--- a/lib/dolce/table/gtt-drawing-list-columns.tsx
+++ b/lib/dolce/table/gtt-drawing-list-columns.tsx
@@ -2,27 +2,27 @@
import { ColumnDef } from "@tanstack/react-table";
import { GttDwgReceiptItem } from "../actions";
-
-// 날짜 포맷 헬퍼
-function formatDate(dateStr: string | null): string | null {
- if (!dateStr || dateStr.length !== 8) return null;
- return `${dateStr.substring(0, 4)}-${dateStr.substring(4, 6)}-${dateStr.substring(6, 8)}`;
-}
+import { translateDrawingMoveGbn } from "../utils/code-translator";
+import { formatDolceDateYYYYMMDD, formatDolceDateTime } from "../utils/date-formatter";
// Document Type 필터
export type DocumentType = "ALL" | "GTT_DELIVERABLES" | "SHI_INPUT";
interface GttDrawingListColumnsOptions {
documentType: DocumentType;
+ lng: string;
+ t: any;
}
export function createGttDrawingListColumns({
documentType,
+ lng,
+ t,
}: GttDrawingListColumnsOptions): ColumnDef<GttDwgReceiptItem>[] {
const baseColumns: ColumnDef<GttDwgReceiptItem>[] = [
{
accessorKey: "DrawingNo",
- header: "도면번호",
+ header: t("drawingList.columns.drawingNo"),
minSize: 200,
cell: ({ row }) => {
return <div className="font-medium">{row.getValue("DrawingNo")}</div>;
@@ -30,7 +30,7 @@ export function createGttDrawingListColumns({
},
{
accessorKey: "DrawingName",
- header: "도면명",
+ header: t("drawingList.columns.drawingName"),
minSize: 400,
cell: ({ row }) => {
return <div>{row.getValue("DrawingName")}</div>;
@@ -38,12 +38,12 @@ export function createGttDrawingListColumns({
},
{
accessorKey: "Discipline",
- header: "설계공종",
+ header: t("drawingList.columns.discipline"),
minSize: 80,
},
{
accessorKey: "Manager",
- header: "담당자명",
+ header: t("drawingList.columns.manager"),
minSize: 200,
cell: ({ row }) => {
const managerENM = row.original.ManagerENM;
@@ -53,8 +53,12 @@ export function createGttDrawingListColumns({
},
{
accessorKey: "DrawingMoveGbn",
- header: "구분",
+ header: t("drawingList.columns.category"),
minSize: 120,
+ cell: ({ row }) => {
+ const value = row.getValue("DrawingMoveGbn") as string;
+ return <div>{translateDrawingMoveGbn(value, lng)}</div>;
+ },
},
];
@@ -66,39 +70,39 @@ export function createGttDrawingListColumns({
dateColumns.push(
{
accessorKey: "GTTInput_PlanDate",
- header: "GTT Input 예정일",
+ header: t("drawingList.columns.gttInputPlanDate"),
minSize: 150,
- cell: ({ row }) => formatDate(row.getValue("GTTInput_PlanDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTInput_PlanDate")),
},
{
accessorKey: "GTTInput_ResultDate",
- header: "GTT Input 결과일",
+ header: t("drawingList.columns.gttInputResultDate"),
minSize: 150,
- cell: ({ row }) => formatDate(row.getValue("GTTInput_ResultDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTInput_ResultDate")),
},
{
accessorKey: "GTTPreDwg_PlanDate",
- header: "GTT Pre 예정일",
+ header: t("drawingList.columns.gttPreDwgPlanDate"),
minSize: 140,
- cell: ({ row }) => formatDate(row.getValue("GTTPreDwg_PlanDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTPreDwg_PlanDate")),
},
{
accessorKey: "GTTPreDwg_ResultDate",
- header: "GTT Pre 결과일",
+ header: t("drawingList.columns.gttPreDwgResultDate"),
minSize: 140,
- cell: ({ row }) => formatDate(row.getValue("GTTPreDwg_ResultDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTPreDwg_ResultDate")),
},
{
accessorKey: "GTTWorkingDwg_PlanDate",
- header: "GTT Working 예정일",
+ header: t("drawingList.columns.gttWorkingDwgPlanDate"),
minSize: 160,
- cell: ({ row }) => formatDate(row.getValue("GTTWorkingDwg_PlanDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTWorkingDwg_PlanDate")),
},
{
accessorKey: "GTTWorkingDwg_ResultDate",
- header: "GTT Working 결과일",
+ header: t("drawingList.columns.gttWorkingDwgResultDate"),
minSize: 160,
- cell: ({ row }) => formatDate(row.getValue("GTTWorkingDwg_ResultDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTWorkingDwg_ResultDate")),
}
);
}
@@ -107,15 +111,15 @@ export function createGttDrawingListColumns({
dateColumns.push(
{
accessorKey: "GTTInput_PlanDate",
- header: "Input 예정일",
+ header: t("drawingList.columns.inputPlanDate"),
minSize: 120,
- cell: ({ row }) => formatDate(row.getValue("GTTInput_PlanDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTInput_PlanDate")),
},
{
accessorKey: "GTTInput_ResultDate",
- header: "Input 결과일",
+ header: t("drawingList.columns.inputResultDate"),
minSize: 120,
- cell: ({ row }) => formatDate(row.getValue("GTTInput_ResultDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTInput_ResultDate")),
}
);
}
@@ -124,27 +128,27 @@ export function createGttDrawingListColumns({
dateColumns.push(
{
accessorKey: "GTTPreDwg_PlanDate",
- header: "Pre 예정일",
+ header: t("drawingList.columns.prePlanDate"),
minSize: 120,
- cell: ({ row }) => formatDate(row.getValue("GTTPreDwg_PlanDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTPreDwg_PlanDate")),
},
{
accessorKey: "GTTPreDwg_ResultDate",
- header: "Pre 결과일",
+ header: t("drawingList.columns.preResultDate"),
minSize: 120,
- cell: ({ row }) => formatDate(row.getValue("GTTPreDwg_ResultDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTPreDwg_ResultDate")),
},
{
accessorKey: "GTTWorkingDwg_PlanDate",
- header: "Working 예정일",
+ header: t("drawingList.columns.workingPlanDate"),
minSize: 130,
- cell: ({ row }) => formatDate(row.getValue("GTTWorkingDwg_PlanDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTWorkingDwg_PlanDate")),
},
{
accessorKey: "GTTWorkingDwg_ResultDate",
- header: "Working 결과일",
+ header: t("drawingList.columns.workingResultDate"),
minSize: 130,
- cell: ({ row }) => formatDate(row.getValue("GTTWorkingDwg_ResultDate")),
+ cell: ({ row }) => formatDolceDateYYYYMMDD(row.getValue("GTTWorkingDwg_ResultDate")),
}
);
}
@@ -153,10 +157,11 @@ export function createGttDrawingListColumns({
const endColumns: ColumnDef<GttDwgReceiptItem>[] = [
{
accessorKey: "CreateDt",
- header: "생성일시",
+ header: t("drawingList.columns.createDt"),
minSize: 200,
cell: ({ row }) => {
- return <div className="text-sm text-muted-foreground">{row.getValue("CreateDt")}</div>;
+ const date = row.getValue("CreateDt") as string;
+ return <div className="text-sm text-muted-foreground">{formatDolceDateTime(date)}</div>;
},
},
];