mirror of
http://112.124.100.131/ebiz-ai/ebiz-ai-knowledge-manage.git
synced 2025-12-11 03:46:50 +08:00
feat(knowledge): 更新知识库模块
- 添加知识库图标上传功能 - 优化知识库列表和详情页面的展示 - 新增智能体编辑功能 - 重构知识库表单组件
This commit is contained in:
@@ -77,5 +77,23 @@ const agentEdit = data => {
|
|||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* 编辑智能体
|
||||||
|
* @param {Object} data - 请求参数, 默认为空对象
|
||||||
|
* @returns {Promise} - 返回 Promise 对象
|
||||||
|
*/
|
||||||
|
const getAccessToken = data => {
|
||||||
|
return request({
|
||||||
|
url: getUrl('/third/access_token'),
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export { agentList, agentEdit, agentDelete, agentAdd, agentDetail }
|
export {
|
||||||
|
agentList,
|
||||||
|
agentEdit,
|
||||||
|
agentDelete,
|
||||||
|
agentAdd,
|
||||||
|
agentDetail,
|
||||||
|
getAccessToken
|
||||||
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
@confirm="confirm"
|
@confirm="confirm"
|
||||||
width="600px"
|
width="600px"
|
||||||
|
append-to-body
|
||||||
>
|
>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<cropper-canvas style="width: 100%;flex:1" cover image>
|
<cropper-canvas style="width: 100%;flex:1" cover image>
|
||||||
@@ -94,8 +95,30 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {},
|
props: {
|
||||||
watch: {},
|
list: {
|
||||||
|
type: Array,
|
||||||
|
default: () => []
|
||||||
|
},
|
||||||
|
url: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
url: {
|
||||||
|
handler(val) {
|
||||||
|
this.fileList = []
|
||||||
|
if (val) {
|
||||||
|
this.fileList.push({
|
||||||
|
url: val
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
immediate: true,
|
||||||
|
deep: true
|
||||||
|
}
|
||||||
|
},
|
||||||
components: {},
|
components: {},
|
||||||
filters: {},
|
filters: {},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -118,8 +141,9 @@ export default {
|
|||||||
// 文件生成 bolburl
|
// 文件生成 bolburl
|
||||||
const blobUrl = URL.createObjectURL(res)
|
const blobUrl = URL.createObjectURL(res)
|
||||||
res.url = blobUrl
|
res.url = blobUrl
|
||||||
|
this.fileList = []
|
||||||
this.fileList.push(res)
|
this.fileList.push(res)
|
||||||
this.$emit('getFiles', this.fileList)
|
this.$emit('getFiles', [res])
|
||||||
this.visible = false
|
this.visible = false
|
||||||
})
|
})
|
||||||
// 根据canvas 生成一个图片
|
// 根据canvas 生成一个图片
|
||||||
|
|||||||
@@ -251,7 +251,9 @@ export default [
|
|||||||
component: () => import('@/views/intelligent-agent/index.vue'),
|
component: () => import('@/views/intelligent-agent/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: 'AI智能体',
|
title: 'AI智能体',
|
||||||
icon: 'icon-notebook'
|
icon: 'icon-notebook',
|
||||||
|
accessToken: '',
|
||||||
|
refreshToken: ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
import {
|
import {
|
||||||
agentList,
|
agentList,
|
||||||
agentDelete,
|
agentDelete,
|
||||||
agentDetail
|
agentDetail,
|
||||||
|
getAccessToken
|
||||||
} from '@/api/intelligent-agent/list'
|
} from '@/api/intelligent-agent/list'
|
||||||
import Info from '@/views/intelligent-agent/components/info'
|
import Info from '@/views/intelligent-agent/components/info'
|
||||||
import agent from '@/views/agent'
|
import agent from '@/views/agent'
|
||||||
@@ -69,7 +70,7 @@ export default {
|
|||||||
this.page += 1
|
this.page += 1
|
||||||
this.fetchAgentList({
|
this.fetchAgentList({
|
||||||
page: this.page,
|
page: this.page,
|
||||||
pageSize: 3
|
pageSize: this.pageSize
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@@ -136,10 +137,17 @@ export default {
|
|||||||
},
|
},
|
||||||
async handleClickAgent(item) {
|
async handleClickAgent(item) {
|
||||||
const { content } = await agentDetail(item.id)
|
const { content } = await agentDetail(item.id)
|
||||||
|
|
||||||
|
const thirdContent = await getAccessToken()
|
||||||
let agent = content.content
|
let agent = content.content
|
||||||
this.agentConfig.title = agent.appName + ' - 智能体详情'
|
this.agentConfig.title = agent.appName + ' - 智能体详情'
|
||||||
this.agentConfig.agent = agent
|
this.agentConfig.agent = agent
|
||||||
this.agentConfig.visible = true
|
// 传递新的token
|
||||||
|
this.$route.meta.refreshToken = thirdContent.content.content.refreshToken
|
||||||
|
this.$route.meta.accessToken = thirdContent.content.content.accessToken
|
||||||
|
setTimeout(() => {
|
||||||
|
this.agentConfig.visible = true
|
||||||
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
// 创建智能体弹窗确认
|
// 创建智能体弹窗确认
|
||||||
|
|||||||
@@ -39,39 +39,8 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item label="图标" prop="segmentedMode">
|
<el-form-item label="图标" prop="image" required>
|
||||||
<el-upload
|
<r-cropper @getFiles="getFiles" :url="model.image"></r-cropper>
|
||||||
action="#"
|
|
||||||
list-type="picture-card"
|
|
||||||
:file-list="uploadList"
|
|
||||||
:auto-upload="false"
|
|
||||||
:limit="1"
|
|
||||||
>
|
|
||||||
<i slot="default" class="el-icon-plus"></i>
|
|
||||||
<div slot="file" slot-scope="{ file }">
|
|
||||||
<img
|
|
||||||
class="el-upload-list__item-thumbnail"
|
|
||||||
:src="file.url"
|
|
||||||
alt=""
|
|
||||||
/>
|
|
||||||
<span class="el-upload-list__item-actions">
|
|
||||||
<span
|
|
||||||
v-if="!disabled"
|
|
||||||
class="el-upload-list__item-delete"
|
|
||||||
@click="handleDownload(file)"
|
|
||||||
>
|
|
||||||
<i class="el-icon-download"></i>
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-if="!disabled"
|
|
||||||
class="el-upload-list__item-delete"
|
|
||||||
@click="handleRemove(file)"
|
|
||||||
>
|
|
||||||
<i class="el-icon-delete"></i>
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</el-upload>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -80,7 +49,7 @@
|
|||||||
<el-button
|
<el-button
|
||||||
size="medium"
|
size="medium"
|
||||||
v-if="!infoDialogVisible"
|
v-if="!infoDialogVisible"
|
||||||
@click="$emit('update:visible', false)"
|
@click="resetForm(), $emit('update:visible', false)"
|
||||||
>取消</el-button
|
>取消</el-button
|
||||||
>
|
>
|
||||||
<el-button
|
<el-button
|
||||||
@@ -114,7 +83,8 @@ import 'nprogress/nprogress.css' // progress bar style
|
|||||||
import {
|
import {
|
||||||
datasetCreate,
|
datasetCreate,
|
||||||
datasetUpdate,
|
datasetUpdate,
|
||||||
getDatasetById
|
getDatasetById,
|
||||||
|
uploadImage
|
||||||
} from '@/api/generatedApi'
|
} from '@/api/generatedApi'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -122,6 +92,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
uploadList: [],
|
uploadList: [],
|
||||||
|
imageList: [],
|
||||||
dialogImageUrl: '',
|
dialogImageUrl: '',
|
||||||
dialogVisible: false,
|
dialogVisible: false,
|
||||||
disabled: false,
|
disabled: false,
|
||||||
@@ -132,12 +103,15 @@ export default {
|
|||||||
description: '',
|
description: '',
|
||||||
name: '',
|
name: '',
|
||||||
segmentedMode: 0,
|
segmentedMode: 0,
|
||||||
id: null
|
id: null,
|
||||||
|
imageType: 'upload-img',
|
||||||
|
image: null
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
name: [
|
name: [
|
||||||
{ required: true, message: '请输入知识库名称', trigger: 'blur' }
|
{ required: true, message: '请输入知识库名称', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
|
image: [{ required: true, message: '请上传知识库图标' }],
|
||||||
segmentedMode: [{ required: true, message: '请选择分段模式' }]
|
segmentedMode: [{ required: true, message: '请选择分段模式' }]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -157,23 +131,42 @@ export default {
|
|||||||
handler(val) {
|
handler(val) {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
this.$emit('update:visible', val)
|
this.$emit('update:visible', val)
|
||||||
|
|
||||||
|
if (this.datasetId) {
|
||||||
|
this.getDetail()
|
||||||
|
} else {
|
||||||
|
this.model = {
|
||||||
|
description: '',
|
||||||
|
name: '',
|
||||||
|
segmentedMode: 0,
|
||||||
|
visibleRange: 0,
|
||||||
|
userIds: [],
|
||||||
|
image: null,
|
||||||
|
imageType: 'upload-img',
|
||||||
|
id: null
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
immediate: true
|
immediate: true
|
||||||
},
|
|
||||||
|
|
||||||
datasetId(val) {
|
|
||||||
if (val) {
|
|
||||||
this.getDetail()
|
|
||||||
} else {
|
|
||||||
this.model = {
|
|
||||||
description: '',
|
|
||||||
name: '',
|
|
||||||
segmentedMode: 0,
|
|
||||||
id: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// datasetId(val) {
|
||||||
|
// if (val) {
|
||||||
|
// this.getDetail()
|
||||||
|
// } else {
|
||||||
|
// this.model = {
|
||||||
|
// description: '',
|
||||||
|
// name: '',
|
||||||
|
// segmentedMode: 0,
|
||||||
|
// visibleRange: 0,
|
||||||
|
// userIds: [],
|
||||||
|
// image: null,
|
||||||
|
// imageType: 'upload-img',
|
||||||
|
// id: null
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
},
|
},
|
||||||
components: {},
|
components: {},
|
||||||
filters: {
|
filters: {
|
||||||
@@ -189,17 +182,17 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleRemove(file) {
|
getFiles(file) {
|
||||||
console.log(file)
|
let formData = new FormData()
|
||||||
},
|
formData.append('file', file[0])
|
||||||
handlePictureCardPreview(file) {
|
uploadImage(formData).then(res => {
|
||||||
this.dialogImageUrl = file.url
|
if (res) {
|
||||||
this.dialogVisible = true
|
this.$set(this.model, 'image', res.content.content.imageUrl)
|
||||||
},
|
}
|
||||||
handleDownload(file) {
|
})
|
||||||
console.log(file)
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
handleRemove(file) {},
|
||||||
jumpKnowledgeList() {
|
jumpKnowledgeList() {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: '/knowledge/list'
|
path: '/knowledge/list'
|
||||||
@@ -222,19 +215,37 @@ export default {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
resetForm() {
|
||||||
|
this.model = {
|
||||||
|
description: '',
|
||||||
|
name: '',
|
||||||
|
segmentedMode: 0,
|
||||||
|
visibleRange: 0,
|
||||||
|
userIds: [],
|
||||||
|
image: null,
|
||||||
|
imageType: 'upload-img',
|
||||||
|
id: null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
save() {
|
save() {
|
||||||
this.$refs.model.validate(valid => {
|
this.$refs.model.validate(valid => {
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.model.visibleRange = 0
|
||||||
;(!this.datasetId ? datasetCreate : datasetUpdate)(this.model).then(
|
;(!this.datasetId ? datasetCreate : datasetUpdate)(this.model).then(
|
||||||
res => {
|
res => {
|
||||||
if (res) {
|
if (res) {
|
||||||
// 添加保存成功的提示
|
// 添加保存成功的提示
|
||||||
this.$message.success('保存成功')
|
this.$message.success('保存成功')
|
||||||
this.model.id = res.content.content.id
|
// this.model.id = res.content.content.id
|
||||||
// this.infoDialogVisible = true
|
// this.infoDialogVisible = true
|
||||||
this.$emit('update:visible', false)
|
this.$emit('update:visible', false)
|
||||||
|
|
||||||
|
this.resetForm()
|
||||||
|
|
||||||
// this.$router.go(-1)
|
// this.$router.go(-1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class=" render-container">
|
<div class=" render-container">
|
||||||
<div class="clearfix flex align-items-c justify-content-b ">
|
<div class="clearfix flex align-items-c justify-content-b ">
|
||||||
<img :src="knowledgePng_1" class="header-icon" />
|
<img
|
||||||
|
:src="knowledgeImage ? knowledgeImage : knowledgePng_1"
|
||||||
|
class="header-icon"
|
||||||
|
/>
|
||||||
<div class="ml20" style="flex:1">
|
<div class="ml20" style="flex:1">
|
||||||
<div class="flex align-items-c">
|
<div class="flex align-items-c">
|
||||||
<div class="mr20 header" v-if="!editKnowledge">
|
<div class="mr20 header" v-if="!editKnowledge">
|
||||||
{{ knowledgeName }}
|
{{ knowledgeName ? knowledgeName : '' }}
|
||||||
</div>
|
</div>
|
||||||
<el-input
|
<el-input
|
||||||
class="mr20 w400"
|
class="mr20 w400"
|
||||||
@@ -272,13 +275,14 @@ export default {
|
|||||||
copyKnowledgeName: '监管',
|
copyKnowledgeName: '监管',
|
||||||
knowledgeDesc: '监管',
|
knowledgeDesc: '监管',
|
||||||
segmentedMode: '分段模式',
|
segmentedMode: '分段模式',
|
||||||
|
knowledgeImage: '',
|
||||||
list: [],
|
list: [],
|
||||||
page: 1,
|
page: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
total: 0,
|
total: 0,
|
||||||
hasList: false,
|
hasList: false,
|
||||||
documentSourceOptions,
|
documentSourceOptions,
|
||||||
descriptions: { data: [{ content: '' }] },
|
descriptions: { data: [{ content: '' }], dataset: { knowledgeName: '' } },
|
||||||
activeSegmentTab: 'content',
|
activeSegmentTab: 'content',
|
||||||
activeSegments: [0],
|
activeSegments: [0],
|
||||||
activeSegment: 0,
|
activeSegment: 0,
|
||||||
@@ -367,6 +371,7 @@ export default {
|
|||||||
this.knowledgeName = res.content.content.name
|
this.knowledgeName = res.content.content.name
|
||||||
this.knowledgeDesc = res.content.content.description
|
this.knowledgeDesc = res.content.content.description
|
||||||
this.segmentedMode = res.content.content.segmentedMode
|
this.segmentedMode = res.content.content.segmentedMode
|
||||||
|
this.knowledgeImage = res.content.content.image
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,11 @@
|
|||||||
>
|
>
|
||||||
<div class="dataset-header">
|
<div class="dataset-header">
|
||||||
<div class="folder-content">
|
<div class="folder-content">
|
||||||
<img :src="getKnowledgeImage(index)" alt="" class="folder" />
|
<img
|
||||||
|
:src="item.image ? item.image : getKnowledgeImage(index)"
|
||||||
|
alt=""
|
||||||
|
class="folder"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="dataset-body" style="flex:1">
|
<div class="dataset-body" style="flex:1">
|
||||||
<h4 class="dataset-title">{{ item.name }}</h4>
|
<h4 class="dataset-title">{{ item.name }}</h4>
|
||||||
|
|||||||
Reference in New Issue
Block a user