feat(knowledge): 优化知识拆分和题词功能

- 添加复制拆分规则按钮
-优化拆分规则和题词界面布局
- 修复题词内容保存逻辑
- 优化规则列表展示样式
- 调整创建规则界面样式
This commit is contained in:
du.meimei
2025-04-16 14:54:49 +08:00
parent 5c9addf997
commit d27c57f814
11 changed files with 112 additions and 69 deletions

View File

@@ -29,9 +29,12 @@
<div class="form-section" v-for="(rule, index) in form.ruleList" :key="index">
<div class="section-title">
拆分规则 {{ index + 1 }}
<div>
<el-button v-if="!isPreview && form.ruleList.length > 1" type="text" class="delete-btn" @click="removeRule(index)">
<i class="el-icon-delete"></i> 删除
</el-button>
<el-button v-if="!isPreview" type="text" class="copy-btn" @click="copyRule(index)"> <i class="el-icon-copy-document"></i> 复制 </el-button>
</div>
</div>
<el-form-item label="样式" :prop="'ruleList.' + index + '.titleLevel'">
<el-select :disabled="isPreview" v-model="rule.titleLevel" placeholder="请选择标题级别">
@@ -44,11 +47,6 @@
<el-form-item label="备注" :prop="'ruleList.' + index + '.description'">
<el-input :disabled="isPreview" type="textarea" v-model="rule.description" placeholder="请输入规则备注"></el-input>
</el-form-item>
<div class="text-right mb20">
<el-button v-if="!isPreview" type="primary" size="medium" @click="copyRule(index)">
复制拆分规则
</el-button>
</div>
</div>
<div class="add-rule-btn">
@@ -264,7 +262,8 @@ export default {
<style scoped lang="scss">
.content {
padding: 20px;
min-height: 500px;
height: calc(100vh - 120px);
overflow-y: auto;
.form-section {
margin-bottom: 24px;
@@ -289,6 +288,14 @@ export default {
color: #f78989;
}
}
.copy-btn {
color: #70b936;
font-size: 14px;
&:hover {
color: #70b936;
}
}
}
}

View File

@@ -242,8 +242,9 @@ export default {
<style scoped lang="scss">
.splitConfig {
.title {
font-size: 15px;
margin-bottom: 20px;
font-size: 20px;
margin: 10px 0;
font-weight: bold;
}
ul {
list-style-type: none;
@@ -266,7 +267,7 @@ export default {
margin-left: 20px;
h3 {
margin-bottom: 20px;
font-size: 18px;
font-size: 16px;
color: #333;
}
.tips {

View File

@@ -29,9 +29,14 @@
<div class="form-section" v-for="(rule, index) in form.ruleList" :key="index">
<div class="section-title">
拆分规则 {{ index + 1 }}
<div>
<el-button v-if="!isPreview && form.ruleList.length > 1" type="text" class="delete-btn" @click="removeRule(index)">
<i class="el-icon-delete"></i> 删除
</el-button>
<el-button v-if="!isPreview" type="text" class="copy-btn" @click="addValidationRules(index)">
<i class="el-icon-copy-document"></i> 复制
</el-button>
</div>
</div>
<el-form-item label="属性" :prop="'ruleList.' + index + '.attribute'">
<el-input v-model="rule.attribute" placeholder="请输入属性" :disabled="isPreview"></el-input>
@@ -48,9 +53,6 @@
<el-form-item label="提示词" :prop="'ruleList.' + index + '.prompt'">
<el-input v-model="rule.prompt" placeholder="请输入提示词" :disabled="isPreview"></el-input>
</el-form-item>
<div class="text-right mb20" v-if="!isPreview">
<el-button type="primary" size="medium" @click="copyRule(index)" :disabled="isPreview">复制拆分规则</el-button>
</div>
</div>
<div class="add-rule-btn" v-if="!isPreview">
<el-button type="primary" size="medium" @click="addSplitRule"> <i class="el-icon-plus"></i> 新增拆分规则 </el-button>
@@ -270,7 +272,8 @@ export default {
<style scoped lang="scss">
.content {
padding: 20px;
min-height: 500px;
height: calc(100vh - 120px);
overflow-y: auto;
.form-section {
margin-bottom: 24px;

View File

@@ -17,7 +17,7 @@
</el-form>
<r-table :columns="columns" :data="tableData" :isSelectOnly="true" :deletion="false" @selection-change="getCheckData"></r-table>
<!-- 添加 AddRule 组件 -->
<add-rule ref="addRule"></add-rule>
<add-rule ref="addRule" @getDataList="getDataList"></add-rule>
</div>
</template>
@@ -59,7 +59,6 @@ export default {
this.ruleId = value[0].id
},
getDataList() {
console.log('getRulesPage')
// 1-文档拆分规则 2-文档题词规则
let params = {
ruleType: 2,

View File

@@ -6,7 +6,11 @@
<template v-if="extractResults && extractResults.length > 0">
<el-table :data="extractResults" border style="width: 100%">
<el-table-column prop="attribute" label="属性" align="center" width="180"></el-table-column>
<el-table-column prop="attributeContent" label="题词内容" align="center"></el-table-column>
<el-table-column prop="attributeContent" label="题词内容" align="center">
<template slot-scope="scope">
<el-input v-model="scope.row.attributeContent"></el-input>
</template>
</el-table-column>
</el-table>
</template>
<el-empty v-else-if="!extractResults || extractResults.length === 0" description="暂无题词结果"></el-empty>

View File

@@ -175,14 +175,11 @@ export default {
this.saveContentToDocumentOperation(this.documentId, extractResults)
},
// 保存题词内容到文档
async saveContentToDocumentOperation(documentId, resultList) {
async saveContentToDocumentOperation(documentId, resultDTOList) {
try {
const params = {
documentId,
resultDTOList: resultList.map(item => ({
attribute: item.attribute,
attributeContent: item.attributeContent
}))
resultDTOList
}
const res = await saveContentToDocument(params)
@@ -230,8 +227,9 @@ export default {
<style scoped lang="scss">
.splitConfig {
.title {
font-size: 15px;
margin-bottom: 20px;
font-size: 20px;
margin: 10px 0;
font-weight: bold;
}
ul {
list-style-type: none;
@@ -254,7 +252,7 @@ export default {
margin-left: 20px;
h3 {
margin-bottom: 20px;
font-size: 18px;
font-size: 16px;
color: #333;
}
.tips {

View File

@@ -26,9 +26,9 @@
<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" @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="nextStep" 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="$router.history.go(-1)">取消</el-button>
</div>
</el-card>

View File

@@ -141,8 +141,7 @@ export default {
},
watch: {
form: {
handler() {
},
handler() {},
deep: true
}
},
@@ -258,9 +257,15 @@ export default {
<!-- 创建时间 -->
<el-col :span="8">
<el-form-item label="创建时间">
<el-date-picker v-model="form.createdDate" type="daterange" unlink-panels range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期"
:picker-options="form.pickerOptions">
<el-date-picker
v-model="form.createdDate"
type="daterange"
unlink-panels
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="form.pickerOptions"
>
</el-date-picker>
</el-form-item>
</el-col>
@@ -278,15 +283,27 @@ export default {
<!-- 下方规则列表 -->
<div class="p20">
<r-table :columns="tableConfig.columns" :data="getCurrentTableData" :deletion="false" :total="tableConfig.total"
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" />
<r-table
:columns="tableConfig.columns"
:data="getCurrentTableData"
:deletion="false"
:total="tableConfig.total"
@currentChange="handleCurrentChange"
@sizeChange="handleSizeChange"
/>
</div>
</el-card>
<!-- 规则详情弹窗 -->
<el-drawer :visible.sync="dialogOptions.visible" size="50%" :title="dialogOptions.title">
<!-- diglog 弹窗内容组件 -->
<component class="container" v-if="dialogOptions.visible" :is="dialogOptions.currentComponent" :data="tableData"
:columns="columns" :currentRow="dialogOptions.currentRow" />
<component
class="container"
v-if="dialogOptions.visible"
:is="dialogOptions.currentComponent"
:data="tableData"
:columns="columns"
:currentRow="dialogOptions.currentRow"
/>
</el-drawer>
</div>
</template>

View File

@@ -132,8 +132,12 @@ export default {
</el-form-item>
<el-card shadow="hover" v-if="form.ruleList.length > 0">
<el-tabs closable @tab-remove="handleDelete">
<el-tab-pane v-for="(item, index) in form.ruleList" :name="index.toString()" :key="index"
:label="item.ruleRegex ? item.ruleRegex : `未命名${index + 1}`">
<el-tab-pane
v-for="(item, index) in form.ruleList"
:name="index.toString()"
:key="index"
:label="item.ruleRegex ? item.ruleRegex : `未命名${index + 1}`"
>
<el-form-item label="样式">
<el-select v-model="item.titleLevel" placeholder="请选择">
<el-option v-for="level in 6" :key="level" :label="level" :value="level" />

View File

@@ -228,8 +228,14 @@ export default {
</el-col>
<el-col :span="8">
<el-form-item label="任务时间">
<el-date-picker v-model="form.taskTime" type="daterange" unlink-panels range-separator="至"
start-placeholder="开始日期" end-placeholder="结束日期">
<el-date-picker
v-model="form.taskTime"
type="daterange"
unlink-panels
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
>
</el-date-picker>
</el-form-item>
</el-col>
@@ -241,12 +247,17 @@ export default {
<!-- 任务列表 -->
<div>
<r-table :columns="tableConfig.columns" :data="getFilterTableData" :deletion="false" :total="tableConfig.total"
@currentChange="handleCurrentChange" @sizeChange="handleSizeChange" />
<r-table
:columns="tableConfig.columns"
:data="getFilterTableData"
:deletion="false"
:total="tableConfig.total"
@currentChange="handleCurrentChange"
@sizeChange="handleSizeChange"
/>
<!-- 弹出提示框 里面是各种详情内容 -->
<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>

View File

@@ -51,7 +51,6 @@ export default {
}
},
methods: {
getPdfUrl,
_getTaskDetail() {
queryTask({ id: this.form.id }).then(res => {
@@ -69,7 +68,6 @@ export default {
// this.form.knowledgeContent = content
})
}
},
created() {
this._getTaskDetail()
@@ -144,16 +142,17 @@ export default {
<el-row>
<el-col :span="12">
<el-form-item label="知识内容">
</el-form-item>
<el-form-item label="知识内容"> </el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="原文内容" />
<iframe id="iframe"
<iframe
id="iframe"
:src="`${iframeSrc}/pdfjs-dist/web/viewer.html?file=${encodeURIComponent(getPdfUrl({ documentId: form.id }))}`"
class="miner-u el-card is-always-shadow ml20" style="width: 98%; height: 800px;"></iframe>
class="miner-u el-card is-always-shadow ml20"
style="width: 98%; height: 800px;"
></iframe>
</el-col>
</el-row>
</el-form>