# 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)