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

1 month ago
// API基础URL
const API_BASE_URL = 'http://localhost:8000';
1 month ago
// 增强错误处理
window.onerror = function(message, source, lineno, colno, error) {
console.error('全局错误:', {message, source, lineno, colno, error});
alert('系统错误: ' + message);
return true;
};
// 修改初始化代码
1 month ago
document.addEventListener('DOMContentLoaded', function() {
1 month ago
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);
}
1 month ago
});
1 month ago
$(document).ready(function() {
1 month ago
try {
1 month ago
initApp();
} catch (e) {
console.error('初始化失败:', e);
alert('系统初始化失败: ' + e.message);
}
});
$(function() {
// 初始化应用
function initApp() {
loadKbList();
1 month ago
1 month ago
// 绑定事件
$('#add-kb-btn').click(showKbModal);
$('#kb-selector').change(function() {
loadFileList($(this).val());
1 month ago
});
1 month ago
}
// 加载知识库列表
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('加载知识库列表失败');
1 month ago
});
1 month ago
}
// 绑定知识库操作
function bindKbActions() {
$(document).on('click', '.edit-kb', function() {
const kbId = $(this).data('id');
showKbModal(kbId);
1 month ago
});
1 month ago
$(document).on('click', '.delete-kb', function() {
const kbId = $(this).data('id');
if(confirm('确定要删除这个知识库吗?')) {
deleteKb(kbId);
}
1 month ago
});
1 month ago
}
// 初始化应用
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();
1 month ago
} catch (error) {
1 month ago
console.error('删除知识库失败:', error);
alert('删除知识库失败');
1 month ago
}
}
1 month ago
// 删除文件
async function deleteFile(fileId) {
if (!confirm('确定要删除这个文件吗?')) return;
1 month ago
try {
1 month ago
await axios.delete(`${API_BASE_URL}/kb_files/${fileId}`);
alert('删除成功');
const kbId = document.getElementById('kb-selector').value;
if (kbId) loadFileList(kbId);
1 month ago
} catch (error) {
1 month ago
console.error('删除文件失败:', error);
alert('删除文件失败');
1 month ago
}
}
1 month ago
// 在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);
});
1 month ago
}
1 month ago
function loadFileList(kbId) {
// 实现文件列表加载逻辑
1 month ago
}
1 month ago
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));
}
});
1 month ago
}
// 显示文件上传模态框
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('删除文件失败');
}
1 month ago
}
// 在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);
}
});
1 month ago
}