refactor: Community 目录结构重组 + 修复导入路径 + 添加 Mock 数据

## 目录重构
- DynamicNewsCard/ → DynamicNews/(含 layouts/, hooks/ 子目录)
- EventCard 原子组件 → EventCard/atoms/
- EventDetailModal 独立目录化
- HotEvents 独立目录化(含 CSS)
- SearchFilters 独立目录化(CompactSearchBox, TradingTimeFilter)

## 导入路径修复
- EventCard/*.js: 统一使用 @constants/, @utils/, @components/ 别名
- atoms/*.js: 修复移动后的相对路径问题
- DynamicNewsCard.js: 更新 contexts, store, constants 导入
- EventHeaderInfo.js, CompactMetaBar.js: 修复 EventFollowButton 导入

## Mock Handler 添加
- /api/events/:eventId/expectation-score - 事件超预期得分
- /api/index/:indexCode/realtime - 指数实时行情

## 警告修复
- CitationMark.js: overlayInnerStyle → styles (Antd 5.x)
- CitedContent.js: 移除不支持的 jsx 属性

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
zdl
2025-12-09 13:16:43 +08:00
parent c704b12bce
commit 15f5c445c5
47 changed files with 409 additions and 76 deletions

View File

@@ -12,13 +12,15 @@ import {
useColorModeValue,
} from '@chakra-ui/react';
import dayjs from 'dayjs';
import { getImportanceConfig } from '../../../../constants/importanceLevels';
import { getImportanceConfig } from '@constants/importanceLevels';
// 导入子组件
import EventTimeline from './EventTimeline';
import EventHeader from './EventHeader';
import EventStats from './EventStats';
import EventFollowButton from './EventFollowButton';
import {
EventTimeline,
EventHeader,
EventStats,
EventFollowButton,
} from './atoms';
/**
* 紧凑模式事件卡片组件

View File

@@ -10,15 +10,17 @@ import {
useColorModeValue,
} from '@chakra-ui/react';
import dayjs from 'dayjs';
import { getImportanceConfig } from '../../../../constants/importanceLevels';
import { getImportanceConfig } from '@constants/importanceLevels';
// 导入子组件
import EventTimeline from './EventTimeline';
import EventHeader from './EventHeader';
import EventStats from './EventStats';
import EventFollowButton from './EventFollowButton';
import EventPriceDisplay from './EventPriceDisplay';
import EventDescription from './EventDescription';
import {
EventTimeline,
EventHeader,
EventStats,
EventFollowButton,
EventPriceDisplay,
EventDescription,
} from './atoms';
/**
* 详细模式事件卡片组件

View File

@@ -12,12 +12,12 @@ import {
useColorModeValue,
} from '@chakra-ui/react';
import dayjs from 'dayjs';
import { getImportanceConfig } from '../../../../constants/importanceLevels';
import { getChangeColor } from '../../../../utils/colorUtils';
import { getImportanceConfig } from '@constants/importanceLevels';
import { getChangeColor } from '@utils/colorUtils';
// 导入子组件
import EventFollowButton from './EventFollowButton';
import StockChangeIndicators from '../../../../components/StockChangeIndicators';
import { EventFollowButton } from './atoms';
import StockChangeIndicators from '@components/StockChangeIndicators';
/**
* 动态新闻事件卡片组件(极简版)

View File

@@ -13,17 +13,19 @@ import {
useColorModeValue,
useBreakpointValue,
} from '@chakra-ui/react';
import { getImportanceConfig } from '../../../../constants/importanceLevels';
import { PROFESSIONAL_COLORS } from '../../../../constants/professionalTheme';
import { getImportanceConfig } from '@constants/importanceLevels';
import { PROFESSIONAL_COLORS } from '@constants/professionalTheme';
import { useDevice } from '@hooks/useDevice';
import dayjs from 'dayjs';
// 导入子组件
import ImportanceStamp from './ImportanceStamp';
import EventTimeline from './EventTimeline';
import EventFollowButton from './EventFollowButton';
import StockChangeIndicators from '../../../../components/StockChangeIndicators';
import KeywordsCarousel from './KeywordsCarousel';
import {
ImportanceStamp,
EventTimeline,
EventFollowButton,
KeywordsCarousel,
} from './atoms';
import StockChangeIndicators from '@components/StockChangeIndicators';
/**
* 横向布局的动态新闻事件卡片组件

View File

@@ -1,4 +1,4 @@
// src/views/Community/components/EventCard/EventFollowButton.js
// src/views/Community/components/EventCard/atoms/EventFollowButton.js
import React from 'react';
import { IconButton, Box } from '@chakra-ui/react';
import { AiFillStar, AiOutlineStar } from 'react-icons/ai';

View File

@@ -1,8 +1,8 @@
// src/views/Community/components/EventCard/EventImportanceBadge.js
// src/views/Community/components/EventCard/atoms/EventImportanceBadge.js
import React from 'react';
import { Badge, Tooltip, VStack, HStack, Text, Divider, Circle } from '@chakra-ui/react';
import { InfoIcon } from '@chakra-ui/icons';
import { getImportanceConfig, getAllImportanceLevels } from '../../../../constants/importanceLevels';
import { getImportanceConfig, getAllImportanceLevels } from '@constants/importanceLevels';
/**
* 事件重要性等级标签组件

View File

@@ -1,7 +1,7 @@
// src/views/Community/components/EventCard/EventPriceDisplay.js
// src/views/Community/components/EventCard/atoms/EventPriceDisplay.js
import React, { useState } from 'react';
import { HStack, Box, Text, Tooltip, Progress } from '@chakra-ui/react';
import { PriceArrow } from '../../../../utils/priceFormatters';
import { PriceArrow } from '@utils/priceFormatters';
/**
* 事件价格变动显示组件

View File

@@ -1,4 +1,4 @@
// src/views/Community/components/EventCard/ImportanceBadge.js
// src/views/Community/components/EventCard/atoms/ImportanceBadge.js
// 重要性标签通用组件
import React from 'react';
@@ -14,7 +14,7 @@ import {
PopoverArrow,
Portal,
} from '@chakra-ui/react';
import { getImportanceConfig, getAllImportanceLevels } from '../../../../constants/importanceLevels';
import { getImportanceConfig, getAllImportanceLevels } from '@constants/importanceLevels';
/**
* 重要性标签组件实心样式

View File

@@ -1,4 +1,4 @@
// src/views/Community/components/EventCard/ImportanceStamp.js
// src/views/Community/components/EventCard/atoms/ImportanceStamp.js
// 重要性印章组件
import React from 'react';
@@ -7,7 +7,7 @@ import {
Text,
useColorModeValue,
} from '@chakra-ui/react';
import { getImportanceConfig } from '../../../../constants/importanceLevels';
import { getImportanceConfig } from '@constants/importanceLevels';
/**
* 重要性印章组件模拟盖章效果

View File

@@ -1,8 +1,8 @@
// src/views/Community/components/EventCard/KeywordsCarousel.js
// src/views/Community/components/EventCard/atoms/KeywordsCarousel.js
// Keywords标签组件点击切换
import React, { useState } from 'react';
import { Box, Text, Tooltip } from '@chakra-ui/react';
import { PROFESSIONAL_COLORS } from '../../../../constants/professionalTheme';
import { PROFESSIONAL_COLORS } from '@constants/professionalTheme';
/**
* Keywords标签组件点击切换下一个

View File

@@ -0,0 +1,13 @@
// src/views/Community/components/EventCard/atoms/index.js
// 事件卡片原子组件
export { default as EventDescription } from './EventDescription';
export { default as EventFollowButton } from './EventFollowButton';
export { default as EventHeader } from './EventHeader';
export { default as EventImportanceBadge } from './EventImportanceBadge';
export { default as EventPriceDisplay } from './EventPriceDisplay';
export { default as EventStats } from './EventStats';
export { default as EventTimeline } from './EventTimeline';
export { default as ImportanceBadge } from './ImportanceBadge';
export { default as ImportanceStamp } from './ImportanceStamp';
export { default as KeywordsCarousel } from './KeywordsCarousel';