feat: 收口知识库分享链路

- 新增 shareKey 单参数 URL 分享页与失效页

- 新增知识库分享后端鉴权、审计与迁移脚本

- 在访问令牌中增加知识库分享授权入口
This commit is contained in:
2026-04-13 14:44:31 +08:00
parent 8cfe5400fe
commit 31a755a8bc
57 changed files with 5158 additions and 143 deletions

View File

@@ -20,6 +20,7 @@ import {
import { api } from '#/api/request';
import documentIcon from '#/assets/ai/knowledge/document.svg';
import PageData from '#/components/page/PageData.vue';
import { buildKnowledgePath } from '#/views/ai/documentCollection/share-path';
const props = defineProps({
knowledgeId: {
@@ -30,6 +31,14 @@ const props = defineProps({
type: Boolean,
default: true,
},
requestClient: {
type: Object as any,
default: () => api,
},
endpointPrefix: {
type: String,
default: '',
},
});
const emits = defineEmits(['viewDoc']);
defineExpose({
@@ -44,8 +53,11 @@ const handleView = (row: any) => {
emits('viewDoc', row.id);
};
const handleDownload = async (row: any) => {
const blob = await api.download(
`/api/v1/document/download?documentId=${row.id}`,
const blob = await props.requestClient.download(
buildKnowledgePath(
props.endpointPrefix,
`/api/v1/document/download?documentId=${row.id}`,
),
);
downloadFileFromBlob({
fileName: row.title || 'document',
@@ -62,12 +74,17 @@ const handleDelete = (row: any) => {
cancelButtonText: $t('button.cancel'),
type: 'warning',
}).then(() => {
api.post('/api/v1/document/removeDoc', { id: row.id }).then((res) => {
if (res.errorCode === 0) {
ElMessage.success($t('message.deleteOkMessage'));
pageDataRef.value.setQuery({ id: props.knowledgeId });
}
});
props.requestClient
.post(
buildKnowledgePath(props.endpointPrefix, '/api/v1/document/removeDoc'),
{ id: row.id },
)
.then((res: any) => {
if (res.errorCode === 0) {
ElMessage.success($t('message.deleteOkMessage'));
pageDataRef.value.setQuery({ id: props.knowledgeId });
}
});
// 删除逻辑
});
};
@@ -75,9 +92,12 @@ const handleDelete = (row: any) => {
<template>
<PageData
page-url="/api/v1/document/documentList"
:page-url="
buildKnowledgePath(props.endpointPrefix, '/api/v1/document/documentList')
"
ref="pageDataRef"
:page-size="10"
:request-client="props.requestClient"
:extra-query-params="{
id: props.knowledgeId,
sort: 'desc',