فهرست منبع

🐛 fix(disability): 修复API路由筛选参数支持

- 更新getAllDisabledPersons路由使用SearchDisabledPersonQuerySchema
- 更新searchDisabledPersons路由支持所有筛选参数
- 添加集成测试用例:
  - 残疾类型筛选测试
  - 残疾级别筛选测试
  - 省份筛选测试
  - 多条件组合筛选测试
- 确保前端筛选功能与后端API兼容

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

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 هفته پیش
والد
کامیت
02a19a31da

+ 16 - 6
allin-packages/disability-module/src/routes/disabled-person-custom.routes.ts

@@ -133,7 +133,7 @@ const getAllDisabledPersonsRoute = createRoute({
   path: '/getAllDisabledPersons',
   middleware: [authMiddleware],
   request: {
-    query: PaginationQuerySchema
+    query: SearchDisabledPersonQuerySchema
   },
   responses: {
     200: {
@@ -429,10 +429,16 @@ const app = new OpenAPIHono<AuthContext>()
   // 获取所有残疾人
   .openapi(getAllDisabledPersonsRoute, async (c) => {
     try {
-      const { skip, take } = c.req.valid('query');
+      const { keyword, bankNameId, cardType, disabilityType, disabilityLevel, province, skip, take } = c.req.valid('query');
       const disabledPersonService = new DisabledPersonService(AppDataSource);
 
       const result = await disabledPersonService.findAll({
+        keyword,
+        bankNameId,
+        cardType,
+        disabilityType,
+        disabilityLevel,
+        province,
         page: skip ? Math.floor(skip / (take || 10)) + 1 : 1,
         limit: take || 10
       });
@@ -448,13 +454,17 @@ const app = new OpenAPIHono<AuthContext>()
   // 搜索残疾人
   .openapi(searchDisabledPersonsRoute, async (c) => {
     try {
-      const { keyword, skip, take } = c.req.valid('query');
+      const { keyword, bankNameId, cardType, disabilityType, disabilityLevel, province, skip, take } = c.req.valid('query');
       const disabledPersonService = new DisabledPersonService(AppDataSource);
 
-      // 使用 findAll 方法进行搜索,根据 keyword 匹配姓名或身份证号
+      // 使用 findAll 方法进行搜索,支持所有筛选参数
       const result = await disabledPersonService.findAll({
-        name: keyword,
-        idCard: keyword,
+        keyword,
+        bankNameId,
+        cardType,
+        disabilityType,
+        disabilityLevel,
+        province,
         page: skip ? Math.floor(skip / (take || 10)) + 1 : 1,
         limit: take || 10
       });

+ 227 - 0
allin-packages/disability-module/tests/integration/disability.integration.test.ts

@@ -656,6 +656,233 @@ describe('残疾人管理API集成测试', () => {
         expect(data.total).toBe(15);
       }
     });
+
+    it('应该支持残疾类型筛选', async () => {
+      // 创建测试数据
+      const dataSource = await IntegrationTestDatabase.getDataSource();
+      const disabledPersonRepository = dataSource.getRepository(DisabledPerson);
+
+      // 创建不同残疾类型的人员
+      const person1 = disabledPersonRepository.create({
+        name: '视力残疾人',
+        gender: '男',
+        idCard: '110101199001011351',
+        disabilityId: 'D123456851',
+        disabilityType: '视力残疾',
+        disabilityLevel: '一级',
+        idAddress: '北京市测试区',
+        phone: '1380013851',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person1);
+
+      const person2 = disabledPersonRepository.create({
+        name: '肢体残疾人',
+        gender: '女',
+        idCard: '110101199001011352',
+        disabilityId: 'D123456852',
+        disabilityType: '肢体残疾',
+        disabilityLevel: '二级',
+        idAddress: '北京市测试区',
+        phone: '1380013852',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person2);
+
+      // 测试视力残疾筛选
+      const response = await client.getAllDisabledPersons.$get({
+        query: {
+          disabilityType: '视力残疾',
+          skip: 0,
+          take: 10
+        }
+      }, {
+        headers: {
+          'Authorization': `Bearer ${testToken}`
+        }
+      });
+
+      expect(response.status).toBe(200);
+
+      if (response.status === 200) {
+        const data = await response.json();
+        expect(data.data).toHaveLength(1);
+        expect(data.data[0].disabilityType).toBe('视力残疾');
+      }
+    });
+
+    it('应该支持残疾级别筛选', async () => {
+      // 创建测试数据
+      const dataSource = await IntegrationTestDatabase.getDataSource();
+      const disabledPersonRepository = dataSource.getRepository(DisabledPerson);
+
+      // 创建不同残疾级别的人员
+      const person1 = disabledPersonRepository.create({
+        name: '一级残疾人',
+        gender: '男',
+        idCard: '110101199001011361',
+        disabilityId: 'D123456861',
+        disabilityType: '肢体残疾',
+        disabilityLevel: '一级',
+        idAddress: '北京市测试区',
+        phone: '1380013861',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person1);
+
+      const person2 = disabledPersonRepository.create({
+        name: '二级残疾人',
+        gender: '女',
+        idCard: '110101199001011362',
+        disabilityId: 'D123456862',
+        disabilityType: '肢体残疾',
+        disabilityLevel: '二级',
+        idAddress: '北京市测试区',
+        phone: '1380013862',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person2);
+
+      // 测试一级残疾筛选
+      const response = await client.getAllDisabledPersons.$get({
+        query: {
+          disabilityLevel: '一级',
+          skip: 0,
+          take: 10
+        }
+      }, {
+        headers: {
+          'Authorization': `Bearer ${testToken}`
+        }
+      });
+
+      expect(response.status).toBe(200);
+
+      if (response.status === 200) {
+        const data = await response.json();
+        expect(data.data).toHaveLength(1);
+        expect(data.data[0].disabilityLevel).toBe('一级');
+      }
+    });
+
+    it('应该支持省份筛选', async () => {
+      // 创建测试数据
+      const dataSource = await IntegrationTestDatabase.getDataSource();
+      const disabledPersonRepository = dataSource.getRepository(DisabledPerson);
+
+      // 创建不同省份的人员
+      const person1 = disabledPersonRepository.create({
+        name: '北京人员',
+        gender: '男',
+        idCard: '110101199001011371',
+        disabilityId: 'D123456871',
+        disabilityType: '肢体残疾',
+        disabilityLevel: '一级',
+        idAddress: '北京市测试区',
+        phone: '1380013871',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person1);
+
+      const person2 = disabledPersonRepository.create({
+        name: '上海人员',
+        gender: '女',
+        idCard: '310101199001011372',
+        disabilityId: 'D123456872',
+        disabilityType: '肢体残疾',
+        disabilityLevel: '二级',
+        idAddress: '上海市测试区',
+        phone: '1380013872',
+        province: '上海市',
+        city: '上海市'
+      });
+      await disabledPersonRepository.save(person2);
+
+      // 测试北京筛选
+      const response = await client.getAllDisabledPersons.$get({
+        query: {
+          province: '北京市',
+          skip: 0,
+          take: 10
+        }
+      }, {
+        headers: {
+          'Authorization': `Bearer ${testToken}`
+        }
+      });
+
+      expect(response.status).toBe(200);
+
+      if (response.status === 200) {
+        const data = await response.json();
+        expect(data.data).toHaveLength(1);
+        expect(data.data[0].province).toBe('北京市');
+      }
+    });
+
+    it('应该支持多条件组合筛选', async () => {
+      // 创建测试数据
+      const dataSource = await IntegrationTestDatabase.getDataSource();
+      const disabledPersonRepository = dataSource.getRepository(DisabledPerson);
+
+      // 创建符合多个条件的人员
+      const person1 = disabledPersonRepository.create({
+        name: '北京一级视力残疾人',
+        gender: '男',
+        idCard: '110101199001011381',
+        disabilityId: 'D123456881',
+        disabilityType: '视力残疾',
+        disabilityLevel: '一级',
+        idAddress: '北京市测试区',
+        phone: '1380013881',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person1);
+
+      // 创建不符合全部条件的人员
+      const person2 = disabledPersonRepository.create({
+        name: '北京二级肢体残疾人',
+        gender: '女',
+        idCard: '110101199001011382',
+        disabilityId: 'D123456882',
+        disabilityType: '肢体残疾',
+        disabilityLevel: '二级',
+        idAddress: '北京市测试区',
+        phone: '1380013882',
+        province: '北京市',
+        city: '北京市'
+      });
+      await disabledPersonRepository.save(person2);
+
+      // 测试多条件组合筛选:北京 + 一级 + 视力残疾
+      const response = await client.getAllDisabledPersons.$get({
+        query: {
+          province: '北京市',
+          disabilityType: '视力残疾',
+          disabilityLevel: '一级',
+          skip: 0,
+          take: 10
+        }
+      }, {
+        headers: {
+          'Authorization': `Bearer ${testToken}`
+        }
+      });
+
+      expect(response.status).toBe(200);
+
+      if (response.status === 200) {
+        const data = await response.json();
+        expect(data.data).toHaveLength(1);
+        expect(data.data[0].name).toBe('北京一级视力残疾人');
+      }
+    });
   });
 
   describe('GET /searchDisabledPersons', () => {