Files
fe_supplier_frontend/src/pages/supplierEvaluateManage/supplierTaskManage/components/SupplierSelectStep.tsx

74 lines
2.6 KiB
TypeScript
Raw Normal View History

2025-06-26 12:06:47 +08:00
import React, { forwardRef, useImperativeHandle, useEffect, useState } from 'react';
import { Card, Form } from 'antd';
2025-06-23 19:15:13 +08:00
import styles from '../supplierTaskManageAdd.less';
import SupplierSelector from '@/components/SupplierSelector';
2025-06-26 12:06:47 +08:00
import type { TaskAddRequest,SupplierItem } from '@/servers/types/supplierEvaluateTask';
2025-06-23 19:15:13 +08:00
interface SupplierSelectStepProps {
2025-06-26 12:06:47 +08:00
formData: Partial<TaskAddRequest>; // 从父组件传递的表单数据
onFormDataChange: (data: Partial<TaskAddRequest>) => void; // 表单数据变更的回调函数
2025-06-23 19:15:13 +08:00
}
2025-06-23 21:39:51 +08:00
const SupplierSelectStep = forwardRef<any, SupplierSelectStepProps>(({ formData, onFormDataChange }, ref) => {
2025-06-26 12:06:47 +08:00
// 内部状态避免直接操作formData导致循环更新
const [selectedSuppliers, setSelectedSuppliers] = useState<SupplierItem[]>([]);
// 当formData.selectedSuppliers更新时同步到本地状态
useEffect(() => {
if (formData.selectedSuppliers && formData.selectedSuppliers.length > 0) {
setSelectedSuppliers(formData.selectedSuppliers);
}
}, [formData.selectedSuppliers]); // 只在表单ID变化时更新编辑模式加载时
2025-06-23 21:39:51 +08:00
// 暴露表单方法给父组件
useImperativeHandle(ref, () => ({
validateFields: () => {
// 这里可以添加自定义验证逻辑
return Promise.resolve();
},
getFieldsValue: () => {
return {
2025-06-26 12:06:47 +08:00
selectedSuppliers,
supplierIds: selectedSuppliers.map((supplier: SupplierItem) => ({ id: supplier.id }))
2025-06-23 21:39:51 +08:00
};
},
setFieldsValue: (values: any) => {
if (values.selectedSuppliers) {
2025-06-26 12:06:47 +08:00
setSelectedSuppliers(values.selectedSuppliers);
2025-06-23 21:39:51 +08:00
}
},
}));
// 处理供应商选择
const handleSupplierSelect = (suppliers: SupplierItem[]) => {
2025-06-24 18:58:43 +08:00
// 确保每个供应商都有evaluators字段
const suppliersWithEvaluators = suppliers.map(supplier => ({
...supplier,
evaluators: supplier.evaluators || [], // 确保evaluators字段存在即使是空数组
evaluatorCount: supplier.evaluators?.length || 0 // 计算评价人员数量
}));
2025-06-26 12:06:47 +08:00
// 更新本地状态
setSelectedSuppliers(suppliersWithEvaluators);
2025-06-24 18:58:43 +08:00
2025-06-26 12:06:47 +08:00
// 通知父组件
2025-06-23 21:39:51 +08:00
onFormDataChange({
2025-06-24 18:58:43 +08:00
selectedSuppliers: suppliersWithEvaluators,
supplierIds: suppliersWithEvaluators.map(supplier => ({ id: supplier.id }))
2025-06-23 21:39:51 +08:00
});
2025-06-23 19:15:13 +08:00
};
return (
<div className={styles.supplierSelectStep}>
<Card title="供应商选择" bordered={false} className="inner-card">
<SupplierSelector
onSelect={handleSupplierSelect}
2025-06-26 12:06:47 +08:00
selectedSuppliers={selectedSuppliers}
/>
2025-06-23 19:15:13 +08:00
</Card>
</div>
);
2025-06-23 21:39:51 +08:00
});
2025-06-23 19:15:13 +08:00
export default SupplierSelectStep;