diff --git a/src/views/LimitAnalyse/components/SearchComponents.js b/src/views/LimitAnalyse/components/SearchComponents.js index 05803f3b..31674928 100644 --- a/src/views/LimitAnalyse/components/SearchComponents.js +++ b/src/views/LimitAnalyse/components/SearchComponents.js @@ -138,7 +138,22 @@ export const AdvancedSearch = ({ onSearch, loading }) => { 搜索模式 - setSearchMode(e.target.value)} + bg="white" + _dark={{ bg: 'gray.700' }} + sx={{ + '& option': { + bg: 'white', + color: 'gray.800', + _dark: { + bg: 'gray.700', + color: 'white' + } + } + }} + > diff --git a/src/views/LimitAnalyse/components/SectorDetails.js b/src/views/LimitAnalyse/components/SectorDetails.js index 5c1406bf..113108e3 100644 --- a/src/views/LimitAnalyse/components/SectorDetails.js +++ b/src/views/LimitAnalyse/components/SectorDetails.js @@ -14,28 +14,21 @@ import { AccordionButton, AccordionPanel, AccordionIcon, - IconButton, Flex, Circle, Tag, TagLabel, Wrap, WrapItem, - Button, useColorModeValue, - Collapse, - useDisclosure, } from '@chakra-ui/react'; -import { StarIcon, ViewIcon, TimeIcon, ChevronDownIcon, ChevronUpIcon } from '@chakra-ui/icons'; -import { getFormattedTextProps } from '../../../utils/textUtils'; +import { StarIcon, TimeIcon } from '@chakra-ui/icons'; -const SectorDetails = ({ sortedSectors, totalStocks, onStockClick }) => { +const SectorDetails = ({ sortedSectors, totalStocks }) => { // 使用 useRef 来维持展开状态,避免重新渲染时重置 const expandedSectorsRef = useRef([]); const [expandedSectors, setExpandedSectors] = useState([]); const [isInitialized, setIsInitialized] = useState(false); - // 新增:管理每个股票涨停原因的展开状态 - const [expandedStockReasons, setExpandedStockReasons] = useState({}); const cardBg = useColorModeValue('white', 'gray.800'); @@ -61,14 +54,6 @@ const SectorDetails = ({ sortedSectors, totalStocks, onStockClick }) => { } }; - // 新增:切换股票涨停原因的展开状态 - const toggleStockReason = (stockCode) => { - setExpandedStockReasons(prev => ({ - ...prev, - [stockCode]: !prev[stockCode] - })); - }; - const getSectorColorScheme = (sector) => { if (sector === '公告') return 'orange'; if (sector === '其他') return 'gray'; @@ -180,105 +165,72 @@ const SectorDetails = ({ sortedSectors, totalStocks, onStockClick }) => { .map((stock, idx) => ( onStockClick && onStockClick(stock)} > - - - - {stock.sname} - {stock.scode} - {stock.continuous_days && ( - - {stock.continuous_days} - - )} - - - - - - 涨停原因: - - - {getFormattedTextProps(stock.brief || stock.summary || '暂无涨停原因').children} - - - - - - - - 涨停: {formatStockTime(stock)} - - {stock.first_time && ( - 首板: {stock.first_time.split(' ')[0]} - )} - {stock.change_pct && ( - - 涨幅: {stock.change_pct}% - - )} - - - {stock.core_sectors && stock.core_sectors.length > 0 && ( - - {stock.core_sectors.slice(0, 5).map((s, i) => ( - - - {s} - - - ))} - {stock.core_sectors.length > 5 && ( - - - - +{stock.core_sectors.length - 5} - - - - )} - + + {/* 左侧:股票基本信息 */} + + {stock.sname} + {stock.scode} + {stock.continuous_days && ( + + {stock.continuous_days} + )} - + - : } - size="sm" - variant="ghost" - colorScheme={colorScheme} - aria-label={expandedStockReasons[stock.scode] ? "收起原因" : "展开原因"} - onClick={() => toggleStockReason(stock.scode)} - /> - + {/* 中间:时间和涨幅信息 */} + + + + 涨停: {formatStockTime(stock)} + + {stock.first_time && ( + 首板: {stock.first_time.split(' ')[0]} + )} + {stock.change_pct && ( + + 涨幅: {stock.change_pct}% + + )} + + + {/* 右侧:所属板块标签 */} + {stock.core_sectors && stock.core_sectors.length > 0 && ( + + {stock.core_sectors.slice(0, 4).map((s, i) => ( + + + {s} + + + ))} + {stock.core_sectors.length > 4 && ( + + + + +{stock.core_sectors.length - 4} + + + + )} + + )} + ))} diff --git a/src/views/LimitAnalyse/index.js b/src/views/LimitAnalyse/index.js index f3de585a..dae9cfaa 100755 --- a/src/views/LimitAnalyse/index.js +++ b/src/views/LimitAnalyse/index.js @@ -40,7 +40,7 @@ const API_URL = process.env.NODE_ENV === 'production' ? '/report-api' : 'http:// // 恢复使用本页自带的轻量日历 import EnhancedCalendar from './components/EnhancedCalendar'; import SectorDetails from './components/SectorDetails'; -import { DataAnalysis, StockDetailModal } from './components/DataVisualizationComponents'; +import { DataAnalysis } from './components/DataVisualizationComponents'; import { AdvancedSearch, SearchResultsModal } from './components/SearchComponents'; // 导航栏已由 MainLayout 提供,无需在此导入 @@ -60,8 +60,6 @@ export default function LimitAnalyse() { const [wordCloudData, setWordCloudData] = useState([]); const [searchResults, setSearchResults] = useState(null); const [isSearchOpen, setIsSearchOpen] = useState(false); - const [selectedStock, setSelectedStock] = useState(null); - const [isStockDetailOpen, setIsStockDetailOpen] = useState(false); const toast = useToast(); @@ -69,15 +67,7 @@ export default function LimitAnalyse() { const { trackDateSelected, trackDailyStatsViewed, - trackSectorToggled, - trackSectorClicked, - trackLimitStockClicked, trackSearchInitiated, - trackSearchResultClicked, - trackHighPositionStocksViewed, - trackSectorAnalysisViewed, - trackDataRefreshed, - trackStockDetailViewed, } = useLimitAnalyseEvents(); const bgColor = useColorModeValue('gray.50', 'gray.900'); @@ -245,20 +235,6 @@ export default function LimitAnalyse() { } }; - // 处理股票点击 - const handleStockClick = (stock) => { - setSelectedStock(stock); - setIsStockDetailOpen(true); - // 🎯 追踪股票详情查看 - trackStockDetailViewed(stock.scode, stock.sname, 'sector_details'); - }; - - // 关闭股票详情弹窗 - const handleCloseStockDetail = () => { - setIsStockDetailOpen(false); - setSelectedStock(null); - }; - // 处理板块数据排序 const getSortedSectorData = () => { if (!dailyData?.sector_data) return []; @@ -478,6 +454,18 @@ export default function LimitAnalyse() { {/* 高级搜索 */} + {/* 数据分析 - 移到板块详情上方 */} + {loading ? ( + + ) : ( + + + + )} + {/* 板块详情 - 核心内容 */} {loading ? ( @@ -486,23 +474,12 @@ export default function LimitAnalyse() { )} {/* 高位股统计 */} - - {/* 数据分析 */} - {loading ? ( - - ) : ( - - )} {/* 弹窗 */} @@ -513,13 +490,6 @@ export default function LimitAnalyse() { onStockClick={() => {}} /> - {/* 股票详情弹窗 */} - - {/* 浮动按钮 */}