diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/KLineModule.tsx b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/KLineModule.tsx
index a04f9889..b899048b 100644
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/KLineModule.tsx
+++ b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/KLineModule.tsx
@@ -1,5 +1,5 @@
// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/KLineModule.tsx
-// K线模块 - 日K线/分钟K线切换展示
+// K线模块 - 日K线/分钟K线切换展示(黑金主题)
import React, { useState } from 'react';
import {
@@ -12,19 +12,29 @@ import {
Badge,
Center,
Spinner,
- CardBody,
- CardHeader,
- Heading,
+ Icon,
} from '@chakra-ui/react';
-import { RepeatIcon } from '@chakra-ui/icons';
-import { BarChart2, Clock } from 'lucide-react';
+import { RepeatIcon, InfoIcon } from '@chakra-ui/icons';
+import { BarChart2, Clock, TrendingUp } from 'lucide-react';
import ReactECharts from 'echarts-for-react';
-import ThemedCard from '../../ThemedCard';
+import { darkGoldTheme } from '../../../constants';
import { getKLineOption, getMinuteKLineOption } from '../../../utils/chartOptions';
-import { MinuteStats, TradeAnalysis, EmptyState } from './atoms';
import type { KLineModuleProps } from '../../../types';
+// 空状态组件(内联)
+const EmptyState: React.FC<{ title: string; description: string }> = ({ title, description }) => (
+
+
+
+
+ {title}
+ {description}
+
+
+
+);
+
// 重新导出类型供外部使用
export type { KLineModuleProps } from '../../../types';
@@ -50,16 +60,68 @@ const KLineModule: React.FC = ({
}
};
+ // 黑金主题按钮样式
+ const activeButtonStyle = {
+ bg: `linear-gradient(135deg, ${darkGoldTheme.gold} 0%, ${darkGoldTheme.orange} 100%)`,
+ color: '#1a1a2e',
+ borderColor: darkGoldTheme.gold,
+ _hover: {
+ bg: `linear-gradient(135deg, ${darkGoldTheme.goldLight} 0%, ${darkGoldTheme.gold} 100%)`,
+ },
+ };
+
+ const inactiveButtonStyle = {
+ bg: 'transparent',
+ color: darkGoldTheme.textMuted,
+ borderColor: darkGoldTheme.border,
+ _hover: {
+ bg: 'rgba(212, 175, 55, 0.1)',
+ borderColor: darkGoldTheme.gold,
+ color: darkGoldTheme.gold,
+ },
+ };
+
return (
-
-
+
+ {/* 卡片头部 */}
+
-
+
+
+
+
{mode === 'daily' ? '日K线图' : '分钟K线图'}
-
+
{mode === 'minute' && minuteData?.trade_date && (
-
+
{minuteData.trade_date}
)}
@@ -72,39 +134,38 @@ const KLineModule: React.FC = ({
leftIcon={}
size="sm"
variant="outline"
- colorScheme="blue"
onClick={onLoadMinuteData}
isLoading={minuteLoading}
loadingText="获取中"
+ {...inactiveButtonStyle}
>
刷新
)}
{/* 模式切换按钮组 */}
-
+
}
- colorScheme={mode === 'daily' ? 'blue' : 'gray'}
- variant={mode === 'daily' ? 'solid' : 'outline'}
+ leftIcon={}
onClick={() => handleModeChange('daily')}
+ {...(mode === 'daily' ? activeButtonStyle : inactiveButtonStyle)}
>
日K
}
- colorScheme={mode === 'minute' ? 'blue' : 'gray'}
- variant={mode === 'minute' ? 'solid' : 'outline'}
+ leftIcon={}
onClick={() => handleModeChange('minute')}
+ {...(mode === 'minute' ? activeButtonStyle : inactiveButtonStyle)}
>
分钟
-
+
-
+ {/* 卡片内容 */}
+
{mode === 'daily' ? (
// 日K线图
tradeData.length > 0 ? (
@@ -112,16 +173,12 @@ const KLineModule: React.FC = ({
) : (
-
+
)
) : (
// 分钟K线图
@@ -131,37 +188,29 @@ const KLineModule: React.FC = ({
-
+
加载分钟频数据中...
) : hasMinuteData ? (
-
-
-
-
-
-
-
+
+
+
) : (
-
+
)
)}
-
-
+
+
);
};
diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/TradeTable.tsx b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/TradeTable.tsx
deleted file mode 100644
index c3ccef81..00000000
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/TradeTable.tsx
+++ /dev/null
@@ -1,87 +0,0 @@
-// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/TradeTable.tsx
-// 交易明细表格组件
-
-import React from 'react';
-import {
- Table,
- Thead,
- Tbody,
- Tr,
- Th,
- Td,
- TableContainer,
- CardBody,
- CardHeader,
- Heading,
-} from '@chakra-ui/react';
-
-import ThemedCard from '../../ThemedCard';
-import { formatNumber, formatPercent } from '../../../utils/formatUtils';
-import type { Theme, TradeDayData } from '../../../types';
-
-export interface TradeTableProps {
- theme: Theme;
- tradeData: TradeDayData[];
-}
-
-const TradeTable: React.FC = ({ theme, tradeData }) => {
- return (
-
-
-
- 交易明细
-
-
-
-
-
-
-
- | 日期 |
- 开盘 |
- 最高 |
- 最低 |
- 收盘 |
- 涨跌幅 |
- 成交量 |
- 成交额 |
-
-
-
- {tradeData
- .slice(-10)
- .reverse()
- .map((item, idx) => (
-
- | {item.date} |
- {item.open} |
- {item.high} |
- {item.low} |
-
- {item.close}
- |
- = 0 ? theme.success : theme.danger}
- fontWeight="bold"
- >
- {item.change_percent >= 0 ? '+' : ''}
- {formatPercent(item.change_percent)}
- |
-
- {formatNumber(item.volume, 0)}
- |
-
- {formatNumber(item.amount)}
- |
-
- ))}
-
-
-
-
-
- );
-};
-
-export default TradeTable;
diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/EmptyState.tsx b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/EmptyState.tsx
deleted file mode 100644
index 279b3a33..00000000
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/EmptyState.tsx
+++ /dev/null
@@ -1,40 +0,0 @@
-// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/EmptyState.tsx
-// 空状态组件
-
-import React from 'react';
-import { Center, VStack, Text, Icon } from '@chakra-ui/react';
-import { InfoIcon } from '@chakra-ui/icons';
-
-import type { Theme } from '../../../../types';
-
-export interface EmptyStateProps {
- theme: Theme;
- title?: string;
- description?: string;
- height?: string;
-}
-
-const EmptyState: React.FC = ({
- theme,
- title = '暂无分钟频数据',
- description = '点击"获取分钟数据"按钮加载最新的交易日分钟频数据',
- height = '300px',
-}) => {
- return (
-
-
-
-
-
- {title}
-
-
- {description}
-
-
-
-
- );
-};
-
-export default EmptyState;
diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/MinuteStats.tsx b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/MinuteStats.tsx
deleted file mode 100644
index 94a203fd..00000000
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/MinuteStats.tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/MinuteStats.tsx
-// 分钟数据统计组件
-
-import React from 'react';
-import {
- SimpleGrid,
- Stat,
- StatLabel,
- StatNumber,
- StatHelpText,
- StatArrow,
- HStack,
- Text,
- Icon,
-} from '@chakra-ui/react';
-import {
- ChevronDownIcon,
- ChevronUpIcon,
- ArrowUpIcon,
- ArrowDownIcon,
-} from '@chakra-ui/icons';
-
-import type { Theme, MinuteDataPoint } from '../../../../types';
-
-export interface MinuteStatsProps {
- theme: Theme;
- data: MinuteDataPoint[];
-}
-
-const MinuteStats: React.FC = ({ theme, data }) => {
- if (data.length === 0) return null;
-
- const firstOpen = data[0]?.open || 0;
- const lastClose = data[data.length - 1]?.close || 0;
- const highPrice = Math.max(...data.map((item) => item.high).filter(Boolean));
- const lowPrice = Math.min(...data.map((item) => item.low).filter(Boolean));
- const isUp = lastClose >= firstOpen;
- const changePercent = firstOpen ? Math.abs(((lastClose - firstOpen) / firstOpen) * 100) : 0;
-
- return (
-
-
-
-
-
- 开盘价
-
-
-
- {firstOpen?.toFixed(2) || '-'}
-
-
-
-
-
-
-
- 当前价
-
-
-
- {lastClose?.toFixed(2) || '-'}
-
-
-
- {changePercent.toFixed(2)}%
-
-
-
-
-
-
-
- 最高价
-
-
-
- {highPrice.toFixed(2)}
-
-
-
-
-
-
-
- 最低价
-
-
-
- {lowPrice.toFixed(2)}
-
-
-
- );
-};
-
-export default MinuteStats;
diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/TradeAnalysis.tsx b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/TradeAnalysis.tsx
deleted file mode 100644
index c5e0bf9b..00000000
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/TradeAnalysis.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/TradeAnalysis.tsx
-// 成交数据分析组件
-
-import React from 'react';
-import { Box, Text, HStack, Badge, Grid } from '@chakra-ui/react';
-
-import { formatNumber } from '../../../../utils/formatUtils';
-import type { Theme, MinuteDataPoint } from '../../../../types';
-
-export interface TradeAnalysisProps {
- theme: Theme;
- data: MinuteDataPoint[];
-}
-
-const TradeAnalysis: React.FC = ({ theme, data }) => {
- if (data.length === 0) return null;
-
- const totalVolume = data.reduce((sum, item) => sum + item.volume, 0);
- const totalAmount = data.reduce((sum, item) => sum + item.amount, 0);
- const avgPrice = data.reduce((sum, item) => sum + item.close, 0) / data.length;
- const maxVolume = Math.max(...data.map((item) => item.volume));
- const activeTime = data.find((item) => item.volume === maxVolume);
-
- return (
-
-
-
- 成交数据分析
-
-
-
- 总成交量: {formatNumber(totalVolume, 0)}
-
-
- 总成交额: {formatNumber(totalAmount)}
-
-
-
-
-
-
-
- 活跃时段
-
-
- {activeTime ? `${activeTime.time} (${formatNumber(maxVolume, 0)})` : '-'}
-
-
-
-
- 平均价格
-
-
- {avgPrice.toFixed(2)}
-
-
-
-
- 数据点数
-
-
- {data.length} 个分钟
-
-
-
-
- );
-};
-
-export default TradeAnalysis;
diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/index.ts b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/index.ts
deleted file mode 100644
index 0ae41f51..00000000
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/index.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/atoms/index.ts
-// 原子组件统一导出
-
-export { default as MinuteStats } from './MinuteStats';
-export { default as TradeAnalysis } from './TradeAnalysis';
-export { default as EmptyState } from './EmptyState';
-
-export type { MinuteStatsProps } from './MinuteStats';
-export type { TradeAnalysisProps } from './TradeAnalysis';
-export type { EmptyStateProps } from './EmptyState';
diff --git a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/index.tsx b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/index.tsx
index 7e8e3fbc..0e088f68 100644
--- a/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/index.tsx
+++ b/src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/index.tsx
@@ -1,11 +1,9 @@
// src/views/Company/components/MarketDataView/components/panels/TradeDataPanel/index.tsx
-// 交易数据面板 - K线模块(日K/分钟切换)、交易明细表格
+// 交易数据面板 - K线模块(日K/分钟切换)
import React from 'react';
-import { VStack } from '@chakra-ui/react';
import KLineModule from './KLineModule';
-import TradeTable from './TradeTable';
import type { Theme, TradeDayData, MinuteData, RiseAnalysis } from '../../../types';
export interface TradeDataPanelProps {
@@ -28,19 +26,15 @@ const TradeDataPanel: React.FC = ({
onChartClick,
}) => {
return (
-
-
-
-
-
+
);
};
@@ -48,6 +42,4 @@ export default TradeDataPanel;
// 导出子组件供外部按需使用
export { default as KLineModule } from './KLineModule';
-export { default as TradeTable } from './TradeTable';
export type { KLineModuleProps } from './KLineModule';
-export type { TradeTableProps } from './TradeTable';
diff --git a/src/views/Company/components/MarketDataView/components/panels/index.ts b/src/views/Company/components/MarketDataView/components/panels/index.ts
index dce5f1be..988901c4 100644
--- a/src/views/Company/components/MarketDataView/components/panels/index.ts
+++ b/src/views/Company/components/MarketDataView/components/panels/index.ts
@@ -15,5 +15,5 @@ export type { UnusualPanelProps } from './UnusualPanel';
export type { PledgePanelProps } from './PledgePanel';
// 导出 TradeDataPanel 子组件
-export { KLineModule, TradeTable } from './TradeDataPanel';
-export type { KLineModuleProps, TradeTableProps } from './TradeDataPanel';
+export { KLineModule } from './TradeDataPanel';
+export type { KLineModuleProps } from './TradeDataPanel';
diff --git a/src/views/Company/components/MarketDataView/types.ts b/src/views/Company/components/MarketDataView/types.ts
index cae6d6af..acc90026 100644
--- a/src/views/Company/components/MarketDataView/types.ts
+++ b/src/views/Company/components/MarketDataView/types.ts
@@ -299,14 +299,6 @@ export interface KLineModuleProps {
onChartClick: (params: { seriesName?: string; data?: [number, number] }) => void;
}
-/**
- * TradeTable 组件 Props
- */
-export interface TradeTableProps {
- theme: Theme;
- tradeData: TradeDayData[];
-}
-
/**
* FundingTab 组件 Props
*/