import React, { useState } from 'react'; import { Card, Button, Form, Input, Upload, App, Modal, Select } from 'antd'; import { UploadOutlined, CloudUploadOutlined, LinkOutlined } from '@ant-design/icons'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { createProject, updateProject, submitProject, uploadProjectFile } from '../../api'; const { TextArea } = Input; const { Option } = Select; const ProjectSubmission = ({ competitionId, initialValues, onCancel, onSuccess }) => { const { message } = App.useApp(); const [form] = Form.useForm(); const [fileList, setFileList] = useState([]); const queryClient = useQueryClient(); // Reset form when initialValues changes (important for switching between create/edit) React.useEffect(() => { if (initialValues) { form.setFieldsValue(initialValues); } else { form.resetFields(); } }, [initialValues, form]); const createMutation = useMutation({ mutationFn: createProject, onSuccess: () => { message.success('项目创建成功'); queryClient.invalidateQueries(['projects']); onSuccess(); }, onError: (error) => { message.error(`创建失败: ${error.message}`); } }); const updateMutation = useMutation({ mutationFn: (data) => updateProject(initialValues.id, data), onSuccess: () => { message.success('项目更新成功'); queryClient.invalidateQueries(['projects']); onSuccess(); }, onError: (error) => { message.error(`更新失败: ${error.message}`); } }); const uploadMutation = useMutation({ mutationFn: uploadProjectFile, onSuccess: (data) => { message.success('文件上传成功'); setFileList([...fileList, data]); // Add file to list (assuming response format) }, onError: (error) => { message.error(`上传失败: ${error.message}`); } }); const onFinish = (values) => { const data = { ...values, competition: competitionId, // Handle file URLs/IDs if needed in create/update }; if (initialValues?.id) { updateMutation.mutate(data); } else { createMutation.mutate(data); } }; const handleUpload = ({ file, onSuccess, onError }) => { if (!initialValues?.id) { message.warning('请先保存项目基本信息再上传文件'); // Prevent default upload onError(new Error('请先保存项目')); return; } const formData = new FormData(); formData.append('file', file); formData.append('project', initialValues?.id || ''); // Need project ID first usually uploadMutation.mutate(formData, { onSuccess: (data) => { onSuccess(data); }, onError: (error) => { onError(error); } }); }; return (