From 73b8a6f46d9c99217b2118438196705bb4ca49e8 Mon Sep 17 00:00:00 2001 From: kjs Date: Wed, 4 Feb 2026 10:56:56 +0900 Subject: [PATCH] Merge branch 'feature/v2-renewal' of http://39.117.244.52:3000/kjs/ERP-node into feature/v2-unified-renewal --- .../components/screen/widgets/TabsWidget.tsx | 27 +++++++++++++++++++ .../SplitPanelLayoutComponent.tsx | 21 +++++++++++---- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/frontend/components/screen/widgets/TabsWidget.tsx b/frontend/components/screen/widgets/TabsWidget.tsx index baf047ec..8b48c461 100644 --- a/frontend/components/screen/widgets/TabsWidget.tsx +++ b/frontend/components/screen/widgets/TabsWidget.tsx @@ -66,6 +66,33 @@ export function TabsWidget({ const [visibleTabs, setVisibleTabs] = useState(tabs as ExtendedTabItem[]); const [mountedTabs, setMountedTabs] = useState>(() => new Set([getInitialTab()])); + // ๐Ÿ†• ํ™”๋ฉด ์ง„์ž… ์‹œ ์ฒซ ๋ฒˆ์งธ ํƒญ ์ž๋™ ์„ ํƒ ๋ฐ ๋งˆ์šดํŠธ + useEffect(() => { + // ํ˜„์žฌ ์„ ํƒ๋œ ํƒญ์ด ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๋น„์–ด์žˆ์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ํƒญ ์„ ํƒ + const validTabs = (tabs as ExtendedTabItem[]).filter((tab) => !tab.disabled); + const firstValidTabId = validTabs[0]?.id; + + if (firstValidTabId) { + // ์„ ํƒ๋œ ํƒญ์ด ์—†๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์ฒซ ๋ฒˆ์งธ ํƒญ์œผ๋กœ ์„ค์ • + setSelectedTab((currentSelected) => { + if (!currentSelected || !validTabs.some((t) => t.id === currentSelected)) { + return firstValidTabId; + } + return currentSelected; + }); + + // ์ฒซ ๋ฒˆ์งธ ํƒญ์ด mountedTabs์— ์—†์œผ๋ฉด ์ถ”๊ฐ€ + setMountedTabs((prev) => { + const newSet = new Set(prev); + // ์ฒซ ๋ฒˆ์งธ ํƒญ ์ถ”๊ฐ€ + if (firstValidTabId && !newSet.has(firstValidTabId)) { + newSet.add(firstValidTabId); + } + return newSet; + }); + } + }, [tabs]); // tabs๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ + // screenId ๊ธฐ๋ฐ˜ ํ™”๋ฉด ๋กœ๋“œ ์ƒํƒœ const [screenLayouts, setScreenLayouts] = useState>({}); const [screenLoadingStates, setScreenLoadingStates] = useState>({}); diff --git a/frontend/lib/registry/components/v2-split-panel-layout/SplitPanelLayoutComponent.tsx b/frontend/lib/registry/components/v2-split-panel-layout/SplitPanelLayoutComponent.tsx index ae77e105..3d9cd552 100644 --- a/frontend/lib/registry/components/v2-split-panel-layout/SplitPanelLayoutComponent.tsx +++ b/frontend/lib/registry/components/v2-split-panel-layout/SplitPanelLayoutComponent.tsx @@ -1676,7 +1676,7 @@ export const SplitPanelLayoutComponent: React.FC // ์ปค์Šคํ…€ ๋ชจ๋‹ฌ ํ™”๋ฉด ์—ด๊ธฐ const rightTableName = componentConfig.rightPanel?.tableName || ""; - // Primary Key ์ฐพ๊ธฐ (์šฐ์„ ์ˆœ์œ„: id > ID > ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ) + // Primary Key ์ฐพ๊ธฐ (์šฐ์„ ์ˆœ์œ„: id > ID > user_id > {table}_id > ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ) let primaryKeyName = "id"; let primaryKeyValue: any; @@ -1686,11 +1686,22 @@ export const SplitPanelLayoutComponent: React.FC } else if (item.ID !== undefined && item.ID !== null) { primaryKeyName = "ID"; primaryKeyValue = item.ID; + } else if (item.user_id !== undefined && item.user_id !== null) { + // user_info ํ…Œ์ด๋ธ” ๋“ฑ user_id๋ฅผ Primary Key๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ + primaryKeyName = "user_id"; + primaryKeyValue = item.user_id; } else { - // ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ๋ฅผ Primary Key๋กœ ๊ฐ„์ฃผ - const firstKey = Object.keys(item)[0]; - primaryKeyName = firstKey; - primaryKeyValue = item[firstKey]; + // ํ…Œ์ด๋ธ”๋ช…_id ํŒจํ„ด ํ™•์ธ (์˜ˆ: dept_id, item_id ๋“ฑ) + const tableIdKey = rightTableName ? `${rightTableName.replace(/_info$/, "")}_id` : ""; + if (tableIdKey && item[tableIdKey] !== undefined && item[tableIdKey] !== null) { + primaryKeyName = tableIdKey; + primaryKeyValue = item[tableIdKey]; + } else { + // ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ํ•„๋“œ๋ฅผ Primary Key๋กœ ๊ฐ„์ฃผ + const firstKey = Object.keys(item)[0]; + primaryKeyName = firstKey; + primaryKeyValue = item[firstKey]; + } } console.log("โœ… ์ˆ˜์ • ๋ชจ๋‹ฌ ์—ด๊ธฐ:", {