From 8547034e6d82e4d1184f35af2dbff67180d89dc8 Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Wed, 26 Nov 2025 18:09:18 +0900 Subject: (김준회) dolce: 동기화 기능 추가, 로컬 다운로드, 삭제 추가, 동기화 dialog 개선 등 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/dolce/actions.ts | 9 ++-- lib/dolce/table/detail-drawing-columns.tsx | 81 +++++++--------------------- lib/dolce/table/drawing-list-table-v2.tsx | 2 +- lib/dolce/table/file-list-columns.tsx | 45 ++++++++++++---- lib/dolce/table/gtt-drawing-list-columns.tsx | 23 ++++++-- 5 files changed, 79 insertions(+), 81 deletions(-) (limited to 'lib/dolce') 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(endpoint: string, body: Record): Promise { +export async function dolceApiCall(endpoint: string, body: Record): Promise { 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 = { - 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 = { - 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
{row.getValue("RegisterSerialNo")}
; + const val = row.getValue("RegisterSerialNo") as number; + const status = row.getValue("Status") as string; + if (val === 0 || status === "EVCP Saved") { + return
-
; + } + return
{val}
; }, }, { @@ -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
{lng === "en" ? (categoryENM || categoryNM) : (categoryNM || categoryENM)}
; + // 항상 CategoryENM 필드를 보여줌 + return
{row.getValue("CategoryENM")}
; }, }, // 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
{translated}
; + // 항상 RegisterKindENM 필드를 보여줌 + return
{row.getValue("RegisterKindENM")}
; }, }, { @@ -193,12 +146,18 @@ export function createDetailDrawingColumns( const isEditable = status === "Submitted"; return ( -
+
e.stopPropagation()} + > +
+ + {isLocal && onDelete && ( + + )} +
); }, }, 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
{translateDrawingMoveGbn(value, lng)}
; + return
{row.getValue("CategoryENM")}
; + }, + }, + { + accessorKey: "DrawingUsageENM", + header: t("detailDrawing.columns.drawingUsage"), + minSize: 120, + cell: ({ row }) => { + return
{row.getValue("DrawingUsageENM")}
; + }, + }, + { + accessorKey: "RegisterKindENM", + header: t("detailDrawing.columns.registerKind"), + minSize: 180, + cell: ({ row }) => { + return
{row.getValue("RegisterKindENM")}
; }, }, ]; @@ -168,4 +182,3 @@ export function createGttDrawingListColumns({ return [...baseColumns, ...dateColumns, ...endColumns]; } - -- cgit v1.2.3