From 6d66f8deee406aa37020de1189180271730d0603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B6=8C=ED=98=81=EC=84=B1?= Date: Sat, 21 Feb 2026 01:07:02 +0900 Subject: [PATCH] =?UTF-8?q?fix(WEB):=20=EC=9E=91=EC=97=85=EC=A7=80?= =?UTF-8?q?=EC=8B=9C=20=EA=B0=9C=EC=86=8C=20=EA=B7=A0=EB=93=B1=20=EB=B6=84?= =?UTF-8?q?=EB=B0=B0=20+=20=EC=9E=91=EC=97=85=EC=9D=BC=EC=A7=80/=EC=9E=91?= =?UTF-8?q?=EC=97=85=EC=9E=90=20=ED=99=94=EB=A9=B4=20=EA=B8=80=EC=9E=90=20?= =?UTF-8?q?=ED=81=AC=EA=B8=B0=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WorkOrderDetail 동일 그룹 시 인덱스 기반 균등 분배 로직 추가 - ScreenWorkLogContent LOT/품명 text-[10px] 제거 - WorkOrderListPanel 품목명 text-xs → text-sm --- .../production/WorkOrders/WorkOrderDetail.tsx | 35 +++++++++++++++---- .../documents/ScreenWorkLogContent.tsx | 4 +-- .../WorkerScreen/WorkOrderListPanel.tsx | 2 +- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/components/production/WorkOrders/WorkOrderDetail.tsx b/src/components/production/WorkOrders/WorkOrderDetail.tsx index b381992d..f1968bf1 100644 --- a/src/components/production/WorkOrders/WorkOrderDetail.tsx +++ b/src/components/production/WorkOrders/WorkOrderDetail.tsx @@ -513,13 +513,36 @@ export function WorkOrderDetail({ orderId }: WorkOrderDetailProps) { {(() => { // 개소(층/부호)별로 그룹화 const nodeGroups = new Map(); - for (const item of order.items) { - const key = item.floorCode !== '-' ? item.floorCode : (item.orderNodeId != null ? String(item.orderNodeId) : 'none'); - const label = item.floorCode !== '-' ? item.floorCode : item.orderNodeName; - if (!nodeGroups.has(key)) { - nodeGroups.set(key, { label, items: [] }); + + // 모든 아이템이 동일 그룹으로 들어가는지 확인 + const uniqueKeys = new Set(order.items.map(item => + item.floorCode !== '-' ? item.floorCode : String(item.orderNodeId ?? 'none') + )); + const allSameGroup = uniqueKeys.size <= 1; + const locationCount = order.shutterCount || 1; + + if (allSameGroup && locationCount > 1) { + // 인덱스 기반 균등 분배 + const itemsPerLoc = Math.ceil(order.items.length / locationCount); + for (let loc = 0; loc < locationCount; loc++) { + const start = loc * itemsPerLoc; + const end = Math.min(start + itemsPerLoc, order.items.length); + if (start >= order.items.length) break; + const key = `loc-${loc}`; + nodeGroups.set(key, { + label: `개소 ${loc + 1}`, + items: order.items.slice(start, end), + }); + } + } else { + for (const item of order.items) { + const key = item.floorCode !== '-' ? item.floorCode : (item.orderNodeId != null ? String(item.orderNodeId) : 'none'); + const label = item.floorCode !== '-' ? item.floorCode : item.orderNodeName; + if (!nodeGroups.has(key)) { + nodeGroups.set(key, { label, items: [] }); + } + nodeGroups.get(key)!.items.push(item); } - nodeGroups.get(key)!.items.push(item); } const rows: React.ReactNode[] = []; diff --git a/src/components/production/WorkOrders/documents/ScreenWorkLogContent.tsx b/src/components/production/WorkOrders/documents/ScreenWorkLogContent.tsx index e7064a17..5f282fb3 100644 --- a/src/components/production/WorkOrders/documents/ScreenWorkLogContent.tsx +++ b/src/components/production/WorkOrders/documents/ScreenWorkLogContent.tsx @@ -271,8 +271,8 @@ export function ScreenWorkLogContent({ data: order, materialLots = [] }: ScreenW return ( {idx + 1} - {lotNoDisplay} - {item.productName} + {lotNoDisplay} + {item.productName} {getSymbolCode(item.floorCode)} {fmt(item.width)} {fmt(item.height)} diff --git a/src/components/production/WorkerScreen/WorkOrderListPanel.tsx b/src/components/production/WorkerScreen/WorkOrderListPanel.tsx index 8ce2b26b..e9f0a881 100644 --- a/src/components/production/WorkerScreen/WorkOrderListPanel.tsx +++ b/src/components/production/WorkerScreen/WorkOrderListPanel.tsx @@ -75,7 +75,7 @@ export function WorkOrderListPanel({ {/* 품목명 */} -

{order.productName}

+

{order.productName}

{/* 현장명 + 수량 */}