mirror of
http://112.124.100.131/ebiz-ai/ebiz-ai-knowledge-manage.git
synced 2025-12-09 02:46:50 +08:00
feat(api): 新增 MinerU相关接口并优化 PDF预览功能
- 新增 getPdfUrl 接口用于获取 PDF 预览 URL - 新增 minerUMarkDownUpdate 接口用于更新 Markdown 内容- 优化了 RenderMinerU 组件,增加保存并处理功能 - 调整了知识库详情页面布局 - 修复了规则管理相关组件的样式问题
This commit is contained in:
7
.env.dev
7
.env.dev
@@ -3,8 +3,5 @@ NODE_ENV = 'dev' // 如果是生产环境,请记得切换为production
|
|||||||
|
|
||||||
# flag
|
# flag
|
||||||
VUE_APP_FLAG='dev'
|
VUE_APP_FLAG='dev'
|
||||||
#VUE_APP_ADMIN='http://39.104.123.254:7195'
|
VUE_APP_ADMIN='http://39.104.123.254:7196'
|
||||||
# 子西
|
|
||||||
#VUE_APP_ADMIN='http://192.168.8.165:7196/'
|
|
||||||
# 季分
|
|
||||||
VUE_APP_ADMIN='http://192.168.2.62:7196/'
|
|
||||||
|
|||||||
@@ -37,24 +37,32 @@ export function datasetCreate(data) {
|
|||||||
export function datasetDelete(data) {
|
export function datasetDelete(data) {
|
||||||
return request({
|
return request({
|
||||||
url: getUrl(`/datasetsEx/delete?id=${data.id}`),
|
url: getUrl(`/datasetsEx/delete?id=${data.id}`),
|
||||||
method: 'delete',
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//minerU 获取bbox
|
//minerU 获取bbox
|
||||||
export function minerUBbox(params) {
|
export function minerUBbox(params) {
|
||||||
return request({
|
return request({
|
||||||
url:'http://192.168.8.165:7196/document/mineru/bbox_json',
|
url: getUrl('/document/mineru/bbox_json'),
|
||||||
// url: getUrl('/document/mineru/bbox_json'),
|
|
||||||
method: 'get',
|
method: 'get',
|
||||||
params:params
|
params: params
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//minerU 获取markdown
|
//minerU 获取markdown
|
||||||
export function minerUMarkDown(params) {
|
export function minerUMarkDown(params) {
|
||||||
return `http://192.168.8.165:7196/document/mineru/md?documentId=${params.documentId}`
|
return getUrl(`document/mineru/md?documentId=${params.documentId}`)
|
||||||
// url: getUrl('/document/mineru/md'),
|
}
|
||||||
|
|
||||||
|
// minerU 获取pdf
|
||||||
|
export function getPdfUrl(params) {
|
||||||
|
return getUrl(`/datasetDocumentEx/preview?id=${params.documentId}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function minerUMarkDownUpdate(data) {
|
||||||
|
return request({
|
||||||
|
url: getUrl(`/document/mineru/md/update`),
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
|
|
||||||
import request from '@/assets/js/utils/request'
|
import request from '@/assets/js/utils/request'
|
||||||
import getUrl from '@/assets/js/utils/get-url'
|
import getUrl from '@/assets/js/utils/get-url'
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取所有的规则列表
|
* 获取所有的规则列表
|
||||||
*/
|
*/
|
||||||
@@ -59,7 +57,6 @@ export function updateSplitRule(data) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提示词规则新增
|
* 提示词规则新增
|
||||||
*/
|
*/
|
||||||
@@ -81,4 +78,4 @@ export function updatePromptRule(data) {
|
|||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,20 @@
|
|||||||
{
|
{
|
||||||
"ruleName": "修改题词规则",
|
ruleName: '修改题词规则',
|
||||||
"ruleType": 2,
|
ruleType: 2,
|
||||||
"ruleList": [
|
ruleList: [
|
||||||
{
|
{
|
||||||
"attribute": "属性1-1",
|
attribute: '属性1-1',
|
||||||
"attributeDesc": "秒送",
|
attributeDesc: '秒送',
|
||||||
"keyword": "keyword",
|
keyword: 'keyword',
|
||||||
"example": "example",
|
example: 'example',
|
||||||
"prompt": "prompt"
|
prompt: 'prompt'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"attribute": "属性22",
|
attribute: '属性22',
|
||||||
"attributeDesc": "秒送",
|
attributeDesc: '秒送',
|
||||||
"keyword": "keyword",
|
keyword: 'keyword',
|
||||||
"example": "example",
|
example: 'example',
|
||||||
"prompt": "prompt"
|
prompt: 'prompt'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"ruleName": "规则-修改",
|
ruleName: '规则-修改',
|
||||||
"ruleType": 1,
|
ruleType: 1,
|
||||||
"ruleList": [
|
ruleList: [
|
||||||
{
|
{
|
||||||
"titleLevel": 1,
|
titleLevel: 1,
|
||||||
"ruleRegex": "规则1",
|
ruleRegex: '规则1',
|
||||||
"description": "描述22"
|
description: '描述22'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"titleLevel": 3,
|
titleLevel: 3,
|
||||||
"ruleRegex": "规则2",
|
ruleRegex: '规则2',
|
||||||
"description": "新增"
|
description: '新增'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,9 +264,10 @@ body .el-collapse-item__wrap {
|
|||||||
.view-body {
|
.view-body {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
div{
|
padding: 10px;
|
||||||
outline: unset;
|
|
||||||
|
|
||||||
|
div {
|
||||||
|
outline: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 添加一些基本的样式以美化 Markdown 内容 */
|
/* 添加一些基本的样式以美化 Markdown 内容 */
|
||||||
@@ -277,14 +278,20 @@ body .el-collapse-item__wrap {
|
|||||||
margin-bottom: 16px;
|
margin-bottom: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
margin-top: 24px;
|
margin-top: 24px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
border-bottom: 1px dashed #cecece;
|
border-bottom: 1px dashed #cecece;
|
||||||
padding:5px;
|
padding: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
ul, ol {
|
ul,
|
||||||
|
ol {
|
||||||
margin: 16px 0;
|
margin: 16px 0;
|
||||||
padding-left: 32px;
|
padding-left: 32px;
|
||||||
}
|
}
|
||||||
@@ -294,7 +301,7 @@ body .el-collapse-item__wrap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #007BFF;
|
color: #007bff;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -328,12 +335,14 @@ body .el-collapse-item__wrap {
|
|||||||
|
|
||||||
table {
|
table {
|
||||||
border: 1px solid #f9f9f9;
|
border: 1px solid #f9f9f9;
|
||||||
width: 100%;
|
//width: 100%;
|
||||||
|
margin: 5px;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
background: linear-gradient(to bottom, #ffffff, #f9f9f9);
|
background: linear-gradient(to bottom, #ffffff, #f9f9f9);
|
||||||
}
|
}
|
||||||
|
|
||||||
th, td {
|
th,
|
||||||
|
td {
|
||||||
border: 1px solid #ccc;
|
border: 1px solid #ccc;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
@@ -348,3 +357,27 @@ body .el-collapse-item__wrap {
|
|||||||
background-color: #f9fafc;
|
background-color: #f9fafc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.m-view {
|
||||||
|
position: relative;
|
||||||
|
padding: 10px;
|
||||||
|
// 离开后还原
|
||||||
|
&:after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: calc(100% + 10px);
|
||||||
|
height: calc(100% + 10px);
|
||||||
|
top: -5px;
|
||||||
|
left: -5px;
|
||||||
|
background: rgba(201, 203, 255, 0.3);
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
opacity: 0; // 初始状态下透明
|
||||||
|
border: 2px solid rgb(201, 203, 255);
|
||||||
|
border-radius: 5px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover:after {
|
||||||
|
opacity: 1; // 悬停时显示
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
<template>
|
<template>
|
||||||
<div style="height: 100%;">
|
<div style="height: 100%;">
|
||||||
<div class="flex" style="height:calc(100% - 20px);flex:1">
|
<div class="mv10 mh20 text-right">
|
||||||
|
<el-button type="primary" size="medium" @click="saveMarkDown">保存并处理</el-button>
|
||||||
|
<el-button size="medium">取消</el-button>
|
||||||
|
</div>
|
||||||
|
<div class="flex" style="height:calc(100% - 35px);flex:1">
|
||||||
<iframe
|
<iframe
|
||||||
id="iframe"
|
id="iframe"
|
||||||
:src="`${iframeSrc}/pdfjs-dist/web/viewer.html?file=${encodeURIComponent(prdUrl)}`"
|
:src="`${iframeSrc}/pdfjs-dist/web/viewer.html?file=${encodeURIComponent(prdUrl)}`"
|
||||||
@@ -9,7 +13,7 @@
|
|||||||
<div style="flex:1;max-width: 800px;" class="mh20 miner-u-md">
|
<div style="flex:1;max-width: 800px;" class="mh20 miner-u-md">
|
||||||
<el-tabs type="border-card" style="height: 100%;overflow: hidden" @tab-click="changeTab">
|
<el-tabs type="border-card" style="height: 100%;overflow: hidden" @tab-click="changeTab">
|
||||||
<el-tab-pane label="预览" style="overflow:scroll;">
|
<el-tab-pane label="预览" style="overflow:scroll;">
|
||||||
<div v-html="markdownHtml" class="view-body"></div>
|
<div v-html="markdownHtml" class="view-body" id="viewBody" ref="viewBody"></div>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="编辑">
|
<el-tab-pane label="编辑">
|
||||||
<div class="lineH25" contenteditable id="md-editor" @blur="emitMarkDown">{{ markdown }}</div>
|
<div class="lineH25" contenteditable id="md-editor" @blur="emitMarkDown">{{ markdown }}</div>
|
||||||
@@ -20,34 +24,109 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { minerUBbox, minerUMarkDown } from '@/api/generatedApi/index'
|
import { getPdfUrl, minerUBbox, minerUMarkDown, minerUMarkDownUpdate } from '@/api/generatedApi/index'
|
||||||
import { DEFAULT_COLOR_SECTION, PDF_COLOR_PICKER } from './pdf-color'
|
import { DEFAULT_COLOR_SECTION, PDF_COLOR_PICKER } from './pdf-color'
|
||||||
import MarkdownIt from 'markdown-it'
|
import MarkdownIt from 'markdown-it'
|
||||||
import markdownItKatex from 'markdown-it-katex'
|
import markdownItKatex from 'markdown-it-katex'
|
||||||
const md = new MarkdownIt({
|
const md = new MarkdownIt({
|
||||||
html: true
|
html: true
|
||||||
}).use(markdownItKatex)
|
}).use(markdownItKatex)
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'index',
|
name: 'index',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
prdUrl: ``,
|
prdUrl: ``,
|
||||||
iframeSrc: window.location.href,
|
iframeSrc: window.location.origin,
|
||||||
bboxList: [],
|
bboxList: [],
|
||||||
markdown: '',
|
markdown: '',
|
||||||
md,
|
md,
|
||||||
markdownHtml: ''
|
markdownHtml: '',
|
||||||
|
page: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
documentId: {
|
||||||
|
type: String,
|
||||||
|
default: '1359571867133448192'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
props: {},
|
|
||||||
watch: {},
|
watch: {},
|
||||||
components: {},
|
components: {},
|
||||||
filters: {},
|
filters: {},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 生成视觉模型
|
||||||
|
viewHtmlModel() {
|
||||||
|
// 创建一个唯一的按钮容器
|
||||||
|
const buttonContainer = document.createElement('div')
|
||||||
|
buttonContainer.style.position = 'absolute'
|
||||||
|
buttonContainer.style.pointerEvents = 'none'
|
||||||
|
// document.body.appendChild(buttonContainer)
|
||||||
|
|
||||||
|
// 当鼠标滑动view-body下的table 时 增加浮层按钮
|
||||||
|
window.addEventListener('mouseover', e => {
|
||||||
|
// 检查是否在 viewBody 内部
|
||||||
|
const viewBody = document.getElementById('viewBody')
|
||||||
|
if (viewBody.contains(e.target)) {
|
||||||
|
// 检查目标元素是否为 table 或其子元素
|
||||||
|
const tableElement = e.target.closest('table')
|
||||||
|
if (tableElement) {
|
||||||
|
// 清除之前的按钮
|
||||||
|
// buttonContainer.innerHTML = ''
|
||||||
|
//
|
||||||
|
// // 在这里添加浮层按钮的逻辑
|
||||||
|
// console.log('Mouse over table or TD element inside viewBody')
|
||||||
|
// // 生成两个按钮
|
||||||
|
// const button = document.createElement('button')
|
||||||
|
// button.innerText = '标注'
|
||||||
|
// button.style.position = 'absolute'
|
||||||
|
// // 按钮位置在表格正中间浮动
|
||||||
|
// // 设置按钮位置在鼠标位置
|
||||||
|
// const rect = tableElement.getBoundingClientRect()
|
||||||
|
// console.log(rect)
|
||||||
|
// // 按钮s生成在鼠标位置
|
||||||
|
// button.style.left = `-10px`
|
||||||
|
// button.style.top = `-10px`
|
||||||
|
//
|
||||||
|
// button.style.backgroundColor = 'transparent'
|
||||||
|
// button.style.border = 'none'
|
||||||
|
// button.style.cursor = 'pointer'
|
||||||
|
// button.style.padding = '0'
|
||||||
|
// button.style.fontSize = '16px'
|
||||||
|
// button.style.zIndex = '9999'
|
||||||
|
// button.style.pointerEvents = 'auto'
|
||||||
|
// button.addEventListener('click', () => {
|
||||||
|
// alert(1)
|
||||||
|
// })
|
||||||
|
// buttonContainer.appendChild(button)
|
||||||
|
// tableElement.appendChild(buttonContainer)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 当鼠标离开 view-body 下的 table 时 删除按钮
|
||||||
|
window.addEventListener('mouseout', e => {
|
||||||
|
// 检查是否在 viewBody 内部
|
||||||
|
const viewBody = document.getElementById('viewBody')
|
||||||
|
if (!viewBody.contains(e.target) || !e.target.closest('table')) {
|
||||||
|
buttonContainer.innerHTML = ''
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 导出
|
||||||
emitMarkDown() {
|
emitMarkDown() {
|
||||||
let pre = document.getElementById('md-editor').innerText
|
let pre = document.getElementById('md-editor').innerText
|
||||||
this.$emit('getMarkDownIt', { innerText: pre })
|
this.$emit('getMarkDownIt', { innerText: pre })
|
||||||
},
|
},
|
||||||
|
saveMarkDown() {
|
||||||
|
let pre = document.getElementById('md-editor').innerText
|
||||||
|
minerUMarkDownUpdate({
|
||||||
|
documentId: this.documentId,
|
||||||
|
newMd: pre
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// 给文件增加色块
|
||||||
formatJson(data) {
|
formatJson(data) {
|
||||||
return data.map(item => {
|
return data.map(item => {
|
||||||
let bboxes = []
|
let bboxes = []
|
||||||
@@ -80,19 +159,24 @@ export default {
|
|||||||
},
|
},
|
||||||
// bbox 解析 传递 颜色
|
// bbox 解析 传递 颜色
|
||||||
getPDFDetailBbox() {
|
getPDFDetailBbox() {
|
||||||
minerUBbox({ documentId: 1 }).then(res => {
|
minerUBbox({ documentId: this.documentId }).then(res => {
|
||||||
this.bboxList = this.formatJson(JSON.parse(JSON.stringify(res.content.content)))
|
this.bboxList = this.formatJson(JSON.parse(JSON.stringify(res.content.content)))
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
changeTab() {
|
changeTab() {
|
||||||
let pre = document.getElementById('md-editor').innerText
|
let pre = document.getElementById('md-editor').innerText
|
||||||
this.markdownHtml = md.render(pre)
|
|
||||||
|
let copyMdHtml = md.render(pre)
|
||||||
|
console.log(copyMdHtml)
|
||||||
|
// 给 copyMdHtml 里面的table 增加 class m-view
|
||||||
|
copyMdHtml = copyMdHtml.replace(/<table/g, '<table class="m-view"')
|
||||||
|
this.markdownHtml = copyMdHtml
|
||||||
},
|
},
|
||||||
async getPDFDetailMarkDown() {
|
async getPDFDetailMarkDown() {
|
||||||
const response = await fetch(minerUMarkDown({ documentId: 1 }))
|
const response = await fetch(minerUMarkDown({ documentId: this.documentId }))
|
||||||
this.markdown = await response.text()
|
this.markdown = await response.text()
|
||||||
|
|
||||||
this.markdownHtml = this.md.render(this.markdown)
|
this.markdownHtml = this.md.render(this.markdown).replace(/<table/g, '<table class="m-view"')
|
||||||
},
|
},
|
||||||
// 向 iframe 发送消息
|
// 向 iframe 发送消息
|
||||||
sendMessageToIframe(type, message) {
|
sendMessageToIframe(type, message) {
|
||||||
@@ -113,12 +197,15 @@ export default {
|
|||||||
created() {
|
created() {
|
||||||
this.getPDFDetailBbox()
|
this.getPDFDetailBbox()
|
||||||
this.getPDFDetailMarkDown()
|
this.getPDFDetailMarkDown()
|
||||||
|
this.prdUrl = getPdfUrl({ documentId: this.documentId })
|
||||||
|
|
||||||
|
console.log(this.prdUrl)
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
// 监听 iframe 的 postMessage 事件
|
// 监听 iframe 的 postMessage 事件
|
||||||
window.addEventListener('message', event => {
|
window.addEventListener('message', event => {
|
||||||
// 检查消息来源是否合法
|
// 检查消息来源是否合法
|
||||||
if (event.origin + '/' === process.env.BASE_URL) {
|
if (event.origin === window.location.origin) {
|
||||||
// 根据消息状态执行不同操作
|
// 根据消息状态执行不同操作
|
||||||
switch (event.data.status) {
|
switch (event.data.status) {
|
||||||
case 'loaded':
|
case 'loaded':
|
||||||
@@ -136,10 +223,12 @@ export default {
|
|||||||
if (event.data.pageNumDetail) {
|
if (event.data.pageNumDetail) {
|
||||||
const pageNumDetail = event.data.pageNumDetail || 1
|
const pageNumDetail = event.data.pageNumDetail || 1
|
||||||
|
|
||||||
this.page.value = pageNumDetail
|
this.page = pageNumDetail
|
||||||
this.sendMessageToIframe('pageNumDetail', pageNumDetail)
|
this.sendMessageToIframe('pageNumDetail', pageNumDetail)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
this.viewHtmlModel()
|
||||||
},
|
},
|
||||||
computed: {}
|
computed: {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,78 +1,78 @@
|
|||||||
import layout from "@/views/app/layout/index.vue";
|
import layout from '@/views/app/layout/index.vue'
|
||||||
import redirect from "@/views/app/redirect/index.vue";
|
import redirect from '@/views/app/redirect/index.vue'
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
{
|
{
|
||||||
path: "/knowledge",
|
path: '/knowledge',
|
||||||
name: "home",
|
name: 'home',
|
||||||
component: layout,
|
component: layout,
|
||||||
redirect: "/knowledge/list",
|
redirect: '/knowledge/list',
|
||||||
meta: {
|
meta: {
|
||||||
title: "AI知识库",
|
title: 'AI知识库',
|
||||||
icon: "el-icon-s-home",
|
icon: 'el-icon-s-home',
|
||||||
affix: true
|
affix: true
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/knowledge/list",
|
path: '/knowledge/list',
|
||||||
name: "home",
|
name: 'home',
|
||||||
component: redirect,
|
component: redirect,
|
||||||
redirect: "/knowledge/list",
|
redirect: '/knowledge/list',
|
||||||
meta: {
|
meta: {
|
||||||
title: "知识库",
|
title: '知识库',
|
||||||
icon: "el-icon-s-home",
|
icon: 'el-icon-s-home',
|
||||||
affix: true
|
affix: true
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/knowledge/list",
|
path: '/knowledge/list',
|
||||||
name: "home",
|
name: 'home',
|
||||||
component: () => import("@/views/knowledge/index.vue"),
|
component: () => import('@/views/knowledge/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
breadcrumb: false,
|
breadcrumb: false,
|
||||||
title: "知识库",
|
title: '知识库',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/knowledge/detail",
|
path: '/knowledge/detail',
|
||||||
name: "detail",
|
name: 'detail',
|
||||||
component: redirect,
|
component: redirect,
|
||||||
redirect: "/knowledge/detail",
|
redirect: '/knowledge/detail',
|
||||||
hidden: true,
|
hidden: true,
|
||||||
meta: {
|
meta: {
|
||||||
title: "知识库详情",
|
title: '知识库详情',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/knowledge/knowledge-create",
|
path: '/knowledge/knowledge-create',
|
||||||
name: "knowledge-create",
|
name: 'knowledge-create',
|
||||||
component: () => import("@/views/knowledge/detail/components/knowledgeForm.vue"),
|
component: () => import('@/views/knowledge/detail/components/knowledgeForm.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
breadcrumb: false,
|
breadcrumb: false,
|
||||||
title: "知识库详情",
|
title: '知识库详情',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
path: "/knowledge/detail",
|
path: '/knowledge/detail',
|
||||||
name: "detail",
|
name: 'detail',
|
||||||
component: () => import("@/views/knowledge/detail/index.vue"),
|
component: () => import('@/views/knowledge/detail/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
breadcrumb: false,
|
breadcrumb: false,
|
||||||
title: "知识库详情",
|
title: '知识库详情',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/knowledge/detail/create",
|
path: '/knowledge/detail/create',
|
||||||
name: "create",
|
name: 'create',
|
||||||
component: () => import("@/views/knowledge/detail/create.vue"),
|
component: () => import('@/views/knowledge/detail/create.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: "知识库新增",
|
title: '知识库新增',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -80,61 +80,62 @@ export default [
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/knowledge/track",
|
path: '/knowledge/track',
|
||||||
name: "question",
|
name: 'question',
|
||||||
component: redirect,
|
component: redirect,
|
||||||
redirect: "/knowledge/track",
|
redirect: '/knowledge/track',
|
||||||
meta: {
|
meta: {
|
||||||
title: "任务轨迹",
|
title: '任务轨迹',
|
||||||
icon: "el-icon-s-home",
|
icon: 'el-icon-s-home',
|
||||||
affix: true
|
affix: true
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/knowledge/track",
|
path: '/knowledge/track',
|
||||||
name: "track",
|
name: 'track',
|
||||||
component: () => import("@/views/track/Index.vue"),
|
component: () => import('@/views/track/Index.vue'),
|
||||||
|
|
||||||
meta: {
|
meta: {
|
||||||
breadcrumb: false,
|
breadcrumb: false,
|
||||||
title: "任务轨迹",
|
title: '任务轨迹',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "/rules",
|
path: '/rules',
|
||||||
name: "rules",
|
name: 'rules',
|
||||||
component: () => import("@/views/rules/Index.vue"),
|
component: () => import('@/views/rules/Index.vue'),
|
||||||
hidden: true,
|
hidden: true,
|
||||||
meta: {
|
meta: {
|
||||||
title: "规则管理",
|
title: '规则管理',
|
||||||
|
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}, {
|
},
|
||||||
path: "/knowledge/rule",
|
{
|
||||||
name: "rule",
|
path: '/knowledge/rule',
|
||||||
|
name: 'rule',
|
||||||
component: redirect,
|
component: redirect,
|
||||||
redirect: "/knowledge/rule",
|
redirect: '/knowledge/rule',
|
||||||
meta: {
|
meta: {
|
||||||
title: "规则管理",
|
title: '规则管理',
|
||||||
icon: "el-icon-s-home",
|
icon: 'el-icon-s-home',
|
||||||
affix: true
|
affix: true
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: "/knowledge/rule",
|
path: '/knowledge/rule',
|
||||||
name: "rule",
|
name: 'rule',
|
||||||
component: () => import("@/views/rules/Index.vue"),
|
component: () => import('@/views/rules/Index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: "规则管理",
|
title: '规则管理',
|
||||||
icon: "el-icon-s-home"
|
icon: 'el-icon-s-home'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
];
|
]
|
||||||
|
|||||||
@@ -27,10 +27,6 @@
|
|||||||
</el-card>
|
</el-card>
|
||||||
|
|
||||||
<el-drawer :visible.sync="visible" size="80%" title="预处理结果预览">
|
<el-drawer :visible.sync="visible" size="80%" title="预处理结果预览">
|
||||||
<div class="mv10 mh20 text-right">
|
|
||||||
<el-button type="primary" size="medium">保存并处理</el-button>
|
|
||||||
<el-button size="medium">取消</el-button>
|
|
||||||
</div>
|
|
||||||
<div style="height:calc(100% - 55px);">
|
<div style="height:calc(100% - 55px);">
|
||||||
<r-miner-u></r-miner-u>
|
<r-miner-u></r-miner-u>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
<script>
|
<script>
|
||||||
import { deleteRule, getRuleList } from "@/api/rules/index";
|
import { deleteRule, getRuleList } from '@/api/rules/index'
|
||||||
import EditPromptRule from "./components/edit-prompt-rule/Index.vue";
|
import EditPromptRule from './components/edit-prompt-rule/Index.vue'
|
||||||
import EditSplitRule from "./components/edit-split-rule/Index.vue";
|
import EditSplitRule from './components/edit-split-rule/Index.vue'
|
||||||
import Info from "./components/info/index.vue";
|
import Info from './components/info/index.vue'
|
||||||
import { h } from "vue";
|
import { h } from 'vue'
|
||||||
import { watch } from "vue";
|
import { watch } from 'vue'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "rules",
|
name: 'rules',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
columns: [],
|
columns: [],
|
||||||
// 弹窗配置
|
// 弹窗配置
|
||||||
diglogOptions: {
|
diglogOptions: {
|
||||||
title: "",
|
title: '',
|
||||||
visible: false,
|
visible: false,
|
||||||
width: "50%",
|
width: '50%',
|
||||||
currentComponent: void 0,
|
currentComponent: void 0,
|
||||||
currentRow: void 0
|
currentRow: void 0
|
||||||
},
|
},
|
||||||
@@ -26,16 +26,16 @@ export default {
|
|||||||
form: {
|
form: {
|
||||||
query: true,
|
query: true,
|
||||||
pickerOptions: void 0,
|
pickerOptions: void 0,
|
||||||
ruleType: "",
|
ruleType: '',
|
||||||
ruleName: "",
|
ruleName: '',
|
||||||
createdDate: []
|
createdDate: []
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
provide() {
|
provide() {
|
||||||
return {
|
return {
|
||||||
diglogOptions: this.diglogOptions
|
diglogOptions: this.diglogOptions
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
EditPromptRule,
|
EditPromptRule,
|
||||||
@@ -45,129 +45,127 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
// 当前的分页数据
|
// 当前的分页数据
|
||||||
currentTableDate() {
|
currentTableDate() {
|
||||||
let filteredData;
|
let filteredData
|
||||||
// 过滤 table 列表,如果 form 相关项是空的,就不过滤
|
// 过滤 table 列表,如果 form 相关项是空的,就不过滤
|
||||||
if (this.form.query) {
|
if (this.form.query) {
|
||||||
// 过滤 ruleType
|
// 过滤 ruleType
|
||||||
const map = {
|
const map = {
|
||||||
1: "提示词规则",
|
1: '提示词规则',
|
||||||
2: "知识拆分规则"
|
2: '知识拆分规则'
|
||||||
};
|
}
|
||||||
filteredData = this.tableData.filter(item => {
|
filteredData = this.tableData.filter(item => {
|
||||||
if (!this.form.ruleType) return true;
|
if (!this.form.ruleType) return true
|
||||||
return map[item.ruleType] === this.form.ruleType;
|
return map[item.ruleType] === this.form.ruleType
|
||||||
});
|
})
|
||||||
|
|
||||||
// 过滤 ruleName
|
// 过滤 ruleName
|
||||||
filteredData = filteredData.filter(item => {
|
filteredData = filteredData.filter(item => {
|
||||||
if (!this.form.ruleName) return true;
|
if (!this.form.ruleName) return true
|
||||||
return item.ruleName === this.form.ruleName;
|
return item.ruleName === this.form.ruleName
|
||||||
});
|
})
|
||||||
|
|
||||||
// 过滤 createdDate
|
// 过滤 createdDate
|
||||||
filteredData = filteredData.filter(item => {
|
filteredData = filteredData.filter(item => {
|
||||||
if (!this.form.createdDate.length) return true;
|
if (!this.form.createdDate.length) return true
|
||||||
return item.createdDate >= this.form.createdDate[0] && item.createdDate <= this.form.createdDate[1];
|
return item.createdDate >= this.form.createdDate[0] && item.createdDate <= this.form.createdDate[1]
|
||||||
});
|
})
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
filteredData = this.tableData;
|
filteredData = this.tableData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: 分页数据
|
// TODO: 分页数据
|
||||||
const start = (this.currentPage - 1) * 10;
|
const start = (this.currentPage - 1) * 10
|
||||||
const end = this.currentPage * 10;
|
const end = this.currentPage * 10
|
||||||
return filteredData.slice(start, end);
|
return filteredData.slice(start, end)
|
||||||
},
|
},
|
||||||
// 查询表单的 ruleTypeOptions
|
// 查询表单的 ruleTypeOptions
|
||||||
ruleTypeOptions() {
|
ruleTypeOptions() {
|
||||||
const map = {
|
const map = {
|
||||||
1: "提示词规则",
|
1: '提示词规则',
|
||||||
2: "知识拆分规则"
|
2: '知识拆分规则'
|
||||||
};
|
}
|
||||||
// 去重所有 ruleType, 然后映射成 option
|
// 去重所有 ruleType, 然后映射成 option
|
||||||
const res = [...new Set(this.tableData.map(item => item.ruleType))].map(type => (map[type]));
|
const res = [...new Set(this.tableData.map(item => item.ruleType))].map(type => map[type])
|
||||||
console.log(res);
|
console.log(res)
|
||||||
|
|
||||||
return res;
|
return res
|
||||||
},
|
},
|
||||||
// 查询表单的 ruleNameOptions
|
// 查询表单的 ruleNameOptions
|
||||||
ruleNameOptions() {
|
ruleNameOptions() {
|
||||||
const res = [...new Set(this.tableData.map(item => item.ruleName))];
|
const res = [...new Set(this.tableData.map(item => item.ruleName))]
|
||||||
console.log(res);
|
console.log(res)
|
||||||
return res;
|
return res
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
watch: {
|
watch: {
|
||||||
form: {
|
form: {
|
||||||
handler() {
|
handler() {},
|
||||||
},
|
|
||||||
deep: true
|
deep: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
getRuleList().then(res => {
|
getRuleList().then(res => {
|
||||||
console.log(res);
|
console.log(res)
|
||||||
|
|
||||||
const { content } = res.content;
|
const { content } = res.content
|
||||||
console.log(content);
|
console.log(content)
|
||||||
|
|
||||||
this.tableData = content.list;
|
this.tableData = content.list
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleCurrentChange(val) {
|
handleCurrentChange(val) {
|
||||||
console.log(`current page: ${val}`);
|
console.log(`current page: ${val}`)
|
||||||
this.currentPage = val;
|
this.currentPage = val
|
||||||
},
|
},
|
||||||
// 处理查看规则详情
|
// 处理查看规则详情
|
||||||
handleInfoVisiable(row) {
|
handleInfoVisiable(row) {
|
||||||
this.diglogOptions.title = "查看规则详情";
|
this.diglogOptions.title = '查看规则详情'
|
||||||
this.diglogOptions.currentComponent = "Info";
|
this.diglogOptions.currentComponent = 'Info'
|
||||||
this.diglogOptions.visible = true;
|
this.diglogOptions.visible = true
|
||||||
this.diglogOptions.currentRow = row;
|
this.diglogOptions.currentRow = row
|
||||||
},
|
},
|
||||||
// 处理修改规则
|
// 处理修改规则
|
||||||
handleEdit(row, index) {
|
handleEdit(row, index) {
|
||||||
this.diglogOptions.title = "修改规则";
|
this.diglogOptions.title = '修改规则'
|
||||||
this.diglogOptions.currentComponent = row.ruleType === 1 ? "EditSplitRule" : "EditPromptRule";
|
this.diglogOptions.currentComponent = row.ruleType === 1 ? 'EditSplitRule' : 'EditPromptRule'
|
||||||
this.diglogOptions.visible = true;
|
this.diglogOptions.visible = true
|
||||||
this.diglogOptions.currentRow = row;
|
this.diglogOptions.currentRow = row
|
||||||
},
|
},
|
||||||
// 处理删除规则
|
// 处理删除规则
|
||||||
handleDelete(row, index) {
|
handleDelete(row, index) {
|
||||||
console.log(row, index);
|
console.log(row, index)
|
||||||
deleteRule([row.id]).then(() => {
|
deleteRule([row.id])
|
||||||
this.tableData.splice(index, 1);
|
.then(() => {
|
||||||
}).catch(err => {
|
this.tableData.splice(index, 1)
|
||||||
this.$notify.error({
|
})
|
||||||
title: "删除失败",
|
.catch(err => {
|
||||||
message: h("i", { style: "color: teal" }, "删除时出现错误,稍后再试" + err)
|
this.$notify.error({
|
||||||
});
|
title: '删除失败',
|
||||||
});
|
message: h('i', { style: 'color: teal' }, '删除时出现错误,稍后再试' + err)
|
||||||
|
})
|
||||||
|
})
|
||||||
},
|
},
|
||||||
// 处理查询
|
// 处理查询
|
||||||
handleQuery() {
|
handleQuery() {
|
||||||
this.form.query = true;
|
this.form.query = true
|
||||||
},
|
},
|
||||||
// 处理重置
|
// 处理重置
|
||||||
handleReset() {
|
handleReset() {
|
||||||
this.form = {
|
this.form = {
|
||||||
query: true,
|
query: true,
|
||||||
pickerOptions: void 0,
|
pickerOptions: void 0,
|
||||||
ruleType: "",
|
ruleType: '',
|
||||||
ruleName: "",
|
ruleName: '',
|
||||||
createdDate: []
|
createdDate: []
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
// 处理新增
|
// 处理新增
|
||||||
handleAdd() {
|
handleAdd() {
|
||||||
console.log("handleAdd");
|
console.log('handleAdd')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -186,8 +184,7 @@ export default {
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="规则类型">
|
<el-form-item label="规则类型">
|
||||||
<el-select v-model="form.ruleType" placeholder="请选择规则类型">
|
<el-select v-model="form.ruleType" placeholder="请选择规则类型">
|
||||||
<el-option v-for="item in ruleTypeOptions" :key="item" :label="item" :value="item">
|
<el-option v-for="item in ruleTypeOptions" :key="item" :label="item" :value="item"> </el-option>
|
||||||
</el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -195,16 +192,22 @@ export default {
|
|||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="规则名称">
|
<el-form-item label="规则名称">
|
||||||
<el-select v-model="form.ruleName" placeholder="请选择规则名称">
|
<el-select v-model="form.ruleName" placeholder="请选择规则名称">
|
||||||
<el-option v-for="item in ruleNameOptions" :key="item" :label="item" :value="item">
|
<el-option v-for="item in ruleNameOptions" :key="item" :label="item" :value="item"> </el-option>
|
||||||
</el-option>
|
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- 创建时间 -->
|
<!-- 创建时间 -->
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="创建时间">
|
<el-form-item label="创建时间">
|
||||||
<el-date-picker v-model="form.createdDate" type="daterange" unlink-panels range-separator="至"
|
<el-date-picker
|
||||||
start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="form.pickerOptions">
|
v-model="form.createdDate"
|
||||||
|
type="daterange"
|
||||||
|
unlink-panels
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
:picker-options="form.pickerOptions"
|
||||||
|
>
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -227,14 +230,13 @@ export default {
|
|||||||
<el-table-column prop="ruleName" label="规则名称"></el-table-column>
|
<el-table-column prop="ruleName" label="规则名称"></el-table-column>
|
||||||
<el-table-column prop="ruleType" label="规则类型">
|
<el-table-column prop="ruleType" label="规则类型">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
{{ scope.row.ruleType && scope.row.ruleType === 1 ? "提示词规则" : "知识拆分规则" }}
|
{{ scope.row.ruleType && scope.row.ruleType === 1 ? '提示词规则' : '知识拆分规则' }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="createdDate" label="创建时间"></el-table-column>
|
<el-table-column prop="createdDate" label="创建时间"></el-table-column>
|
||||||
<el-table-column label="操作">
|
<el-table-column label="操作">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button type="primary" size="mini" plain @click="handleInfoVisiable(scope.row)">查看规则详情
|
<el-button type="primary" size="mini" plain @click="handleInfoVisiable(scope.row)">查看规则详情 </el-button>
|
||||||
</el-button>
|
|
||||||
<el-button type="primary" size="mini" plain @click="handleEdit(scope.row, scope.$index)">修改</el-button>
|
<el-button type="primary" size="mini" plain @click="handleEdit(scope.row, scope.$index)">修改</el-button>
|
||||||
<el-button type="danger" size="mini" plain @click="handleDelete(scope.row, scope.$index)">删除</el-button>
|
<el-button type="danger" size="mini" plain @click="handleDelete(scope.row, scope.$index)">删除</el-button>
|
||||||
</template>
|
</template>
|
||||||
@@ -244,8 +246,14 @@ export default {
|
|||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24" class="flex" style="justify-content: right;">
|
<el-col :span="24" class="flex" style="justify-content: right;">
|
||||||
<el-pagination background layout="prev, pager, next" @current-change="handleCurrentChange"
|
<el-pagination
|
||||||
:current-page="currentPage" :hide-on-single-page="true" :total="tableData.length">
|
background
|
||||||
|
layout="prev, pager, next"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
:current-page="currentPage"
|
||||||
|
:hide-on-single-page="true"
|
||||||
|
:total="tableData.length"
|
||||||
|
>
|
||||||
</el-pagination>
|
</el-pagination>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
@@ -253,8 +261,13 @@ export default {
|
|||||||
<!-- 规则详情弹窗 -->
|
<!-- 规则详情弹窗 -->
|
||||||
<el-drawer :visible.sync="diglogOptions.visible" size="50%" :title="diglogOptions.title">
|
<el-drawer :visible.sync="diglogOptions.visible" size="50%" :title="diglogOptions.title">
|
||||||
<!-- diglog 弹窗内容组件 -->
|
<!-- diglog 弹窗内容组件 -->
|
||||||
<component v-if="diglogOptions.visible" :is="diglogOptions.currentComponent" :data="tableData" :columns="columns"
|
<component
|
||||||
:currentRow="diglogOptions.currentRow" />
|
v-if="diglogOptions.visible"
|
||||||
|
:is="diglogOptions.currentComponent"
|
||||||
|
:data="tableData"
|
||||||
|
:columns="columns"
|
||||||
|
:currentRow="diglogOptions.currentRow"
|
||||||
|
/>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getRuleDetail } from "@/api/rules/index";
|
import { getRuleDetail } from '@/api/rules/index'
|
||||||
import { updatePromptRule } from "@/api/rules/index";
|
import { updatePromptRule } from '@/api/rules/index'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'EditPromptRule',
|
name: 'EditPromptRule',
|
||||||
@@ -25,50 +25,54 @@ export default {
|
|||||||
keyword: '',
|
keyword: '',
|
||||||
example: '',
|
example: '',
|
||||||
prompt: ''
|
prompt: ''
|
||||||
};
|
}
|
||||||
|
|
||||||
this.form.ruleList.push(payload);
|
this.form.ruleList.push(payload)
|
||||||
},
|
},
|
||||||
handleDelete() {
|
handleDelete() {
|
||||||
if (this.form.ruleList.length > 0) {
|
if (this.form.ruleList.length > 0) {
|
||||||
this.form.ruleList.pop();
|
this.form.ruleList.pop()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
save() {
|
save() {
|
||||||
console.log('save this form ',this.form);
|
console.log('save this form ', this.form)
|
||||||
|
|
||||||
updatePromptRule(this.form).then(() => {
|
updatePromptRule(this.form)
|
||||||
console.log('update prompt rule success');
|
.then(() => {
|
||||||
this.diglogOptions.visible = false;
|
console.log('update prompt rule success')
|
||||||
// 可以添加成功提示
|
this.diglogOptions.visible = false
|
||||||
this.$message && this.$message.success('保存成功');
|
// 可以添加成功提示
|
||||||
}).catch(err => {
|
this.$message && this.$message.success('保存成功')
|
||||||
console.error(`update prompt rule failed: ${err}`);
|
})
|
||||||
// 可以添加错误提示
|
.catch(err => {
|
||||||
this.$message && this.$message.error('保存失败');
|
console.error(`update prompt rule failed: ${err}`)
|
||||||
});
|
// 可以添加错误提示
|
||||||
|
this.$message && this.$message.error('保存失败')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
// 获取当前行数据
|
// 获取当前行数据
|
||||||
const { currentRow } = this.diglogOptions;
|
const { currentRow } = this.diglogOptions
|
||||||
|
|
||||||
// 获取规则详情
|
// 获取规则详情
|
||||||
getRuleDetail(currentRow.id).then(res => {
|
getRuleDetail(currentRow.id)
|
||||||
const { content } = res.content;
|
.then(res => {
|
||||||
console.log('origin query request', content);
|
const { content } = res.content
|
||||||
|
console.log('origin query request', content)
|
||||||
|
|
||||||
// 一次性设置表单数据,确保响应式更新
|
// 一次性设置表单数据,确保响应式更新
|
||||||
this.form = {
|
this.form = {
|
||||||
id: content.id || currentRow.id,
|
id: content.id || currentRow.id,
|
||||||
ruleType: content.ruleType,
|
ruleType: content.ruleType,
|
||||||
ruleName: content.ruleName,
|
ruleName: content.ruleName,
|
||||||
createdDate: content.createdDate,
|
createdDate: content.createdDate,
|
||||||
ruleList: Array.isArray(content.ruleList) ? content.ruleList : []
|
ruleList: Array.isArray(content.ruleList) ? content.ruleList : []
|
||||||
};
|
}
|
||||||
}).catch(err => {
|
})
|
||||||
console.error('获取规则详情失败:', err);
|
.catch(err => {
|
||||||
});
|
console.error('获取规则详情失败:', err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@@ -113,4 +117,4 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="css" scoped></style>
|
<style lang="css" scoped></style>
|
||||||
|
|||||||
@@ -1,108 +1,112 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getRuleDetail } from "@/api/rules/index";
|
import { getRuleDetail } from '@/api/rules/index'
|
||||||
import { updateSplitRule } from "@/api/rules/index";
|
import { updateSplitRule } from '@/api/rules/index'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'sEditSplitRule',
|
name: 'sEditSplitRule',
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
// 表单数据有:规则名称、样式、提示词、备注
|
// 表单数据有:规则名称、样式、提示词、备注
|
||||||
form: {
|
form: {
|
||||||
id: '',
|
id: '',
|
||||||
ruleName: '',
|
ruleName: '',
|
||||||
ruleType: '',
|
ruleType: '',
|
||||||
ruleList: []
|
ruleList: []
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
inject: ['diglogOptions'],
|
},
|
||||||
beforeMount() {
|
inject: ['diglogOptions'],
|
||||||
// 获取当前行数据
|
beforeMount() {
|
||||||
const { currentRow } = this.diglogOptions;
|
// 获取当前行数据
|
||||||
|
const { currentRow } = this.diglogOptions
|
||||||
|
|
||||||
// 获取规则详情
|
// 获取规则详情
|
||||||
getRuleDetail(currentRow.id).then(res => {
|
getRuleDetail(currentRow.id)
|
||||||
const { content } = res.content;
|
.then(res => {
|
||||||
console.log('origin query request', content);
|
const { content } = res.content
|
||||||
|
console.log('origin query request', content)
|
||||||
// 一次性设置表单数据,确保响应式更新
|
// 一次性设置表单数据,确保响应式更新
|
||||||
this.form = {
|
this.form = {
|
||||||
id: content.id,
|
id: content.id,
|
||||||
ruleName: content.ruleName,
|
ruleName: content.ruleName,
|
||||||
ruleType: content.ruleType,
|
ruleType: content.ruleType,
|
||||||
ruleList: Array.isArray(content.ruleList) ? content.ruleList : []
|
ruleList: Array.isArray(content.ruleList) ? content.ruleList : []
|
||||||
};
|
|
||||||
}).catch(err => {
|
|
||||||
console.error('获取规则详情失败:', err);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
methods: {
|
|
||||||
handleAdd() {
|
|
||||||
// TODO: 新增数据到后端
|
|
||||||
const payload = {
|
|
||||||
titleLevel: '',
|
|
||||||
ruleRegex: '',
|
|
||||||
description: ''
|
|
||||||
};
|
|
||||||
|
|
||||||
// 使用数组方法添加元素,确保响应式更新
|
|
||||||
this.form.ruleList.push(payload);
|
|
||||||
},
|
|
||||||
handleDelete() {
|
|
||||||
// TODO: 删除数据到后端
|
|
||||||
if (this.form.ruleList.length > 0) {
|
|
||||||
this.form.ruleList.pop();
|
|
||||||
}
|
}
|
||||||
},
|
})
|
||||||
handleSave() {
|
.catch(err => {
|
||||||
// 使用正确的API保存数据到后端
|
console.error('获取规则详情失败:', err)
|
||||||
console.log(`this.form`,this.form);
|
})
|
||||||
|
},
|
||||||
|
|
||||||
updateSplitRule(this.form).then(() => {
|
methods: {
|
||||||
console.log('update split rule success');
|
handleAdd() {
|
||||||
this.diglogOptions.visible = false;
|
// TODO: 新增数据到后端
|
||||||
// 可以添加成功提示
|
const payload = {
|
||||||
this.$message && this.$message.success('保存成功');
|
titleLevel: '',
|
||||||
}).catch(err => {
|
ruleRegex: '',
|
||||||
console.error(`update split rule failed: ${err}`);
|
description: ''
|
||||||
// 可以添加错误提示
|
|
||||||
this.$message && this.$message.error('保存失败');
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 使用数组方法添加元素,确保响应式更新
|
||||||
|
this.form.ruleList.push(payload)
|
||||||
|
},
|
||||||
|
handleDelete() {
|
||||||
|
// TODO: 删除数据到后端
|
||||||
|
if (this.form.ruleList.length > 0) {
|
||||||
|
this.form.ruleList.pop()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleSave() {
|
||||||
|
// 使用正确的API保存数据到后端
|
||||||
|
console.log(`this.form`, this.form)
|
||||||
|
|
||||||
|
updateSplitRule(this.form)
|
||||||
|
.then(() => {
|
||||||
|
console.log('update split rule success')
|
||||||
|
this.diglogOptions.visible = false
|
||||||
|
// 可以添加成功提示
|
||||||
|
this.$message && this.$message.success('保存成功')
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error(`update split rule failed: ${err}`)
|
||||||
|
// 可以添加错误提示
|
||||||
|
this.$message && this.$message.error('保存失败')
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<div>
|
<div>
|
||||||
<el-form :model="form" label-width="100px">
|
<el-form :model="form" label-width="100px">
|
||||||
<el-form-item label="规则名称">
|
<el-form-item label="规则名称">
|
||||||
<el-input v-model="form.ruleName"></el-input>
|
<el-input v-model="form.ruleName"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-card v-for="(item, index) in form.ruleList" :key="index">
|
||||||
|
<el-form-item label="样式">
|
||||||
|
<el-input v-model="item.titleLevel"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-card v-for="(item, index) in form.ruleList" :key="index">
|
<el-form-item label="规则">
|
||||||
<el-form-item label="样式">
|
<el-input v-model="item.ruleRegex"></el-input>
|
||||||
<el-input v-model="item.titleLevel"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
<el-form-item label="备注">
|
||||||
<el-form-item label="规则">
|
<el-input type="textarea" v-model="item.description"></el-input>
|
||||||
<el-input v-model="item.ruleRegex"></el-input>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-card>
|
||||||
<el-form-item label="备注">
|
</el-form>
|
||||||
<el-input type="textarea" v-model="item.description"></el-input>
|
<div slot="footer" class="dialog-footer flex" style="justify-content: space-between;">
|
||||||
</el-form-item>
|
<!-- 只有当点击保存的时候才能和服务端通信新增和删除 -->
|
||||||
</el-card>
|
<div>
|
||||||
</el-form>
|
<el-button type="primary" @click="handleAdd">+ 新增拆分</el-button>
|
||||||
<div slot="footer" class="dialog-footer flex" style="justify-content: space-between;">
|
<el-button type="info" @click="handleDelete">- 删除拆分</el-button>
|
||||||
<!-- 只有当点击保存的时候才能和服务端通信新增和删除 -->
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<el-button type="primary" @click="handleAdd">+ 新增拆分</el-button>
|
<el-button @click="diglogOptions.visible = false">取 消</el-button>
|
||||||
<el-button type="info" @click="handleDelete">- 删除拆分</el-button>
|
<el-button type="primary" @click="handleSave">确 定</el-button>
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<el-button @click="diglogOptions.visible = false">取 消</el-button>
|
|
||||||
<el-button type="primary" @click="handleSave">确 定</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<style lang="css" scoped></style>
|
<style lang="css" scoped></style>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
import { getRuleDetail } from "@/api/rules/index";
|
import { getRuleDetail } from '@/api/rules/index'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'Info',
|
name: 'Info',
|
||||||
@@ -28,29 +28,23 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
save() {
|
save() {}
|
||||||
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
// 获取规则详情
|
// 获取规则详情
|
||||||
getRuleDetail(this.diglogOptions.currentRow.id).then(res => {
|
getRuleDetail(this.diglogOptions.currentRow.id).then(res => {
|
||||||
const { content } = res.content;
|
const { content } = res.content
|
||||||
console.log('origin query request', content);
|
console.log('origin query request', content)
|
||||||
// 设置表单数据
|
// 设置表单数据
|
||||||
this.form.ruleName = content.ruleName;
|
this.form.ruleName = content.ruleName
|
||||||
this.form.createdDate = content.createdDate;
|
this.form.createdDate = content.createdDate
|
||||||
// 设置表格数据
|
// 设置表格数据
|
||||||
this.tableDate.data = content.ruleList;
|
this.tableDate.data = content.ruleList
|
||||||
// 设置表格列, 有两种方式
|
// 设置表格列, 有两种方式
|
||||||
|
|
||||||
// 1. 是 提示词规则
|
// 1. 是 提示词规则
|
||||||
if (content.ruleType.toString() === '1') {
|
if (content.ruleType.toString() === '1') {
|
||||||
this.tableDate.columns = [
|
this.tableDate.columns = [{ prop: 'titleLevel', key: '样式' }, { prop: 'ruleRegex', key: '提示词' }, { prop: 'description', key: '备注' }]
|
||||||
{ prop: 'titleLevel', key: '样式' },
|
|
||||||
{ prop: 'ruleRegex', key: '提示词' },
|
|
||||||
{ prop: 'description', key: '备注' }
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
// 2. 是 拆分规则
|
// 2. 是 拆分规则
|
||||||
else if (content.ruleType.toString() === '2') {
|
else if (content.ruleType.toString() === '2') {
|
||||||
@@ -87,4 +81,4 @@ export default {
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="css" scoped></style>
|
<style lang="css" scoped></style>
|
||||||
|
|||||||
@@ -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,13 +13,13 @@ export default {
|
|||||||
tabList: [],
|
tabList: [],
|
||||||
currentPage: 1,
|
currentPage: 1,
|
||||||
form: {
|
form: {
|
||||||
knowledge: "",
|
knowledge: '',
|
||||||
knowledgeName: "",
|
knowledgeName: '',
|
||||||
uploadUser: "",
|
uploadUser: '',
|
||||||
taskStatus: "",
|
taskStatus: '',
|
||||||
taskTime: ""
|
taskTime: ''
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
methods: {
|
methods: {
|
||||||
@@ -27,26 +27,26 @@ 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.content.content.list ? res.content.content.list : []);
|
console.log(res.content.content.list ? res.content.content.list : [])
|
||||||
});
|
})
|
||||||
},
|
},
|
||||||
handleActiveInfo(scope) {
|
handleActiveInfo(scope) {
|
||||||
this.infoDialogVisible = true;
|
this.infoDialogVisible = true
|
||||||
console.log(scope.row);
|
console.log(scope.row)
|
||||||
|
|
||||||
this.activeForm = scope.row;
|
this.activeForm = scope.row
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeMount() {
|
beforeMount() {
|
||||||
console.log(`onMounted`);
|
console.log(`onMounted`)
|
||||||
this.getTableData();
|
this.getTableData()
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -57,35 +57,37 @@ export default {
|
|||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="知识库">
|
<el-form-item label="知识库">
|
||||||
<el-select v-model="form.knowledge">
|
<el-select v-model="form.knowledge"> </el-select>
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="知识文件名称">
|
<el-form-item label="知识文件名称">
|
||||||
<el-select v-model="form.knowledgeName">
|
<el-select v-model="form.knowledgeName"> </el-select>
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="上传用户">
|
<el-form-item label="上传用户">
|
||||||
<el-select v-model="form.uploadUser">
|
<el-select v-model="form.uploadUser"> </el-select>
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="任务状态">
|
<el-form-item label="任务状态">
|
||||||
<el-select v-model="form.taskStatus">
|
<el-select v-model="form.taskStatus"> </el-select>
|
||||||
</el-select>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="任务时间">
|
<el-form-item label="任务时间">
|
||||||
<el-date-picker v-model="form.taskTime" type="daterange" unlink-panels range-separator="至"
|
<el-date-picker
|
||||||
start-placeholder="开始日期" end-placeholder="结束日期">
|
v-model="form.taskTime"
|
||||||
|
type="daterange"
|
||||||
|
unlink-panels
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
>
|
||||||
</el-date-picker>
|
</el-date-picker>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
@@ -95,18 +97,12 @@ export default {
|
|||||||
<!-- 任务列表 -->
|
<!-- 任务列表 -->
|
||||||
<div>
|
<div>
|
||||||
<el-table :data="tabList" style="width: 100%">
|
<el-table :data="tabList" style="width: 100%">
|
||||||
<el-table-column prop="taskCode" label="任务号" width="180">
|
<el-table-column prop="taskCode" label="任务号" width="180"> </el-table-column>
|
||||||
</el-table-column>
|
<el-table-column prop="docTypeName" label="知识库" width="180"> </el-table-column>
|
||||||
<el-table-column prop="docTypeName" label="知识库" width="180">
|
<el-table-column prop="fileName" label="知识文件名称"> </el-table-column>
|
||||||
</el-table-column>
|
<el-table-column prop="processStatus" label="上传状态"> </el-table-column>
|
||||||
<el-table-column prop="fileName" label="知识文件名称">
|
<el-table-column prop="createdUser" label="上传用户"> </el-table-column>
|
||||||
</el-table-column>
|
<el-table-column prop="uploadDate" label="上传时间"> </el-table-column>
|
||||||
<el-table-column prop="processStatus" label="上传状态">
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="createdUser" label="上传用户">
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="uploadDate" label="上传时间">
|
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="processStatus" label="操作">
|
<el-table-column prop="processStatus" label="操作">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="primary" size="mini" @click="handleActiveInfo(scope)">查看详情</el-button>
|
<el-button type="primary" size="mini" @click="handleActiveInfo(scope)">查看详情</el-button>
|
||||||
@@ -114,8 +110,7 @@ export default {
|
|||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<!-- 弹出提示框, 里面是各种详情内容 -->
|
<!-- 弹出提示框, 里面是各种详情内容 -->
|
||||||
<el-dialog title="上传任务详情" :visible.sync="infoDialogVisible" width="50%"
|
<el-dialog title="上传任务详情" :visible.sync="infoDialogVisible" width="50%" :before-close="() => (infoDialogVisible = false)">
|
||||||
:before-close="() => infoDialogVisible = false">
|
|
||||||
<knowledge-info :form="activeForm"></knowledge-info>
|
<knowledge-info :form="activeForm"></knowledge-info>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user