From 8fae29f41504a51ae6665c1ed66f1d690e7bd57c Mon Sep 17 00:00:00 2001 From: "xinxin.wu" Date: Tue, 20 Oct 2026 10:17:28 +0800 Subject: [PATCH] feat: questions related paragraph --- ui/src/api/API_README.md | 2 + .../resource-management/knowledge/document.ts | 7 +- .../shared-resources/knowledge/document.ts | 7 +- .../api/admin/workspace/knowledge/document.ts | 7 +- .../AssociateProblemParagraphDialog.vue | 267 ++++++++++++++++++ .../components/ProblemDetailDrawer.vue | 6 +- .../views/knowledge-detail/question/index.vue | 30 +- 7 files changed, 313 insertions(+), 13 deletions(-) create mode 100644 ui/src/views/knowledge-detail/question/components/AssociateProblemParagraphDialog.vue diff --git a/ui/src/api/API_README.md b/ui/src/api/API_README.md index 83bd4520ddd..0e310e5f54d 100644 --- a/ui/src/api/API_README.md +++ b/ui/src/api/API_README.md @@ -469,6 +469,8 @@ System/飞书扩展及文件 ID 导入、策略协议需对应部署支持, 文档分页使用 ParamsPage/ResponsePage,名称/创建者/任务/启用/命中/标签筛选支持组合。 图片与文档共用 Document API 的 `getDocumentPage` 列表接口及响应结构,图片列表额外传入查询参数 `resource_type: 'image'`,不单独封装图片列表接口。 +不分页选项复用 `getAllDocuments(knowledgeId, { resource_type })`,类型为 `document` 或 `image`,返回 `DocumentItem[]`; +工作空间、System 资源管理及 System 共享使用相同参数,关联分段弹窗据此切换左侧资源列表。 批量删除提交 `{ id_list, resource_type }`,图片传 `image`,普通文档默认传 `document`; 服务端按知识库和资源类型校验整批 ID。 批量向量化提交 `{ id_list, state_list, resource_type }`;图片同样传 `image`,普通文档默认传 `document`。 diff --git a/ui/src/api/admin/system/resource-management/knowledge/document.ts b/ui/src/api/admin/system/resource-management/knowledge/document.ts index dc6f76ee8b5..80813ced395 100644 --- a/ui/src/api/admin/system/resource-management/knowledge/document.ts +++ b/ui/src/api/admin/system/resource-management/knowledge/document.ts @@ -22,8 +22,11 @@ import type { const getPrefix = (knowledgeId: string) => `/system/resource/knowledge/${knowledgeId}/document` -/** 获取知识库不分页的文档选项。 */ -const getAllDocuments = (knowledgeId: string) => get(getPrefix(knowledgeId)) +/** + * 获取知识库不分页的文档或图片选项。 + * TODO:联调 resource_type=document/image 筛选及图片缩略图字段 meta.source_file_id。 + */ +const getAllDocuments = (knowledgeId: string, query?: { resource_type: DocumentResourceType }) => get(getPrefix(knowledgeId), query) /** 获取文档分页列表,支持名称和创建者筛选。 */ const getDocumentPage = (knowledgeId: string, page: ParamsPage, query?: Dict) => diff --git a/ui/src/api/admin/system/shared-resources/knowledge/document.ts b/ui/src/api/admin/system/shared-resources/knowledge/document.ts index a8bc32f7158..7d2ceebba2c 100644 --- a/ui/src/api/admin/system/shared-resources/knowledge/document.ts +++ b/ui/src/api/admin/system/shared-resources/knowledge/document.ts @@ -22,8 +22,11 @@ import type { const getPrefix = (knowledgeId: string) => `/system/shared/knowledge/${knowledgeId}/document` -/** 获取知识库不分页的文档选项。 */ -const getAllDocuments = (knowledgeId: string) => get(getPrefix(knowledgeId)) +/** + * 获取知识库不分页的文档或图片选项。 + * TODO:联调 resource_type=document/image 筛选及图片缩略图字段 meta.source_file_id。 + */ +const getAllDocuments = (knowledgeId: string, query?: { resource_type: DocumentResourceType }) => get(getPrefix(knowledgeId), query) /** 获取文档分页列表,支持名称和创建者筛选。 */ const getDocumentPage = (knowledgeId: string, page: ParamsPage, query?: Dict) => diff --git a/ui/src/api/admin/workspace/knowledge/document.ts b/ui/src/api/admin/workspace/knowledge/document.ts index 1c813e9f15b..747776de878 100644 --- a/ui/src/api/admin/workspace/knowledge/document.ts +++ b/ui/src/api/admin/workspace/knowledge/document.ts @@ -23,8 +23,11 @@ import { getWorkspaceId } from '@/utils/resource-context' const getPrefix = (knowledgeId: string) => `/workspace/${getWorkspaceId()}/knowledge/${knowledgeId}/document` -/** 获取知识库不分页的文档选项。 */ -const getAllDocuments = (knowledgeId: string) => get(getPrefix(knowledgeId)) +/** + * 获取知识库不分页的文档或图片选项。 + * TODO:联调 resource_type=document/image 筛选及图片缩略图字段 meta.source_file_id。 + */ +const getAllDocuments = (knowledgeId: string, query?: { resource_type: DocumentResourceType }) => get(getPrefix(knowledgeId), query) /** 获取文档分页列表,支持名称和创建者筛选。 */ const getDocumentPage = (knowledgeId: string, page: ParamsPage, query?: Dict) => diff --git a/ui/src/views/knowledge-detail/question/components/AssociateProblemParagraphDialog.vue b/ui/src/views/knowledge-detail/question/components/AssociateProblemParagraphDialog.vue new file mode 100644 index 00000000000..67889f3e15d --- /dev/null +++ b/ui/src/views/knowledge-detail/question/components/AssociateProblemParagraphDialog.vue @@ -0,0 +1,267 @@ + + + diff --git a/ui/src/views/knowledge-detail/question/components/ProblemDetailDrawer.vue b/ui/src/views/knowledge-detail/question/components/ProblemDetailDrawer.vue index c1b8add7437..d0039564cdb 100644 --- a/ui/src/views/knowledge-detail/question/components/ProblemDetailDrawer.vue +++ b/ui/src/views/knowledge-detail/question/components/ProblemDetailDrawer.vue @@ -11,7 +11,7 @@ import { getFileIconUrl } from '@/utils/icon' defineOptions({ name: 'ProblemDetailDrawer' }) const problem = defineModel({ required: true }) defineProps<{ hasPrevious: boolean; hasNext: boolean }>() -const emit = defineEmits<{ previous: []; next: []; refresh: []; closed: [] }>() +const emit = defineEmits<{ previous: []; next: []; refresh: []; closed: []; associate: [] }>() const { knowledgeId, resourceApi } = useKnowledgeDetailContext() const { resourceApi: documentResourceApi } = useDocumentDetailContext() const visible = ref(true) @@ -139,8 +139,8 @@ watch(