// Módulo PRODUTOS — Catálogo + Cadastro const ProdutosPage = () => { const [view, setView] = React.useState("grid"); // grid | list const [selected, setSelected] = React.useState(null); if (selected) return setSelected(null)}/>; return (
Catálogo · {PRODUTOS.length}+ produtos

Produtos

Cadastro, estoque por tamanho, preços, fotos, etiquetas.

{}} tabs={[ { id: "catalogo", label: "Catálogo", count: 284 }, { id: "categorias", label: "Categorias & marcas" }, { id: "estoque", label: "Estoque" }, { id: "ordens", label: "Ordens de compra", count: 6 }, { id: "import", label: "Importar/Exportar" }, ]}/>
{PRODUTOS.length} produtos
{view === "grid" && (
{PRODUTOS.map(p => (
setSelected(p)}>
{p.foto} {p.estoqueTotal < 10 && {p.estoqueTotal === 0 ? "sem estoque" : "estoque baixo"}}
{p.id} · {p.marca}
{p.nome}
{brl(p.preco)}
{p.estoqueTotal} un
))}
)} {view === "list" && (
{PRODUTOS.map(p => ( setSelected(p)} style={{cursor:'pointer'}}> ))}
ProdutoMarcaCategoriaColeçãoEstoqueCustoPreçoVendas 30d
{p.foto}
{p.nome}
{p.id} · {p.sku}
{p.marca} {p.categoria} {p.colecao} {p.estoqueTotal === 0 ? zerado : p.estoqueTotal < 6 ? {p.estoqueTotal} baixo : {p.estoqueTotal}} {brl(p.custo)} {brl(p.preco)} {p.vendas30d}
)}
); }; const ProdutoDetail = ({ produto, onClose }) => { const [tab, setTab] = React.useState("info"); const markup = ((produto.preco / produto.custo - 1) * 100).toFixed(0); return (
Produto · {produto.id} · {produto.sku}

{produto.foto} {produto.nome} Ativo

{produto.marca} · {produto.categoria} · Coleção {produto.colecao}

Identificação

Grade · tamanhos & estoque

Total: {produto.estoqueTotal} un
{Object.entries(produto.tamanhos).map(([t, q]) => ( ))}
TamanhoEstoque atualEstoque mínimoPreçoPreço liveStatus
{t} {q} 2 {brl(produto.preco)} {brl(produto.precoLive)} {q === 0 ? zerado : q <= 2 ? baixo : OK}

Preços

💡 Margem bruta por unidade: {brl(produto.preco - produto.custo)} · margem live: {brl(produto.precoLive - produto.custo)}

Performance

Foto principal

{produto.foto}
{[1,2,3,4].map(i => (
+
))}

Loja virtual

URL
/p/vestido-luna-midi
Destaque
Avaliações
Tags SEO
vestido, midi, festa
); }; const Field = ({ label, value, mono }) => (
{label}
{value}
); Object.assign(window, { ProdutosPage, ProdutoDetail });