Compare commits

..

No commits in common. "97256f8db0d50a3be6e435e4061c749b7bafab08" and "430723df59567a383d9062999d02d9126c1a5b49" have entirely different histories.

3 changed files with 14 additions and 62 deletions

View File

@ -2688,41 +2688,19 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
const value = row[mappedColumnName]; const value = row[mappedColumnName];
// 카테고리 매핑된 값 처리 // 카테고리 매핑된 값 처리
if (value !== null && value !== undefined) { if (categoryMappings[col.columnName] && value !== null && value !== undefined) {
const valueStr = String(value); const mapping = categoryMappings[col.columnName][String(value)];
// 디버그 로그 (카테고리 값인 경우만)
if (valueStr.startsWith("CATEGORY_")) {
console.log("🔍 [엑셀다운로드] 카테고리 변환 시도:", {
columnName: col.columnName,
value: valueStr,
hasMappings: !!categoryMappings[col.columnName],
mappingsKeys: categoryMappings[col.columnName] ? Object.keys(categoryMappings[col.columnName]).slice(0, 5) : [],
});
}
if (categoryMappings[col.columnName]) {
// 쉼표로 구분된 중복 값 처리
if (valueStr.includes(",")) {
const values = valueStr.split(",").map((v) => v.trim()).filter((v) => v);
const labels = values.map((v) => {
const mapping = categoryMappings[col.columnName][v];
return mapping ? mapping.label : v;
});
return labels.join(", ");
}
// 단일 값 처리
const mapping = categoryMappings[col.columnName][valueStr];
if (mapping) { if (mapping) {
return mapping.label; return mapping.label;
} }
} }
return value; // null/undefined 처리
if (value === null || value === undefined) {
return "";
} }
// null/undefined 처리 return value;
return "";
}); });
}); });

View File

@ -4801,24 +4801,7 @@ export class ButtonActionExecutor {
const filteredRow: Record<string, any> = {}; const filteredRow: Record<string, any> = {};
visibleColumns!.forEach((columnName: string) => { visibleColumns!.forEach((columnName: string) => {
const label = columnLabels?.[columnName] || columnName; const label = columnLabels?.[columnName] || columnName;
let value = row[columnName]; filteredRow[label] = row[columnName];
// 카테고리 코드를 라벨로 변환 (CATEGORY_로 시작하는 값)
if (value && typeof value === "string" && value.includes("CATEGORY_")) {
// 먼저 _label 필드 확인 (API에서 제공하는 경우)
const labelFieldName = `${columnName}_label`;
if (row[labelFieldName]) {
value = row[labelFieldName];
} else {
// _value_label 필드 확인
const valueLabelFieldName = `${columnName}_value_label`;
if (row[valueLabelFieldName]) {
value = row[valueLabelFieldName];
}
}
}
filteredRow[label] = value;
}); });
return filteredRow; return filteredRow;
}); });
@ -5091,16 +5074,9 @@ export class ButtonActionExecutor {
value = row[`${columnName}_name`]; value = row[`${columnName}_name`];
} }
// 카테고리 타입 필드는 라벨로 변환 (백엔드에서 정의된 컬럼만) // 카테고리 타입 필드는 라벨로 변환 (백엔드에서 정의된 컬럼만)
else if (categoryMap[columnName] && typeof value === "string") { else if (categoryMap[columnName] && typeof value === "string" && categoryMap[columnName][value]) {
// 쉼표로 구분된 다중 값 처리
if (value.includes(",")) {
const values = value.split(",").map((v) => v.trim()).filter((v) => v);
const labels = values.map((v) => categoryMap[columnName][v] || v);
value = labels.join(", ");
} else if (categoryMap[columnName][value]) {
value = categoryMap[columnName][value]; value = categoryMap[columnName][value];
} }
}
filteredRow[label] = value; filteredRow[label] = value;
} }

View File

@ -116,10 +116,8 @@ export async function importFromExcel(
return; return;
} }
// JSON으로 변환 (빈 셀도 포함하여 모든 컬럼 키 유지) // JSON으로 변환
const jsonData = XLSX.utils.sheet_to_json(worksheet, { const jsonData = XLSX.utils.sheet_to_json(worksheet);
defval: "", // 빈 셀에 빈 문자열 할당
});
console.log("✅ 엑셀 가져오기 완료:", { console.log("✅ 엑셀 가져오기 완료:", {
sheetName: targetSheetName, sheetName: targetSheetName,