diff options
Diffstat (limited to 'lib/dolce')
| -rw-r--r-- | lib/dolce/actions.ts | 9 | ||||
| -rw-r--r-- | lib/dolce/table/detail-drawing-columns.tsx | 81 | ||||
| -rw-r--r-- | lib/dolce/table/drawing-list-table-v2.tsx | 2 | ||||
| -rw-r--r-- | lib/dolce/table/file-list-columns.tsx | 45 | ||||
| -rw-r--r-- | lib/dolce/table/gtt-drawing-list-columns.tsx | 23 |
5 files changed, 79 insertions, 81 deletions
diff --git a/lib/dolce/actions.ts b/lib/dolce/actions.ts index cd276fac..5590ce8c 100644 --- a/lib/dolce/actions.ts +++ b/lib/dolce/actions.ts @@ -67,6 +67,10 @@ export interface GttDwgReceiptItem { RegisterGroupId: number; SGbn: string | null; SHIDrawingNo: string | null; + // Added ENM fields + CategoryENM?: string; + DrawingUsageENM?: string; + RegisterKindENM?: string; } // 통합 도면 아이템 타입 @@ -158,7 +162,7 @@ export interface DetailDwgEditRequest { // 유틸리티 함수 // ============================================================================ -async function dolceApiCall<T>(endpoint: string, body: Record<string, unknown>): Promise<T> { +export async function dolceApiCall<T>(endpoint: string, body: Record<string, unknown>): Promise<T> { const url = `${DOLCE_API_URL}/Services/VDCSWebService.svc/${endpoint}`; console.log(`[DOLCE API] Calling ${endpoint}:`, JSON.stringify(body, null, 2)); @@ -746,7 +750,7 @@ export async function saveB4MappingBatch( * 형식: [버림] [문서번호토큰1] [문서번호토큰2] ... [리비전번호].[확장자] * 예시: "testfile GTT DE 007 R01.pdf" → DrawingNo: "GTT-DE-007", RevNo: "R01" */ -async function parseB4FileName(fileName: string): Promise<{ +export async function parseB4FileName(fileName: string): Promise<{ valid: boolean; drawingNo?: string; revNo?: string; @@ -1497,4 +1501,3 @@ export async function bulkUploadB4Files( }; } } - diff --git a/lib/dolce/table/detail-drawing-columns.tsx b/lib/dolce/table/detail-drawing-columns.tsx index 747173af..30290817 100644 --- a/lib/dolce/table/detail-drawing-columns.tsx +++ b/lib/dolce/table/detail-drawing-columns.tsx @@ -13,54 +13,6 @@ import { import { Button } from "@/components/ui/button"; import { Edit } from "lucide-react"; -// DOLCE API ENM 필드가 제대로 번역되지 않아 직접 매핑 -const DRAWING_USAGE_MAP: Record<string, { ko: string; en: string }> = { - APP: { ko: "승인용", en: "Approval" }, - WOR: { ko: "작업용", en: "Working" }, - // 참조용은 eVCP에서 사용하지 않으나 추가해둠 - REF: { ko: "참조용", en: "Reference" }, - REC: { ko: "입수용", en: "GTT→SHI" }, - SUB: { ko: "제출용", en: "SHI→GTT" }, - CMT: { ko: "코멘트", en: "Comment" }, -}; - -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)" }, - GSUB: { ko: "SHI 입력 문서 (SHI→GTT)", en: "SHI Input Document(SHI→GTT)" }, - CMTQ: { ko: "Comment-TQ", en: "Comment-TQ" }, - CMTM: { ko: "MARK-UP", en: "MARK-UP" }, - // FMEA는 미사용 코드 - "FMEA-R1": { ko: "FMEA 1st Receipt", en: "FMEA 1st Receipt" }, - "FMEA-R2": { ko: "FMEA 2nd Receipt", en: "FMEA 2nd Receipt" }, - "FMEA-1": { ko: "FMEA 1st Submission", en: "FMEA 1st Submission" }, - "FMEA-2": { ko: "FMEA 2nd Submission", en: "FMEA 2nd Submission" }, - // 참조용 도면도 미사용 코드, 번역 받아야 적용 가능 - PREF: { ko: "본선용 참조도면", en: "본선용 참조도면" }, - RREF: { ko: "실적선 참조도면", en: "실적선 참조도면" }, - "PREP-P": { ko: "본선용 참조도면(Partial)", en: "본선용 참조도면(Partial)" }, - "RREP-P": { ko: "실적선 참조도면(Partial)", en: "실적선 참조도면(Partial)" }, -}; - -// 카테고리는 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; -}; - // Comment Dialog Component function CommentDialog({ comment }: { comment: string }) { const [open, setOpen] = useState(false); @@ -99,9 +51,14 @@ export function createDetailDrawingColumns( { accessorKey: "RegisterSerialNo", header: t("detailDrawing.columns.serialNo"), - minSize: 80, + minSize: 120, cell: ({ row }) => { - return <div className="text-center">{row.getValue("RegisterSerialNo")}</div>; + const val = row.getValue("RegisterSerialNo") as number; + const status = row.getValue("Status") as string; + if (val === 0 || status === "EVCP Saved") { + return <div className="text-center">-</div>; + } + return <div className="text-center">{val}</div>; }, }, { @@ -125,10 +82,8 @@ export function createDetailDrawingColumns( 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>; + // 항상 CategoryENM 필드를 보여줌 + return <div>{row.getValue("CategoryENM")}</div>; }, }, // RegisterKind 로 DrawingUsage를 알 수 있으므로 주석 처리 @@ -144,14 +99,12 @@ export function createDetailDrawingColumns( // }, // }, { - accessorKey: "RegisterKind", + accessorKey: "RegisterKindENM", header: t("detailDrawing.columns.registerKind"), minSize: 180, cell: ({ row }) => { - // API 응답의 RegisterKind는 코드값이므로 직접 매핑하여 번역 - const kindCode = row.getValue("RegisterKind") as string; - const translated = translateRegisterKind(kindCode, lng); - return <div>{translated}</div>; + // 항상 RegisterKindENM 필드를 보여줌 + return <div>{row.getValue("RegisterKindENM")}</div>; }, }, { @@ -193,12 +146,18 @@ export function createDetailDrawingColumns( const isEditable = status === "Submitted"; return ( - <div className="flex items-center justify-center"> + <div + className="flex items-center justify-center" + onClick={(e) => e.stopPropagation()} + > <Button variant="ghost" size="sm" disabled={!isEditable || !onEdit} - onClick={() => onEdit && onEdit(row.original)} + onClick={(e) => { + e.stopPropagation(); + if (onEdit) onEdit(row.original); + }} title={!isEditable ? t("editDetailDialog.statusSubmittedOnly") : t("editDetailDialog.editButton")} > <Edit className="h-4 w-4" /> diff --git a/lib/dolce/table/drawing-list-table-v2.tsx b/lib/dolce/table/drawing-list-table-v2.tsx index 2ee80f11..420ed672 100644 --- a/lib/dolce/table/drawing-list-table-v2.tsx +++ b/lib/dolce/table/drawing-list-table-v2.tsx @@ -30,7 +30,7 @@ import { ArrowUpDown, ArrowUp, ArrowDown, ChevronLeft, ChevronRight } from "luci // 도면 데이터의 기본 인터페이스 interface DrawingData { - RegisterGroupId?: string | null; + RegisterGroupId?: string | number | null; DrawingNo?: string | null; Discipline?: string | null; CreateDt?: string | Date | null; diff --git a/lib/dolce/table/file-list-columns.tsx b/lib/dolce/table/file-list-columns.tsx index 36a579a3..38b1f1c9 100644 --- a/lib/dolce/table/file-list-columns.tsx +++ b/lib/dolce/table/file-list-columns.tsx @@ -3,16 +3,18 @@ import { ColumnDef } from "@tanstack/react-table"; import { FileInfoItem } from "../actions"; import { Button } from "@/components/ui/button"; -import { Download } from "lucide-react"; +import { Download, Trash2 } from "lucide-react"; import { formatDolceDateTime } from "../utils/date-formatter"; interface FileListColumnsProps { onDownload: (file: FileInfoItem) => void; + onDelete?: (file: FileInfoItem) => void; lng?: string; } export const createFileListColumns = ({ onDownload, + onDelete, lng = "ko", }: FileListColumnsProps): ColumnDef<FileInfoItem>[] => [ { @@ -20,6 +22,9 @@ export const createFileListColumns = ({ header: lng === "ko" ? "순번" : "No.", minSize: 80, cell: ({ row }) => { + if (row.original.FileServerId === "LOCAL") { + return <div className="text-center">-</div>; + } return <div className="text-center">{row.getValue("FileSeq")}</div>; }, }, @@ -55,18 +60,36 @@ export const createFileListColumns = ({ }, { id: "actions", - header: lng === "ko" ? "다운로드" : "Download", - minSize: 120, + header: "Action", + minSize: 160, cell: ({ row }) => { + const isLocal = row.original.FileServerId === "LOCAL"; return ( - <Button - variant="outline" - size="sm" - onClick={() => onDownload(row.original)} - > - <Download className="h-4 w-4 mr-2" /> - {lng === "ko" ? "다운로드" : "Download"} - </Button> + <div className="flex gap-2 items-center justify-center"> + <Button + variant="outline" + size="sm" + onClick={(e) => { + e.stopPropagation(); + onDownload(row.original); + }} + > + <Download className="h-4 w-4 mr-2" /> + {lng === "ko" ? "다운로드" : "Download"} + </Button> + {isLocal && onDelete && ( + <Button + variant="destructive" + size="sm" + onClick={(e) => { + e.stopPropagation(); + onDelete(row.original); + }} + > + <Trash2 className="h-4 w-4" /> + </Button> + )} + </div> ); }, }, diff --git a/lib/dolce/table/gtt-drawing-list-columns.tsx b/lib/dolce/table/gtt-drawing-list-columns.tsx index 093fc10c..da29c910 100644 --- a/lib/dolce/table/gtt-drawing-list-columns.tsx +++ b/lib/dolce/table/gtt-drawing-list-columns.tsx @@ -2,7 +2,6 @@ import { ColumnDef } from "@tanstack/react-table"; import { GttDwgReceiptItem } from "../actions"; -import { translateDrawingMoveGbn } from "../utils/code-translator"; import { formatDolceDateYYYYMMDD, formatDolceDateTime } from "../utils/date-formatter"; // Document Type 필터 @@ -52,12 +51,27 @@ export function createGttDrawingListColumns({ }, }, { - accessorKey: "DrawingMoveGbn", + accessorKey: "CategoryENM", header: t("drawingList.columns.category"), minSize: 120, cell: ({ row }) => { - const value = row.getValue("DrawingMoveGbn") as string; - return <div>{translateDrawingMoveGbn(value, lng)}</div>; + return <div>{row.getValue("CategoryENM")}</div>; + }, + }, + { + accessorKey: "DrawingUsageENM", + header: t("detailDrawing.columns.drawingUsage"), + minSize: 120, + cell: ({ row }) => { + return <div>{row.getValue("DrawingUsageENM")}</div>; + }, + }, + { + accessorKey: "RegisterKindENM", + header: t("detailDrawing.columns.registerKind"), + minSize: 180, + cell: ({ row }) => { + return <div>{row.getValue("RegisterKindENM")}</div>; }, }, ]; @@ -168,4 +182,3 @@ export function createGttDrawingListColumns({ return [...baseColumns, ...dateColumns, ...endColumns]; } - |
