Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export const systemResourceKnowledgeRoutes: RouteRecordRaw[] = [
{
path: 'dictionary',
name: 'system-resource-knowledge-dictionary',
component: () => import('@/views/knowledge-detail/dictionary/index.vue'),
component: () => import('@/views/knowledge-detail/termbase/index.vue'),
meta: { title: '自定义分词', order: 30 },
},
],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export const systemSharedKnowledgeRoutes: RouteRecordRaw[] = [
{
path: 'dictionary',
name: 'system-shared-knowledge-dictionary',
component: () => import('@/views/knowledge-detail/dictionary/index.vue'),
component: () => import('@/views/knowledge-detail/termbase/index.vue'),
meta: { title: '自定义分词', order: 30 },
},
],
Expand Down
2 changes: 1 addition & 1 deletion ui/src/router/admin/workspace/modules/knowledge-shared.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export const sharedKnowledgeRoutes: RouteRecordRaw[] = [
{
path: 'dictionary',
name: 'workspace-shared-knowledge-dictionary',
component: () => import('@/views/knowledge-detail/dictionary/index.vue'),
component: () => import('@/views/knowledge-detail/termbase/index.vue'),
meta: { title: '自定义分词', order: 30 },
},
],
Expand Down
2 changes: 1 addition & 1 deletion ui/src/router/admin/workspace/modules/knowledge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ export const knowledgeRoutes: RouteRecordRaw[] = [
{
path: 'dictionary',
name: 'workspace-knowledge-dictionary',
component: () => import('@/views/knowledge-detail/dictionary/index.vue'),
component: () => import('@/views/knowledge-detail/termbase/index.vue'),
meta: { title: '自定义分词', order: 30 },
},
],
Expand Down
5 changes: 3 additions & 2 deletions ui/src/views/VIEW_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@
| `knowledge-detail/` | 四范围知识库详情、菜单与上下文 |
| `knowledge-detail/library/document/`、`tags/` | 文档及标签维护 |
| `knowledge-detail/library/image/` | 图片占位页 |
| `knowledge-detail/recall-test/`、`question/`、`dictionary/` | 检索优化占位页 |
| `knowledge-detail/recall-test/`、`question/` | 检索优化占位页 |
| `knowledge-detail/termbase/` | 知识库自定义分词维护 |
| `knowledge-detail/chat-user/`、`external-retrieval/` | 对话授权与外部检索配置 |
| `knowledge-detail/setting/base/`、`document-strategy/`、`scheduled-sync/` | 基础设置、文档策略、定时同步与日志 |
| `knowledge-detail/workflow-transform/` | 非工作流知识库转换说明与确认 |
Expand Down Expand Up @@ -99,7 +100,7 @@

`knowledge-detail/context.ts` 仅通过 `provideKnowledgeDetailContext` 和
`useKnowledgeDetailContext` 公开详情、更新能力、ID、来源导航及完整 API。
`resourceApi.knowledge / scheduledSync / document / tags / chatUser / externalRetrieval` 按当前范围响应式读取,无需 `.value`,
`resourceApi.knowledge / scheduledSync / document / tags / termbase / chatUser / externalRetrieval` 按当前范围响应式读取,无需 `.value`,
不要在 setup 时解构具体 API。`workflow` 当前仅普通 Workspace 提供,其他范围不回退。
共有查询方法必填,部分范围缺失的方法可选调用;未发请求时不提示成功、不关闭、不刷新或修改快照,loading 正常清理。
不增加查询/维护双入口、接口别名或专属 Context hook,也不以方法存在性新增操作显隐规则。
Expand Down
17 changes: 16 additions & 1 deletion ui/src/views/knowledge-detail/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ import TagsApi from '@/api/admin/workspace/knowledge/tags'
import SharedTagsApi from '@/api/admin/workspace/shared/knowledge/tags'
import SystemResourceTagsApi from '@/api/admin/system/resource-management/knowledge/tags'
import SystemSharedTagsApi from '@/api/admin/system/shared-resources/knowledge/tags'
import TermbaseApi from '@/api/admin/workspace/knowledge/termbase'
import SharedTermbaseApi from '@/api/admin/workspace/shared/knowledge/termbase'
import SystemResourceTermbaseApi from '@/api/admin/system/resource-management/knowledge/termbase'
import SystemSharedTermbaseApi from '@/api/admin/system/shared-resources/knowledge/termbase'
import WorkflowApi from '@/api/admin/workspace/knowledge/workflow'
import ScheduledSyncApi from '@/api/admin/workspace/knowledge/scheduled-sync'
import SharedScheduledSyncApi from '@/api/admin/workspace/shared/knowledge/scheduled-sync'
Expand Down Expand Up @@ -46,6 +50,9 @@ interface KnowledgeResourceApi {
typeof DocumentApi | typeof SharedDocumentApi | typeof SystemResourceDocumentApi | typeof SystemSharedDocumentApi
>
readonly tags: OptionalApiMethods<typeof TagsApi | typeof SharedTagsApi | typeof SystemResourceTagsApi | typeof SystemSharedTagsApi>
readonly termbase: OptionalApiMethods<
typeof TermbaseApi | typeof SharedTermbaseApi | typeof SystemResourceTermbaseApi | typeof SystemSharedTermbaseApi
>
readonly knowledge: typeof KnowledgeApi | typeof SharedKnowledgeApi | typeof SystemResourceKnowledgeApi | typeof SystemSharedKnowledgeApi
readonly scheduledSync: OptionalApiMethods<
typeof ScheduledSyncApi | typeof SharedScheduledSyncApi | typeof SystemResourceScheduledSyncApi | typeof SystemSharedScheduledSyncApi
Expand Down Expand Up @@ -73,6 +80,7 @@ const resourceConfigs = {
externalRetrieval: ExternalRetrievalApi,
document: DocumentApi,
tags: TagsApi,
termbase: TermbaseApi,
workflow: WorkflowApi,
},
listRouteName: 'workspace-knowledge-list',
Expand All @@ -85,6 +93,7 @@ const resourceConfigs = {
externalRetrieval: SharedExternalRetrievalApi,
document: SharedDocumentApi,
tags: SharedTagsApi,
termbase: SharedTermbaseApi,
},
listRouteName: 'workspace-knowledge-list',
},
Expand All @@ -96,6 +105,7 @@ const resourceConfigs = {
externalRetrieval: SystemResourceExternalRetrievalApi,
document: SystemResourceDocumentApi,
tags: SystemResourceTagsApi,
termbase: SystemResourceTermbaseApi,
},
listRouteName: 'system-resource-knowledge',
},
Expand All @@ -107,6 +117,7 @@ const resourceConfigs = {
externalRetrieval: SystemSharedExternalRetrievalApi,
document: SystemSharedDocumentApi,
tags: SystemSharedTagsApi,
termbase: SystemSharedTermbaseApi,
},
listRouteName: 'system-shared-knowledge',
},
Expand Down Expand Up @@ -147,6 +158,9 @@ function createKnowledgeDetailContext(state: KnowledgeDetailState): KnowledgeDet
get tags() {
return resourceConfig.value.resourceApi.tags
},
get termbase() {
return resourceConfig.value.resourceApi.termbase
},
get knowledge() {
return resourceConfig.value.resourceApi.knowledge
},
Expand Down Expand Up @@ -201,10 +215,11 @@ type ScopedResourceApi<Scope extends ResourceScope> = {
}

type ScopedKnowledgeDetailContext<Scope extends ResourceScope> = Omit<KnowledgeDetailContext, 'resourceApi'> & {
resourceApi: Omit<ScopedResourceApi<Scope>, 'scheduledSync' | 'tags' | 'document' | 'chatUser' | 'externalRetrieval'> & {
resourceApi: Omit<ScopedResourceApi<Scope>, 'scheduledSync' | 'tags' | 'termbase' | 'document' | 'chatUser' | 'externalRetrieval'> & {
readonly chatUser: OptionalApiMethods<(typeof resourceConfigs)[Scope]['resourceApi']['chatUser']>
readonly scheduledSync: OptionalApiMethods<(typeof resourceConfigs)[Scope]['resourceApi']['scheduledSync']>
readonly tags: OptionalApiMethods<(typeof resourceConfigs)[Scope]['resourceApi']['tags']>
readonly termbase: OptionalApiMethods<(typeof resourceConfigs)[Scope]['resourceApi']['termbase']>
readonly document: OptionalApiMethods<(typeof resourceConfigs)[Scope]['resourceApi']['document']>
readonly externalRetrieval: OptionalApiMethods<(typeof resourceConfigs)[Scope]['resourceApi']['externalRetrieval']>
}
Expand Down
10 changes: 0 additions & 10 deletions ui/src/views/knowledge-detail/dictionary/index.vue

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<script setup lang="ts">
import { computed, ref } from 'vue'
import { MsgSuccess } from '@/utils/message'
import { useKnowledgeDetailContext } from '@/views/knowledge-detail/context'

defineOptions({ name: 'ButtonCreateTermbase' })

const props = defineProps<{ knowledgeId: string }>()
const emit = defineEmits<{ refresh: [] }>()
const { resourceApi } = useKnowledgeDetailContext()

const visible = ref(false)
const loading = ref(false)
const content = ref('')
const termbases = computed(() =>
content.value
.split('\n')
.map((item) => item.trim())
.filter(Boolean),
)

function handleOpenCreateTermbase() {
visible.value = true
}

function handleCreateTermbase() {
if (loading.value || !termbases.value.length) return

loading.value = true
return (
resourceApi.termbase.postTermbases?.(props.knowledgeId, termbases.value).then(() => {
MsgSuccess('创建成功')
visible.value = false
emit('refresh')
}) ?? Promise.resolve()
)
.catch(() => {
// 请求层统一提示错误,保留输入内容以便修正后重试。
})
.finally(() => {
loading.value = false
})
}

function resetData() {
content.value = ''
}
</script>

<template>
<!-- 创建词语 -->
<el-button type="primary" @click="handleOpenCreateTermbase">
<MkIcon name="icon_add_outlined" />
<span>创建词语</span>
</el-button>
<MkDialog v-model="visible" title="创建词语" @closed="resetData">
<el-form @submit.prevent>
<el-input v-model="content" type="textarea" :rows="7" placeholder="请输入需要保留的专业术语/专属词汇,一行一个,支持输入多个" />
</el-form>
<template #footer>
<!-- 取消创建词语 -->
<el-button plain :disabled="loading" @click="visible = false">取消</el-button>
<!-- 提交创建词语 -->
<el-button type="primary" :loading="loading" :disabled="!termbases.length" @click="handleCreateTermbase">创建</el-button>
</template>
</MkDialog>
</template>
Loading
Loading