Fornecedores

import { useState, useEffect } from “react”;

const STATUS_OPTIONS = [“Não Contactado”,”E-mail Enviado”,”Aguardando Retorno”,”Em Negociação”,”Reunião Agendada”,”Proposta Enviada”,”Interesse Confirmado”,”Recusado”,”Sem Resposta”];
const FASE_OPTIONS = [“—”,”Prospecção”,”1º Contato”,”Apresentação”,”Due Diligence”,”Negociação”,”Proposta Final”,”Fechado”,”Arquivado”];
const CANAL_OPTIONS = [“”,”E-mail”,”Telefone”,”WhatsApp”,”LinkedIn”,”Presencial”,”Formulário Web”,”Carta”];
const RESULTADO_OPTIONS = [“—”,”Positivo”,”Neutro”,”Negativo”,”Aguardando”];

const EMPRESAS_INIT = [
{id:1,nome:”TPY”,site:”www.tpy.com.br”,tel:””,email:””,manaus:”Não”},
{id:2,nome:”Positivo Tecnologia”,site:”www.positivotecnologia.com.br”,tel:”(41) 3239-7300 / 0800-644-7500″,email:”ri@positivotecnologia.com.br”,manaus:”Não”},
{id:3,nome:”Foxconn Brasil”,site:”www.foxconn.com.br”,tel:”(11) 3308-2000″,email:”nfe-entrada@foxconn.com”,manaus:”Não”},
{id:4,nome:”Daikin Brasil”,site:”www.daikin.com.br”,tel:”(11) 3123-2525 / (92) 3212-7707″,email:””,manaus:”Sim”},
{id:5,nome:”Samsung Brasil”,site:”www.samsung.com/br”,tel:”(11) 4004-0000 / 0800-555-0000″,email:”b2bservices@samsung.com”,manaus:”Não”},
{id:6,nome:”LG Brasil”,site:”www.lg.com/br”,tel:”4004-5400 / 0800-707-5454″,email:””,manaus:”Não”},
{id:7,nome:”Denso Brasil”,site:”www.denso.com/br/pt”,tel:”(19) 3026-1801 / (41) 2141-4471″,email:””,manaus:”Não”},
{id:8,nome:”Flex”,site:”www.flex.com”,tel:””,email:””,manaus:”Não”},
{id:9,nome:”Elgin”,site:”www.elgin.com.br”,tel:”(11) 3946-1000″,email:””,manaus:”Não”},
{id:10,nome:”Salcomp”,site:”www.salcomp.com”,tel:””,email:””,manaus:”Sim”},
{id:11,nome:”Compal”,site:”www.compal.com”,tel:””,email:””,manaus:”Não”},
{id:12,nome:”Boreo”,site:”www.boreo.com.br”,tel:””,email:””,manaus:”Não”},
{id:13,nome:”Caloi”,site:”www.caloi.com”,tel:”0800-701-8022 / (11) 5853-2744″,email:”sac@caloi.com”,manaus:”Não”},
{id:14,nome:”Technicolor”,site:”www.technicolor.com”,tel:””,email:””,manaus:”Sim”},
{id:15,nome:”Semp TCL”,site:”www.tclsemp.com.br”,tel:”0800-7367-825″,email:””,manaus:”Não”},
{id:16,nome:”OX Bike”,site:”www.oxbike.com.br”,tel:””,email:””,manaus:”Não”},
{id:17,nome:”Kaon”,site:”www.kaon.com”,tel:””,email:””,manaus:”Não”},
{id:18,nome:”Inventus Power”,site:”www.inventuspower.com”,tel:””,email:””,manaus:”Não”},
{id:19,nome:”Logo não identificado (nº19)”,site:”—”,tel:””,email:””,manaus:”?”},
{id:20,nome:”Avell”,site:”www.avell.com.br”,tel:”(47) 3801-6000″,email:”suporte@avell.com.br”,manaus:”Não”},
{id:21,nome:”Humax”,site:”www.humaxdigital.com/br”,tel:””,email:””,manaus:”Não”},
{id:22,nome:”Nansen”,site:”www.nansen.com.br”,tel:””,email:””,manaus:”Não”},
{id:23,nome:”DAY Brasil”,site:”www.day.com.br”,tel:””,email:””,manaus:”Não”},
{id:24,nome:”Philco”,site:”www.philco.com.br”,tel:”(11) 4858-1141 / (47) 3431-0499″,email:””,manaus:”Não”},
{id:25,nome:”Britânia”,site:”www.britaniaeletro.com.br”,tel:”0800-942-0800″,email:””,manaus:”Não”},
{id:26,nome:”Gertec”,site:”www.gertec.com.br”,tel:”(11) 2575-1000″,email:”sat@gertec.com.br”,manaus:”Não”},
{id:27,nome:”Wasion”,site:”www.wasion.com”,tel:””,email:””,manaus:”Não”},
{id:28,nome:”Unicoba”,site:”www.unicoba.com.br”,tel:””,email:””,manaus:”Sim”},
{id:29,nome:”Reflect Systems”,site:”www.reflectsystems.com”,tel:””,email:””,manaus:”Não”},
{id:30,nome:”Sense”,site:”—”,tel:””,email:””,manaus:”?”},
{id:31,nome:”Label Press”,site:”www.labelpress.com.br”,tel:””,email:””,manaus:”Não”},
{id:32,nome:”Challenger”,site:”www.challenger.ind.br”,tel:””,email:””,manaus:”Sim”},
{id:33,nome:”ADATA”,site:”www.adata.com/br”,tel:””,email:””,manaus:”Não”},
{id:34,nome:”Armor Brasil”,site:”www.armorbrasil.com.br”,tel:””,email:””,manaus:”Não”},
{id:35,nome:”Coel”,site:”www.coel.com.br”,tel:”(11) 4152-9700″,email:”coel@coel.com.br”,manaus:”Não”},
{id:36,nome:”CIS”,site:”www.cis.com.br”,tel:””,email:””,manaus:”Não”},
{id:37,nome:”Amazon Tape”,site:”www.amazontape.com.br”,tel:””,email:””,manaus:”Sim”},
{id:38,nome:”Copag”,site:”www.copag.com.br”,tel:”(11) 3030-3030″,email:””,manaus:”Não”},
{id:39,nome:”Diebold Nixdorf”,site:”www.dieboldnixdorf.com.br”,tel:”(11) 2128-2301 / 0800-726-2301″,email:”central_atendimento@dieboldnixdorf.com”,manaus:”Não”},
{id:40,nome:”Tecplam”,site:”www.tecplam.com.br”,tel:”(92) 2101-9000″,email:”cbeck@tecplam.com.br”,manaus:”Sim”},
{id:41,nome:”Arris (CommScope)”,site:”pt.commscope.com”,tel:””,email:””,manaus:”Sim”},
{id:42,nome:”GKB”,site:”www.gkb.com.br”,tel:””,email:””,manaus:”Não”},
{id:43,nome:”Hana Electronics”,site:”www.hanaelectronics.com.br”,tel:”(51) 3081-xxxx”,email:””,manaus:”Sim”},
{id:44,nome:”HDL”,site:”www.hdl.com.br”,tel:””,email:””,manaus:”Não”},
{id:45,nome:”Jabil”,site:”www.jabil.com/br”,tel:””,email:””,manaus:”Não”},
{id:46,nome:”Meco”,site:”www.meco.com.br”,tel:””,email:””,manaus:”Sim”},
{id:47,nome:”Pósitron”,site:”www.positron.com.br”,tel:”4020-3340 / 0800-770-3778″,email:””,manaus:”Não”},
{id:48,nome:”SK (SK Hynix)”,site:”www.skhynix.com”,tel:””,email:””,manaus:”Não”},
{id:49,nome:”Trópico”,site:”www.tropico.com.br”,tel:””,email:””,manaus:”Não”},
{id:50,nome:”Venttos”,site:”www.venttos.com.br”,tel:””,email:””,manaus:”Sim”},
{id:51,nome:”Capda”,site:”—”,tel:””,email:””,manaus:”?”},
{id:52,nome:”Suframa”,site:”www.suframa.gov.br”,tel:”0800-722-2500″,email:””,manaus:”Sim”},
{id:53,nome:”MDIC (Ministério)”,site:”www.gov.br/mdic”,tel:””,email:””,manaus:”Não”},
];

const buildRows = (empresas) => empresas.map(e => ({
…e,
responsavel: “”, data1: “”, canal: “”, status: “Não Contactado”,
dataRetorno: “”, fase: “—”, resultado: “—”, obs: “”
}));

const STATUS_COLOR = {
“Não Contactado”: “#e5e7eb”,
“E-mail Enviado”: “#dbeafe”,
“Aguardando Retorno”: “#fef3c7”,
“Em Negociação”: “#d1fae5”,
“Reunião Agendada”: “#ede9fe”,
“Proposta Enviada”: “#cffafe”,
“Interesse Confirmado”: “#bbf7d0”,
“Recusado”: “#fee2e2”,
“Sem Resposta”: “#f3f4f6”,
};

const STORAGE_KEY = “prospecao_investidores_v1”;

export default function App() {
const [rows, setRows] = useState(() => {
try {
const saved = localStorage.getItem(STORAGE_KEY);
return saved ? JSON.parse(saved) : buildRows(EMPRESAS_INIT);
} catch { return buildRows(EMPRESAS_INIT); }
});
const [filter, setFilter] = useState(“Todos”);
const [search, setSearch] = useState(“”);
const [editCell, setEditCell] = useState(null); // {rowId, field}

useEffect(() => {
try { localStorage.setItem(STORAGE_KEY, JSON.stringify(rows)); } catch {}
}, [rows]);

const update = (id, field, value) => {
setRows(r => r.map(row => row.id === id ? { …row, [field]: value } : row));
};

const filtered = rows.filter(r => {
const matchFilter = filter === “Todos” || r.status === filter || (filter === “Manaus” && r.manaus === “Sim”);
const matchSearch = !search || r.nome.toLowerCase().includes(search.toLowerCase());
return matchFilter && matchSearch;
});

const counts = {
total: rows.length,
contactados: rows.filter(r => r.status !== “Não Contactado”).length,
interesse: rows.filter(r => r.status === “Interesse Confirmado”).length,
manaus: rows.filter(r => r.manaus === “Sim”).length,
};

const Cell = ({ id, field, type = “text”, options, width }) => {
const row = rows.find(r => r.id === id);
const val = row[field];
const isEditing = editCell?.rowId === id && editCell?.field === field;

if (type === “select”) {
return (

);
}

if (isEditing) {
return (

update(id, field, e.target.value)}
onBlur={() => setEditCell(null)}
onKeyDown={e => e.key === “Enter” && setEditCell(null)}
style={{ width: “100%”, fontSize: 11, border: “1px solid #3b82f6”,
borderRadius: 3, padding: “2px 4px”, boxSizing: “border-box” }}
/>

);
}

return (

setEditCell({ rowId: id, field })}
title=”Clique para editar”
style={{ padding: “2px 6px”, minWidth: width || 80, cursor: “text”,
fontSize: 11, whiteSpace: field === “obs” ? “normal” : “nowrap”,
maxWidth: field === “obs” ? 180 : undefined,
color: val ? “#111” : “#aaa” }}>
{val || (field === “data1” || field === “dataRetorno” ? “dd/mm/aaaa” : “—”)}

);
};

const thStyle = {
background: “#1e3a5f”, color: “#fff”, fontSize: 10, fontWeight: 700,
padding: “5px 6px”, textAlign: “center”, whiteSpace: “nowrap”,
position: “sticky”, top: 0, zIndex: 2, border: “1px solid #2d4f7c”
};

return (

{/* Título */}

📊 PARCEIROS INVESTIDORES — CONTROLE DE PROSPECÇÃO
Pesquisador Independente · Clique em qualquer célula branca para editar · Dados salvos automaticamente

{/* Cards resumo */}

{[
{ label: “Total de Empresas”, val: counts.total, color: “#1e3a5f” },
{ label: “Já Contactadas”, val: counts.contactados, color: “#047857” },
{ label: “Interesse Confirmado”, val: counts.interesse, color: “#7c3aed” },
{ label: “Presença em Manaus”, val: counts.manaus, color: “#b45309” },
].map(c => (

{c.val}
{c.label}

))}

{/* Filtros */}

setSearch(e.target.value)}
style={{ padding: “5px 10px”, borderRadius: 6, border: “1px solid #d1d5db”,
fontSize: 12, width: 200 }}
/>
{[“Todos”, “Manaus”, …STATUS_OPTIONS].map(f => (

))}

{/* Tabela */}

{[“#”,”EMPRESA”,”SITE”,”TELEFONE”,”E-MAIL”,”MANAUS?”,”RESPONSÁVEL”,”DATA 1º CONT.”,”CANAL”,”STATUS”,”DT. RETORNO”,”FASE”,”RESULTADO”,”OBSERVAÇÕES”]
.map(h =>

)}

{filtered.map((row, i) => (







))}

{h}
{row.id} {row.nome} {row.site} {row.tel || } {row.email || } {row.manaus}
Exibindo {filtered.length} de {rows.length} empresas · Dados salvos automaticamente no navegador

);
}

Rolar para cima