Просмотр исходного кода

♻️ refactor(admin): 统一使用App.useApp()获取message组件

- 从antd导入App组件以使用App.useApp() API
- 替换直接导入的message组件为从App实例获取
- 统一变量命名为message,移除ContractRenews.tsx中的antMessage变量
- 涉及页面: Areas.tsx, Clients.tsx, Contacts.tsx, ContractRenews.tsx, Contracts.tsx, Expenses.tsx, Files.tsx
yourname 8 месяцев назад
Родитель
Сommit
69188eead0

+ 3 - 1
src/client/admin/pages/Areas.tsx

@@ -1,5 +1,6 @@
 import React, { useState, useEffect } from 'react';
-import { Table, Button, Space, Input, Modal, Form, message } from 'antd';
+import { Table, Button, Space, Input, Modal, Form } from 'antd';
+import { App } from 'antd';
 import AreaTreeSelect from '@/client/admin/components/AreaTreeSelect';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
@@ -11,6 +12,7 @@ type AreaItem = InferResponseType<typeof areaClient.$get, 200>['data'][0];
 type AreaListResponse = InferResponseType<typeof areaClient.$get, 200>;
 
 const Areas: React.FC = () => {
+  const {message} = App.useApp();
   const [form] = Form.useForm();
   const [modalVisible, setModalVisible] = useState(false);
   const [editingKey, setEditingKey] = useState<string | null>(null);

+ 3 - 1
src/client/admin/pages/Clients.tsx

@@ -1,5 +1,6 @@
 import React, { useState, useEffect } from 'react';
-import { Table, Button, Space, Input, Modal, Form, message ,Select} from 'antd';
+import { Table, Button, Space, Input, Modal, Form ,Select} from 'antd';
+import { App } from 'antd';
 import AreaTreeSelect from '@/client/admin/components/AreaTreeSelect';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
@@ -12,6 +13,7 @@ type ClientListResponse = InferResponseType<typeof clientClient.$get, 200>;
 type AreaItem = InferResponseType<typeof areaClient.$get, 200>['data'][0];
 
 const Clients: React.FC = () => {
+  const {message} = App.useApp();
   const [form] = Form.useForm();
   const [modalVisible, setModalVisible] = useState(false);
   const [editingKey, setEditingKey] = useState<string | null>(null);

+ 3 - 1
src/client/admin/pages/Contacts.tsx

@@ -1,5 +1,6 @@
 import React, { useState } from 'react';
-import { Table, Button, Space, Input, Modal, Form, message, Select, DatePicker } from 'antd';
+import { Table, Button, Space, Input, Modal, Form, Select, DatePicker } from 'antd';
+import { App } from 'antd';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
 import { linkmanClient, clientClient } from '@/client/api';
@@ -12,6 +13,7 @@ type LinkmanListResponse = InferResponseType<typeof linkmanClient.$get, 200>;
 type ClientItem = InferResponseType<typeof clientClient.$get, 200>['data'][0];
 
 const Contacts: React.FC = () => {
+  const {message} = App.useApp();
   const [form] = Form.useForm();
   const [modalVisible, setModalVisible] = useState(false);
   const [editingKey, setEditingKey] = useState<string | null>(null);

+ 11 - 11
src/client/admin/pages/ContractRenews.tsx

@@ -1,10 +1,10 @@
 import React, { useState, useEffect } from 'react';
-import { Table, Button, Space, Tag, Input, DatePicker, Select, Form, message, Modal, Typography, Divider, Card } from 'antd';
+import { Table, Button, Space, Tag, Input, DatePicker, Select, Form, Modal, Typography, Divider, Card } from 'antd';
+import { App } from 'antd';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined, ReloadOutlined, SaveOutlined, CloseOutlined } from '@ant-design/icons';
 import type { TableProps, FormProps } from 'antd';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
 import dayjs, { Dayjs } from 'dayjs';
-import { App } from 'antd';
 import type { InferResponseType, InferRequestType } from 'hono/client';
 
 // API客户端导入
@@ -33,7 +33,7 @@ const { confirm } = Modal;
 const { RangePicker } = DatePicker;
 
 const ContractRenews: React.FC = () => {
-  const { message: antMessage } = App.useApp();
+  const { message } = App.useApp();
   const queryClient = useQueryClient();
   const [form] = Form.useForm();
   const [searchForm] = Form.useForm();
@@ -63,7 +63,7 @@ const ContractRenews: React.FC = () => {
       setContracts(data);
     },
     onError: (error) => {
-      antMessage.error(`获取合同列表失败: ${error instanceof Error ? error.message : '未知错误'}`);
+      message.error(`获取合同列表失败: ${error instanceof Error ? error.message : '未知错误'}`);
     },
   });
 
@@ -88,7 +88,7 @@ const ContractRenews: React.FC = () => {
         setTotal(data.pagination.total);
       },
       onError: (error) => {
-        antMessage.error(`获取续签记录失败: ${error instanceof Error ? error.message : '未知错误'}`);
+        message.error(`获取续签记录失败: ${error instanceof Error ? error.message : '未知错误'}`);
       },
     });
   // 搜索功能
@@ -116,7 +116,7 @@ const ContractRenews: React.FC = () => {
       
       fetchRenews({ ...params });
     } catch (error) {
-      antMessage.error('搜索参数验证失败');
+      message.error('搜索参数验证失败');
     }
   };
 
@@ -184,7 +184,7 @@ const ContractRenews: React.FC = () => {
         if (!response.ok) {
           throw new Error('更新续签记录失败');
         }
-        antMessage.success('续签记录更新成功');
+        message.success('续签记录更新成功');
       } else {
         // 创建操作
         const response = await contractRenewClient.$post({
@@ -194,13 +194,13 @@ const ContractRenews: React.FC = () => {
         if (!response.ok) {
           throw new Error('创建续签记录失败');
         }
-        antMessage.success('续签记录创建成功');
+        message.success('续签记录创建成功');
       }
       
       setIsModalVisible(false);
       queryClient.invalidateQueries({ queryKey: ['contractRenews'] }); // 重新加载数据
     } catch (error) {
-      antMessage.error(`操作失败: ${error instanceof Error ? error.message : '未知错误'}`);
+      message.error(`操作失败: ${error instanceof Error ? error.message : '未知错误'}`);
     }
   };
 
@@ -221,10 +221,10 @@ const ContractRenews: React.FC = () => {
             throw new Error('删除失败');
           }
           
-          antMessage.success('续签记录删除成功');
+          message.success('续签记录删除成功');
           queryClient.invalidateQueries({ queryKey: ['contractRenews'] }); // 重新加载数据
         } catch (error) {
-          antMessage.error(`删除失败: ${error instanceof Error ? error.message : '未知错误'}`);
+          message.error(`删除失败: ${error instanceof Error ? error.message : '未知错误'}`);
         }
       },
     });

+ 3 - 1
src/client/admin/pages/Contracts.tsx

@@ -1,5 +1,6 @@
 import React, { useState } from 'react';
-import { Table, Button, Space, Input, Modal, Form, message, Select, DatePicker, InputNumber } from 'antd';
+import { Table, Button, Space, Input, Modal, Form, Select, DatePicker, InputNumber } from 'antd';
+import { App } from 'antd';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined, FileTextOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
 import { hetongClient, clientClient } from '@/client/api';
@@ -12,6 +13,7 @@ type HetongListResponse = InferResponseType<typeof hetongClient.$get, 200>;
 type ClientItem = InferResponseType<typeof clientClient.$get, 200>['data'][0];
 
 const Contracts: React.FC = () => {
+  const {message} = App.useApp();
   const [form] = Form.useForm();
   const [modalVisible, setModalVisible] = useState(false);
   const [editingKey, setEditingKey] = useState<string | null>(null);

+ 3 - 2
src/client/admin/pages/Expenses.tsx

@@ -1,11 +1,11 @@
 import React, { useState, useEffect } from 'react';
-import { Table, Button, Space, Input, Modal, Form, message, Select, DatePicker, Card, Typography, Layout, Spin, Tag } from 'antd';
+import { Table, Button, Space, Input, Modal, Form, Select, DatePicker, Card, Typography, Layout, Spin, Tag } from 'antd';
+import { App } from 'antd';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined, FilterOutlined, DownloadOutlined, ReloadOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
 import type { InferResponseType, InferRequestType } from 'hono/client';
 import { expenseClient, clientClient } from '@/client/api';
 import dayjs, { Dayjs } from 'dayjs';
-import { App } from 'antd';
 import { formatCurrency, formatDate } from '@/client/utils/utils';
 import { logger } from '@/client/utils/logger';
 
@@ -26,6 +26,7 @@ const { Title } = Typography;
 const { Content } = Layout;
 
 const Expenses: React.FC = () => {
+  const {message} = App.useApp();
   const [form] = Form.useForm();
   const [modalVisible, setModalVisible] = useState(false);
   const [editingKey, setEditingKey] = useState<string | null>(null);

+ 3 - 1
src/client/admin/pages/Files.tsx

@@ -1,5 +1,6 @@
 import React, { useState } from 'react';
-import { Table, Button, Space, Input, Modal, Form, message, Upload, Select, DatePicker } from 'antd';
+import { Table, Button, Space, Input, Modal, Form, Upload, Select, DatePicker } from 'antd';
+import { App } from 'antd';
 import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined, UploadOutlined } from '@ant-design/icons';
 import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
 import { fileClient, clientClient } from '@/client/api';
@@ -14,6 +15,7 @@ type CreateFileRequest = InferRequestType<typeof fileClient.$post>['json'];
 type UpdateFileRequest = InferRequestType<typeof fileClient[':id']['$put']>['json'];
 
 const Files: React.FC = () => {
+  const {message} = App.useApp();
   const [form] = Form.useForm();
   const [modalVisible, setModalVisible] = useState(false);
   const [editingKey, setEditingKey] = useState<string | null>(null);