|
@@ -1,6 +1,7 @@
|
|
|
import BaseModel from '../../../core/base'
|
|
|
import useSummaryModel from '../transform/summary'
|
|
|
import useCommonTitleModel from '../transform/content'
|
|
|
+import { replaceKeyword } from '@jy/util'
|
|
|
|
|
|
class ContentModel extends BaseModel {
|
|
|
constructor(config) {
|
|
@@ -23,8 +24,87 @@ class ContentModel extends BaseModel {
|
|
|
if (data?.abstract) {
|
|
|
result.summary = useSummaryModel().transformModel(data)
|
|
|
}
|
|
|
+
|
|
|
+ if (result.content) {
|
|
|
+ result.content.titleHighlighted = this.highlightTitleHTML(result.content.title, data, result)
|
|
|
+ result.content.contentHighlighted = this.highlightContentHTML(result.content.content, data, result)
|
|
|
+ }
|
|
|
return result
|
|
|
}
|
|
|
+
|
|
|
+ // 高亮标题
|
|
|
+ highlightTitleHTML (title, data, formatted) {
|
|
|
+ if (!title) return ''
|
|
|
+ const { baseInfo } = data
|
|
|
+ const projectName = baseInfo?.projectName
|
|
|
+ const projectCode = baseInfo?.projectCode
|
|
|
+ // 下划线高亮项目名称编号
|
|
|
+ if (projectName && title.toLowerCase().indexOf(projectName.toLowerCase()) > -1) {
|
|
|
+ title = replaceKeyword(title, projectName, '<span class="keyword keyword-underline project project-name hide-underline">$1</span>')
|
|
|
+ }
|
|
|
+ if (projectCode && title.toLowerCase().indexOf(projectCode.toLowerCase()) > -1) {
|
|
|
+ title = replaceKeyword(title, projectCode, '<span class="keyword keyword-underline project project-code">$1</span>')
|
|
|
+ }
|
|
|
+
|
|
|
+ // ------------------
|
|
|
+ // 关键词高亮
|
|
|
+ let highlightKeys = []
|
|
|
+ if (formatted.content && formatted.content.highlightKeys) {
|
|
|
+ highlightKeys = formatted.content.highlightKeys
|
|
|
+ }
|
|
|
+ highlightKeys.forEach((key) => {
|
|
|
+ title = replaceKeyword(title, key, '<span class="keyword highlight-text">$1</span>')
|
|
|
+ })
|
|
|
+ return title
|
|
|
+ }
|
|
|
+
|
|
|
+ // 高亮内容文本
|
|
|
+ highlightContentHTML(content, data, formatted) {
|
|
|
+ if (!content) return ''
|
|
|
+ const { baseInfo } = data
|
|
|
+ const { summary } = formatted
|
|
|
+ const projectName = baseInfo?.projectName
|
|
|
+ const projectCode = baseInfo?.projectCode
|
|
|
+
|
|
|
+ content = content.replace(/[^\{\u4e00-\u9fa5]{1,90}{[^\}\u4e00-\u9fa5]+?}/g, '')
|
|
|
+ // 高亮第三方服务
|
|
|
+ if (content) {
|
|
|
+ // content = thirdPartyVerify.replaceKeys(content)
|
|
|
+ }
|
|
|
+ // 下划线高亮项目名称编号
|
|
|
+ if(projectName && content.toLowerCase().indexOf(projectName.toLowerCase()) > -1){
|
|
|
+ content = replaceKeyword(content, projectName, '<span class="keyword keyword-underline my-follow project project-name hide-underline">$1</span>')
|
|
|
+ }
|
|
|
+ if(projectCode && content.toLowerCase().indexOf(projectCode.toLowerCase()) > -1){
|
|
|
+ content = replaceKeyword(content, projectCode, '<span class="keyword keyword-underline my-follow project project-code">$1</span>')
|
|
|
+ }
|
|
|
+ // 下划线高亮中标企业
|
|
|
+ const winners = summary.winners
|
|
|
+ if (Array.isArray(winners) && winners.length > 0) {
|
|
|
+ for (let i = 0; i < winners.length; i++) {
|
|
|
+ const winnerName = winners[i].name
|
|
|
+ const winnerId = winners[i].id
|
|
|
+ if (winnerName && content.toLowerCase().indexOf(winnerName.toLowerCase()) > -1) {
|
|
|
+ content = replaceKeyword(content, winnerName, `<span data-eid='${winnerId}' class='keyword keyword-underline winner-name my-follow-ent'>$1</span>`)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 表格兼容
|
|
|
+ if(content.length > 10 && content.substring(0,6).toLowerCase() === '<tbody' && content.substring(content.length-8).toLowerCase() == '</tbody>'){
|
|
|
+ content = '<table>' + content + '</table>'
|
|
|
+ }
|
|
|
+
|
|
|
+ // ------------------
|
|
|
+ // 关键词高亮
|
|
|
+ let highlightKeys = []
|
|
|
+ if (formatted.content && formatted.content.highlightKeys) {
|
|
|
+ highlightKeys = formatted.content.highlightKeys
|
|
|
+ }
|
|
|
+ highlightKeys.forEach((key) => {
|
|
|
+ content = replaceKeyword(content, key, '<span class="keyword highlight-text">$1</span>')
|
|
|
+ })
|
|
|
+ return content
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|