From 15aa959c9a263e2df85870800c74303dd896776b Mon Sep 17 00:00:00 2001 From: sam Date: Mon, 6 Oct 2025 12:29:39 +0800 Subject: [PATCH] update --- app/ui/views/backtest.py | 2 ++ app/ui/views/dashboard.py | 10 ++++++---- app/ui/views/market.py | 12 ++++++++++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/app/ui/views/backtest.py b/app/ui/views/backtest.py index 4a66d61..7841c6d 100644 --- a/app/ui/views/backtest.py +++ b/app/ui/views/backtest.py @@ -28,6 +28,8 @@ from app.utils import alerts from app.utils.config import get_config, save_config from app.utils.tuning import log_tuning_result +from app.utils.db import db_session + from app.ui.shared import LOGGER, LOG_EXTRA, default_backtest_range from app.ui.views.dashboard import update_dashboard_sidebar diff --git a/app/ui/views/dashboard.py b/app/ui/views/dashboard.py index a99fcf2..0d54398 100644 --- a/app/ui/views/dashboard.py +++ b/app/ui/views/dashboard.py @@ -21,10 +21,12 @@ _WARNINGS_PLACEHOLDER = None def _ensure_dashboard_elements(metrics_container: object, decisions_container: object) -> Dict[str, object]: - # Create dedicated placeholders so successive updates rewrite the same slots - metrics_calls = metrics_container.empty() - metrics_prompt = metrics_container.empty() - metrics_completion = metrics_container.empty() + # Create horizontal layout so metrics stay in place during refreshes + metrics_row = metrics_container.container() + col_calls, col_prompt, col_completion = metrics_row.columns(3) + metrics_calls = col_calls.empty() + metrics_prompt = col_prompt.empty() + metrics_completion = col_completion.empty() elements = { "metrics_calls": metrics_calls, diff --git a/app/ui/views/market.py b/app/ui/views/market.py index 4a4da49..65c7415 100644 --- a/app/ui/views/market.py +++ b/app/ui/views/market.py @@ -97,10 +97,14 @@ def render_market_visualization() -> None: last_ts_code = session.get("market_selected_ts_code") start_store_key = "market_start_date_value" end_store_key = "market_end_date_value" + start_widget_key = "market_start_date_picker" + end_widget_key = "market_end_date_picker" if last_ts_code != ts_code: session["market_selected_ts_code"] = ts_code session[start_store_key] = default_start session[end_store_key] = default_end + session[start_widget_key] = default_start + session[end_widget_key] = default_end else: start_state = session.get(start_store_key, default_start) end_state = session.get(end_store_key, default_end) @@ -112,13 +116,17 @@ def render_market_visualization() -> None: end_state = max_date session[start_store_key] = start_state session[end_store_key] = end_state + if session.get(start_widget_key) != start_state: + session[start_widget_key] = start_state + if session.get(end_widget_key) != end_state: + session[end_widget_key] = end_state col1, col2 = st.columns(2) with col1: start_date = st.date_input( "开始日期", value=session.get(start_store_key, default_start), - key="market_start_date_picker", + key=start_widget_key, min_value=min_date, max_value=max_date, ) @@ -126,7 +134,7 @@ def render_market_visualization() -> None: end_date = st.date_input( "结束日期", value=session.get(end_store_key, default_end), - key="market_end_date_picker", + key=end_widget_key, min_value=min_date, max_value=max_date, )