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
-
+
-
+