fix: ⓘ§按钮放表头第二行(spec-th-col两行布局),列宽保持无横向滚动条

This commit is contained in:
xxm
2026-08-17 02:48:40 +08:00
parent b930aa0f7a
commit 8f36517f9e
+12 -4
View File
@@ -35,6 +35,10 @@ body { background: #0f0f13; color: #e2e8f0; }
.spec-btn.colinfo { color: #58a6ff; background: rgba(88,166,255,0.1); }
.spec-btn.colinfo:hover { background: rgba(88,166,255,0.25); }
.spec-th-help { margin-left: 3px; display: inline-flex; gap: 3px; vertical-align: middle; }
.spec-th-col { display: flex; flex-direction: column; align-items: center; line-height: 1.1; }
.spec-th-label { white-space: nowrap; }
.spec-th-btns { display: inline-flex; gap: 3px; margin-top: 1px; }
.spec-th-btns .spec-btn { width: 15px; height: 15px; font-size: 10px; }
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: #0f0f13; }
::-webkit-scrollbar-thumb { background: #333; border-radius: 3px; }
@@ -2507,8 +2511,12 @@ function renderStrategyTable(strategies) {
};
const th = (key, label, cls, title, colKey) => {
const arrow = window._sortKey === key ? (window._sortDir === 'desc' ? '▼' : '▲') : '';
const helpBtns = colKey ? `<span class="spec-th-help"><span class="spec-btn colinfo" title="看这列是干嘛的" onclick="event.stopPropagation();showColumnHelp('${colKey}')">ⓘ</span><span class="spec-btn ai" title="看策略模块spec(接口/约束)" onclick="event.stopPropagation();showModuleHelp('strategy','ai')">§</span></span>` : '';
return `<th class="${cls || 'text-right'} px-2 py-1.5 cursor-pointer hover:text-slate-300 select-none" onclick="sortBy('${key}')" title="${title || '点击排序'}">${label}${helpBtns}${arrow ? ' ' + arrow : ''}</th>`;
const helpBtns = colKey ? `<span class="spec-btn colinfo" title="看这列是干嘛的" onclick="event.stopPropagation();showColumnHelp('${colKey}')">ⓘ</span><span class="spec-btn ai" title="看策略模块spec(接口/约束)" onclick="event.stopPropagation();showModuleHelp('strategy','ai')">§</span>` : '';
// 2026-08-17 老莫:ⓘ§按钮放第二行(spec-th-row),列名一行保持列宽,避免横向滚动条
const thInner = colKey
? `<div class="spec-th-col"><div class="spec-th-label">${label}${arrow ? ' ' + arrow : ''}</div><div class="spec-th-btns">${helpBtns}</div></div>`
: `${label}${arrow ? ' ' + arrow : ''}`;
return `<th class="${cls || 'text-right'} px-2 py-1 cursor-pointer hover:text-slate-300 select-none align-top" onclick="sortBy('${key}')" title="${title || '点击排序'}">${thInner}</th>`;
};
// 2026-08-13 温区自适应:按"适应温区"展开——每策略每温区一行
// 当前 = 当前温区激活(后端 s.current 已改为 regime_weights.active 判断);历史 = 其余,默认折叠
@@ -2739,8 +2747,8 @@ function renderStrategyTable(strategies) {
'</div>' +
'<div class="overflow-x-auto"><table class="w-full text-xs whitespace-nowrap"><thead><tr class="text-slate-500 border-b border-slate-700">' +
th('version', '版本', 'text-left', '策略版本标识', 'version') + th('name', '名称', 'text-left', '策略人话名称', 'name') +
'<th class="text-center px-2 py-1.5" title="长期10y/近期2y/当下1y 适应温区年化 vs 大盘">资格<span class="spec-th-help"><span class="spec-btn colinfo" title="看这列是干嘛的" onclick="event.stopPropagation();showColumnHelp(\'qualification\')">ⓘ</span><span class="spec-btn ai" title="看策略模块spec" onclick="event.stopPropagation();showModuleHelp(\'strategy\',\'ai\')">§</span></span></th>' +
'<th class="text-center px-2 py-1.5">可用<span class="spec-th-help"><span class="spec-btn colinfo" title="看这列是干嘛的" onclick="event.stopPropagation();showColumnHelp(\'manual_available\')">ⓘ</span><span class="spec-btn ai" title="看策略模块spec" onclick="event.stopPropagation();showModuleHelp(\'strategy\',\'ai\')">§</span></span></th>' +
'<th class="text-center px-2 py-1 align-top" title="长期10y/近期2y/当下1y 适应温区年化 vs 大盘"><div class="spec-th-col"><div class="spec-th-label">资格</div><div class="spec-th-btns"><span class="spec-btn colinfo" title="看这列是干嘛的" onclick="event.stopPropagation();showColumnHelp(\'qualification\')">ⓘ</span><span class="spec-btn ai" title="看策略模块spec" onclick="event.stopPropagation();showModuleHelp(\'strategy\',\'ai\')">§</span></div></div></th>' +
'<th class="text-center px-2 py-1 align-top"><div class="spec-th-col"><div class="spec-th-label">可用</div><div class="spec-th-btns"><span class="spec-btn colinfo" title="看这列是干嘛的" onclick="event.stopPropagation();showColumnHelp(\'manual_available\')">ⓘ</span><span class="spec-btn ai" title="看策略模块spec" onclick="event.stopPropagation();showModuleHelp(\'strategy\',\'ai\')">§</span></div></div></th>' +
th('win_rate', '胜率', 'text-right', '盈利笔数占比', 'win_rate') + th('avg_profit', '平均收益', 'text-right', '每笔平均收益率', 'avg_profit') + th('trades', '成交/信号', 'text-right', '实际入场笔数 / 触发信号数(组合模拟10等分仓位下实际成交)', 'trades') +
th('hold', '均持仓', 'text-right', '平均持仓天数', 'hold') + th('cagr', '年化', 'text-right', '年化收益率', 'cagr') + th('composite', '综合', 'text-right', '多维度综合评分', 'composite') +
th('sharpe', '夏普', 'text-right', '每单位波动超额收益', 'sharpe') + th('profit_factor', '盈亏比', 'text-right', '总盈利/总亏损', 'profit_factor') +