Files
elmer/web/templates/index.html
T

114 lines
4.3 KiB
HTML

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Elmer — Диагностика авто</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<div class="container">
<h1>🔧 Elmer</h1>
<p class="subtitle">Диагностика через ELM327 + ИИ</p>
<div class="card" style="text-align:center;margin-bottom:20px;">
<p style="margin:0 0 10px 0;">📱 Скачай APK прямо на телефон:</p>
<a href="/static/app-debug.apk" style="color:#ff6b35;font-size:18px;font-weight:bold;text-decoration:none;">
⬇️ Скачать Elmer APK
</a>
</div>
<button id="btn-diagnose" onclick="runDiagnose()">
🚗 Подключить и диагностировать
</button>
<div id="status"></div>
<div id="result" style="display:none;">
<div class="card" id="vin-card">
<h2>📋 VIN</h2>
<code id="vin-value"></code>
</div>
<div class="card" id="dtc-card">
<h2>⚠️ Коды ошибок</h2>
<div id="dtc-list"></div>
</div>
<div class="card" id="params-card">
<h2>📊 Параметры</h2>
<div id="params-list"></div>
</div>
<div class="card diagnosis-card">
<h2>🧠 Диагноз</h2>
<div id="diagnosis-text"></div>
</div>
</div>
</div>
<script>
async function runDiagnose() {
const btn = document.getElementById('btn-diagnose');
const status = document.getElementById('status');
const result = document.getElementById('result');
btn.disabled = true;
btn.textContent = '⏳ Читаю данные с ЭБУ...';
status.innerHTML = '<div class="spinner"></div> Идёт диагностика...';
try {
const resp = await fetch('/api/diagnose', { method: 'POST' });
const data = await resp.json();
if (!resp.ok) {
status.innerHTML = `<div class="error">❌ ${data.error}</div>`;
btn.disabled = false;
btn.textContent = '🔄 Попробовать снова';
return;
}
// VIN
document.getElementById('vin-value').textContent = data.vin;
// DTC
const dtcList = document.getElementById('dtc-list');
if (data.dtc_codes.length === 0) {
dtcList.innerHTML = '<p class="ok">✅ Ошибок нет</p>';
} else {
dtcList.innerHTML = data.dtc_codes
.map(d => `<span class="dtc-badge ${d.status}">${d.code} [${d.status}]</span>`)
.join('');
}
// Parameters
const paramsList = document.getElementById('params-list');
paramsList.innerHTML = data.parameters
.map(p => `<div class="param-row"><span>${p.name}</span><strong>${p.value} ${p.unit}</strong></div>`)
.join('');
// Diagnosis — markdown to html (simple)
document.getElementById('diagnosis-text').innerHTML =
data.diagnosis
.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
.replace(/^### (.+)$/gm, '<h3>$1</h3>')
.replace(/^## (.+)$/gm, '<h2>$1</h2>')
.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>')
.replace(/\n/g, '<br>');
result.style.display = 'block';
status.innerHTML = '<div class="ok">✅ Диагностика завершена. Сохранено в базу.</div>';
btn.textContent = '🔄 Диагностировать заново';
} catch (err) {
status.innerHTML = `<div class="error">❌ Ошибка: ${err.message}</div>`;
}
btn.disabled = false;
}
</script>
</body>
</html>