feat(knowledge): 添加文档拆分和题词配置步骤、调整表格组件,支持单选功能

- 新增文件导入功能,支持手动和自动两种方式
- 添加文档拆分和题词配置步骤
- 优化导入流程,增加状态提示和错误处理
- 调整表格组件,支持单选功能
This commit is contained in:
du.meimei
2025-04-15 09:40:02 +08:00
parent bcff977d38
commit b302945dba
9 changed files with 161 additions and 78 deletions

View File

@@ -137,7 +137,7 @@ export function addRuleExtract(data) {
data data
}) })
} }
// 拆分规则-编辑 // 题词-编辑
export function updateRuleExtractSplit(data) { export function updateRuleExtractSplit(data) {
return request({ return request({
url: getUrl(`/ruleAttributeExtractEx/update`), url: getUrl(`/ruleAttributeExtractEx/update`),
@@ -145,7 +145,14 @@ export function updateRuleExtractSplit(data) {
data data
}) })
} }
// 题词-下一步校验
export function execExtract(data) {
return request({
url: getUrl(`/datasetDocumentEx/execExtract`),
method: 'post',
data
})
}
//知识库文件上传-自定义 //知识库文件上传-自定义
export function uploadFileByCustom(data) { export function uploadFileByCustom(data) {
return request({ return request({

View File

@@ -171,6 +171,11 @@ export default {
type: Boolean, type: Boolean,
default: false default: false
}, },
//是否只能选择一条数据
isSelectOnly: {
type: Boolean,
default: false
},
//是否展示 删减行 按钮 和新增行按钮 //是否展示 删减行 按钮 和新增行按钮
deletion: { deletion: {
type: Boolean, type: Boolean,
@@ -317,7 +322,17 @@ export default {
this.$emit('row-click', row, column, event) this.$emit('row-click', row, column, event)
}, },
handleSelectionChange(row) { handleSelectionChange(row) {
this.$emit('selection-change', row) if (this.isSelectOnly && row.length > 1) {
// 如果只能选择一条数据,且当前选择超过一条,则只保留最后选择的一条
const lastRow = row[row.length - 1]
this.$refs.renderTable.clearSelection()
this.$nextTick(() => {
this.$refs.renderTable.toggleRowSelection(lastRow, true)
})
this.$emit('selection-change', [lastRow])
} else {
this.$emit('selection-change', row)
}
}, },
//具体查看element 文档 //具体查看element 文档
toggleRowSelection(rows) { toggleRowSelection(rows) {

View File

@@ -140,7 +140,8 @@ export default {
if (this.form.beMinerU) { if (this.form.beMinerU) {
this.$emit('beMinerU', true) this.$emit('beMinerU', true)
} }
this.documentId = response.content.content.id console.log(response.content.content)
this.documentId = response.content.content
// 向上导入documentId // 向上导入documentId
this.$emit('getDocumentId', this.documentId) this.$emit('getDocumentId', this.documentId)
// 文件内容 // 文件内容

View File

@@ -14,7 +14,7 @@
</el-row> </el-row>
<!-- 其他表单项 --> <!-- 其他表单项 -->
</el-form> </el-form>
<r-table :columns="columns" :data="tableData" :deletion="false"></r-table> <r-table :columns="columns" :data="tableData" :isSelectOnly="true" :deletion="false" @selection-change="getCheckData"></r-table>
<!-- 添加 AddRule 组件 --> <!-- 添加 AddRule 组件 -->
<add-rule ref="addRule" :ruleList="tableData" @getDataList="getDataList"></add-rule> <add-rule ref="addRule" :ruleList="tableData" @getDataList="getDataList"></add-rule>
@@ -50,7 +50,8 @@ export default {
}, },
tableData: [], tableData: [],
addRuleVisible: false, // 控制 AddRule 组件的显示状态 addRuleVisible: false, // 控制 AddRule 组件的显示状态
previewDialogVisible: false // 控制预览弹窗的显示状态 previewDialogVisible: false, // 控制预览弹窗的显示状态
ruleId: ''
} }
}, },
methods: { methods: {
@@ -58,6 +59,10 @@ export default {
this.visible = true this.visible = true
this.getDataList() this.getDataList()
}, },
getCheckData(value) {
console.log(value)
this.ruleId = value[0].id
},
getDataList() { getDataList() {
console.log('getRulesPage') console.log('getRulesPage')
// 1-文档拆分规则 2-文档题词规则 // 1-文档拆分规则 2-文档题词规则

View File

@@ -61,6 +61,7 @@
<script> <script>
import CustomSplitDialog from './CustomSplitDialog.vue' import CustomSplitDialog from './CustomSplitDialog.vue'
import { execSplit } from '@/api/generatedApi'
export default { export default {
name: 'splitConfig', name: 'splitConfig',
@@ -98,6 +99,23 @@ export default {
} else { } else {
this.$refs.customTable.close() this.$refs.customTable.close()
} }
},
nextStep(documentId) {
return new Promise(async (resolve, reject) => {
let params = {
documentId: documentId,
beAuto: this.activeIndex === 0
}
if (params.beAuto === false) {
params.rulesId = this.$refs.customTable.ruleId
}
let res = await execSplit(params)
console.log(res.content)
resolve({
result: res.content.result,
data: res.content
})
})
} }
}, },
created() {}, created() {},

View File

@@ -14,7 +14,7 @@
</el-row> </el-row>
<!-- 其他表单项 --> <!-- 其他表单项 -->
</el-form> </el-form>
<r-table :columns="columns" :data="tableData" :deletion="false"></r-table> <r-table :columns="columns" :data="tableData" :isSelectOnly="true" :deletion="false" @selection-change="getCheckData"></r-table>
<!-- 添加 AddRule 组件 --> <!-- 添加 AddRule 组件 -->
<add-rule ref="addRule"></add-rule> <add-rule ref="addRule"></add-rule>
@@ -63,6 +63,10 @@ export default {
this.visible = true this.visible = true
this.getDataList() this.getDataList()
}, },
getCheckData(value) {
console.log(value)
this.ruleId = value[0].id
},
getDataList() { getDataList() {
console.log('getRulesPage') console.log('getRulesPage')
// 1-文档拆分规则 2-文档题词规则 // 1-文档拆分规则 2-文档题词规则

View File

@@ -61,6 +61,7 @@
<script> <script>
import CustomSplitDialog from './CustomWords.vue' import CustomSplitDialog from './CustomWords.vue'
import { execExtract, execSplit } from '@/api/generatedApi'
export default { export default {
name: 'splitConfig', name: 'splitConfig',
@@ -98,6 +99,23 @@ export default {
} else { } else {
this.$refs.customTable.close() this.$refs.customTable.close()
} }
},
nextStep(documentId) {
return new Promise(async (resolve, reject) => {
let params = {
documentId: documentId,
beAuto: this.activeIndex === 0
}
if (params.beAuto === false) {
params.rulesId = this.$refs.customTable.ruleId
}
let res = await execExtract(params)
console.log(res.content)
resolve({
result: res.content.result,
data: res.content
})
})
} }
}, },
created() {}, created() {},

View File

@@ -17,12 +17,11 @@
<step-words v-show="active === 2"></step-words> <step-words v-show="active === 2"></step-words>
</div> </div>
</div> </div>
<div class="card-bottom"> <div class="card-bottom">
<el-button v-if="active === 0 && $refs.stepPreprocessing && $refs.stepPreprocessing.form.radio === '2'" type="primary" size="medium" @click="fetchApi"> <el-button v-if="active === 0 && $refs.stepPreprocessing && $refs.stepPreprocessing.form.radio === '2'" type="primary" size="medium" @click="fetchApi">
一键处理 一键处理
</el-button> </el-button>
<el-button type="primary" size="medium" v-if="active === 2">确定</el-button> <el-button type="primary" size="medium" @click="nextStep" v-if="active === 2">确定</el-button>
<el-button size="medium" @click="active--" v-if="active >= 1">上一步</el-button> <el-button size="medium" @click="active--" v-if="active >= 1">上一步</el-button>
<!-- <el-button type="primary" size="medium" @click="active++" v-if="active < 2">下一步</el-button>--> <!-- <el-button type="primary" size="medium" @click="active++" v-if="active < 2">下一步</el-button>-->
<el-button type="primary" size="medium" @click="nextStep" v-if="active < 2">下一步</el-button> <el-button type="primary" size="medium" @click="nextStep" v-if="active < 2">下一步</el-button>
@@ -81,12 +80,24 @@ export default {
getDocumentId(id) { getDocumentId(id) {
this.documentId = id this.documentId = id
}, },
nextStep() { async nextStep() {
if (this.active === 0) { if (this.active === 0) {
// this.active++ // this.active++
this.$refs.stepPreProcessing.uploadFiled() this.$refs.stepPreProcessing.uploadFiled()
} else if (this.active === 1) { } else if (this.active === 1) {
this.$refs.splitConfig.nextStep() const res = await this.$refs.splitConfig.nextStep(this.documentId)
if (res.result === '0') {
// 处理成功的情况
console.log('拆分成功', res.content)
this.active++
}
} else if (this.active === 2) {
const res = await this.$refs.words.nextStep(this.documentId)
if (res.result === '0') {
// 处理成功的情况
console.log('拆分成功', res.content)
this.$message.success('创建成功')
}
} }
} }
}, },

View File

@@ -1,6 +1,6 @@
<script> <script>
import { getDocByPage } from "@/api/knowledge/task-page"; import { getDocByPage } from '@/api/knowledge/task-page'
import KnowledgeInfo from "@/views/track/views/knowledge-info/Index.vue"; import KnowledgeInfo from '@/views/track/views/knowledge-info/Index.vue'
export default { export default {
components: { components: {
@@ -13,121 +13,126 @@ export default {
tabList: [], tabList: [],
currentPage: 1, currentPage: 1,
form: { form: {
knowledge: "", knowledge: '',
knowledgeName: "", knowledgeName: '',
uploadUser: "", uploadUser: '',
taskStatus: "", taskStatus: '',
taskTime: [] taskTime: []
}, },
tableConfig: { tableConfig: {
columns: [ columns: [
{ prop: "taskCode", key: "任务号", width: "180" }, { prop: 'taskCode', key: '任务号', width: '180' },
{ prop: "docTypeName", key: "知识库", width: "180" }, { prop: 'docTypeName', key: '知识库', width: '180' },
{ prop: "fileName", key: "知识文件名称" }, { prop: 'fileName', key: '知识文件名称' },
{ prop: "processStatus", key: "上传状态", width: "100" }, { prop: 'processStatus', key: '上传状态', width: '100' },
{ prop: "createdUser", key: "上传用户", width: "100" }, { prop: 'createdUser', key: '上传用户', width: '100' },
{ prop: "uploadDate", key: "上传时间", width: "200" }, { prop: 'uploadDate', key: '上传时间', width: '200' },
{ {
key: "操作", key: '操作',
render: (h, params) => { render: (h, params) => {
return h("div", [h("el-button", { return h('div', [
props: { type: "text", size: "mini" }, h(
on: { click: () => this.handleActiveInfo(params) } 'el-button',
}, "查看详情")]); {
props: { type: 'text', size: 'mini' },
on: { click: () => this.handleActiveInfo(params) }
},
'查看详情'
)
])
} }
} }
] ]
} }
}; }
}, },
computed: { computed: {
/** /**
* 获取筛选后的列表数据 * 获取筛选后的列表数据
*/ */
getFilterTableData() { getFilterTableData() {
let filteredList = this.tabList; let filteredList = this.tabList
// 按照顺序进行筛选,先按照知识库进行筛选 // 按照顺序进行筛选,先按照知识库进行筛选
filteredList = this.form.knowledge filteredList = this.form.knowledge
? filteredList.filter(item => { ? filteredList.filter(item => {
return item.docTypeName === this.form.knowledge; return item.docTypeName === this.form.knowledge
}) })
: filteredList; : filteredList
// 按照知识文件名称进行筛选 // 按照知识文件名称进行筛选
filteredList = this.form.knowledgeName filteredList = this.form.knowledgeName
? filteredList.filter(item => { ? filteredList.filter(item => {
return item.fileName === this.form.knowledgeName; return item.fileName === this.form.knowledgeName
}) })
: filteredList; : filteredList
// 按照上传用户进行筛选 // 按照上传用户进行筛选
filteredList = this.form.uploadUser filteredList = this.form.uploadUser
? filteredList.filter(item => { ? filteredList.filter(item => {
return item.createdUser === this.form.uploadUser; return item.createdUser === this.form.uploadUser
}) })
: filteredList; : filteredList
// 按照任务状态进行筛选 // 按照任务状态进行筛选
filteredList = this.form.taskStatus filteredList = this.form.taskStatus
? filteredList.filter(item => { ? filteredList.filter(item => {
return item.processStatus === this.form.taskStatus; return item.processStatus === this.form.taskStatus
}) })
: filteredList; : filteredList
// 处理的状态格式化 // 处理的状态格式化
filteredList = filteredList.map(item => { filteredList = filteredList.map(item => {
console.log(`item.processStatus`, item.processStatus, typeof item.processStatus); console.log(`item.processStatus`, item.processStatus, typeof item.processStatus)
item.processStatus = item.processStatus === 1 ? "成功" : item.processStatus = item.processStatus === 1 ? '成功' : item.processStatus === '成功' ? '成功' : '失败'
item.processStatus === "成功" ? "成功" : "失败"; return item
return item; })
});
// 按照任务时间进行筛选 // 按照任务时间进行筛选
filteredList = filteredList =
this.form.taskTime.length > 0 this.form.taskTime.length > 0
? filteredList.filter(item => { ? filteredList.filter(item => {
return ( return (
new Date(item.uploadDate).getTime() >= new Date(this.form.taskTime[0]).getTime() && new Date(item.uploadDate).getTime() >= new Date(this.form.taskTime[0]).getTime() &&
new Date(item.uploadDate).getTime() <= new Date(this.form.taskTime[1]).getTime() new Date(item.uploadDate).getTime() <= new Date(this.form.taskTime[1]).getTime()
); )
}) })
: filteredList; : filteredList
// 默认返回所有列表 // 默认返回所有列表
return filteredList; return filteredList
}, },
/** /**
* 获取知识库列表 * 获取知识库列表
*/ */
getKnowledgeList() { getKnowledgeList() {
// 进行去重处理 // 进行去重处理
const knowledgeList = [...new Set(this.tabList.map(item => item.docTypeName))]; const knowledgeList = [...new Set(this.tabList.map(item => item.docTypeName))]
return knowledgeList; return knowledgeList
}, },
/** /**
* 获取知识文件名称列表 * 获取知识文件名称列表
*/ */
getKnowledgeNameList() { getKnowledgeNameList() {
// 进行去重处理 // 进行去重处理
const knowledgeNameList = [...new Set(this.tabList.map(item => item.fileName))]; const knowledgeNameList = [...new Set(this.tabList.map(item => item.fileName))]
return knowledgeNameList; return knowledgeNameList
}, },
/** /**
* 获取上传用户列表 * 获取上传用户列表
*/ */
getUploadUserList() { getUploadUserList() {
// 进行去重处理 // 进行去重处理
const uploadUserList = [...new Set(this.tabList.map(item => item.createdUser))]; const uploadUserList = [...new Set(this.tabList.map(item => item.createdUser))]
return uploadUserList; return uploadUserList
}, },
/** /**
* 获取任务状态列表 * 获取任务状态列表
*/ */
getTaskStatusList() { getTaskStatusList() {
// 进行去重处理 // 进行去重处理
const taskStatusList = [...new Set(this.tabList.map(item => item.processStatus))]; const taskStatusList = [...new Set(this.tabList.map(item => item.processStatus))]
return taskStatusList; return taskStatusList
} }
}, },
methods: { methods: {
@@ -135,32 +140,32 @@ export default {
const payload = { const payload = {
page: this.currentPage, page: this.currentPage,
pageSize: 10, pageSize: 10,
docId: "" docId: ''
}; }
getDocByPage(payload).then(res => { getDocByPage(payload).then(res => {
this.tabList = res.content.content.list ? res.content.content.list : []; this.tabList = res.content.content.list ? res.content.content.list : []
console.log(`res:`, res.content.content.list); console.log(`res:`, res.content.content.list)
}); })
}, },
handleReset() { handleReset() {
this.form = { this.form = {
knowledge: "", knowledge: '',
knowledgeName: "", knowledgeName: '',
uploadUser: "", uploadUser: '',
taskStatus: "", taskStatus: '',
taskTime: [] taskTime: []
}; }
}, },
handleActiveInfo(scope) { handleActiveInfo(scope) {
this.infoDialogVisible = true; this.infoDialogVisible = true
this.activeForm = scope.row; this.activeForm = scope.row
} }
}, },
beforeMount() { beforeMount() {
this.getTableData(); this.getTableData()
} }
}; }
</script> </script>
<template> <template>
@@ -229,8 +234,7 @@ export default {
<r-table :columns="tableConfig.columns" :data="getFilterTableData" :deletion="false"></r-table> <r-table :columns="tableConfig.columns" :data="getFilterTableData" :deletion="false"></r-table>
<!-- 弹出提示框 里面是各种详情内容 --> <!-- 弹出提示框 里面是各种详情内容 -->
<el-drawer title="上传任务详情" :visible.sync="infoDialogVisible" size="80%" <el-drawer title="上传任务详情" :visible.sync="infoDialogVisible" size="80%" :before-close="() => (infoDialogVisible = false)">
:before-close="() => (infoDialogVisible = false)">
<knowledge-info :form="activeForm" v-if="infoDialogVisible"></knowledge-info> <knowledge-info :form="activeForm" v-if="infoDialogVisible"></knowledge-info>
</el-drawer> </el-drawer>
</div> </div>