export const projectData = { props: { // 视图数据源 tableData: { type: Array, default: () => { return [] } }, // 分页信息 queryParams: { type: Object, default: () => { return { current: 1, size: 10 } } }, // 栏位 column: { type: Array, default: () => { return [] } }, //专利号 projectId: { default: 0 }, //选择专利 refresh: { default: false }, patentNoList: { type: Array, default: () => { return [] } }, outside: { default: false }, }, data() { return { } }, mounted() { }, methods: { // 点击专利号 handleClick(row, index) { var location = (index + 1) + ((this.queryParams.current - 1) * this.queryParams.size) this.$emit('clickPatentNo', row, location) }, changeSelect(patent) { const index1 = this.patentNoList.indexOf(patent.patentNo) if (index1 === -1) { this.patentNoList.push(patent.patentNo) } else { this.patentNoList.splice(index1, 1) } this.$emit('addSelect', patent.patentNo) } }, } import { mapGetters } from "vuex" export const handleData = { // mixins: [highlight], props: { }, data() { return { //专利类型 patentType: { 1: '发明', 8: '发明', 2: '实用新型', 9: '实用新型', 3: '外观', }, // 专利状态 simpleStatus: { 1: '有效', 2: '无效', 3: '审中', }, // 法律状态(暂定) legalStatus: { 1: '有效', 2: '无效', 3: '审中', }, } }, computed: { ...mapGetters(['highlight']) }, mounted() { }, methods: { getCustomView(row,field){ var data = row.customFields if(data && data.length>0){ var fieldId = field.value var fieldType = field.type var obj = data.find(item=>{ return item.field == fieldId && item.fieldType == fieldType }) if(obj){ var arr = obj.fieldValueVOS var text = arr.map(item=>item.value).join('
') return this.getViewDom(text, null) } return '' } return '' }, getView(row, key, type, prop, data) { var obj = { type: type ? type : 'String', value: key } if (row) { const change2 = row.change2 const change = row.change switch (key) { case "title": // prop = !change ? "content" : "contentOut" // obj.type = 'Object' var arr = row.title if (!arr) { text = '' break } if (!change) { var obj = arr.find(item => { return item.if_origin }) var text = '' if (obj) { text = obj.text_content } } else { var obj = arr.find(item => { return !item.if_origin && item.language == 'CN' }) var text = '' if (obj) { text = obj.text_content } } break case "abstractStr": // prop = !change2 ? "content" : "contentOut" // obj.type = 'Object' var arr = row.abstractStr if (!arr) { text = '' break } if (!change2) { var obj = arr.find(item => { return item.if_origin }) var text = '' if (obj) { text = obj.text_content } } else { var obj = arr.find(item => { return !item.if_origin && item.language == 'CN' }) var text = '' if (obj) { text = obj.text_content } } break; case "mipc"://ipc case 'inventor'://发明人 case 'applicant'://申请人 case 'rightHolder'://权利人 let ipcArr = [] for (let k in row[key]) { ipcArr.push(row[key][k]) } // row[`${key}2`] = ipcArr // obj.value = `${key}2` // obj.type = 'Array' // var text = this.$commonJS.getColumnData(row, obj, prop, data) var text = ipcArr.join('、') break; case 'legalStatus'://法律状态 case 'simpleStatus'://专利状态 case 'patentType'://专利类型 var text = this[key][row[key]] break; default: var text = this.$commonJS.getColumnData(row, obj, prop, data) break } // var text = this.$commonJS.getColumnData(row, obj, prop, data) // console.log(text,key); return this.getViewDom(text, type) } }, getViewDom(text, field,) { if (!text) { return "" } var obj = null switch (field) { case '权利要求原文': obj = text.find(item => { return item.if_origin }) if(obj){ var currentText = obj.text_content text = currentText.replace(/(\t)+/g,'
') }else{ text = '' } break; case '权利要求译文': obj = text.find(item => { return item.if_origin == false }) if(obj){ var currentText = obj.text_content text = currentText.replace(/(\t)+/g,'
') }else{ text = '' } break; case '说明书文本原文': obj = text.find(item => { return item.if_origin }) if(obj){ text = obj.text_content.replace(/(\r\n)+/g,'
') }else { text = '' } break; case '说明书文本译文': obj = text.find(item => { return item.if_origin == false }) if(obj){ text = obj.text_content.replace(/(\r\n)+/g,'
') }else { text = '' } break; default: break; } if (!text) { return "" } if (this.patent && this.patent.patentNo && field) { // SET_PATENT_OPINION_CONTRAST var arr = ['piZhuContrastList', 'contrastList', 'opinionContrastList'] arr.forEach((item, index) => { if (this.highlight[item].length > 0) { text = this.getObject(item, index, text, field) } }); } if (!this.highlight.patentHightLight.ifEnable || !text) { return text } try { this.highlight.patentHightLight.configs.map(item => { const keywords = item.keywords.split(';') for (let keyword of keywords) { if (!keyword) { continue } let sText = text let num = -1 const rStr = new RegExp(keyword, "g") const rHtml = new RegExp("\<.*?\>", "ig") const sKey = `${keyword}` const aHtml = sText.match(rHtml) sText = sText.replace(rHtml, '{~}') sText = sText.replace(rStr, sKey) sText = sText.replace(/{~}/g, () => { num++ return aHtml[num] }) text = sText } }) } catch (e) { } // console.log(text); return text }, getObject(key, index, text, field) { var arr1 = ['color', 'Type', 'Id', 'column', 'index', 'text', 'remark', 'temNode', 'selectType'] var obj = { // 'piZhuContrastList': ['color', 'scratchType', 'id', 'scratchField', 'position', 'text', 'remark'], 'piZhuContrastList': ['markColor', 'markType', 'id', 'markSelectField', 'markSite', 'markSelectText', 'markNoteText'], 'contrastList': ['markColor', 'markType', 'id', 'fieldName', 'position', 'evidenceText'], // 'opinionContrastList': ['color', 'scratchType', 'id', 'scratchField', 'position', 'content'], 'opinionContrastList': ['markColor', 'markType', 'id', 'scratchField', 'position', 'content'], } var selectType = ['p', 'c', 'o'] var row = this.highlight[key] if (row.length > 0) { for (let i = 0; i < row.length; i++) { if (row[i].patentNo == this.patent.patentNo || (key == 'contrastList'&& (this.patent.patentNo != this.signPatentNo) && this.evidence && row[i].literatureId == this.evidence.id)) { if (row[i][obj[key][3]].indexOf(field) != -1) { var a = {} a.Type = 1 obj[key].forEach((item, index1) => { if (item) { if (arr1[index1] == 'index') { a[arr1[index1]] = Number(row[i][item]) } else { a[arr1[index1]] = row[i][item] } } }); a.temNode = text a.selectType = selectType[index] text = this.AddClass1(a); } } } return text } }, //切换原文译文 handleChange(row, key) { if(!this.haveTranslatedText(row, key)){ this.$message.warning('无译文') return } switch (key) { case "title": this.$set(row, 'change', !row.change) break case "abstractStr": this.$set(row, 'change2', !row.change2) // row.change2 = !row.change2 break } }, //判断是否有译文 haveTranslatedText(row,key){ var arr = row[key] if (!arr) { return '' } var obj = arr.find(item => { return !item.if_origin && item.language == 'CN' }) var text = '' if (obj) { text = obj.text_content } return text }, }, } export const highlight = { data() { return { } }, computed: { // piZhuContrastList() { // return this.$store.state.highlight.piZhuContrastList // }, // contrastList() { // return this.$store.state.highlight.contrastList // }, // opinionContrastList() { // return this.$store.state.highlight.opinionContrastList // }, }, mounted() { window.mouseenter1 = this.mouseenter1 window.mouseleave1 = this.mouseleave1 }, methods: { mouseenter1(e, id, selectType) { var dom = document.getElementsByClassName(id) var message = this.getMessage(id, selectType) // 普通for循环可以拿到dom节点,forEach是拿不到dom节点 for (let i = 0; i < dom.length - 1; i++) { dom[i].classList.add('greenColor') this.getChildNodesAdd(dom[i].childNodes) } // e.target是获取当前的,dom获取的是所有的class相同的节点 e.target.parentNode.classList.add("pizhuLightHeigh"); if (message.remark) { e.target.parentNode.appendChild(this.addPara(message.remark, e)); } }, getMessage(id, selectType) { var Id = id.substring(1, id.length) var messageItem = {} if (selectType == 'p') {//批注 var messageItem = this.highlight.piZhuContrastList.find(item => { return item.id == Id }) } else if (selectType == 'c') {//对比 var messageItem = this.highlight.contrastList.find(item => { return item.id == Id }) } else if (selectType == 'o') {// var messageItem = this.highlight.opinionContrastList.find(item => { return item.id == Id }) } return messageItem }, // 添加背景色 getChildNodesAdd(dom) { if (dom.length > 0) { for (let m = 0; m < dom.length; m++) { if (dom[m].nodeType == 1) { dom[m].classList.add('greenColor') } if (dom[m].childNodes.length > 0) { this.getChildNodesAdd(dom[m].childNodes) } } } }, addPara(val, e) { //创建div标签 var p = document.createElement("div"); //添加class p.classList.add('showPiZhu') if (e.clientY - 200 < 200 && e.clientX + 200 > document.documentElement.clientWidth) { p.setAttribute('style', 'left:-200px') } else if ((e.clientX + 200 > document.documentElement.clientWidth && e.clientY + 200 > document.documentElement.clientHeight) || e.clientX + 200 > document.documentElement.clientWidth) { p.setAttribute('style', 'bottom:25px;left:-200px;') } else if ((e.clientY + 200 > document.documentElement.clientHeight && e.clientX - 200 < 200) || (e.clientY + 200 > document.documentElement.clientHeight && e.clientX - 200 > 200)) { p.setAttribute('style', 'bottom:20px;left:10px') } //创建文本节点 var text = document.createTextNode(val); //将文本节点追加到元素节点中 p.appendChild(text); return p }, mouseleave1(e, id, selectType) { var dom = document.getElementsByClassName(id) e.target.parentNode.classList.remove("pizhuLightHeigh"); var message = this.getMessage(id, selectType) if (message.remark) { document.getElementsByClassName('showPiZhu')[0].remove() } for (let i = 0; i < dom.length - 1; i++) { dom[i].classList.remove('greenColor') this.getChildNodesRemove(dom[i].childNodes) } }, // 删除背景色 getChildNodesRemove(dom) { if (dom.length > 0) { for (let m = 0; m < dom.length; m++) { if (dom[m].nodeType == 1) { dom[m].classList.remove('greenColor') } if (dom[m].childNodes.length > 0) { this.getChildNodesRemove(dom[m].childNodes) } } } }, AddClass1(selectObject) { let el = selectObject.temNode; // 将当前页面获取到的字符串进行处理,返回当前页面所有的标签及文本 var splitStrings = this.SplitHtmlTag1(el); let bgColor = selectObject.color; if (!bgColor) { selectObject.color = 'yellow' } // 添加线及高亮(2:波浪线,0:下划线,1:高亮) var style = '' switch (selectObject.Type + '') { case '0'://下划线 style = `text-decoration-line: underline;text-decoration-color: ${selectObject.color}` break; case '1'://高亮 style = `background-color:${selectObject.color}` break; case '2'://波浪线 style = `text-decoration-line: underline;text-decoration-style: wavy ;text-decoration-color: ${selectObject.color}` break; case '5'://加粗 style = `font-weight: bold;` break; } let startTag = `` //图标 var a = 'icon-xinxi3' switch (selectObject.selectType) { case 'p'://批注 a = 'iconfont icon-xinxi3' break; case 'c'://对比 a = 'el-icon-location-outline' break; case 'o'://陈述意见 a = 'iconfont icon-xinxi2' break; case 'r'://特征 break } var imgTag = `` if (selectObject.selectType == 'r') {//特征 imgTag = `` } if(!selectObject.selectType){ imgTag = '' } let endTag = ''; let elText = ''; splitStrings.forEach(function (item) { if (item.type == 'text') { elText = elText + item.text; } }); let Indexs = []; let i = 0 if (selectObject.index < 0) { let pattern = new RegExp(selectObject.text.replace(/[\r\n]/g, "").replace(/\ +/g, ""), "g"); while ((match = pattern.exec(elText)) != null) { Indexs[i] = match; i++; } } else { Indexs[i] = [selectObject.text]; Indexs[i].index = selectObject.index; } Indexs.forEach(function (match) { let currentIndex = 0; let temSplitStrings = new Array(); splitStrings.forEach(function (item) { if (item.type == 'text') { if (item.text) { if (match.index >= currentIndex && match.index < (currentIndex + item.text.length)) { if ((match.index + match[0].length) <= (currentIndex + item.text.length) && item.text.indexOf(match[0]) != -1) { if (match.index > currentIndex) { temSplitStrings.push({ text: item.text.substring(0, match.index - currentIndex), type: 'text' }); } temSplitStrings.push({ text: startTag, type: 'tag' }); temSplitStrings.push({ text: match[0], type: 'text' }); temSplitStrings.push({ text: imgTag, type: 'tag' }); // } temSplitStrings.push({ text: endTag, type: 'tag' }); if ((match.index + match[0].length) < (currentIndex + item.text.length)) { temSplitStrings.push({ text: item.text.substring((match.index + match[0].length) - currentIndex), type: 'text' }); } } else { if (item.text.indexOf(match[0]) != -1) { if (match.index > currentIndex) { temSplitStrings.push({ text: item.text.substring(0, match.index - currentIndex), type: 'text' }); } if (temSplitStrings.length > 1) { temSplitStrings.push({ text: startTag, type: 'tag' }); } else { temSplitStrings.push({ text: startTag, type: 'tag' }); } temSplitStrings.push({ text: item.text.substring(match.index - currentIndex), type: 'text' }); temSplitStrings.push({ text: endTag, type: 'tag' }); } else { // console.log(temSplitStrings,match.index,item.text,currentIndex,match[0]) // debugger temSplitStrings.push({ text: item.text.substring(0, match.index - currentIndex), type: 'text' }); temSplitStrings.push({ text: startTag, type: 'tag' }); temSplitStrings.push({ text: item.text.substring(match.index - currentIndex, item.text.length), type: 'text' }); // temSplitStrings.push({ text: imgTag, type: 'tag' }); temSplitStrings.push({ text: endTag, type: 'tag' }); // return false // temSplitStrings.push(item); } } } else { if ((match.index + match[0].length) <= (currentIndex + item.text.length) && (match.index + match[0].length) > currentIndex) { temSplitStrings.push({ text: startTag, type: 'tag' }); temSplitStrings.push({ text: item.text.substring(0, match.index + match[0].length - currentIndex), type: 'text' }); temSplitStrings.push({ text: imgTag, type: 'tag' }); temSplitStrings.push({ text: endTag, type: 'tag' }); if ((match.index + match[0].length) < (currentIndex + item.text.length)) { temSplitStrings.push({ text: item.text.substring((match.index + match[0].length - currentIndex)), type: 'text' }); } } else { if (match.index < currentIndex && (match.index + match[0].length) >= (currentIndex + item.text.length)) { temSplitStrings.push({ text: startTag, type: 'tag' }); temSplitStrings.push(item); temSplitStrings.push({ text: endTag, type: 'tag' }); } else { temSplitStrings.push(item); } } } currentIndex = currentIndex + item.text.length; } else { temSplitStrings.push(item); } } else { temSplitStrings.push(item); } }); splitStrings = temSplitStrings; }); let temInnerHtml = ''; splitStrings.forEach(function (item) { temInnerHtml = temInnerHtml + item.text; }); return temInnerHtml; }, SplitHtmlTag1(el) { let temInnerHtml = el.trim(); let pattern = /<[^>]+>/g; let Indexs = []; let i = 0 var match = null while ((match = pattern.exec(temInnerHtml)) != null) { Indexs[i] = match; i++; } var splitStrings = new Array(); i = 0; var currentIndex = 0; for (var index = 0; index < Indexs.length; index++) { if (Indexs[index].index > currentIndex) { splitStrings[i] = { "text": temInnerHtml.substring(currentIndex, Indexs[index].index), "type": "text" }; i++; splitStrings[i] = { "text": Indexs[index][0], "type": "tag" }; i++; } else { splitStrings[i] = { "text": Indexs[index][0], "type": "tag" }; i++; } currentIndex = Indexs[index].index + Indexs[index][0].length; } if (currentIndex < temInnerHtml.length) { splitStrings[i] = { "text": temInnerHtml.substring(currentIndex, temInnerHtml.length), "type": "text" }; } return splitStrings; }, }, }