init: server build project template

This commit is contained in:
2026-10-10 06:27:51 +05:00
commit a6167fccfa
15 changed files with 304 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
const fmt = n => n.toLocaleString('ru-RU') + ' ₽';
fetch('data.json').then(r => r.json()).then(d => {
document.getElementById('total').textContent = fmt(d.total);
new Chart(document.getElementById('chNodes'), {
type: 'pie',
data: { labels: Object.keys(d.per_node), datasets: [{ data: Object.values(d.per_node) }] },
options: { plugins: { title: { display: true, text: 'Бюджет по узлам' } } }
});
new Chart(document.getElementById('chCats'), {
type: 'doughnut',
data: { labels: Object.keys(d.per_cat), datasets: [{ data: Object.values(d.per_cat) }] },
options: { plugins: { title: { display: true, text: 'Бюджет по категориям' } } }
});
const tb = document.querySelector('#tbl tbody');
d.rows.forEach(r => {
const links = r.links.map(l => `<a href="${l.url}" target="_blank">${l.title}</a>`).join(' · ');
tb.insertAdjacentHTML('beforeend',
`<tr><td>${r.node}</td><td>${r.cat}</td><td>${r.name}</td><td>${r.qty}</td>
<td class="num">${r.price.toLocaleString('ru-RU')}</td>
<td class="num">${r.sub.toLocaleString('ru-RU')}</td><td>${links}</td></tr>`);
});
});
+25
View File
@@ -0,0 +1,25 @@
<!doctype html>
<html lang="ru"><head>
<meta charset="utf-8"><title>Server Build — Dashboard</title>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<style>
body{font:14px/1.5 system-ui,sans-serif;max-width:1100px;margin:2rem auto;padding:0 1rem;color:#222}
h1{margin-bottom:.2rem} .total{font-size:2rem;font-weight:600;color:#1f7a1f}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem;margin:1.5rem 0}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:.45rem .6rem;border-bottom:1px solid #eee;text-align:left}
th{background:#f6f8fa} td.num{text-align:right;font-variant-numeric:tabular-nums}
a{color:#0969da;text-decoration:none} a:hover{text-decoration:underline}
</style></head><body>
<h1>Server Build — Dashboard</h1>
<div class="total" id="total">— ₽</div>
<div class="grid">
<canvas id="chNodes"></canvas>
<canvas id="chCats"></canvas>
</div>
<table id="tbl"><thead><tr>
<th>Узел</th><th>Категория</th><th>Наименование</th><th>Кол-во</th>
<th class="num">Цена</th><th class="num">Сумма</th><th>Ссылки</th>
</tr></thead><tbody></tbody></table>
<script src="app.js"></script>
</body></html>