diff --git a/src/views/Company/components/MarketDataView/index.tsx b/src/views/Company/components/MarketDataView/index.tsx index f10c7b8c..573642d7 100644 --- a/src/views/Company/components/MarketDataView/index.tsx +++ b/src/views/Company/components/MarketDataView/index.tsx @@ -1,37 +1,31 @@ // src/views/Company/components/MarketDataView/index.tsx // MarketDataView 主组件 - 股票市场数据综合展示 -import React, { useState, useEffect, ReactNode } from 'react'; +import React, { useState, useEffect, ReactNode, useMemo, useCallback } from 'react'; import { Box, Container, - Tabs, - TabList, - TabPanels, - Tab, - TabPanel, - Text, CardBody, Spinner, Center, VStack, - HStack, - Select, - Button, - Icon, + Text, useDisclosure, } from '@chakra-ui/react'; import { - ChevronUpIcon, - RepeatIcon, - ArrowUpIcon, - StarIcon, - LockIcon, - UnlockIcon, -} from '@chakra-ui/icons'; + ChevronUp, + Unlock, + ArrowUp, + Star, + Lock, +} from 'lucide-react'; + +// 通用组件 +import SubTabContainer from '@components/SubTabContainer'; +import type { SubTabConfig } from '@components/SubTabContainer'; // 内部模块导入 -import { themes, DEFAULT_PERIOD, PERIOD_OPTIONS } from './constants'; +import { themes, DEFAULT_PERIOD } from './constants'; import { useMarketData } from './hooks/useMarketData'; import { ThemedCard, @@ -88,22 +82,67 @@ const MarketDataView: React.FC = ({ stockCode: propStockCod }, [propStockCode, stockCode]); // 处理图表点击事件 - const handleChartClick = (params: { seriesName?: string; data?: [number, number] }) => { - if (params.seriesName === '涨幅分析' && params.data) { - const dataIndex = params.data[0]; - const analysis = analysisMap[dataIndex]; + const handleChartClick = useCallback( + (params: { seriesName?: string; data?: [number, number] }) => { + if (params.seriesName === '涨幅分析' && params.data) { + const dataIndex = params.data[0]; + const analysis = analysisMap[dataIndex]; - if (analysis) { - setModalContent(); - onOpen(); + if (analysis) { + setModalContent(); + onOpen(); + } } - } - }; + }, + [analysisMap, theme, onOpen] + ); + + // Tab 配置 - 使用通用 SubTabContainer + const tabConfigs: SubTabConfig[] = [ + { key: 'trade', name: '交易数据', icon: ChevronUp, component: TradeDataPanel }, + { key: 'funding', name: '融资融券', icon: Unlock, component: FundingPanel }, + { key: 'bigDeal', name: '大宗交易', icon: ArrowUp, component: BigDealPanel }, + { key: 'unusual', name: '龙虎榜', icon: Star, component: UnusualPanel }, + { key: 'pledge', name: '股权质押', icon: Lock, component: PledgePanel }, + ]; + + // 传递给 Tab 组件的 props + const componentProps = useMemo( + () => ({ + theme, + tradeData, + minuteData, + minuteLoading, + analysisMap, + onLoadMinuteData: loadMinuteData, + onChartClick: handleChartClick, + selectedPeriod, + onPeriodChange: setSelectedPeriod, + fundingData, + bigDealData, + unusualData, + pledgeData, + }), + [ + theme, + tradeData, + minuteData, + minuteLoading, + analysisMap, + loadMinuteData, + handleChartClick, + selectedPeriod, + fundingData, + bigDealData, + unusualData, + pledgeData, + ] + ); return ( - + - + {/* 股票概览 */} {summary && } @@ -126,152 +165,14 @@ const MarketDataView: React.FC = ({ stockCode: propStockCod ) : ( - - {/* Tab 导航栏 */} - - - - - - - 交易数据 - - - - - - 融资融券 - - - - - - 大宗交易 - - - - - - 龙虎榜 - - - - - - 股权质押 - - - - - {/* 时间范围选择和刷新按钮 */} - - - 时间范围: - - - - - - - - - {/* 交易数据 Tab */} - - - - - {/* 融资融券 Tab */} - - - - - {/* 大宗交易 Tab */} - - - - - {/* 龙虎榜 Tab */} - - - - - {/* 股权质押 Tab */} - - - - - + onTabChange={(index) => setActiveTab(index)} + isLazy + /> )}