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

99 lines
3.3 KiB
TypeScript
Raw Normal View History

2025-06-26 12:06:47 +08:00
import React, { forwardRef, useImperativeHandle, useEffect, useState } from 'react';
import { Card } from 'antd';
2025-06-23 19:15:13 +08:00
import styles from '../supplierTaskManageAdd.less';
import SupplierSelector from '@/components/SupplierSelector';
import type { SupplierItem } from '@/servers/dao/supplierEvaluateTask';
import type { Dispatch } from 'umi';
import { connect } from 'umi';
import type { SupplierTaskModelState } from '@/models/supplierTaskManage';
2025-06-23 19:15:13 +08:00
interface SupplierSelectStepProps {
supplierTaskManage: SupplierTaskModelState;
dispatch: Dispatch;
innerRef?: any; // 使用 innerRef 作为属性名
2025-06-23 19:15:13 +08:00
}
// 定义组件,使用 innerRef 代替直接的 ref
const SupplierSelectStepComponent = (props: SupplierSelectStepProps) => {
const { supplierTaskManage, dispatch, innerRef } = props;
// 从model获取数据
const { taskFormData } = supplierTaskManage;
2025-06-26 12:06:47 +08:00
// 内部状态避免直接操作formData导致循环更新
const [selectedSuppliers, setSelectedSuppliers] = useState<SupplierItem[]>([]);
// 当taskFormData.selectedSuppliers更新时同步到本地状态
2025-06-26 12:06:47 +08:00
useEffect(() => {
if (taskFormData.selectedSuppliers && taskFormData.selectedSuppliers.length > 0) {
setSelectedSuppliers(taskFormData.selectedSuppliers);
2025-06-26 12:06:47 +08:00
}
}, [taskFormData.selectedSuppliers]); // 只在表单ID变化时更新编辑模式加载时
2025-06-26 12:06:47 +08:00
// 暴露表单方法给父组件,使用 innerRef
useImperativeHandle(innerRef, () => ({
2025-06-23 21:39:51 +08:00
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
// 通过dispatch更新model数据
dispatch({
type: 'supplierTaskManage/updateFormData',
payload: {
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>
);
};
// 连接 Dva model
const ConnectedComponent = connect(
({ supplierTaskManage }: { supplierTaskManage: SupplierTaskModelState }) => ({
supplierTaskManage,
})
)(SupplierSelectStepComponent);
// 外层转发 ref 到 innerRef
const SupplierSelectStep = forwardRef((props: any, ref) => (
<ConnectedComponent {...props} innerRef={ref} />
));
2025-06-23 19:15:13 +08:00
export default SupplierSelectStep;