fix(WEB): 작업지시 개소 균등 분배 + 작업일지/작업자 화면 글자 크기 통일

- WorkOrderDetail 동일 그룹 시 인덱스 기반 균등 분배 로직 추가
- ScreenWorkLogContent LOT/품명 text-[10px] 제거
- WorkOrderListPanel 품목명 text-xs → text-sm
This commit is contained in:
2026-02-21 01:07:02 +09:00
parent f35df29264
commit 6d66f8deee
3 changed files with 32 additions and 9 deletions

View File

@@ -513,13 +513,36 @@ export function WorkOrderDetail({ orderId }: WorkOrderDetailProps) {
{(() => {
// 개소(층/부호)별로 그룹화
const nodeGroups = new Map<string, { label: string; items: typeof order.items }>();
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[] = [];

View File

@@ -271,8 +271,8 @@ export function ScreenWorkLogContent({ data: order, materialLots = [] }: ScreenW
return (
<tr key={item.id}>
<td className="border border-gray-400 p-1 text-center">{idx + 1}</td>
<td className="border border-gray-400 p-1 text-center text-[10px]">{lotNoDisplay}</td>
<td className="border border-gray-400 p-1 text-[10px]">{item.productName}</td>
<td className="border border-gray-400 p-1 text-center">{lotNoDisplay}</td>
<td className="border border-gray-400 p-1">{item.productName}</td>
<td className="border border-gray-400 p-1 text-center whitespace-nowrap">{getSymbolCode(item.floorCode)}</td>
<td className="border border-gray-400 p-1 text-center whitespace-nowrap font-bold text-red-600">{fmt(item.width)}</td>
<td className="border border-gray-400 p-1 text-center whitespace-nowrap font-bold text-red-600">{fmt(item.height)}</td>

View File

@@ -75,7 +75,7 @@ export function WorkOrderListPanel({
</div>
{/* 품목명 */}
<p className="text-xs text-gray-600 truncate ml-8">{order.productName}</p>
<p className="text-sm text-gray-600 truncate ml-8">{order.productName}</p>
{/* 현장명 + 수량 */}
<div className="flex items-center justify-between mt-1.5 ml-8">