49 lines
1.9 KiB
JavaScript
49 lines
1.9 KiB
JavaScript
/* 荐股中心 */
|
||||
|
|
let curRating = 'all';
|
|||
|
|
|
|||
|
|
async function load() {
|
|||
|
|
try {
|
|||
|
|
const d = await api('/api/recommend?rating=' + curRating + '&limit=80');
|
|||
|
|
render(d.items);
|
|||
|
|
} catch (e) {
|
|||
|
|
$('#tb').innerHTML = '<tr><td colspan="10" class="empty">加载失败:' + escapeHtml(e.message) + '</td></tr>';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
function render(items) {
|
|||
|
|
if (!items.length) { $('#tb').innerHTML = '<tr><td colspan="10" class="empty">该评级暂无股票</td></tr>'; return; }
|
|||
|
|
$('#tb').innerHTML = items.map((it, i) => {
|
|||
|
|
const sc = it.score;
|
|||
|
|
return `<tr class="row-link" onclick="location.href='/stock/${it.code}'">
|
|||
|
|
<td class="num">${i + 1}</td>
|
|||
|
|
<td><b>${it.name}</b><div style="color:var(--muted);font-size:12px">${it.code} · ${escapeHtml(it.industry)}</div></td>
|
|||
|
|
<td class="num">${it.close}</td>
|
|||
|
|
<td class="num ${pctClass(it.change_pct)}">${fmtPct(it.change_pct)}</td>
|
|||
|
|
<td class="num ${pctClass(it.chg_5d)}">${fmtPct(it.chg_5d)}</td>
|
|||
|
|
<td><div class="score-wrap"><div class="score-ring" data-score="${sc.total}"></div></div></td>
|
|||
|
|
<td><span class="tag tag-${sc.rating}">${sc.rating}</span></td>
|
|||
|
|
<td style="white-space:normal">
|
|||
|
|
<div style="width:130px">${scoreBars(sc.score_parts)}</div>
|
|||
|
|
</td>
|
|||
|
|
<td style="max-width:280px;white-space:normal;color:var(--text2)">${escapeHtml((it.reasons || []).join(';'))}</td>
|
|||
|
|
<td><button class="btn btn-primary" onclick="event.stopPropagation();analyze('${it.code}','${it.name}')">🤖 AI深度分析</button></td>
|
|||
|
|
</tr>`;
|
|||
|
|
}).join('');
|
|||
|
|
$$('.score-ring', $('#tb')).forEach(el => scoreRing(el, el.dataset.score));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* AI 深度分析:跳详情页并自动触发 */
|
|||
|
|
function analyze(code, name) {
|
|||
|
|
location.href = `/stock/${code}?analyze=1`;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
$$('#ratingPills .pill').forEach(p => {
|
|||
|
|
p.onclick = () => {
|
|||
|
|
$$('#ratingPills .pill').forEach(x => x.classList.remove('active'));
|
|||
|
|
p.classList.add('active');
|
|||
|
|
curRating = p.dataset.r;
|
|||
|
|
load();
|
|||
|
|
};
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
load();
|