fix: merge B-157 and B-158 shell review blockers
Keep 1024-1439 broken/seal metrics in the detail panel, fold desktop admin actions into the ellipsis menu, and fit the 13-column limit pool at 1600 without hiding the data date. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
co-authored by
Cursor
multica-agent
parent
d1852657fd
commit
4c6cccd9a4
@@ -89,7 +89,10 @@ function renderDashboard() {
|
||||
const { meta, overview, ladders, sectors } = state.dashboard;
|
||||
animateMetric("tapeUp", overview.up_count, (value) => Math.round(value));
|
||||
animateMetric("tapeDown", overview.down_count, (value) => Math.round(value));
|
||||
setText("tapeLimit", `${overview.limit_up_count} / 跌停 ${overview.limit_down_count}`);
|
||||
animateMetric("tapeLimit", overview.limit_up_count, (value) => `${Math.round(value)} 家`);
|
||||
animateMetric("tapeLimitDown", overview.limit_down_count, (value) => `${Math.round(value)} 家`);
|
||||
animateMetric("detailBroken", overview.broken_count, (value) => `${Math.round(value)} 家`);
|
||||
animateMetric("detailSealRate", overview.seal_rate, (value) => `${formatNumber(value, 1)}%`);
|
||||
animateMetric("tapeAmount", overview.amount_billion, (value) => `${formatNumber(value, 1)} 亿`);
|
||||
animateMetric("limitUpMetric", overview.limit_up_count, (value) => `${Math.round(value)} 家`);
|
||||
animateMetric("limitDownMetric", overview.limit_down_count, (value) => `${Math.round(value)} 家`);
|
||||
@@ -98,22 +101,29 @@ function renderDashboard() {
|
||||
animateMetric("amountMetric", overview.amount_billion, (value) => `${formatNumber(value, 1)} 亿`);
|
||||
setText("dataDateMetric", dashboardDataTimestamp(meta));
|
||||
animateMetric("sentimentScore", overview.sentiment_score, (value) => Math.round(value));
|
||||
setText("sentimentText", sentimentLabel(overview.sentiment_score));
|
||||
const sentimentChip = document.querySelector("#sentimentText");
|
||||
if (sentimentChip) {
|
||||
const label = sentimentLabel(overview.sentiment_score);
|
||||
sentimentChip.classList.toggle("is-hot", label === "情绪高涨");
|
||||
sentimentChip.classList.toggle("is-strong", label === "情绪偏强");
|
||||
sentimentChip.classList.toggle("is-cold", label === "情绪冰点" || label === "情绪偏弱");
|
||||
}
|
||||
animateMetric("detailSentimentScore", overview.sentiment_score, (value) => Math.round(value));
|
||||
const moodLabel = sentimentLabel(overview.sentiment_score);
|
||||
setText("sentimentText", moodLabel);
|
||||
setText("detailSentimentText", moodLabel);
|
||||
document.querySelectorAll("#sentimentText, #detailSentimentText").forEach((sentimentChip) => {
|
||||
sentimentChip.classList.toggle("is-hot", moodLabel === "情绪高涨");
|
||||
sentimentChip.classList.toggle("is-strong", moodLabel === "情绪偏强");
|
||||
sentimentChip.classList.toggle("is-cold", moodLabel === "情绪冰点" || moodLabel === "情绪偏弱");
|
||||
});
|
||||
const pageSubtitle = document.querySelector("#currentPageSubtitle");
|
||||
const activePage = window.XiaobaiPages?.get(state.activeView);
|
||||
if (pageSubtitle && activePage?.id !== "mentorView") {
|
||||
const groupLabel = activePage?.group === "market"
|
||||
? "市场复盘"
|
||||
: activePage?.group === "personal" ? "个人" : "智能工具";
|
||||
if (pageSubtitle) {
|
||||
const dateText = displayCompactDate(meta.trade_date);
|
||||
pageSubtitle.textContent = dateText === "--" ? groupLabel : `${groupLabel} · ${dateText}`;
|
||||
if (activePage?.id === "mentorView") {
|
||||
pageSubtitle.textContent = dateText === "--"
|
||||
? "与不同交易思维模型持续对话 · 数据日期 --"
|
||||
: `与不同交易思维模型持续对话 · 数据日期 ${dateText}`;
|
||||
} else {
|
||||
const groupLabel = activePage?.group === "market"
|
||||
? "市场复盘"
|
||||
: activePage?.group === "personal" ? "个人" : "智能工具";
|
||||
pageSubtitle.textContent = dateText === "--" ? groupLabel : `${groupLabel} · ${dateText}`;
|
||||
}
|
||||
}
|
||||
updateSentimentGauge(overview.sentiment_score);
|
||||
setText("updatedAt", `${dashboardSourceLabel(meta)} · 更新 ${formatTimestamp(meta.updated_at)}`);
|
||||
|
||||
Reference in New Issue
Block a user