import React, { useState, useEffect } from 'react';
import { Card, Row, Col, Button, Input, Select, Table, Badge, Statistic, Typography, Spin } from 'antd';
import { ReloadOutlined, FilterOutlined, EyeOutlined, EyeInvisibleOutlined, ArrowUpOutlined, ArrowDownOutlined } from '@ant-design/icons';
import { allFuturesData, aiAnalysis, marketHotspots, riskAlerts } from '../../utils/mockData';
import useTheme from '../../hooks/useTheme';
const { Title, Text } = Typography;
const { Search } = Input;
const { Option } = Select;
const { Column } = Table;
const Dashboard = () => {
const [futuresData, setFuturesData] = useState(allFuturesData);
const [filteredData, setFilteredData] = useState(allFuturesData);
const [loading, setLoading] = useState(false);
const [viewMode, setViewMode] = useState('card'); // card or list
const [filterType, setFilterType] = useState('');
const [filterKeyword, setFilterKeyword] = useState('');
// 模拟数据刷新
const handleRefresh = () => {
setLoading(true);
setTimeout(() => {
const refreshedData = allFuturesData.map(item => ({
...item,
currentPrice: (parseFloat(item.currentPrice) * (1 + (Math.random() * 0.02 - 0.01))).toFixed(2),
changePercent: (parseFloat(item.changePercent) + (Math.random() * 2 - 1)).toFixed(2)
}));
setFuturesData(refreshedData);
setFilteredData(refreshedData);
setLoading(false);
}, 1000);
};
// 过滤数据
useEffect(() => {
let result = futuresData;
if (filterKeyword) {
const keyword = filterKeyword.toLowerCase();
result = result.filter(item =>
item.code.toLowerCase().includes(keyword) ||
item.name.toLowerCase().includes(keyword)
);
}
if (filterType) {
result = result.filter(item => item.type === filterType);
}
setFilteredData(result);
}, [futuresData, filterKeyword, filterType]);
// 品种类型选项
const typeOptions = Array.from(new Set(allFuturesData.map(item => item.type))).map(type => (
));
// 渲染品种卡片
const renderCard = (item) => (