Initial commit SteelBase - Oficiais e Funcionando
This commit is contained in:
630
index.html
Normal file
630
index.html
Normal file
@@ -0,0 +1,630 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="pt-BR">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<!-- Viewport otimizado para mobile -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes">
|
||||
|
||||
<!-- Meta tags para SEO e PWA -->
|
||||
<meta name="description" content="SteelBase - Plataforma profissional de cálculos de engenharia estrutural com base de dados de materiais brasileiros. CEV, soldagem, parafusos, ensaios e orçamentos.">
|
||||
<meta name="keywords" content="aço, cálculo estrutural, CEV, soldagem, parafusos, engenharia, NBR 8800, AWS D1.1">
|
||||
<meta name="author" content="SteelBase">
|
||||
<meta name="theme-color" content="#21808d">
|
||||
|
||||
<!-- Open Graph para compartilhamento -->
|
||||
<meta property="og:title" content="SteelBase - Plataforma Técnica de Engenharia">
|
||||
<meta property="og:description" content="Cálculos profissionais de engenharia estrutural">
|
||||
<meta property="og:type" content="website">
|
||||
|
||||
<title>🏗️ SteelBase v7.5 - Plataforma Técnica de Engenharia Estrutural</title>
|
||||
|
||||
<!-- Preload critical resources -->
|
||||
<link rel="preload" href="style.css" as="style">
|
||||
<link rel="preload" href="app.js" as="script">
|
||||
|
||||
<!-- Stylesheets -->
|
||||
<link rel="stylesheet" href="style.css">
|
||||
<link rel="stylesheet" href="css/mobile.css">
|
||||
|
||||
<!-- PWA Manifest -->
|
||||
<link rel="manifest" href="manifest.json">
|
||||
|
||||
<!-- Favicon (inline SVG para evitar 404) -->
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><rect width='100' height='100' fill='%230a0a0f'/><text y='75' font-size='80' fill='white'>🏗️</text></svg>">
|
||||
|
||||
<!-- Chart.js - defer para não bloquear -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/chart.js" defer></script>
|
||||
<!-- Testes de Backup e Log (carrega após managers) -->
|
||||
<script src="js/tests/test-backup-log.js" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Loading Screen -->
|
||||
<div id="app-loading" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: #0a0a0f; display: flex; align-items: center; justify-content: center; z-index: 9999;">
|
||||
<div style="text-align: center;">
|
||||
<div style="font-size: 48px; margin-bottom: 16px;">🏗️</div>
|
||||
<div style="font-size: 20px; font-weight: 600; color: #21808d; margin-bottom: 8px;">SteelBase</div>
|
||||
<div style="font-size: 14px; color: #626c71;">Carregando plataforma...</div>
|
||||
<div style="margin-top: 20px; width: 200px; height: 4px; background: #e5e5e5; border-radius: 2px; overflow: hidden;">
|
||||
<div style="width: 100%; height: 100%; background: linear-gradient(90deg, #21808d 0%, #2da6b2 100%); animation: loading 1.5s ease-in-out infinite;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
@keyframes loading {
|
||||
0% { transform: translateX(-100%); }
|
||||
100% { transform: translateX(100%); }
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="header">
|
||||
<div class="header-content">
|
||||
<div class="logo-section">
|
||||
<div class="logo" id="appLogo">🏗️ SteelBase</div>
|
||||
<div class="subtitle" id="appSubtitle">Plataforma Técnica de Engenharia Estrutural v6.5 - Base de Materiais Integrada</div>
|
||||
<span class="badge">PROFESSIONAL EDITION</span>
|
||||
</div>
|
||||
<div class="header-actions">
|
||||
<button class="btn-icon" onclick="openGlobalSearchModal()" title="Buscar Ferramentas">🔍 Buscar</button>
|
||||
<button class="btn-icon" onclick="openManualUsuario()" title="Manual do Usuário">📖 Manual</button>
|
||||
<button class="btn-icon" onclick="abrirPainelDados()" title="Administração de Dados" id="data-admin-toggle" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white;">🗄️ Admin</button>
|
||||
<div class="cache-status-badge" onclick="abrirPainelDados()" title="Status do Cache - Clique para administrar" id="cache-status-badge">
|
||||
<span id="cache-icon">⏳</span>
|
||||
<span id="cache-text">Carregando...</span>
|
||||
</div>
|
||||
<button class="btn-icon" onclick="toggleTheme()" title="Alternar Tema" id="theme-toggle">🌙 Escuro</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-tabs">
|
||||
<button class="sidebar-tab active" onclick="switchSidebarTab(0)">📦 MATERIAIS</button>
|
||||
<button class="sidebar-tab" onclick="switchSidebarTab(1)">🔗 CONEXÕES</button>
|
||||
<button class="sidebar-tab" onclick="switchSidebarTab(2)">🔥 SOLDAGEM</button>
|
||||
<button class="sidebar-tab" onclick="switchSidebarTab(3)">✅ ENSAIOS</button>
|
||||
<button class="sidebar-tab" onclick="switchSidebarTab(4)">🎨 PINTURA</button>
|
||||
<button class="sidebar-tab" onclick="switchSidebarTab(5)">💰 ORÇAMENTO</button>
|
||||
</div>
|
||||
|
||||
<!-- TAB 0: MATERIAIS -->
|
||||
<div class="sidebar-content active" id="sidebar-0">
|
||||
<div class="sidebar-section">
|
||||
<!-- SUBCATEGORIA: AÇOS ESTRUTURAIS -->
|
||||
<div class="sidebar-category">
|
||||
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="category-title">🏗️ AÇOS ESTRUTURAIS</span>
|
||||
</div>
|
||||
<div class="sidebar-category-content">
|
||||
<!-- SUB-SUBCATEGORIA: Assistente Inteligente -->
|
||||
<div class="sidebar-subcategory">
|
||||
<div class="sidebar-subcategory-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="subcategory-title">🤖 Assistente Inteligente</span>
|
||||
</div>
|
||||
<div class="sidebar-subcategory-content">
|
||||
<div class="sidebar-item" onclick="showSection('assistente-inteligente')" data-section="assistente-inteligente">
|
||||
🤖 Recomendação Integrada
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'assistente-inteligente')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('cev')" data-section="cev">
|
||||
🔬 CEV Avançado (IIW + Pcm)
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'cev')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('seletor')" data-section="seletor">
|
||||
🎯 Seletor de Aço Inteligente
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'seletor')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('equivalencias')" data-section="equivalencias">
|
||||
📊 Equivalências Internacionais
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'equivalencias')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('comparativo')" data-section="comparativo">
|
||||
📈 Comparativo de Aços
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'comparativo')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SUB-SUBCATEGORIA: Catálogo de Perfis -->
|
||||
<div class="sidebar-subcategory">
|
||||
<div class="sidebar-subcategory-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="subcategory-title">📐 Catálogo de Perfis</span>
|
||||
</div>
|
||||
<div class="sidebar-subcategory-content">
|
||||
<div class="sidebar-item" onclick="showSection('cantoneiras')" data-section="cantoneiras">
|
||||
📐 Cantoneiras
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'cantoneiras')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('barras-redondas')" data-section="barras-redondas">
|
||||
⭕ Barras Redondas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'barras-redondas')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('tubos-circulares')" data-section="tubos-circulares">
|
||||
🔘 Tubos Circulares
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'tubos-circulares')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('perfis-i')" data-section="perfis-i">
|
||||
🏛️ Perfis I (IPE)
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-i')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('perfis-w')" data-section="perfis-w">
|
||||
🏗️ Perfis W
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-w')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('tubos-rhs')" data-section="tubos-rhs">
|
||||
▭ Tubos RHS
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'tubos-rhs')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('chapas')" data-section="chapas">
|
||||
📄 Chapas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'chapas')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('perfis-hp')" data-section="perfis-hp">
|
||||
🏛️ Perfis HP
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-hp')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('barras-roscadas')" data-section="barras-roscadas">
|
||||
🔩 Barras Roscadas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'barras-roscadas')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('barras-chatas')" data-section="barras-chatas">
|
||||
▬ Barras Chatas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'barras-chatas')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SUBCATEGORIA: CONSUMÍVEIS DE SOLDAGEM -->
|
||||
<div class="sidebar-category">
|
||||
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="category-title">🔥 CONSUMÍVEIS DE SOLDAGEM</span>
|
||||
</div>
|
||||
<div class="sidebar-category-content">
|
||||
<div class="sidebar-item" onclick="showSection('eletrodos')" data-section="eletrodos">
|
||||
⚡ Eletrodos Revestidos
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'eletrodos')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('arames')" data-section="arames">
|
||||
🌀 Arames Sólidos/Tubulares
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'arames')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('fluxos')" data-section="fluxos">
|
||||
💨 Fluxos para SAW
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'fluxos')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('gases')" data-section="gases">
|
||||
🌫️ Gases de Proteção
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'gases')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SUBCATEGORIA: FIXADORES -->
|
||||
<div class="sidebar-category">
|
||||
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="category-title">🔩 FIXADORES</span>
|
||||
</div>
|
||||
<div class="sidebar-category-content">
|
||||
<div class="sidebar-item" onclick="showSection('parafusos-catalogo')" data-section="parafusos-catalogo">
|
||||
🔩 Catálogo de Parafusos
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'parafusos-catalogo')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('porcas')" data-section="porcas">
|
||||
🔸 Porcas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'porcas')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('arruelas')" data-section="arruelas">
|
||||
⭕ Arruelas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'arruelas')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('chumbadores')" data-section="chumbadores">
|
||||
🔗 Chumbadores/Ancoragens
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'chumbadores')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SUBCATEGORIA: TINTAS E REVESTIMENTOS -->
|
||||
<div class="sidebar-category">
|
||||
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="category-title">🎨 TINTAS E REVESTIMENTOS</span>
|
||||
</div>
|
||||
<div class="sidebar-category-content">
|
||||
<div class="sidebar-item" onclick="showSection('tintas-catalogo')" data-section="tintas-catalogo">
|
||||
🎨 Catálogo de Tintas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'tintas-catalogo')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('sistemas-pintura')" data-section="sistemas-pintura">
|
||||
🖌️ Sistemas de Pintura
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'sistemas-pintura')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('abrasivos')" data-section="abrasivos">
|
||||
💎 Abrasivos para Jateamento
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'abrasivos')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('granalha')" data-section="granalha">
|
||||
🔘 Granalha Metálica
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'granalha')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SUBCATEGORIA: ELEMENTOS COMPLEMENTARES -->
|
||||
<div class="sidebar-category">
|
||||
<div class="sidebar-category-header" onclick="toggleCategory(this, event)">
|
||||
<span class="category-icon">▶</span>
|
||||
<span class="category-title">📦 ELEMENTOS COMPLEMENTARES</span>
|
||||
</div>
|
||||
<div class="sidebar-category-content">
|
||||
<div class="sidebar-item" onclick="showSection('telhas')" data-section="telhas">
|
||||
🏠 Telhas Metálicas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'telhas')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('paineis')" data-section="paineis">
|
||||
🧱 Painéis Sanduíche
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'paineis')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('steel-deck')" data-section="steel-deck">
|
||||
📐 Steel Deck
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'steel-deck')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('perfis-formados')" data-section="perfis-formados">
|
||||
🔲 Perfis Formados a Frio
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'perfis-formados')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<!-- TAB 1: CONEXÕES -->
|
||||
<div class="sidebar-content" id="sidebar-1">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-item" onclick="showSection('parafusos')" data-section="parafusos">
|
||||
🔩 Ligações Parafusadas
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'parafusos')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('layout')" data-section="layout">
|
||||
🎯 Layout de Furação
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'layout')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('parafuso-vs-solda')" data-section="parafuso-vs-solda">
|
||||
⚙️ Parafuso vs Solda
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'parafuso-vs-solda')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TAB 2: SOLDAGEM -->
|
||||
<div class="sidebar-content" id="sidebar-2">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-item" onclick="showSection('preaquecimento')" data-section="preaquecimento">
|
||||
📋 Informações Gerais
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'preaquecimento')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('solda-filete')" data-section="solda-filete">
|
||||
📐 Dimensionamento de Filete
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'solda-filete')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('energia-soldagem')" data-section="energia-soldagem">
|
||||
⚡ Energia de Soldagem
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'energia-soldagem')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('consumo-eletrodos')" data-section="consumo-eletrodos">
|
||||
📊 Consumo de Eletrodos
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'consumo-eletrodos')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TAB 3: ENSAIOS -->
|
||||
<div class="sidebar-content" id="sidebar-3">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-item" onclick="showSection('dureza')" data-section="dureza">
|
||||
🔨 Conversor de Dureza
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'dureza')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('charpy')" data-section="charpy">
|
||||
📉 Análise de Charpy
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'charpy')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('certificado')" data-section="certificado">
|
||||
📋 Checklist Certificado
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'certificado')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('ultrassom')" data-section="ultrassom">
|
||||
🏥 Interpretação Ultrassom
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'ultrassom')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TAB 4: PINTURA -->
|
||||
<div class="sidebar-content" id="sidebar-4">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-item" onclick="showSection('area-pintura')" data-section="area-pintura">
|
||||
📐 Cálculo de Área
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'area-pintura')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('consumo-tinta')" data-section="consumo-tinta">
|
||||
🎯 Consumo de Tinta
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'consumo-tinta')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('galvanizacao')" data-section="galvanizacao">
|
||||
🛡️ Galvanização
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'galvanizacao')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('custo-pintura')" data-section="custo-pintura">
|
||||
💰 Custo Total
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'custo-pintura')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('secagem')" data-section="secagem">
|
||||
⏱️ Tempo de Secagem
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'secagem')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('inspecao-pintura')" data-section="inspecao-pintura">
|
||||
✔️ Inspeção de Qualidade
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'inspecao-pintura')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- TAB 5: ORÇAMENTO -->
|
||||
<div class="sidebar-content" id="sidebar-5">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-item" onclick="showSection('orcamento')" data-section="orcamento">
|
||||
💵 Orçamento Detalhado
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'orcamento')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('peso-rigging')" data-section="peso-rigging">
|
||||
⚖️ Peso e Rigging
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'peso-rigging')">☆</button>
|
||||
</div>
|
||||
<div class="sidebar-item" onclick="showSection('referencia')" data-section="referencia">
|
||||
📖 Referência Técnica
|
||||
<button class="star-btn" onclick="toggleFavorite(event, 'referencia')">☆</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main class="main-content" id="main-content">
|
||||
<!-- Content will be dynamically loaded here -->
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<!-- History Modal -->
|
||||
<div class="modal" id="history-modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div class="modal-title">📋 Histórico de Cálculos</div>
|
||||
<button class="close-btn" onclick="closeHistoryModal()">×</button>
|
||||
</div>
|
||||
<div id="history-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Favorites Modal -->
|
||||
<div class="modal" id="favorites-modal">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<div class="modal-title">⭐ Favoritos</div>
|
||||
<button class="close-btn" onclick="closeFavoritesModal()">×</button>
|
||||
</div>
|
||||
<div id="favorites-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Admin Modal removido: funcionalidades migradas para abrirPainelDados() -->
|
||||
|
||||
<!-- CSV Manager Modal -->
|
||||
<div class="modal" id="csvManagerModal" style="z-index: 2001;">
|
||||
<div class="modal-content" style="max-width: 1200px; max-height: 90vh;">
|
||||
<div class="modal-header">
|
||||
<h2>📊 Gerenciador de Base de Dados CSV</h2>
|
||||
<button class="close-btn" onclick="closeCSVManager()">×</button>
|
||||
</div>
|
||||
<div class="modal-body" style="padding: 0;">
|
||||
<!-- File Selector -->
|
||||
<div style="padding: 20px; border-bottom: 1px solid var(--color-border);">
|
||||
<div class="form-group" style="margin-bottom: 0;">
|
||||
<label class="form-label">Selecione o arquivo CSV:</label>
|
||||
<select class="form-control" id="csvFileSelect" onchange="loadSelectedCSV()">
|
||||
<option value="">-- Selecione um arquivo --</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CSV Content -->
|
||||
<div id="csvContent" style="padding: 20px; overflow-y: auto; max-height: calc(90vh - 250px);">
|
||||
<div style="text-align: center; padding: 60px 20px; color: var(--color-text-secondary);">
|
||||
<div style="font-size: 64px; margin-bottom: 16px;">📁</div>
|
||||
<p style="font-size: 18px; margin-bottom: 8px;">Selecione um arquivo CSV para começar</p>
|
||||
<p style="font-size: 14px;">Você poderá visualizar, editar, adicionar e remover registros</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer" style="display: flex; gap: 12px; justify-content: space-between;">
|
||||
<div style="display: flex; gap: 12px;">
|
||||
<button class="btn btn-secondary" onclick="addNewRecord()" id="btnAddRecord" style="display: none;">
|
||||
➕ Adicionar Registro
|
||||
</button>
|
||||
<button class="btn btn-secondary" onclick="downloadCurrentCSV()" id="btnDownload" style="display: none;">
|
||||
💾 Download CSV
|
||||
</button>
|
||||
</div>
|
||||
<button class="btn btn-primary" onclick="closeCSVManager()">Fechar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- CSV Record Editor Modal -->
|
||||
<div class="modal" id="csvRecordModal" style="z-index: 2002;">
|
||||
<div class="modal-content" style="max-width: 700px;">
|
||||
<div class="modal-header">
|
||||
<h2 id="recordModalTitle">✏️ Editar Registro</h2>
|
||||
<button class="close-btn" onclick="closeRecordModal()">×</button>
|
||||
</div>
|
||||
<div class="modal-body" id="recordModalBody">
|
||||
<!-- Dynamic form will be inserted here -->
|
||||
</div>
|
||||
<div class="modal-footer" style="display: flex; gap: 12px; justify-content: flex-end;">
|
||||
<button class="btn btn-secondary" onclick="closeRecordModal()">Cancelar</button>
|
||||
<button class="btn btn-primary" onclick="saveRecord()">💾 Salvar</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Help Modal -->
|
||||
<div class="modal-help" id="modalAjuda">
|
||||
<div class="modal-help-content">
|
||||
<div class="modal-help-header">
|
||||
<h2 id="ajudaTitulo">📚 Ajuda</h2>
|
||||
<button class="close-btn" onclick="closeAjudaModal()">×</button>
|
||||
</div>
|
||||
<div class="modal-help-search">
|
||||
<input type="text" id="helpSearch" placeholder="🔍 Buscar no conteúdo..." oninput="filtrarConteudoAjuda()">
|
||||
</div>
|
||||
<div class="modal-help-tabs">
|
||||
<button class="help-tab-btn active" onclick="switchHelpTab(0)">📖 Explicação</button>
|
||||
<button class="help-tab-btn" onclick="switchHelpTab(1)">🔧 Campos</button>
|
||||
<button class="help-tab-btn" onclick="switchHelpTab(2)">📊 Resultados</button>
|
||||
<button class="help-tab-btn" onclick="switchHelpTab(3)">📚 Referências</button>
|
||||
</div>
|
||||
<div class="modal-help-body">
|
||||
<div class="help-tab-content active" id="help-tab-0"></div>
|
||||
<div class="help-tab-content" id="help-tab-1"></div>
|
||||
<div class="help-tab-content" id="help-tab-2"></div>
|
||||
<div class="help-tab-content" id="help-tab-3"></div>
|
||||
</div>
|
||||
<div class="modal-help-footer">
|
||||
<button class="btn btn-primary" onclick="abrirManualRelacionado()">📖 Ver no Manual do Usuário</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Manual Usuario Modal -->
|
||||
<div class="modal-manual" id="modalManual">
|
||||
<div class="modal-manual-container">
|
||||
<div class="manual-sidebar">
|
||||
<div class="manual-search">
|
||||
<input type="text" id="manualSearch" placeholder="🔍 Buscar..." oninput="buscarNoManual()">
|
||||
</div>
|
||||
<nav class="manual-nav" id="manualNav"></nav>
|
||||
</div>
|
||||
<div class="manual-content">
|
||||
<button class="close-btn" onclick="closeManualModal()" style="position: absolute; top: 20px; right: 20px;">×</button>
|
||||
<div id="manualConteudo"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Global Search Modal -->
|
||||
<div class="modal" id="globalSearchModal">
|
||||
<div class="modal-content" style="max-width: 700px;">
|
||||
<div class="modal-header">
|
||||
<h2>🔍 Buscar Ferramentas</h2>
|
||||
<button class="close-btn" onclick="closeGlobalSearchModal()">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<input type="text" class="form-control" id="globalSearchInput" placeholder="Digite para buscar ferramentas, abas ou temas..." oninput="buscarFerramentasGlobal()" autofocus>
|
||||
<small style="color: var(--color-text-secondary); margin-top: 8px; display: block;">
|
||||
💡 Dica: Digite "solda", "parafuso", "charpy", "pintura", etc.
|
||||
</small>
|
||||
</div>
|
||||
<div id="globalSearchResults" style="margin-top: 20px; max-height: 400px; overflow-y: auto;">
|
||||
<p style="color: var(--color-text-secondary); text-align: center; padding: 40px;">
|
||||
Digite algo para começar a buscar...
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="footer" id="appFooter">
|
||||
<p>© 2025 SteelBase v6.5 PROFESSIONAL EDITION - Plataforma Técnica com Base de Dados de Materiais Brasileiros</p>
|
||||
</div>
|
||||
|
||||
<!-- Sistema de Banco de Dados Intermediário (temporariamente desativado para diagnóstico) -->
|
||||
<script src="js/database/banco-dados-completo.js"></script>
|
||||
<!-- <script src="js/database/carregador-universal.js"></script> -->
|
||||
<script src="js/database/importador-csv.js"></script>
|
||||
<script src="js/database/dados-embutidos.js"></script>
|
||||
<script src="js/database/data-manager.js"></script>
|
||||
<!-- <script src="js/database/perfis-loader.js"></script> -->
|
||||
<script src="js/database/admin-panel.js"></script>
|
||||
|
||||
<!-- Main app (legacy - mantido para compatibilidade) -->
|
||||
<script src="app.js"></script>
|
||||
|
||||
<!-- Catálogo de Perfis - reativando gradualmente para diagnóstico -->
|
||||
<script src="js/sections/perfis-templates.js"></script>
|
||||
|
||||
<!-- Perfis Catalog (JS) -->
|
||||
<!-- Auto-loader que gera funções globais de carregamento/atualização para cada perfil -->
|
||||
<script src="js/sections/perfis-auto-loader.js"></script>
|
||||
|
||||
<!-- Carregar catálogo de perfis após diagnóstico -->
|
||||
<script src="js/sections/perfis-catalog.js"></script>
|
||||
|
||||
<!-- Modular app (ES6 modules - novo sistema) -->
|
||||
<!-- Temporariamente desativado para diagnosticar erro "Unexpected token '<'" -->
|
||||
<!-- <script type="module" src="js/main.js"></script> -->
|
||||
|
||||
<!-- Debug de erros: mostra origem do erro JS na tela -->
|
||||
<script>
|
||||
(function(){
|
||||
function showErrorOverlay(message, source, lineno, colno) {
|
||||
const overlay = document.createElement('div');
|
||||
overlay.style.position = 'fixed';
|
||||
overlay.style.bottom = '0';
|
||||
overlay.style.left = '0';
|
||||
overlay.style.right = '0';
|
||||
overlay.style.background = 'rgba(192, 21, 47, 0.9)';
|
||||
overlay.style.color = '#fff';
|
||||
overlay.style.padding = '12px';
|
||||
overlay.style.fontFamily = 'monospace';
|
||||
overlay.style.zIndex = '99999';
|
||||
overlay.textContent = `Erro JS: ${message} \nFonte: ${source}:${lineno}:${colno}`;
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
window.addEventListener('error', function(e){
|
||||
try {
|
||||
const src = e.filename || (e.target && e.target.src) || 'desconhecido';
|
||||
const msg = e.message || 'Erro script';
|
||||
showErrorOverlay(msg, src, e.lineno || 0, e.colno || 0);
|
||||
} catch(_) {}
|
||||
}, true);
|
||||
window.addEventListener('unhandledrejection', function(e){
|
||||
try {
|
||||
showErrorOverlay('Promise rejeitada', 'runtime', 0, 0);
|
||||
} catch(_) {}
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
|
||||
<!-- Módulos de Persistência -->
|
||||
<script src="js/core/admin-config-manager.js"></script>
|
||||
<script src="js/core/backup-manager.js"></script>
|
||||
<script src="js/ui/toast-manager.js"></script>
|
||||
|
||||
<!-- Sistema de Teste de Persistência -->
|
||||
<script src="js/tests/test-persistencia.js"></script>
|
||||
<script src="js/tests/test-persistencia-simples.js"></script>
|
||||
<script src="js/tests/verificador-persistencia.js"></script>
|
||||
<script src="js/tests/teste-manual-disponibilidade.js"></script>
|
||||
|
||||
<!-- Menu Mobile (Hamburger no topbar, sidebar dropdown) -->
|
||||
<script type="module" src="js/ui/mobile-menu.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user