Split risk policy into its own navigation tab.

Move read-only risk control docs to /risk_policy before settings; keep transfers and exports on the settings page.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-08 19:42:29 +08:00
parent fd6391b734
commit d84a265b67
14 changed files with 126 additions and 80 deletions
+2 -2
View File
@@ -38,11 +38,11 @@ def embed_render_plan(page: str, embed_mode: str | None) -> EmbedRenderPlan:
)
is_shell = embed_mode == "shell"
is_strategy = page in EMBED_STRATEGY_PAGES
is_settings = page == "settings"
is_settings_like = page in ("settings", "risk_policy")
return EmbedRenderPlan(
exchange_capitals=is_shell,
records_rows=page == "records",
records_summary=is_shell and page != "records" and not is_settings,
records_summary=is_shell and page != "records" and not is_settings_like,
key_history=page == "key_monitor",
key_list=page in ("key_monitor", "trade") or is_strategy,
orders=page == "trade" or is_strategy,
+2
View File
@@ -18,6 +18,7 @@ EMBED_TABS: tuple[str, ...] = (
"options",
"records",
"stats",
"risk_policy",
"settings",
)
@@ -32,6 +33,7 @@ PATH_TO_EMBED_TAB: dict[str, str] = {
"/options": "options",
"/records": "records",
"/stats": "stats",
"/risk_policy": "risk_policy",
"/settings": "settings",
}
+1 -1
View File
@@ -184,6 +184,6 @@ def build_instance_settings_view(
def settings_page_context(page: str, **kwargs: Any) -> dict[str, Any]:
if (page or "").strip() != "settings":
if (page or "").strip() not in ("settings", "risk_policy"):
return {}
return {"instance_settings": build_instance_settings_view(**kwargs)}
@@ -396,6 +396,9 @@
</div>
{% endif %}
</div>
{% if page == 'risk_policy' %}
{% include 'risk_policy_panel.html' %}
{% endif %}
{% if page == 'settings' %}
{% include 'settings_panel.html' %}
{% endif %}
+3 -2
View File
@@ -39,12 +39,13 @@
{% if options_nav_visible %}
<a href="/options" data-embed-tab="options" class="{% if initial_tab == 'options' %}active{% endif %}">期权</a>
{% endif %}
<a href="/risk_policy" data-embed-tab="risk_policy" class="{% if initial_tab == 'risk_policy' %}active{% endif %}">风控说明</a>
<a href="/settings" data-embed-tab="settings" class="{% if initial_tab == 'settings' %}active{% endif %}">系统设置</a>
</nav>
<div id="embed-flash" class="flash" style="display:none" role="status"></div>
{% include 'instance_header_panel.html' %}
{% if initial_tab != 'settings' and include_transfer_block %}
{% if initial_tab not in ('settings', 'risk_policy') and include_transfer_block %}
{% include 'instance_top_bar.html' %}
{% endif %}
@@ -89,6 +90,6 @@ const ORDER_ENTRY_MODEL_CODE_TO_CATEGORY = {{ entry_model_code_to_category | toj
<script src="/static/key_monitor_form.js?v=2"></script>
{% include 'embed_boot_scripts.html' %}
<script src="/static/instance_live.js?v=3"></script>
<script src="/static/instance_embed.js?v=15"></script>
<script src="/static/instance_embed.js?v=16"></script>
</body>
</html>
+6 -1
View File
@@ -64,12 +64,13 @@
{% if options_nav_visible %}
<a href="/options" class="{% if page == 'options' %}active{% endif %}">期权</a>
{% endif %}
<a href="/risk_policy" class="{% if page == 'risk_policy' %}active{% endif %}">风控说明</a>
<a href="/settings" class="{% if page == 'settings' %}active{% endif %}">系统设置</a>
</div>
{% with msg=get_flashed_messages() %}{% if msg %}<div class="flash">{{ msg[0] }}</div>{% endif %}{% endwith %}
{% include 'instance_header_panel.html' %}
{% if page != 'settings' and page != 'options' %}
{% if page not in ('settings', 'risk_policy', 'options') %}
{% include 'instance_top_bar.html' %}
{% endif %}
@@ -467,6 +468,10 @@
{% endif %}
</div>
{% if page == 'risk_policy' %}
{% include 'risk_policy_panel.html' %}
{% endif %}
{% if page == 'settings' %}
{% include 'settings_panel.html' %}
{% endif %}
@@ -0,0 +1,39 @@
{# 风控说明:只读展示 .env 风控参数与当前账户状态 #}
<div class="risk-policy-page">
<div class="card settings-card settings-card--risk">
<h2>风控说明</h2>
<p class="settings-live-status">
当前账户状态:
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}">
{{ instance_settings.risk_status_label }}
</span>
{% if instance_settings.risk_status_reason %}
<span class="settings-status-reason">{{ instance_settings.risk_status_reason }}</span>
{% endif %}
</p>
{% if instance_settings.trade_policy_note %}
<p class="settings-policy-note">账户限制:{{ instance_settings.trade_policy_note }}</p>
{% endif %}
<p class="settings-env-hint">以下参数读取自本实例 <code>.env</code>,修改后需重启进程生效。</p>
<div class="settings-risk-sections">
{% for section in instance_settings.sections %}
<div class="card settings-subcard">
<h3 class="settings-subcard-title">{{ section.title }}</h3>
<dl class="settings-kv settings-kv--compact">
{% for row in section.rows %}
<div class="settings-kv-row">
<dt>{{ row.label }}</dt>
<dd>
<span class="settings-kv-value">{{ row.value }}</span>
{% if row.note %}
<span class="settings-kv-note">{{ row.note }}</span>
{% endif %}
</dd>
</div>
{% endfor %}
</dl>
</div>
{% endfor %}
</div>
</div>
</div>
+31 -72
View File
@@ -1,77 +1,36 @@
{# 系统设置:左风控说明 · 右资金划转 + 数据导出(顶栏资金与统计见 instance_header_panel #}
<div class="settings-page">
<div class="settings-cards-grid">
<div class="card settings-card settings-card--risk">
<h2>风控说明</h2>
<p class="settings-live-status">
当前账户状态:
<span class="risk-status-badge risk-status-{{ risk_status.status|default('normal') }}">
{{ instance_settings.risk_status_label }}
</span>
{% if instance_settings.risk_status_reason %}
<span class="settings-status-reason">{{ instance_settings.risk_status_reason }}</span>
{% endif %}
</p>
{% if instance_settings.trade_policy_note %}
<p class="settings-policy-note">账户限制:{{ instance_settings.trade_policy_note }}</p>
{% endif %}
<p class="settings-env-hint">以下参数读取自本实例 <code>.env</code>,修改后需重启进程生效。</p>
<div class="settings-risk-sections">
{% for section in instance_settings.sections %}
<div class="card settings-subcard">
<h3 class="settings-subcard-title">{{ section.title }}</h3>
<dl class="settings-kv settings-kv--compact">
{% for row in section.rows %}
<div class="settings-kv-row">
<dt>{{ row.label }}</dt>
<dd>
<span class="settings-kv-value">{{ row.value }}</span>
{% if row.note %}
<span class="settings-kv-note">{{ row.note }}</span>
{% endif %}
</dd>
</div>
{% endfor %}
</dl>
</div>
{% endfor %}
{# 系统设置:资金划转 + 数据导出(顶栏资金与统计见 instance_header_panel #}
<div class="settings-page settings-page--ops">
<div class="card settings-card settings-card--side-panel">
<div class="settings-side-subcards">
{% if instance_settings.options_settings_enabled %}
<div class="card settings-subcard settings-subcard--ops">
<h3 class="settings-subcard-title">币种兑换</h3>
{% include 'options_settings_swap.html' %}
</div>
</div>
<div class="card settings-subcard settings-subcard--ops">
<h3 class="settings-subcard-title">期权资金划转</h3>
{% include 'options_settings_transfer.html' %}
</div>
{% include 'options_settings_panel.html' %}
{% endif %}
{% if instance_settings.show_transfer %}
<div class="card settings-subcard settings-subcard--ops">
<h3 class="settings-subcard-title">永续资金划转</h3>
<p class="settings-subcard-desc">子账户永续:资金账户与交易账户之间划转 USDT。</p>
{% include 'instance_transfer_panel.html' %}
</div>
{% endif %}
<div class="settings-side-col">
<div class="card settings-card settings-card--side-panel">
<div class="settings-side-subcards">
{% if instance_settings.options_settings_enabled %}
<div class="card settings-subcard settings-subcard--ops">
<h3 class="settings-subcard-title">币种兑换</h3>
{% include 'options_settings_swap.html' %}
</div>
<div class="card settings-subcard settings-subcard--ops">
<h3 class="settings-subcard-title">期权资金划转</h3>
{% include 'options_settings_transfer.html' %}
</div>
{% include 'options_settings_panel.html' %}
{% endif %}
{% if instance_settings.show_transfer %}
<div class="card settings-subcard settings-subcard--ops">
<h3 class="settings-subcard-title">永续资金划转</h3>
<p class="settings-subcard-desc">子账户永续:资金账户与交易账户之间划转 USDT。</p>
{% include 'instance_transfer_panel.html' %}
</div>
{% endif %}
<div class="settings-side-export">
<div class="settings-side-export-head">
<span class="settings-side-export-label">数据导出</span>
<span class="settings-side-export-meta muted">CSV · v{{ instance_settings.data_export_version }}</span>
</div>
<div class="settings-export-links-inline">
<a href="/export/trade_records">交易记录</a>
<a href="/export/journal_entries">复盘记录</a>
<a href="/export/key_monitors">关键位(当前)</a>
<a href="/export/key_monitor_history">关键位历史</a>
</div>
</div>
<div class="settings-side-export">
<div class="settings-side-export-head">
<span class="settings-side-export-label">数据导出</span>
<span class="settings-side-export-meta muted">CSV · v{{ instance_settings.data_export_version }}</span>
</div>
<div class="settings-export-links-inline">
<a href="/export/trade_records">交易记录</a>
<a href="/export/journal_entries">复盘记录</a>
<a href="/export/key_monitors">关键位(当前)</a>
<a href="/export/key_monitor_history">关键位历史</a>
</div>
</div>
</div>