diff --git a/src/gausse/web/page.py b/src/gausse/web/page.py index 4891dec..3c8d8ce 100644 --- a/src/gausse/web/page.py +++ b/src/gausse/web/page.py @@ -72,7 +72,7 @@ PAGE_HTML = r""" - +
КПДСкор., м/сСтуп.Цена, ₽Режим
КПДСкор., м/сСтуп.Цена, ₽РежимКогда найден

Клик по строке — полная детализация прогона (расстояния, номиналы, физика).

@@ -109,13 +109,23 @@ function setRank(m){ rankMode=m; if(lastOverview) renderTop(lastOverview); document.getElementById('tab-eff').classList.toggle('active', m==='eff'); document.getElementById('tab-vel').classList.toggle('active', m==='vel'); } +// «Когда найден»: без этой колонки обновление топа было НЕВИДИМО — новая +// строка 13.63% глазом неотличима от старой 13.44%, и казалось, что таблица +// застыла. Свежие записи (< 1 часа) подсвечиваются. +const fmtWhen = ts => { + if(!ts) return "—"; + const d = new Date(ts), ageMs = Date.now()-d.getTime(); + const t = d.toLocaleString([], {day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'}); + return ageMs < 3600e3 ? `${t}` : t; +}; function renderTop(o){ const rows = rankMode==='vel' ? (o.top_by_velocity||[]) : (o.top||[]); const top = document.getElementById('top'); top.innerHTML=''; rows.forEach(t=>{ const tr=document.createElement('tr'); tr.className='clk'; tr.innerHTML=`${fmtPct(t.efficiency)}${fmt(t.exit_velocity_mps,1)}`+ - `${t.n_stages??'—'}${fmt(t.cost_rub,0)}${t.search_mode}`; + `${t.n_stages??'—'}${fmt(t.cost_rub,0)}${t.search_mode}`+ + `${fmtWhen(t.timestamp)}`; tr.onclick=()=>showDetail(t.run_id); top.appendChild(tr); });