Split archive into four content tabs.

Move chart overview and calendar into their own tabs so trades and quotes stay focused.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-17 13:59:44 +08:00
parent b7f3a5c289
commit e70e6c7b13
3 changed files with 61 additions and 33 deletions
+12 -2
View File
@@ -7982,7 +7982,9 @@ body.funds-fullscreen-open {
color: var(--text);
}
.archive-quotes-panel,
.archive-main-panel {
.archive-main-panel,
.archive-viz-panel,
.archive-calendar-panel {
background: var(--panel);
border: 1px solid var(--border-soft);
border-radius: var(--radius);
@@ -8000,6 +8002,12 @@ body.funds-fullscreen-open {
padding: 12px;
overflow: visible;
}
.archive-viz-panel.is-active,
.archive-calendar-panel.is-active {
gap: 10px;
padding: 12px;
overflow: visible;
}
.archive-main-panel.is-active {
gap: 10px;
padding: 12px;
@@ -8993,7 +9001,9 @@ body.funds-fullscreen-open {
min-height: 0;
}
#page-archive .archive-quotes-panel,
#page-archive .archive-main-panel {
#page-archive .archive-main-panel,
#page-archive .archive-viz-panel,
#page-archive .archive-calendar-panel {
flex: 0 0 auto;
min-height: 0;
max-height: none;
+23 -13
View File
@@ -35,6 +35,8 @@
const elQuoteContent = document.getElementById("archive-quote-content");
const elQuoteSubmit = document.getElementById("archive-quote-submit");
const elContentTabs = document.getElementById("archive-content-tabs");
const elPanelViz = document.getElementById("archive-panel-viz");
const elPanelCalendar = document.getElementById("archive-panel-calendar");
const elPanelTrades = document.getElementById("archive-panel-trades");
const elPanelQuotes = document.getElementById("archive-panel-quotes");
const elQuoteDayTradesMeta = document.getElementById("archive-quote-day-trades-meta");
@@ -559,8 +561,8 @@
if (elQuoteDate) elQuoteDate.value = day;
if (elFilterSick) elFilterSick.checked = false;
syncPeriodUI();
setArchiveContentTab("trades");
void loadDailyTrades();
if (archiveContentTab === "quotes") void loadQuoteDayTrades();
},
});
calendarWidget.ensureMonth(calendarRefDate());
@@ -968,9 +970,9 @@
}
function setArchiveContentTab(tab) {
const next = tab === "quotes" ? "quotes" : "trades";
const allowed = { viz: 1, calendar: 1, trades: 1, quotes: 1 };
const next = allowed[tab] ? tab : "trades";
archiveContentTab = next;
const showQuotes = next === "quotes";
if (elContentTabs) {
elContentTabs.querySelectorAll(".archive-content-tab").forEach(function (btn) {
const on = btn.getAttribute("data-archive-tab") === next;
@@ -978,18 +980,26 @@
btn.setAttribute("aria-selected", on ? "true" : "false");
});
}
if (elPanelTrades) {
elPanelTrades.classList.toggle("is-active", !showQuotes);
elPanelTrades.hidden = showQuotes;
}
if (elPanelQuotes) {
elPanelQuotes.classList.toggle("is-active", showQuotes);
elPanelQuotes.hidden = !showQuotes;
}
if (showQuotes) {
const panels = [
[elPanelViz, "viz"],
[elPanelCalendar, "calendar"],
[elPanelTrades, "trades"],
[elPanelQuotes, "quotes"],
];
panels.forEach(function (pair) {
const el = pair[0];
const key = pair[1];
if (!el) return;
const on = key === next;
el.classList.toggle("is-active", on);
el.hidden = !on;
});
if (next === "quotes") {
syncQuoteDateFromTradingDay(false);
void loadQuoteDayTrades();
} else {
} else if (next === "calendar") {
void loadCalendar();
} else if (next === "trades") {
requestAnimationFrame(syncTradesLayout);
}
}
+26 -18
View File
@@ -15,7 +15,7 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
<link rel="stylesheet" href="/assets/app.css?v=20260717-quotes-feed" />
<link rel="stylesheet" href="/assets/app.css?v=20260717-archive-4tabs" />
<link rel="stylesheet" href="/assets/trade_stats_calendar.css?v=4" />
<link rel="stylesheet" href="/assets/account_risk_badge.css?v=4" />
<script src="/assets/account_risk_badge.js?v=4"></script>
@@ -445,7 +445,7 @@
<div id="page-archive" class="page hidden">
<div class="page-head">
<h1><span class="head-tag">IN</span> 内照明心</h1>
<p class="page-desc">复盘语录 · 当日交易记录 · 按需查看 K 线</p>
<p class="page-desc">统计分析 · 图表概览 · 交易日历 · 交易记录 · 复盘语录</p>
</div>
<div class="archive-toolbar toolbar">
<label class="chk-label archive-toolbar-desktop"><input type="checkbox" id="archive-filter-profit" /> 盈利单</label>
@@ -484,28 +484,36 @@
<h2>统计分析</h2>
</div>
<div id="archive-stats" class="archive-stats-bar"></div>
<details class="archive-acc-section archive-stats-viz-section" id="archive-stats-viz-section" open>
<summary class="archive-acc-summary">图表概览 <span id="archive-stats-viz-sub" class="archive-acc-sub"></span></summary>
<div id="archive-stats-charts" class="archive-stats-charts"></div>
</details>
</section>
<div class="archive-layout">
<div class="archive-content-tabs" id="archive-content-tabs" role="tablist" aria-label="内照明心分区">
<button type="button" class="archive-content-tab" role="tab" aria-selected="false" data-archive-tab="viz" id="archive-tab-viz">图表概览</button>
<button type="button" class="archive-content-tab" role="tab" aria-selected="false" data-archive-tab="calendar" id="archive-tab-calendar">交易日历</button>
<button type="button" class="archive-content-tab is-active" role="tab" aria-selected="true" data-archive-tab="trades" id="archive-tab-trades">交易记录</button>
<button type="button" class="archive-content-tab" role="tab" aria-selected="false" data-archive-tab="quotes" id="archive-tab-quotes">复盘语录</button>
</div>
<main class="archive-main-panel archive-tab-panel is-active" id="archive-panel-trades" role="tabpanel" aria-labelledby="archive-tab-trades">
<details class="archive-acc-section archive-calendar-section" id="archive-calendar-section" open>
<summary class="archive-acc-summary">交易日历 <span id="archive-cal-summary-sub" class="archive-acc-sub"></span></summary>
<div id="archive-calendar-wrap" class="trade-cal-wrap">
<div class="trade-cal-head">
<button type="button" id="archive-cal-prev" class="ghost" title="上一月"></button>
<span id="archive-cal-title" class="trade-cal-title"></span>
<button type="button" id="archive-cal-next" class="ghost" title="下一月"></button>
</div>
<div id="archive-calendar" class="trade-cal-grid-host" role="grid" aria-label="交易日历"></div>
<section class="archive-viz-panel archive-tab-panel" id="archive-panel-viz" role="tabpanel" aria-labelledby="archive-tab-viz" hidden>
<div class="archive-panel-head">
<h2>图表概览</h2>
<span id="archive-stats-viz-sub" class="archive-panel-meta"></span>
</div>
<div id="archive-stats-charts" class="archive-stats-charts"></div>
</section>
<section class="archive-calendar-panel archive-tab-panel" id="archive-panel-calendar" role="tabpanel" aria-labelledby="archive-tab-calendar" hidden>
<div class="archive-panel-head">
<h2>交易日历</h2>
<span id="archive-cal-summary-sub" class="archive-panel-meta"></span>
</div>
<div id="archive-calendar-wrap" class="trade-cal-wrap">
<div class="trade-cal-head">
<button type="button" id="archive-cal-prev" class="ghost" title="上一月"></button>
<span id="archive-cal-title" class="trade-cal-title"></span>
<button type="button" id="archive-cal-next" class="ghost" title="下一月"></button>
</div>
</details>
<div id="archive-calendar" class="trade-cal-grid-host" role="grid" aria-label="交易日历"></div>
</div>
</section>
<main class="archive-main-panel archive-tab-panel is-active" id="archive-panel-trades" role="tabpanel" aria-labelledby="archive-tab-trades">
<details id="archive-chart-section" class="archive-acc-section archive-chart-section archive-panel-desktop">
<summary class="archive-acc-summary">K 线图表 <span id="archive-chart-title" class="archive-acc-sub"></span></summary>
<div class="archive-chart-toolbar toolbar">
@@ -1348,7 +1356,7 @@
<script src="/assets/plan.js?v=20260614-plan-refresh"></script>
<script src="/assets/calculator.js?v=20260715-calc-tabs"></script>
<script src="/assets/trade_stats_calendar.js?v=3"></script>
<script src="/assets/archive.js?v=20260717-archive-tabs"></script>
<script src="/assets/archive.js?v=20260717-archive-4tabs"></script>
<script src="/assets/quotes.js?v=20260717-quotes-feed"></script>
<script src="/assets/funds.js?v=20260717-funds-scroll-fix"></script>
<script src="/assets/dashboard.js?v=20260708-options-expiry-cd"></script>