diff --git a/src/components/pecas/PecasTable.tsx b/src/components/pecas/PecasTable.tsx index 79bad23..45e353d 100644 --- a/src/components/pecas/PecasTable.tsx +++ b/src/components/pecas/PecasTable.tsx @@ -182,13 +182,13 @@ export function PecasTable({ variant="outline" size="sm" onClick={onOpenPainelRevisoes} - className="h-8 border-red-500/60 bg-red-950/20 text-red-400 hover:bg-red-900/40 hover:text-red-200 font-bold flex items-center gap-1.5 transition-all shadow-sm" + className="h-8 border-red-500/50 bg-red-500/10 text-red-600 dark:text-red-400 hover:bg-red-500/20 hover:text-red-700 dark:hover:text-red-300 font-bold flex items-center gap-1.5 transition-all shadow-sm" title="Abrir Registro e Gestão de Revisões da OF" > - + REG.REVISOES {totalRevisoesOF !== undefined && totalRevisoesOF > 0 && ( - + {totalRevisoesOF} )} diff --git a/src/components/pecas/revisoes/PainelRevisoesOFModal.tsx b/src/components/pecas/revisoes/PainelRevisoesOFModal.tsx index 06b90e8..06db3ea 100644 --- a/src/components/pecas/revisoes/PainelRevisoesOFModal.tsx +++ b/src/components/pecas/revisoes/PainelRevisoesOFModal.tsx @@ -20,16 +20,10 @@ import { import { FileText, Search, - AlertTriangle, - Info, - Clock, Printer, ExternalLink, Filter, - CheckCircle2, - RefreshCw, - Layers, - ArrowRight + RefreshCw } from 'lucide-react'; import { useRevisoes, Revisao } from '@/hooks/useRevisoes'; import { Peca } from '@/hooks/usePecas'; @@ -105,21 +99,21 @@ export function PainelRevisoesOFModal({ return ( - - + + - + Registro Geral de Revisões da OF - + {ofNumber || 'Geral'} - + Rastreabilidade técnica, histórico de modificações simples e críticas nas peças desta Ordem de Fabricação. @@ -130,9 +124,9 @@ export function PainelRevisoesOFModal({ variant="outline" size="sm" onClick={() => setVisualizandoRelatorio(!visualizandoRelatorio)} - className="border-slate-700 text-slate-200 hover:bg-slate-800 flex items-center gap-1.5 h-8 text-xs" + className="border-border text-foreground hover:bg-muted flex items-center gap-1.5 h-8 text-xs" > - + {visualizandoRelatorio ? 'Voltar para Tabela' : 'Gerar Relatório'} @@ -142,14 +136,14 @@ export function PainelRevisoesOFModal({ {/* MODO RELATÓRIO IMPRESSÃO */} {visualizandoRelatorio ? ( - - + + Pré-visualização do Relatório Técnico para impressão ou exportação. Imprimir / Salvar PDF @@ -157,7 +151,7 @@ export function PainelRevisoesOFModal({ {/* Documento A4 Formato Relatório */} - + {/* Header do Relatório */} @@ -209,7 +203,7 @@ export function PainelRevisoesOFModal({ {r.numero_revisao} - + {r.tipo_revisao === 'critica' ? 'CRÍTICA' : 'SIMPLES'} @@ -249,44 +243,44 @@ export function PainelRevisoesOFModal({ {/* CARDS DE MÉTRICAS */} - - + + Total de Revisões - + {stats.total} - histórico completo + histórico completo - - + + Revisões Críticas - + {stats.criticas} - alteraram marca, qtd, peso + alteraram marca, qtd, peso - - + + Revisões Simples - + {stats.simples} - dados informativos + dados informativos - - + + Peças Afetadas - + {stats.pecasUnicas} - peças distintas + peças distintas @@ -294,23 +288,23 @@ export function PainelRevisoesOFModal({ - + setBusca(e.target.value)} placeholder="Filtrar por peça, fase, motivo ou autor..." - className="pl-8 bg-slate-900 border-slate-800 text-xs h-8" + className="pl-8 bg-background border-input text-xs h-8 text-foreground" /> - + setFiltroTipo('todos')} className={`px-2.5 py-1 rounded text-xs transition-colors ${ - filtroTipo === 'todos' ? 'bg-slate-700 text-white font-bold' : 'text-slate-400 hover:bg-slate-800' + filtroTipo === 'todos' ? 'bg-primary text-primary-foreground font-bold shadow-sm' : 'text-muted-foreground hover:bg-muted' }`} > Todas ({stats.total}) @@ -320,8 +314,8 @@ export function PainelRevisoesOFModal({ onClick={() => setFiltroTipo('critica')} className={`px-2.5 py-1 rounded text-xs transition-colors ${ filtroTipo === 'critica' - ? 'bg-red-600 text-white font-bold' - : 'text-red-400 hover:bg-red-950/40' + ? 'bg-red-600 text-white font-bold shadow-sm' + : 'text-red-600 dark:text-red-400 hover:bg-red-500/10' }`} > Críticas ({stats.criticas}) @@ -331,8 +325,8 @@ export function PainelRevisoesOFModal({ onClick={() => setFiltroTipo('simples')} className={`px-2.5 py-1 rounded text-xs transition-colors ${ filtroTipo === 'simples' - ? 'bg-blue-600 text-white font-bold' - : 'text-blue-400 hover:bg-blue-950/40' + ? 'bg-blue-600 text-white font-bold shadow-sm' + : 'text-blue-600 dark:text-blue-400 hover:bg-blue-500/10' }`} > Simples ({stats.simples}) @@ -343,7 +337,7 @@ export function PainelRevisoesOFModal({ size="sm" onClick={() => carregarRevisoesOF(ofNumber)} disabled={loading} - className="h-8 w-8 p-0 text-slate-400 hover:text-white" + className="h-8 w-8 p-0 text-muted-foreground hover:text-foreground" title="Atualizar lista" > @@ -352,31 +346,31 @@ export function PainelRevisoesOFModal({ {/* TABELA DE REVISÕES */} - + - - - Data - Peça - Fase - Revisão - Tipo - Motivo da Revisão - Campos Alterados - Autor - Ação + + + Data + Peça + Fase + Revisão + Tipo + Motivo da Revisão + Campos Alterados + Autor + Ação {loading ? ( - + Carregando revisões da OF... ) : revisoesFiltradas.length === 0 ? ( - + {revisoes.length === 0 ? 'Nenhuma revisão cadastrada nesta OF.' : 'Nenhuma revisão encontrada para os filtros selecionados.'} @@ -386,23 +380,23 @@ export function PainelRevisoesOFModal({ revisoesFiltradas.map((r) => { const pecaCorrespondente = pecas.find((p) => p.id === r.peca_id); return ( - - + + {r.data_revisao ? format(new Date(r.data_revisao), 'dd/MM/yy HH:mm') : '-'} - + {r.peca?.marca || '-'} - + {r.peca?.etapa_fase || '-'} {r.numero_revisao} @@ -412,18 +406,18 @@ export function PainelRevisoesOFModal({ {r.tipo_revisao === 'critica' ? 'Crítica' : 'Simples'} - + {r.descricao_motivo} {r.observacoes && ( - + {r.observacoes} )} @@ -434,7 +428,7 @@ export function PainelRevisoesOFModal({ {r.campos_alterados?.map((c) => ( {c} @@ -442,7 +436,7 @@ export function PainelRevisoesOFModal({ - + {r.usuario_nome || r.usuario_email || 'Sistema'} @@ -456,12 +450,12 @@ export function PainelRevisoesOFModal({ onOpenRevisaoPeca(pecaCorrespondente); }} title="Abrir CRUD / Histórico da Peça" - className="h-6 w-6 p-0 text-amber-400 hover:text-amber-300 hover:bg-amber-950/40" + className="h-6 w-6 p-0 text-amber-600 dark:text-amber-400 hover:bg-amber-500/10" > ) : ( - - + - )} diff --git a/src/components/pecas/revisoes/RevisaoPecaModal.tsx b/src/components/pecas/revisoes/RevisaoPecaModal.tsx index 6aaf494..d928bee 100644 --- a/src/components/pecas/revisoes/RevisaoPecaModal.tsx +++ b/src/components/pecas/revisoes/RevisaoPecaModal.tsx @@ -15,11 +15,9 @@ import { Badge } from '@/components/ui/badge'; import { AlertTriangle, History, - CheckCircle2, ArrowRight, TrendingUp, TrendingDown, - Layers, Save, Clock, User, @@ -148,8 +146,8 @@ export function RevisaoPecaModal({ return ( - - + + @@ -158,17 +156,17 @@ export function RevisaoPecaModal({ Gestão de Revisões da Peça - + {peca.marca} {historico.length > 0 && ( - + {historico.length} {historico.length === 1 ? 'revisão gravada' : 'revisões gravadas'} )} - - OF: {peca.of_number} • Fase: {peca.etapa_fase || 'N/A'} • Qtd Atual: {peca.quantidade} un • Peso Atual: {peca.peso_total || (peca.quantidade * peca.peso_unitario)} kg + + OF: {peca.of_number} • Fase: {peca.etapa_fase || 'N/A'} • Qtd Atual: {peca.quantidade} un • Peso Atual: {peca.peso_total || (peca.quantidade * peca.peso_unitario)} kg @@ -178,8 +176,8 @@ export function RevisaoPecaModal({ variant={tipoEfetivo === 'critica' ? 'destructive' : 'secondary'} className={`text-xs px-2.5 py-1 font-semibold ${ tipoEfetivo === 'critica' - ? 'bg-red-500/20 text-red-400 border border-red-500/40' - : 'bg-blue-500/20 text-blue-400 border border-blue-500/40' + ? 'bg-red-500/15 text-red-600 dark:text-red-400 border border-red-500/30' + : 'bg-blue-500/15 text-blue-600 dark:text-blue-400 border border-blue-500/30' }`} > {tipoEfetivo === 'critica' ? '⚠️ Revisão Crítica' : 'ℹ️ Revisão Simples'} @@ -189,12 +187,12 @@ export function RevisaoPecaModal({ setActiveTab(v as any)} className="mt-4"> - - + + Nova Revisão (Editar Peça) - + Histórico de Revisões ({historico.length}) @@ -204,21 +202,21 @@ export function RevisaoPecaModal({ {/* Metadados da Revisão */} - + - + Identificação da Revisão - Classificação: + Classificação: setTipoManual('simples')} - className={`px-2 py-0.5 rounded text-xs transition-colors ${ + className={`px-2.5 py-1 rounded text-xs transition-colors ${ tipoEfetivo === 'simples' - ? 'bg-blue-600 text-white font-bold' - : 'bg-slate-800 text-slate-400 hover:bg-slate-700' + ? 'bg-blue-600 text-white font-bold shadow-sm' + : 'bg-muted text-muted-foreground hover:bg-muted/80' }`} > Simples @@ -226,10 +224,10 @@ export function RevisaoPecaModal({ setTipoManual('critica')} - className={`px-2 py-0.5 rounded text-xs transition-colors ${ + className={`px-2.5 py-1 rounded text-xs transition-colors ${ tipoEfetivo === 'critica' - ? 'bg-red-600 text-white font-bold' - : 'bg-slate-800 text-slate-400 hover:bg-slate-700' + ? 'bg-red-600 text-white font-bold shadow-sm' + : 'bg-muted text-muted-foreground hover:bg-muted/80' }`} > Crítica @@ -239,61 +237,61 @@ export function RevisaoPecaModal({ - Número da Revisão * + Número da Revisão * setNumeroRevisao(e.target.value)} placeholder="Ex: Rev 01, Rev 02, Rev A" - className="bg-slate-950 border-slate-700 text-slate-100 font-mono text-sm mt-1" + className="font-mono text-sm mt-1 bg-background border-input text-foreground" required /> - Motivo / Justificativa da Revisão * + Motivo / Justificativa da Revisão * setMotivo(e.target.value)} placeholder="Ex: Ajuste de projeto, alteração de quantidade pelo cliente..." - className="bg-slate-950 border-slate-700 text-slate-100 text-sm mt-1" + className="text-sm mt-1 bg-background border-input text-foreground" required /> - Observações Adicionais (Opcional) + Observações Adicionais (Opcional) setObservacoes(e.target.value)} placeholder="Detalhes adicionais, aprovações de engenharia, notas de fábrica..." rows={2} - className="bg-slate-950 border-slate-700 text-slate-100 text-xs mt-1" + className="text-xs mt-1 bg-background border-input text-foreground" /> {/* Formulário CRUD da Peça */} - - - + + + Campos da Peça para Revisão {/* Marca */} - + Marca / Número da Peça * {formData.marca !== peca.marca && ( - Alterado! + Alterado! )} handleInputChange('marca', e.target.value)} - className={`font-mono text-sm mt-1 bg-slate-950 border-slate-700 ${ - formData.marca !== peca.marca ? 'border-amber-500 bg-amber-950/20 text-amber-200' : '' + className={`font-mono text-sm mt-1 bg-background border-input text-foreground ${ + formData.marca !== peca.marca ? 'border-amber-500 bg-amber-500/10 text-amber-700 dark:text-amber-200' : '' }`} required /> @@ -301,10 +299,10 @@ export function RevisaoPecaModal({ {/* Quantidade */} - + Quantidade * {diffQtd !== 0 && ( - 0 ? 'text-green-400' : 'text-red-400'}`}> + 0 ? 'text-green-600 dark:text-green-400' : 'text-red-600 dark:text-red-400'}`}> {diffQtd > 0 ? `+${diffQtd}` : `${diffQtd}`} un )} @@ -315,11 +313,11 @@ export function RevisaoPecaModal({ step="1" value={formData.quantidade} onChange={(e) => handleInputChange('quantidade', Number(e.target.value))} - className={`font-mono text-sm mt-1 bg-slate-950 border-slate-700 ${ + className={`font-mono text-sm mt-1 bg-background border-input text-foreground ${ diffQtd !== 0 ? diffQtd > 0 - ? 'border-green-500 bg-green-950/20 text-green-200' - : 'border-red-500 bg-red-950/20 text-red-200' + ? 'border-green-500 bg-green-500/10 text-green-700 dark:text-green-200' + : 'border-red-500 bg-red-500/10 text-red-700 dark:text-red-200' : '' }`} required @@ -328,10 +326,10 @@ export function RevisaoPecaModal({ {/* Peso Unitário */} - + Peso Unitário (kg) * {diffPeso !== 0 && ( - Alterado + Alterado )} handleInputChange('peso_unitario', Number(e.target.value))} - className="font-mono text-sm mt-1 bg-slate-950 border-slate-700" + className="font-mono text-sm mt-1 bg-background border-input text-foreground" required /> {/* Peso Total (calculado) */} - Peso Total (kg) + Peso Total (kg) @@ -360,67 +358,67 @@ export function RevisaoPecaModal({ {/* Descrição */} - Descrição da Peça + Descrição da Peça handleInputChange('descricao', e.target.value)} placeholder="Ex: Viga I, Pilar Tubular, Perfil Soldado..." - className="text-sm mt-1 bg-slate-950 border-slate-700" + className="text-sm mt-1 bg-background border-input text-foreground" /> {/* Fase / Etapa */} - Fase / Etapa + Fase / Etapa handleInputChange('etapa_fase', e.target.value)} placeholder="Ex: 1, 2, Cobertura..." - className="text-sm mt-1 bg-slate-950 border-slate-700" + className="text-sm mt-1 bg-background border-input text-foreground" /> {/* Comprimento */} - Comprimento (mm) + Comprimento (mm) handleInputChange('comprimento', Number(e.target.value))} placeholder="Ex: 6000" - className="text-sm mt-1 bg-slate-950 border-slate-700 font-mono" + className="text-sm mt-1 bg-background border-input text-foreground font-mono" /> - Material / Aço + Material / Aço handleInputChange('material', e.target.value)} placeholder="Ex: ASTM A36, A572 GR50" - className="text-sm mt-1 bg-slate-950 border-slate-700" + className="text-sm mt-1 bg-background border-input text-foreground" /> - Perfil Principal + Perfil Principal handleInputChange('perfil_principal', e.target.value)} placeholder="Ex: W250x32.7, RHS150x6.3" - className="text-sm mt-1 bg-slate-950 border-slate-700" + className="text-sm mt-1 bg-background border-input text-foreground" /> - Tratamento Superficial + Tratamento Superficial handleInputChange('tratamento_superficial', e.target.value)} placeholder="Ex: Pintura Epóxi, Galvanizado" - className="text-sm mt-1 bg-slate-950 border-slate-700" + className="text-sm mt-1 bg-background border-input text-foreground" /> @@ -428,14 +426,14 @@ export function RevisaoPecaModal({ {/* CARD DE IMPACTO OPERACIONAL / REGRAS DE NEGÓCIO */} {analise.camposAlterados.length > 0 && ( - @@ -446,7 +444,7 @@ export function RevisaoPecaModal({ {diffQtd > 0 && ( - + Aumento de quantidade (+{diffQtd} un): A diferença excedente de {diffQtd} un nascerá automaticamente no 1º processo de fabricação (Corte/Detalhamento) para novos apontamentos. @@ -455,7 +453,7 @@ export function RevisaoPecaModal({ )} {diffQtd < 0 && ( - + Redução de quantidade ({diffQtd} un): O novo total será de {formData.quantidade} un. Os processos que possuírem apontamentos superiores a {formData.quantidade} un serão revisados automaticamente para o novo teto. @@ -464,7 +462,7 @@ export function RevisaoPecaModal({ )} {formData.marca !== peca.marca && ( - + Alteração de marca/código ({peca.marca} ➔ {formData.marca}): A rastreabilidade da peça será atualizada e preservada em apontamentos e romaneios de expedição. @@ -473,7 +471,7 @@ export function RevisaoPecaModal({ )} {analise.detalhes.map((det, idx) => ( - + • {det} ))} @@ -489,7 +487,7 @@ export function RevisaoPecaModal({ type="button" variant="outline" onClick={onClose} - className="border-slate-700 text-slate-300 hover:bg-slate-800" + className="border-border text-foreground hover:bg-muted" > Cancelar @@ -497,7 +495,7 @@ export function RevisaoPecaModal({ {loading ? 'Processando Revisão...' : 'Salvar Revisão e Atualizar Peça'} @@ -509,14 +507,14 @@ export function RevisaoPecaModal({ {/* ABA 2: HISTÓRICO DE REVISÕES */} {loadingHistorico ? ( - + Carregando histórico de revisões... ) : historico.length === 0 ? ( - - + + Nenhuma revisão registrada para esta peça até o momento. - + Ao realizar a primeira alteração pela aba "Nova Revisão", o histórico completo será guardado aqui. @@ -525,23 +523,23 @@ export function RevisaoPecaModal({ {historico.map((rev) => ( - + {rev.numero_revisao} {rev.tipo_revisao === 'critica' ? 'Crítica' : 'Simples'} - + {rev.data_revisao ? format(new Date(rev.data_revisao), "dd/MM/yyyy 'às' HH:mm", { locale: ptBR }) @@ -549,27 +547,27 @@ export function RevisaoPecaModal({ - - + + {rev.usuario_nome || rev.usuario_email || 'Usuário'} {/* Motivo */} - + Motivo: {rev.descricao_motivo} {rev.observacoes && ( - + Obs: {rev.observacoes} )} {/* Comparativo de Campos Alterados */} {rev.campos_alterados && rev.campos_alterados.length > 0 && ( - - + + Modificações Realizadas: @@ -577,16 +575,16 @@ export function RevisaoPecaModal({ const ant = rev.dados_anteriores?.[campo]; const nov = rev.dados_novos?.[campo]; return ( - - + + {campo} - + {String(ant ?? '-')} - - + + {String(nov ?? '-')} @@ -599,8 +597,8 @@ export function RevisaoPecaModal({ {/* Impacto em Apontamentos */} {rev.impacto_processos && rev.impacto_processos.resumo && rev.impacto_processos.resumo.length > 0 && ( - - + + Ajustes de Produção Aplicados: diff --git a/src/components/pecas/table/TableRow.tsx b/src/components/pecas/table/TableRow.tsx index 5776d00..a224fb7 100644 --- a/src/components/pecas/table/TableRow.tsx +++ b/src/components/pecas/table/TableRow.tsx @@ -102,10 +102,10 @@ export function TableRow({ e.stopPropagation(); onOpenRevisao?.(); }} - className="cursor-pointer inline-flex items-center gap-0.5 text-[10px] bg-amber-500/20 text-amber-400 hover:bg-amber-500/30 border border-amber-500/40 px-1.5 py-0.5 rounded-full font-bold transition-all shadow-sm animate-pulse" + className="cursor-pointer inline-flex items-center gap-0.5 text-[10px] bg-amber-500/15 text-amber-700 dark:text-amber-400 hover:bg-amber-500/25 border border-amber-500/40 px-1.5 py-0.5 rounded-full font-bold transition-all shadow-sm animate-pulse" title={`Peça possui ${peca.qtd_revisoes || 1} revisão(ões) registrada(s) (${peca.revisao_atual || 'Rev'}). Clique para consultar.`} > - + {peca.revisao_atual || '!'} )} @@ -192,7 +192,7 @@ export function TableRow({ size="sm" onClick={onOpenRevisao} title="Gestão e Histórico de Revisões da Peça" - className="h-6 w-6 p-0 text-amber-500 hover:text-amber-400 hover:bg-amber-950/40" + className="h-6 w-6 p-0 text-amber-600 dark:text-amber-400 hover:text-amber-700 dark:hover:text-amber-300 hover:bg-amber-500/10" >
Nenhuma revisão registrada para esta peça até o momento.
+
Ao realizar a primeira alteração pela aba "Nova Revisão", o histórico completo será guardado aqui.