feat: 简化知识库导入——只输入NodeToken,自动获取标题和SpaceID

- admin_knowledge.py: /knowledge/import 改为单条导入,自动获取 title+space_id
- feishu_service.py: 新增 get_node_info() 公开方法
- App.vue: 简化 UI,只保留 NodeToken 输入框和导入按钮
- api.ts: 更新类型定义
This commit is contained in:
2026-07-09 10:13:09 +08:00
parent 76da6dd65a
commit 67048a14e8
4 changed files with 54 additions and 47 deletions

View File

@@ -37,7 +37,7 @@ const chatDetailOpen = ref(false);
const recordTab = ref("chats");
const editingModelId = ref<number | null>(null);
const editingKnowledgeId = ref<number | null>(null);
const batchParentToken = ref("");
const batchNodeToken = ref("");
const batchImporting = ref(false);
const agentDebugging = ref(false);
const agentPreviewMessages = ref<{ role: "user" | "assistant" | "system"; content: string }[]>([
@@ -592,16 +592,20 @@ function resetKnowledgeForm() {
}
async function batchImportKnowledge() {
const parentToken = batchParentToken.value.trim();
if (!parentToken) {
ElMessage.warning("请输入父节点 NodeToken");
const token = batchNodeToken.value.trim();
if (!token) {
ElMessage.warning("请输入 NodeToken");
return;
}
batchImporting.value = true;
try {
const result = await api.importKnowledgeFromSpace({ parent_node_token: parentToken });
ElMessage.success(`导入完成:新增 ${result.imported} 个,跳过 ${result.skipped}`);
batchParentToken.value = "";
const result = await api.importKnowledgeFromSpace({ node_token: token });
if (result.imported > 0) {
ElMessage.success(`导入成功:${result.name}id=${result.id}`);
} else {
ElMessage.info(`该节点已存在:${result.name}id=${result.id}`);
}
batchNodeToken.value = "";
await loadCurrentMenu();
} catch (e: any) {
ElMessage.error(e.message || "导入失败");
@@ -1125,8 +1129,8 @@ function buildChatQuery() {
<el-divider />
<div class="batch-import-row">
<el-input v-model="batchParentToken" placeholder="输入父节点 NodeToken如 wikcnXXX递归导入所有子节点" style="max-width: 400px" />
<el-button type="primary" @click="batchImportKnowledge" :loading="batchImporting">递归导入</el-button>
<el-input v-model="batchNodeToken" placeholder="输入 NodeToken如 wikcnXXX自动获取标题与 SpaceID" style="max-width: 400px" />
<el-button type="primary" @click="batchImportKnowledge" :loading="batchImporting">导入</el-button>
</div>
<el-table :data="knowledge" stripe>
<el-table-column prop="id" label="ID" width="80" />