feat(v0.2): 功能门槛统一为数据源通用的能力标准

- 后端: 数据集→能力映射增广 (daily/adj_factor/minute/financial),
  非 tickflow provider 按声明数据集动态 grant; 数据源偏好更新与
  删除数据源后刷新 app.state.capabilities 快照; 新增 8 项测试
- 前端: 通用界面去档位词, 缺能力统一「{能力名} · 不可用」徽章
  (capability-labels 新增 MissingCapChip, 点击跳设置→数据源);
  StatCard/深度配置/分钟同步/历史扩展/财务页等 20+ 文件对齐;
  实时模式判定改用 quoteStatus.mode 与 realtime_allowed,
  替代前端 tierRank 推断; 监控设置页放开整页拦截
- 档位词仅保留 TickFlow 专属界面 (Key 配置/端点测速/引导页),
  docs/configuration.md 档位表加注解说明
This commit is contained in:
shy3130
2026-08-23 12:34:40 +08:00
parent 0f2c7ce9b0
commit da3ada28e1
25 changed files with 327 additions and 172 deletions
+6 -2
View File
@@ -590,7 +590,7 @@ def save_data_source(req: CustomSourceIn) -> dict:
@router.delete("/data-sources/{name}")
def delete_data_source(name: str) -> dict:
def delete_data_source(name: str, request: Request) -> dict:
"""删除一个自定义数据源 yaml, 保存后自动 reload。
若当前总开关选中的就是被删的源, 回退到 tickflow。
@@ -615,6 +615,8 @@ def delete_data_source(name: str) -> dict:
updates["adj_factor_provider"] = "same_as_daily"
if updates:
preferences.save(updates)
# 删除源可能触发偏好回退 tickflow, 同步刷新能力快照
request.app.state.capabilities = detect_capabilities()
return list_data_sources()
@@ -644,12 +646,14 @@ def test_data_source(req: CustomSourceTestIn) -> dict:
@router.put("/preferences/data-providers")
def update_data_providers(req: DataProvidersIn) -> dict:
def update_data_providers(req: DataProvidersIn, request: Request) -> dict:
"""保存数据源选择。"""
from app.services import preferences
updates = req.model_dump(exclude_none=True)
if updates:
preferences.save(updates)
# 刷新能力快照: 当前 provider 变化会改变自定义源能力增广结果 (读缓存, 无网络请求)
request.app.state.capabilities = detect_capabilities()
return {
"daily_data_provider": preferences.get_daily_data_provider(),
"adj_factor_provider": preferences.get_adj_factor_provider(),