fix(HEL-114): P3a验收三条整改——选股抽屉分类胶囊横排+策略列表辨识度/聊天输入区键盘避让/追问与预置胶囊渲染

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
施工员
2026-08-25 01:03:27 +08:00
co-authored by multica-agent
parent afd05cecda
commit 72141098b7
3 changed files with 39 additions and 3 deletions
+31 -1
View File
@@ -2323,6 +2323,8 @@
white-space: nowrap;
}
.m-chat-preset-list .m-source-tab {
flex: 0 0 auto;
white-space: nowrap;
border: 1px solid var(--border-strong);
background: var(--surface);
color: var(--text-secondary);
@@ -2344,6 +2346,11 @@
max-width: 82%;
}
.m-chat-followup-row .m-source-tab {
flex: 0 0 auto;
white-space: nowrap;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
border: 1px solid var(--border-strong);
background: var(--surface);
color: var(--text-secondary);
@@ -2374,7 +2381,6 @@
border-top: 1px solid var(--border);
/* 键盘弹起时由 --m-keyboard-inset 推上 */
transform: translateY(calc(-1 * var(--m-keyboard-inset, 0px)));
padding-bottom: calc(8px + var(--mobile-safe-bottom) + var(--m-keyboard-inset, 0px));
}
.m-chat-input-wrap {
@@ -2613,6 +2619,29 @@
margin-bottom: 8px;
flex-wrap: wrap;
}
.m-screener-drawer-cats .m-source-tab {
flex: 0 0 auto;
white-space: nowrap;
height: 32px;
border-radius: 999px;
padding: 0 14px;
font-size: 13px;
}
.m-screener-drawer-section {
display: flex;
align-items: baseline;
justify-content: space-between;
margin: 4px 0 8px;
}
.m-screener-drawer-section-title {
font-size: var(--font-size-label);
font-weight: 600;
color: var(--text-secondary);
}
.m-screener-drawer-section-count {
font-size: 12px;
color: var(--text-tertiary);
}
.m-screener-drawer-list {
display: flex;
flex-direction: column;
@@ -2633,6 +2662,7 @@
color: var(--text-primary);
}
.m-screener-drawer-row:active { background: var(--surface-hover); }
.m-screener-drawer-row.is-current { background: var(--surface-selected); }
.m-screener-drawer-main {
flex: 1 1 auto;
min-width: 0;
+3 -1
View File
@@ -39,7 +39,9 @@
app.style.setProperty("--m-keyboard-inset", "0px");
return;
}
const inset = Math.max(0, global.innerHeight - visual.height - visual.offsetTop);
// 键盘高度 = 布局视口高度 - 可视视口高度。iOS 弹键盘时会同时抬升 offsetTop,
// 若再扣 offsetTop 会把 inset 算成 0,导致输入区/底栏不避让,故只按高度差计算。
const inset = Math.max(0, global.innerHeight - visual.height);
app.style.setProperty("--m-keyboard-inset", inset + "px");
}
+5 -1
View File
@@ -2080,7 +2080,7 @@
const status = screenerStrategyStatusTextFor(s, state.screener.data);
const statusCls = status === "数据不足" ? 'm-strategy-status--warn' : (status === "暂无信号" || status === "等待盘后" ? 'm-strategy-status--muted' : '');
const regimeText = screenerStrategyRegimeText(s);
return '<button class="m-screener-drawer-row" type="button" data-screener-row="' + escapeHtml(String(s.id)) + '">' +
return '<button class="m-screener-drawer-row' + (isCurrent ? ' is-current' : '') + '" type="button" data-screener-row="' + escapeHtml(String(s.id)) + '">' +
'<span class="m-screener-drawer-main">' +
'<span class="m-screener-drawer-name">' + escapeHtml(s.name) + (isCurrent ? ' <span class="m-strategy-check">' + icon("check", 16) + '</span>' : '') + '</span>' +
(regimeText ? '<small class="m-screener-drawer-sub">' + escapeHtml(regimeText) + '</small>' : '') +
@@ -2090,6 +2090,10 @@
}).join("") || '<div class="m-state m-state--error"><p>无匹配策略</p></div>';
return '<div class="m-form-field m-screener-drawer-search"><span class="m-screener-drawer-search-icon">' + icon("search", 16) + '</span><input type="search" placeholder="搜索策略" data-screener-drawer-search></div>' +
'<div class="m-source-tabs m-screener-drawer-cats" role="tablist">' + catPills + '</div>' +
'<div class="m-screener-drawer-section">' +
'<span class="m-screener-drawer-section-title">选择策略</span>' +
'<span class="m-screener-drawer-section-count">' + filtered.length + ' 套</span>' +
'</div>' +
'<div class="m-screener-drawer-list">' + rows + '</div>';
}