diff --git a/crypto_monitor_binance/templates/index.html b/crypto_monitor_binance/templates/index.html index 16a5381..29b02ca 100644 --- a/crypto_monitor_binance/templates/index.html +++ b/crypto_monitor_binance/templates/index.html @@ -834,6 +834,7 @@ + + + + + {% include 'embed_boot_scripts.html' %} diff --git a/static/instance_theme.css b/static/instance_theme.css index 3810061..c4dbed6 100644 --- a/static/instance_theme.css +++ b/static/instance_theme.css @@ -1281,3 +1281,274 @@ html[data-theme="light"] .detail-actions { border-top-color: #d0dae4 !important; } +/* ── 顺势加仓:表单字段按模式显隐(CSS 兜底,不依赖 JS)── */ +#roll-form[data-add-mode="market"] .roll-field-fib, +#roll-form[data-add-mode="market"] .roll-field-breakout { + display: none !important; +} + +#roll-form[data-add-mode="fib_618"] .roll-field-breakout, +#roll-form[data-add-mode="fib_786"] .roll-field-breakout { + display: none !important; +} + +#roll-form[data-add-mode="breakout"] .roll-field-fib { + display: none !important; +} + +#roll-form[data-add-mode="fib_618"] .roll-field-fib, +#roll-form[data-add-mode="fib_786"] .roll-field-fib, +#roll-form[data-add-mode="breakout"] .roll-field-breakout { + display: inline-flex !important; + gap: 8px; + flex-wrap: wrap; + align-items: center; +} + +.roll-field[hidden] { + display: none !important; +} + +#strategy-roll-panel .roll-risk-banner { + margin-bottom: 8px; + color: #8fc8ff; +} + +html[data-theme="light"] #strategy-roll-panel .roll-risk-banner { + color: #006e9a !important; +} + +#strategy-roll-panel .roll-doc-link { + color: #8fc8ff; +} + +html[data-theme="light"] #strategy-roll-panel .roll-doc-link { + color: #006e9a !important; +} + +#strategy-roll-panel .roll-section-title { + margin: 14px 0 8px; + font-size: 0.95rem; + color: #b8c4ff; +} + +html[data-theme="light"] #strategy-roll-panel .roll-section-title { + color: #006e9a !important; +} + +#roll-preview-box.roll-preview-box { + margin: 8px 0; + padding: 10px; + border: 1px solid #3a5a8a; + border-radius: 8px; + background: #141a28; + color: #dde2ff; +} + +html[data-theme="light"] #roll-preview-box.roll-preview-box { + background: #f6f9fc !important; + border-color: #b8c8d8 !important; + color: #1a2838 !important; +} + +#roll-countdown.roll-countdown { + margin-top: 6px; + color: #ffb347; +} + +html[data-theme="light"] #roll-countdown.roll-countdown { + color: #a06010 !important; +} + +/* ── 顺势加仓说明页 ── */ +body.roll-doc-page { + font-family: system-ui, sans-serif; + margin: 0; + padding: 16px; + background: #0f1117; + color: #e6e8ef; +} + +html[data-theme="light"] body.roll-doc-page { + background: #eef3f8 !important; + color: #142232 !important; +} + +.roll-doc-container { + max-width: 920px; + margin: 0 auto; +} + +.roll-doc-nav { + margin-bottom: 14px; +} + +.roll-doc-nav a { + color: #8fc8ff; + text-decoration: none; +} + +html[data-theme="light"] .roll-doc-nav a { + color: #006e9a !important; +} + +.roll-doc-body { + background: #151a2a; + border: 1px solid #2a3150; + border-radius: 10px; + padding: 18px 20px; + line-height: 1.65; + font-size: 0.92rem; +} + +html[data-theme="light"] .roll-doc-body { + background: #fff !important; + border-color: #b8c8d8 !important; + color: #1a2838 !important; +} + +.roll-doc-body h1 { + font-size: 1.35rem; + margin: 0 0 12px; + color: #f0f2ff; +} + +html[data-theme="light"] .roll-doc-body h1 { + color: #142232 !important; +} + +.roll-doc-body h2 { + font-size: 1.08rem; + margin: 22px 0 10px; + color: #b8c4ff; + border-bottom: 1px solid #2a3150; + padding-bottom: 6px; +} + +html[data-theme="light"] .roll-doc-body h2 { + color: #006e9a !important; + border-bottom-color: #d0dae4 !important; +} + +.roll-doc-body h3 { + font-size: 0.98rem; + margin: 16px 0 8px; + color: #c9d4ff; +} + +html[data-theme="light"] .roll-doc-body h3 { + color: #142232 !important; +} + +.roll-doc-body p, +.roll-doc-body li { + color: #dde2ff; +} + +html[data-theme="light"] .roll-doc-body p, +html[data-theme="light"] .roll-doc-body li { + color: #1a2838 !important; +} + +.roll-doc-body ul, +.roll-doc-body ol { + margin: 8px 0 12px 1.25em; +} + +.roll-doc-body code { + background: #252538; + padding: 1px 5px; + border-radius: 4px; + font-size: 0.88em; +} + +html[data-theme="light"] .roll-doc-body code { + background: #e8eef5 !important; + color: #142232 !important; +} + +.roll-doc-body pre { + background: #0f1420; + border: 1px solid #2a3150; + border-radius: 8px; + padding: 12px; + overflow: auto; + font-size: 0.84rem; + line-height: 1.5; + color: #dde2ff; +} + +html[data-theme="light"] .roll-doc-body pre { + background: #f6f9fc !important; + border-color: #b8c8d8 !important; + color: #142232 !important; +} + +.roll-doc-body pre code { + background: transparent; + padding: 0; +} + +.roll-doc-body table { + width: 100%; + border-collapse: collapse; + margin: 10px 0; + font-size: 0.86rem; +} + +.roll-doc-body th, +.roll-doc-body td { + border: 1px solid #2a3150; + padding: 6px 8px; + text-align: left; + color: #dde2ff; +} + +html[data-theme="light"] .roll-doc-body th, +html[data-theme="light"] .roll-doc-body td { + border-color: #b8c8d8 !important; + color: #1a2838 !important; +} + +.roll-doc-body th { + background: #1a2030; + color: #b8c4ff; +} + +html[data-theme="light"] .roll-doc-body th { + background: #e8eef5 !important; + color: #142232 !important; +} + +.roll-doc-body hr { + border: none; + border-top: 1px solid #2a3150; + margin: 20px 0; +} + +html[data-theme="light"] .roll-doc-body hr { + border-top-color: #d0dae4 !important; +} + +/* ── 实盘下单:预估风险/盈利/盈亏比条 ── */ +html[data-theme="light"] .order-plan-preview { + background: #f6f9fc !important; + border-color: #b8c8d8 !important; +} + +html[data-theme="light"] .order-preview-rr { + color: #4a6078 !important; +} + +html[data-theme="light"] .order-preview-rr strong { + color: #142232 !important; +} + +html[data-theme="light"] .order-preview-risk strong { + color: #b03030 !important; +} + +html[data-theme="light"] .order-preview-profit strong { + color: #087a50 !important; +} + diff --git a/static/strategy_roll.js b/static/strategy_roll.js index 913e974..47b38ae 100644 --- a/static/strategy_roll.js +++ b/static/strategy_roll.js @@ -13,15 +13,16 @@ const previewBox = document.getElementById("roll-preview-box"); const previewText = document.getElementById("roll-preview-text"); const countdownEl = document.getElementById("roll-countdown"); + const fibWrap = form.querySelector(".roll-field-fib"); + const breakoutWrap = form.querySelector(".roll-field-breakout"); + const fibUpper = document.getElementById("roll-fib-upper"); + const fibLower = document.getElementById("roll-fib-lower"); + const breakoutInput = document.getElementById("roll-breakout"); let countdownTimer = null; let previewOk = false; let lastPreviewMode = ""; - function qs(sel) { - return form.querySelector(sel); - } - function selectedOption() { return symbolSel.options[symbolSel.selectedIndex]; } @@ -35,31 +36,36 @@ const dir = opt.getAttribute("data-direction") || "long"; const rp = opt.getAttribute("data-risk-percent") || "—"; dirInput.value = dir; - riskBanner.textContent = "当前风险:" + rp + "%(来自监控单 #" + (opt.getAttribute("data-monitor-id") || "?") + ")"; + riskBanner.textContent = + "当前风险:" + rp + "%(来自监控单 #" + (opt.getAttribute("data-monitor-id") || "?") + ")"; + } + + function setFieldGroup(wrap, inputs, visible, required) { + if (!wrap) return; + wrap.hidden = !visible; + inputs.forEach(function (inp) { + if (!inp) return; + inp.disabled = !visible; + inp.required = !!required && visible; + if (!visible) inp.value = ""; + }); } function syncFieldVisibility() { - const mode = modeSel.value; - form.querySelectorAll(".roll-field-fib").forEach(function (el) { - el.style.display = mode === "fib_618" || mode === "fib_786" ? "inline-flex" : "none"; - }); - form.querySelectorAll(".roll-field-breakout").forEach(function (el) { - el.style.display = mode === "breakout" ? "inline-flex" : "none"; - }); - const fibInputs = [qs("#roll-fib-upper"), qs("#roll-fib-lower")]; - const bpInput = qs("#roll-breakout"); - fibInputs.forEach(function (inp) { - if (inp) inp.required = mode === "fib_618" || mode === "fib_786"; - }); - if (bpInput) bpInput.required = mode === "breakout"; + const mode = modeSel.value || "market"; + form.setAttribute("data-add-mode", mode); + const showFib = mode === "fib_618" || mode === "fib_786"; + const showBreakout = mode === "breakout"; + setFieldGroup(fibWrap, [fibUpper, fibLower], showFib, showFib); + setFieldGroup(breakoutWrap, [breakoutInput], showBreakout, showBreakout); resetPreview(); } function resetPreview() { previewOk = false; - submitBtn.disabled = true; - previewBox.style.display = "none"; - countdownEl.style.display = "none"; + if (submitBtn) submitBtn.disabled = true; + if (previewBox) previewBox.style.display = "none"; + if (countdownEl) countdownEl.style.display = "none"; if (countdownTimer) { clearInterval(countdownTimer); countdownTimer = null; @@ -70,7 +76,7 @@ const fd = new FormData(form); const obj = {}; fd.forEach(function (v, k) { - obj[k] = v; + if (v !== "") obj[k] = v; }); return obj; } @@ -121,7 +127,7 @@ previewOk = true; if (lastPreviewMode === "market") { startCountdown(10); - } else { + } else if (submitBtn) { submitBtn.disabled = false; countdownEl.style.display = "none"; } @@ -134,7 +140,7 @@ function startCountdown(sec) { let left = sec; - submitBtn.disabled = true; + if (submitBtn) submitBtn.disabled = true; countdownEl.style.display = "block"; countdownEl.textContent = "市价加仓:" + left + " 秒后可执行(可取消刷新预览)"; countdownTimer = setInterval(function () { @@ -143,7 +149,7 @@ clearInterval(countdownTimer); countdownTimer = null; countdownEl.textContent = "可以执行市价加仓"; - submitBtn.disabled = false; + if (submitBtn) submitBtn.disabled = false; return; } countdownEl.textContent = "市价加仓:" + left + " 秒后可执行"; @@ -166,7 +172,7 @@ alert("请先点击预览"); return; } - if (lastPreviewMode === "market" && submitBtn.disabled) { + if (lastPreviewMode === "market" && submitBtn && submitBtn.disabled) { e.preventDefault(); alert("请等待 10 秒确认倒计时结束"); return; diff --git a/strategy_templates/strategy_roll_docs.html b/strategy_templates/strategy_roll_docs.html index ce5e6e2..50cc01b 100644 --- a/strategy_templates/strategy_roll_docs.html +++ b/strategy_templates/strategy_roll_docs.html @@ -1,39 +1,21 @@ - +