`;
+ }
let tpslPending = null;
let lastMonitorRows = [];
let expandedExchangeId = sessionStorage.getItem("hub_expanded_ex") || "";
@@ -2218,7 +2237,11 @@
止盈${formatTpCellValue(tp, tpMonitored, symbol, tickMap)}
盈亏比${rr != null ? fmt(rr, 2) + ":1" : "—"}
张数${fmt(pos.contracts, 4)}
- 浮盈亏${pnlText}
+ ${
+ showAccountPnlPref()
+ ? `浮盈亏${pnlText}
`
+ : ""
+ }
`;
+ const pnlTd = showAccountPnlPref()
+ ? `${fmt(x.unrealized_pnl, 2)} | `
+ : "";
return `
| ${symBeBadge} |
${renderDirectionHtml(x.side)} |
${fmtEntryPrice(x, tickMap)} |
${fmtMarkPrice(x, tickMap)} |
${fmt(x.contracts, 4)} |
- ${fmt(x.unrealized_pnl, 2)} |
+ ${pnlTd}
${actionCell} |
`;
}
@@ -2354,7 +2380,7 @@
);
return `
@@ -2442,13 +2468,14 @@
)
.join("");
return `
`;
}
function renderAccountStatRow(row, ag) {
+ if (!showAccountPnlPref()) return "";
const upnl = ag.total_unrealized_pnl;
return `
资金账户
${fmt(row.funding_usdt, 2)} U
@@ -2763,7 +2790,11 @@
${esc(row.name)}
-
${fmt(upnl, 2)} U
+ ${
+ showAccountPnlPref()
+ ? `
${fmt(upnl, 2)} U
`
+ : ""
+ }
${esc(posLine)}
${strategyStats}
@@ -2977,6 +3008,7 @@
function loadSettingsUI() {
loadSettingsMetaLine();
loadSettings().then((data) => {
+ syncDisplayPrefsUI(data);
renderSettingsList(data);
});
}
@@ -3010,8 +3042,12 @@
function collectSettingsFromUI() {
const rows = [...document.querySelectorAll("#settings-list .settings-card")];
+ const pnlCb = document.getElementById("pref-show-account-pnl");
return {
version: 1,
+ display: {
+ show_account_pnl: pnlCb ? !!pnlCb.checked : true,
+ },
exchanges: rows.map((card) => {
const caps = [];
if (card.querySelector(".cap-key").checked) caps.push("key");
@@ -3045,11 +3081,13 @@
showToast("设置已保存(已写入 hub_settings.json)");
if (j.settings) {
settingsCache = j.settings;
+ syncDisplayPrefsUI(j.settings);
renderSettingsList(j.settings);
loadSettingsMetaLine();
} else {
await loadSettingsUI();
}
+ if (lastMonitorRows.length) renderMonitorGrid(lastMonitorRows);
} else showToast("保存失败", true);
} catch (e) {
showToast(String(e), true);
@@ -3526,9 +3564,13 @@
initAuth().then((ok) => {
if (!ok) return;
initShellNav();
- setActiveNav();
- if (currentPage() === "settings") {
- loadSettings().catch(() => {});
- }
+ loadSettings()
+ .then((data) => {
+ syncDisplayPrefsUI(data);
+ })
+ .catch(() => {})
+ .finally(() => {
+ setActiveNav();
+ });
});
})();
diff --git a/manual_trading_hub/static/index.html b/manual_trading_hub/static/index.html
index 857469e..665f838 100644
--- a/manual_trading_hub/static/index.html
+++ b/manual_trading_hub/static/index.html
@@ -466,6 +466,14 @@
+
+
监控区显示
+
+
关闭后监控区不显示上述数值;保存至 hub_settings.json,换浏览器同样生效。
+
diff --git a/strategy_templates/key_monitor_panel.html b/strategy_templates/key_monitor_panel.html
index 6996ae8..8a723e0 100644
--- a/strategy_templates/key_monitor_panel.html
+++ b/strategy_templates/key_monitor_panel.html
@@ -9,14 +9,19 @@
.key-panel-scroll.panel-scroll.pos-list{
display:block;
flex:1 1 auto;
- min-height:200px;
- max-height:none;
+ min-height:0;
overflow-x:hidden;
overflow-y:auto;
padding-bottom:6px;
-webkit-overflow-scrolling:touch;
scrollbar-gutter:stable;
}
+.key-monitor-panel-scroll{min-height:200px}
+.key-history-panel-scroll{
+ flex:0 0 auto;
+ max-height:calc(8 * 42px + 7 * 8px);
+ min-height:calc(3 * 42px + 2 * 8px);
+}
.key-panel-scroll.panel-scroll.pos-list .key-row-collapse{flex-shrink:0}
.key-panel-scroll.panel-scroll.pos-list::-webkit-scrollbar{width:8px}
.key-panel-scroll.panel-scroll.pos-list::-webkit-scrollbar-thumb{background:#3a4660;border-radius:4px}
@@ -25,16 +30,26 @@
.key-row-collapse:not([open]){overflow:hidden}
.key-row-collapse[open]{overflow:visible}
.key-row-collapse+.key-row-collapse{margin-top:8px}
-.key-row-collapse-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;padding:10px 12px;cursor:pointer;list-style:none;font-size:.8rem;color:#c5cde0;line-height:1.45}
+.key-row-collapse-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;cursor:pointer;list-style:none;font-size:.8rem;color:#c5cde0;line-height:1.45}
.key-row-collapse-summary::-webkit-details-marker{display:none}
-.key-row-collapse-summary::before{content:"▸";flex:0 0 auto;color:#6d7a99;margin-top:1px;transition:transform .15s ease}
+.key-row-collapse-summary::before{content:"▸";flex:0 0 auto;color:#6d7a99;transition:transform .15s ease}
.key-row-collapse[open]>.key-row-collapse-summary::before{transform:rotate(90deg)}
-.key-row-summary-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
-.key-row-summary-title{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
+.key-row-summary-main{flex:1;min-width:0;display:flex;align-items:center;justify-content:space-between;gap:10px}
+.key-row-summary-title{display:flex;align-items:center;gap:6px;flex:0 1 auto;flex-wrap:wrap;min-width:0}
.key-row-summary-title strong{font-size:.88rem;color:#fff}
.key-row-summary-line{color:#9aa8c4;font-size:.76rem;word-break:break-word}
-.key-row-summary-live{color:#8fc8ff;font-size:.74rem}
+.key-row-summary-live{
+ flex:1 1 auto;
+ min-width:0;
+ color:#8fc8ff;
+ font-size:.72rem;
+ text-align:right;
+ white-space:nowrap;
+ overflow:hidden;
+ text-overflow:ellipsis;
+}
.key-row-summary-live.key-row-summary-pending{color:#4cd97f;font-weight:600}
+.key-history-panel-scroll .key-row-summary-main{justify-content:flex-start}
.key-row-summary-actions{flex:0 0 auto;display:flex;gap:6px;align-items:center}
.key-row-collapse-body{padding:0 12px 16px;border-top:1px solid #232b3d}
.key-row-collapse-body .pos-meta{margin-top:10px;margin-bottom:10px}
@@ -150,7 +165,7 @@
{% include 'key_monitor_rule_tips.html' %}
-