diff --git a/app/routes/files.upload.tsx b/app/routes/files.upload.tsx index 8fa7ae3..d53a4ee 100644 --- a/app/routes/files.upload.tsx +++ b/app/routes/files.upload.tsx @@ -306,6 +306,7 @@ export default function FilesUpload() { const [isContractType, setIsContractType] = useState(false); const [contractMainFiles, setContractMainFiles] = useState([]); const [contractAttachmentFiles, setContractAttachmentFiles] = useState([]); + const [contractTemplateFiles, setContractTemplateFiles] = useState([]); // 附件追加状态 const [showAttachmentUpload, setShowAttachmentUpload] = useState(false); @@ -784,6 +785,63 @@ export default function FilesUpload() { } }; + // 处理合同模板文件选择 + const handleContractTemplateFilesSelected = (files: FileList) => { + try { + console.log('【调试-handleContractTemplateFilesSelected】开始处理合同模板选择, 文件数量:', files.length); + + // 检查组件是否已卸载 + if (!isMountedRef.current) { + console.error('【调试-handleContractTemplateFilesSelected】组件已卸载,取消处理'); + return; + } + + if (files.length > 0) { + // 验证文件类型,支持PDF和Word + const validFiles: File[] = []; + let hasInvalidFiles = false; + + Array.from(files).forEach(file => { + const fileName = file.name.toLowerCase(); + const isValidType = + file.type === 'application/pdf' || fileName.endsWith('.pdf') || + file.type === 'application/msword' || fileName.endsWith('.doc') || + file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || fileName.endsWith('.docx'); + + if (isValidType) { + validFiles.push(file); + } else { + hasInvalidFiles = true; + console.error(`【调试-handleContractTemplateFilesSelected】无效的文件类型: ${file.name}, 类型: ${file.type}`); + } + }); + + if (hasInvalidFiles) { + // 显示错误提示 + console.error('【调试-handleContractTemplateFilesSelected】存在无效的文件类型'); + messageService.error('只支持PDF、Word格式的文件', { + title: '文件类型错误', + confirmText: '确定', + cancelText: '', + }); + } + + if (validFiles.length > 0 && isMountedRef.current) { + console.log('【调试-handleContractTemplateFilesSelected】有效文件数量:', validFiles.length); + console.log('【调试-handleContractTemplateFilesSelected】有效文件:', validFiles.map(f => ({ name: f.name, size: f.size, type: f.type }))); + + setContractTemplateFiles(validFiles); + } else { + console.error('【调试-handleContractTemplateFilesSelected】没有有效的文件或组件已卸载'); + } + } else { + console.log('【调试-handleContractTemplateFilesSelected】未选择任何文件'); + } + } catch (error) { + console.error('【调试-handleContractTemplateFilesSelected】处理合同模板选择时发生错误:', error); + } + }; + // 处理附件追加文件选择 const handleAttachmentFilesSelected = (files: FileList) => { try { @@ -941,11 +999,12 @@ export default function FilesUpload() { }; // 检查并准备上传 - const checkAndPrepareUpload = (mainFiles: File[], attachmentFiles: File[]) => { + const checkAndPrepareUpload = (mainFiles: File[], attachmentFiles: File[], templateFiles: File[] = []) => { try { console.log('【调试-checkAndPrepareUpload】开始检查并准备上传文件', { mainFilesCount: mainFiles.length, attachmentFilesCount: attachmentFiles.length, + templateFilesCount: templateFiles.length, fileType }); @@ -982,13 +1041,18 @@ export default function FilesUpload() { return; } - // 记录主文件和附件文件信息 + // 记录主文件、附件文件和模板文件信息 console.log('【调试-checkAndPrepareUpload】合同主文件:', mainFiles.map(f => ({ name: f.name, size: f.size, type: f.type }))); if (attachmentFiles.length > 0) { console.log('【调试-checkAndPrepareUpload】合同附件文件:', attachmentFiles.map(f => ({ name: f.name, size: f.size, type: f.type }))); } else { console.log('【调试-checkAndPrepareUpload】无合同附件文件'); } + if (templateFiles.length > 0) { + console.log('【调试-checkAndPrepareUpload】合同模板文件:', templateFiles.map(f => ({ name: f.name, size: f.size, type: f.type }))); + } else { + console.log('【调试-checkAndPrepareUpload】无合同模板文件'); + } } if (mainFiles.length > 0) { @@ -999,6 +1063,11 @@ export default function FilesUpload() { if (attachmentFiles.length > 0) { allFiles = [...allFiles, ...attachmentFiles]; } + + // 如果模板文件存在,则合并 + if (templateFiles.length > 0) { + allFiles = [...allFiles, ...templateFiles]; + } // console.log('【调试-checkAndPrepareUpload】合并文件后总数:', allFiles.length); @@ -1984,7 +2053,7 @@ export default function FilesUpload() { @@ -2005,8 +2074,8 @@ export default function FilesUpload() { shouldPreventFileSelect={!fileType} /> ) : ( - // 合同文件上传区域 - 双区域并排 -
+ // 合同文件上传区域 - 三区域布局 +

合同主文件

)}
+
+

合同模板

+ + {contractTemplateFiles.length > 0 && ( +
+ + 已选择模板: {contractTemplateFiles[0].name} +
+ )} +
)}