feat: 新增实时要闻·动态追踪与市场复盘功能,优化导航体验

新增功能:
- 实时要闻·动态追踪横向滚动卡片(DynamicNewsCard)
- 动态新闻事件卡片组件(DynamicNewsEventCard)
- 市场复盘卡片组件(MarketReviewCard)
- 股票涨跌幅指标组件(StockChangeIndicators)
- 交易时间工具函数(tradingTimeUtils)
- Mock API 支持动态新闻数据生成

UI 优化:
- EventFollowButton 改用 react-icons 星星图标,实现真正的空心/实心效果
- 关注按钮添加半透明白色背景(whiteAlpha.500),悬停效果更明显
- 事件卡片标题添加右侧留白,防止关注按钮遮挡文字

性能优化:
- 禁用 Router v7_startTransition 特性,解决路由切换延迟 2 秒问题
- 调整导航菜单点击顺序(先跳转后关闭),提升响应速度

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-10-31 14:11:03 +08:00
parent 5d8ad5e442
commit c372832f1f
11 changed files with 1211 additions and 23 deletions

View File

@@ -2,7 +2,7 @@
// 事件相关的 Mock API Handlers
import { http, HttpResponse } from 'msw';
import { getEventRelatedStocks, generateMockEvents, generateHotEvents, generatePopularKeywords } from '../data/events';
import { getEventRelatedStocks, generateMockEvents, generateHotEvents, generatePopularKeywords, generateDynamicNewsEvents } from '../data/events';
import { getMockFutureEvents, getMockEventCountsForMonth } from '../data/account';
// 模拟网络延迟
@@ -111,6 +111,47 @@ export const eventHandlers = [
}
}),
// 获取动态新闻(实时要闻·动态追踪专用)
http.get('/api/events/dynamic-news', async ({ request }) => {
await delay(400);
const url = new URL(request.url);
const count = parseInt(url.searchParams.get('count') || '30');
const startTime = url.searchParams.get('start_time');
const endTime = url.searchParams.get('end_time');
console.log('[Mock] 获取动态新闻, count:', count, 'startTime:', startTime, 'endTime:', endTime);
try {
let timeRange = null;
if (startTime && endTime) {
timeRange = {
startTime: new Date(startTime),
endTime: new Date(endTime)
};
}
const events = generateDynamicNewsEvents(timeRange, count);
return HttpResponse.json({
success: true,
data: events,
total: events.length,
message: '获取成功'
});
} catch (error) {
console.error('[Mock] 获取动态新闻失败:', error);
return HttpResponse.json(
{
success: false,
error: '获取动态新闻失败',
data: []
},
{ status: 500 }
);
}
}),
// ==================== 事件详情相关 ====================
// 获取事件相关股票