fix: 市场Tab候选管道JS语法错误
This commit is contained in:
+40
-4
@@ -369,11 +369,11 @@ function refreshMarketData() {
|
||||
Promise.all([
|
||||
fetchJSON('/api/market'),
|
||||
fetchJSON('/api/signals'),
|
||||
]).then(([mkt, signals]) => {
|
||||
fetchJSON('/api/candidates'),
|
||||
]).then(([mkt, signals, candidates]) => {
|
||||
const sectors = mkt.sectors || [];
|
||||
const sigs = signals || [];
|
||||
const xiaoguo = sigs.filter(s => s.source === 'xiaoguo');
|
||||
const trend = sigs.filter(s => s.source !== 'xiaoguo');
|
||||
const cands = candidates || [];
|
||||
el.innerHTML = `
|
||||
<div class="grid grid-cols-1 lg:grid-cols-3 gap-4 mb-4">
|
||||
<div class="card p-4">
|
||||
@@ -404,7 +404,43 @@ function refreshMarketData() {
|
||||
`).join('') : '<div class="text-xs text-slate-500">暂无</div>'}
|
||||
</div>
|
||||
</div>
|
||||
<div class="card p-4">
|
||||
<div class="card p-4 mb-4">
|
||||
<h3 class="text-sm font-semibold mb-2">🎯 主力建仓候选 (${cands.length})</h3>
|
||||
${cands.length ? `
|
||||
<div class="overflow-x-auto">
|
||||
<table class="w-full text-xs">
|
||||
<thead><tr class="text-slate-400">
|
||||
<th class="text-left p-1">代码</th><th class="text-left p-1">名称</th>
|
||||
<th class="text-center p-1">S2</th><th class="text-center p-1">S3</th>
|
||||
<th class="text-center p-1">S4</th><th class="text-center p-1">S5</th>
|
||||
<th class="text-center p-1">终评</th><th class="text-left p-1">理由</th>
|
||||
<th class="text-left p-1">状态</th>
|
||||
</tr></thead>
|
||||
<tbody>${cands.slice(0,15).map(c => {
|
||||
const s2 = c.pass_s2 ? '✅' : c.score_2nd ? '❌' : '⏳';
|
||||
const s3 = c.pass_s3 ? '✅' : c.score_3rd ? '❌' : '⏳';
|
||||
const s4 = c.pass_s4 ? '✅' : c.score_4th ? '❌' : '⏳';
|
||||
const s5 = c.pass_s5 ? '✅' : c.score_5th ? '❌' : '⏳';
|
||||
const status = c.promoted ? '⭐已入自选' : '📋候选';
|
||||
const log = c.log ? JSON.parse(c.log) : [];
|
||||
const logSummary = log.slice(-2).map(function(l){ return 'S' + l.stage + ':' + (l.passed ? '✅' : '❌'); }).join(' ');
|
||||
return '<tr class="border-b border-slate-800/50 hover:bg-slate-800/20">' +
|
||||
'<td class="p-1 font-mono">' + c.code + '</td>' +
|
||||
'<td class="p-1">' + c.name + '</td>' +
|
||||
'<td class="p-1 text-center">' + s2 + '</td>' +
|
||||
'<td class="p-1 text-center">' + s3 + '</td>' +
|
||||
'<td class="p-1 text-center">' + s4 + '</td>' +
|
||||
'<td class="p-1 text-center">' + s5 + '</td>' +
|
||||
'<td class="p-1 text-center font-bold">' + (c.score_final||'-') + '</td>' +
|
||||
'<td class="p-1 text-slate-400 max-w-[200px] truncate">' + (c.reason||'').slice(0,50) + '</td>' +
|
||||
'<td class="p-1"><span class="' + (c.promoted ? 'text-yellow-400' : 'text-slate-400') + '">' + status + '</span>' +
|
||||
'<span class="text-slate-600 block text-[10px]">' + logSummary + '</span></td>' +
|
||||
'</tr>';
|
||||
}).join('')}</tbody>
|
||||
</table>
|
||||
</div>
|
||||
` : '<div class="text-xs text-slate-500">暂无候选(开盘后自动扫描)</div>'}
|
||||
</div>
|
||||
<h3 class="text-sm font-semibold mb-2">📋 全部板块排行(${sectors.length})</h3>
|
||||
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-1 max-h-48 overflow-y-auto">
|
||||
${sectors.map(s => `
|
||||
|
||||
Reference in New Issue
Block a user