|
|
|
@ -1,139 +1,318 @@
|
|
|
|
|
// API基础URL
|
|
|
|
|
const API_BASE_URL = 'http://localhost:8000';
|
|
|
|
|
|
|
|
|
|
// 初始化页面
|
|
|
|
|
// 增强错误处理
|
|
|
|
|
window.onerror = function(message, source, lineno, colno, error) {
|
|
|
|
|
console.error('全局错误:', {message, source, lineno, colno, error});
|
|
|
|
|
alert('系统错误: ' + message);
|
|
|
|
|
return true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 修改初始化代码
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
|
|
|
loadKbList();
|
|
|
|
|
setupEventListeners();
|
|
|
|
|
try {
|
|
|
|
|
// 检查API是否可用
|
|
|
|
|
axios.get('/kb')
|
|
|
|
|
.then(response => {
|
|
|
|
|
if (response.status === 200) {
|
|
|
|
|
initApp();
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('API不可用');
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
|
|
|
|
console.error('API检查失败:', error);
|
|
|
|
|
if(error.response) {
|
|
|
|
|
console.log('HTTP状态码:', error.response.status);
|
|
|
|
|
console.log('响应数据:', error.response.data);
|
|
|
|
|
}
|
|
|
|
|
alert(`后端服务异常: ${error.message || '未知错误'}`);
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('初始化异常:', error);
|
|
|
|
|
alert('初始化失败: ' + error.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 设置事件监听器
|
|
|
|
|
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() {
|
|
|
|
|
$(document).ready(function() {
|
|
|
|
|
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 = '<option value="">-- 选择知识库 --</option>';
|
|
|
|
|
initApp();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('初始化失败:', e);
|
|
|
|
|
alert('系统初始化失败: ' + e.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$(function() {
|
|
|
|
|
// 初始化应用
|
|
|
|
|
function initApp() {
|
|
|
|
|
loadKbList();
|
|
|
|
|
|
|
|
|
|
kbList.forEach(kb => {
|
|
|
|
|
// 填充知识库表格
|
|
|
|
|
const row = document.createElement('tr');
|
|
|
|
|
row.innerHTML = `
|
|
|
|
|
<td>${kb.id}</td>
|
|
|
|
|
<td>${kb.name}</td>
|
|
|
|
|
<td>${kb.description || '-'}</td>
|
|
|
|
|
<td>${new Date(kb.create_time).toLocaleString()}</td>
|
|
|
|
|
<td>
|
|
|
|
|
<button class="btn btn-sm btn-outline-primary edit-kb" data-id="${kb.id}">编辑</button>
|
|
|
|
|
<button class="btn btn-sm btn-outline-danger delete-kb" data-id="${kb.id}">删除</button>
|
|
|
|
|
</td>
|
|
|
|
|
`;
|
|
|
|
|
tbody.appendChild(row);
|
|
|
|
|
|
|
|
|
|
// 填充知识库选择器
|
|
|
|
|
const option = document.createElement('option');
|
|
|
|
|
option.value = kb.id;
|
|
|
|
|
option.textContent = kb.name;
|
|
|
|
|
kbSelector.appendChild(option);
|
|
|
|
|
// 绑定事件
|
|
|
|
|
$('#add-kb-btn').click(showKbModal);
|
|
|
|
|
$('#kb-selector').change(function() {
|
|
|
|
|
loadFileList($(this).val());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 添加编辑和删除按钮的事件
|
|
|
|
|
document.querySelectorAll('.edit-kb').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function() {
|
|
|
|
|
showKbModal(this.getAttribute('data-id'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 加载知识库列表
|
|
|
|
|
function loadKbList() {
|
|
|
|
|
$.get(API_BASE_URL + '/kb')
|
|
|
|
|
.done(function(data) {
|
|
|
|
|
const $container = $('#kb-table-body').empty();
|
|
|
|
|
|
|
|
|
|
$.each(data, function(index, kb) {
|
|
|
|
|
$container.append(`
|
|
|
|
|
<tr>
|
|
|
|
|
<td>${kb.id}</td>
|
|
|
|
|
<td>${kb.kb_name}</td>
|
|
|
|
|
<td>${kb.short_name || ''}</td>
|
|
|
|
|
<td>${new Date(kb.create_time).toLocaleString()}</td>
|
|
|
|
|
<td>
|
|
|
|
|
<button class="btn btn-sm btn-primary edit-kb" data-id="${kb.id}">编辑</button>
|
|
|
|
|
<button class="btn btn-sm btn-danger delete-kb" data-id="${kb.id}">删除</button>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
`);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
bindKbActions();
|
|
|
|
|
})
|
|
|
|
|
.fail(function(error) {
|
|
|
|
|
console.error('加载知识库列表失败:', error);
|
|
|
|
|
alert('加载知识库列表失败');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 绑定知识库操作
|
|
|
|
|
function bindKbActions() {
|
|
|
|
|
$(document).on('click', '.edit-kb', function() {
|
|
|
|
|
const kbId = $(this).data('id');
|
|
|
|
|
showKbModal(kbId);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
document.querySelectorAll('.delete-kb').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function() {
|
|
|
|
|
deleteKb(this.getAttribute('data-id'));
|
|
|
|
|
});
|
|
|
|
|
$(document).on('click', '.delete-kb', function() {
|
|
|
|
|
const kbId = $(this).data('id');
|
|
|
|
|
if(confirm('确定要删除这个知识库吗?')) {
|
|
|
|
|
deleteKb(kbId);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 初始化应用
|
|
|
|
|
initApp();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 添加调试日志
|
|
|
|
|
function showKbModal(kbId = null) {
|
|
|
|
|
console.log('显示知识库模态框,ID:', kbId);
|
|
|
|
|
const modal = document.getElementById('kb-modal');
|
|
|
|
|
const form = document.getElementById('kb-form');
|
|
|
|
|
const title = document.getElementById('kb-modal-title');
|
|
|
|
|
|
|
|
|
|
// 重置表单
|
|
|
|
|
form.reset();
|
|
|
|
|
|
|
|
|
|
// 设置标题
|
|
|
|
|
title.textContent = kbId ? '编辑知识库' : '添加知识库';
|
|
|
|
|
|
|
|
|
|
// 如果是编辑模式,加载知识库数据
|
|
|
|
|
if (kbId) {
|
|
|
|
|
axios.get(`${API_BASE_URL}/kb/${kbId}`)
|
|
|
|
|
.then(response => {
|
|
|
|
|
const kb = response.data;
|
|
|
|
|
form.elements['name'].value = kb.name;
|
|
|
|
|
form.elements['description'].value = kb.description || '';
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
|
|
|
|
console.error('加载知识库详情失败:', error);
|
|
|
|
|
alert('加载知识库详情失败');
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 显示模态框
|
|
|
|
|
$(modal).modal('show');
|
|
|
|
|
|
|
|
|
|
// 处理表单提交
|
|
|
|
|
form.onsubmit = async function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
|
|
const formData = {
|
|
|
|
|
name: form.elements['name'].value,
|
|
|
|
|
description: form.elements['description'].value
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
if (kbId) {
|
|
|
|
|
// 更新知识库
|
|
|
|
|
await axios.post(`${API_BASE_URL}/kb/update/${kbId}`, formData);
|
|
|
|
|
alert('更新成功');
|
|
|
|
|
} else {
|
|
|
|
|
// 创建知识库
|
|
|
|
|
await axios.post(`${API_BASE_URL}/kb`, formData);
|
|
|
|
|
alert('添加成功');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 刷新列表并关闭模态框
|
|
|
|
|
loadKbList();
|
|
|
|
|
$(modal).modal('hide');
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('操作失败:', error);
|
|
|
|
|
alert('操作失败');
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 显示文件上传模态框
|
|
|
|
|
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('加载知识库列表失败');
|
|
|
|
|
console.error('删除知识库失败:', error);
|
|
|
|
|
alert('删除知识库失败');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 加载文件列表
|
|
|
|
|
async function loadFileList(kbId) {
|
|
|
|
|
if (!kbId) return;
|
|
|
|
|
// 删除文件
|
|
|
|
|
async function deleteFile(fileId) {
|
|
|
|
|
if (!confirm('确定要删除这个文件吗?')) 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 = `
|
|
|
|
|
<td>${file.id}</td>
|
|
|
|
|
<td>${file.file_name}</td>
|
|
|
|
|
<td>${formatFileSize(file.file_size)}</td>
|
|
|
|
|
<td>${file.file_type}</td>
|
|
|
|
|
<td>${getFileStatusText(file.state)}</td>
|
|
|
|
|
<td>${new Date(file.create_time).toLocaleString()}</td>
|
|
|
|
|
<td>
|
|
|
|
|
<button class="btn btn-sm btn-outline-danger delete-file" data-id="${file.id}">删除</button>
|
|
|
|
|
</td>
|
|
|
|
|
`;
|
|
|
|
|
tbody.appendChild(row);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 添加删除按钮的事件
|
|
|
|
|
document.querySelectorAll('.delete-file').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function() {
|
|
|
|
|
deleteFile(this.getAttribute('data-id'));
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
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('加载文件列表失败');
|
|
|
|
|
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];
|
|
|
|
|
// 在initApp()函数前添加以下代码
|
|
|
|
|
function loadKbList() {
|
|
|
|
|
axios.get(`${API_BASE_URL}/kb`)
|
|
|
|
|
.then(response => {
|
|
|
|
|
const container = document.getElementById('kb-table-body');
|
|
|
|
|
container.innerHTML = '';
|
|
|
|
|
|
|
|
|
|
response.data.forEach(kb => {
|
|
|
|
|
const row = document.createElement('tr');
|
|
|
|
|
row.innerHTML = `
|
|
|
|
|
<td>${kb.id}</td>
|
|
|
|
|
<td>${kb.kb_name}</td>
|
|
|
|
|
<td>${kb.short_name || ''}</td>
|
|
|
|
|
<td>${new Date(kb.create_time).toLocaleString()}</td>
|
|
|
|
|
<td>
|
|
|
|
|
<button class="btn btn-sm btn-primary edit-kb" data-id="${kb.id}">编辑</button>
|
|
|
|
|
<button class="btn btn-sm btn-danger delete-kb" data-id="${kb.id}">删除</button>
|
|
|
|
|
</td>
|
|
|
|
|
`;
|
|
|
|
|
container.appendChild(row);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
bindKbActions();
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
|
|
|
|
console.error('加载知识库列表失败:', error);
|
|
|
|
|
alert('加载知识库列表失败: ' + error.message);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 辅助函数:获取文件状态文本
|
|
|
|
|
function getFileStatusText(state) {
|
|
|
|
|
switch (state) {
|
|
|
|
|
case 0: return '待处理';
|
|
|
|
|
case 1: return '已处理';
|
|
|
|
|
case 2: return '处理失败';
|
|
|
|
|
default: return '未知状态';
|
|
|
|
|
}
|
|
|
|
|
function loadFileList(kbId) {
|
|
|
|
|
// 实现文件列表加载逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 显示知识库模态框
|
|
|
|
|
function showKbModal(kbId = null) {
|
|
|
|
|
// 实现知识库添加/编辑模态框逻辑
|
|
|
|
|
function bindKbActions() {
|
|
|
|
|
// 绑定编辑按钮
|
|
|
|
|
document.querySelectorAll('.edit-kb').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
const kbId = this.dataset.id;
|
|
|
|
|
showKbModal(kbId);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 绑定删除按钮
|
|
|
|
|
document.querySelectorAll('.delete-kb').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
const kbId = this.dataset.id;
|
|
|
|
|
if(confirm('确定要删除这个知识库吗?')) {
|
|
|
|
|
deleteKb(kbId);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
// 确保initApp函数已定义
|
|
|
|
|
function initApp() {
|
|
|
|
|
loadKbList();
|
|
|
|
|
|
|
|
|
|
// 重新绑定所有事件监听器
|
|
|
|
|
$('#add-kb-btn').click(function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
showKbModal();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('#kb-selector').change(function() {
|
|
|
|
|
loadFileList($(this).val());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
console.log('应用初始化完成');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 使用jQuery的文档就绪函数
|
|
|
|
|
$(function() {
|
|
|
|
|
try {
|
|
|
|
|
initApp();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('初始化失败:', e);
|
|
|
|
|
alert('系统初始化失败: ' + e.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function showKbModal(kbId) {
|
|
|
|
|
// 确保kbId是数字或字符串
|
|
|
|
|
const id = typeof kbId === 'object' ? kbId.id : kbId;
|
|
|
|
|
|
|
|
|
|
if (!id) {
|
|
|
|
|
// 新建知识库模式
|
|
|
|
|
$('#kb-name').val('');
|
|
|
|
|
$('#kb-desc').val('');
|
|
|
|
|
$('#kb-modal').modal('show');
|
|
|
|
|
$('#kb-modal-title').text('新建知识库');
|
|
|
|
|
$('#kb-submit-btn').text('创建');
|
|
|
|
|
currentEditKbId = null;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$.ajax({
|
|
|
|
|
url: API_BASE_URL + '/kb/' + id,
|
|
|
|
|
type: 'GET',
|
|
|
|
|
success: function(response) {
|
|
|
|
|
if (response) {
|
|
|
|
|
$('#kb-name').val(response.kb_name);
|
|
|
|
|
$('#kb-desc').val(response.short_name);
|
|
|
|
|
$('#kb-modal').modal('show');
|
|
|
|
|
$('#kb-modal-title').text('编辑知识库');
|
|
|
|
|
$('#kb-submit-btn').text('更新');
|
|
|
|
|
currentEditKbId = id;
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
error: function(xhr) {
|
|
|
|
|
console.error('加载知识库详情失败:', xhr.responseText);
|
|
|
|
|
alert('加载知识库详情失败: ' + (xhr.responseJSON?.message || xhr.statusText));
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 显示文件上传模态框
|
|
|
|
@ -168,4 +347,115 @@ async function deleteFile(fileId) {
|
|
|
|
|
console.error('删除文件失败:', error);
|
|
|
|
|
alert('删除文件失败');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 在initApp()函数前添加以下代码
|
|
|
|
|
function loadKbList() {
|
|
|
|
|
axios.get(`${API_BASE_URL}/kb`)
|
|
|
|
|
.then(response => {
|
|
|
|
|
const container = document.getElementById('kb-table-body');
|
|
|
|
|
container.innerHTML = '';
|
|
|
|
|
|
|
|
|
|
response.data.forEach(kb => {
|
|
|
|
|
const row = document.createElement('tr');
|
|
|
|
|
row.innerHTML = `
|
|
|
|
|
<td>${kb.id}</td>
|
|
|
|
|
<td>${kb.kb_name}</td>
|
|
|
|
|
<td>${kb.short_name || ''}</td>
|
|
|
|
|
<td>${new Date(kb.create_time).toLocaleString()}</td>
|
|
|
|
|
<td>
|
|
|
|
|
<button class="btn btn-sm btn-primary edit-kb" data-id="${kb.id}">编辑</button>
|
|
|
|
|
<button class="btn btn-sm btn-danger delete-kb" data-id="${kb.id}">删除</button>
|
|
|
|
|
</td>
|
|
|
|
|
`;
|
|
|
|
|
container.appendChild(row);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
bindKbActions();
|
|
|
|
|
})
|
|
|
|
|
.catch(error => {
|
|
|
|
|
console.error('加载知识库列表失败:', error);
|
|
|
|
|
alert('加载知识库列表失败: ' + error.message);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function loadFileList(kbId) {
|
|
|
|
|
// 实现文件列表加载逻辑
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function bindKbActions() {
|
|
|
|
|
// 绑定编辑按钮
|
|
|
|
|
document.querySelectorAll('.edit-kb').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
const kbId = this.dataset.id;
|
|
|
|
|
showKbModal(kbId);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 绑定删除按钮
|
|
|
|
|
document.querySelectorAll('.delete-kb').forEach(btn => {
|
|
|
|
|
btn.addEventListener('click', function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
const kbId = this.dataset.id;
|
|
|
|
|
if(confirm('确定要删除这个知识库吗?')) {
|
|
|
|
|
deleteKb(kbId);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
// 确保initApp函数已定义
|
|
|
|
|
function initApp() {
|
|
|
|
|
loadKbList();
|
|
|
|
|
|
|
|
|
|
// 重新绑定所有事件监听器
|
|
|
|
|
$('#add-kb-btn').click(function(e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
showKbModal();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('#kb-selector').change(function() {
|
|
|
|
|
loadFileList($(this).val());
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
console.log('应用初始化完成');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 使用jQuery的文档就绪函数
|
|
|
|
|
$(function() {
|
|
|
|
|
try {
|
|
|
|
|
initApp();
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.error('初始化失败:', e);
|
|
|
|
|
alert('系统初始化失败: ' + e.message);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function loadKbDetail(kbId) {
|
|
|
|
|
$.ajax({
|
|
|
|
|
url: API_BASE_URL + '/kb/' + kbId,
|
|
|
|
|
type: 'GET',
|
|
|
|
|
success: function(response) {
|
|
|
|
|
if (response) {
|
|
|
|
|
// 填充知识库详情到表单
|
|
|
|
|
$('#kb-name').val(response.kb_name);
|
|
|
|
|
$('#kb-desc').val(response.short_name);
|
|
|
|
|
|
|
|
|
|
// 显示编辑模态框
|
|
|
|
|
$('#kb-modal').modal('show');
|
|
|
|
|
$('#kb-modal-title').text('编辑知识库');
|
|
|
|
|
$('#kb-submit-btn').text('更新');
|
|
|
|
|
|
|
|
|
|
// 存储当前编辑的知识库ID
|
|
|
|
|
currentEditKbId = kbId;
|
|
|
|
|
} else {
|
|
|
|
|
alert('获取知识库详情失败:数据为空');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
error: function(xhr) {
|
|
|
|
|
console.error('加载知识库详情失败:', xhr.responseText);
|
|
|
|
|
alert('加载知识库详情失败: ' + xhr.statusText);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|