2025-06-26 12:06:47 +08:00
|
|
|
|
import React, { forwardRef, useImperativeHandle, useEffect, useState } from 'react';
|
2025-06-26 18:14:41 +08:00
|
|
|
|
import { Card } from 'antd';
|
2025-06-23 19:15:13 +08:00
|
|
|
|
import styles from '../supplierTaskManageAdd.less';
|
2025-06-24 14:49:45 +08:00
|
|
|
|
import SupplierSelector from '@/components/SupplierSelector';
|
2025-06-26 18:14:41 +08:00
|
|
|
|
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 {
|
2025-06-26 18:14:41 +08:00
|
|
|
|
supplierTaskManage: SupplierTaskModelState;
|
|
|
|
|
dispatch: Dispatch;
|
|
|
|
|
innerRef?: any; // 使用 innerRef 作为属性名
|
2025-06-23 19:15:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
2025-06-26 18:14:41 +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[]>([]);
|
|
|
|
|
|
2025-06-26 18:14:41 +08:00
|
|
|
|
// 当taskFormData.selectedSuppliers更新时,同步到本地状态
|
2025-06-26 12:06:47 +08:00
|
|
|
|
useEffect(() => {
|
2025-06-26 18:14:41 +08:00
|
|
|
|
if (taskFormData.selectedSuppliers && taskFormData.selectedSuppliers.length > 0) {
|
|
|
|
|
setSelectedSuppliers(taskFormData.selectedSuppliers);
|
2025-06-26 12:06:47 +08:00
|
|
|
|
}
|
2025-06-26 18:14:41 +08:00
|
|
|
|
}, [taskFormData.selectedSuppliers]); // 只在表单ID变化时更新(编辑模式加载时)
|
2025-06-26 12:06:47 +08:00
|
|
|
|
|
2025-06-26 18:14:41 +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
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}));
|
|
|
|
|
|
2025-06-24 14:49:45 +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 18:14:41 +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}>
|
2025-06-24 14:49:45 +08:00
|
|
|
|
<Card title="供应商选择" bordered={false} className="inner-card">
|
|
|
|
|
<SupplierSelector
|
|
|
|
|
onSelect={handleSupplierSelect}
|
2025-06-26 12:06:47 +08:00
|
|
|
|
selectedSuppliers={selectedSuppliers}
|
2025-06-24 14:49:45 +08:00
|
|
|
|
/>
|
2025-06-23 19:15:13 +08:00
|
|
|
|
</Card>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
2025-06-26 18:14:41 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 连接 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;
|