Skip to content

Commit 9409159

Browse files
committed
【功能新增】AI:知识库与文档的列表
1 parent 3ae486c commit 9409159

File tree

6 files changed

+626
-0
lines changed

6 files changed

+626
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import request from '@/config/axios'
2+
3+
// AI 知识库文档 VO
4+
export interface KnowledgeDocumentVO {
5+
id: number // 编号
6+
knowledgeId: number // 知识库编号
7+
name: string // 文档名称
8+
contentLength: number // 字符数
9+
tokens: number // token 数
10+
segmentMaxTokens: number // 分片最大 token 数
11+
retrievalCount: number // 召回次数
12+
status: number // 是否启用
13+
}
14+
15+
// AI 知识库文档 API
16+
export const KnowledgeDocumentApi = {
17+
// 查询知识库文档分页
18+
getKnowledgeDocumentPage: async (params: any) => {
19+
return await request.get({ url: `/ai/knowledge/document/page`, params })
20+
},
21+
22+
// 查询知识库文档详情
23+
getKnowledgeDocument: async (id: number) => {
24+
return await request.get({ url: `/ai/knowledge/document/get?id=` + id })
25+
},
26+
27+
// 新增知识库文档
28+
createKnowledgeDocument: async (data: KnowledgeDocumentVO) => {
29+
return await request.post({ url: `/ai/knowledge/document/create`, data })
30+
},
31+
32+
// // 修改AI 知识库文档
33+
// updateKnowledgeDocument: async (data: KnowledgeDocumentVO) => {
34+
// return await request.put({ url: `/ai/knowledge/document/update`, data })
35+
// },
36+
37+
// 删除知识库文档
38+
deleteKnowledgeDocument: async (id: number) => {
39+
return await request.delete({ url: `/ai/knowledge/document/delete?id=` + id })
40+
}
41+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import request from '@/config/axios'
2+
3+
// AI 知识库 VO
4+
export interface KnowledgeVO {
5+
id: number // 编号
6+
name: string // 知识库名称
7+
description: string // 知识库描述
8+
embeddingModelId: number // 嵌入模型编号,高质量模式时维护
9+
topK: number // topK
10+
similarityThreshold: number // 相似度阈值
11+
}
12+
13+
// AI 知识库 API
14+
export const KnowledgeApi = {
15+
// 查询知识库分页
16+
getKnowledgePage: async (params: any) => {
17+
return await request.get({ url: `/ai/knowledge/page`, params })
18+
},
19+
20+
// 查询知识库详情
21+
getKnowledge: async (id: number) => {
22+
return await request.get({ url: `/ai/knowledge/get?id=` + id })
23+
},
24+
25+
// 新增知识库
26+
createKnowledge: async (data: KnowledgeVO) => {
27+
return await request.post({ url: `/ai/knowledge/create`, data })
28+
},
29+
30+
// 修改知识库
31+
updateKnowledge: async (data: KnowledgeVO) => {
32+
return await request.put({ url: `/ai/knowledge/update`, data })
33+
},
34+
35+
// 删除知识库
36+
deleteKnowledge: async (id: number) => {
37+
return await request.delete({ url: `/ai/knowledge/delete?id=` + id })
38+
}
39+
}

src/router/modules/remaining.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,16 @@ const remainingRouter: AppRouteRecordRaw[] = [
620620
icon: 'ep:home-filled',
621621
noCache: false
622622
}
623+
},
624+
{
625+
path: 'console/knowledge/document',
626+
component: () => import('@/views/ai/knowledge/document/index.vue'),
627+
name: 'AiKnowledgeDocument',
628+
meta: {
629+
title: '知识库文档',
630+
icon: 'ep:document',
631+
noCache: false
632+
}
623633
}
624634
]
625635
},
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
<template>
2+
<ContentWrap>
3+
<!-- 搜索工作栏 -->
4+
<el-form
5+
class="-mb-15px"
6+
:model="queryParams"
7+
ref="queryFormRef"
8+
:inline="true"
9+
label-width="68px"
10+
>
11+
<el-form-item label="文件名称" prop="name">
12+
<el-input
13+
v-model="queryParams.name"
14+
placeholder="请输入文件名称"
15+
clearable
16+
@keyup.enter="handleQuery"
17+
class="!w-240px"
18+
/>
19+
</el-form-item>
20+
<el-form-item label="是否启用" prop="status">
21+
<el-select
22+
v-model="queryParams.status"
23+
placeholder="请选择是否启用"
24+
clearable
25+
class="!w-240px"
26+
>
27+
<el-option
28+
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
29+
:key="dict.value"
30+
:label="dict.label"
31+
:value="dict.value"
32+
/>
33+
</el-select>
34+
</el-form-item>
35+
<el-form-item>
36+
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
37+
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
38+
<el-button
39+
type="primary"
40+
plain
41+
@click="openForm('create')"
42+
v-hasPermi="['ai:knowledge:create']"
43+
>
44+
<Icon icon="ep:plus" class="mr-5px" /> 新增
45+
</el-button>
46+
</el-form-item>
47+
</el-form>
48+
</ContentWrap>
49+
50+
<!-- 列表 -->
51+
<ContentWrap>
52+
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
53+
<el-table-column label="编号" align="center" prop="id" />
54+
<el-table-column label="文件名称" align="center" prop="name" />
55+
<el-table-column label="字符数" align="center" prop="contentLength" />
56+
<el-table-column label="Token 数" align="center" prop="tokens" />
57+
<el-table-column label="分片最大 Token 数" align="center" prop="segmentMaxTokens" />
58+
<el-table-column label="召回次数" align="center" prop="retrievalCount" />
59+
<el-table-column label="是否启用" align="center" prop="status">
60+
<template #default="scope">
61+
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
62+
</template>
63+
</el-table-column>
64+
<el-table-column
65+
label="上传时间"
66+
align="center"
67+
prop="createTime"
68+
:formatter="dateFormatter"
69+
width="180px"
70+
/>
71+
<el-table-column label="操作" align="center" min-width="120px">
72+
<template #default="scope">
73+
<el-button
74+
link
75+
type="primary"
76+
@click="openForm('update', scope.row.id)"
77+
v-hasPermi="['ai:knowledge:update']"
78+
>
79+
编辑
80+
</el-button>
81+
<el-button
82+
link
83+
type="danger"
84+
@click="handleDelete(scope.row.id)"
85+
v-hasPermi="['ai:knowledge:delete']"
86+
>
87+
删除
88+
</el-button>
89+
</template>
90+
</el-table-column>
91+
</el-table>
92+
<!-- 分页 -->
93+
<Pagination
94+
:total="total"
95+
v-model:page="queryParams.pageNo"
96+
v-model:limit="queryParams.pageSize"
97+
@pagination="getList"
98+
/>
99+
</ContentWrap>
100+
101+
<!-- 表单弹窗:添加/修改 -->
102+
<!-- <KnowledgeDocumentForm ref="formRef" @success="getList" /> -->
103+
</template>
104+
105+
<script setup lang="ts">
106+
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
107+
import { dateFormatter } from '@/utils/formatTime'
108+
import { KnowledgeDocumentApi, KnowledgeDocumentVO } from '@/api/ai/knowledge/document'
109+
import { useRoute } from 'vue-router'
110+
// import KnowledgeDocumentForm from './KnowledgeDocumentForm.vue'
111+
112+
/** AI 知识库文档 列表 */
113+
defineOptions({ name: 'KnowledgeDocument' })
114+
115+
const message = useMessage() // 消息弹窗
116+
const { t } = useI18n() // 国际化
117+
const route = useRoute() // 路由
118+
119+
const loading = ref(true) // 列表的加载中
120+
const list = ref<KnowledgeDocumentVO[]>([]) // 列表的数据
121+
const total = ref(0) // 列表的总页数
122+
const queryParams = reactive({
123+
pageNo: 1,
124+
pageSize: 10,
125+
name: undefined,
126+
status: undefined,
127+
knowledgeId: undefined
128+
})
129+
const queryFormRef = ref() // 搜索的表单
130+
131+
/** 查询列表 */
132+
const getList = async () => {
133+
loading.value = true
134+
try {
135+
const data = await KnowledgeDocumentApi.getKnowledgeDocumentPage(queryParams)
136+
list.value = data.list
137+
total.value = data.total
138+
} finally {
139+
loading.value = false
140+
}
141+
}
142+
143+
/** 搜索按钮操作 */
144+
const handleQuery = () => {
145+
queryParams.pageNo = 1
146+
getList()
147+
}
148+
149+
/** 重置按钮操作 */
150+
const resetQuery = () => {
151+
queryFormRef.value.resetFields()
152+
handleQuery()
153+
}
154+
155+
/** 添加/修改操作 */
156+
const formRef = ref()
157+
const openForm = (type: string, id?: number) => {
158+
formRef.value.open(type, id)
159+
}
160+
161+
/** 删除按钮操作 */
162+
const handleDelete = async (id: number) => {
163+
try {
164+
// 删除的二次确认
165+
await message.delConfirm()
166+
// 发起删除
167+
await KnowledgeDocumentApi.deleteKnowledgeDocument(id)
168+
message.success(t('common.delSuccess'))
169+
// 刷新列表
170+
await getList()
171+
} catch {}
172+
}
173+
174+
/** 初始化 **/
175+
onMounted(() => {
176+
// 从路由参数中获取知识库 ID
177+
if (route.query.knowledgeId) {
178+
queryParams.knowledgeId = route.query.knowledgeId as any
179+
}
180+
getList()
181+
})
182+
</script>

0 commit comments

Comments
 (0)