summaryrefslogtreecommitdiff
path: root/lib/dolce
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dolce')
-rw-r--r--lib/dolce/actions.ts9
-rw-r--r--lib/dolce/table/detail-drawing-columns.tsx81
-rw-r--r--lib/dolce/table/drawing-list-table-v2.tsx2
-rw-r--r--lib/dolce/table/file-list-columns.tsx45
-rw-r--r--lib/dolce/table/gtt-drawing-list-columns.tsx23
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];
}
-