feat: sync current progress (P0 hardening + P1 observability + deploy docs/systemd)
This commit is contained in:
33
web/static/public.js
Normal file
33
web/static/public.js
Normal file
@@ -0,0 +1,33 @@
|
||||
async function loadPublicRecords(){
|
||||
const res = await fetch('/public/records');
|
||||
const data = await res.json();
|
||||
|
||||
const s = data.summary || {};
|
||||
const by = s.by_category || {};
|
||||
document.getElementById('summary').innerHTML = `
|
||||
<div class="kpi"><b>用户ID</b><div>${s.user_id ?? '-'}</div></div>
|
||||
<div class="kpi"><b>活跃资产数</b><div>${s.active_asset_count ?? 0}</div></div>
|
||||
<div class="kpi"><b>总资产值</b><div>${s.total_assets_value ?? 0}</div></div>
|
||||
<div class="kpi" style="grid-column:1/-1"><b>分类汇总</b><div>${Object.keys(by).length ? Object.entries(by).map(([k,v])=>`${k||'未分类'}: ${v}`).join('<br>') : '暂无'}</div></div>
|
||||
`;
|
||||
|
||||
const rows = data.records || [];
|
||||
const box = document.getElementById('records');
|
||||
if(!rows.length){
|
||||
box.innerHTML = '<div class="empty">当前 0 条记录。可前往 <a href="/app">/app</a> 添加资产后回来查看。</div>';
|
||||
return;
|
||||
}
|
||||
|
||||
box.innerHTML = rows.map(r => `
|
||||
<div class="record-card">
|
||||
<div class="line"><b>#${r.id} ${r.name || ''}</b><span>${r.status || '-'}</span></div>
|
||||
<div class="line"><span>分类</span><span>${r.category_name || '-'}</span></div>
|
||||
<div class="line"><span>金额</span><span>${r.total_value ?? 0} ${r.currency || ''}</span></div>
|
||||
<div class="line"><span>到期</span><span>${r.expiry_date || '-'}</span></div>
|
||||
<div class="line"><span>更新时间</span><span>${r.updated_at || '-'}</span></div>
|
||||
</div>
|
||||
`).join('');
|
||||
}
|
||||
|
||||
document.getElementById('refresh-btn').addEventListener('click', loadPublicRecords);
|
||||
loadPublicRecords();
|
||||
Reference in New Issue
Block a user