diff --git a/lib/common/static/instance_embed.js b/lib/common/static/instance_embed.js index c95391b..35e2fc5 100644 --- a/lib/common/static/instance_embed.js +++ b/lib/common/static/instance_embed.js @@ -117,6 +117,16 @@ } } } + if (revisit && (tab === "settings" || tab === "env_config")) { + if (global.InstanceSettingsPrefs) { + if (tab === "settings" && typeof global.InstanceSettingsPrefs.loadDisplayPrefsForm === "function") { + global.InstanceSettingsPrefs.loadDisplayPrefsForm(); + } + if (tab === "env_config" && typeof global.InstanceSettingsPrefs.loadEnvConfig === "function") { + global.InstanceSettingsPrefs.loadEnvConfig(); + } + } + } if (!revisit) { if (typeof global.refreshAccountSnapshot === "function") { global.refreshAccountSnapshot({ silent: true }); @@ -296,6 +306,7 @@ } if (revisit) { document.body.setAttribute("data-page", tab); + runPageInit(tab, { revisit: true }); return; } runPageInit(tab, { revisit: false }); diff --git a/lib/common/static/instance_settings_prefs.js b/lib/common/static/instance_settings_prefs.js index 8098613..2e4c9cc 100644 --- a/lib/common/static/instance_settings_prefs.js +++ b/lib/common/static/instance_settings_prefs.js @@ -57,8 +57,17 @@ } async function loadDisplayPrefsForm() { - const root = document.getElementById("display-prefs-form"); - if (!root) return; + const pane = document.querySelector('.embed-tab-pane.is-active-pane') || document; + const root = pane.querySelector ? pane.querySelector("#display-prefs-form") : document.getElementById("display-prefs-form"); + if (!root) { + const fallback = document.getElementById("display-prefs-form"); + if (!fallback) return; + return loadDisplayPrefsFormIn(fallback); + } + return loadDisplayPrefsFormIn(root); + } + + async function loadDisplayPrefsFormIn(root) { try { const data = await fetchJson("/api/settings/display"); const display = data.display || {}; @@ -157,8 +166,14 @@ } async function loadEnvConfig() { - const grid = document.getElementById("env-config-grid"); - if (!grid) return; + const pane = document.querySelector('.embed-tab-pane.is-active-pane') || document; + const grid = pane.querySelector ? pane.querySelector("#env-config-grid") : document.getElementById("env-config-grid"); + const target = grid || document.getElementById("env-config-grid"); + if (!target) return; + return loadEnvConfigIn(target); + } + + async function loadEnvConfigIn(grid) { grid.innerHTML = '
加载配置中…
'; try { const data = await fetchJson("/api/settings/env"); diff --git a/lib/common/static/instance_theme.css b/lib/common/static/instance_theme.css index 99c5983..510ba1d 100644 --- a/lib/common/static/instance_theme.css +++ b/lib/common/static/instance_theme.css @@ -2333,6 +2333,43 @@ html[data-theme="light"] .journal-detail-img-thumb { margin-top: 12px; } +.settings-page--grid { + margin-top: 12px; +} + +.settings-grid-2col { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + align-items: start; +} + +.settings-grid-cell { + min-width: 0; +} + +.settings-grid-cell--full { + grid-column: 1 / -1; +} + +.settings-card--standalone { + padding: 12px 14px; + height: 100%; +} + +.settings-card--standalone h2 { + margin: 0 0 8px; + font-size: 1.05rem; +} + +.settings-card--export .settings-export-links-block { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 8px; + margin-top: 8px; +} + .settings-page--ops { max-width: 720px; } @@ -2501,6 +2538,9 @@ html[data-theme="light"] .journal-detail-img-thumb { } @media (max-width: 900px) { + .settings-grid-2col { + grid-template-columns: minmax(0, 1fr); + } .settings-cards-grid { grid-template-columns: minmax(0, 1fr); } diff --git a/lib/instance/instance_settings_register.py b/lib/instance/instance_settings_register.py index 02a72f4..042c7ba 100644 --- a/lib/instance/instance_settings_register.py +++ b/lib/instance/instance_settings_register.py @@ -65,21 +65,18 @@ def register_instance_settings_routes( example_path = os.path.join(base_dir, ".env.example") api_auth = _api_login_required() - @app.route("/api/settings/display", methods=["GET"]) + @app.route("/api/settings/display", methods=["GET", "POST"]) @api_auth - def api_get_display_prefs(): - prefs = get_display_prefs(get_db) - return jsonify( - { - "ok": True, - "display": prefs, - "meta": display_meta_for_ui(), - } - ) - - @app.route("/api/settings/display", methods=["POST"]) - @api_auth - def api_save_display_prefs(): + def api_settings_display(): + if request.method == "GET": + prefs = get_display_prefs(get_db) + return jsonify( + { + "ok": True, + "display": prefs, + "meta": display_meta_for_ui(), + } + ) body = request.get_json(silent=True) or {} raw = body.get("display") if isinstance(body.get("display"), dict) else body saved = save_display_prefs(get_db, raw) @@ -91,15 +88,12 @@ def register_instance_settings_routes( payload = build_env_payload(example_path, env_path) return jsonify({"ok": True, **payload}) - @app.route("/api/settings/env", methods=["GET"]) + @app.route("/api/settings/env", methods=["GET", "POST"]) @api_auth - def api_env_get(): - payload = build_env_payload(example_path, env_path) - return jsonify({"ok": True, **payload}) - - @app.route("/api/settings/env", methods=["POST"]) - @api_auth - def api_env_post(): + def api_settings_env(): + if request.method == "GET": + payload = build_env_payload(example_path, env_path) + return jsonify({"ok": True, **payload}) body = request.get_json(silent=True) or {} updates = body.get("values") if isinstance(body.get("values"), dict) else body if not isinstance(updates, dict): diff --git a/lib/instance/templates/display_prefs_panel.html b/lib/instance/templates/display_prefs_panel.html index 43dae42..5fc8fb6 100644 --- a/lib/instance/templates/display_prefs_panel.html +++ b/lib/instance/templates/display_prefs_panel.html @@ -1,5 +1,5 @@ {# 系统设置 · 导航显示开关 #} -
+

导航显示

以下开关控制顶栏导航与系统设置内区块是否显示,保存后立即生效。关键位监控、实盘下单、系统设置为固定项。

diff --git a/lib/instance/templates/embed_shell.html b/lib/instance/templates/embed_shell.html index 179de05..7e05bd7 100644 --- a/lib/instance/templates/embed_shell.html +++ b/lib/instance/templates/embed_shell.html @@ -7,7 +7,7 @@ - + {{ exchange_display }} · 加密货币 | 交易监控复盘系统 @@ -103,8 +103,8 @@ const ORDER_ENTRY_MODEL_CODE_TO_CATEGORY = {{ entry_model_code_to_category | toj - + - + diff --git a/lib/instance/templates/index.html b/lib/instance/templates/index.html index ab991c2..f08d2c3 100644 --- a/lib/instance/templates/index.html +++ b/lib/instance/templates/index.html @@ -17,7 +17,7 @@ {{ exchange_display }} · 加密货币 | 交易监控复盘系统 - + window.__INSTANCE_DISPLAY__ = {{ display | tojson }}; - + \ No newline at end of file diff --git a/lib/instance/templates/password_settings_panel.html b/lib/instance/templates/password_settings_panel.html index a1cc47e..4e66d9b 100644 --- a/lib/instance/templates/password_settings_panel.html +++ b/lib/instance/templates/password_settings_panel.html @@ -1,15 +1,13 @@ -{# 系统设置 · 账户密码 #} -
-

账户密码修改

-

修改网页登录账号密码,写入 .env 后需重启实例生效。

-
- - - - -
-
- - -
+{# 系统设置 · 账户密码(外层 card 由 settings_panel 提供) #} +

账户密码修改

+

修改网页登录账号密码,写入 .env 后需重启实例生效。

+
+ + + + +
+
+ +
diff --git a/lib/instance/templates/settings_panel.html b/lib/instance/templates/settings_panel.html index c73dde6..ac68f20 100644 --- a/lib/instance/templates/settings_panel.html +++ b/lib/instance/templates/settings_panel.html @@ -1,50 +1,65 @@ -{# 系统设置:导航显示 + 账户密码 + 资金划转 + 数据导出 #} -
- {% include 'display_prefs_panel.html' %} +{# 系统设置:2 列独立卡片 #} +
+
+
+ {% include 'display_prefs_panel.html' %} +
- {% if display.show_settings_password %} - {% include 'password_settings_panel.html' %} - {% endif %} + {% if display.show_settings_password %} +
+
+ {% include 'password_settings_panel.html' %} +
+
+ {% endif %} -
-
- {% if instance_settings.options_settings_enabled and display.show_settings_options_swap %} -
-

币种兑换

- {% include 'options_settings_swap.html' %} -
- {% endif %} - {% if instance_settings.options_settings_enabled and display.show_settings_options_transfer %} -
-

期权资金划转

- {% include 'options_settings_transfer.html' %} -
- {% endif %} - {% if instance_settings.options_settings_enabled %} - {% include 'options_settings_panel.html' %} - {% endif %} - {% if instance_settings.show_transfer and display.show_settings_transfer %} -
-

永续资金划转

+ {% if instance_settings.show_transfer and display.show_settings_transfer %} +
+
+

永续资金划转

子账户永续:资金账户与交易账户之间划转 USDT。

{% include 'instance_transfer_panel.html' %}
- {% endif %} +
+ {% endif %} - {% if display.show_settings_export %} -
-
- 数据导出 - CSV · v{{ instance_settings.data_export_version }} -
-