import React, { useState } from 'react'; import { PageContainer } from '@ant-design/pro-components'; import { InboxOutlined, FileExcelOutlined, BarChartOutlined, FileWordOutlined } from '@ant-design/icons'; import { Upload, Card, Button, Steps, message, Input, Spin, Result, Space, Progress, Alert, Typography } from 'antd'; import type { UploadFile } from 'antd/es/upload/interface'; import ReactECharts from 'echarts-for-react'; import styles from './index.less'; const { Dragger } = Upload; const { TextArea } = Input; const { Title, Paragraph } = Typography; const ReportPage: React.FC = () => { const [fileList, setFileList] = useState([]); const [currentStep, setCurrentStep] = useState(0); const [loading, setLoading] = useState(false); const [goal, setGoal] = useState(''); const [reportData, setReportData] = useState(null); const [wordUrl, setWordUrl] = useState(''); const [progress, setProgress] = useState(0); const [previewData, setPreviewData] = useState(null); const handleUpload = async (file: File) => { setLoading(true); try { const formData = new FormData(); formData.append('file', file); // 模拟上传进度 const timer = setInterval(() => { setProgress(prev => { if (prev >= 99) { clearInterval(timer); return 99; } return prev + 10; }); }, 200); // 模拟预览数据 setTimeout(() => { setPreviewData({ columns: ['日期', '销售额', '利润'], data: [ ['2023-01', 1000, 200], ['2023-02', 1500, 300], ['2023-03', 1200, 250], ] }); setProgress(100); message.success('文件上传成功'); setCurrentStep(1); setLoading(false); clearInterval(timer); }, 2000); } catch (error) { message.error('文件上传失败'); setLoading(false); } }; const generateReport = async () => { setLoading(true); try { let progress = 0; const timer = setInterval(() => { progress += 20; if (progress <= 100) { setProgress(progress); } }, 1000); setTimeout(() => { clearInterval(timer); setProgress(100); setWordUrl('https://example.com/report.docx'); setReportData({ title: '数据分析报告', summary: '根据您提供的数据,我们生成了详细的分析报告...', charts: [ { title: '销售趋势', type: 'line', data: { title: { text: '销售趋势分析' }, tooltip: { trigger: 'axis' }, xAxis: { type: 'category', data: ['1月', '2月', '3月'] }, yAxis: { type: 'value' }, series: [{ name: '销售额', type: 'line', data: [1000, 1500, 1200], smooth: true }] } } ] }); message.success('报告生成成功'); setCurrentStep(2); setLoading(false); }, 5000); } catch (error) { message.error('报告生成失败'); setLoading(false); } }; const renderPreview = () => { if (!previewData) return null; return ( {previewData.columns.map((col: string) => ( ))} {previewData.data.map((row: any[], index: number) => ( {row.map((cell, cellIndex) => ( ))} ))}
{col}
{cell}
); }; const steps = [ { title: '上传文件', icon: , content: (
{ const isExcelOrCsv = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type === 'application/vnd.ms-excel' || file.type === 'text/csv'; if (!isExcelOrCsv) { message.error('只支持上传 Excel 或 CSV 文件!'); return false; } setFileList([file]); handleUpload(file); return false; }} onRemove={() => { setFileList([]); setCurrentStep(0); setPreviewData(null); return true; }} >

点击或拖拽文件到此区域上传

支持 Excel 和 CSV 文件格式

{loading && ( )} {renderPreview()}
), }, { title: '设置目标', icon: , content: (
分析目标设置 请详细描述您的分析需求,例如:
  • 分析销售趋势和影响因素
  • 识别客户购买行为模式
  • 预测未来销售情况