Skip to content

Commit c2a6b02

Browse files
committed
【功能新增】AI:新增知识库分段的新增
1 parent 45ceacd commit c2a6b02

File tree

5 files changed

+344
-7
lines changed

5 files changed

+344
-7
lines changed

src/api/ai/knowledge/segment/index.ts

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import request from '@/config/axios'
22

3-
// AI 知识库分片 VO
4-
export interface AiKnowledgeSegmentRespVO {
3+
// AI 知识库分段 VO
4+
export interface KnowledgeSegmentVO {
55
id: number // 编号
66
documentId: number // 文档编号
77
knowledgeId: number // 知识库编号
@@ -14,23 +14,41 @@ export interface AiKnowledgeSegmentRespVO {
1414
createTime: number // 创建时间
1515
}
1616

17-
// AI 知识库分片 API
17+
// AI 知识库分段 API
1818
export const KnowledgeSegmentApi = {
19-
// 查询知识库分片分页
19+
// 查询知识库分段分页
2020
getKnowledgeSegmentPage: async (params: any) => {
2121
return await request.get({ url: `/ai/knowledge/segment/page`, params })
2222
},
2323

24-
// 查询知识库分片详情
24+
// 查询知识库分段详情
2525
getKnowledgeSegment: async (id: number) => {
2626
return await request.get({ url: `/ai/knowledge/segment/get?id=` + id })
2727
},
2828

29-
// 删除知识库分片
29+
// 删除知识库分段
3030
deleteKnowledgeSegment: async (id: number) => {
3131
return await request.delete({ url: `/ai/knowledge/segment/delete?id=` + id })
3232
},
3333

34+
// 新增知识库分段
35+
createKnowledgeSegment: async (data: KnowledgeSegmentVO) => {
36+
return await request.post({ url: `/ai/knowledge/segment/create`, data })
37+
},
38+
39+
// 修改知识库分段
40+
updateKnowledgeSegment: async (data: KnowledgeSegmentVO) => {
41+
return await request.put({ url: `/ai/knowledge/segment/update`, data })
42+
},
43+
44+
// 修改知识库分段状态
45+
updateKnowledgeSegmentStatus: async (data: any) => {
46+
return await request.put({
47+
url: `/ai/knowledge/segment/update-status`,
48+
data
49+
})
50+
},
51+
3452
// 切片内容
3553
splitContent: async (url: string, segmentMaxTokens: number) => {
3654
return await request.get({
@@ -47,7 +65,7 @@ export const KnowledgeSegmentApi = {
4765
})
4866
},
4967

50-
// 搜索知识库分片
68+
// 搜索知识库分段
5169
searchKnowledgeSegment: async (params: any) => {
5270
return await request.get({
5371
url: `/ai/knowledge/segment/search`,

src/router/modules/remaining.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,18 @@ const remainingRouter: AppRouteRecordRaw[] = [
667667
hidden: true,
668668
activeMenu: '/ai/knowledge'
669669
}
670+
},
671+
{
672+
path: 'knowledge/segment',
673+
component: () => import('@/views/ai/knowledge/segment/index.vue'),
674+
name: 'AiKnowledgeSegment',
675+
meta: {
676+
title: '知识库分段',
677+
icon: 'ep:tickets',
678+
noCache: true,
679+
hidden: true,
680+
activeMenu: '/ai/knowledge'
681+
}
670682
}
671683
]
672684
},

src/views/ai/knowledge/document/index.vue

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,14 @@
7979
>
8080
编辑
8181
</el-button>
82+
<el-button
83+
link
84+
type="primary"
85+
@click="handleSegment(scope.row.id)"
86+
v-hasPermi="['ai:knowledge:query']"
87+
>
88+
分段
89+
</el-button>
8290
<el-button
8391
link
8492
type="danger"
@@ -203,6 +211,14 @@ const handleStatusChange = async (row: KnowledgeDocumentVO) => {
203211
}
204212
}
205213
214+
/** 跳转到知识库分段页面 */
215+
const handleSegment = (id: number) => {
216+
router.push({
217+
name: 'AiKnowledgeSegment',
218+
query: { documentId: id }
219+
})
220+
}
221+
206222
/** 初始化 **/
207223
onMounted(() => {
208224
// 如果知识库 ID 不存在,显示错误提示并关闭页面
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<template>
2+
<Dialog :title="dialogTitle" v-model="dialogVisible">
3+
<el-form
4+
ref="formRef"
5+
:model="formData"
6+
:rules="formRules"
7+
label-width="100px"
8+
v-loading="formLoading"
9+
>
10+
<el-form-item label="切片内容" prop="content">
11+
<el-input
12+
v-model="formData.content"
13+
type="textarea"
14+
:rows="6"
15+
placeholder="请输入切片内容"
16+
/>
17+
</el-form-item>
18+
</el-form>
19+
<template #footer>
20+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
21+
<el-button @click="dialogVisible = false">取 消</el-button>
22+
</template>
23+
</Dialog>
24+
</template>
25+
<script setup lang="ts">
26+
import { KnowledgeSegmentApi, KnowledgeSegmentVO } from '@/api/ai/knowledge/segment'
27+
28+
/** AI 知识库分段表单 */
29+
defineOptions({ name: 'KnowledgeSegmentForm' })
30+
31+
const { t } = useI18n() // 国际化
32+
const message = useMessage() // 消息弹窗
33+
34+
const dialogVisible = ref(false) // 弹窗的是否展示
35+
const dialogTitle = ref('') // 弹窗的标题
36+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
37+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
38+
const formData = ref({
39+
id: undefined,
40+
documentId: undefined,
41+
content: undefined
42+
})
43+
const formRules = reactive({
44+
content: [{ required: true, message: '切片内容不能为空', trigger: 'blur' }]
45+
})
46+
const formRef = ref() // 表单 Ref
47+
48+
/** 打开弹窗 */
49+
const open = async (type: string, id?: number, documentId?: any) => {
50+
dialogVisible.value = true
51+
dialogTitle.value = t('action.' + type)
52+
formType.value = type
53+
resetForm()
54+
formData.value.documentId = documentId as any
55+
56+
// 修改时,设置数据
57+
if (id) {
58+
formLoading.value = true
59+
try {
60+
formData.value = await KnowledgeSegmentApi.getKnowledgeSegment(id)
61+
} finally {
62+
formLoading.value = false
63+
}
64+
}
65+
}
66+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
67+
68+
/** 提交表单 */
69+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
70+
const submitForm = async () => {
71+
// 校验表单
72+
await formRef.value.validate()
73+
// 提交请求
74+
formLoading.value = true
75+
try {
76+
const data = formData.value as unknown as KnowledgeSegmentVO
77+
if (formType.value === 'create') {
78+
await KnowledgeSegmentApi.createKnowledgeSegment(data)
79+
message.success(t('common.createSuccess'))
80+
} else {
81+
await KnowledgeSegmentApi.updateKnowledgeSegment(data)
82+
message.success(t('common.updateSuccess'))
83+
}
84+
dialogVisible.value = false
85+
// 发送操作成功的事件
86+
emit('success')
87+
} finally {
88+
formLoading.value = false
89+
}
90+
}
91+
92+
/** 重置表单 */
93+
const resetForm = () => {
94+
formData.value = {
95+
id: undefined,
96+
documentId: undefined,
97+
content: undefined
98+
}
99+
formRef.value?.resetFields()
100+
}
101+
</script>

0 commit comments

Comments
 (0)