fix: 1.接入ai_suggestion.

2. 接入合同起草功能。
This commit is contained in:
2025-12-05 00:04:45 +08:00
parent eca98fc540
commit 33f10896a0
29 changed files with 3184 additions and 981 deletions
+28 -14
View File
@@ -336,8 +336,9 @@ export default function FilesUpload() {
// 附件追加状态
const [showAttachmentUpload, setShowAttachmentUpload] = useState<boolean>(false);
const [selectedDocumentId, setSelectedDocumentId] = useState<number | null>(null);
const [selectedDocumentName, setSelectedDocumentName] = useState<string | null>(null);
const [attachmentFiles, setAttachmentFiles] = useState<File[]>([]);
const [attachmentMergeMode, setAttachmentMergeMode] = useState<'overwrite' | 'new'>('overwrite');
const [attachmentMergeMode, setAttachmentMergeMode] = useState<'overwrite' | 'new'>('new');
const [attachmentRemark, setAttachmentRemark] = useState<string>("");
const [attachmentUploading, setAttachmentUploading] = useState<boolean>(false);
@@ -887,7 +888,7 @@ export default function FilesUpload() {
if (files.length > 0) {
// 检查主文件类型
const selectedDocument = queueFiles.find(doc => doc.id === selectedDocumentId);
const isMainFileDocx = selectedDocument?.path.toLowerCase().endsWith('.docx');
const isMainFileDocx = selectedDocument?.path?.toLowerCase().endsWith('.docx');
// 验证文件类型,支持PDF、Word、ZIP、RAR
const validFiles: File[] = [];
@@ -899,7 +900,7 @@ export default function FilesUpload() {
const isPdf = file.type === 'application/pdf' || fileName.endsWith('.pdf');
const isValidType =
isPdf ||
file.type === 'application/msword' || fileName.endsWith('.doc') ||
// file.type === 'application/msword' || fileName.endsWith('.doc') ||
file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || fileName.endsWith('.docx') ||
file.type === 'application/zip' || fileName.endsWith('.zip') ||
file.type === 'application/x-rar-compressed' || fileName.endsWith('.rar');
@@ -973,6 +974,7 @@ export default function FilesUpload() {
setAttachmentRemark("");
setShowAttachmentUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
// 刷新文档列表
await filterDocuments(documentTypeIds);
@@ -1042,6 +1044,7 @@ export default function FilesUpload() {
setTemplateFile(null);
setShowTemplateUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
// 刷新文档列表
await filterDocuments(documentTypeIds);
@@ -2114,6 +2117,7 @@ export default function FilesUpload() {
icon="ri-attachment-line"
onClick={() => {
setSelectedDocumentId(record.id);
setSelectedDocumentName(record.name)
setShowAttachmentUpload(true);
}}
className="text-xs px-2 py-1 h-7"
@@ -2126,6 +2130,7 @@ export default function FilesUpload() {
icon="ri-file-copy-line"
onClick={() => {
setSelectedDocumentId(record.id);
setSelectedDocumentName(record.name)
setShowTemplateUpload(true);
}}
className="text-xs px-2 py-1 h-7"
@@ -2290,7 +2295,7 @@ export default function FilesUpload() {
ref={contractMainFileRef}
multiple={false}
accept=".pdf,.docx"
tipText="请上传合同主文件,格式:PDF/Word"
tipText="请上传合同主文件,格式:.pdf/.docx"
mainText="上传合同主文件"
buttonText="选择主文件"
icon="ri-file-text-line"
@@ -2327,7 +2332,7 @@ export default function FilesUpload() {
ref={contractAttachmentFileRef}
multiple={false}
accept=".pdf,.docx"
tipText="请上传合同附件,格式:PDF/Word"
tipText="请上传合同附件,格式:.pdf/.docx"
mainText="上传合同附件"
buttonText="选择附件"
icon="ri-file-copy-line"
@@ -2362,7 +2367,7 @@ export default function FilesUpload() {
onFilesSelected={handleContractTemplateFilesSelected}
multiple={false}
accept=".pdf,.docx"
tipText="请上传合同模板,格式:PDF/Word"
tipText="请上传合同模板,格式:.pdf/.docx"
mainText="上传合同模板"
buttonText="选择模板"
icon="ri-file-copy-line"
@@ -2600,11 +2605,13 @@ export default function FilesUpload() {
if (e.target === e.currentTarget) {
setShowAttachmentUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
setAttachmentFiles([]);
setAttachmentRemark("");
setAttachmentMergeMode('overwrite');
}
}}
}
}
>
<div className="bg-white rounded-lg p-6 w-full max-w-2xl mx-4 max-h-[90vh] overflow-y-auto">
<div className="flex justify-between items-center mb-4">
@@ -2613,6 +2620,7 @@ export default function FilesUpload() {
onClick={() => {
setShowAttachmentUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
setAttachmentFiles([]);
setAttachmentRemark("");
}}
@@ -2626,10 +2634,11 @@ export default function FilesUpload() {
{/* 文档信息 */}
<div className="bg-gray-50 p-3 rounded">
<p className="text-sm text-gray-600">
ID: <span className="font-medium">{selectedDocumentId}</span>
{/* 目标文档ID: <span className="font-medium">{selectedDocumentId}</span> */}
: <span className="font-medium">{selectedDocumentName}</span>
</p>
<p className="text-xs text-gray-500 mt-1">
PDFWordZIPRAR格式ZIP/RAR内仅合并其中的PDF文件
.pdf.docx.zip.rar格式<i className="ri-information-2-line mr-1"></i>ZIP/RAR内需要保证文件格式一致
</p>
</div>
@@ -2642,7 +2651,7 @@ export default function FilesUpload() {
onFilesSelected={handleAttachmentFilesSelected}
multiple={true}
accept=".pdf,.docx,.zip,.rar"
tipText="支持PDF、Word、ZIP、RAR格式,可多选"
tipText="支持.pdf、.docx、.zip、.rar格式,可多选"
mainText="选择附件文件"
buttonText="选择文件"
icon="ri-attachment-line"
@@ -2652,7 +2661,7 @@ export default function FilesUpload() {
<p className="text-sm text-green-600 mb-2">
<i className="ri-checkbox-circle-line"></i> {attachmentFiles.length}
</p>
<div className="space-y-1 max-h-32 overflow-y-auto">
<div className="space-y-1 max-h-32 overflow-y-auto">
{attachmentFiles.map((file, index) => (
<div key={index} className="text-xs text-gray-600 bg-gray-50 p-2 rounded">
<i className="ri-file-line mr-1"></i>
@@ -2670,7 +2679,7 @@ export default function FilesUpload() {
</label>
<div className="space-y-2">
<label className="flex items-center">
{/* <label className="flex items-center">
<input
type="radio"
name="mergeMode"
@@ -2680,7 +2689,7 @@ export default function FilesUpload() {
className="mr-2"
/>
<span className="text-sm">覆盖原文档(推荐)</span>
</label>
</label> */}
<label className="flex items-center">
<input
type="radio"
@@ -2716,6 +2725,7 @@ export default function FilesUpload() {
onClick={() => {
setShowAttachmentUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
setAttachmentFiles([]);
setAttachmentRemark("");
}}
@@ -2746,6 +2756,7 @@ export default function FilesUpload() {
if (e.target === e.currentTarget) {
setShowTemplateUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
setTemplateFile(null);
}
}}
@@ -2757,6 +2768,7 @@ export default function FilesUpload() {
onClick={() => {
setShowTemplateUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
setTemplateFile(null);
}}
className="text-gray-400 hover:text-gray-600"
@@ -2769,7 +2781,8 @@ export default function FilesUpload() {
{/* 文档信息 */}
<div className="bg-gray-50 p-3 rounded">
<p className="text-sm text-gray-600">
ID: <span className="font-medium">{selectedDocumentId}</span>
{/* 目标文档ID: <span className="font-medium">{selectedDocumentId}</span> */}
: <span className="font-medium">{selectedDocumentName}</span>
</p>
<p className="text-xs text-gray-500 mt-1">
.pdf.docx格式
@@ -2810,6 +2823,7 @@ export default function FilesUpload() {
onClick={() => {
setShowTemplateUpload(false);
setSelectedDocumentId(null);
setSelectedDocumentName(null)
setTemplateFile(null);
}}
disabled={templateUploading}