refactor: 重构项目结构并优化代码

- 删除无用的文件和错误日志
- 创建统一的 imports 模块集中管理依赖
- 重构组件使用新的 imports 方式
- 修复文档路径大小写问题
- 优化类型定义和接口导出
- 更新依赖版本
- 改进错误处理和API配置
- 统一组件导出方式
This commit is contained in:
2026-03-27 16:56:06 +08:00
parent 2748456d8a
commit 22308fe042
337 changed files with 37060 additions and 57483 deletions

View File

@@ -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 && (