diff --git a/crypto_monitor_binance/app.py b/crypto_monitor_binance/app.py index 805fe10..40c29a3 100644 --- a/crypto_monitor_binance/app.py +++ b/crypto_monitor_binance/app.py @@ -236,9 +236,14 @@ from lib.common.wechat_notify_lib import build_wechat_rs_level_message, send_wec from lib.hub.hub_auth import request_allowed as hub_request_allowed from lib.hub.hub_volume_rank_lib import resolve_daily_volume_rank from lib.common.history_window_lib import ( + PRESET_ALL, PRESET_CUSTOM, + PRESET_DEFAULT, PRESET_UTC_LAST24H, + PRESET_UTC_LAST3M, + PRESET_UTC_LAST6M, PRESET_UTC_LAST7D, + PRESET_UTC_THIS_MONTH, PRESET_UTC_TODAY, list_window_redirect_query, normalize_bj_datetime_storage, @@ -1672,7 +1677,7 @@ def _count_opens_between(conn, start_td, end_td): def _list_window_from_request(): - return resolve_list_window(request.args, session, default_preset=PRESET_UTC_TODAY) + return resolve_list_window(request.args, session, default_preset=PRESET_DEFAULT) def _redirect_records(): @@ -7284,6 +7289,10 @@ def render_main_page(page="trade", embed_mode=None): data_export_version=3, list_window=list_window, list_window_presets={ + "utc_this_month": PRESET_UTC_THIS_MONTH, + "utc_last3m": PRESET_UTC_LAST3M, + "utc_last6m": PRESET_UTC_LAST6M, + "all": PRESET_ALL, "utc_today": PRESET_UTC_TODAY, "utc_last24h": PRESET_UTC_LAST24H, "utc_last7d": PRESET_UTC_LAST7D, diff --git a/crypto_monitor_gate/app.py b/crypto_monitor_gate/app.py index 4152319..71608de 100644 --- a/crypto_monitor_gate/app.py +++ b/crypto_monitor_gate/app.py @@ -238,9 +238,14 @@ from lib.hub.hub_auth import request_allowed as hub_request_allowed from lib.instance.instance_nav_lib import request_is_hub_soft_nav from lib.hub.hub_volume_rank_lib import resolve_daily_volume_rank from lib.common.history_window_lib import ( + PRESET_ALL, PRESET_CUSTOM, + PRESET_DEFAULT, PRESET_UTC_LAST24H, + PRESET_UTC_LAST3M, + PRESET_UTC_LAST6M, PRESET_UTC_LAST7D, + PRESET_UTC_THIS_MONTH, PRESET_UTC_TODAY, list_window_redirect_query, normalize_bj_datetime_storage, @@ -1669,7 +1674,7 @@ def _count_opens_between(conn, start_td, end_td): def _list_window_from_request(): - return resolve_list_window(request.args, session, default_preset=PRESET_UTC_TODAY) + return resolve_list_window(request.args, session, default_preset=PRESET_DEFAULT) def _redirect_records(): @@ -7078,6 +7083,10 @@ def render_main_page(page="trade", embed_mode=None): data_export_version=3, list_window=list_window, list_window_presets={ + "utc_this_month": PRESET_UTC_THIS_MONTH, + "utc_last3m": PRESET_UTC_LAST3M, + "utc_last6m": PRESET_UTC_LAST6M, + "all": PRESET_ALL, "utc_today": PRESET_UTC_TODAY, "utc_last24h": PRESET_UTC_LAST24H, "utc_last7d": PRESET_UTC_LAST7D, diff --git a/crypto_monitor_okx/app.py b/crypto_monitor_okx/app.py index 57c664c..12a9996 100644 --- a/crypto_monitor_okx/app.py +++ b/crypto_monitor_okx/app.py @@ -235,9 +235,14 @@ from lib.hub.hub_auth import request_allowed as hub_request_allowed from lib.instance.instance_nav_lib import request_is_hub_soft_nav from lib.hub.hub_volume_rank_lib import resolve_daily_volume_rank from lib.common.history_window_lib import ( + PRESET_ALL, PRESET_CUSTOM, + PRESET_DEFAULT, PRESET_UTC_LAST24H, + PRESET_UTC_LAST3M, + PRESET_UTC_LAST6M, PRESET_UTC_LAST7D, + PRESET_UTC_THIS_MONTH, PRESET_UTC_TODAY, list_window_redirect_query, normalize_bj_datetime_storage, @@ -1674,7 +1679,7 @@ def _count_opens_between(conn, start_td, end_td): def _list_window_from_request(): - return resolve_list_window(request.args, session, default_preset=PRESET_UTC_TODAY) + return resolve_list_window(request.args, session, default_preset=PRESET_DEFAULT) def _redirect_records(): @@ -6686,6 +6691,10 @@ def render_main_page(page="trade", embed_mode=None): data_export_version=3, list_window=list_window, list_window_presets={ + "utc_this_month": PRESET_UTC_THIS_MONTH, + "utc_last3m": PRESET_UTC_LAST3M, + "utc_last6m": PRESET_UTC_LAST6M, + "all": PRESET_ALL, "utc_today": PRESET_UTC_TODAY, "utc_last24h": PRESET_UTC_LAST24H, "utc_last7d": PRESET_UTC_LAST7D, diff --git a/lib/common/history_window_lib.py b/lib/common/history_window_lib.py index 07aaabc..36454e3 100644 --- a/lib/common/history_window_lib.py +++ b/lib/common/history_window_lib.py @@ -5,7 +5,12 @@ from datetime import datetime, timedelta, timezone PRESET_UTC_TODAY = "utc_today" PRESET_UTC_LAST24H = "utc_last24h" PRESET_UTC_LAST7D = "utc_last7d" +PRESET_UTC_THIS_MONTH = "utc_this_month" +PRESET_UTC_LAST3M = "utc_last3m" +PRESET_UTC_LAST6M = "utc_last6m" +PRESET_ALL = "all" PRESET_CUSTOM = "custom" +PRESET_DEFAULT = PRESET_UTC_THIS_MONTH def utc_now(): @@ -18,12 +23,12 @@ def utc_today_bounds(now=None): return start, now -def resolve_window(query_mapping, default_preset=PRESET_UTC_TODAY): +def resolve_window(query_mapping, default_preset=PRESET_DEFAULT): """ 从 ?win_preset= & from_utc= & to_utc= 解析窗口。 返回 dict: preset, start_utc, end_utc, label, start_ms, end_ms """ - preset = (query_mapping.get("win_preset") or default_preset or PRESET_UTC_TODAY).strip().lower() + preset = (query_mapping.get("win_preset") or default_preset or PRESET_DEFAULT).strip().lower() now = utc_now() if preset == PRESET_UTC_LAST24H: @@ -34,16 +39,36 @@ def resolve_window(query_mapping, default_preset=PRESET_UTC_TODAY): start = now - timedelta(days=7) end = now label = "近7天(UTC)" + elif preset == PRESET_UTC_THIS_MONTH: + start = now.replace(day=1, hour=0, minute=0, second=0, microsecond=0) + end = now + label = f"本月 {start.strftime('%Y-%m')}" + elif preset == PRESET_UTC_LAST3M: + start = now - timedelta(days=90) + end = now + label = "近3月" + elif preset == PRESET_UTC_LAST6M: + start = now - timedelta(days=180) + end = now + label = "近6月" + elif preset == PRESET_ALL: + start = datetime(2000, 1, 1, tzinfo=timezone.utc) + end = now + label = "全部" elif preset == PRESET_CUSTOM: start = _parse_utc_input(query_mapping.get("from_utc")) or utc_today_bounds(now)[0] end = _parse_utc_input(query_mapping.get("to_utc")) or now if end < start: start, end = end, start label = f"{start.strftime('%Y-%m-%d %H:%M')} ~ {end.strftime('%Y-%m-%d %H:%M')} UTC" - else: + elif preset == PRESET_UTC_TODAY: start, end = utc_today_bounds(now) - preset = PRESET_UTC_TODAY label = f"UTC当日 {start.strftime('%Y-%m-%d')}" + else: + return resolve_window( + {**(query_mapping or {}), "win_preset": default_preset}, + default_preset=default_preset, + ) return { "preset": preset, @@ -130,7 +155,7 @@ def query_mapping_from_session(session_store): } -def resolve_list_window(query_mapping, session_store=None, default_preset=PRESET_UTC_TODAY): +def resolve_list_window(query_mapping, session_store=None, default_preset=PRESET_DEFAULT): """ URL 带 win_preset 时解析并写入 session;无参数时用 session 中上次「应用」的预设。 """ diff --git a/lib/instance/templates/embed_boot_scripts.html b/lib/instance/templates/embed_boot_scripts.html index 1833b50..6c0f6b8 100644 --- a/lib/instance/templates/embed_boot_scripts.html +++ b/lib/instance/templates/embed_boot_scripts.html @@ -230,7 +230,7 @@ function deleteKeyHistory(id){ function listWindowQueryString(){ const presetEl = document.getElementById("win-preset-select"); - const preset = (presetEl && presetEl.value) || new URLSearchParams(window.location.search).get("win_preset") || "utc_today"; + const preset = (presetEl && presetEl.value) || new URLSearchParams(window.location.search).get("win_preset") || "utc_this_month"; const q = new URLSearchParams(window.location.search); q.set("win_preset", preset); if(preset === "custom"){ diff --git a/lib/instance/templates/index.html b/lib/instance/templates/index.html index e1eed8f..a78ea96 100644 --- a/lib/instance/templates/index.html +++ b/lib/instance/templates/index.html @@ -759,7 +759,7 @@ function deleteKeyHistory(id){ function listWindowQueryString(){ const presetEl = document.getElementById("win-preset-select"); - const preset = (presetEl && presetEl.value) || new URLSearchParams(window.location.search).get("win_preset") || "utc_today"; + const preset = (presetEl && presetEl.value) || new URLSearchParams(window.location.search).get("win_preset") || "utc_this_month"; const q = new URLSearchParams(window.location.search); q.set("win_preset", preset); if(preset === "custom"){ diff --git a/lib/instance/templates/instance_header_panel.html b/lib/instance/templates/instance_header_panel.html index 2f308ee..09229bb 100644 --- a/lib/instance/templates/instance_header_panel.html +++ b/lib/instance/templates/instance_header_panel.html @@ -2,9 +2,13 @@