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

✨ feat(contacts): 优化联系人查询性能
- 添加clientId过滤条件到API请求参数
- 移除前端数据过滤逻辑,减少数据传输量

✨ feat(contracts): 优化合同查询性能
- 添加clientId过滤条件到API请求参数
- 移除前端数据过滤逻辑,减少数据传输量

✨ feat(expenses): 优化费用查询性能
- 添加clientId过滤条件到API请求参数
- 移除前端数据过滤逻辑,减少数据传输量

♻️ refactor(files): 优化文件数据处理
- 移除未使用的select数据处理函数
- 优化数据访问方式,使用可选链操作符

🐛 fix(data): 修复数据访问可能导致的空指针问题
- 统一使用contacts?.data、contracts?.data等可选链语法
- 确保在数据未加载时不会出现类型错误

yourname 8 месяцев назад
Родитель
Сommit
840aac2380

+ 9 - 6
src/client/admin/components/client-detail/ContactsTab.tsx

@@ -15,18 +15,21 @@ const ContactsTab: React.FC<ContactsTabProps> = ({ clientId }) => {
   const { data: contacts, isLoading: loadingContacts } = useQuery({
     queryKey: ['contacts', clientId],
     queryFn: async () => {
-      const res = await linkmanClient.$get({ query: { page: 1, pageSize: 100 } });
+      const filters = JSON.stringify({ clientId });
+      const res = await linkmanClient.$get({
+        query: {
+          page: 1,
+          pageSize: 100,
+          filters
+        }
+      });
       if (!res.ok) throw new Error('获取联系人失败');
       return res.json();
-    },
-    select: (data) => {
-      // 过滤属于当前客户的联系人
-      return data.data.filter(contact => contact.clientId === clientId);
     }
   });
 
   if (loadingContacts) return <Spin size="large" />;
-  const contactsData = contacts || [];
+  const contactsData = contacts?.data || [];
   
   if (contactsData.length === 0) return <Empty description="暂无联系人" />;
 

+ 9 - 5
src/client/admin/components/client-detail/ContractsTab.tsx

@@ -16,17 +16,21 @@ const ContractsTab: React.FC<ContractsTabProps> = ({ clientId }) => {
   const { data: contracts, isLoading: loadingContracts } = useQuery({
     queryKey: ['contracts', clientId],
     queryFn: async () => {
-      const res = await hetongClient.$get({ query: { page: 1, pageSize: 100 } });
+      const filters = JSON.stringify({ clientId });
+      const res = await hetongClient.$get({
+        query: {
+          page: 1,
+          pageSize: 100,
+          filters
+        }
+      });
       if (!res.ok) throw new Error('获取合同失败');
       return res.json();
-    },
-    select: (data) => {
-      return data.data.filter(contract => contract.clientId === clientId);
     }
   });
 
   if (loadingContracts) return <Spin size="large" />;
-  const contractsData = contracts || [];
+  const contractsData = contracts?.data || [];
   
   if (contractsData.length === 0) return <Empty description="暂无合同记录" />;
 

+ 9 - 5
src/client/admin/components/client-detail/ExpensesTab.tsx

@@ -16,17 +16,21 @@ const ExpensesTab: React.FC<ExpensesTabProps> = ({ clientId }) => {
   const { data: expenses, isLoading: loadingExpenses } = useQuery({
     queryKey: ['expenses', clientId],
     queryFn: async () => {
-      const res = await expenseClient.$get({ query: { page: 1, pageSize: 100 } });
+      const filters = JSON.stringify({ clientId });
+      const res = await expenseClient.$get({
+        query: {
+          page: 1,
+          pageSize: 100,
+          filters
+        }
+      });
       if (!res.ok) throw new Error('获取费用失败');
       return res.json();
-    },
-    select: (data) => {
-      return data.data.filter(expense => expense.clientId === clientId);
     }
   });
 
   if (loadingExpenses) return <Spin size="large" />;
-  const expensesData = expenses || [];
+  const expensesData = expenses?.data || [];
   
   if (expensesData.length === 0) return <Empty description="暂无费用记录" />;
 

+ 3 - 6
src/client/admin/components/client-detail/FilesTab.tsx

@@ -16,19 +16,16 @@ const FilesTab: React.FC<FilesTabProps> = ({ clientId }) => {
   const { data: files, isLoading: loadingFiles } = useQuery({
     queryKey: ['files', clientId],
     queryFn: async () => {
-      // 暂时获取所有文件,后续可根据需要过滤
+      // 这里可以根据实际业务逻辑过滤,比如通过文件路径或其他关联
+      // 当前文件实体没有clientId字段,暂时获取所有文件
       const res = await fileClient.$get({ query: { page: 1, pageSize: 100 } });
       if (!res.ok) throw new Error('获取文件失败');
       return res.json();
-    },
-    select: (data) => {
-      // 这里可以根据实际业务逻辑过滤
-      return data.data;
     }
   });
 
   if (loadingFiles) return <Spin size="large" />;
-  const filesData = files || [];
+  const filesData = files?.data || [];
   
   if (filesData.length === 0) return <Empty description="暂无文件记录" />;