diff --git a/frontend/app/(main)/COMPANY_10/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_10/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_10/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_10/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/app/(main)/COMPANY_16/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_16/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_16/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_16/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/app/(main)/COMPANY_29/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_29/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_29/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_29/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/app/(main)/COMPANY_30/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_30/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_30/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_30/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/app/(main)/COMPANY_7/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_7/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_7/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_7/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/app/(main)/COMPANY_8/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_8/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_8/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_8/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/app/(main)/COMPANY_9/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_9/production/plan-management/page.tsx
index 50be10ee..38b01658 100644
--- a/frontend/app/(main)/COMPANY_9/production/plan-management/page.tsx
+++ b/frontend/app/(main)/COMPANY_9/production/plan-management/page.tsx
@@ -1052,17 +1052,17 @@ export default function ProductionPlanManagementPage() {
};
return (
-
+
-
+
0} onCheckedChange={(c) => toggleAllItemGroups(!!c)} className="h-4 w-4" />
-
+
품목코드
품목명
{ts.visibleColumns.map((col) => (
-
+
{col.label}
))}
diff --git a/frontend/components/report/designer/renderers/CardRenderer.tsx b/frontend/components/report/designer/renderers/CardRenderer.tsx
index 65b14b3a..23310059 100644
--- a/frontend/components/report/designer/renderers/CardRenderer.tsx
+++ b/frontend/components/report/designer/renderers/CardRenderer.tsx
@@ -43,9 +43,8 @@ function CardListRenderer({ component, getQueryResult }: CardRendererProps) {
const queryResult = getQueryResult(component.queryId);
if (queryResult && queryResult.rows && queryResult.rows.length > 0) {
const row = queryResult.rows[0];
- return row[item.fieldName] !== undefined
- ? String(row[item.fieldName])
- : item.value;
+ const val = row[item.fieldName];
+ return val !== undefined && val !== null ? String(val) : "";
}
}
return item.value;
diff --git a/frontend/components/report/designer/renderers/TableRenderer.tsx b/frontend/components/report/designer/renderers/TableRenderer.tsx
index cf211c0b..7b23ae1e 100644
--- a/frontend/components/report/designer/renderers/TableRenderer.tsx
+++ b/frontend/components/report/designer/renderers/TableRenderer.tsx
@@ -54,9 +54,12 @@ function getGridCellValue(
): string {
if (cell.cellType === "static") return cell.value ?? "";
- if (cell.cellType === "field" && cell.field && row) {
- const raw = String(row[cell.field] ?? "");
- return applyNumberFormat(raw, cell.numberFormat, cell.currencySuffix);
+ if (cell.cellType === "field") {
+ if (cell.field && row) {
+ const raw = String(row[cell.field] ?? "");
+ return applyNumberFormat(raw, cell.numberFormat, cell.currencySuffix);
+ }
+ return ""; // 데이터 없으면 플레이스홀더 숨김
}
return cell.value ?? "";
@@ -277,7 +280,7 @@ function ClassicTableRenderer({ component, getQueryResult }: TableRendererProps)
color: "#d1d5db",
}}
>
- {col.field ? `{${col.field}}` : "—"}
+ {""}
))}