From 96b9ac78dbae2d8b86df4c307801dcab91e08434 Mon Sep 17 00:00:00 2001 From: kjs Date: Sun, 12 Apr 2026 21:31:36 +0900 Subject: [PATCH] feat: Enhance user mapping in BOM and inventory pages - Updated API calls in the InventoryStatusPage and BomManagementPage to fetch user data with a limit of 9999 users, improving performance and ensuring all users are loaded. - Implemented user mapping to display user names instead of IDs, enhancing clarity in user-related data across multiple company implementations. - These changes aim to improve the overall user experience by providing clearer information and better data management in the logistics and BOM sections. --- .../(main)/COMPANY_10/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_10/production/bom/page.tsx | 14 +++++++++++++- .../(main)/COMPANY_16/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_16/production/bom/page.tsx | 14 +++++++++++++- .../(main)/COMPANY_29/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_29/production/bom/page.tsx | 14 +++++++++++++- .../(main)/COMPANY_30/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_30/production/bom/page.tsx | 14 +++++++++++++- .../(main)/COMPANY_7/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_7/production/bom/page.tsx | 14 +++++++++++++- .../(main)/COMPANY_8/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_8/production/bom/page.tsx | 14 +++++++++++++- .../(main)/COMPANY_9/logistics/inventory/page.tsx | 4 ++-- .../app/(main)/COMPANY_9/production/bom/page.tsx | 14 +++++++++++++- 14 files changed, 105 insertions(+), 21 deletions(-) diff --git a/frontend/app/(main)/COMPANY_10/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_10/logistics/inventory/page.tsx index 1e9a52db..515ad922 100644 --- a/frontend/app/(main)/COMPANY_10/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_10/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_10/production/bom/page.tsx b/frontend/app/(main)/COMPANY_10/production/bom/page.tsx index 65e83cf2..ee095229 100644 --- a/frontend/app/(main)/COMPANY_10/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_10/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -433,6 +435,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1802,7 +1814,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")} diff --git a/frontend/app/(main)/COMPANY_16/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_16/logistics/inventory/page.tsx index eb8bc811..c357cc9f 100644 --- a/frontend/app/(main)/COMPANY_16/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_16/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_16/production/bom/page.tsx b/frontend/app/(main)/COMPANY_16/production/bom/page.tsx index 3d6ad489..ace141dd 100644 --- a/frontend/app/(main)/COMPANY_16/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_16/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -434,6 +436,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1804,7 +1816,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")} diff --git a/frontend/app/(main)/COMPANY_29/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_29/logistics/inventory/page.tsx index bd2dd8b5..5479a779 100644 --- a/frontend/app/(main)/COMPANY_29/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_29/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_29/production/bom/page.tsx b/frontend/app/(main)/COMPANY_29/production/bom/page.tsx index 65e83cf2..ee095229 100644 --- a/frontend/app/(main)/COMPANY_29/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_29/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -433,6 +435,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1802,7 +1814,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")} diff --git a/frontend/app/(main)/COMPANY_30/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_30/logistics/inventory/page.tsx index 64cd7213..83e304fd 100644 --- a/frontend/app/(main)/COMPANY_30/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_30/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_30/production/bom/page.tsx b/frontend/app/(main)/COMPANY_30/production/bom/page.tsx index 65e83cf2..ee095229 100644 --- a/frontend/app/(main)/COMPANY_30/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_30/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -433,6 +435,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1802,7 +1814,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")} diff --git a/frontend/app/(main)/COMPANY_7/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_7/logistics/inventory/page.tsx index 8c99e060..dc5158c6 100644 --- a/frontend/app/(main)/COMPANY_7/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_7/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_7/production/bom/page.tsx b/frontend/app/(main)/COMPANY_7/production/bom/page.tsx index 6ef74cde..f361f442 100644 --- a/frontend/app/(main)/COMPANY_7/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_7/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -434,6 +436,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1764,7 +1776,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")} diff --git a/frontend/app/(main)/COMPANY_8/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_8/logistics/inventory/page.tsx index fa7eba06..7a0ddb57 100644 --- a/frontend/app/(main)/COMPANY_8/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_8/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_8/production/bom/page.tsx b/frontend/app/(main)/COMPANY_8/production/bom/page.tsx index 17365025..051065e5 100644 --- a/frontend/app/(main)/COMPANY_8/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_8/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -433,6 +435,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1801,7 +1813,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")} diff --git a/frontend/app/(main)/COMPANY_9/logistics/inventory/page.tsx b/frontend/app/(main)/COMPANY_9/logistics/inventory/page.tsx index 5c993072..53bec490 100644 --- a/frontend/app/(main)/COMPANY_9/logistics/inventory/page.tsx +++ b/frontend/app/(main)/COMPANY_9/logistics/inventory/page.tsx @@ -171,11 +171,11 @@ export default function InventoryStatusPage() { }; load(); // 사용자 목록 로드 - apiClient.get("/admin/users").then((res) => { + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { const users = res.data?.data || res.data || []; const map: Record = {}; for (const u of users) { - const id = u.user_id || u.id; + const id = u.userId || u.user_id || u.id; const name = u.user_name || u.name || id; if (id) map[id] = name; } diff --git a/frontend/app/(main)/COMPANY_9/production/bom/page.tsx b/frontend/app/(main)/COMPANY_9/production/bom/page.tsx index 65e83cf2..ee095229 100644 --- a/frontend/app/(main)/COMPANY_9/production/bom/page.tsx +++ b/frontend/app/(main)/COMPANY_9/production/bom/page.tsx @@ -309,6 +309,8 @@ export default function BomManagementPage() { // 카테고리 옵션 const [categoryOptions, setCategoryOptions] = useState>({}); + // 사용자 맵 (userId → userName) + const [userMap, setUserMap] = useState>({}); // 트리 편집 state const [editingTree, setEditingTree] = useState([]); @@ -433,6 +435,16 @@ export default function BomManagementPage() { } catch {} }; loadCategories(); + // 사용자 목록 로드 + apiClient.get("/admin/users", { params: { size: 9999 } }).then((res) => { + const users = res.data?.data || res.data || []; + const map: Record = {}; + for (const u of users) { + const id = u.userId || u.user_id || u.id; + if (id) map[id] = u.userName || u.user_name || u.name || id; + } + setUserMap(map); + }).catch(() => {}); }, []); // ─── BOM 상세 로드 ──────────────────────────── @@ -1802,7 +1814,7 @@ export default function BomManagementPage() { {/* 비고 */} {isVirtualRoot ? "-" : (node.remark || "-")} {/* 작성자 */} - {isVirtualRoot ? "-" : (node.writer || "-")} + {isVirtualRoot ? "-" : (userMap[node.writer] || node.writer || "-")} {/* 수정일시 */} {isVirtualRoot ? "-" : (node.updated_date ? new Date(node.updated_date).toLocaleString("ko-KR", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", second: "2-digit" }) : "-")}