From 6ebe551caaeb34e6503b0fd19e0dc041fb2c3953 Mon Sep 17 00:00:00 2001 From: kjs Date: Tue, 11 Nov 2025 15:00:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=8A=A4=EC=BD=94=ED=94=84=20=EC=A0=84=ED=99=98=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 형제 메뉴의 카테고리 컬럼 조회 API 구현 - column_labels 테이블에서 컬럼 라벨 조회 - table_labels 테이블에서 테이블 라벨 조회 - 프론트엔드: 테이블명 대신 테이블 라벨 표시 - 카테고리 값 조회/추가 시 menuObjid 전달 --- .../controllers/tableManagementController.ts | 32 +++++++++++++------ .../table-category/CategoryColumnList.tsx | 4 ++- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/backend-node/src/controllers/tableManagementController.ts b/backend-node/src/controllers/tableManagementController.ts index 90d6131f..3f599fa5 100644 --- a/backend-node/src/controllers/tableManagementController.ts +++ b/backend-node/src/controllers/tableManagementController.ts @@ -1655,20 +1655,32 @@ export async function getCategoryColumnsByMenu( }); } - // 3. 테이블들의 카테고리 타입 컬럼 조회 + // 3. 테이블들의 카테고리 타입 컬럼 조회 (테이블 라벨 포함) logger.info("🔍 카테고리 컬럼 쿼리 준비", { tableNames, companyCode }); const columnsQuery = ` SELECT - table_name AS "tableName", - column_name AS "columnName", - column_label AS "columnLabel", - input_type AS "inputType" - FROM table_type_columns - WHERE table_name = ANY($1) - AND company_code = $2 - AND input_type = 'category' - ORDER BY table_name, column_name + ttc.table_name AS "tableName", + COALESCE( + tl.table_label, + initcap(replace(ttc.table_name, '_', ' ')) + ) AS "tableLabel", + ttc.column_name AS "columnName", + COALESCE( + cl.column_label, + initcap(replace(ttc.column_name, '_', ' ')) + ) AS "columnLabel", + ttc.input_type AS "inputType" + FROM table_type_columns ttc + LEFT JOIN column_labels cl + ON ttc.table_name = cl.table_name + AND ttc.column_name = cl.column_name + LEFT JOIN table_labels tl + ON ttc.table_name = tl.table_name + WHERE ttc.table_name = ANY($1) + AND ttc.company_code = $2 + AND ttc.input_type = 'category' + ORDER BY ttc.table_name, ttc.column_name `; logger.info("🔍 카테고리 컬럼 쿼리 실행 중..."); diff --git a/frontend/components/table-category/CategoryColumnList.tsx b/frontend/components/table-category/CategoryColumnList.tsx index 0e25643e..08a33d90 100644 --- a/frontend/components/table-category/CategoryColumnList.tsx +++ b/frontend/components/table-category/CategoryColumnList.tsx @@ -7,6 +7,7 @@ import { FolderTree, Loader2 } from "lucide-react"; interface CategoryColumn { tableName: string; + tableLabel?: string; // 테이블 라벨 추가 columnName: string; columnLabel: string; inputType: string; @@ -89,6 +90,7 @@ export function CategoryColumnList({ tableName, selectedColumn, onColumnSelect, return { tableName: colTable, + tableLabel: col.tableLabel || colTable, // 테이블 라벨 추가 columnName: colName, columnLabel: colLabel, inputType: col.inputType, @@ -159,7 +161,7 @@ export function CategoryColumnList({ tableName, selectedColumn, onColumnSelect, />

{column.columnLabel || column.columnName}

-

{column.tableName}

+

{column.tableLabel || column.tableName}

{column.valueCount !== undefined ? `${column.valueCount}개` : "..."}