diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-17 10:50:52 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-07-17 10:50:52 +0000 |
| commit | 2ef02e27dbe639876fa3b90c30307dda183545ec (patch) | |
| tree | e132ae7f3dd774e1ce767291c2849be4a63ae762 /lib/items-tech/table/ship | |
| parent | fb276ed3db86fe4fc0c0fcd870fd3d085b034be0 (diff) | |
(최겸) 기술영업 변경사항 적용
Diffstat (limited to 'lib/items-tech/table/ship')
4 files changed, 30 insertions, 16 deletions
diff --git a/lib/items-tech/table/ship/Items-ship-table.tsx b/lib/items-tech/table/ship/Items-ship-table.tsx index feab288a..cf41b3cf 100644 --- a/lib/items-tech/table/ship/Items-ship-table.tsx +++ b/lib/items-tech/table/ship/Items-ship-table.tsx @@ -90,6 +90,7 @@ export function ItemsShipTable({ promises }: ItemsTableProps) { { label: "선실", value: "선실" },
{ label: "배관", value: "배관" },
{ label: "철의", value: "철의" },
+ { label: "선체", value: "선체" },
],
},
{
diff --git a/lib/items-tech/table/ship/import-item-handler.tsx b/lib/items-tech/table/ship/import-item-handler.tsx index a47e451b..57546cc6 100644 --- a/lib/items-tech/table/ship/import-item-handler.tsx +++ b/lib/items-tech/table/ship/import-item-handler.tsx @@ -5,8 +5,8 @@ import { createShipbuildingImportItem } from "../../service" // 아이템 생성 // 아이템 데이터 검증을 위한 Zod 스키마 const itemSchema = z.object({ - itemCode: z.string().min(1, "아이템 코드는 필수입니다"), - workType: z.enum(["기장", "전장", "선실", "배관", "철의"], { + itemCode: z.string().optional(), + workType: z.enum(["기장", "전장", "선실", "배관", "철의", "선체"], { required_error: "기능(공종)은 필수입니다", }), shipTypes: z.string().nullable().optional(), @@ -16,7 +16,7 @@ const itemSchema = z.object({ interface ProcessResult { successCount: number; errorCount: number; - errors?: Array<{ row: number; message: string }>; + errors: Array<{ row: number; message: string; itemCode?: string; workType?: string }>; } /** @@ -42,7 +42,7 @@ export async function processFileImport( // 데이터 행이 없으면 빈 결과 반환 if (dataRows.length === 0) { - return { successCount: 0, errorCount: 0 }; + return { successCount: 0, errorCount: 0, errors: [] }; } // 각 행에 대해 처리 @@ -78,7 +78,12 @@ export async function processFileImport( err => `${err.path.join('.')}: ${err.message}` ).join(', '); - errors.push({ row: rowIndex, message: errorMessage }); + errors.push({ + row: rowIndex, + message: errorMessage, + itemCode: cleanedRow.itemCode, + workType: cleanedRow.workType + }); errorCount++; continue; } @@ -86,7 +91,7 @@ export async function processFileImport( // 아이템 생성 const result = await createShipbuildingImportItem({ itemCode: cleanedRow.itemCode, - workType: cleanedRow.workType as "기장" | "전장" | "선실" | "배관" | "철의", + workType: cleanedRow.workType as "기장" | "전장" | "선실" | "배관" | "철의" | "선체", shipTypes: cleanedRow.shipTypes, itemList: cleanedRow.itemList, }); @@ -96,16 +101,25 @@ export async function processFileImport( } else { errors.push({ row: rowIndex, - message: result.message || result.error || "알 수 없는 오류" + message: result.message || result.error || "알 수 없는 오류", + itemCode: cleanedRow.itemCode, + workType: cleanedRow.workType }); errorCount++; } } catch (error) { console.error(`${rowIndex}행 처리 오류:`, error); + + // cleanedRow가 정의되지 않은 경우를 처리 + const itemCode = row["자재 그룹"] || row["itemCode"] || ""; + const workType = row["기능(공종)"] || row["workType"] || ""; + errors.push({ row: rowIndex, - message: error instanceof Error ? error.message : "알 수 없는 오류" + message: error instanceof Error ? error.message : "알 수 없는 오류", + itemCode: typeof itemCode === 'string' ? itemCode.trim() : String(itemCode).trim(), + workType: typeof workType === 'string' ? workType.trim() : String(workType).trim() }); errorCount++; } @@ -120,6 +134,6 @@ export async function processFileImport( return { successCount, errorCount, - errors: errors.length > 0 ? errors : undefined + errors }; }
\ No newline at end of file diff --git a/lib/items-tech/table/ship/items-ship-table-columns.tsx b/lib/items-tech/table/ship/items-ship-table-columns.tsx index 7018ae43..13ba2480 100644 --- a/lib/items-tech/table/ship/items-ship-table-columns.tsx +++ b/lib/items-tech/table/ship/items-ship-table-columns.tsx @@ -165,7 +165,7 @@ export function getShipbuildingColumns({ setRowAction }: GetColumnsProps): Colum header: ({ column }) => (
<DataTableColumnHeaderSimple column={column} title="생성일" />
),
- cell: ({ row }) => formatDate(row.original.createdAt, "KR"),
+ cell: ({ row }) => formatDate(row.original.createdAt),
enableSorting: true,
enableHiding: true,
meta: {
@@ -177,7 +177,7 @@ export function getShipbuildingColumns({ setRowAction }: GetColumnsProps): Colum header: ({ column }) => (
<DataTableColumnHeaderSimple column={column} title="수정일" />
),
- cell: ({ row }) => formatDate(row.original.updatedAt, "KR"),
+ cell: ({ row }) => formatDate(row.original.updatedAt),
enableSorting: true,
enableHiding: true,
meta: {
diff --git a/lib/items-tech/table/ship/items-table-toolbar-actions.tsx b/lib/items-tech/table/ship/items-table-toolbar-actions.tsx index e58ba135..29995327 100644 --- a/lib/items-tech/table/ship/items-table-toolbar-actions.tsx +++ b/lib/items-tech/table/ship/items-table-toolbar-actions.tsx @@ -23,7 +23,7 @@ import { ImportItemButton } from "../import-excel-button" interface ShipbuildingItem { id: number; itemId: number; - workType: "기장" | "전장" | "선실" | "배관" | "철의"; + workType: "기장" | "전장" | "선실" | "배관" | "철의" | "선체"; shipTypes: string; itemCode: string; itemName: string; @@ -70,12 +70,11 @@ export function ItemsTableToolbarActions({ table }: ItemsTableToolbarActionsProp // 필요한 헤더 직접 정의 (필터링 문제 해결) const headers = [ - { key: 'itemCode', header: '아이템 코드' }, - { key: 'itemName', header: '아이템 명' }, - { key: 'description', header: '설명' }, + { key: 'itemCode', header: '자재 그룹' }, { key: 'workType', header: '기능(공종)' }, { key: 'shipTypes', header: '선종' }, - { key: 'itemList', header: '아이템 리스트' } + { key: 'itemList', header: '자재명' }, + { key: 'subItemList', header: '자재명(상세)' }, ].filter(header => !excludeColumns.includes(header.key)); console.log("내보내기 헤더:", headers); |
