From 6b49231d67a656de65037c5a776b2443939d09f4 Mon Sep 17 00:00:00 2001 From: shy3130 <415333856@qq.com> Date: Sun, 30 Aug 2026 19:05:46 +0800 Subject: [PATCH] =?UTF-8?q?feat(onboarding):=20=E7=AC=AC3=E6=AD=A5?= =?UTF-8?q?=E7=94=B1=E3=80=8C=E8=83=BD=E5=8A=9B=E6=8E=A2=E6=B5=8B=E3=80=8D?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E3=80=8C=E8=83=BD=E5=8A=9B=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 以能力路由矩阵呈现(7 数据集逐行: 生效源+可用性+候选提示), 替代以 TickFlow 档位为中心的旧视图, 多源下矩阵即真相 - 不可用行针对性提示: 有候选给「可切换候选: X」; TickFlow 未配 Key 给「配置 Key 后可解锁」; 底部汇总 N/M 可用与 None 档说明 - 步骤名/注释同步改为能力路由; 移除不再使用的 TickFlow 档位视图代码 - 浏览器实测: 7 行矩阵渲染正确, 可用性/候选/汇总与当前环境一致 --- frontend/src/pages/Onboarding.tsx | 189 +++++++++++------------------- 1 file changed, 70 insertions(+), 119 deletions(-) diff --git a/frontend/src/pages/Onboarding.tsx b/frontend/src/pages/Onboarding.tsx index 3ae1d5f..25921fe 100644 --- a/frontend/src/pages/Onboarding.tsx +++ b/frontend/src/pages/Onboarding.tsx @@ -12,7 +12,6 @@ import { LineChart, ScanSearch, Flame, - Zap, Radar, ShieldCheck, BellRing, @@ -23,18 +22,18 @@ import { Plus, Puzzle, KeyRound, + Route, } from 'lucide-react' import { api } from '@/lib/api' -import { useCapabilities, usePreferences, useSettings } from '@/lib/useSharedQueries' +import { usePreferences, useSettings } from '@/lib/useSharedQueries' import { QK } from '@/lib/queryKeys' -import { CAP_LABELS } from '@/lib/capability-labels' import { Logo } from '@/components/Logo' import { DataSourceEditor } from '@/pages/settings/DataSourceEditor' // ===== 引导页:5 步向导 ===== -// 0. 声明 1. 欢迎 2. 输入 Key(可跳过) 3. 能力探测结果 4. 完成 → 写标记 → 进面板 +// 0. 声明 1. 欢迎 2. 数据源与 Key 3. 能力路由检测 4. 完成 → 写标记 → 进面板 -const STEPS = ['声明', '欢迎', '数据源', '能力探测', '完成'] as const +const STEPS = ['声明', '欢迎', '数据源', '能力路由', '完成'] as const const BRAND = '#8B5CF6' @@ -643,149 +642,96 @@ function DataSourceStep({ onNext, onBack }: { onNext: () => void; onBack: () => ) } -// ===== Step 3: 能力探测结果 ===== -// 按当前实际选中的数据源分流: -// - TickFlow: 提示第三方源性质 + 可配 Key、按 Key 匹配档位, 展示档位与能力探测 -// - 其他源: 弱化 TickFlow (不展示其档位/能力), 只汇总所选源的数据集覆盖与回落规则 +// ===== Step 3: 能力路由检测结果 ===== +// 以能力路由矩阵呈现: 每个标准化数据集一行, 展示当前生效源与可用性, +// 不再以 TickFlow 档位为中心 —— 多源下各数据集独立路由, 矩阵即真相。 function ResultStep({ onNext, onBack }: { onNext: () => void; onBack: () => void }) { const settings = useSettings() - const caps = useCapabilities() const prefs = usePreferences() - const sources = useQuery({ - queryKey: QK.dataSources, - queryFn: api.dataSources, - staleTime: 60_000, + const matrix = useQuery({ + queryKey: QK.capabilityMatrix, + queryFn: api.capabilityMatrix, + staleTime: 30_000, }) const activeName = prefs.data?.daily_data_provider || 'tickflow' const isTickflow = activeName === 'tickflow' - const sourceItem = [ - ...(sources.data?.builtin ?? []), - ...(sources.data?.plugins ?? []), - ...(sources.data?.custom ?? []), - ].find(s => s.name === activeName) - + const routes = matrix.data?.capabilities ?? [] // 是否配置成功 —— 免费档(free)或付费档(api_key)都算;None 档算未配置 const hasKey = settings.data?.mode === 'free' || settings.data?.mode === 'api_key' - const capList = caps.data ? Object.entries(caps.data.capabilities) : [] + const usableCount = routes.filter(r => r.usable).length return (
+ 每个标准化数据集独立路由:下方是当前生效源与实际可用性,随时可在 + 设置 → 数据源 + 按数据集改选候选源。 +
- {prefs.isLoading ? ( + {matrix.isLoading ? (- Key 已生效,以下是你当前可用的全部能力。后续可在 - 设置 → 账户 - 中重新检测或更换 Key。 -
- -- 当前未配置有效 Key,仍可使用看板、选股、回测等功能 —— 进入看板后可直接获取近 1 年历史日K数据。配置 Key 后可解锁实时行情监控等能力,随时在 - 设置 → 账户 填写。 -
-- 行情能力由所选数据源决定:以上数据集由该源提供,未覆盖的数据集自动回落内置源,无需额外配置。 -
- -