// API基础URL const API_BASE_URL = 'http://localhost:8000'; // 初始化页面 document.addEventListener('DOMContentLoaded', function() { loadKbList(); setupEventListeners(); }); // 设置事件监听器 function setupEventListeners() { // 添加知识库按钮 document.getElementById('add-kb-btn').addEventListener('click', showKbModal); // 上传文件按钮 document.getElementById('upload-file-btn').addEventListener('click', showFileModal); // 知识库选择器变化 document.getElementById('kb-selector').addEventListener('change', function() { loadFileList(this.value); }); } // 加载知识库列表 async function loadKbList() { try { const response = await axios.get(`${API_BASE_URL}/kb`); const kbList = response.data; const tbody = document.getElementById('kb-table-body'); tbody.innerHTML = ''; const kbSelector = document.getElementById('kb-selector'); kbSelector.innerHTML = ''; kbList.forEach(kb => { // 填充知识库表格 const row = document.createElement('tr'); row.innerHTML = ` ${kb.id} ${kb.name} ${kb.description || '-'} ${new Date(kb.create_time).toLocaleString()} `; tbody.appendChild(row); // 填充知识库选择器 const option = document.createElement('option'); option.value = kb.id; option.textContent = kb.name; kbSelector.appendChild(option); }); // 添加编辑和删除按钮的事件 document.querySelectorAll('.edit-kb').forEach(btn => { btn.addEventListener('click', function() { showKbModal(this.getAttribute('data-id')); }); }); document.querySelectorAll('.delete-kb').forEach(btn => { btn.addEventListener('click', function() { deleteKb(this.getAttribute('data-id')); }); }); } catch (error) { console.error('加载知识库列表失败:', error); alert('加载知识库列表失败'); } } // 加载文件列表 async function loadFileList(kbId) { if (!kbId) return; try { const response = await axios.get(`${API_BASE_URL}/kb_files?kb_id=${kbId}`); const fileList = response.data; const tbody = document.getElementById('file-table-body'); tbody.innerHTML = ''; fileList.forEach(file => { const row = document.createElement('tr'); row.innerHTML = ` ${file.id} ${file.file_name} ${formatFileSize(file.file_size)} ${file.file_type} ${getFileStatusText(file.state)} ${new Date(file.create_time).toLocaleString()} `; tbody.appendChild(row); }); // 添加删除按钮的事件 document.querySelectorAll('.delete-file').forEach(btn => { btn.addEventListener('click', function() { deleteFile(this.getAttribute('data-id')); }); }); } catch (error) { console.error('加载文件列表失败:', error); alert('加载文件列表失败'); } } // 辅助函数:格式化文件大小 function formatFileSize(bytes) { if (bytes === 0) return '0 Bytes'; const k = 1024; const sizes = ['Bytes', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(k)); return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; } // 辅助函数:获取文件状态文本 function getFileStatusText(state) { switch (state) { case 0: return '待处理'; case 1: return '已处理'; case 2: return '处理失败'; default: return '未知状态'; } } // 显示知识库模态框 function showKbModal(kbId = null) { // 实现知识库添加/编辑模态框逻辑 } // 显示文件上传模态框 function showFileModal() { // 实现文件上传模态框逻辑 } // 删除知识库 async function deleteKb(kbId) { if (!confirm('确定要删除这个知识库吗?')) return; try { await axios.delete(`${API_BASE_URL}/kb/${kbId}`); alert('删除成功'); loadKbList(); } catch (error) { console.error('删除知识库失败:', error); alert('删除知识库失败'); } } // 删除文件 async function deleteFile(fileId) { if (!confirm('确定要删除这个文件吗?')) return; try { await axios.delete(`${API_BASE_URL}/kb_files/${fileId}`); alert('删除成功'); const kbId = document.getElementById('kb-selector').value; if (kbId) loadFileList(kbId); } catch (error) { console.error('删除文件失败:', error); alert('删除文件失败'); } }