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

View File

@@ -171,6 +171,11 @@ export default {
type: Boolean,
default: false
},
//是否只能选择一条数据
isSelectOnly: {
type: Boolean,
default: false
},
//是否展示 删减行 按钮 和新增行按钮
deletion: {
type: Boolean,
@@ -317,7 +322,17 @@ export default {
this.$emit('row-click', row, column, event)
},
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 文档
toggleRowSelection(rows) {

View File

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

View File

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

View File

@@ -61,6 +61,7 @@
<script>
import CustomSplitDialog from './CustomSplitDialog.vue'
import { execSplit } from '@/api/generatedApi'
export default {
name: 'splitConfig',
@@ -98,6 +99,23 @@ export default {
} else {
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() {},

View File

@@ -14,7 +14,7 @@
</el-row>
<!-- 其他表单项 -->
</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 组件 -->
<add-rule ref="addRule"></add-rule>
@@ -63,6 +63,10 @@ export default {
this.visible = true
this.getDataList()
},
getCheckData(value) {
console.log(value)
this.ruleId = value[0].id
},
getDataList() {
console.log('getRulesPage')
// 1-文档拆分规则 2-文档题词规则

View File

@@ -61,6 +61,7 @@
<script>
import CustomSplitDialog from './CustomWords.vue'
import { execExtract, execSplit } from '@/api/generatedApi'
export default {
name: 'splitConfig',
@@ -98,6 +99,23 @@ export default {
} else {
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() {},

View File

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