// === Product detail viewer ===
function ProductDetail({ productId, products, setProducts, onClose }) {
const product = products.find(p => p.id === productId);
if (!product) return null;
const cat = window.MOCK.CATEGORIES.find(c => c.id === product.category);
const [tab, setTab] = useState("overview");
const margin = ((product.price - product.costPrice) / product.price * 100).toFixed(1);
const update = (patch) => setProducts(prev => prev.map(p => p.id === product.id ? { ...p, ...patch } : p));
return (
{product.sku}
{product.name}
} footer={
<>
스마트스토어에서 보기
>
}>
{/* Left: gallery */}
{[0, 1, 2, 3].map(i => (
))}
현재 판매가
{formatKRW(product.price)}
원가 {formatKRW(product.costPrice)}
·
마진율 {margin}%
평점
{product.rating}
({formatNum(product.reviews)})
조회수 (30일)
{formatNum(product.views30d)}
{/* Right: details */}
{cat?.icon} {cat?.name}
{product.brand}
{[
["overview", "기본정보"],
["pricing", "가격/재고"],
["desc", "상세설명"],
["sales", "판매통계"],
].map(([k, l]) => (
))}
{tab === "overview" && (
)}
{tab === "pricing" && (
)}
{tab === "desc" && (
)}
{tab === "sales" && (
30일 판매량
{product.sales30d}건
30일 매출
{formatKRW(product.price * product.sales30d)}
전환율
{(product.sales30d / product.views30d * 100).toFixed(1)}%
Math.round(product.sales30d / 30 * (0.7 + Math.random() * 0.6)))} height={80} />
)}
);
}
function Field({ label, children }) {
return (
);
}
window.ProductDetail = ProductDetail;