2
0
Эх сурвалжийг харах

✨ feat(order): 统一订单人员数据结构并增强调试功能

- 将订单人员接口字段从`opId`改为`id`,与数据库schema保持一致
- 在残疾人选择处理函数中添加详细console日志,便于调试状态更新
- 优化待添加人员列表渲染逻辑,添加无数据时的占位显示
- 更新订单schema,添加可选的`orderPersons`字段定义
- 调整集成测试,增加状态更新超时和调试日志
yourname 1 цаг өмнө
parent
commit
1b1d2d2d8e

+ 13 - 3
allin-packages/order-management-ui/src/components/OrderDetailModal.tsx

@@ -65,7 +65,7 @@ interface PendingPerson {
 }
 
 interface OrderPerson {
-  opId: number;
+  id: number; // 注意:从opId改为id,与schema保持一致
   orderId: number;
   personId: number;
   joinDate?: string;
@@ -277,6 +277,7 @@ const OrderDetailModal: React.FC<OrderDetailModalProps> = ({
 
   // 处理残疾人选择 - 将选择的人员添加到待添加列表
   const handlePersonSelect = (persons: DisabledPersonData | DisabledPersonData[]) => {
+    console.log('OrderDetailModal: handlePersonSelect被调用,人员数据:', persons);
     const personsArray = Array.isArray(persons) ? persons : [persons];
 
     // 获取已绑定人员的ID列表
@@ -310,8 +311,15 @@ const OrderDetailModal: React.FC<OrderDetailModalProps> = ({
     });
 
     if (newPendingPersons.length > 0) {
-      setPendingPersons(prev => [...prev, ...newPendingPersons]);
+      console.log('OrderDetailModal: 设置pendingPersons,新人员:', newPendingPersons);
+      setPendingPersons(prev => {
+        const newState = [...prev, ...newPendingPersons];
+        console.log('OrderDetailModal: pendingPersons新状态:', newState);
+        return newState;
+      });
       toast.success(`已添加 ${newPendingPersons.length} 名人员到待添加列表`);
+    } else {
+      console.log('OrderDetailModal: 没有新人员可添加');
     }
   };
 
@@ -555,7 +563,7 @@ const OrderDetailModal: React.FC<OrderDetailModalProps> = ({
               </Card>
 
               {/* 待添加人员列表 */}
-              {pendingPersons.length > 0 && (
+              {pendingPersons.length > 0 ? (
                 <Card data-testid="pending-persons-card">
                   <CardHeader>
                     <div className="flex items-center justify-between">
@@ -632,6 +640,8 @@ const OrderDetailModal: React.FC<OrderDetailModalProps> = ({
                     </div>
                   </CardContent>
                 </Card>
+              ) : (
+                <div data-testid="no-pending-persons">没有待添加人员</div>
               )}
 
               {/* 绑定人员列表 */}

+ 7 - 1
allin-packages/order-management-ui/tests/integration/order.integration.test.tsx

@@ -89,6 +89,7 @@ vi.mock('@d8d/allin-disability-person-management-ui', () => ({
               // 薪资查询函数现在需要省市ID,但这里保持原样
               // 实际应该从API获取省市ID
             };
+            console.log('测试:调用onSelect,人员数据:', mockPerson);
             onSelect(mode === 'multiple' ? [mockPerson] : mockPerson);
             // 不立即关闭残疾人选择器,让测试控制关闭时机
             // 测试中会在适当的时候点击关闭按钮
@@ -1382,9 +1383,14 @@ describe('订单管理集成测试', () => {
 
       // 验证待添加人员列表显示
       await waitFor(() => {
+        // 先检查是否显示"没有待添加人员",如果是,说明状态还没更新
+        const noPendingElement = screen.queryByTestId('no-pending-persons');
+        if (noPendingElement) {
+          console.log('测试:仍然显示"没有待添加人员"');
+        }
         expect(screen.getByTestId('pending-persons-card')).toBeInTheDocument();
         expect(screen.getByTestId('pending-person-1')).toBeInTheDocument();
-      });
+      }, { timeout: 5000 });
 
       // 验证确认添加按钮显示正确数量
       const confirmButton = screen.getByTestId('confirm-add-persons-button');

+ 4 - 0
allin-packages/order-module/src/schemas/order.schema.ts

@@ -66,6 +66,10 @@ export const EmploymentOrderSchema = z.object({
   updateTime: z.coerce.date().openapi({
     description: '更新时间',
     example: '2024-01-01T00:00:00Z'
+  }),
+  orderPersons: z.array(z.lazy(() => OrderPersonSchema)).optional().openapi({
+    description: '订单关联人员列表',
+    example: []
   })
 });
 

+ 1 - 1
allin-packages/order-module/src/services/order.service.ts

@@ -181,7 +181,7 @@ export class OrderService extends GenericCrudService<EmploymentOrder> {
       createTime: order.createTime,
       updateTime: order.updateTime,
       orderPersons: orderPersons.map(person => ({
-        opId: person.id,
+        id: person.id, // 注意:schema期望id字段,不是opId
         orderId: person.orderId,
         personId: person.personId,
         joinDate: person.joinDate,