178 lines
10 KiB
JavaScript
178 lines
10 KiB
JavaScript
/**
|
|
* DADOS EMBUTIDOS - Todos os perfis em JavaScript
|
|
* Solução autônoma que funciona sem servidor e sem CSVs
|
|
* Pronto para desktop, mobile e deploy
|
|
*/
|
|
|
|
const DADOS_PERFIS = {
|
|
cantoneiras: [
|
|
{id: 'l25_25_3', nome: 'L25x25x3', lado_mm: 25, espessura_mm: 3, peso_kg_m: 1.12, area_cm2: 1.43, momento_inercia_cm4: 0.38, raio_giracao_cm: 0.52, tipo: 'Pequena'},
|
|
{id: 'l25_25_4', nome: 'L25x25x4', lado_mm: 25, espessura_mm: 4, peso_kg_m: 1.47, area_cm2: 1.87, momento_inercia_cm4: 0.47, raio_giracao_cm: 0.5, tipo: 'Pequena'},
|
|
{id: 'l32_32_3', nome: 'L32x32x3', lado_mm: 32, espessura_mm: 3, peso_kg_m: 1.45, area_cm2: 1.85, momento_inercia_cm4: 0.69, raio_giracao_cm: 0.61, tipo: 'Pequena'},
|
|
{id: 'l32_32_4', nome: 'L32x32x4', lado_mm: 32, espessura_mm: 4, peso_kg_m: 1.91, area_cm2: 2.43, momento_inercia_cm4: 0.86, raio_giracao_cm: 0.59, tipo: 'Pequena'},
|
|
{id: 'l40_40_3', nome: 'L40x40x3', lado_mm: 40, espessura_mm: 3, peso_kg_m: 1.86, area_cm2: 2.37, momento_inercia_cm4: 1.4, raio_giracao_cm: 0.77, tipo: 'Pequena'},
|
|
{id: 'l40_40_4', nome: 'L40x40x4', lado_mm: 40, espessura_mm: 4, peso_kg_m: 2.46, area_cm2: 3.13, momento_inercia_cm4: 1.74, raio_giracao_cm: 0.75, tipo: 'Pequena'},
|
|
{id: 'l40_40_5', nome: 'L40x40x5', lado_mm: 40, espessura_mm: 5, peso_kg_m: 3.03, area_cm2: 3.86, momento_inercia_cm4: 2.06, raio_giracao_cm: 0.73, tipo: 'Pequena'},
|
|
{id: 'l50_50_3', nome: 'L50x50x3', lado_mm: 50, espessura_mm: 3, peso_kg_m: 2.36, area_cm2: 3.0, momento_inercia_cm4: 2.7, raio_giracao_cm: 0.95, tipo: 'Pequena'},
|
|
{id: 'l50_50_4', nome: 'L50x50x4', lado_mm: 50, espessura_mm: 4, peso_kg_m: 3.14, area_cm2: 4.0, momento_inercia_cm4: 3.5, raio_giracao_cm: 0.93, tipo: 'Pequena'},
|
|
{id: 'l50_50_5', nome: 'L50x50x5', lado_mm: 50, espessura_mm: 5, peso_kg_m: 3.89, area_cm2: 4.96, momento_inercia_cm4: 4.25, raio_giracao_cm: 0.93, tipo: 'Pequena'},
|
|
{id: 'l50_50_6', nome: 'L50x50x6', lado_mm: 50, espessura_mm: 6, peso_kg_m: 4.62, area_cm2: 5.89, momento_inercia_cm4: 4.95, raio_giracao_cm: 0.92, tipo: 'Pequena'},
|
|
{id: 'l63_63_5', nome: 'L63x63x5', lado_mm: 63, espessura_mm: 5, peso_kg_m: 4.96, area_cm2: 6.31, momento_inercia_cm4: 8.47, raio_giracao_cm: 1.16, tipo: 'Média'},
|
|
{id: 'l63_63_6', nome: 'L63x63x6', lado_mm: 63, espessura_mm: 6, peso_kg_m: 5.91, area_cm2: 7.53, momento_inercia_cm4: 9.9, raio_giracao_cm: 1.15, tipo: 'Média'},
|
|
{id: 'l63_63_8', nome: 'L63x63x8', lado_mm: 63, espessura_mm: 8, peso_kg_m: 7.73, area_cm2: 9.85, momento_inercia_cm4: 12.6, raio_giracao_cm: 1.13, tipo: 'Média'},
|
|
{id: 'l75_75_5', nome: 'L75x75x5', lado_mm: 75, espessura_mm: 5, peso_kg_m: 5.91, area_cm2: 7.53, momento_inercia_cm4: 13.5, raio_giracao_cm: 1.34, tipo: 'Média'},
|
|
{id: 'l75_75_6', nome: 'L75x75x6', lado_mm: 75, espessura_mm: 6, peso_kg_m: 7.05, area_cm2: 8.98, momento_inercia_cm4: 15.8, raio_giracao_cm: 1.33, tipo: 'Média'},
|
|
{id: 'l75_75_7', nome: 'L75x75x7', lado_mm: 75, espessura_mm: 7, peso_kg_m: 8.17, area_cm2: 10.4, momento_inercia_cm4: 18.0, raio_giracao_cm: 1.32, tipo: 'Média'},
|
|
{id: 'l75_75_8', nome: 'L75x75x8', lado_mm: 75, espessura_mm: 8, peso_kg_m: 9.27, area_cm2: 11.8, momento_inercia_cm4: 20.1, raio_giracao_cm: 1.31, tipo: 'Média'},
|
|
{id: 'l100_100_6', nome: 'L100x100x6', lado_mm: 100, espessura_mm: 6, peso_kg_m: 9.46, area_cm2: 12.1, momento_inercia_cm4: 37.4, raio_giracao_cm: 1.76, tipo: 'Grande'},
|
|
{id: 'l100_100_8', nome: 'L100x100x8', lado_mm: 100, espessura_mm: 8, peso_kg_m: 12.5, area_cm2: 15.9, momento_inercia_cm4: 48.8, raio_giracao_cm: 1.75, tipo: 'Grande'},
|
|
{id: 'l100_100_10', nome: 'L100x100x10', lado_mm: 100, espessura_mm: 10, peso_kg_m: 15.4, area_cm2: 19.6, momento_inercia_cm4: 59.5, raio_giracao_cm: 1.74, tipo: 'Grande'},
|
|
{id: 'l100_100_12', nome: 'L100x100x12', lado_mm: 100, espessura_mm: 12, peso_kg_m: 18.2, area_cm2: 23.2, momento_inercia_cm4: 69.5, raio_giracao_cm: 1.73, tipo: 'Grande'},
|
|
{id: 'l125_125_8', nome: 'L125x125x8', lado_mm: 125, espessura_mm: 8, peso_kg_m: 15.7, area_cm2: 20.0, momento_inercia_cm4: 95.3, raio_giracao_cm: 2.18, tipo: 'Muito Grande'},
|
|
{id: 'l125_125_10', nome: 'L125x125x10', lado_mm: 125, espessura_mm: 10, peso_kg_m: 19.5, area_cm2: 24.8, momento_inercia_cm4: 117, raio_giracao_cm: 2.17, tipo: 'Muito Grande'},
|
|
{id: 'l125_125_12', nome: 'L125x125x12', lado_mm: 125, espessura_mm: 12, peso_kg_m: 23.2, area_cm2: 29.5, momento_inercia_cm4: 137, raio_giracao_cm: 2.16, tipo: 'Muito Grande'},
|
|
{id: 'l125_125_16', nome: 'L125x125x16', lado_mm: 125, espessura_mm: 16, peso_kg_m: 30.3, area_cm2: 38.6, momento_inercia_cm4: 175, raio_giracao_cm: 2.13, tipo: 'Muito Grande'},
|
|
{id: 'l150_150_10', nome: 'L150x150x10', lado_mm: 150, espessura_mm: 10, peso_kg_m: 23.6, area_cm2: 30.1, momento_inercia_cm4: 201, raio_giracao_cm: 2.59, tipo: 'Extra-Grande'},
|
|
{id: 'l150_150_12', nome: 'L150x150x12', lado_mm: 150, espessura_mm: 12, peso_kg_m: 28.1, area_cm2: 35.8, momento_inercia_cm4: 237, raio_giracao_cm: 2.57, tipo: 'Extra-Grande'},
|
|
{id: 'l150_150_15', nome: 'L150x150x15', lado_mm: 150, espessura_mm: 15, peso_kg_m: 34.8, area_cm2: 44.3, momento_inercia_cm4: 289, raio_giracao_cm: 2.56, tipo: 'Extra-Grande'},
|
|
{id: 'l150_150_20', nome: 'L150x150x20', lado_mm: 150, espessura_mm: 20, peso_kg_m: 45.6, area_cm2: 58.1, momento_inercia_cm4: 371, raio_giracao_cm: 2.53, tipo: 'Extra-Grande'},
|
|
{id: 'l200_200_16', nome: 'L200x200x16', lado_mm: 200, espessura_mm: 16, peso_kg_m: 50.3, area_cm2: 64.1, momento_inercia_cm4: 712, raio_giracao_cm: 3.33, tipo: 'Massiva'},
|
|
{id: 'l200_200_20', nome: 'L200x200x20', lado_mm: 200, espessura_mm: 20, peso_kg_m: 62.4, area_cm2: 79.5, momento_inercia_cm4: 873, raio_giracao_cm: 3.31, tipo: 'Massiva'},
|
|
{id: 'l200_200_25', nome: 'L200x200x25', lado_mm: 200, espessura_mm: 25, peso_kg_m: 77.3, area_cm2: 98.5, momento_inercia_cm4: 1060, raio_giracao_cm: 3.28, tipo: 'Massiva'}
|
|
]
|
|
};
|
|
|
|
/**
|
|
* Função para obter dados de um tipo de perfil
|
|
*/
|
|
function obterDadosPerfil(tipo) {
|
|
console.log(`📊 Obtendo dados embutidos: ${tipo}`);
|
|
const dados = DADOS_PERFIS[tipo];
|
|
|
|
if (!dados) {
|
|
console.error(`❌ Tipo de perfil não encontrado: ${tipo}`);
|
|
return [];
|
|
}
|
|
|
|
console.log(`✅ ${dados.length} itens encontrados para ${tipo}`);
|
|
return dados;
|
|
}
|
|
|
|
/**
|
|
* Carrega dados automaticamente para cantoneiras
|
|
*/
|
|
function carregarCantoneirasAutomatico() {
|
|
console.log('🚀 Carregamento automático de cantoneiras (dados embutidos)');
|
|
|
|
const tbody = document.getElementById('cantoneiras-tbody');
|
|
if (!tbody) {
|
|
console.warn('⚠️ Elemento tbody não encontrado ainda');
|
|
return false;
|
|
}
|
|
|
|
const dados = obterDadosPerfil('cantoneiras');
|
|
|
|
if (dados.length === 0) {
|
|
console.error('❌ Nenhum dado encontrado');
|
|
return false;
|
|
}
|
|
|
|
// Exibir na tabela
|
|
tbody.innerHTML = dados.map(item => `
|
|
<tr>
|
|
<td><strong>${item.nome}</strong></td>
|
|
<td>${item.lado_mm}</td>
|
|
<td>${item.espessura_mm}</td>
|
|
<td>${item.peso_kg_m.toFixed(2)}</td>
|
|
<td>${item.area_cm2.toFixed(2)}</td>
|
|
<td>${item.momento_inercia_cm4.toFixed(2)}</td>
|
|
<td>${item.raio_giracao_cm.toFixed(2)}</td>
|
|
<td><span class="badge badge-info">${item.tipo}</span></td>
|
|
<td><button class="btn btn-sm btn-primary">👁️ Ver</button></td>
|
|
</tr>
|
|
`).join('');
|
|
|
|
// Atualizar contador
|
|
const totalEl = document.getElementById('cant-total');
|
|
if (totalEl) {
|
|
totalEl.textContent = dados.length;
|
|
}
|
|
|
|
// Armazenar globalmente
|
|
window.cantoneirasData = dados;
|
|
|
|
console.log(`✅ ${dados.length} cantoneiras carregadas automaticamente!`);
|
|
return true;
|
|
}
|
|
|
|
// Exportar para uso global
|
|
window.DADOS_PERFIS = DADOS_PERFIS;
|
|
window.obterDadosPerfil = obterDadosPerfil;
|
|
window.carregarCantoneirasAutomatico = carregarCantoneirasAutomatico;
|
|
|
|
console.log('✅ Dados embutidos carregados - 33 cantoneiras disponíveis');
|
|
|
|
|
|
// ========================================
|
|
// AUTO-CARREGAMENTO ROBUSTO
|
|
// ========================================
|
|
|
|
/**
|
|
* Observer que detecta quando a tabela de cantoneiras aparece
|
|
* e carrega os dados automaticamente
|
|
*/
|
|
function iniciarAutoCarregamentoRobusto() {
|
|
console.log('👁️ Iniciando observer robusto para auto-carregamento');
|
|
|
|
const observer = new MutationObserver((mutations) => {
|
|
const tbody = document.getElementById('cantoneiras-tbody');
|
|
|
|
if (tbody) {
|
|
// Verificar se está vazio ou com placeholder
|
|
const conteudo = tbody.textContent.trim();
|
|
const estaVazio = tbody.children.length === 0 ||
|
|
conteudo.includes('Será preenchido') ||
|
|
conteudo.includes('preenchido via JavaScript') ||
|
|
tbody.children.length === 1 && tbody.children[0].children.length === 1;
|
|
|
|
if (estaVazio) {
|
|
console.log('🎯 Tabela vazia detectada - carregando automaticamente...');
|
|
|
|
// Aguardar um pouco e carregar
|
|
setTimeout(() => {
|
|
const sucesso = carregarCantoneirasAutomatico();
|
|
if (sucesso) {
|
|
console.log('✅ Auto-carregamento concluído com sucesso!');
|
|
observer.disconnect(); // Parar de observar
|
|
}
|
|
}, 300);
|
|
}
|
|
}
|
|
});
|
|
|
|
// Observar mudanças no body
|
|
observer.observe(document.body, {
|
|
childList: true,
|
|
subtree: true
|
|
});
|
|
|
|
// Tentar carregar imediatamente também
|
|
setTimeout(() => {
|
|
const tbody = document.getElementById('cantoneiras-tbody');
|
|
if (tbody) {
|
|
carregarCantoneirasAutomatico();
|
|
}
|
|
}, 1000);
|
|
|
|
console.log('✅ Observer robusto ativo');
|
|
}
|
|
|
|
// Iniciar quando o DOM estiver pronto
|
|
if (document.readyState === 'loading') {
|
|
document.addEventListener('DOMContentLoaded', iniciarAutoCarregamentoRobusto);
|
|
} else {
|
|
iniciarAutoCarregamentoRobusto();
|
|
}
|
|
|
|
console.log('✅ Sistema de auto-carregamento robusto configurado');
|