feat(knowledge): 新增知识库创建、删除功能并优化知识库列表和详情页面

- 新增知识库创建和删除接口
- 实现知识库创建、删除功能
- 优化知识库列表页面,增加删除按钮
- 更新知识库详情页面,支持修改功能- 修复知识库更新接口,改为 POST 方法
This commit is contained in:
陈昱达
2025-04-11 10:24:36 +08:00
parent ea4d91fddf
commit 44969c5bff
5 changed files with 127 additions and 63 deletions

View File

@@ -21,7 +21,22 @@ export function getDatasetById(params) {
export function datasetUpdate(data) {
return request({
url: getUrl('/datasets/update'),
method: 'get',
method: 'post',
data
})
}
// 知识库新增
export function datasetCreate(data) {
return request({
url: getUrl('/datasets/create'),
method: 'post',
data
})
}
// 知识库删除
export function datasetDelete(data) {
return request({
url: getUrl(`/datasetsEx/delete?id=${data.id}`),
method: 'post',
})
}

View File

@@ -48,6 +48,14 @@ service.interceptors.response.use(
response => {
const res = response.data
endLoading()
if(!res.content){
Message({
message: res.message,
type: 'error',
duration: 5 * 500
})
return Promise.reject(res)
}
if (response.request.responseType == 'blob' || response.request.responseType == 'Blob') {
return response.data
}

View File

@@ -2,103 +2,122 @@
<div class='container index-container'>
<el-card shadow="hover">
<div slot="header" class="clearfix">
<h3>新增知识库</h3>
<h3>{{$route.query.datasetId ? '修改' : '新增'}}知识库</h3>
</div>
<el-row >
<el-col :span='21' :offset='1'>
<el-form :model="model" ref="model" label-width="100px">
<el-form-item label="知识库名称:" prop="knowledgeName">
<el-input></el-input>
<el-form :model="model" ref="model" label-width="120px" :rules='rules'>
<el-form-item label="知识库名称:" prop="name">
<el-input v-model='model.name'></el-input>
</el-form-item>
<el-form-item label="描述(可选)" prop="knowledgeName" requried>
<el-input type='textarea'></el-input>
<el-form-item label="描述(可选)" prop="description" requried>
<el-input type='textarea' v-model='model.description'></el-input>
</el-form-item>
<el-form-item label="分段模式:" prop="knowledgeName" requried>
<el-radio-group>
<el-radio label="1">通用分段模式</el-radio>
<el-radio label="1">Q&A分段模式</el-radio>
<el-form-item label="分段模式:" prop="segmentedMode" requried>
<el-radio-group v-model='model.segmentedMode'>
<el-radio :label="0">通用分段模式</el-radio>
<el-radio :label="1">Q&A分段模式</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
</el-col>
<el-col :span='24' class='text-center'>
<el-button type='primary' size='medium' @click='save'>创建</el-button>
<el-button type='primary' size='medium' @click='save'>{{$route.query.datasetId ? '保存' : '创建'}}</el-button>
<el-button size='medium' @click='$router.go(-1)'>取消 </el-button>
<el-button size='medium' @click='jumpKnowledgeList' v-if='infoDialogVisible'>返回知识库列表</el-button>
<el-button size='medium' @click='jumpKnowledgeDetail' v-if='infoDialogVisible'>查看知识库详情 </el-button>
</el-col>
</el-row>
</el-card>
<!-- <el-dialog title="知识库操作成功" :visible.sync="infoDialogVisible" width="50%"></el-dialog>-->
</div>
</template>
<script>
import 'nprogress/nprogress.css' // progress bar style
import renderLoading from '@/components/RenderLoading/loading/index'
import NProgress from 'nprogress'
import { getDatasetById,datasetUpdate,datasetCreate } from '@/api/generatedApi/index'
export default {
name: 'knowledgeForm',
data() {
return {}
},
props: {
knowledgeForm: {
type: Object,
default: () => {
return {
knowledgeName:''
infoDialogVisible:false,
model:{
description:'',
name:'',
segmentedMode:null,
id:null
},
rules: {
name: [
{ required: true, message: '请输入知识库名称', trigger: 'blur' },
],
}
}
},
knowledgeId: {
type: String
}
},
props: {},
watch: {},
components: {},
filters: {},
methods: {
jumpKnowledgeList(){
this.$router.push({
path: '/knowledge/list',
})
},
jumpKnowledgeDetail(item){
this.$router.push({
path: '/knowledge/detail',
query:{
datasetId:this.model.id
}
})
},
getDetail (){
let { datasetId } = this.$route.query
if(!datasetId) return
getDatasetById({ id:datasetId }).then(res=>{
this.model = {
...res.content.content
}
})
},
save(){
// 配置进度条参数
// NProgress.configure({
// showSpinner: false, // 隐藏转圈圈
// })
// setTimeout(()=>{
//
// NProgress.done();
// },5000)
// let loadingDom = document.getElementById('knowledgeFormDrawer').querySelector('.el-drawer')
// console.log(loadingDom)
// let loading = renderLoading.service({
// target:loadingDom,
// })
// loading.close()
this.$refs.model.validate(valid => {
if (!valid) {
return false
}
(!this.$route.query.datasetId?datasetCreate:datasetUpdate)(this.model).then(res=>{
// 添加保存成功的提示
this.$message.success('保存成功');
this.model.id = res.content.content.id
this.infoDialogVisible = true
// this.$router.go(-1)
})
})
},
},
created() {
},
mounted() {
this.getDetail()
},
computed: {
// model 获取 knowledgeForm
model() {
return this.knowledgeForm
}
}
}
</script>

View File

@@ -93,10 +93,14 @@ export default {
},
// 保存知识库标题
saveKnowledgeName(){
let { datasetId } = this.$route.query
this.knowledgeName = this.copyKnowledgeName
// 调用update接口
datasetUpdate({
name:this.knowledgeName,
description:this.knowledgeDesc,
segmentedMode:this.segmentedMode,
id:datasetId,
}).then(res=>{
this.editKnowledge = false
})
@@ -108,19 +112,21 @@ export default {
// 跳转去上传文件
jumpAddKnowledge() {
let { datasetId } = this.$route.query
this.$router.push({
path: '/knowledge/detail/create',
query: {
datasetId: ''
datasetId: datasetId
}
})
},
// 跳转到知识库编辑
jumpEditKnowledge(){
let { datasetId } = this.$route.query
this.$router.push({
path: '/knowledge/knowledge-create',
query: {
datasetId: ''
datasetId: datasetId
}
})
},

View File

@@ -39,8 +39,8 @@
</div>
<div class="item-bottom mt20">
<el-button type="text" class="fs14" @click="knowLedgeDetail(item)">查看详情</el-button>
<el-button type="text" class="fs14">修改</el-button>
<el-button type="text" class="fs14 danger">删除</el-button>
<el-button type="text" class="fs14" @click='createdKnowLedge(item)'>修改</el-button>
<el-button type="text" class="fs14 danger" @click='deleteKnowLedge(item)'>删除</el-button>
</div>
</el-card>
</div>
@@ -49,7 +49,7 @@
</div>
</template>
<script>
import { docManageDataset } from '@/api/generatedApi/index'
import { docManageDataset,datasetDelete } from '@/api/generatedApi/index'
import knowledgeForm from '@/views/knowledge/detail/components/knowledgeForm.vue'
export default {
@@ -82,11 +82,11 @@ export default {
this.datasetList = res.content.content
})
},
createdKnowLedge() {
createdKnowLedge(item) {
this.$router.push({
path: '/knowledge/knowledge-create',
query:{
datasetId: ''
datasetId: item?item.id:null
}
})
},
@@ -97,6 +97,22 @@ export default {
datasetId: item.id
}
})
},
deleteKnowLedge(item) {
this.$confirm('此操作将永久删除该知识库, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
datasetDelete({id: item.id}).then(res => {
this.$message({
type: 'success',
message: '删除成功!'
})
this.getList()
})
})
}
},
created() {},