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) { export function datasetUpdate(data) {
return request({ return request({
url: getUrl('/datasets/update'), url: getUrl('/datasets/update'),
method: 'get', method: 'post',
data 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 => { response => {
const res = response.data const res = response.data
endLoading() 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') { if (response.request.responseType == 'blob' || response.request.responseType == 'Blob') {
return response.data return response.data
} }

View File

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

View File

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

View File

@@ -39,8 +39,8 @@
</div> </div>
<div class="item-bottom mt20"> <div class="item-bottom mt20">
<el-button type="text" class="fs14" @click="knowLedgeDetail(item)">查看详情</el-button> <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" @click='createdKnowLedge(item)'>修改</el-button>
<el-button type="text" class="fs14 danger">删除</el-button> <el-button type="text" class="fs14 danger" @click='deleteKnowLedge(item)'>删除</el-button>
</div> </div>
</el-card> </el-card>
</div> </div>
@@ -49,7 +49,7 @@
</div> </div>
</template> </template>
<script> <script>
import { docManageDataset } from '@/api/generatedApi/index' import { docManageDataset,datasetDelete } from '@/api/generatedApi/index'
import knowledgeForm from '@/views/knowledge/detail/components/knowledgeForm.vue' import knowledgeForm from '@/views/knowledge/detail/components/knowledgeForm.vue'
export default { export default {
@@ -82,11 +82,11 @@ export default {
this.datasetList = res.content.content this.datasetList = res.content.content
}) })
}, },
createdKnowLedge() { createdKnowLedge(item) {
this.$router.push({ this.$router.push({
path: '/knowledge/knowledge-create', path: '/knowledge/knowledge-create',
query:{ query:{
datasetId: '' datasetId: item?item.id:null
} }
}) })
}, },
@@ -97,6 +97,22 @@ export default {
datasetId: item.id 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() {}, created() {},