refactor: 重构项目结构并优化代码
- 删除无用的文件和错误日志 - 创建统一的 imports 模块集中管理依赖 - 重构组件使用新的 imports 方式 - 修复文档路径大小写问题 - 优化类型定义和接口导出 - 更新依赖版本 - 改进错误处理和API配置 - 统一组件导出方式
This commit is contained in:
@@ -1,17 +1,60 @@
|
||||
import React, { useState, useEffect, useMemo } from 'react';
|
||||
import { Table, Button, Input, Select, DatePicker, message, Card, Row, Col, Tag, Space, Modal, Drawer, Descriptions, Typography, Alert, Statistic, Tooltip } from 'antd';
|
||||
import { SearchOutlined, FilterOutlined, ExportOutlined, DownloadOutlined, EyeOutlined, CheckCircleOutlined, CloseCircleOutlined, SyncOutlined, DollarOutlined, ArrowUpOutlined, ArrowDownOutlined, ReloadOutlined } from '@ant-design/icons';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { financeDataSource, Transaction } from '@/services/financeDataSource';
|
||||
import { LineChart, Line, Bar, Pie, ResponsiveContainer, Legend, XAxis, YAxis, CartesianGrid, Cell } from 'recharts';
|
||||
import {
|
||||
useState,
|
||||
useEffect,
|
||||
useMemo,
|
||||
Table,
|
||||
Button,
|
||||
Input,
|
||||
Select,
|
||||
DatePicker,
|
||||
message,
|
||||
Card,
|
||||
Row,
|
||||
Col,
|
||||
Tag,
|
||||
Space,
|
||||
Modal,
|
||||
Drawer,
|
||||
Descriptions,
|
||||
Typography,
|
||||
Alert,
|
||||
Statistic,
|
||||
Tooltip,
|
||||
SearchOutlined,
|
||||
FilterOutlined,
|
||||
ExportOutlined,
|
||||
DownloadOutlined,
|
||||
EyeOutlined,
|
||||
CheckCircleOutlined,
|
||||
CloseCircleOutlined,
|
||||
SyncOutlined,
|
||||
DollarOutlined,
|
||||
ArrowUpOutlined,
|
||||
ArrowDownOutlined,
|
||||
ReloadOutlined,
|
||||
LineChart,
|
||||
Line,
|
||||
Bar,
|
||||
RechartsPie,
|
||||
ResponsiveContainer,
|
||||
Legend,
|
||||
XAxis,
|
||||
YAxis,
|
||||
CartesianGrid,
|
||||
Cell,
|
||||
useNavigate,
|
||||
Option,
|
||||
RangePicker,
|
||||
Search,
|
||||
Title,
|
||||
Text,
|
||||
FC,
|
||||
} from '@/imports';
|
||||
import moment from 'moment';
|
||||
import { financeDataSource } from '@/services/financeDataSource';
|
||||
import type { Transaction } from '@/services/financeDataSource';
|
||||
|
||||
const { Option } = Select;
|
||||
const { RangePicker } = DatePicker;
|
||||
const { Search } = Input;
|
||||
const { Title, Text } = Typography;
|
||||
|
||||
const Transactions: React.FC = () => {
|
||||
const Transactions: FC = () => {
|
||||
const navigate = useNavigate();
|
||||
const [transactions, setTransactions] = useState<Transaction[]>([]);
|
||||
const [loading, setLoading] = useState(false);
|
||||
@@ -28,14 +71,16 @@ const Transactions: React.FC = () => {
|
||||
maxAmount: null as number | null,
|
||||
});
|
||||
|
||||
useEffect(() => {
|
||||
fetchTransactions();
|
||||
}, [filters]);
|
||||
|
||||
const fetchTransactions = async () => {
|
||||
const fetchTransactions = async (filterParams?: any) => {
|
||||
setLoading(true);
|
||||
try {
|
||||
const data = await financeDataSource.fetchTransactions(filters);
|
||||
// 转换过滤参数以匹配 financeDataSource 期望的格式
|
||||
const params = {
|
||||
type: filterParams?.type || filters.type,
|
||||
startDate: filterParams?.dateRange?.[0]?.format('YYYY-MM-DD'),
|
||||
endDate: filterParams?.dateRange?.[1]?.format('YYYY-MM-DD'),
|
||||
};
|
||||
const data = await financeDataSource.fetchTransactions(params);
|
||||
setTransactions(data);
|
||||
} catch (error) {
|
||||
message.error('Failed to load transactions');
|
||||
@@ -44,6 +89,10 @@ const Transactions: React.FC = () => {
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
fetchTransactions();
|
||||
}, []); // 只在组件挂载时执行一次
|
||||
|
||||
const handleExport = () => {
|
||||
message.success('交易记录已导出');
|
||||
};
|
||||
@@ -198,7 +247,7 @@ const Transactions: React.FC = () => {
|
||||
];
|
||||
|
||||
return (
|
||||
<div className="transactions" style={{ padding: 24 }}>
|
||||
<div className="transactions">
|
||||
<Row justify="space-between" align="middle" style={{ marginBottom: 24 }}>
|
||||
<Col>
|
||||
<Title level={4}>交易记录</Title>
|
||||
@@ -289,7 +338,7 @@ const Transactions: React.FC = () => {
|
||||
<Col span={8}>
|
||||
<Card title="支出分类" size="small">
|
||||
<ResponsiveContainer width="100%" height={250}>
|
||||
<Pie
|
||||
<RechartsPie
|
||||
data={categoryData}
|
||||
cx="50%"
|
||||
cy="50%"
|
||||
@@ -302,7 +351,7 @@ const Transactions: React.FC = () => {
|
||||
{categoryData.map((entry, index) => (
|
||||
<Cell key={`cell-${index}`} fill={['#1890ff', '#52c41a', '#faad14', '#ff4d4f', '#722ed1', '#eb2f96'][index % 6]} />
|
||||
))}
|
||||
</Pie>
|
||||
</RechartsPie>
|
||||
</ResponsiveContainer>
|
||||
</Card>
|
||||
</Col>
|
||||
@@ -375,7 +424,7 @@ const Transactions: React.FC = () => {
|
||||
/>
|
||||
<Button
|
||||
icon={<FilterOutlined />}
|
||||
onClick={fetchTransactions}
|
||||
onClick={() => fetchTransactions(filters)}
|
||||
>
|
||||
筛选
|
||||
</Button>
|
||||
@@ -407,7 +456,7 @@ const Transactions: React.FC = () => {
|
||||
title="交易详情"
|
||||
placement="right"
|
||||
onClose={() => setDetailDrawerVisible(false)}
|
||||
visible={detailDrawerVisible}
|
||||
open={detailDrawerVisible}
|
||||
width={600}
|
||||
>
|
||||
{currentTransaction && (
|
||||
|
||||
Reference in New Issue
Block a user