From a9c40097b3cca676e0ab9d1c1f0b5fcec04ed8f1 Mon Sep 17 00:00:00 2001 From: dekun Date: Thu, 11 Jun 2026 20:24:30 +0800 Subject: [PATCH] feat(hub): time-close countdown in monitor position table Show timed-close badge with live countdown next to contract name in the grid holdings table. Co-authored-by: Cursor --- manual_trading_hub/static/app.css | 10 ++++++++-- manual_trading_hub/static/app.js | 5 ++++- manual_trading_hub/static/index.html | 4 ++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/manual_trading_hub/static/app.css b/manual_trading_hub/static/app.css index d4cfd81..cf88276 100644 --- a/manual_trading_hub/static/app.css +++ b/manual_trading_hub/static/app.css @@ -1024,7 +1024,8 @@ body.market-chart-fs-open { } .hub-pos-card .pos-symbol-time-close, -.hub-mini-title .pos-symbol-time-close { +.hub-mini-title .pos-symbol-time-close, +.td-symbol .pos-symbol-time-close { display: inline-flex; align-items: center; gap: 4px; @@ -1038,7 +1039,8 @@ body.market-chart-fs-open { vertical-align: middle; } .hub-pos-card .pos-symbol-time-close .pos-time-close-cd, -.hub-mini-title .pos-symbol-time-close .pos-time-close-cd { +.hub-mini-title .pos-symbol-time-close .pos-time-close-cd, +.td-symbol .pos-symbol-time-close .pos-time-close-cd { font-variant-numeric: tabular-nums; letter-spacing: 0.03em; } @@ -1166,6 +1168,10 @@ body.market-chart-fs-open { .data-table .td-symbol { white-space: nowrap; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 4px 6px; } .hub-pos-card .pos-grid { diff --git a/manual_trading_hub/static/app.js b/manual_trading_hub/static/app.js index 744696d..df08084 100644 --- a/manual_trading_hub/static/app.js +++ b/manual_trading_hub/static/app.js @@ -2459,6 +2459,9 @@ const tpAttr = esc(String(tpsl.tp)).replace(/"/g, """); const mktAttrs = marketOpenBtnAttrs(exchangeId, exchangeKey, x.symbol, x, monitorOrder, trendPlan); const symBeBadge = beSecured ? ` ${breakevenBadgeHtml()}` : ""; + const mo = monitorOrder || {}; + const tcBadge = + !isTrendContext(mo, trendPlan) && mo.time_close_enabled ? timeCloseSymbolBadgeHtml(mo) : ""; const actionCell = compact ? `` : `
@@ -2469,7 +2472,7 @@ ? `${fmt(x.unrealized_pnl, 2)}` : ""; return ` - ${symBeBadge} + ${tcBadge}${symBeBadge} ${renderDirectionHtml(x.side)} ${fmtEntryPrice(x, tickMap)} ${fmtMarkPrice(x, tickMap)} diff --git a/manual_trading_hub/static/index.html b/manual_trading_hub/static/index.html index 3b74464..ded6bde 100644 --- a/manual_trading_hub/static/index.html +++ b/manual_trading_hub/static/index.html @@ -15,7 +15,7 @@ - + @@ -589,6 +589,6 @@ - +