diff --git a/frontend/src/pages/Plan.tsx b/frontend/src/pages/Plan.tsx index 52ddcdd..f92a73e 100644 --- a/frontend/src/pages/Plan.tsx +++ b/frontend/src/pages/Plan.tsx @@ -590,27 +590,34 @@ export default function PlanPage() { Number(plan?.risk_last_k ?? plan?.risk_sizing_preview?.k ?? 1) : semiExitU), ); - const exitRuleLabel = semiOn - ? semiOptTarget != null - ? `期权目标 K${Math.round(semiExitStrike!)}→${fmtExPx("index", semiOptTarget)} · 永续净利锁定≥${fmt(semiNetLock, 2)}U` - : `期权目标 行权价${semiExitView === "short" ? "−" : "+"}${fmt(semiExitMove, 0)} · 永续净利锁定≥${fmt(semiNetLock, 2)}U` - : isOo + const exitRuleLabel = semiOn ? ( + + + {semiOptTarget != null + ? `期权目标 K${Math.round(semiExitStrike!)}→${fmtExPx("index", semiOptTarget)}` + : `期权目标 行权价${semiExitView === "short" ? "−" : "+"}${fmt(semiExitMove, 0)}`} + + {`永续目标 净利锁定≥${fmt(semiNetLock, 2)}U`} + + ) : isOo ? ( + exitTarget != null + ? `${riskLocked ? "锁定 " : ""}净盈≥${fmt(exitTarget)} U(${ + ooBudget != null ? `${fmt(ooBudget)}×` : "预算×" + }${fmt(ooRatio, 1)})` + : `净盈≥预算×${fmt(ooRatio, 1)}(达标只平盈利腿)` + ) : exitMode === "premium_multiple" ? ( + riskBased ? exitTarget != null - ? `${riskLocked ? "锁定 " : ""}净盈≥${fmt(exitTarget)} U(${ - ooBudget != null ? `${fmt(ooBudget)}×` : "预算×" - }${fmt(ooRatio, 1)})` - : `净盈≥预算×${fmt(ooRatio, 1)}(达标只平盈利腿)` - : exitMode === "premium_multiple" - ? riskBased - ? exitTarget != null - ? `${riskLocked ? "锁定 " : ""}净盈≥${fmt(exitTarget)} U(权利金×${fmt(plan?.premium_exit_multiple ?? 1, 2)})` - : `权利金×${fmt(plan?.premium_exit_multiple ?? 1, 2)}(开仓后锁定)` - : `权利金×${fmt(plan?.premium_exit_multiple ?? 1, 2)}` - : riskBased - ? exitTarget != null - ? `${riskLocked ? "锁定 " : "固定 "}${fmt(exitTarget)} U(基数${fmt(plan?.risk_exit_unit ?? 15)})` - : `待估算(基数${fmt(plan?.risk_exit_unit ?? 15)})` - : `固定 ${fmt(plan?.net_profit_target ?? 15)} U`; + ? `${riskLocked ? "锁定 " : ""}净盈≥${fmt(exitTarget)} U(权利金×${fmt(plan?.premium_exit_multiple ?? 1, 2)})` + : `权利金×${fmt(plan?.premium_exit_multiple ?? 1, 2)}(开仓后锁定)` + : `权利金×${fmt(plan?.premium_exit_multiple ?? 1, 2)}` + ) : riskBased ? ( + exitTarget != null + ? `${riskLocked ? "锁定 " : "固定 "}${fmt(exitTarget)} U(基数${fmt(plan?.risk_exit_unit ?? 15)})` + : `待估算(基数${fmt(plan?.risk_exit_unit ?? 15)})` + ) : ( + `固定 ${fmt(plan?.net_profit_target ?? 15)} U` + ); const riskRatioLabel = isOo ? "预算平分 Call/Put" : `比例${Number(plan?.risk_perp_unit ?? 1)}:${Number(plan?.risk_option_unit ?? 2)}`; diff --git a/frontend/src/styles/app.css b/frontend/src/styles/app.css index 2ae5190..ce8dcb9 100644 --- a/frontend/src/styles/app.css +++ b/frontend/src/styles/app.css @@ -353,9 +353,16 @@ input { display: inline-flex; flex-wrap: wrap; align-items: center; + justify-content: flex-end; gap: 6px; font-weight: 700; font-size: 14px; + width: 100%; + text-align: right; +} + +.kv > span.open-cap-row { + justify-content: flex-end; } .open-cap-sep { @@ -1406,6 +1413,15 @@ input { flex: 0 0 auto; } +.plan-exit-semi { + display: inline-flex; + flex-direction: column; + align-items: flex-end; + gap: 2px; + text-align: right; + width: 100%; +} + .plan-positions { display: flex; flex-direction: column;