Fix strategy roll page JS broken by Jinja in static file.

Pass trading_session via inline page config, restore roll preview/execute handlers, and validate new stop-loss before preview.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-02 21:46:08 +08:00
parent 075fae37ec
commit 4657d26f5e
2 changed files with 25 additions and 6 deletions
+17 -5
View File
@@ -122,11 +122,13 @@
btnExec.textContent = mode === 'market' ? '执行滚仓' : '提交监控'; btnExec.textContent = mode === 'market' ? '执行滚仓' : '提交监控';
} }
if (btnPreview) { if (btnPreview) {
btnPreview.disabled = !inTradingSession && !isBreak; btnPreview.disabled = false;
btnPreview.title = (!inTradingSession && !isBreak) btnPreview.title = (!inTradingSession && !isBreak)
? '休盘期间请切换为突破加仓' ? '休盘可预览;市价加仓须交易时段内执行'
: ''; : '';
} }
var offHint = document.getElementById('roll-off-session-hint');
if (offHint) offHint.hidden = inTradingSession || isBreak;
} }
function syncRollRiskHint() { function syncRollRiskHint() {
@@ -203,7 +205,7 @@
var rollPayload = null; var rollPayload = null;
var rollMonitorSel = document.getElementById('roll-monitor-select'); var rollMonitorSel = document.getElementById('roll-monitor-select');
var rollModeSel = document.getElementById('roll-add-mode'); var rollModeSel = document.getElementById('roll-add-mode');
var inTradingSession = {{ 'true' if trading_session else 'false' }}; var inTradingSession = !!(window.STRATEGY_PAGE && window.STRATEGY_PAGE.inTradingSession);
if (rollModeSel) rollModeSel.addEventListener('change', syncRollModeUi); if (rollModeSel) rollModeSel.addEventListener('change', syncRollModeUi);
if (rollMonitorSel) rollMonitorSel.addEventListener('change', syncRollRiskHint); if (rollMonitorSel) rollMonitorSel.addEventListener('change', syncRollRiskHint);
@@ -212,19 +214,29 @@
if (btnRollP && rollForm) { if (btnRollP && rollForm) {
btnRollP.addEventListener('click', function () { btnRollP.addEventListener('click', function () {
btnRollP.disabled = true;
rollPayload = formData(rollForm); rollPayload = formData(rollForm);
var sl = parseFloat(rollPayload.new_stop_loss);
if (!sl || sl <= 0) {
showPreview(rollPrev, '请填写新统一止损', false, false);
if (btnRollE) btnRollE.hidden = true;
return;
}
btnRollP.disabled = true;
jsonPost('/api/strategy/roll/preview', rollPayload).then(function (d) { jsonPost('/api/strategy/roll/preview', rollPayload).then(function (d) {
if (!d.ok) { if (!d.ok) {
showPreview(rollPrev, d.error, false, false); showPreview(rollPrev, d.error || '预览失败', false, false);
btnRollE.hidden = true; btnRollE.hidden = true;
return; return;
} }
showPreview(rollPrev, formatRoll(d.preview), true, false); showPreview(rollPrev, formatRoll(d.preview), true, false);
btnRollE.hidden = false; btnRollE.hidden = false;
syncRollModeUi(); syncRollModeUi();
}).catch(function () {
showPreview(rollPrev, '预览请求失败,请稍后重试', false, false);
if (btnRollE) btnRollE.hidden = true;
}).finally(function () { }).finally(function () {
btnRollP.disabled = false; btnRollP.disabled = false;
syncRollModeUi();
}); });
}); });
} }
+8 -1
View File
@@ -138,7 +138,9 @@
<div id="roll-preview" class="strategy-preview" hidden></div> <div id="roll-preview" class="strategy-preview" hidden></div>
<p class="hint" id="roll-exec-hint" hidden style="font-size:.75rem;margin-top:.45rem">市价加仓:须交易时段内确认,10 秒倒计时执行;突破加仓:休盘也可提交,开盘后再监控触价</p> <p class="hint" id="roll-exec-hint" hidden style="font-size:.75rem;margin-top:.45rem">市价加仓:须交易时段内确认,10 秒倒计时执行;突破加仓:休盘也可提交,开盘后再监控触价</p>
{% if not trading_session %} {% if not trading_session %}
<p class="hint text-muted" id="roll-off-session-hint" style="font-size:.75rem;margin-top:.35rem">当前{{ session_clock.status_label or '休盘' }}请选「突破加仓」填写突破价后预览并提交监控。</p> <p class="hint text-muted" id="roll-off-session-hint" style="font-size:.75rem;margin-top:.35rem">当前{{ session_clock.status_label or '休盘' }}市价加仓须交易时段内执行;休盘可先预览,或选「突破加仓」提交监控。</p>
{% else %}
<p class="hint text-muted" id="roll-off-session-hint" hidden style="font-size:.75rem;margin-top:.35rem"></p>
{% endif %} {% endif %}
</form> </form>
{% else %} {% else %}
@@ -211,5 +213,10 @@
</div> </div>
{% endblock %} {% endblock %}
{% block extra_js %} {% block extra_js %}
<script>
window.STRATEGY_PAGE = {
inTradingSession: {{ 'true' if trading_session else 'false' }}
};
</script>
<script src="{{ url_for('static', filename='js/strategy.js') }}"></script> <script src="{{ url_for('static', filename='js/strategy.js') }}"></script>
{% endblock %} {% endblock %}