- viewMode 기본값 'by-wh' → 'by-item' 으로 변경 (사용자 선호). - 품목 가로 모드 본문 첫 행: '전체 합계' (emerald 강조) · 발주수량 합 = Σ 모든 창고의 STOCK · 여유분 합 = Σ 모든 창고의 AVAILABLE (음수면 rose) - 이후 본사 창고 → 김포 시장 7줄 그대로 노출.
This commit is contained in:
@@ -32,7 +32,7 @@ export default function WhStockStatusPage() {
|
||||
const [items, setItems] = useState<ItemRow[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
// 보기 모드: by-wh = 헤더가 창고(가로로 김) / by-item = 헤더가 품목(오른쪽으로 길게)
|
||||
const [viewMode, setViewMode] = useState<"by-wh" | "by-item">("by-wh");
|
||||
const [viewMode, setViewMode] = useState<"by-wh" | "by-item">("by-item");
|
||||
|
||||
const load = useCallback(async () => {
|
||||
setLoading(true);
|
||||
@@ -183,7 +183,37 @@ export default function WhStockStatusPage() {
|
||||
<tr><td colSpan={2 + items.length} className="text-center py-12 text-slate-400">
|
||||
{loading ? "조회 중..." : "데이터가 없습니다."}
|
||||
</td></tr>
|
||||
) : warehouses.flatMap((w) => [
|
||||
) : [
|
||||
/* 전체 합계 — 모든 창고의 발주수량/여유분 합 (상단 강조 행) */
|
||||
<tr key="__total-stock" className="bg-emerald-50/70 border-y-2 border-emerald-300 font-bold">
|
||||
<td className="px-3 py-2 align-top sticky left-0 bg-emerald-50/70" rowSpan={2}>
|
||||
<div className="text-emerald-800">전체 합계</div>
|
||||
<div className="text-[10px] text-emerald-600 font-normal">모든 창고</div>
|
||||
</td>
|
||||
<td className="px-3 py-1.5 text-center text-[11px] text-slate-700 bg-slate-100 sticky left-[120px]">발주수량</td>
|
||||
{items.map((it) => {
|
||||
const v = warehouses.reduce((acc, w) => acc + Number(it.STOCK[w.WH_CODE] ?? 0), 0);
|
||||
return (
|
||||
<td key={it.ITEM_OBJID} className={`px-3 py-1.5 text-right ${v === 0 ? "text-slate-300" : "text-slate-900"}`}>
|
||||
{v === 0 ? "-" : fmt(v)}
|
||||
</td>
|
||||
);
|
||||
})}
|
||||
</tr>,
|
||||
<tr key="__total-avail" className="bg-emerald-50/70 border-b-2 border-emerald-300 font-bold">
|
||||
<td className="px-3 py-1.5 text-center text-[11px] text-emerald-700 bg-emerald-100/60 sticky left-[120px]">여유분</td>
|
||||
{items.map((it) => {
|
||||
const v = warehouses.reduce((acc, w) => acc + Number(it.AVAILABLE[w.WH_CODE] ?? 0), 0);
|
||||
const negative = v < 0;
|
||||
return (
|
||||
<td key={it.ITEM_OBJID} className={`px-3 py-1.5 text-right ${negative ? "text-rose-600" : v === 0 ? "text-slate-300" : "text-emerald-700"}`}>
|
||||
{v === 0 ? "-" : fmt(v)}
|
||||
</td>
|
||||
);
|
||||
})}
|
||||
</tr>,
|
||||
/* 창고별 7줄 */
|
||||
...warehouses.flatMap((w) => [
|
||||
<tr key={`${w.WH_CODE}-stock`} className="border-t border-slate-100 hover:bg-slate-50/60">
|
||||
<td className="px-3 py-2 align-top font-semibold sticky left-0 bg-white" rowSpan={2}>
|
||||
{w.WH_NAME}
|
||||
@@ -211,7 +241,8 @@ export default function WhStockStatusPage() {
|
||||
);
|
||||
})}
|
||||
</tr>,
|
||||
])}
|
||||
]),
|
||||
]}
|
||||
</tbody>
|
||||
</table>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user