49 lines
2.3 KiB
JavaScript
49 lines
2.3 KiB
JavaScript
import { create } from 'zustand';
|
|
|
|
/**
|
|
* Store global para gerenciar o estado do Novo Ambiente de Frota (Fleet V2).
|
|
* Contém dados mockados baseados no mockup original.
|
|
*/
|
|
export const useFleetStore = create((set) => ({
|
|
veiculos: [
|
|
{ id: 1, placa: 'ABC-1234', modelo: 'Fiorino', base: 'Pralog CD', uf:'SP', status: 'operacao', kmAtual: 45000, motorista: 'João Silva', sascar: 'Sim', t4s: 'Não', geotab: 'Sim', statusTel: 'Ativo' },
|
|
{ id: 2, placa: 'XYZ-9876', modelo: 'Constellation', base: 'Pralog Norte', uf:'AM', status: 'manutencao', kmAtual: 120000, motorista: 'Maria Oliveira', sascar: 'Sim', t4s: 'Sim', geotab: 'Não', statusTel: 'Inativo' },
|
|
{ id: 3, placa: 'PRL-2024', modelo: 'Sprinter', base: 'Pralog Sul', uf:'RS', status: 'operacao', kmAtual: 15000, motorista: 'Pedro Santos', sascar: 'Não', t4s: 'Sim', geotab: 'Sim', statusTel: 'Ativo' }
|
|
],
|
|
abastecimentos: [
|
|
{ id: 1, data: '2023-10-25', veiculoId: 1, motorista: 'João Silva', km: 45000, litros: 40, valor: 240.00, posto: 'Shell Centro', combustivel: 'Diesel S10' }
|
|
],
|
|
manutencoes: [
|
|
{ id: 101, veiculoId: 2, dataSolicitacao: '2023-10-20', tipo: 'Corretiva', status: 'Em Execução', oficina: 'Oficina Central', custo: 1850.00 }
|
|
],
|
|
checklists: [
|
|
{ id: 1, data: '2023-10-26', unidade: 'CD SP', checklist: 'Diário', autor: 'João', aprovacao: 100, status: 'Aprovado' },
|
|
{ id: 2, data: '2023-10-25', unidade: 'Norte AM', checklist: 'Segurança', autor: 'Maria', aprovacao: 60, status: 'Reprovado' }
|
|
],
|
|
|
|
// Ações
|
|
addAbastecimento: (novo) => set((state) => ({
|
|
abastecimentos: [ { ...novo, id: Date.now() }, ...state.abastecimentos ],
|
|
veiculos: state.veiculos.map(v => v.id === novo.veiculoId ? { ...v, kmAtual: novo.km } : v)
|
|
})),
|
|
|
|
updateVeiculoStatus: (id, status) => set((state) => ({
|
|
veiculos: state.veiculos.map(v => v.id === id ? { ...v, status } : v)
|
|
})),
|
|
}));
|
|
|
|
export const useFleetData = () => {
|
|
const store = useFleetStore();
|
|
|
|
const stats = {
|
|
total: store.veiculos.length,
|
|
operacao: store.veiculos.filter(v => v.status === 'operacao').length,
|
|
manutencao: store.veiculos.filter(v => v.status === 'manutencao').length,
|
|
abastecimentosMes: store.abastecimentos.length,
|
|
checklists: store.checklists.length,
|
|
alertas: store.veiculos.filter(v => v.statusTel === 'Inativo').length
|
|
};
|
|
|
|
return { ...store, stats };
|
|
};
|