fix(kb): 完善知识库入库和重建索引

This commit is contained in:
2026-06-08 23:45:34 +08:00
parent d8cd95e590
commit 2b5093040d
9 changed files with 355 additions and 9 deletions

View File

@@ -15,6 +15,8 @@
var sourceTable = document.getElementById("knowledgeSourceTable");
var documentFileInput = document.getElementById("knowledgeDocumentFile");
var uploadDropzone = document.getElementById("knowledgeUploadDropzone");
var rebuildButton = document.getElementById("knowledgeRebuildIndexButton");
var rebuildStatus = document.getElementById("knowledgeRebuildStatus");
function csrfToken() {
var cookie = document.cookie.split("; ").find(function (item) {
@@ -68,6 +70,17 @@
return response.json();
}
async function rebuildIndex() {
var response = await fetch(page.getAttribute("data-rebuild-url"), {
method: "POST",
headers: { "X-CSRFToken": csrfToken() },
});
if (!response.ok) {
throw new Error("法规索引重建失败。");
}
return response.json();
}
function renderResults(payload) {
if (!results) {
return;
@@ -196,6 +209,59 @@
});
}
async function handleRebuild(trigger) {
if (!page.getAttribute("data-rebuild-url")) {
return;
}
var originalText = trigger ? trigger.textContent : "";
if (trigger) {
trigger.disabled = true;
trigger.textContent = "入库中";
}
if (rebuildButton && trigger !== rebuildButton) {
rebuildButton.disabled = true;
}
if (rebuildStatus) {
rebuildStatus.textContent = "正在重建法规 RAG 索引...";
}
try {
var payload = await rebuildIndex();
if (rebuildStatus) {
rebuildStatus.textContent = "重建完成,入库片段 " + (payload.chunk_count || 0) + " 个。";
}
window.setTimeout(function () {
window.location.reload();
}, 600);
} catch (error) {
if (rebuildStatus) {
rebuildStatus.textContent = error.message || "法规索引重建失败。";
}
if (trigger) {
trigger.disabled = false;
trigger.textContent = originalText;
}
if (rebuildButton) {
rebuildButton.disabled = false;
}
}
}
if (rebuildButton) {
rebuildButton.addEventListener("click", function () {
handleRebuild(rebuildButton);
});
}
if (sourceTable) {
sourceTable.addEventListener("click", function (event) {
var button = event.target.closest("[data-source-action='index']");
if (!button) {
return;
}
handleRebuild(button);
});
}
if (searchForm && queryInput) {
searchForm.addEventListener("submit", async function (event) {
event.preventDefault();