feat(kline): 弹窗切股导航 + 邻股预取 + 悬停「至今」+ 外部链接 - #210
Open
thinkbuf wants to merge 11 commits into
Open
Conversation
K线弹窗支持在来源榜单内切股: 顶栏 ◀ n/N ▶ 按钮 + ←/→ 方向键(输入框/编辑器内让位), 首↔尾循环弱提示, 并给来源页当前预览行加高亮。 - StockPreviewDialog: 新增 navList/onNavigate props, 导出 NavItem/toNavItems; 合并 ESC 与方向键监听; wrapMsg 弱提示浮层 - 9 个来源页面(自选/监控/选股/概念/行业/看板/连板/成分)构建 navList 并传 activeSymbol Co-Authored-By: Claude <noreply@anthropic.com>
同一标的在榜单中多次出现(多概念/行业 leader、监控重复触发)时, 去重后保留首次出现, 避免切股与 n/N 计数空跳。 Co-Authored-By: Claude <noreply@anthropic.com>
切股瞬间免 loading + 弹窗高度不抖动。 - 新建 lib/kline.ts: klineDailyQueryOptions 作为日K查询唯一权威配置, StockPanel(信息条)/StockDailyKChart(图表)/邻近预取三处共享同一 cache key - StockPanel: 日K查询上提并新增 prefetchSymbols prop, 预取左右邻股日K+财务, 日K到货后级联预取其默认选中日分时(klineMinute) —— 日K视图并排展示的分时图也免 loading - StockInfoBar: 无数据时保持挂载(加载态占位), 按字段配置预留行高, 高度不塌陷 - useFinancials: 抽出 financialMetricsQueryOptions 供 prefetch 复用 - StockDailyKChart: 查询改走共享 options, 移除 onDataChange 上报链路 Co-Authored-By: Claude <noreply@anthropic.com>
悬停某根K线时, 图表自带信息栏额外显示「至今」(该K线昨收到最新收盘的涨跌幅) 与「周期 N」(到最新K线共多少根); 鼠标移出图表区仅隐藏该字段, 其余保持。 - updateAxisPointer 重写: 区分 悬停K线变化 与 竖虚线显隐, 分别控制信息栏重绘与副图 graphic - 信息栏行高 height → min-height, 容纳「至今」字段不被裁剪 Co-Authored-By: Claude <noreply@anthropic.com>
设置页新增「个股详情外链」: 可填 URL 模板(占位符 {code}/{market}/{symbol}),
信息条第一行右侧显示外链图标(新标签打开)。留空关闭。
- 新建 lib/stock-external-link.ts: load/save/build + scheme 白名单(http/https) + symbol 形状守卫
- storage.ts 新增 stockExternalTemplate kv
Co-Authored-By: Claude <noreply@anthropic.com>
… and nav lists 审查后清理, 无行为变更: - lib/kline.ts: 新增 klineMinuteQueryOptions, StockIntradayChart/StockMultiDayIntradayChart/ StockPanel 邻股预取共用 (与 klineDailyQueryOptions 同风格单源) - LimitUpLadder: sortLadderStocks 每 tick 只跑一次 (sortedTiers memo 供 TierGroup 与 ladderNavItems 共用), resolveExtFields 提升为 memo (原来算 4 次) - Dashboard: rankNav 复用 toNavItems 去掉 ! 断言; onNavigate 死条件简化为 alert: undefined - Screener: 消费 ScreenerTable 传入的 navList (成员弹窗导航不再被丢弃), 移除重复 memo - Watchlist: nav 列表仅在弹窗打开时构建 (sortedRows 随行情 tick 重建) - ConceptAnalysis/IndustryAnalysis: 重复的 onStockClick 内联 lambda 抽为 handleStockClick - StockPreviewDialog: 方向键与 ESC 同层级守卫 priceAlertDraft (点位弹窗打开时不切股) - StockPanel: 去掉冗余 tick 别名; Monitor: 去掉冗余 as NavItem 断言 Co-Authored-By: Claude <noreply@anthropic.com>
…switching - 弹窗 max-w 1100→1200, 日K/分时并排改 1.4:1 (日K为主视图), 图表信息栏(悬停含「至今/周期」)有足够宽度单行容纳, 不再换行 - 修复: 分时 tab 下弹窗内切股会跳回日K — 视图重置仅在弹窗首次打开(symbol 从 null 变非空)时发生, 切股保留当前视图 Co-Authored-By: Claude <noreply@anthropic.com>
…tab instant 之前邻股只预取了日K/财务/单日分时(日K视图旁的分时图), 分时 tab 用的 多日分时(klineMinuteRange)没预取 → 分时 tab 切股仍要重新加载。 - lib/kline.ts: 新增 klineMinuteRangeQueryOptions, StockMultiDayIntradayChart 与预取共用 - StockPanel: 新增 intradayDays prop, 邻股预取补充 klineMinuteRange(days) + 最新分时 - StockPreviewDialog: 把当前 intradayDays 传给两个分支的 StockPanel, 保证 queryKey 命中 Co-Authored-By: Claude <noreply@anthropic.com>
…ray focus ring 点过分时tab/外链等控件后方向键切股, 浏览器会给该已聚焦控件显示 focus-visible 默认蓝色 outline(应用未自定义 focus 样式, 即浏览器默认环)。 切股成功后 blur 掉当前聚焦元素, 一次覆盖弹窗内所有控件。 Co-Authored-By: Claude <noreply@anthropic.com>
…uard and default 审查后清理, 无行为变更 (除下述作用域修正): - StockPanel: 日K/分时并排的占宽从硬编码 flex-[1.4] 改为 dailyKlineFlex prop (默认 flex-1) —— 避免静默改变 TradeKlineModal 等其他消费方的并排布局; 仅 StockPreviewDialog 显式传入 flex-[1.4] - lib/kline.ts: klineMinuteRangeQueryOptions 内嵌「仅同 symbol」placeholderData 守卫, 与 klineDailyQueryOptions 同源, 删除 StockMultiDayIntradayChart 的内联副本 - DEFAULT_INTRADAY_DAYS 单源化: StockPanel 默认值与弹窗 loadIntradayDays 回退共用 - StockPreviewDialog: prevSymbolRef 初始值改 null (首次挂载 view 本就是 daily); blur 复用 keydown 的 e.target(t) 替代重复 document.activeElement 查询 Co-Authored-By: Claude <noreply@anthropic.com>
- EChartsCandlestick: 悬停重置 effect 依赖补上 symbol(_symbol) —— 预取切股到同长度邻股时 data.length 不变, 原 [data.length] 不触发, hoverActiveRef 残留导致切股后「至今/周期」无悬停仍显示 (自愈于下次 mousemove) - Watchlist: DimensionMembersDialog 的 onStockClick 补第三参 navList —— 从成分弹窗打开个股时用成分列表作切股导航 (成员可能不在自选列表, 原实现退回自选列表, 成员不在自选则导航按钮不显示) Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
对「K线弹窗」(StockPreviewDialog) 的一组增强,移植自 fork 侧积累的实现,适配到当前上游代码。
功能
弹窗内切股导航
邻股预取 + 稳定高度
lib/kline.ts:klineDailyQueryOptions/klineMinuteQueryOptions/klineMinuteRangeQueryOptions单源工厂悬停显示「至今/周期N」
可配置外部股票链接
{code}/{market}/{symbol}),信息条显示外链图标(新标签打开)配套修复
未包含
验证
pnpm --dir frontend build(tsc -b && vite build)通过🤖 Generated with Claude Code