/* 财经新闻 */
let page = 1, total = 0;
async function load(p) {
if (p) page = p;
const q = new URLSearchParams({ keyword: $('#kw').value.trim(), category: $('#cat').value, page });
try {
const d = await api('/api/news?' + q.toString());
total = d.total;
render(d.items);
$('#pageInfo').textContent = `第 ${page} / ${Math.max(1, Math.ceil(total / 15))} 页`;
$('#count').textContent = `共 ${total} 条`;
$('#prevBtn').disabled = page <= 1;
$('#nextBtn').disabled = page * 15 >= total;
} catch (e) {
$('#listBox').innerHTML = '
加载失败
';
}
}
function render(items) {
if (!items.length) { $('#listBox').innerHTML = '无匹配新闻
'; return; }
$('#listBox').innerHTML = items.map(n => `
${escapeHtml(n.title)}
${n.category}
${n.sentiment > 0 ? '利好' : n.sentiment < 0 ? '利空' : '中性'}
${escapeHtml(n.source)}${n.publish_date}
${escapeHtml(n.content)}
`).join('');
}
async function showDetail(id) {
try {
const d = await api('/api/news/' + id);
const n = d.news;
const stocks = (d.stocks || []).map(s => `${s.name}(${s.code})`).join(' · ') || '无';
openModal(`
${escapeHtml(n.title)}
${n.category}
${n.sentiment > 0 ? '利好' : n.sentiment < 0 ? '利空' : '中性'}(${Number(n.sentiment).toFixed(2)})
${escapeHtml(n.source)}${n.publish_date}
${escapeHtml(n.content)}
关联股票:${stocks}
`);
} catch (e) { toast('加载失败'); }
}
$('#kw').addEventListener('keydown', e => { if (e.key === 'Enter') load(1); });
$('#kw').addEventListener('input', debounce(() => load(1), 400));
$('#cat').onchange = () => load(1);
load(1);