Files
qihuo/nav_settings.py
T
2026-06-30 20:22:42 +08:00

73 lines
2.2 KiB
Python

# Copyright (c) 2025-2026 马建军. All rights reserved.
# 专有软件 — 未经授权禁止复制、传播、转售。
# 严禁用于:带单/代客理财、向他人推荐期货品种或买卖建议、融资配资等业务。
# 详见 LICENSE.zh-CN.txt 与 docs/软件购买与使用协议.md
"""顶栏导航项显示开关(系统设置)。"""
from __future__ import annotations
import json
from typing import Callable
from edition import USER_EDITION
# 可在系统设置中开关的导航项
NAV_TOGGLES: dict[str, str] = {
"dashboard": "数据看板",
"risk_guide": "风控说明",
"fees": "手续费配置",
"plans": "开单计划",
"market": "行情K线",
"strategy": "策略交易",
"ai": "AI 分析",
}
_USER_EDITION_NAV_HIDDEN = frozenset({"market"})
DEFAULT_NAV: dict[str, bool] = {k: True for k in NAV_TOGGLES}
if USER_EDITION:
DEFAULT_NAV["market"] = False
def nav_toggles_for_settings() -> dict[str, str]:
"""系统设置页展示的导航开关(用户版隐藏行情 K 线)。"""
if not USER_EDITION:
return dict(NAV_TOGGLES)
return {k: v for k, v in NAV_TOGGLES.items() if k not in _USER_EDITION_NAV_HIDDEN}
def get_nav_items(get_setting: Callable[[str, str], str]) -> dict[str, bool]:
raw = (get_setting("nav_items", "") or "").strip()
out = dict(DEFAULT_NAV)
if not raw:
return out
try:
data = json.loads(raw)
if isinstance(data, dict):
for k in NAV_TOGGLES:
if k in data:
out[k] = bool(data[k])
except json.JSONDecodeError:
pass
if USER_EDITION:
out["market"] = False
return out
def save_nav_items(set_setting: Callable[[str, str], None], items: dict[str, bool]) -> None:
merged = dict(DEFAULT_NAV)
for k in nav_toggles_for_settings():
if k in items:
merged[k] = bool(items[k])
if USER_EDITION:
merged["market"] = False
set_setting("nav_items", json.dumps(merged, ensure_ascii=False))
def nav_enabled(get_setting: Callable[[str, str], str], key: str) -> bool:
if USER_EDITION and key == "market":
return False
if key not in NAV_TOGGLES:
return True
return get_nav_items(get_setting).get(key, True)