Pārlūkot izejas kodu

feat(disability-person-ui): 添加暂无数据提示功能

- 在DisabilityPersonManagement组件中添加暂无数据提示
- 当残疾人列表为空时显示"暂无数据"提示
- 添加集成测试验证暂无数据功能
- 保持与其他UI包一致的样式和用户体验

🤖 Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 2 dienas atpakaļ
vecāks
revīzija
7ab4aacc3f

+ 46 - 38
allin-packages/disability-person-management-ui/src/components/DisabilityPersonManagement.tsx

@@ -254,46 +254,54 @@ const DisabilityPersonManagement: React.FC = () => {
                   </TableRow>
                 </TableHeader>
                 <TableBody>
-                  {data?.data?.map((person: any) => (
-                    <TableRow key={person.id}>
-                      <TableCell>{person.name}</TableCell>
-                      <TableCell>{person.gender}</TableCell>
-                      <TableCell>{person.idCard}</TableCell>
-                      <TableCell>{person.disabilityId}</TableCell>
-                      <TableCell>{person.disabilityType}</TableCell>
-                      <TableCell>{person.disabilityLevel}</TableCell>
-                      <TableCell>{person.phone}</TableCell>
-                      <TableCell>{format(new Date(person.createTime), 'yyyy-MM-dd HH:mm')}</TableCell>
-                      <TableCell className="text-right">
-                        <div className="flex justify-end space-x-2">
-                          <Button
-                            variant="ghost"
-                            size="sm"
-                            onClick={() => handleViewOpen(person.id)}
-                            data-testid={`view-person-${person.id}`}
-                          >
-                            <Eye className="h-4 w-4" />
-                          </Button>
-                          <Button
-                            variant="ghost"
-                            size="sm"
-                            onClick={() => handleEditOpen(person)}
-                            data-testid={`edit-person-${person.id}`}
-                          >
-                            <Edit className="h-4 w-4" />
-                          </Button>
-                          <Button
-                            variant="ghost"
-                            size="sm"
-                            onClick={() => handleDeleteOpen(person.id)}
-                            data-testid={`delete-person-${person.id}`}
-                          >
-                            <Trash2 className="h-4 w-4" />
-                          </Button>
-                        </div>
+                  {data?.data && data.data.length > 0 ? (
+                    data.data.map((person: any) => (
+                      <TableRow key={person.id}>
+                        <TableCell>{person.name}</TableCell>
+                        <TableCell>{person.gender}</TableCell>
+                        <TableCell>{person.idCard}</TableCell>
+                        <TableCell>{person.disabilityId}</TableCell>
+                        <TableCell>{person.disabilityType}</TableCell>
+                        <TableCell>{person.disabilityLevel}</TableCell>
+                        <TableCell>{person.phone}</TableCell>
+                        <TableCell>{format(new Date(person.createTime), 'yyyy-MM-dd HH:mm')}</TableCell>
+                        <TableCell className="text-right">
+                          <div className="flex justify-end space-x-2">
+                            <Button
+                              variant="ghost"
+                              size="sm"
+                              onClick={() => handleViewOpen(person.id)}
+                              data-testid={`view-person-${person.id}`}
+                            >
+                              <Eye className="h-4 w-4" />
+                            </Button>
+                            <Button
+                              variant="ghost"
+                              size="sm"
+                              onClick={() => handleEditOpen(person)}
+                              data-testid={`edit-person-${person.id}`}
+                            >
+                              <Edit className="h-4 w-4" />
+                            </Button>
+                            <Button
+                              variant="ghost"
+                              size="sm"
+                              onClick={() => handleDeleteOpen(person.id)}
+                              data-testid={`delete-person-${person.id}`}
+                            >
+                              <Trash2 className="h-4 w-4" />
+                            </Button>
+                          </div>
+                        </TableCell>
+                      </TableRow>
+                    ))
+                  ) : (
+                    <TableRow>
+                      <TableCell colSpan={9} className="text-center py-8">
+                        <p className="text-muted-foreground">暂无数据</p>
                       </TableCell>
                     </TableRow>
-                  ))}
+                  )}
                 </TableBody>
               </Table>
 

+ 22 - 0
allin-packages/disability-person-management-ui/tests/integration/disability-person.integration.test.tsx

@@ -604,4 +604,26 @@ describe('残疾人个人管理集成测试', () => {
       expect(disabilityLevelSelect).toBeInTheDocument();
     }
   });
+
+  it('应该显示暂无数据提示', async () => {
+    // 修改mock返回空数据
+    const mockClient = (disabilityClientManager.get as any)();
+    mockClient.getAllDisabledPersons.$get.mockResolvedValueOnce(
+      createMockResponse(200, {
+        data: [],
+        total: 0
+      })
+    );
+
+    renderComponent();
+
+    // 等待暂无数据提示出现
+    await waitFor(() => {
+      expect(screen.getByText('暂无数据')).toBeInTheDocument();
+    });
+
+    // 验证暂无数据提示的样式
+    const noDataElement = screen.getByText('暂无数据');
+    expect(noDataElement).toHaveClass('text-muted-foreground');
+  });
 });