// Caririaçu Guincho — Tela de detalhe do guincho (7 abas) const { useState: useStateGD, useEffect: useEffectGD, useMemo: useMemoGD } = React; const TABS_GUINCHO = [ { key: 'geral', label: 'Geral' }, { key: 'abastecimento', label: 'Abast.' }, { key: 'despesa', label: 'Despesa' }, { key: 'receita', label: 'Receita' }, { key: 'servico', label: 'Serviço' }, { key: 'checklist', label: 'Checklist' }, { key: 'lembrete', label: 'Lembrete' }, ]; const GuinchoDetalheScreen = ({ guinchoId, onBack }) => { const [guincho, setGuincho] = useStateGD(null); const [tab, setTab] = useStateGD('geral'); const [periodo, setPeriodo] = useStateGD(() => { const f = new Date(); const i = new Date(); i.setDate(i.getDate() - 180); return { inicio: i.toISOString().slice(0, 10), fim: f.toISOString().slice(0, 10) }; }); const [lembretesCount, setLembretesCount] = useStateGD(0); const [lembretesRefresh, setLembretesRefresh] = useStateGD(0); useEffectGD(() => { if (!guinchoId) return; db.one('frota', guinchoId).then(setGuincho); }, [guinchoId]); // contagem de lembretes amarelo+vermelho deste guincho useEffectGD(() => { if (!guincho) return; let alive = true; (async () => { const ls = await db.list('lembretes', { eq: { guincho_id: guincho.id, status: 'ativo' } }); let n = 0; for (const l of ls) { const st = window.statusLembrete(l, guincho.km_atual); if (st.estado !== 'ativo') n++; } if (alive) setLembretesCount(n); })(); return () => { alive = false; }; }, [guincho, lembretesRefresh]); if (!guincho) return
Carregando…
; return (
{/* Header */}
{guincho.marca} {guincho.modelo} · {guincho.placa}
{guincho.code} · Motorista: {guincho.motorista_nome || '—'}
setTab('lembrete')} size="lg" />
📍 {fmtKM(guincho.km_atual)} ● {guincho.status}
{/* Tabs */}
{TABS_GUINCHO.map(t => (
setTab(t.key)} style={{ padding: '14px 16px', whiteSpace: 'nowrap', cursor: 'pointer', color: tab === t.key ? '#F59E0B' : '#64748B', borderBottom: tab === t.key ? '2px solid #F59E0B' : '2px solid transparent' }}>{t.label}
))}
{/* Filtro de período */} {/* Conteúdo da tab */}
{tab === 'geral' && } {tab === 'abastecimento' && } {tab === 'despesa' && } {tab === 'receita' && } {tab === 'servico' && } {tab === 'checklist' && } {tab === 'lembrete' && setLembretesRefresh(t => t + 1)} />}
); }; Object.assign(window, { GuinchoDetalheScreen, TABS_GUINCHO });