import React, { useState, useEffect, useCallback, forwardRef, useImperativeHandle } from 'react'; import { Form, Input, Select, DatePicker, Row, Col, Card, Radio } from 'antd'; import moment from 'moment'; import { getAllTemplates } from '@/servers/api/supplierEvaluate'; import CategorySelector from '@/components/CategorySelector'; import styles from '../supplierTaskManageAdd.less'; import { CategoryLimitationType } from '@/dicts/supplierTemplateDict'; const { Option } = Select; interface BasicInfoStepProps { formData: Partial; onFormDataChange: (data: Partial) => void; } interface TemplateItem { id: string; templateName: string; categoryLimitation?: string; } const BasicInfoStep = forwardRef(({ formData, onFormDataChange }, ref) => { const [form] = Form.useForm(); const [templates, setTemplates] = useState([]); const [loading, setLoading] = useState(false); // 暴露表单方法给父组件 useImperativeHandle(ref, () => ({ validateFields: () => form.validateFields(), getFieldsValue: () => form.getFieldsValue(), setFieldsValue: (values: any) => form.setFieldsValue(values), })); // 获取模板列表 const fetchTemplates = async () => { setLoading(true); try { const response = await getAllTemplates(); if (response.success && response.data) { setTemplates(response.data); } else { setTemplates([ { id: '1', templateName: '不限品类模板', categoryLimitation: '0' }, { id: '2', templateName: '限制品类模板', categoryLimitation: '1' }, ]); } } catch (error) { console.error('获取模板列表失败:', error); // 使用模拟数据 setTemplates([ { id: '1', templateName: '不限品类模板', categoryLimitation: '0' }, { id: '2', templateName: '限制品类模板', categoryLimitation: '1' }, ]); } finally { setLoading(false); } }; // 获取评价模板和初始化表单数据 useEffect(() => { fetchTemplates(); // 初始化表单数据 if (formData) { form.setFieldsValue(formData); } }, []); // 表单值变化时触发 const handleValuesChange = (changedValues: any, allValues: any) => { // 处理模板变更 if (changedValues.templateId) { const template = templates.find((t) => t.id === changedValues.templateId); if (template) { // 更新品类限制类型 form.setFieldsValue({ categoryLimitation: template.categoryLimitation || '0', }); // 如果选择了不限品类的模板,清空品类选择 if (template.categoryLimitation === '0') { form.setFieldsValue({ categoryId: undefined, }); } } } // 默认设置weightStatus为0 const formattedValues = { ...allValues, weightStatus: 0, }; onFormDataChange(formattedValues); }; // 年度选项生成 const yearOptions = useCallback(() => { const currentYear = new Date().getFullYear(); return Array.from({ length: 11 }, (_, i) => currentYear - 5 + i).map((year) => ( )); }, []); // 判断是否显示品类选择器 const shouldShowCategorySelector = useCallback(() => { const categoryLimitation = form.getFieldValue('categoryLimitation'); return categoryLimitation === CategoryLimitationType.LIMITED; }, [form]); return (
({ value: value ? moment(value) : undefined, })} normalize={(value) => value && value.format('YYYY-MM-DD')} > ({ value: value ? moment(value) : undefined, })} normalize={(value) => value && value.format('YYYY-MM-DD')} > 通用不限品类 限制品类 {shouldShowCategorySelector() && ( )}
); }); export default BasicInfoStep;