From c3f24d0ccdecb0ec4843c1cd04d6ed6aa6eaffea Mon Sep 17 00:00:00 2001 From: Nelson <1475262689@qq.com> Date: Thu, 16 Jul 2026 10:39:46 +0800 Subject: [PATCH] feat(admin): add knowledge content preview --- .../components/KnowledgeContentPreview.vue | 180 ++++++++++++++++++ .../components/KnowledgeManagementView.vue | 31 ++- 2 files changed, 201 insertions(+), 10 deletions(-) create mode 100644 ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeContentPreview.vue diff --git a/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeContentPreview.vue b/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeContentPreview.vue new file mode 100644 index 0000000..b4283ff --- /dev/null +++ b/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeContentPreview.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeManagementView.vue b/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeManagementView.vue index 441c441..74fa8c3 100644 --- a/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeManagementView.vue +++ b/ai_knowledge_base_v2/apps/admin-web/src/components/KnowledgeManagementView.vue @@ -3,6 +3,7 @@ import { ElMessage, ElMessageBox } from "element-plus"; import { onMounted, reactive, ref } from "vue"; import { api } from "../services/api"; +import KnowledgeContentPreview from "./KnowledgeContentPreview.vue"; import TableRowActions from "./TableRowActions.vue"; import AdminPagination from "./AdminPagination.vue"; import type { @@ -10,7 +11,6 @@ import type { KnowledgeItem, KnowledgeSyncJob, KnowledgeVersion, - KnowledgeVersionContent, MigrationSummary, } from "../types/api"; @@ -24,7 +24,7 @@ const detailOpen = ref(false); const detail = ref(null); const versions = ref([]); const jobs = ref([]); -const versionContent = ref(null); +const previewVersionId = ref(null); const activeTab = ref("overview"); const selectedRows = ref([]); const editOpen = ref(false); @@ -194,10 +194,12 @@ async function resolveNode() { async function openDetail(item: KnowledgeItem) { detailOpen.value = true; + detail.value = null; activeTab.value = "overview"; - versionContent.value = null; + previewVersionId.value = null; try { - await refreshDetail(item.id); + const refreshedDetail = await refreshDetail(item.id); + previewVersionId.value = refreshedDetail.currentVersion?.id ?? versions.value[0]?.id ?? null; } catch (error) { detailOpen.value = false; ElMessage.error(errorMessage(error, "知识库详情加载失败")); @@ -205,9 +207,13 @@ async function openDetail(item: KnowledgeItem) { } async function refreshDetail(id: number) { - [detail.value, versions.value, jobs.value] = await Promise.all([ + const [nextDetail, nextVersions, nextJobs] = await Promise.all([ api.knowledgeDetail(id), api.knowledgeVersions(id), api.knowledgeSyncJobs(id), ]); + detail.value = nextDetail; + versions.value = nextVersions; + jobs.value = nextJobs; + return nextDetail; } async function sync(item: KnowledgeItem, mode: "review" | "replace") { @@ -358,7 +364,7 @@ async function remove(item: KnowledgeItem) { } async function showVersion(version: KnowledgeVersion) { - versionContent.value = await api.knowledgeVersionContent(version.id); + previewVersionId.value = version.id; activeTab.value = "content"; } @@ -455,7 +461,7 @@ async function confirmAction(