Desktop calculator: top tabs with input/result dual cards.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-20 12:54:13 +08:00
parent 7a01535802
commit 29c080f8e0
2 changed files with 223 additions and 129 deletions
+90 -12
View File
@@ -4638,7 +4638,16 @@ body.login-page {
display: none; display: none;
} }
/* 行情全屏:竖屏提示转横;横屏吃满 */ body.hub-phone #page-calculator .calc-result-title,
body.hub-phone #page-calculator .calc-result-placeholder {
display: none !important;
}
body.hub-phone #page-calculator .calc-result {
margin-top: 14px;
padding-top: 12px;
border-top: 1px solid var(--border-soft);
}
@media (orientation: portrait) { @media (orientation: portrait) {
body.hub-phone.market-chart-fs-open .market-chart-wrap.is-fullscreen::before { body.hub-phone.market-chart-fs-open .market-chart-wrap.is-fullscreen::before {
content: "全屏看图请横持手机"; content: "全屏看图请横持手机";
@@ -9569,32 +9578,56 @@ body.funds-fullscreen-open {
} }
} }
/* 电脑端计算器改为单页 Tab;手机继续使用原有紧凑 Tab 样式 */ /* 电脑端计算器:上方 Tab + 左输入 / 右结果双卡;手机端保持原布局 */
.calc-tab-label-desktop { .calc-tab-label-desktop {
display: none; display: none;
} }
.calc-pane-split {
display: block;
}
.calc-result-title {
display: none;
margin: 0 0 10px;
font-size: 1rem;
color: var(--text);
}
.calc-result-placeholder {
display: none;
margin: 0;
color: var(--muted);
font-size: 0.82rem;
line-height: 1.5;
}
.calc-result-panel:has(.calc-result.hidden) .calc-result-placeholder {
display: block;
}
body:not(.hub-phone) #page-calculator .calc-workspace { body:not(.hub-phone) #page-calculator .calc-workspace {
display: grid; display: flex;
grid-template-columns: 180px minmax(0, 1fr); flex-direction: column;
gap: 14px; gap: 14px;
align-items: start; align-items: stretch;
} }
body:not(.hub-phone) #page-calculator .calc-mobile-tabs { body:not(.hub-phone) #page-calculator .calc-mobile-tabs {
display: grid; display: flex;
grid-template-columns: minmax(0, 1fr); flex-direction: row;
flex-wrap: wrap;
gap: 8px; gap: 8px;
max-width: none; max-width: none;
margin: 0; margin: 0;
padding: 5px; padding: 6px;
border: 1px solid var(--border-soft); border: 1px solid var(--border-soft);
border-radius: 12px; border-radius: 12px;
background: var(--nav-bg); background: var(--nav-bg);
} }
body:not(.hub-phone) #page-calculator .calc-m-tab { body:not(.hub-phone) #page-calculator .calc-m-tab {
min-height: 42px; min-height: 40px;
border: 1px solid transparent; border: 1px solid transparent;
border-radius: 9px; border-radius: 9px;
background: transparent; background: transparent;
@@ -9603,8 +9636,8 @@ body:not(.hub-phone) #page-calculator .calc-m-tab {
font-size: 13px; font-size: 13px;
font-weight: 600; font-weight: 600;
cursor: pointer; cursor: pointer;
text-align: left; text-align: center;
padding: 9px 12px; padding: 8px 16px;
} }
body:not(.hub-phone) #page-calculator .calc-m-tab:hover { body:not(.hub-phone) #page-calculator .calc-m-tab:hover {
@@ -9637,9 +9670,54 @@ body:not(.hub-phone) #page-calculator .calc-layout[data-calc-tab="roll"] [data-c
display: none; display: none;
} }
body:not(.hub-phone) #page-calculator .calc-card {
padding: 0;
background: transparent;
border: 0;
box-shadow: none;
height: auto;
}
body:not(.hub-phone) #page-calculator .calc-pane-split {
display: grid;
grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
gap: 14px;
align-items: start;
}
body:not(.hub-phone) #page-calculator .calc-input-panel,
body:not(.hub-phone) #page-calculator .calc-result-panel {
padding: 16px 18px;
border-radius: 12px;
background: var(--panel, var(--dash-card-bg, #121820));
border: 1px solid var(--border-soft, var(--border));
box-shadow: var(--card-glow, none);
min-height: 280px;
}
body:not(.hub-phone) #page-calculator .calc-result-title {
display: block;
}
body:not(.hub-phone) #page-calculator .calc-result {
margin-top: 0;
padding-top: 0;
border-top: 0;
}
body:not(.hub-phone) #page-calculator .calc-result.hidden {
display: none !important;
}
@media (min-width: 1200px) { @media (min-width: 1200px) {
body:not(.hub-phone) #page-calculator .calc-form-grid { body:not(.hub-phone) #page-calculator .calc-form-grid {
grid-template-columns: repeat(5, minmax(0, 1fr)); grid-template-columns: repeat(3, minmax(0, 1fr));
}
}
@media (max-width: 1100px) {
body:not(.hub-phone) #page-calculator .calc-pane-split {
grid-template-columns: minmax(0, 1fr);
} }
} }
+133 -117
View File
@@ -16,7 +16,7 @@
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" /> <link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'" />
<noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript> <noscript><link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;500;600&family=Orbitron:wght@500;600;700&display=swap" rel="stylesheet" /></noscript>
<link rel="stylesheet" href="/assets/app.css?v=20260718-strategy-pad" /> <link rel="stylesheet" href="/assets/app.css?v=20260720-calc-desktop-split" />
<link rel="stylesheet" href="/assets/trade_stats_calendar.css?v=4" /> <link rel="stylesheet" href="/assets/trade_stats_calendar.css?v=4" />
<link rel="stylesheet" href="/assets/account_risk_badge.css?v=4" /> <link rel="stylesheet" href="/assets/account_risk_badge.css?v=4" />
<script src="/assets/account_risk_badge.js?v=4"></script> <script src="/assets/account_risk_badge.js?v=4"></script>
@@ -812,127 +812,143 @@
</div> </div>
<div class="calc-layout" data-calc-tab="trend"> <div class="calc-layout" data-calc-tab="trend">
<section class="calc-card card" data-calc-pane="trend"> <section class="calc-card card" data-calc-pane="trend">
<h2>趋势回调计算器</h2> <div class="calc-pane-split">
<p class="calc-hint">逻辑与实例策略页一致:首仓 50% + 补仓网格;止损金额 = 资金 × 风险%.</p> <div class="calc-input-panel">
<form id="calc-trend-form" class="calc-form"> <h2>趋势回调计算器</h2>
<div class="calc-form-grid"> <p class="calc-hint">逻辑与实例策略页一致:首仓 50% + 补仓网格;止损金额 = 资金 × 风险%.</p>
<label class="calc-field"> <form id="calc-trend-form" class="calc-form">
<span>交易所</span> <div class="calc-form-grid">
<select id="calc-trend-exchange" required></select> <label class="calc-field">
</label> <span>交易所</span>
<label class="calc-field"> <select id="calc-trend-exchange" required></select>
<span>币种</span> </label>
<input id="calc-trend-base" type="text" value="ETH" placeholder="如 ETH" required autocomplete="off" /> <label class="calc-field">
</label> <span>币种</span>
<div class="calc-field calc-field-span2"> <input id="calc-trend-base" type="text" value="ETH" placeholder="如 ETH" required autocomplete="off" />
<div id="calc-trend-market-info" class="calc-market-info">ETH/USDT · 加载合约信息…</div> </label>
</div> <div class="calc-field calc-field-span2">
<label class="calc-field"> <div id="calc-trend-market-info" class="calc-market-info">ETH/USDT · 加载合约信息…</div>
<span>交易资金 (U)</span> </div>
<input id="calc-trend-capital" type="number" min="0.01" step="any" value="1000" required /> <label class="calc-field">
</label> <span>交易资金 (U)</span>
<label class="calc-field"> <input id="calc-trend-capital" type="number" min="0.01" step="any" value="1000" required />
<span>风险 %</span> </label>
<input id="calc-trend-risk" type="number" min="0.1" step="0.1" value="5" required /> <label class="calc-field">
</label> <span>风险 %</span>
<label class="calc-field"> <input id="calc-trend-risk" type="number" min="0.1" step="0.1" value="5" required />
<span>杠杆</span> </label>
<input id="calc-trend-leverage" type="number" min="1" step="1" value="5" required /> <label class="calc-field">
</label> <span>杠杆</span>
<label class="calc-field"> <input id="calc-trend-leverage" type="number" min="1" step="1" value="5" required />
<span>方向</span> </label>
<select id="calc-trend-direction"> <label class="calc-field">
<option value="long">做多</option> <span>方向</span>
<option value="short">做空</option> <select id="calc-trend-direction">
</select> <option value="long">做多</option>
</label> <option value="short">做空</option>
<label class="calc-field"> </select>
<span>首仓入场价</span> </label>
<input id="calc-trend-entry" type="number" min="0" step="any" placeholder="手动输入" required /> <label class="calc-field">
</label> <span>首仓入场价</span>
<label class="calc-field"> <input id="calc-trend-entry" type="number" min="0" step="any" placeholder="手动输入" required />
<span>止损价</span> </label>
<input id="calc-trend-sl" type="number" min="0" step="any" required /> <label class="calc-field">
</label> <span>止损价</span>
<label class="calc-field"> <input id="calc-trend-sl" type="number" min="0" step="any" required />
<span id="calc-trend-add-label">补仓上沿价</span> </label>
<input id="calc-trend-add-upper" type="number" min="0" step="any" required /> <label class="calc-field">
</label> <span id="calc-trend-add-label">补仓上沿价</span>
<label class="calc-field"> <input id="calc-trend-add-upper" type="number" min="0" step="any" required />
<span>止盈价</span> </label>
<input id="calc-trend-tp" type="number" min="0" step="any" required /> <label class="calc-field">
</label> <span>止盈价</span>
<label class="calc-field"> <input id="calc-trend-tp" type="number" min="0" step="any" required />
<span>补仓档数</span> </label>
<input id="calc-trend-dca-legs" type="number" min="1" max="20" step="1" value="5" /> <label class="calc-field">
</label> <span>补仓档数</span>
<input id="calc-trend-dca-legs" type="number" min="1" max="20" step="1" value="5" />
</label>
</div>
<div class="calc-actions">
<button type="submit" class="primary">计算</button>
</div>
</form>
</div> </div>
<div class="calc-actions"> <aside class="calc-result-panel" aria-label="趋势回调结果推算">
<button type="submit" class="primary"></button> <h3 class="calc-result-title">结果推</h3>
</div> <p class="calc-result-placeholder">填写左侧参数后点击「计算」</p>
</form> <div id="calc-trend-result" class="calc-result hidden"></div>
<div id="calc-trend-result" class="calc-result hidden"></div> </aside>
</div>
</section> </section>
<section class="calc-card card" data-calc-pane="roll"> <section class="calc-card card" data-calc-pane="roll">
<h2>滚仓计算器</h2> <div class="calc-pane-split">
<p class="calc-hint">首仓按「单次风险」以损定仓;每次滚仓后合并持仓打到新止损 ≈ 单次风险;止盈锁定首仓价不变.最多 3 次滚仓.</p> <div class="calc-input-panel">
<form id="calc-roll-form" class="calc-form"> <h2>滚仓计算器</h2>
<div class="calc-form-grid"> <p class="calc-hint">首仓按「单次风险」以损定仓;每次滚仓后合并持仓打到新止损 ≈ 单次风险;止盈锁定首仓价不变.最多 3 次滚仓.</p>
<label class="calc-field"> <form id="calc-roll-form" class="calc-form">
<span>交易所</span> <div class="calc-form-grid">
<select id="calc-roll-exchange" required></select> <label class="calc-field">
</label> <span>交易所</span>
<label class="calc-field"> <select id="calc-roll-exchange" required></select>
<span>币种</span> </label>
<input id="calc-roll-base" type="text" value="ETH" placeholder="如 ETH" required autocomplete="off" /> <label class="calc-field">
</label> <span>币种</span>
<div class="calc-field calc-field-span2"> <input id="calc-roll-base" type="text" value="ETH" placeholder="如 ETH" required autocomplete="off" />
<div id="calc-roll-market-info" class="calc-market-info">ETH/USDT · 加载合约信息…</div> </label>
</div> <div class="calc-field calc-field-span2">
<label class="calc-field"> <div id="calc-roll-market-info" class="calc-market-info">ETH/USDT · 加载合约信息…</div>
<span>交易资金 (U)</span> </div>
<input id="calc-roll-capital" type="number" min="0.01" step="any" value="1000" required /> <label class="calc-field">
</label> <span>交易资金 (U)</span>
<label class="calc-field"> <input id="calc-roll-capital" type="number" min="0.01" step="any" value="1000" required />
<span>单次风险 %</span> </label>
<input id="calc-roll-risk" type="number" min="0.1" step="0.1" value="5" required /> <label class="calc-field">
</label> <span>单次风险 %</span>
<label class="calc-field"> <input id="calc-roll-risk" type="number" min="0.1" step="0.1" value="5" required />
<span>方向</span> </label>
<select id="calc-roll-direction"> <label class="calc-field">
<option value="long">做多</option> <span>方向</span>
<option value="short">做空</option> <select id="calc-roll-direction">
</select> <option value="long">做多</option>
</label> <option value="short">做空</option>
<label class="calc-field"> </select>
<span>首仓入场价</span> </label>
<input id="calc-roll-entry" type="number" min="0" step="any" placeholder="手动输入" required /> <label class="calc-field">
</label> <span>首仓入场价</span>
<label class="calc-field"> <input id="calc-roll-entry" type="number" min="0" step="any" placeholder="手动输入" required />
<span>首仓止损价</span> </label>
<input id="calc-roll-sl" type="number" min="0" step="any" required /> <label class="calc-field">
</label> <span>首仓止损价</span>
<label class="calc-field"> <input id="calc-roll-sl" type="number" min="0" step="any" required />
<span>止盈价(锁定)</span> </label>
<input id="calc-roll-tp" type="number" min="0" step="any" required /> <label class="calc-field">
</label> <span>止盈价(锁定)</span>
<label class="calc-field"> <input id="calc-roll-tp" type="number" min="0" step="any" required />
<span>已完成滚仓次数</span> </label>
<input id="calc-roll-legs-done" type="number" min="0" max="3" step="1" value="0" /> <label class="calc-field">
</label> <span>已完成滚仓次数</span>
<input id="calc-roll-legs-done" type="number" min="0" max="3" step="1" value="0" />
</label>
</div>
<div class="calc-roll-legs-head">
<strong>滚仓加仓(最多 3 次)</strong>
<button type="button" id="calc-roll-add-leg" class="ghost">+ 添加滚仓</button>
</div>
<div id="calc-roll-legs-list" class="calc-roll-legs-list"></div>
<div class="calc-actions">
<button type="submit" class="primary">计算</button>
</div>
</form>
</div> </div>
<div class="calc-roll-legs-head"> <aside class="calc-result-panel" aria-label="滚仓结果推算">
<strong>滚仓加仓(最多 3 次)</strong> <h3 class="calc-result-title">结果推算</h3>
<button type="button" id="calc-roll-add-leg" class="ghost">+ 添加滚仓</button> <p class="calc-result-placeholder">填写左侧参数后点击「计算」</p>
</div> <div id="calc-roll-result" class="calc-result hidden"></div>
<div id="calc-roll-legs-list" class="calc-roll-legs-list"></div> </aside>
<div class="calc-actions"> </div>
<button type="submit" class="primary">计算</button> </section>
</div>
</form>
<div id="calc-roll-result" class="calc-result hidden"></div>
</section>
</div> </div>
</div> </div>
</div> </div>