You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

461 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 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() {
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);
}
});
$(document).ready(function() {
try {
initApp();
} catch (e) {
console.error('初始化失败:', e);
alert('系统初始化失败: ' + e.message);
}
});
$(function() {
// 初始化应用
function initApp() {
loadKbList();
// 绑定事件
$('#add-kb-btn').click(showKbModal);
$('#kb-selector').change(function() {
loadFileList($(this).val());
});
}
// 加载知识库列表
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).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('删除知识库失败');
}
}
// 删除文件
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('删除文件失败');
}
}
// 在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 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));
}
});
}
// 显示文件上传模态框
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('删除文件失败');
}
}
// 在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);
}
});
}