// Tela: Pipeline de Vendas — kanban de leads + modal Novo Lead + drawer detalhe const { useState: usePipeState } = React; function TempPill({ temp, big }) { const map = { frio: { cls: "pill-blue", label: "FRIO" }, morno: { cls: "pill-yellow", label: "MORNO" }, quente: { cls: "pill-pink", label: "QUENTE" }, }; const m = map[temp] || map.morno; return ( {m.label} ); } function LeadCard({ lead, onOpen, onWhatsApp, onDragStart, onDragEnd, isDragging }) { const statusIcon = lead.status?.toLowerCase().includes('aguard') ? ICN.mic : ICN.phone; const hasAi = lead.status?.toLowerCase() === 'em conversa'; const isGanho = lead.etapa === 'fechado' && lead.status === 'Ganho'; const BoltIcon = () => ( ); return (
onOpen(lead)} > {hasAi && !isGanho && (
IA
)} {isGanho && (
🏆 Ganho
)}
{lead.nome.split(' ').slice(0,2).join(' ')}
{lead.empresa}
R$ {lead.valor.toLocaleString('pt-BR')},00
{statusIcon} {lead.status}
{ e.stopPropagation(); onWhatsApp && onWhatsApp(lead); }}>{ICN.whatsapp}
); } function PrioridadeCard({ lead, rank, onOpen }) { return (
onOpen(lead)}>
#{rank} {lead.pontos} PTS
{lead.nome.split(' ').slice(0,2).join(' ')}
{lead.whatsapp}
); } function NovoLeadModal({ onClose, onCreate }) { const [temp, setTemp] = usePipeState('morno'); const [iaVoz, setIaVoz] = usePipeState(false); const [nome, setNome] = usePipeState(''); const [wapp, setWapp] = usePipeState(''); const [origem, setOrigem] = usePipeState('Site'); const [nicho, setNicho] = usePipeState(''); const [instrucoes, setInstrucoes] = usePipeState(''); const [valor, setValor] = usePipeState(''); const valid = nome.trim().length > 0; const submit = () => { if (!valid) return; onCreate({ nome: nome.trim(), empresa: nicho.trim() || null, whatsapp: wapp || null, origem, nicho: nicho || null, valor: parseInt(valor.replace(/\D/g, '')) || 0, temp, etapa: 'novo-lead', status: iaVoz ? 'Em conversa' : 'Aguardando', pontos: temp === 'quente' ? 82 : temp === 'morno' ? 54 : 32, }); }; return (
e.stopPropagation()}>
Novo Lead Comercial
Preencha os dados da negociação
{ICN.x}
setNome(e.target.value)} /> setWapp(e.target.value)} /> setNicho(e.target.value)} />