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

@@ -19,6 +19,7 @@ import FaqTable from '#/views/ai/documentCollection/FaqTable.vue';
import ImportKnowledgeDocFile from '#/views/ai/documentCollection/ImportKnowledgeDocFile.vue';
import KnowledgeSearch from '#/views/ai/documentCollection/KnowledgeSearch.vue';
import KnowledgeSearchConfig from '#/views/ai/documentCollection/KnowledgeSearchConfig.vue';
import KnowledgeShareManagement from '#/views/ai/documentCollection/KnowledgeShareManagement.vue';
const route = useRoute();
const router = useRouter();
@@ -73,8 +74,13 @@ const syncNavTitle = (title: string) => {
};
const resolveDefaultMenu = (collectionType: string, menuKey: string) => {
const faqMenus = new Set(['config', 'faqList', 'knowledgeSearch']);
const documentMenus = new Set(['config', 'documentList', 'knowledgeSearch']);
const faqMenus = new Set(['config', 'faqList', 'knowledgeSearch', 'share']);
const documentMenus = new Set([
'config',
'documentList',
'knowledgeSearch',
'share',
]);
const fallbackMenu = collectionType === 'FAQ' ? 'faqList' : 'documentList';
if (!menuKey) {
@@ -119,6 +125,7 @@ const categoryData = computed(() => {
name: $t('documentCollection.knowledgeRetrieval'),
},
{ key: 'config', name: $t('documentCollection.config') },
{ key: 'share', name: '分享' },
];
}
return [
@@ -128,6 +135,7 @@ const categoryData = computed(() => {
name: $t('documentCollection.knowledgeRetrieval'),
},
{ key: 'config', name: $t('documentCollection.config') },
{ key: 'share', name: '分享' },
];
});
const headerButtons = [
@@ -257,6 +265,13 @@ const backDoc = () => {
@reload="getKnowledge"
/>
</div>
<div v-if="selectedCategory === 'share'">
<KnowledgeShareManagement
:knowledge-id="String(knowledgeId)"
:collection-type="knowledgeInfo.collectionType || 'DOCUMENT'"
:manageable="canManageCurrentKnowledge"
/>
</div>
</div>
</div>
</div>