Fix breakeven badge still showing after roll lowers stop loss.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-10 16:52:29 +08:00
parent edfe935fb4
commit 02472f19cb
10 changed files with 161 additions and 17 deletions
+35 -3
View File
@@ -844,9 +844,41 @@ function formatRrRatio(rr){
return `${body}:1`;
}
function paintBreakevenBadge(orderId, secured){
function resolveSlBreakevenSecured(orderId, snap){
if(!snap) return false;
const et = snap.exchange_tpsl;
const slSlot = et && et.sl ? et.sl : null;
let slPx = NaN;
if(slSlot){
const raw = slSlot.trigger_price != null ? slSlot.trigger_price : slSlot.trigger_display;
slPx = raw != null && raw !== "" ? Number(raw) : NaN;
}
if(!Number.isFinite(slPx) || slPx <= 0){
slPx = snap.stop_loss != null && snap.stop_loss !== "" ? Number(snap.stop_loss) : NaN;
}
let entry = snap.avg_entry_price != null && snap.avg_entry_price !== "" ? Number(snap.avg_entry_price) : NaN;
let direction = snap.direction ? String(snap.direction).toLowerCase() : "";
const card = document.getElementById(`order-row-${orderId}`);
if(card){
if(!direction) direction = String(card.getAttribute("data-direction") || "long").toLowerCase();
if(!Number.isFinite(entry)){
const ent = card.getAttribute("data-entry");
if(ent){
const n = Number(String(ent).replace(/,/g, ""));
if(Number.isFinite(n) && n > 0) entry = n;
}
}
}
if(Number.isFinite(slPx) && Number.isFinite(entry) && entry > 0){
if(direction === "short") return slPx <= entry;
return slPx >= entry;
}
return snap.sl_breakeven_secured === true || snap.sl_breakeven_secured === 1;
}
function paintBreakevenBadge(orderId, snap){
const wrap = document.getElementById(`order-be-wrap-${orderId}`);
if(!wrap) return;
const secured = (snap && typeof snap === "object") ? resolveSlBreakevenSecured(orderId, snap) : !!snap;
wrap.style.display = secured ? "inline-flex" : "none";
}
function paintPlanTpslDisplay(orderId, snap){
@@ -1001,7 +1033,7 @@ function refreshPriceSnapshot(){
paintLatestRiskDisplay(o.id, o);
paintContractsDisplay(o.id, o);
paintTpProfitDisplay(o.id, o);
paintBreakevenBadge(o.id, o.sl_breakeven_secured);
paintBreakevenBadge(o.id, o);
if(o.exchange_tpsl) paintExchangeTpslRow(o.id, o.exchange_tpsl);
paintPlanTpslDisplay(o.id, o);
if(window.TimeCloseUI) TimeCloseUI.paintOrderTimeClose(o);
@@ -1383,7 +1415,7 @@ function refreshPriceSnapshotConditional(){
}
const rrEl = document.getElementById(`order-rr-${o.id}`);
if(rrEl) rrEl.innerText = formatRrRatio(o.rr_ratio);
paintBreakevenBadge(o.id, o.sl_breakeven_secured);
paintBreakevenBadge(o.id, o);
paintExchangeTpslRow(o.id, o.exchange_tpsl || {});
paintPlanTpslDisplay(o.id, o);
if(window.TimeCloseUI) TimeCloseUI.paintOrderTimeClose(o);
+35 -3
View File
@@ -1451,9 +1451,41 @@ function formatRrRatio(rr){
return `${body}:1`;
}
function paintBreakevenBadge(orderId, secured){
function resolveSlBreakevenSecured(orderId, snap){
if(!snap) return false;
const et = snap.exchange_tpsl;
const slSlot = et && et.sl ? et.sl : null;
let slPx = NaN;
if(slSlot){
const raw = slSlot.trigger_price != null ? slSlot.trigger_price : slSlot.trigger_display;
slPx = raw != null && raw !== "" ? Number(raw) : NaN;
}
if(!Number.isFinite(slPx) || slPx <= 0){
slPx = snap.stop_loss != null && snap.stop_loss !== "" ? Number(snap.stop_loss) : NaN;
}
let entry = snap.avg_entry_price != null && snap.avg_entry_price !== "" ? Number(snap.avg_entry_price) : NaN;
let direction = snap.direction ? String(snap.direction).toLowerCase() : "";
const card = document.getElementById(`order-row-${orderId}`);
if(card){
if(!direction) direction = String(card.getAttribute("data-direction") || "long").toLowerCase();
if(!Number.isFinite(entry)){
const ent = card.getAttribute("data-entry");
if(ent){
const n = Number(String(ent).replace(/,/g, ""));
if(Number.isFinite(n) && n > 0) entry = n;
}
}
}
if(Number.isFinite(slPx) && Number.isFinite(entry) && entry > 0){
if(direction === "short") return slPx <= entry;
return slPx >= entry;
}
return snap.sl_breakeven_secured === true || snap.sl_breakeven_secured === 1;
}
function paintBreakevenBadge(orderId, snap){
const wrap = document.getElementById(`order-be-wrap-${orderId}`);
if(!wrap) return;
const secured = (snap && typeof snap === "object") ? resolveSlBreakevenSecured(orderId, snap) : !!snap;
wrap.style.display = secured ? "inline-flex" : "none";
}
function paintPlanTpslDisplay(orderId, snap){
@@ -1638,7 +1670,7 @@ function refreshPriceSnapshot(){
paintLatestRiskDisplay(o.id, o);
paintContractsDisplay(o.id, o);
paintTpProfitDisplay(o.id, o);
paintBreakevenBadge(o.id, o.sl_breakeven_secured);
paintBreakevenBadge(o.id, o);
if(o.exchange_tpsl) paintExchangeTpslRow(o.id, o.exchange_tpsl);
paintPlanTpslDisplay(o.id, o);
if(window.TimeCloseUI) TimeCloseUI.paintOrderTimeClose(o);
@@ -2069,7 +2101,7 @@ function refreshPriceSnapshotConditional(){
paintLatestRiskDisplay(o.id, o);
paintContractsDisplay(o.id, o);
paintTpProfitDisplay(o.id, o);
paintBreakevenBadge(o.id, o.sl_breakeven_secured);
paintBreakevenBadge(o.id, o);
paintExchangeTpslRow(o.id, o.exchange_tpsl || {});
paintPlanTpslDisplay(o.id, o);
if(window.TimeCloseUI) TimeCloseUI.paintOrderTimeClose(o);