Add settings page tabs and show env API keys with last four digits.

System settings now use the same CSS tab layout as env config; sensitive env fields display masked values from .env while keeping save-on-empty behavior.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-08 21:31:14 +08:00
parent 12e44ab26d
commit 1ee9eb02c3
14 changed files with 169 additions and 85 deletions
@@ -1,5 +1,5 @@
{# 系统设置 · 导航显示开关(SSR 预渲染,保存仍走 API) #}
<div class="card settings-card settings-card--standalone" id="display-prefs-card">
<div class="settings-tab-inner" id="display-prefs-card">
<h2>导航显示</h2>
<p class="settings-env-hint">以下开关控制顶栏导航与系统设置内区块是否显示,保存后立即生效。关键位监控、实盘下单、系统设置为固定项。</p>
<div id="display-prefs-form" class="display-prefs-form" data-prefs-ssr="1">
+2 -2
View File
@@ -7,7 +7,7 @@
<link rel="stylesheet" href="/static/instance_theme_early.css?v=4">
<link rel="stylesheet" href="/static/account_risk_badge.css?v=4">
<link rel="stylesheet" href="/static/instance_page.css?v=4">
<link rel="stylesheet" href="/static/instance_theme.css?v=74">
<link rel="stylesheet" href="/static/instance_theme.css?v=75">
<script src="/static/account_risk_badge.js?v=4"></script>
<meta name="theme-color" content="#0b0d14">
<title>{{ exchange_display }} · 加密货币 | 交易监控复盘系统</title>
@@ -103,7 +103,7 @@ const ORDER_ENTRY_MODEL_CODE_TO_CATEGORY = {{ entry_model_code_to_category | toj
<script>
window.__INSTANCE_DISPLAY__ = {{ display | tojson }};
</script>
<script src="/static/instance_settings_prefs.js?v=9"></script>
<script src="/static/instance_settings_prefs.js?v=10"></script>
<script src="/static/instance_live.js?v=4"></script>
<script src="/static/instance_embed.js?v=20"></script>
</body>
+13 -5
View File
@@ -47,17 +47,25 @@
<option value="true"{% if cur in ('true', '1', 'yes', 'on') %} selected{% endif %}>开启</option>
<option value="false"{% if cur not in ('true', '1', 'yes', 'on') %} selected{% endif %}>关闭</option>
</select>
{% elif field.sensitive %}
{% if field.has_value %}
<div class="env-sensitive-current muted">已配置 <span class="env-masked-value">{{ field.masked }}</span></div>
{% endif %}
<input
class="env-field-input"
id="env-f-{{ field.key }}"
type="password"
data-env-key="{{ field.key }}"
placeholder="{% if field.has_value %}修改时填写新值,留空不修改{% else %}请输入{% endif %}"
autocomplete="off"
>
{% else %}
<input
class="env-field-input"
id="env-f-{{ field.key }}"
type="{% if field.sensitive %}password{% else %}text{% endif %}"
type="text"
data-env-key="{{ field.key }}"
{% if field.sensitive and field.has_value %}
placeholder="{{ field.masked or '留空不修改' }}"
{% else %}
value="{{ field.current or field.default or '' }}"
{% endif %}
>
{% endif %}
</div>
+2 -2
View File
@@ -17,7 +17,7 @@
<link rel="manifest" href="/static/icons/manifest.webmanifest">
<title>{{ exchange_display }} · 加密货币 | 交易监控复盘系统</title>
<link rel="stylesheet" href="/static/instance_page.css?v=1">
<link rel="stylesheet" href="/static/instance_theme.css?v=74">
<link rel="stylesheet" href="/static/instance_theme.css?v=75">
</head>
<body
@@ -2038,6 +2038,6 @@ setInterval(refreshPriceSnapshotConditional, {{ price_refresh_seconds * 1000 }})
<script>
window.__INSTANCE_DISPLAY__ = {{ display | tojson }};
</script>
<script src="/static/instance_settings_prefs.js?v=9"></script>
<script src="/static/instance_settings_prefs.js?v=10"></script>
</body>
</html>
+52 -64
View File
@@ -1,66 +1,54 @@
{# 系统设置:2 列独立卡片 #}
<div class="settings-page settings-page--grid">
<p class="settings-env-hint muted" style="margin:0 0 10px">各区块说明见 <code>docs/系统设置说明.md</code></p>
<div class="settings-grid-2col">
<div class="settings-grid-cell">
{% include 'display_prefs_panel.html' %}
</div>
{% if display.show_settings_password %}
<div class="settings-grid-cell">
<div class="card settings-card settings-card--standalone">
{% include 'password_settings_panel.html' %}
</div>
</div>
{% endif %}
{% if instance_settings.show_transfer and display.show_settings_transfer %}
<div class="settings-grid-cell">
<div class="card settings-card settings-card--standalone">
<h2>永续资金划转</h2>
<p class="settings-subcard-desc">子账户永续:资金账户与交易账户之间划转 USDT。</p>
{% include 'instance_transfer_panel.html' %}
</div>
</div>
{% endif %}
{% if display.show_settings_export %}
<div class="settings-grid-cell">
<div class="card settings-card settings-card--standalone settings-card--export">
<h2>数据导出</h2>
<p class="settings-subcard-desc muted">CSV · v{{ instance_settings.data_export_version }}</p>
<div class="settings-export-links-inline settings-export-links-block">
<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>
{% endif %}
{% if instance_settings.options_settings_enabled and display.show_settings_options_swap %}
<div class="settings-grid-cell">
<div class="card settings-card settings-card--standalone">
<h2>币种兑换</h2>
{% include 'options_settings_swap.html' %}
</div>
</div>
{% endif %}
{% if instance_settings.options_settings_enabled and display.show_settings_options_transfer %}
<div class="settings-grid-cell">
<div class="card settings-card settings-card--standalone">
<h2>期权资金划转</h2>
{% include 'options_settings_transfer.html' %}
</div>
</div>
{% endif %}
{% if instance_settings.options_settings_enabled %}
<div class="settings-grid-cell settings-grid-cell--full">
{% include 'options_settings_panel.html' %}
</div>
{% endif %}
{# 系统设置:CSS Tab(与 env 配置同方案) #}
<div class="settings-page">
<div class="env-config-head card">
<h2>系统设置</h2>
<p class="settings-env-hint env-config-head-hint">各区块说明见 <code>docs/系统设置说明.md</code></p>
</div>
{% if settings_tabs %}
<div class="env-config-body card settings-config-body">
{% for tab in settings_tabs %}
<input type="radio" name="settings-section" id="settings-sec-{{ loop.index0 }}" class="env-tab-radio"{% if loop.first %} checked{% endif %}>
{% endfor %}
<div class="env-config-tabs" role="tablist" aria-label="系统设置分类">
{% for tab in settings_tabs %}
<label for="settings-sec-{{ loop.index0 }}" class="env-tab-btn" role="tab">{{ tab.title }}</label>
{% endfor %}
</div>
<div class="env-config-panels">
{% for tab in settings_tabs %}
<section class="env-panel env-panel--{{ loop.index0 }} settings-tab-panel" role="tabpanel">
{% if tab.key == 'nav' %}
{% include 'display_prefs_panel.html' %}
{% elif tab.key == 'password' %}
{% include 'password_settings_panel.html' %}
{% elif tab.key == 'transfer' %}
<h2>永续资金划转</h2>
<p class="settings-subcard-desc">子账户永续:资金账户与交易账户之间划转 USDT。</p>
{% include 'instance_transfer_panel.html' %}
{% elif tab.key == 'export' %}
<h2>数据导出</h2>
<p class="settings-subcard-desc muted">CSV · v{{ instance_settings.data_export_version }}</p>
<div class="settings-export-links-inline settings-export-links-block">
<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>
{% elif tab.key == 'options_swap' %}
<h2>币种兑换</h2>
{% include 'options_settings_swap.html' %}
{% elif tab.key == 'options_transfer' %}
<h2>期权资金划转</h2>
{% include 'options_settings_transfer.html' %}
{% endif %}
</section>
{% endfor %}
</div>
</div>
{% endif %}
{% if instance_settings.options_settings_enabled %}
{% include 'options_settings_panel.html' %}
{% endif %}
</div>