diff options
Diffstat (limited to 'lib/dolce/table')
| -rw-r--r-- | lib/dolce/table/detail-drawing-columns.tsx | 119 | ||||
| -rw-r--r-- | lib/dolce/table/drawing-list-columns.tsx | 146 | ||||
| -rw-r--r-- | lib/dolce/table/file-list-columns.tsx | 18 | ||||
| -rw-r--r-- | lib/dolce/table/gtt-drawing-list-columns.tsx | 79 |
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>; }, }, ]; |
