mirror of
http://112.124.100.131/ebiz-ai/ebiz-ai-knowledge-manage.git
synced 2025-12-07 18:06:50 +08:00
refactor(RenderMinerU):优化表格处理和 Markdown 渲染逻辑
- 重新组织表格处理相关函数,提高代码可读性 - 优化 Markdown 渲染流程,支持 ebiz-code 标签 - 调整分页逻辑,确保正确加载和渲染 Markdown 内容 - 如果md 不包含ebiz-code 查询分页 如果包含则不查询
This commit is contained in:
@@ -206,6 +206,7 @@ export default {
|
||||
filters: {},
|
||||
methods: {
|
||||
//changePage
|
||||
// 分页发生改变时
|
||||
changePage(page) {
|
||||
let documentId = document.getElementById(`view-code-${page - 1}`)
|
||||
let viewBody = document.getElementById('viewBody')
|
||||
@@ -221,7 +222,7 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
//重新识别
|
||||
//重新识别表格
|
||||
retryMinerImage(chooseItem, loading, tableElement) {
|
||||
imageRetry({
|
||||
documentId: this.documentId,
|
||||
@@ -238,8 +239,8 @@ export default {
|
||||
})
|
||||
},
|
||||
|
||||
// 生成视觉模型
|
||||
viewHtmlModel() {
|
||||
// 生成视觉模型按钮
|
||||
generateTableButtons() {
|
||||
this.$nextTick(() => {
|
||||
const mdHtml = document.getElementById('md-editor')
|
||||
// 监听鼠标悬停事件,为表格元素添加浮层按钮
|
||||
@@ -278,7 +279,6 @@ export default {
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 封装 按钮生成事件
|
||||
generateButton(tableElement, buttonContainer, actionButtons) {
|
||||
// 获取表格的可编辑状态
|
||||
@@ -303,7 +303,6 @@ export default {
|
||||
buttonContainer.appendChild(button)
|
||||
}
|
||||
},
|
||||
|
||||
// 查找匹配的表格
|
||||
findMatchingTable(tableElement) {
|
||||
let chooseItem = null
|
||||
@@ -333,7 +332,6 @@ export default {
|
||||
}
|
||||
return chooseItem
|
||||
},
|
||||
|
||||
// 获取表格文本
|
||||
getTableText(tableElement) {
|
||||
let stringTable = tableElement.innerHTML
|
||||
@@ -345,7 +343,6 @@ export default {
|
||||
}
|
||||
return ''
|
||||
},
|
||||
|
||||
// 从 HTML 中获取表格文本
|
||||
getTableTextFromHtml(html) {
|
||||
let tableMatch = html.match(/<table>([\s\S]*)<\/table>/)
|
||||
@@ -356,15 +353,14 @@ export default {
|
||||
}
|
||||
return ''
|
||||
},
|
||||
|
||||
// 更新表格属性
|
||||
updateTableAttributes(tableElement, chooseItem) {
|
||||
tableElement.setAttribute('data-path-id', this.selectionImagePath.replace(/\.[^/.]+$/, ''))
|
||||
let fileType = this.selectionImagePath.match(/\.[^/.]+$/)[0]
|
||||
tableElement.setAttribute('data-path-type', fileType)
|
||||
},
|
||||
|
||||
linesMap(table) {
|
||||
// 获取bbox 的 表格图片生成对照表
|
||||
extractTableData(table) {
|
||||
;(table.blocks ? table.blocks : []).map(lines => {
|
||||
lines.lines.map(spans => {
|
||||
spans.spans.map(span => {
|
||||
@@ -373,12 +369,13 @@ export default {
|
||||
})
|
||||
})
|
||||
},
|
||||
setTableSelection(selection) {
|
||||
// 填充对照表
|
||||
fillSelectionTable(selection) {
|
||||
selection.map(item => {
|
||||
if (item.preproc_blocks && item.preproc_blocks.length > 0) {
|
||||
item.preproc_blocks.forEach(block => {
|
||||
if (block.type === 'table') {
|
||||
this.linesMap(block)
|
||||
this.extractTableData(block)
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -386,23 +383,21 @@ export default {
|
||||
if (item.discarded_blocks && item.discarded_blocks.length > 0) {
|
||||
item.discarded_blocks.forEach(block => {
|
||||
if (block.type === 'table') {
|
||||
this.linesMap(block)
|
||||
this.extractTableData(block)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 导出
|
||||
emitMarkDown() {
|
||||
let pre = document.getElementById('md-editor').innerText
|
||||
this.$emit('getMarkDownIt', { innerText: pre })
|
||||
},
|
||||
// 保存markdown
|
||||
saveMarkDown() {
|
||||
let pre = document.getElementById('md-editor').innerHTML
|
||||
|
||||
// pre + ebiz-code标签
|
||||
|
||||
minerUMarkDownUpdate({
|
||||
documentId: this.documentId,
|
||||
newMd: pre
|
||||
@@ -446,14 +441,15 @@ export default {
|
||||
minerUBbox({ documentId: this.documentId }).then(res => {
|
||||
this.bboxList = this.formatJson(JSON.parse(JSON.stringify(res.content.content)))
|
||||
|
||||
this.setTableSelection(JSON.parse(JSON.stringify(res.content.content)))
|
||||
this.fillSelectionTable(JSON.parse(JSON.stringify(res.content.content)))
|
||||
// this.$refs.iframe 重新刷新iframe
|
||||
this.$refs.iframe.contentWindow.location.reload()
|
||||
this.getMdPage()
|
||||
|
||||
this.getPDFDetailMarkDown()
|
||||
})
|
||||
},
|
||||
|
||||
getMdPage() {
|
||||
// 获取md分页
|
||||
getMdPage(back) {
|
||||
let responseText = ''
|
||||
getMd_info({ documentId: this.documentId }).then(async res => {
|
||||
if (res) {
|
||||
@@ -465,14 +461,24 @@ export default {
|
||||
responseText += `<ebiz-code id='ebiz-code-${i}'></ebiz-code>
|
||||
${text}`
|
||||
}
|
||||
this.getPDFDetailMarkDown(responseText)
|
||||
back(responseText)
|
||||
}
|
||||
})
|
||||
},
|
||||
// 渲染markdown
|
||||
renderMarkDown() {
|
||||
this.markdown = this.markdown
|
||||
.replace(/<table/g, () => {
|
||||
const uniqueId = `table-${this.tableIdCounter++}`
|
||||
return `<table contenteditable='false' class="m-view"`
|
||||
})
|
||||
.replace(/<script/g, '< script')
|
||||
|
||||
this.markdownHtml = this.md.render(this.markdown.replace(/class="m-view"/g, '').replace(/ebiz-code/g, 'view-code'))
|
||||
},
|
||||
// tab 切换
|
||||
changeTab(evt) {
|
||||
let editor = document.getElementById('md-editor')
|
||||
|
||||
// pre 获取 table的html 给table 增加 对照表的path id
|
||||
let pre = editor.innerHTML
|
||||
let tables = editor.querySelectorAll('table')
|
||||
@@ -491,30 +497,24 @@ ${text}`
|
||||
// 给 copyMdHtml 里面的table 增加 class m-view
|
||||
// copyMdHtml = copyMdHtml.re
|
||||
this.markdownHtml = md.render(pre.replace(/class="m-view"/g, '').replace(/ebiz-code/g, 'view-code'))
|
||||
|
||||
setTimeout(() => {
|
||||
this.changePage(this.page, evt)
|
||||
}, 100)
|
||||
},
|
||||
// 初始md 文档
|
||||
async getPDFDetailMarkDown(responseText) {
|
||||
async getPDFDetailMarkDown() {
|
||||
// responseText 判断是否包含ebiz-code
|
||||
const response = await fetch(minerUMarkDown({ documentId: this.documentId }))
|
||||
this.markdown = await response.text()
|
||||
// this.markdown 包含 ebiz-code
|
||||
if (this.markdown.indexOf('<ebiz-code ') < 0) {
|
||||
this.markdown = responseText
|
||||
}
|
||||
|
||||
this.markdown = this.markdown
|
||||
.replace(/<table/g, () => {
|
||||
const uniqueId = `table-${this.tableIdCounter++}`
|
||||
return `<table contenteditable='false' class="m-view"`
|
||||
this.getMdPage(responseText => {
|
||||
this.markdown = responseText
|
||||
this.renderMarkDown()
|
||||
})
|
||||
.replace(/<script/g, '< script')
|
||||
|
||||
let text = this.markdown
|
||||
this.markdownHtml = this.md.render(this.markdown.replace(/class="m-view"/g, '').replace(/ebiz-code/g, 'view-code'))
|
||||
} else {
|
||||
this.renderMarkDown()
|
||||
}
|
||||
},
|
||||
// 向 iframe 发送消息
|
||||
sendMessageToIframe(type, message) {
|
||||
@@ -531,7 +531,6 @@ ${text}`
|
||||
)
|
||||
}
|
||||
},
|
||||
|
||||
// 获取识别状态
|
||||
getMinerUStatus() {
|
||||
this.finishedMiner = true
|
||||
@@ -606,7 +605,7 @@ ${text}`
|
||||
}
|
||||
})
|
||||
|
||||
this.viewHtmlModel()
|
||||
this.generateTableButtons()
|
||||
},
|
||||
computed: {}
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ export default {
|
||||
name: 'create',
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
visible: true,
|
||||
active: 0,
|
||||
documentId: '1363864715567140864'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user