Hub funds and dashboard: include OKX options balances in USDT totals.

Merge options USDC/USDT at 1:1 into fund overview snapshots, dashboard aggregation, and monitor board totals while keeping a separate options breakdown in the UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-07 13:06:01 +08:00
parent 6cc3382526
commit 3163912266
9 changed files with 362 additions and 21 deletions
+34 -3
View File
@@ -60,6 +60,8 @@
const floating = Number(totals.float_pnl_u);
const funding = totals.total_funding_usdt;
const trading = totals.total_trading_usdt;
const optionsFloat = Number(totals.options_float_pnl_u);
const optionsPos = totals.options_open_position_count;
elKpi.innerHTML = [
kpiCard("交易日", esc(totals.trading_day || "—"), ""),
kpiCard("平仓盈亏", pnlSigned(closed, 2), pnlClass(closed)),
@@ -76,10 +78,20 @@
? `${fmt(Number(funding) + Number(trading), 2)}U`
: "—",
"",
`资金 ${fmt(funding, 2)} + 交易 ${fmt(trading, 2)}`
`永续+期权 USDT 等价 · 资金 ${fmt(funding, 2)} + 交易 ${fmt(trading, 2)}`
),
kpiCard("实盘持仓", `${totals.open_position_count || 0}`, ""),
].join("");
kpiCard(
"实盘持仓",
`${totals.open_position_count || 0}`,
"",
Number.isFinite(optionsPos) && optionsPos > 0 ? `含期权 ${optionsPos}` : ""
),
Number.isFinite(optionsFloat) && Math.abs(optionsFloat) > 1e-9
? kpiCard("期权浮盈", pnlSigned(optionsFloat, 2), pnlClass(optionsFloat))
: "",
]
.filter(Boolean)
.join("");
}
function kpiCard(label, value, valCls, sub) {
@@ -183,6 +195,24 @@
alert && barW > 0
? `<div class="dash-loss-bar" title="占资金合计 ${fmt(lossPct, 2)}%"><i style="width:${barW}%"></i></div>`
: "";
const optFunding = ac.options_funding_usdt;
const optTrading = ac.options_trading_usdt;
const optFloat = Number(ac.options_float_pnl_u);
const optPos = Number(ac.options_open_position_count) || 0;
const optMetrics =
optFunding != null || optTrading != null || optPos > 0
? `<div class="dash-ac-metric"><span>期权资金</span><strong>${fmt(
optFunding != null && optTrading != null
? Number(optFunding) + Number(optTrading)
: null,
2
)}U</strong></div>
<div class="dash-ac-metric"><span>期权持仓</span><strong>${optPos} 仓</strong></div>
<div class="dash-ac-metric"><span>期权浮盈</span><strong class="${pnlClass(optFloat)}">${pnlSigned(
optFloat,
2
)}</strong></div>`
: "";
return `<article class="dash-ac-card${alert ? " is-alert" : ""}${unmon ? " is-unmon" : ""}">
<div class="dash-ac-top">
<div class="dash-ac-name">${esc(ac.name || "—")}</div>
@@ -195,6 +225,7 @@
<div class="dash-ac-metric"><span>今日盈亏</span><strong class="${pnlClass(pnl)}">${pnlSigned(pnl, 2)}</strong></div>
<div class="dash-ac-metric"><span>平仓笔数</span><strong>${Number(ac.closed_count) || 0}</strong></div>
<div class="dash-ac-metric"><span>浮盈亏</span><strong class="${pnlClass(floatPnl)}">${pnlSigned(floatPnl, 2)}</strong></div>
${optMetrics}
</div>
${lossBar}
${renderAccountDetail(ac)}