// 全局变量 let currentFile = null; // 标签页切换功能 function openTab(tabName) { // 隐藏所有标签页内容 const tabContents = document.getElementsByClassName('tab-content'); for (let i = 0; i < tabContents.length; i++) { tabContents[i].classList.remove('active'); } // 移除所有标签按钮的激活状态 const tabButtons = document.getElementsByClassName('tab-button'); for (let i = 0; i < tabButtons.length; i++) { tabButtons[i].classList.remove('active'); } // 显示选中的标签页内容 document.getElementById(tabName).classList.add('active'); // 激活对应的标签按钮 event.currentTarget.classList.add('active'); // 清空当前文件 currentFile = null; clearResults(); } // 文件上传处理 function setupFileUpload(inputId, uploadAreaId) { const fileInput = document.getElementById(inputId); const uploadArea = document.getElementById(uploadAreaId); fileInput.addEventListener('change', function(e) { if (this.files.length > 0) { handleFileUpload(this.files[0], uploadArea); } }); // 拖拽上传功能 uploadArea.addEventListener('dragover', function(e) { e.preventDefault(); this.style.borderColor = '#2980b9'; this.style.background = '#e9ecef'; }); uploadArea.addEventListener('dragleave', function(e) { e.preventDefault(); this.style.borderColor = '#3498db'; this.style.background = '#f8f9fa'; }); uploadArea.addEventListener('drop', function(e) { e.preventDefault(); this.style.borderColor = '#3498db'; this.style.background = '#f8f9fa'; if (e.dataTransfer.files.length > 0) { handleFileUpload(e.dataTransfer.files[0], uploadArea); } }); } // 处理文件上传 async function handleFileUpload(file, uploadArea) { const formData = new FormData(); formData.append('file', file); showStatus('正在上传文件...', 'info'); try { const response = await fetch('/upload', { method: 'POST', body: formData }); const result = await response.json(); if (result.success) { currentFile = result; uploadArea.innerHTML = `

✓ 文件上传成功

文件名: ${result.filename}

文件类型: ${result.file_type}

`; showStatus('文件上传成功!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('上传失败: ' + error.message, 'error'); uploadArea.innerHTML = `

点击选择文件或拖拽文件到此处

上传失败,请重试

`; } } // 清空文件选择 function clearFile(uploadAreaId) { const uploadArea = document.getElementById(uploadAreaId); const fileInputId = uploadAreaId.replace('-upload-area', '-file'); uploadArea.innerHTML = `

点击选择文件或拖拽文件到此处

支持格式: 根据标签页不同

`; currentFile = null; clearResults(); setupFileUpload(fileInputId, uploadAreaId); } // PDF处理功能 async function processPdf(action) { if (!currentFile) { showStatus('请先选择PDF文件', 'error'); return; } showStatus('正在处理PDF文件...', 'info'); try { const response = await fetch('/process/pdf', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ filepath: currentFile.filepath, action: action }) }); const result = await response.json(); if (result.success) { if (action === 'extract') { document.getElementById('pdf-result').innerHTML = `

提取的文本内容:

${result.text || '未提取到文本内容'}
`; } else if (action === 'to_excel') { document.getElementById('pdf-result').innerHTML = `

转换成功!

PDF文件已成功转换为Excel格式

下载Excel文件 `; } showStatus('PDF处理完成!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('处理失败: ' + error.message, 'error'); } } // 图片处理功能 async function processImage(action) { if (!currentFile) { showStatus('请先选择图片文件', 'error'); return; } showStatus('正在处理图片文件...', 'info'); try { const response = await fetch('/process/image', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ filepath: currentFile.filepath, action: action }) }); const result = await response.json(); if (result.success) { if (action === 'extract') { document.getElementById('image-result').innerHTML = `

识别的文字内容:

${result.text || '未识别到文字内容'}
`; } else { const formatName = action === 'to_excel' ? 'Excel' : '文本'; document.getElementById('image-result').innerHTML = `

转换成功!

图片文件已成功转换为${formatName}格式

下载${formatName}文件 `; } showStatus('图片处理完成!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('处理失败: ' + error.message, 'error'); } } // 格式转换功能 async function processFormat() { if (!currentFile) { showStatus('请先选择文件', 'error'); return; } const targetFormat = document.getElementById('target-format').value; showStatus('正在转换文件格式...', 'info'); try { const response = await fetch('/process/format', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ filepath: currentFile.filepath, target_format: targetFormat }) }); const result = await response.json(); if (result.success) { document.getElementById('format-result').innerHTML = `

转换成功!

文件已成功转换为${targetFormat.toUpperCase()}格式

下载文件 `; showStatus('格式转换完成!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('转换失败: ' + error.message, 'error'); } } // 网页抓取功能 async function processWeb() { const url = document.getElementById('web-url').value; const selector = document.getElementById('css-selector').value; if (!url) { showStatus('请输入网页URL', 'error'); return; } showStatus('正在抓取网页内容...', 'info'); try { const response = await fetch('/process/web', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ url: url, selector: selector }) }); const result = await response.json(); if (result.success) { document.getElementById('web-result').innerHTML = `

抓取结果:

${result.content || '未抓取到内容'}
`; showStatus('网页抓取完成!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('抓取失败: ' + error.message, 'error'); } } // 网页抓取并导出为Excel async function processWebToExcel() { const url = document.getElementById('web-url').value; const selector = document.getElementById('css-selector').value; if (!url) { showStatus('请输入网页URL', 'error'); return; } showStatus('正在抓取网页并导出为Excel...', 'info'); try { const response = await fetch('/process/web', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ url: url, selector: selector }) }); const result = await response.json(); if (result.success) { document.getElementById('web-result').innerHTML = `

导出成功!

网页内容已成功导出为Excel格式

下载Excel文件 `; showStatus('网页导出完成!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('导出失败: ' + error.message, 'error'); } } // 数据库导出功能 async function processDatabase() { if (!currentFile) { showStatus('请先选择数据库文件', 'error'); return; } const targetFormat = document.getElementById('db-target-format').value; const tableName = document.getElementById('table-name').value; showStatus('正在导出数据库...', 'info'); try { const response = await fetch('/process/database', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ filepath: currentFile.filepath, target_format: targetFormat, table_name: tableName }) }); const result = await response.json(); if (result.success) { document.getElementById('database-result').innerHTML = `

导出成功!

数据库已成功导出为${targetFormat.toUpperCase()}格式

下载文件 `; showStatus('数据库导出完成!', 'success'); } else { throw new Error(result.error); } } catch (error) { showStatus('导出失败: ' + error.message, 'error'); } } // 显示状态消息 function showStatus(message, type) { const statusEl = document.getElementById('status-message'); statusEl.textContent = message; statusEl.className = `status-message status-${type}`; statusEl.style.display = 'block'; setTimeout(() => { statusEl.style.display = 'none'; }, 5000); } // 清空结果区域 function clearResults() { const resultAreas = document.getElementsByClassName('result-area'); for (let i = 0; i < resultAreas.length; i++) { resultAreas[i].innerHTML = ''; } } // 初始化页面 document.addEventListener('DOMContentLoaded', function() { // 设置文件上传功能 setupFileUpload('pdf-file', 'pdf-upload-area'); setupFileUpload('image-file', 'image-upload-area'); setupFileUpload('format-file', 'format-upload-area'); setupFileUpload('db-file', 'db-upload-area'); // 设置输入框回车事件 document.getElementById('web-url').addEventListener('keypress', function(e) { if (e.key === 'Enter') { processWeb(); } }); });