feat(knowledge): 优化知识库文件上传功能

- 添加通用模板上传功能
- 优化上传接口调用逻辑
- 增加上传进度显示和模板下载功能
- 调整预处理结果预览对话框逻辑
- 优化文档详情查看功能
This commit is contained in:
陈昱达
2025-04-14 13:26:15 +08:00
parent 5a239bd794
commit 868598cee2
4 changed files with 69 additions and 50 deletions

View File

@@ -126,3 +126,7 @@ export function updateRuleExtractSplit(data) {
export function uploadFileByCustom(data) {
return getUrl(`/datasetDocumentEx/uploadFileByCustom`, 'jifen')
}
//知识库文件上传-通用
export function uploadFileByTemplate(data) {
return getUrl(`/datasetDocumentEx/uploadFileByTemplate`, 'jifen')
}

View File

@@ -8,18 +8,33 @@
</el-radio-group>
<div class="mt10" v-if="form.radio === '2'">
<el-button type="primary" size="medium" class="fs14">下载知识文件模板</el-button>
<el-button type="primary" size="medium" class="fs14" @click="downloadTemplate">下载知识文件模板</el-button>
</div>
</el-form-item>
<!-- 文件上传-->
<el-form-item label="" required prop="file">
<el-upload drag :action="actionUrl" :headers="headers" class="upload-demo" :on-success="handleUploadSuccess" :show-file-list="false" :data="form">
<el-empty>
<el-upload
drag
:action="form.radio === '1' ? uploadFileByCustom() : uploadFileByTemplate()"
:headers="headers"
class="upload-demo"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:show-file-list="false"
:file-list="fieldList"
:data="{
...form,
beMinerU: form.radio === '2' ? null : form.beMinerU,
beOcr: form.radio === '2' ? null : form.beOcr
}"
>
<el-empty v-if="!uploadLoading">
<template #description>
<p>点击或将文件拖拽到这里上传</p>
<p>支持扩展名.xlsx .doc .docx .pdf .txt...</p>
</template>
</el-empty>
<div v-else v-loading="uploadLoading" :element-loading-text="'文件上传中...'" style="height: 100%"></div>
</el-upload>
</el-form-item>
@@ -55,23 +70,25 @@
</div>
</el-form>
<!-- 添加预处理结果预览对话框 -->
<el-drawer :visible.sync="previewDialogVisible" size="80%" title="预处理结果预览" :before-close="handleClose">
<div style="height:calc(100% - 55px);">
<r-miner-u :documentId="documentId"></r-miner-u>
</div>
</el-drawer>
<!-- &lt;!&ndash; 添加预处理结果预览对话框 &ndash;&gt;-->
<!-- <el-drawer :visible.sync="previewDialogVisible" size="80%" title="预处理结果预览" :before-close="handleClose">-->
<!-- <div style="height:calc(100% - 55px);">-->
<!-- <r-miner-u :documentId="documentId"></r-miner-u>-->
<!-- </div>-->
<!-- </el-drawer>-->
</div>
</template>
<script>
import { uploadFileByCustom } from '@/api/generatedApi/index'
import { uploadFileByCustom, uploadFileByTemplate } from '@/api/generatedApi/index'
export default {
name: 'preprocessing',
data() {
return {
actionUrl: uploadFileByCustom(),
uploadFileByCustom,
uploadFileByTemplate,
uploadLoading: false,
headers: {},
fieldList: [],
form: {
radio: '1',
beMinerU: false,
@@ -87,30 +104,10 @@ export default {
components: {},
filters: {},
methods: {
handleSuccess(response, file, fileList) {
console.log(response, file, fileList)
},
handleError(err, file, fileList) {
console.log(err, file, fileList)
},
beforeUpload(file) {
console.log(file)
return true
},
handleChange(file, fileList) {
console.log(file, fileList)
},
handleRemove(file, fileList) {
console.log(file, fileList)
},
handlePreview(file) {
console.log(file)
},
emitForm() {
this.$emit('getForm', this.$refs.processForm, this.form)
},
handleUploadSuccess(response, file, fileList) {
console.log(response)
downloadTemplate() {},
handleUploadSuccess(response, file) {
this.fieldList = [file]
this.uploadLoading = false
if (response.content.result === '0') {
this.$message({
type: 'success',
@@ -118,12 +115,13 @@ export default {
})
// 如果是预处理
if (this.form.beMinerU) {
this.previewDialogVisible = true
this.$emit('beMinerU', true)
}
this.documentId = response.content.content.id
// 向上导入documentId
this.$emit('getDocumentId', this.documentId)
this.$emit('getUploadDetail', response.content.content)
this.$emit('getForm', this.$refs.processForm, this.form)
} else {
this.$message({
type: 'error',
@@ -133,17 +131,9 @@ export default {
// 显示预处理结果预览对话框
// this.previewDialogVisible = true
},
handleClose(done) {
this.$confirm('确认关闭?')
.then(_ => {
done()
})
.catch(_ => {})
},
handleBeforeUpload(file) {
// 这里可以添加文件上传前的处理逻辑
console.log('开始上传文件:', file)
this.previewDialogVisible = true
this.uploadLoading = true
// 可以在这里进行文件类型、大小等验证
// 返回 true 继续上传,返回 false 停止上传

View File

@@ -12,7 +12,7 @@
</el-steps>
<div class="components">
<step-preprocessing ref="stepPreprocessing" v-if="active === 0" @getForm="getForm" @getDocumentId="getDocumentId"></step-preprocessing>
<step-preprocessing v-if="active === 0" @getForm="getForm" @getDocumentId="getDocumentId" @beMinerU="beMinerU"></step-preprocessing>
<split-config v-if="active === 1"></split-config>
<words v-if="active === 2"></words>
</div>
@@ -30,7 +30,7 @@
</el-card>
<!-- 添加预处理结果预览对话框 -->
<el-drawer :visible.sync="visible" size="80%" title="预处理结果预览" :before-close="handleClose">
<el-drawer :visible.sync="visible" size="80%" title="预处理结果预览">
<div style="height:calc(100% - 55px);">
<r-miner-u :documentId="documentId"></r-miner-u>
</div>
@@ -60,6 +60,9 @@ export default {
},
filters: {},
methods: {
beMinerU() {
this.visible = true
},
getForm() {},
fetchApi() {},
getDocumentId(id) {

View File

@@ -84,6 +84,21 @@
</div>
</div>
</el-card>
<el-drawer :visible.sync="drawer" size="50%" :title="descriptions.knowledgeName">
<div class="flex mh20">
<div>
<el-descriptions class="margin-top" :column="1" border>
<el-descriptions-item label="分段模式:"> </el-descriptions-item>
<el-descriptions-item label="是否使用预处理:"> </el-descriptions-item>
<el-descriptions-item label="是否使用ocr协助处理"> </el-descriptions-item>
<el-descriptions-item label="知识拆分规则:"> </el-descriptions-item>
<el-descriptions-item label="知识题词规则:"> </el-descriptions-item>
</el-descriptions>
</div>
<div></div>
</div>
</el-drawer>
</div>
</template>
<script>
@@ -93,6 +108,7 @@ export default {
name: 'index',
data() {
return {
drawer: false,
editKnowledge: false,
form: {
fileName: '',
@@ -110,7 +126,8 @@ export default {
pageSize: 10,
total: 0,
hasList: false,
documentSourceOptions
documentSourceOptions,
descriptions: {}
}
},
props: {},
@@ -218,6 +235,11 @@ export default {
currentChange(page) {
this.page = page
this.getKnowledgeFiledList()
},
// 查看文档详情
viewDocumentDetail(row) {
this.descriptions = row
this.drawer = true
}
},
filters: {
@@ -313,7 +335,7 @@ export default {
size: 'mini'
},
on: {
click: () => this.handleEdit(params.row)
click: () => this.viewDocumentDetail(params.row)
}
},
'查看详情'