|
|
@@ -9,6 +9,11 @@ import { App } from 'antd';
|
|
|
import { formatCurrency, formatDate } from '@/client/utils/utils';
|
|
|
import { logger } from '@/client/utils/logger';
|
|
|
|
|
|
+// 定义日志记录器
|
|
|
+const apiLogger = logger('frontend:api:expenses');
|
|
|
+const errorLogger = logger('frontend:error:expenses');
|
|
|
+const uiLogger = logger('frontend:ui:expenses');
|
|
|
+
|
|
|
// 定义类型
|
|
|
type ExpenseItem = InferResponseType<typeof expenseClient.$get, 200>['data'][0];
|
|
|
type ExpenseListResponse = InferResponseType<typeof expenseClient.$get, 200>;
|
|
|
@@ -116,7 +121,7 @@ const Expenses: React.FC = () => {
|
|
|
errorLogger('Failed to update expense:', error);
|
|
|
antdMessage.error('更新费用记录失败');
|
|
|
}
|
|
|
- );
|
|
|
+ });
|
|
|
|
|
|
// 删除费用记录
|
|
|
const deleteExpense = useMutation({
|
|
|
@@ -130,16 +135,18 @@ const Expenses: React.FC = () => {
|
|
|
errorLogger('Failed to delete expense:', error);
|
|
|
antdMessage.error('删除费用记录失败');
|
|
|
}
|
|
|
- );
|
|
|
+ });
|
|
|
|
|
|
// 搜索
|
|
|
const handleSearch = () => {
|
|
|
+ uiLogger('Search triggered with text:', searchText);
|
|
|
setPagination(prev => ({ ...prev, current: 1 }));
|
|
|
refetch();
|
|
|
};
|
|
|
|
|
|
// 重置筛选器
|
|
|
const resetFilters = () => {
|
|
|
+ uiLogger('Filters reset');
|
|
|
setFilters({
|
|
|
clientId: undefined,
|
|
|
type: undefined,
|
|
|
@@ -153,12 +160,14 @@ const Expenses: React.FC = () => {
|
|
|
|
|
|
// 分页变化
|
|
|
const handleTableChange = (pagination: any) => {
|
|
|
+ uiLogger(`Pagination changed to page ${pagination.current}, pageSize ${pagination.pageSize}`);
|
|
|
setPagination(pagination);
|
|
|
refetch();
|
|
|
};
|
|
|
|
|
|
// 显示添加/编辑弹窗
|
|
|
const showModal = (record?: ExpenseItem) => {
|
|
|
+ uiLogger(`Show modal triggered for ${record ? 'edit' : 'create'}`);
|
|
|
setModalVisible(true);
|
|
|
if (record) {
|
|
|
setEditingKey(record.id.toString());
|
|
|
@@ -189,6 +198,7 @@ const Expenses: React.FC = () => {
|
|
|
|
|
|
// 关闭弹窗
|
|
|
const handleCancel = () => {
|
|
|
+ uiLogger('Modal closed');
|
|
|
setModalVisible(false);
|
|
|
form.resetFields();
|
|
|
};
|
|
|
@@ -206,9 +216,11 @@ const Expenses: React.FC = () => {
|
|
|
|
|
|
if (editingKey) {
|
|
|
// 更新操作
|
|
|
+ uiLogger(`Updating expense with id: ${editingKey}`);
|
|
|
await updateExpense.mutateAsync({ id: editingKey, data: formattedValues });
|
|
|
} else {
|
|
|
// 创建操作
|
|
|
+ uiLogger('Creating new expense');
|
|
|
await createExpense.mutateAsync(formattedValues);
|
|
|
}
|
|
|
|
|
|
@@ -228,6 +240,7 @@ const Expenses: React.FC = () => {
|
|
|
okText: '确认',
|
|
|
cancelText: '取消',
|
|
|
onOk: async () => {
|
|
|
+ uiLogger(`Deleting expense with id: ${id}`);
|
|
|
await deleteExpense.mutateAsync(id);
|
|
|
},
|
|
|
});
|
|
|
@@ -350,7 +363,6 @@ const Expenses: React.FC = () => {
|
|
|
type="link"
|
|
|
icon={<EditOutlined />}
|
|
|
onClick={() => showModal(record)}
|
|
|
- disabled={!access.canEditExpense}
|
|
|
>
|
|
|
编辑
|
|
|
</Button>
|
|
|
@@ -359,7 +371,6 @@ const Expenses: React.FC = () => {
|
|
|
danger
|
|
|
icon={<DeleteOutlined />}
|
|
|
onClick={() => handleDelete(record.id.toString())}
|
|
|
- disabled={!access.canDeleteExpense}
|
|
|
>
|
|
|
删除
|
|
|
</Button>
|
|
|
@@ -742,4 +753,4 @@ const Expenses: React.FC = () => {
|
|
|
);
|
|
|
};
|
|
|
|
|
|
-export default Expenses;
|
|
|
+export default Expenses;
|