Jelajahi Sumber

Merge branch 'product' of http://1.116.113.26:8088/zhuliu/xiaoshi_system into product

zhuhao 1 tahun lalu
induk
melakukan
8d39a8be43
36 mengubah file dengan 1587 tambahan dan 348 penghapusan
  1. 16 0
      src/api/newApi/common.js
  2. 5 2
      src/api/newApi/task.js
  3. 39 0
      src/assets/css/tag.scss
  4. TEMPAT SAMPAH
      src/assets/css/tag1.png
  5. TEMPAT SAMPAH
      src/assets/css/tag2.png
  6. TEMPAT SAMPAH
      src/assets/img/tag1.png
  7. TEMPAT SAMPAH
      src/assets/img/tag2.png
  8. 1 0
      src/main.js
  9. 15 3
      src/utils/common.js
  10. 62 0
      src/utils/model/RichText/customMenu.vue
  11. 145 42
      src/utils/model/RichText/index.vue
  12. 757 0
      src/utils/model/RichText/mixins.js
  13. 11 2
      src/views/components/dialog/fields.vue
  14. 1 1
      src/views/patentMining/components/details/components/projectPath.vue
  15. 1 1
      src/views/patentMining/components/excavateTask/index.vue
  16. 12 15
      src/views/patentMining/components/fileMessage.vue
  17. 6 1
      src/views/patentMining/components/view/commonTable.vue
  18. 25 1
      src/views/project/patentCollection/components/mixins/index.js
  19. 9 4
      src/views/project/patentCollection/components/views/Abstract.vue
  20. 14 12
      src/views/project/patentCollection/components/views/Picture.vue
  21. 3 3
      src/views/project/patentCollection/components/views/Table.vue
  22. 54 6
      src/views/project/patentDetails/components/PatentField.vue
  23. 1 1
      src/views/project/patentDetails/components/patentDetails.vue
  24. 1 1
      src/views/project/patentDetails/components/patentMessage/PatentBasic.vue
  25. 2 2
      src/views/project/patentDetails/components/patentMessage/PatentImage.vue
  26. 28 2
      src/views/project/patentDetails/components/patentMessage/PatentInstruction.vue
  27. 36 0
      src/views/project/patentDetails/components/patentMessage/PatentRight.vue
  28. 1 1
      src/views/project/patentDetails/components/patentMessage/mixins/index.js
  29. 1 1
      src/views/project/patentDetails/components/patentMessage/pageProduct.vue
  30. 16 3
      src/views/report/InvalidResponse/components/dialog/addEvidenceReason.vue
  31. 15 2
      src/views/report/InvalidResponse/components/dialog/addInvalidResponse.vue
  32. 58 212
      src/views/report/InvalidResponse/components/reasonsAndEvidence/details.vue
  33. 246 23
      src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue
  34. 4 5
      src/views/task/components/index.vue
  35. 1 1
      src/views/task/index.vue
  36. 1 1
      src/views/visual/title/index.vue

+ 16 - 0
src/api/newApi/common.js

@@ -268,4 +268,20 @@ export default {
   },
   
 
+  /**
+  * 官方无效显示栏位
+  * @param {*} data 
+  * @returns 
+  */
+  getEvidenceReasonTableColumns(data) {
+    return axios.post("/xiaoshi/personField/getEvidenceReasonTableColumns", data);
+  }, 
+  /**
+    * 官方无效显示栏位
+    * @param {*} data 
+    * @returns 
+    */
+  setEvidenceReasonTableColumns(data) {
+    return axios.post("/xiaoshi/personField/setEvidenceReasonTableColumns", data);
+  }, 
 };

+ 5 - 2
src/api/newApi/task.js

@@ -53,8 +53,11 @@ export default {
   /**
    * 专利挖掘文件列表查询
    */
+  // queryPatentDigProjectFiles(data) {
+  //   return axios.post("/xiaoshi/patentDigProjectFiles/queryPatentDigProjectFiles", data);
+  // },
   queryPatentDigProjectFiles(data) {
-    return axios.post("/xiaoshi/patentDigProjectFiles/queryPatentDigProjectFiles", data);
+    return axios.post("/xiaoshi/patentDigProjectFiles/query", data);
   },
   /**
    * 专利挖掘文件列表删除
@@ -87,7 +90,7 @@ export default {
     return axios.get("/xiaoshi/projectTask/updateTaskStatus", {params});
   },
   /**
-   * 查询专利挖掘流程节点相关的任务/文件数量
+   * 查询专利挖掘所属流程相关的任务/文件数量
    */
   getCountOfProcess(params) {
     return axios.get("/xiaoshi/patentDigProjectFiles/getCountOfProcess", {params});

+ 39 - 0
src/assets/css/tag.scss

@@ -0,0 +1,39 @@
+/*1点线*/
+dot {
+    position: relative;
+  }
+  dot:before {
+    position: absolute;
+    content: "";
+    width: 100%;
+    height: 4px;
+    bottom: -4px;
+    left: 0;
+    background: url(../img/tag1.png) repeat-x 0 center;
+  }
+  /*单线*/
+  underlineSingle {
+    border-bottom: 1px solid #000;
+  }
+  /*双线*/
+  underlineDouble {
+    position: relative;
+  }
+  underlineDouble:before {
+    position: absolute;
+    content: "";
+    width: 100%;
+    height: 5px;
+    bottom: -3px;
+    left: 0;
+    background: url(../img/tag2.png) repeat-x 0 center;
+  }
+  /*粗线*/
+  underlineThick {
+    border-bottom: 3px solid #000;
+  }
+  
+  /*高亮*/
+  Highlight{
+    background: yellow;
+  }

TEMPAT SAMPAH
src/assets/css/tag1.png


TEMPAT SAMPAH
src/assets/css/tag2.png


TEMPAT SAMPAH
src/assets/img/tag1.png


TEMPAT SAMPAH
src/assets/img/tag2.png


+ 1 - 0
src/main.js

@@ -21,6 +21,7 @@ import "@/icons/icon/iconfont.css"
 import "@/icons/icon2/iconfont.css"
 import "@/assets/css/theme.css"
 import "@/assets/css/main.scss"
+import "@/assets/css/tag.scss"
 
 
 //专利数据库权限、报告的权限、是否有功能权限

+ 15 - 3
src/utils/common.js

@@ -335,13 +335,25 @@ export default {
       )
   },
 
-  //查看显示栏位管理
-  async getCustomField(type, patentObj = {}) {
+  /**
+   * 查看显示栏位管理
+   * @param {*} type //表格类型
+   * @param {*} patentObj 参数配置
+   * @param {*} url 接口名称
+   * @returns 
+   */
+  async getCustomField(type, patentObj = {},url) {
     var params = {
       tableName: type,
       ...patentObj,
     }
-    let apiItem = Object.keys(patentObj).length > 0 ? 'getTableColumns':'getCustomField'
+    var apiItem = ''
+    if(url){
+      apiItem = url
+    }else{
+      apiItem = Object.keys(patentObj).length > 0 ? 'getTableColumns':'getCustomField'
+    }
+    
     var a = []
     await api[apiItem](params).then((response) => {
       if (response.code == 200) {

+ 62 - 0
src/utils/model/RichText/customMenu.vue

@@ -0,0 +1,62 @@
+<template>
+    <div id="customMenu" ref="customMenu">
+        <ul v-for="item in this.menu" :key="item.name">
+            <li @click="clickBtn(item.method)">{{ item.name }}</li>
+        </ul>
+    </div>
+</template>
+
+<script>
+export default {
+  components: {},
+  props: {},
+  data() {
+    return {
+        menu:[]
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {
+    open(style,menu){
+        if(menu){
+            this.menu = menu
+        }else{
+            this.menu = [
+                {
+                    name: "波浪线",
+                    method: "wave",
+                },
+                {
+                    name: "下划线",
+                    method: "underscore",
+                },
+                {
+                    name: "加粗",
+                    method: "bold",
+                },
+            ]
+        }
+        var customMenu = this.$refs.customMenu
+        customMenu.style.display = style.display;
+        customMenu.style.left = style.left;
+        customMenu.style.top = style.left;
+    },
+    close(){
+        var customMenu = this.$refs.customMenu
+        customMenu.style.display = 'none';
+    },
+    clickBtn(method){
+        this.$emit('click',method)
+    }
+  },
+};
+</script>
+<style lang="scss" scoped>
+#customMenu {
+   display: none; /* 初始状态下不显示 */
+   position: absolute;
+}
+</style>

+ 145 - 42
src/utils/model/RichText/index.vue

@@ -1,13 +1,26 @@
 <template>
   <div>
-    <div class="edit-box div_MAX_Height" ref="myEditBox" contenteditable="true" :placeholder="placeholder" v-html="content" :key="keys" :id="keys"
+    <div class="edit-box div_MAX_Height" ref="myEditBox" data-type="myEditBox" contenteditable="true" :placeholder="placeholder" v-html="content" :key="keys" :id="keys"
         @blur="saveValue($event)" @change="change($event)" @focus="focus($event)" @click="getFocus($event)" v-on:paste="handlePaste($event)">
     </div>
+
+
+
+    <div id="customMenu" ref="customMenu" >
+      <template v-if="show">
+        <div v-for="item in this.menu" :key="item.name" :class="item.chose?'chose':''" >
+            <div @click="clickBtn(item.method)">{{ item.name }}</div>
+        </div>
+      </template>
+        
+    </div>
   </div>
 </template>
 
 <script>
+import mixins from './mixins.js';
 export default {
+  mixins:[mixins],
   components: {},
   props:{
         value:{
@@ -39,7 +52,15 @@ export default {
   data() {
     return {
         content: this.value||"", // 内容,
-        beforeChange:''
+        beforeChange:'',
+        menu :[
+          {
+            name: "高亮",
+            method: "highlight",
+          }
+        ],
+        selectObj:null,
+        show:false
     };
   },
   watch: {
@@ -49,9 +70,102 @@ export default {
   },
   computed: {},
   created() {},
-  mounted() {},
+  mounted() {
+    var that = this
+    this.$refs.myEditBox.addEventListener('contextmenu', function(event) {
+        event.preventDefault(); // 取消默认的右击菜单显示行为
+        that.showCustomMenu(event)
+    });
+    // 当点击任意地方或者按下ESC键时,隐藏菜单
+    window.onclick = this.hideCustomMenu
+    window.onkeydown = this.checkKeyPress
+  },
   methods: {
 
+
+    clickBtn(method){
+      var SplitHtmls = this.SplitHtmlTag1(this.$refs.myEditBox.innerHTML)
+      //  var html = this.addTag(SplitHtmls,method)
+       var html = this.changeHtml(SplitHtmls,method)
+      this.content = html
+      this.$emit('input',html)
+      this.$emit('blur',html)
+      this.$emit('change',html)
+      this.close()
+    },
+
+
+   
+    showCustomMenu(event) {
+      var obj = document.getSelection()
+      if(obj.anchorOffset == 0 && obj.extentOffset == 0){
+        return false
+      }
+      this.selectObj = {
+        anchorNode: obj.anchorNode,
+        anchorOffset: obj.anchorOffset,
+        extentNode: obj.extentNode,
+        extentOffset: obj.extentOffset,
+        focusNode:obj.focusNode,
+        focusOffset:obj.focusOffset,
+        isCollapsed: obj.isCollapsed,
+        rangeCount: obj.rangeCount,
+        type: obj.type,
+        text:obj.toString()
+      }
+      //判断是否已经突出显示
+      if (this.selectObj.anchorNode.isEqualNode(this.selectObj.extentNode)) {
+        var tags = this.getParentNode(this.selectObj)
+        if(tags.length != 0){
+          for(var i = 0;i<tags.length;i++){
+            var index = this.menu.findIndex(item=>{
+              item.chose = false
+              return item.method == tags[i].tagName.toLowerCase()
+            })
+            if(index!=-1){
+              this.menu[index].chose = true
+              break
+            }else{
+              
+            }
+          }
+          
+        }
+      } else {
+          // console.log("两个DOM元素不相同");
+      }
+      this.show = false
+      var { startIndex,endIndex } = this.getLocation(this.$refs.myEditBox,this.selectObj)
+      this.selectObj.startIndex = startIndex
+      this.selectObj.endIndex = endIndex
+      this.$nextTick(()=>{
+        this.show = true
+        var customMenu = this.$refs.customMenu
+        var xPos = event.layerX + "px";
+        var yPos = event.layerY + "px";
+        customMenu.style.display = "block";
+        customMenu.style.left = xPos;
+        customMenu.style.top = yPos;
+      })
+      
+    },
+    hideCustomMenu(event) {
+      var customMenu = this.$refs.customMenu
+      if (event.target != customMenu && !customMenu.contains(event.target)) {
+          customMenu.style.display = "none";
+      }
+    },
+    close(){
+        var customMenu = this.$refs.customMenu
+        customMenu.style.display = 'none';
+    },
+    checkKeyPress(e) {
+      var customMenu = this.$refs.customMenu
+      e = e || window.event;
+      if (e.keyCode == 27) { // ESC键的keycode值为27
+          customMenu.style.display = "none";
+      }
+    },
     //粘贴
    async handlePaste(e){
     var event = e || window.event
@@ -174,7 +288,7 @@ async urlToBase64(imageUrl) {
 },
     //设置光标位置
     setCursor(event,str,type){
-      console.log(event)
+      // console.log(event)
           var content = event.target.innerHTML
           // previousSibling
           var indexText = this.getColumn(event.target,window.getSelection())
@@ -230,44 +344,7 @@ async urlToBase64(imageUrl) {
           event.target.parentNode.focus(); 
           })
     },
-    getColumn(node, selectObj) {
-      var baseNode = node;
-      var anchorNodePosition = this.getPosition(baseNode, selectObj.anchorNode, selectObj.anchorOffset);
-      var focusNodePosition = this.getPosition(baseNode, selectObj.focusNode, selectObj.focusOffset);
-      var num = Math.min(anchorNodePosition, focusNodePosition)
-      return num;
-    },
-    getNodes(baseNode, path) {
-      // 拿到所有类型的节点
-      var temPath = path;
-      if (baseNode != null) {
-        temPath.push(baseNode);
-        if (baseNode.childNodes.length > 0) {
-          for (let i = 0; i < baseNode.childNodes.length; i++) {
-            this.getNodes(baseNode.childNodes[i], temPath);
-          }
-        }
-      }
-    },
-    getPosition(baseNode, node, offset) {
-      //根据节点获取给定node中offset位置在栏位中的实际位置
-      let path = [];
-      this.getNodes(baseNode, path);
-      var retIdx = 0;
-      for (let i = 0; i < path.length; i++) {
-        if (path[i] == node) {
-          retIdx += offset;
-          return retIdx;
-        } else {
-          if (path[i].nodeType == 3) {
-              retIdx += path[i].nodeValue.length;
-          }else if(i!=0 && path[i].nodeType == 1){
-            retIdx += path[i].outerHTML.length;
-          }
-        }
-      }
-      return retIdx
-    },
+  
     // 将file文件上传转化为base64进行显示
     fileToBase64(file) {
         return new Promise((resolve, reject) => {
@@ -302,6 +379,32 @@ async urlToBase64(imageUrl) {
 };
 </script>
 <style lang="scss" scoped>
+#customMenu {
+  user-select:none;
+  background: #fff;
+  color: #34495e;
+  box-shadow: 0px 2px 4px 0px rgba(0, 0, 0, 0.2);
+  min-width: 100px;
+  text-align: center;
+  z-index: 999;
+   display: none; /* 初始状态下不显示 */
+   position: absolute;
+   &>div{
+    padding:10px;
+    line-height: 25px;
+    border-bottom: 1px solid #E4E7ED;
+    cursor: pointer;
+   }
+   &>div:last-child{
+    border-bottom: none;
+   }
+   &>div:hover{
+    background: #edf6ff;
+   }
+   .chose{
+    background: #edf6ff;
+   }
+}
 .edit-box{
   overflow-x: hidden;
     text-overflow: ellipsis;

+ 757 - 0
src/utils/model/RichText/mixins.js

@@ -0,0 +1,757 @@
+export default {
+    methods: {
+        //获取所有父级标签以及当前文本在每个标签中的位置
+        getParentNode(selectObj) {
+        var dom = selectObj.anchorNode;
+        var parentNode = dom.parentElement;
+        if (!parentNode || parentNode.getAttribute("data-type") == "myEditBox") {
+            return [{ tagName: "div",tag: parentNode }];
+        }
+        var data = [];
+        NotIncludeDataType(parentNode, data);
+        function NotIncludeDataType(node, data) {
+            if (!node) {
+            return false;
+            }
+            if (node.getAttribute("data-type") != null) {
+            
+            
+            } else {
+                var tagName = node.tagName;
+                data.push({
+                    tagName: tagName,
+                    tag:node
+                });
+            NotIncludeDataType(node.parentElement, data);
+            }
+        }
+        return data;
+        },
+
+        //拆分html
+        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;
+    
+        },
+
+        //递归查找标签
+        checkPrevTag(data,index,tag){
+            for(var i = index;i<data.length && i>=0;i--){
+                if(data[i].type == 'tag'){
+                    if(data[i].text.indexOf(tag)!=-1){
+                        return {
+                            tag: data[i].text,
+                            index:i
+                         }
+                    }
+                }
+            }
+            return null
+        },
+        checkNextTag(data,index,tag){
+            for(var i = index;i<data.length;i++){
+                if(data[i].type == 'tag'){
+                    if(data[i].text.indexOf(tag)!=-1){
+                        return {
+                           tag: data[i].text,
+                           index:i
+                        }
+                    }
+                }
+            }
+            return null
+        },
+        checkBetweenTag(data,startIndex,endIndex,tag){
+            var arr = []
+            for(var i = startIndex;i<endIndex;i++){
+                if(data[i].type == 'tag'){
+                    if(data[i].text.indexOf(tag)!=-1){
+                        arr.push(
+                            {
+                                tag: data[i].text,
+                                index:i
+                             }
+                        )
+                    }
+                }
+            }
+            return arr
+        },
+        //修改html
+        changeHtml(data,tag){
+            var startIndex = 0
+            var sign = false
+            var endIndex = 0
+            var currentIndex = 0
+            var currentIndex1 = 0
+            for(var i = 0;i<data.length;i++){
+                if(data[i].type == 'text'){
+                    if(this.selectObj.startIndex >= currentIndex && this.selectObj.startIndex<=currentIndex + data[i].text.length && !sign){
+                        startIndex = i
+                        sign = true
+                    }else{
+                        if(!sign){
+                            currentIndex += data[i].text.length
+                        }
+                        
+                    }
+                    if(this.selectObj.endIndex >= currentIndex1 && this.selectObj.endIndex<=currentIndex1 + data[i].text.length){
+                        endIndex = i
+                        break
+                    }else{
+                        currentIndex1 += data[i].text.length
+                    }
+                }
+            }
+            var arr = []
+            var item = data[startIndex]
+            if(startIndex == endIndex){
+                var prevTag = this.checkPrevTag(data,startIndex,tag)
+                var nextTag = this.checkNextTag(data,startIndex,tag)
+                if(prevTag && nextTag){
+                    if(this.selectObj.startIndex == currentIndex && this.selectObj.endIndex == currentIndex+item.text.length){
+                        if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
+                            data[prevTag.index].del = true
+                            data[nextTag.index].del = true
+                        }
+                        
+                    }else if(this.selectObj.startIndex > currentIndex && this.selectObj.endIndex == currentIndex+item.text.length){
+                            if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                if(nextTag.index != endIndex + 1){
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                }
+                                data.splice(startIndex,1,...arr)
+                            }
+                    }else if(this.selectObj.startIndex == currentIndex && this.selectObj.endIndex < currentIndex+item.text.length){
+                            if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
+                                if(prevTag.index != startIndex - 1){
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                }
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.endIndex - currentIndex)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex - currentIndex,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
+                    }else if(this.selectObj.startIndex > currentIndex && this.selectObj.endIndex < currentIndex+item.text.length){
+                        if(prevTag.tag == `<${tag}>` && nextTag.tag == `</${tag}>`){
+                            arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                            arr.push({type:'tag',text:`</${tag}>`})
+                            arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,this.selectObj.endIndex - currentIndex)})
+                            arr.push({type:'tag',text:`<${tag}>`})
+                            arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex - currentIndex,item.text.length)})
+                            data.splice(startIndex,1,...arr)
+                        }
+                    }
+                }
+                else{
+                    arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex-currentIndex)})
+                    arr.push({type:'tag',text:`<${tag}>`})
+                    arr.push({type:'text',text:this.selectObj.text})
+                    arr.push({type:'tag',text:`</${tag}>`})
+                    arr.push({type:'text',text:item.text.substring(this.selectObj.endIndex-currentIndex,item.text.length)})
+                    data.splice(startIndex,1,...arr)
+                }
+
+            }else{
+                var prevTag = this.checkPrevTag(data,startIndex,tag)
+                var nextTag = this.checkNextTag(data,startIndex,tag)
+                var betweenTag = this.checkBetweenTag(data,startIndex,endIndex,tag)
+                var item1 = data[endIndex]
+                if(betweenTag.length==0){
+
+                }else{
+                    if(betweenTag.length == 1){
+                        data[betweenTag[0].index].del = true
+                        if(betweenTag[0].tag == `<${tag}>`){
+                            if(this.selectObj.endIndex == currentIndex1 && this.selectObj.endIndex < currentIndex1 + item1.text.length){
+                                arr.push({type:'text',text:item1.text.substring(0,1)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item1.text.substring(1,item1.text.length)})
+                                data.splice(endIndex,1,...arr)
+                            }else if(this.selectObj.endIndex > currentIndex1 && this.selectObj.endIndex < currentIndex1 + item1.text.length){
+                                arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item1.text.substring(this.selectObj.endIndex - currentIndex1,item1.text.length)})
+                                data.splice(endIndex,1,...arr)
+                            }
+                            else if(this.selectObj.endIndex > currentIndex1 && this.selectObj.endIndex == currentIndex1 + item1.text.length){
+                                arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                var nextTag = this.checkNextTag(data,endIndex,tag)
+                                if(nextTag.index != endIndex+1){
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                }else{
+                                    data[nextTag.index].del = true
+                                }
+                                data.splice(endIndex,1,...arr)
+                            }
+                        }else{
+                            if(this.selectObj.startIndex == currentIndex && this.selectObj.startIndex < currentIndex + item.text.length){
+                                var prevTag = this.checkPrevTag(data,startIndex,tag)
+                                if(prevTag.index != startIndex -1){
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                }else{
+                                    data[prevTag.index].del = true
+                                }
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }else if(this.selectObj.startIndex > currentIndex && this.selectObj.startIndex < currentIndex + item.text.length){
+                                
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
+                            else if(this.selectObj.startIndex > currentIndex && this.selectObj.startIndex == currentIndex + item.text.length){
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
+                                data.splice(endIndex,1,...arr)
+                            }
+                        }
+                    }else if(betweenTag.length == 2){
+                        data[betweenTag[0].index].del = true
+                        data[betweenTag[1].index].del = true
+                        if(betweenTag[0].tag == `<${tag}>` && betweenTag[1].tag == `</${tag}>`){
+                            if(this.selectObj.startIndex == currentIndex){
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
+                            else if(this.selectObj.startIndex == currentIndex+ item.text.length){
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
+                                data.splice(endIndex,1,...arr)
+                            }
+                            else{
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
+                            var len = arr.length
+                            arr = []
+                            if(this.selectObj.endIndex == currentIndex1){
+                                arr.push({type:'text',text:item1.text.substring(0,1)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item1.text.substring(1,item1.text.length)})
+                                data.splice(endIndex + len - 1,1,...arr)
+                            }
+                            else if(this.selectObj.endIndex == currentIndex1 + item1.text.length){
+                                arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                data.splice(endIndex + len - 1,1,...arr)
+                            }
+                            else{
+                                arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item1.text.substring(this.selectObj.endIndex - currentIndex1,item1.text.length)})
+                                data.splice(endIndex + len - 1,1,...arr)
+                            }
+
+                        }else if(betweenTag[0].tag == `</${tag}>` && betweenTag[1].tag == `<${tag}>`){
+                            if(this.selectObj.startIndex == currentIndex){
+                                var prevTag = this.checkPrevTag(data,startIndex,tag)
+                                if(prevTag.index != startIndex -1){
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                }else{
+                                    data[prevTag.index].del = true
+                                }
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
+                            else if(this.selectObj.startIndex == currentIndex + item.text.length){
+                                arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
+                                data.splice(endIndex,1,...arr)
+                            }
+                            else{
+                                arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                arr.push({type:'tag',text:`</${tag}>`})
+                                arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                data.splice(startIndex,1,...arr)
+                            }
+                            var len = arr.length
+                            arr = []
+                            if(this.selectObj.endIndex == currentIndex1){
+                                arr.push({type:'text',text:item1.text.substring(0,1)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item1.text.substring(1,item1.text.length)})
+                                data.splice(endIndex + len - 1,1,...arr)
+                            }
+                            else if(this.selectObj.endIndex == currentIndex1 + item1.text.length){
+                                arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                var nextTag = this.checkNextTag(data,endIndex + len - 1,tag)
+                                if(nextTag.index != endIndex + len){
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                }else{
+                                    data[nextTag.index].del = true
+                                }
+                                data.splice(endIndex + len - 1,1,...arr)
+                            }
+                            else{
+                                arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                arr.push({type:'tag',text:`<${tag}>`})
+                                arr.push({type:'text',text:item1.text.substring(this.selectObj.endIndex - currentIndex1,item1.text.length)})
+                                data.splice(endIndex + len - 1,1,...arr)
+                            }
+                        }
+                    }else{
+                        for(var j = 0;j<betweenTag.length;j++){
+                            data[betweenTag[j].index].del = true
+                        }
+                        if(betweenTag.length % 2==1){
+                            if(arr[0] == `</${tag}>`){
+                                if(this.selectObj.startIndex == currentIndex){
+                                    var prevTag = this.checkPrevTag(data,startIndex,tag)
+                                    if(prevTag.index != startIndex -1){
+                                        arr.push({type:'tag',text:`</${tag}>`})
+                                    }else{
+                                        data[prevTag.index].del = true
+                                    }
+                                    arr.push({type:'text',text:item.text.substring(0,item.text.length)})
+                                    data.splice(startIndex,1,...arr)
+                                }
+                                else if(this.selectObj.startIndex == currentIndex + item.text.length){
+                                    arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
+                                    data.splice(endIndex,1,...arr)
+                                }
+                                else{
+                                    arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                    data.splice(startIndex,1,...arr)
+                                }
+                            }else{
+                                if(this.selectObj.endIndex == currentIndex1){
+                                    arr.push({type:'text',text:item1.text.substring(0,1)})
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item1.text.substring(1,item1.text.length)})
+                                    data.splice(endIndex,1,...arr)
+                                }
+                                else if(this.selectObj.endIndex == currentIndex1 + item1.text.length){
+                                    arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                    var nextTag = this.checkNextTag(data,endIndex,tag)
+                                    if(nextTag.index != endIndex +1){
+                                        arr.push({type:'tag',text:`<${tag}>`})
+                                    }else{
+                                        data[nextTag.index].del = true
+                                    }
+                                    data.splice(endIndex,1,...arr)
+                                }
+                                else{
+                                    arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item1.text.substring(this.selectObj.endIndex - currentIndex1,item1.text.length)})
+                                    data.splice(endIndex,1,...arr)
+                                }
+                            }
+                        }else{
+                            if(arr[0] == `</${tag}>`){
+                                if(this.selectObj.startIndex == currentIndex){
+                                    var prevTag = this.checkPrevTag(data,startIndex,tag)
+                                    if(prevTag.index != startIndex -1){
+                                        arr.push({type:'tag',text:`</${tag}>`})
+                                    }else{
+                                        data[prevTag.index].del = true
+                                    }
+                                    arr.push({type:'text',text:item.text.substring(0,item.text.length)})
+                                    data.splice(startIndex,1,...arr)
+                                }
+                                else if(this.selectObj.startIndex == currentIndex + item.text.length){
+                                    arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
+                                    data.splice(endIndex,1,...arr)
+                                }
+                                else{
+                                    arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                    data.splice(startIndex,1,...arr)
+                                }
+                                var len = arr.length
+                                arr = []
+                                if(this.selectObj.endIndex == currentIndex1){
+                                    arr.push({type:'text',text:item1.text.substring(0,1)})
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item1.text.substring(1,item1.text.length)})
+                                    data.splice(endIndex + len - 1,1,...arr)
+                                }
+                                else if(this.selectObj.endIndex == currentIndex1 + item1.text.length){
+                                    arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                    var nextTag = this.checkNextTag(data,endIndex + len - 1,tag)
+                                    if(nextTag.index != endIndex + len){
+                                        arr.push({type:'tag',text:`<${tag}>`})
+                                    }else{
+                                        data[nextTag.index].del = true
+                                    }
+                                    data.splice(endIndex + len - 1,1,...arr)
+                                }
+                                else{
+                                    arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item1.text.substring(this.selectObj.endIndex - currentIndex1,item1.text.length)})
+                                    data.splice(endIndex + len - 1,1,...arr)
+                                }
+                            }else{
+                                if(this.selectObj.startIndex == currentIndex){
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(0,item.text.length)})
+                                    data.splice(startIndex,1,...arr)
+                                }
+                                else if(this.selectObj.startIndex == currentIndex+ item.text.length){
+                                    arr.push({type:'text',text:item.text.substring(0,item.text.length -1)})
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(item.text.length -1,item.text.length)})
+                                    data.splice(endIndex,1,...arr)
+                                }
+                                else{
+                                    arr.push({type:'text',text:item.text.substring(0,this.selectObj.startIndex - currentIndex)})
+                                    arr.push({type:'tag',text:`<${tag}>`})
+                                    arr.push({type:'text',text:item.text.substring(this.selectObj.startIndex - currentIndex,item.text.length)})
+                                    data.splice(startIndex,1,...arr)
+                                }
+                                var len = arr.length
+                                arr = []
+                                if(this.selectObj.endIndex == currentIndex1){
+                                    arr.push({type:'text',text:item1.text.substring(0,1)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    arr.push({type:'text',text:item1.text.substring(1,item1.text.length)})
+                                    data.splice(endIndex + len - 1,1,...arr)
+                                }
+                                else if(this.selectObj.endIndex == currentIndex1 + item1.text.length){
+                                    arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    data.splice(endIndex + len - 1,1,...arr)
+                                }
+                                else{
+                                    arr.push({type:'text',text:item1.text.substring(0,this.selectObj.endIndex - currentIndex1)})
+                                    arr.push({type:'tag',text:`</${tag}>`})
+                                    arr.push({type:'text',text:item1.text.substring(this.selectObj.endIndex - currentIndex1,item1.text.length)})
+                                    data.splice(endIndex + len - 1,1,...arr)
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            let temInnerHtml = '';
+            data.forEach(function (item) {
+                if(!item.del){
+                    temInnerHtml = temInnerHtml + item.text;
+                }
+                
+            });
+            return temInnerHtml;
+            return
+            // var currentHtml = this.$refs.myEditBox.outerHTML
+            var currentHtml = this.$refs.myEditBox.innerHTML
+            // var num = outerHTML.length - currentHtml.length + 6
+            // console.log(outerHTML,outerHTML.length,currentHtml,currentHtml.length,num)
+            var num = 0
+            var startHtml = currentHtml.substring(0,this.selectObj.startIndex-num )
+            var endHtml = currentHtml.substring(this.selectObj.endIndex-num ,currentHtml.length)
+            var centerHtml = currentHtml.substring(this.selectObj.startIndex-num,this.selectObj.endIndex-num)
+            var regx = new RegExp(`<${tag}>|</${tag}>`,'g')
+            var arr = centerHtml.match(regx)
+            if(!arr){
+                centerHtml = `<${tag}>`+centerHtml+`</${tag}>`
+            }else{
+                if(arr.length == 1){
+                    if(arr[0] == `<${tag}>`){
+                        centerHtml = centerHtml+`<${tag}>`
+                    }else{
+                        centerHtml = `</${tag}>` + centerHtml
+                    }
+                }else if(arr.length == 2){
+                    centerHtml = centerHtml.replace(regx,'') 
+                    if(arr[0] == `<${tag}>` && arr[1] == `</${tag}>`){
+                       
+                    }else{
+                        centerHtml = `</${tag}>` + centerHtml +`<${tag}>`
+                    }
+                }else{
+                    centerHtml = centerHtml.replace(regx,'')
+                    if(arr.length%2==1){
+                        if(arr[0] == `</${tag}>`){
+                            centerHtml = `</${tag}>` + centerHtml
+                        }else{
+                            centerHtml = centerHtml + `<${tag}>`
+                        }
+                    }else{
+                        if(arr[0] == `</${tag}>`){
+                            centerHtml = `</${tag}>` + centerHtml + `<${tag}>`
+                        }else{
+                            
+                        }
+                    }
+                }
+                
+            }
+            // var str = startHtml+centerHtml+endHtml
+            // var a = /<div.*(data-type="myEditBox").*?>(.*?)<\/div>/g
+            // console.log(str.match(a))
+            return startHtml+centerHtml+endHtml
+            
+        }, 
+
+        getLocation(node, selectObj){
+            var baseNode = node;
+            var anchorNodePosition = this.getPosition1(baseNode, selectObj.anchorNode, selectObj.anchorOffset);
+            var focusNodePosition = this.getPosition1(baseNode, selectObj.focusNode, selectObj.focusOffset);
+            var num = Math.max(anchorNodePosition, focusNodePosition)
+            var num1 = Math.min(anchorNodePosition, focusNodePosition)
+            return {
+                startIndex:num1,
+                endIndex:num
+            };
+        },
+        getAllDom(baseNode,path){
+            var temPath = path
+            if (baseNode != null) {
+                if(baseNode.nodeType == 1){
+                    temPath.push(baseNode);
+                }
+                if (baseNode.childNodes.length > 0) {
+                    for (let i = 0; i < baseNode.childNodes.length; i++) {
+                        this.getAllDom(baseNode.childNodes[i], temPath);
+                    }
+                }
+            }
+        },
+        //根据节点获取给定node中offset位置在栏位中的实际位置
+        getPosition1(baseNode, node, offset) {
+        
+            let path = [];
+            this.getNodes(baseNode, path);
+            let retIdx = 0;
+            for (let i = 0; i < path.length; i++) {
+                if (path[i] == node) {
+                    retIdx += offset;
+                    return retIdx;
+                } else {
+                    if (path[i].nodeType == 3) {
+                        retIdx += path[i].nodeValue.length;
+                    }
+                }
+            }
+            return retIdx
+        },
+
+        //添加标签
+        addTag(data,tag){
+            var currentIndex = 0
+            var allMessage = []
+            console.log(this.selectObj)
+            for(var index = 0;index<data.length;index++){
+                var item = data[index]
+                if(item.type == 'text'){
+                    if(this.selectObj.startIndex == currentIndex && (this.selectObj.startIndex + this.selectObj.text.length) == (currentIndex + item.text.length)){
+                        if(index!=0 && data[index-1].type == 'tag'){
+                           var tagIndex = data[index-1].text.indexOf(tag)
+                           if(tagIndex!=-1){
+                                allMessage[index-1].del = true
+                                data[index+1].del = true
+                                currentIndex = currentIndex + item.text.length; 
+                                continue
+                           }
+                        }
+                        allMessage.push({ type:'tag', text:`<${tag}>`})
+                        allMessage.push({ type:'text', text:this.selectObj.text})
+                        allMessage.push({ type:'tag', text:`</${tag}>`})
+                    }
+                    else if(this.selectObj.startIndex >= currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)<=(currentIndex + item.text.length)){
+                        if(index!=0 && data[index-1].type == 'tag'){
+                            var tagIndex = data[index-1].text.indexOf(tag)
+                            if(tagIndex!=-1){
+                               if(this.selectObj.startIndex > currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)==(currentIndex + item.text.length)){
+                                    allMessage.push({ type:'text', text:item.text.substring(0,this.selectObj.startIndex-currentIndex)})
+                                    allMessage.push({ type:'tag', text:`</${tag}>`})
+                                    allMessage.push({ type:'text', text:item.text.substring(this.selectObj.startIndex-currentIndex,item.text.length)})
+                                    data[index+1].del = true
+                                    currentIndex = currentIndex + item.text.length; 
+                                    continue
+                               }
+                               else if(this.selectObj.startIndex == currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)<(currentIndex + item.text.length)){
+                                    allMessage[index-1].del = true
+                                    allMessage.push({ type:'text', text:item.text.substring(0,(this.selectObj.startIndex-currentIndex + this.selectObj.text.length))})
+                                    allMessage.push({ type:'tag', text:`<${tag}>`})
+                                    allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex-currentIndex + this.selectObj.text.length),item.text.length)})
+                                    currentIndex = currentIndex + item.text.length; 
+                                    continue
+                               }
+                               else if(this.selectObj.startIndex > currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)<(currentIndex + item.text.length)){
+                                   
+                                    allMessage.push({ type:'text', text:item.text.substring(0,(this.selectObj.startIndex-currentIndex))})
+                                    allMessage.push({ type:'tag', text:`</${tag}>`})
+                                    allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex-currentIndex),this.selectObj.startIndex-currentIndex + this.selectObj.text.length)})
+                                    allMessage.push({ type:'tag', text:`<${tag}>`})
+                                    allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex-currentIndex + this.selectObj.text.length),item.text.length)})
+                                    currentIndex = currentIndex + item.text.length; 
+                                    continue
+                                }
+                            }
+                        }
+
+
+
+                        if(this.selectObj.startIndex > currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)==(currentIndex + item.text.length)){
+                            allMessage.push({ type:'text', text:item.text.substring(0,this.selectObj.startIndex-currentIndex)})
+                            allMessage.push({ type:'tag', text:`<${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring(this.selectObj.startIndex-currentIndex,item.text.length)})
+                            allMessage.push({ type:'tag', text:`</${tag}>`})
+                       }
+                       else if(this.selectObj.startIndex == currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)<(currentIndex + item.text.length)){
+                            allMessage.push({ type:'tag', text:`<${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring(0,(this.selectObj.startIndex -currentIndex + this.selectObj.text.length))})
+                            allMessage.push({ type:'tag', text:`</${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex-currentIndex + this.selectObj.text.length),item.text.length)})
+                            
+                       }
+                       else if(this.selectObj.startIndex > currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)<(currentIndex + item.text.length)){
+                            
+                            allMessage.push({ type:'text', text:item.text.substring(0,(this.selectObj.startIndex-currentIndex))})
+                            allMessage.push({ type:'tag', text:`<${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex-currentIndex),this.selectObj.startIndex -currentIndex + this.selectObj.text.length)})
+                            allMessage.push({ type:'tag', text:`</${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex-currentIndex + this.selectObj.text.length),item.text.length)})
+                        }
+                    }
+                    else if(this.selectObj.startIndex >= currentIndex && this.selectObj.startIndex < (currentIndex + item.text.length) && (this.selectObj.startIndex + this.selectObj.text.length)>(currentIndex + item.text.length)){
+                        if(index +1 < data.length && data[index+1].type == 'tag'){
+                            var tagIndex = data[index+1].text.indexOf(`${tag}`)
+                            if(tagIndex!=-1){
+                                data[index +1].del = true
+                                // currentIndex = currentIndex + item.text.length; 
+                                // continue
+                            }
+                        }
+                        if(this.selectObj.startIndex == currentIndex){
+                            allMessage.push({ type:'tag', text:`</${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring(0,item.text.length)})
+                            // allMessage.push({ type:'tag', text:`</${tag}>`})
+                        }else{
+                            allMessage.push({ type:'text', text:item.text.substring(0,(this.selectObj.startIndex - currentIndex))})
+                            allMessage.push({ type:'tag', text:`</${tag}>`})
+                            allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex - currentIndex),item.text.length)})
+                            // allMessage.push({ type:'tag', text:`</${tag}>`})
+                        }
+                        
+                        
+                    }
+                    else if(this.selectObj.startIndex < currentIndex  && (this.selectObj.startIndex + this.selectObj.text.length)>currentIndex && (this.selectObj.startIndex + this.selectObj.text.length)<(currentIndex+ item.text.length) ){
+                        allMessage.push({ type:'text', text:item.text.substring(0,(this.selectObj.startIndex + this.selectObj.text.length - currentIndex))})
+                        if(!data[index -1].del){
+                            allMessage.push({ type:'tag', text:`</${tag}>`})
+                        }
+                        
+                        allMessage.push({ type:'text', text:item.text.substring((this.selectObj.startIndex + this.selectObj.text.length - currentIndex),item.text.length)})
+                    }
+                    else if(this.selectObj.startIndex < currentIndex  && (this.selectObj.startIndex + this.selectObj.text.length)>(currentIndex + item.text.length)){
+                        if(index +1 < data.length && data[index+1].type == 'tag'){
+                            var tagIndex = data[index+1].text.indexOf(tag)
+                            if(tagIndex!=-1){
+                                data[index +1].del = true
+                                // allMessage.push(item)
+                                // currentIndex = currentIndex + item.text.length; 
+                                // continue
+                            }
+                        }
+                        allMessage.push(item)
+                    }else{
+                        allMessage.push(item)
+                    }
+                   currentIndex = currentIndex + item.text.length; 
+                }else{
+                    allMessage.push(item)
+                }
+            }
+            let temInnerHtml = '';
+            allMessage.forEach(function (item) {
+                if(!item.del){
+                    temInnerHtml = temInnerHtml + item.text;
+                }
+                
+            });
+            return temInnerHtml;
+
+
+        },
+        
+
+        getColumn(node, selectObj,method='getPosition') {
+            var baseNode = node;
+            var anchorNodePosition = this[method](baseNode, selectObj.anchorNode, selectObj.anchorOffset);
+            var focusNodePosition = this[method](baseNode, selectObj.focusNode, selectObj.focusOffset);
+            var num = Math.min(anchorNodePosition, focusNodePosition)
+            return num;
+        },
+        getNodes(baseNode, path) {
+            // 拿到所有类型的节点
+            var temPath = path;
+            if (baseNode != null) {
+                temPath.push(baseNode);
+            if (baseNode.childNodes.length > 0) {
+                for (let i = 0; i < baseNode.childNodes.length; i++) {
+                    this.getNodes(baseNode.childNodes[i], temPath);
+                }
+            }
+            }
+        },
+        
+        getPosition(baseNode, node, offset) {
+            //根据节点获取给定node中offset位置在栏位中的实际位置
+            let path = [];
+            this.getNodes(baseNode, path);
+            var retIdx = 0;
+            for (let i = 0; i < path.length; i++) {
+            if (path[i] == node) {
+                retIdx += offset;
+                return retIdx;
+            } else {
+                if (path[i].nodeType == 3) {
+                    retIdx += path[i].nodeValue.length;
+                }else if(i!=0 && path[i].nodeType == 1){
+                    retIdx += path[i].outerHTML.length;
+                }
+            }
+            }
+            return retIdx
+        },
+    },
+};

+ 11 - 2
src/views/components/dialog/fields.vue

@@ -38,7 +38,7 @@ export default {
   props: {
     type: {
       type: String,
-      default: ''
+      default: null
     },
     projectId: {
       default: null,
@@ -52,6 +52,9 @@ export default {
     },
     productId:{
       default: null
+    },
+    url:{
+      default:null
     }
   },
   data() {
@@ -118,7 +121,13 @@ export default {
         taskId: this.taskId,
         productId:this.productId,
       }
-      let apiItem = (this.projectId == 0|| this.projectId || this.productId) ? 'setTableColumns' : 'setCustomField'
+      var apiItem = ''
+      if(this.url){
+        apiItem = this.url
+      }else{
+        apiItem = (this.projectId == 0|| this.projectId || this.productId) ? 'setTableColumns' : 'setCustomField'
+      }
+      
       // sign为true时是统计栏位
       if (this.sign) {
         apiItem = 'setShowCountColumns'

+ 1 - 1
src/views/patentMining/components/details/components/projectPath.vue

@@ -204,7 +204,7 @@ export default {
     await this.getFileNumber()
   },
   methods: {
-    // 获取流程节点及相对应的文件
+    // 获取所属流程及相对应的文件
     async getFileNumber() {
       let params = {
         projectId: this.id,

+ 1 - 1
src/views/patentMining/components/excavateTask/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="height_100">
-    <Table :type="1" :projectId="id" :processId="processId"></Table>
+    <Table :type="1" :projectId="id" :processId="processId" :show="true"></Table>
   </div>
 </template>
 

+ 12 - 15
src/views/patentMining/components/fileMessage.vue

@@ -4,7 +4,7 @@
     <el-container>
       <el-header style="display: flex;justify-content: space-between;align-items: center;">
         <div>
-          <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
+          <!-- <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch> -->
         </div>
         <div style="display:flex;margin-right:10px">
           <!-- <el-button-group class="margin-left_10">
@@ -16,18 +16,18 @@
       </el-header>
       <el-main>
         <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header"
-          @sort-change="sortChange">
+         >
           <el-table-column label="#" align="center" width="100px">
             <template slot-scope="scope">
               <div>
-                {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
+                {{ scope.$index + 1 }}
               </div>
             </template>
           </el-table-column>
 
 
           <el-table-column v-for="item in columnList" :key="item.value" :prop="item.value"
-            :render-header="$commonJS.renderHeaderMethods" :label="item.name" sortable="custom" align="center">
+            :render-header="$commonJS.renderHeaderMethods" :label="item.name" sortable align="center">
             <template slot-scope="scope">
               <div v-if="['name'].includes(item.value)">
                 <!-- <el-link @click="handleItem(scope.row, item.value)"> -->
@@ -60,11 +60,11 @@
           </el-table-column>
         </el-table>
       </el-main>
-      <el-footer class="pagination">
+      <!-- <el-footer class="pagination">
         <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
           :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
         </el-pagination>
-      </el-footer>
+      </el-footer> -->
     </el-container>
 
     <uploadFile ref="uploadFile" @isSuccess="isSuccess" :processId="processId"></uploadFile>
@@ -152,7 +152,7 @@ export default {
     // 获取table栏位
     this.columnList = await this.$commonJS.getCustomField('patentDigProjectFiles')
     // 获取栏位
-    await this.getColumn()
+    // await this.getColumn()
     // 获取数据
     await this.getList()
   },
@@ -174,11 +174,11 @@ export default {
             type: 'type',
           })
           //为所属流程及最终文件添加选项
-          let arr = ['流程节点', '最终文件']
+          let arr = ["processId", 'ifFinal']
           arr.forEach(item => {
-            var obj = this.searchFiled.find(item2 => { return item2.label == item })
+            var obj = this.searchFiled.find(item2 => { return item2.value == item })
             if(obj){
-              if (item == '流程节点') {//流程节点
+              if (item == "processId") {//所属流程
                 obj.options = this.pathOptions
               } else {//最终文件
                 let isFile = [
@@ -196,7 +196,6 @@ export default {
     },
     // 获取数据
     async getList() {
-      console.log(1);
       let searchOption2 = {
         processId: this.pathObjCopy,//流程节点id
         projectId: this.id,//固有检索
@@ -217,12 +216,10 @@ export default {
         orderDTOList: this.sort,//排序信息
       }
 
-      this.$api.queryPatentDigProjectFiles(params).then(res => {
+      this.$api.queryPatentDigProjectFiles(searchOption2).then(res => {
         if (res.code == 200) {
           this.tableData = res.data.data
-          this.queryParams.size = res.data.size
-          this.queryParams.current = res.data.current
-          this.queryParams.total = res.data.total
+          this.queryParams.total = this.tableData.length
         }
       }).catch(error => {
         this.tableData = []

+ 6 - 1
src/views/patentMining/components/view/commonTable.vue

@@ -49,7 +49,12 @@ export default {
     column: {//显示栏位管理数组
       type: Array,
       default: () => {
-        return []
+        return [
+          {
+            name:'项目名称',
+            value:'name'
+          }
+        ]
       }
     },
     row: null,

+ 25 - 1
src/views/project/patentCollection/components/mixins/index.js

@@ -345,6 +345,10 @@ export const handleData = {
     },
     //切换原文译文 
     handleChange(row, key) {
+      if(!this.haveTranslatedText(row, key)){
+        this.$message.warning('无译文')
+        return
+      }
       switch (key) {
         case "title":
           this.$set(row, 'change', !row.change)
@@ -356,6 +360,21 @@ export const handleData = {
       }
     },
 
+    //判断是否有译文
+    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
+    },
   },
 }
 
@@ -492,7 +511,9 @@ export const highlight = {
         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 = `<span class="${selectObject.selectType + selectObject.Id}" id="${selectObject.selectType + selectObject.Id}" style="${style}">`
       //图标
@@ -514,6 +535,9 @@ export const highlight = {
       if (selectObject.selectType == 'r') {//特征
         imgTag = `<span class="${selectObject.selectType + selectObject.Id}" style="background-color:white !important;"><i class="el-icon-delete" style="vertical-align: super;background-color:white !important;" onclick="deleteFeature('${selectObject.selectType + selectObject.Id}','${selectObject.selectType}')"></i></span>`
       }
+      if(!selectObject.selectType){
+        imgTag = ''
+      }
       let endTag = '</span>';
       let elText = '';
 

+ 9 - 4
src/views/project/patentCollection/components/views/Abstract.vue

@@ -1,7 +1,7 @@
 <template>
   <!-- 摘要视图 -->
   <div class="patent-abstract-list-view">
-    <div class="patent-abstract-card" v-for="(patent, index) in tableData" :key="patent.appNo">
+    <div class="patent-abstract-card" v-for="(patent, index) in tableData" :key="index">
       <div class="patent-abstract-card-wrapper">
         <table class="patent-abstract-card-table">
           <tbody>
@@ -9,7 +9,12 @@
               <!-- <td v-if="refresh"><el-checkbox :label="patent.id" @change="changeSelect(patent)"
                   :checked="selected.indexOf(patent.id) !== -1 || patentNoList.indexOf(patent.patentNo) !== -1"></el-checkbox>
               </td> -->
-              <td v-if="refresh"><el-checkbox :label="patent.id" @change="changeSelect(patent)"></el-checkbox>
+              <td v-if="refresh">
+                <!-- <el-checkbox :label="patent.patentNo" @change="changeSelect(patent)"></el-checkbox> -->
+                <el-checkbox-group :value="patentNoList" >
+                  <el-checkbox :label="patent.patentNo" @change="changeSelect(patent)">
+                  </el-checkbox>
+                </el-checkbox-group>
               </td>
               <td>
                 <div class="patent-abstract-index-container">
@@ -55,7 +60,7 @@
                       <span class="patent-abstract_label">标题:</span>
                       <span class="patent-abstract_text">
                         <span v-html="getView(patent, 'title')"></span>
-                        <el-link v-if="projectId" type="primary" @click.native="handleChange(patent, 'title')"
+                        <el-link v-if="haveTranslatedText(patent, 'title')" type="primary" @click.native="handleChange(patent, 'title')"
                           style="margin-left: 10px;">
                           <span v-if="!patent.change">切换译文</span>
                           <span v-else>切换原文</span>
@@ -180,7 +185,7 @@
                       <span class="patent-abstract_label">摘要:</span>
                       <div>
                         <span v-html="getView(patent, 'abstractStr')"></span>
-                        <el-link v-if="projectId" type="primary" @click.native="handleChange(patent, 'abstractStr')">
+                        <el-link v-if="haveTranslatedText(patent, 'abstractStr')" type="primary" @click.native="handleChange(patent, 'abstractStr')">
                           <span v-if="!patent.change2">切换译文</span>
                           <span v-else>切换原文</span>
                         </el-link>

+ 14 - 12
src/views/project/patentCollection/components/views/Picture.vue

@@ -2,22 +2,24 @@
   <!-- 图片视图 -->
   <div class="pic">
     <div class="item" style="padding:10px;display: flex;flex-wrap: wrap;">
-      <el-card shadow="hover" v-for="(item, index) in tableData" style="width:200px" :key="index">
+      <el-card shadow="hover" v-for="(item, index) in tableData" style="width:200px;margin:5px" :key="index">
         <div slot="header"
           style="width: 100%; white-space: nowrap;overflow-x: hidden;text-overflow: ellipsis;font-size:12px;">
           <div>序号:{{ (index + 1) + ((queryParams.current - 1) * queryParams.size) }}</div>
           <el-divider></el-divider>
-          <span v-if="refresh"> <el-checkbox :label="item.id" @change="changeSelect(item)">
-
-              <el-link :type="item.read === 1 ? 'success' : 'danger'"
-                @click.native.prevent="handleClick(item, index)">
-                <span v-html="getView(item, 'patentNo')"></span>
-              </el-link>
-
-            </el-checkbox> </span>
-          <el-tooltip effect="dark" :content="getView(item, 'title')" placement="left">
-            <span style="" v-html="getView(item, 'title')"></span>
-          </el-tooltip>
+          <span v-if="refresh"> 
+            <el-checkbox-group :value="patentNoList" >
+              <el-checkbox :label="item.patentNo" @change="changeSelect(item)">
+                  <el-link :type="item.read === 1 ? 'success' : 'danger'"
+                    @click.native.prevent="handleClick(item, index)">
+                    <span v-html="getView(item, 'patentNo')"></span>
+                  </el-link>
+                  </el-checkbox>
+                </el-checkbox-group>
+             </span>
+          <myTooltip :content="getView(item, 'title')">
+            <div class="noWrap" v-html="getView(item, 'title')"></div>
+          </myTooltip>
         </div>
         <div class="picture text-align_center" style="height: 200px;width:100%;line-height:200px;">
           <el-image :src="outside?item.pictureGuid:$commonJS.checkViewer(item.pictureGuid)"

+ 3 - 3
src/views/project/patentCollection/components/views/Table.vue

@@ -42,7 +42,7 @@
                   </td>
                   <td>
                     <p v-html="getView(scope.row, 'abstractStr')"></p>
-                    <el-link v-if="projectId" type="primary" @click.native="handleChange(scope.row, 'abstractStr')">
+                    <el-link v-if="haveTranslatedText(scope.row, 'abstractStr')" type="primary" @click.native="handleChange(scope.row, 'abstractStr')">
                       <span v-if="!scope.row.change2">切换译文</span>
                       <span v-else>切换原文</span>
                     </el-link>
@@ -62,7 +62,7 @@
           <template v-else-if="item.value === 'title'">
             <span v-html="getView(scope.row, 'title')"></span>
             <br>
-            <el-link v-if="projectId" type="primary" @click.native="handleChange(scope.row, 'title')">
+            <el-link v-if="haveTranslatedText(scope.row, 'title')" type="primary" @click.native="handleChange(scope.row, 'title')">
               <span v-if="!scope.row.change">切换译文</span>
               <span v-else>切换原文</span>
             </el-link>
@@ -70,7 +70,7 @@
           <template v-else-if="item.value === 'abstractStr'">
             <span v-html="getView(scope.row, 'abstractStr')"></span>
             <br>
-            <el-link v-if="projectId" type="primary" @click.native="handleChange(scope.row, 'abstractStr')">
+            <el-link v-if="haveTranslatedText(scope.row, 'abstractStr')" type="primary" @click.native="handleChange(scope.row, 'abstractStr')">
               <span v-if="!scope.row.change2">切换译文</span>
               <span v-else>切换原文</span>
             </el-link>

+ 54 - 6
src/views/project/patentDetails/components/PatentField.vue

@@ -26,8 +26,16 @@
           <template v-if="item.type === 4 && !item.showField">
             <div class="showValue">
               <div>
-                <div v-for="fieldValue in item.selected" :key="fieldValue.value" class="value">{{ fieldValue.value }}
-                </div>
+                <!-- <div v-for="fieldValue in item.selected" :key="fieldValue.value" class="value">{{ fieldValue.value }}
+                </div> -->
+                <el-tag
+                  v-for="tag in item.selected"
+                  :key="tag.value"
+                  closable
+                  type=""
+                  @close="handleCloseValue(item,tag)">
+                  {{tag.value}}
+                </el-tag>
               </div>
               <el-button size="small" @click="changeShow(item)">{{ item.show ? '收起' : '修改' }}</el-button>
             </div>
@@ -42,8 +50,16 @@
           <template v-if="item.type === 5 && !item.showField">
             <div class="showValue">
               <div>
-                <div v-for="fieldValue in item.selected" :key="fieldValue.valueId" class="value">{{ fieldValue.value }}
-                </div>
+                <!-- <div v-for="fieldValue in item.selected" :key="fieldValue.valueId" class="value">{{ fieldValue.value }}
+                </div> -->
+                <el-tag
+                  v-for="tag in item.selected"
+                  :key="tag.value"
+                  closable
+                  type=""
+                  @close="handleCloseValue(item,tag)">
+                  {{tag.value}}
+                </el-tag>
               </div>
               <el-button size="small" @click="changeShow(item)">{{ item.show ? '收起' : '修改' }}</el-button>
             </div>
@@ -55,8 +71,16 @@
           <template v-if="[6,7,8,9].includes(item.type) && !item.showField">
             <div class="showValue">
               <div>
-                <div v-for="fieldValue in item.selected" :key="fieldValue.valueId" class="value">{{ fieldValue.value }}
-                </div>
+                <!-- <div v-for="fieldValue in item.selected" :key="fieldValue.valueId" class="value">{{ fieldValue.value }}
+                </div> -->
+                <el-tag
+                  v-for="tag in item.selected"
+                  :key="tag.value"
+                  closable
+                  type=""
+                  @close="handleCloseValue(item,tag)">
+                  {{tag.value}}
+                </el-tag>
               </div>
               <el-button size="small" @click="changeShow(item)">{{ item.show ? '收起' : '修改' }}</el-button>
             </div>
@@ -147,6 +171,30 @@ export default {
     clickItem(data, item) {
       this.gong(data, item)
     },
+    handleCloseValue(item,tag){
+      var params = {
+        projectId: this.projectId,
+        taskId: this.taskId,
+        fieldType: item.type,
+        fieldId: item.id,
+        fieldValue: [tag.valueId],
+        patentNo: this.patentNo,
+        optionType: 0,
+      }
+      this.$api.addCustomFieldValue(params).then(response => {
+        if (response.code == 200) {
+          this.$message.success('修改成功')
+          var index = item.selected.findIndex(i=>{
+            return i.valueId == tag.valueId
+          })
+          item.selected.splice(index,1)
+          item.selectedValue.splice(index,1)
+          this.refresh(item)
+        }
+      }).catch(error => {
+
+      })
+    },
     //切换选择
     onChange(data, item, checked) {
       this.gong(data, item, checked)

+ 1 - 1
src/views/project/patentDetails/components/patentDetails.vue

@@ -22,7 +22,7 @@
               </div>
               <div style="color: #6b6868; font-size: 15px;padding-bottom: 5px;">
                 <span v-html="getView(patent, 'title')"></span>
-                <el-link v-if="projectId" type="primary" @click.native="handleChange(patent, 'title')"
+                <el-link v-if="haveTranslatedText(patent, 'title')" type="primary" @click.native="handleChange(patent, 'title')"
                   style="margin-left: 10px;margin-top: -3px;">
                   <span v-if="!patent.change">切换译文</span>
                   <span v-else>切换原文</span>

+ 1 - 1
src/views/project/patentDetails/components/patentMessage/PatentBasic.vue

@@ -8,7 +8,7 @@
               <el-tab-pane label="摘要" name="0">
                 <p class="common" :data-type="'摘要'+(patent.change2?'译文':'原文')" :style="setStyle()" v-html="getView(patent, 'abstractStr','摘要'+(patent.change2?'译文':'原文'))"></p>
                
-             <span>
+             <span v-if="haveTranslatedText(patent, 'abstractStr')">
                  <el-link v-if="projectId" type="primary" @click.native="handleChange(patent, 'abstractStr')" >
                   <span v-if="!patent.change2">切换译文</span>
                   <span v-else>切换原文</span>

+ 2 - 2
src/views/project/patentDetails/components/patentMessage/PatentImage.vue

@@ -76,7 +76,7 @@ export default {
     if (this.outside) {//外部
       this.getData()
     } else {
-      this.refresh()
+      this.refreshData()
     }
   },
   methods: {
@@ -105,7 +105,7 @@ export default {
       })
     },
     // 获取内部的附图
-    refresh() {
+    refreshData() {
       if(this.patent.image && this.patent.image.length>0){
         return false
       }

+ 28 - 2
src/views/project/patentDetails/components/patentMessage/PatentInstruction.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="patent-instruction height_100" @mouseup="mouseup">
     <el-container>
-      <el-header>
-        <el-tabs v-model="name" @tab-click="handleClick">
+      <el-header class="basic_header">
+        <el-tabs v-model="name" @tab-click="handleClick" style="width:100%">
           <el-tab-pane v-for="item in tabs" :key="item.label" :label="item.label" :name="item.name"></el-tab-pane>
         </el-tabs>
       </el-header>
@@ -46,6 +46,7 @@ export default {
     //   this.refresh()
     // },
     patentNo() {
+      this.showTabs()
       if (this.outside) {
         this.getData()
       }
@@ -55,12 +56,37 @@ export default {
     window.addEventListener('resize', this.handleResize)
   },
   mounted() {
+    this.showTabs()
     this.handleResize()
     if (this.outside) {
       this.getData()
     }
   },
   methods: {
+    showTabs(){
+      if(!this.haveTranslatedText(this.patent,'publicFullText') || this.outside){
+        this.tabs = [
+          {
+            label:'原文',
+            name:'0',
+            field:'manual'
+          },
+        ]
+      }else{
+        this.tabs = [
+          {
+            label:'原文',
+            name:'0',
+            field:'manual'
+          },
+          {
+            label:'译文',
+            name:'1',
+            field:'manualOut'
+          },
+        ]
+      }
+    },
     handleClick() {
       this.tabItem = this.tabs.find(item => {
         return item.name == this.name

+ 36 - 0
src/views/project/patentDetails/components/patentMessage/PatentRight.vue

@@ -78,6 +78,7 @@ export default {
     //   this.refresh();
     // },
     patentNo() {
+        this.showTabs()
         this.initData();
         if(this.name == 2){
           this.show = false
@@ -98,10 +99,45 @@ export default {
     window.addEventListener("resize", this.handleResize);
   },
   mounted() {
+    this.showTabs()
     this.handleResize();
     this.initData();
   },
   methods: {
+    showTabs(){
+      if(!this.haveTranslatedText(this.patent,'claim') || this.outside){
+        this.tabs = [
+          {
+            label:'原文',
+            name:'0',
+            field:'content'
+          },
+          {
+            label:'权要树',
+            name:'2',
+            field:'contentOut'
+          },
+        ]
+      }else{
+        this.tabs = [
+          {
+            label:'原文',
+            name:'0',
+            field:'content'
+          },
+          {
+            label:'译文',
+            name:'1',
+            field:'contentOut'
+          },
+          {
+            label:'权要树',
+            name:'2',
+            field:'contentOut'
+          },
+        ]
+      }
+    },
     handleClick(tab, event) {
       this.tabItem  = this.tabs.find(item=>{
         return item.name == this.name

+ 1 - 1
src/views/project/patentDetails/components/patentMessage/mixins/index.js

@@ -15,7 +15,7 @@ export const patentDetails = {
       default: false
     },
     projectType: {
-      type: String,
+      type: [String,Number],
       default: 2//判断是不是从专题库进入专利详情1为专题库(专题库已传1)2为报告(报告未传2)
     },
     patentNo:{

+ 1 - 1
src/views/project/patentDetails/components/patentMessage/pageProduct.vue

@@ -194,7 +194,7 @@ export default {
     chooseList(val) {
       let params = {
         productIds: val,
-        patentNos: this.patentNo
+        patentNos: [this.patentNo]
       }
       this.$api.addProductPatent(params).then(res => {
         if (res.code == 200) {

+ 16 - 3
src/views/report/InvalidResponse/components/dialog/addEvidenceReason.vue

@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-dialog  :title="title" :visible.sync="showDialog" width="1000px" :close-on-click-modal="false"  :before-close="handleClose" append-to-body>
-        <el-form :model="form"  ref="form" label-width="80px" label-position="left">
+        <el-form :model="form"  ref="form" label-width="120px" label-position="left">
             <template v-if="['5','4','8'].indexOf(form.statutesId) ==-1">
                 <el-form-item label="权利要求" prop="claimSort">
                     权要{{ form.claimSort+1 }}
@@ -14,7 +14,7 @@
             <el-form-item label="无效理由" prop="statutesContent">
                 {{ form.statutesContent }}
             </el-form-item>
-            <el-form-item label="证据组合" prop="proofGroupDescription">
+            <el-form-item :label="(ifSecondInvalid?'第二次':'第一次') + '证据组合'" prop="proofGroupDescription">
                 <div v-if="['2','3','4','8'].indexOf(form.statutesId) !=-1">
                     <div v-if="editProofGroupDescription" style="display:flex;align-items:center;">
                         <el-input type="textarea" style="width:100%" v-model="descriptions"></el-input>
@@ -225,9 +225,22 @@ export default {
             projectId:this.projectId,
             statutesId:this.form.statutesId,
             claimId:this.form.claimId,
-            descriptions:[this.descriptions],
+            descriptions:[],
             id:this.form.groupId,
         }
+        if(this.ifSecondInvalid){
+            params.descriptions = [
+                {
+                    description2:this.descriptions
+                }
+            ]
+        }else{
+            params.descriptions = [
+                {
+                    description1:this.descriptions
+                }
+            ]
+        }
         this.$api.addProofGroup(params).then(response=>{
             if(response.code == 200){
                 this.cancelContents()

+ 15 - 2
src/views/report/InvalidResponse/components/dialog/addInvalidResponse.vue

@@ -58,7 +58,7 @@
                     </el-form-item>
                     <div class="proofGroup">
                         <div style="display:flex;justify-content:space-between;padding-bottom:10px">
-                            <div>证据组合</div>
+                            <div>{{ifSecondInvalid?'第二次':'第一次'}}证据组合</div>
                             <div>
                                 <el-button type="primary" size="small" @click="add">添加</el-button>
                             </div>
@@ -97,6 +97,9 @@ export default {
         default:()=>{
             return []
         }
+    },
+    ifSecondInvalid:{
+        default:false
     }
   },
   data() {
@@ -210,7 +213,17 @@ export default {
     },
     //添加证据组合
     addProofGroup(){
-        this.form.descriptions = this.form.proofGroups.map(item=>item.descriptions)
+        this.form.descriptions = this.form.proofGroups.map(item=>{
+            if(this.ifSecondInvalid){
+                return {
+                    description2: item.descriptions
+                }
+            }else{
+                return {
+                    description1: item.descriptions
+                }
+            }
+        })
         this.form.projectId = this.projectId
         this.$api.addProofGroup(this.form).then(response=>{
             if(response.code == 200){

+ 58 - 212
src/views/report/InvalidResponse/components/reasonsAndEvidence/details.vue

@@ -38,9 +38,9 @@
                 <div class="right">
                     <div v-if="edit">
                         <el-select v-model="row.rbDecision" @change="(val)=>updatePatentClaimMessage(val,'rbDecision')"  placeholder="请选择">
-                            <el-option label="维持有效"  value="维持有效"></el-option>
-                            <el-option label="部分有效"  value="部分有效"></el-option>
-                            <el-option label="无效"  value="无效"></el-option>
+                            <el-option label="基于原权要维持有效"  value="基于原权要维持有效"></el-option>
+                            <el-option label="基于修改后权要维持有效"  value="基于修改后权要维持有效"></el-option>
+                            <el-option label="全部无效"  value="全部无效"></el-option>
                         </el-select>
                     </div>
                     <div v-else>
@@ -55,9 +55,9 @@
                 <div class="right">
                     <div v-if="edit">
                         <el-select v-model="row.courtDecision1" @change="(val)=>updatePatentClaimMessage(val,'courtDecision1')" placeholder="请选择">
-                            <el-option label="维持有效"  value="维持有效"></el-option>
-                            <el-option label="部分有效"  value="部分有效"></el-option>
-                            <el-option label="无效"  value="无效"></el-option>
+                            <el-option label="基于原权要维持有效"  value="基于原权要维持有效"></el-option>
+                            <el-option label="基于修改后权要维持有效"  value="基于修改后权要维持有效"></el-option>
+                            <el-option label="全部无效"  value="全部无效"></el-option>
                         </el-select>
                     </div>
                     <div v-else>
@@ -72,9 +72,9 @@
                 <div class="right">
                     <div v-if="edit">
                         <el-select v-model="row.courtDecision2" @change="(val)=>updatePatentClaimMessage(val,'courtDecision2')" placeholder="请选择">
-                            <el-option label="维持有效"  value="维持有效"></el-option>
-                            <el-option label="部分有效"  value="部分有效"></el-option>
-                            <el-option label="无效"  value="无效"></el-option>
+                            <el-option label="基于原权要维持有效"  value="基于原权要维持有效"></el-option>
+                            <el-option label="基于修改后权要维持有效"  value="基于修改后权要维持有效"></el-option>
+                            <el-option label="全部无效"  value="全部无效"></el-option>
                         </el-select>
                     </div>
                     <div v-else>
@@ -204,7 +204,7 @@
             </template>
         </template>
         <template  v-if="['2','3','4','8'].indexOf(row.statutesId) !=-1">
-            <div>
+            <!-- <div>
                 <div class="left">
                     组合
                 </div>
@@ -213,7 +213,7 @@
                         <span v-html="row.proofGroupDescription"> </span>
                     </div>
                 </div>
-            </div>
+            </div> -->
             <div v-for="(item, index) in groupValue" :key="index">
                 <div class="left">
                     {{item.label}}
@@ -337,7 +337,14 @@
             </template>
         </template>
     </div>
-    <div v-if="content.showFeature">
+    <!-- 控制隐藏 -->
+    <div class="controlShow">
+        <el-link type="primary" @click="controlShow">
+            {{ content.showFeature?'隐藏':'展开' }}
+        </el-link>
+    </div>
+
+    <div v-if="content.showFeature || edit">
         <div v-for="(item,index) in content.FirstEvidenceReason" :key="index">
             <div class="content" style="background:#ffca00">
                 <div>
@@ -354,94 +361,6 @@
                     </div>
                 </div>
             </div>
-           
-            <!-- <div class="border" v-if="item.evidenceList && item.evidenceList.length>0">
-                <div class="top">无效证据:</div>
-                <div>
-                    <table class="table">
-                        <tr>
-                            <td>无效证据</td>
-                            <td>无效证据详情</td>
-                            <td>答辩意见陈述情况</td>
-                            <td>答辩意见</td>
-                            <td v-if="!ifSecondInvalid">复审委意见结论</td>
-                            <td v-if="!ifSecondInvalid">复审委意见</td>
-                            <td v-if="!ifSecondInvalid">复审委要点提炼</td>
-                        </tr>
-                        <tr v-for="(literature,i) in item.evidenceList" :key="'literatures'+i">
-                            <td>
-                                <span v-for="(evidence,y) in literature.literatures" :key="'evidence'+y">
-                                    <span v-if="evidence.id <= 0">{{ evidence.name }}</span>
-                                    <span v-else>D{{ evidence.sysOrder }}</span>
-                                    <span v-if="y < literature.literatures.length-1"> + </span>
-                                </span>
-                            </td>
-                            <td>
-                                <div v-if="edit">
-                                    <my-RichText v-model="literature.evidenceText" placeholder="请输入无效证据详情" @change="updateEvidenceMessage($event,'evidenceText',item)"></my-RichText>
-                                </div>
-                                <div v-else>
-                                   <span v-html="literature.evidenceText"> </span>
-                                </div>
-                            </td>
-                            <td>
-                                    <div v-if="edit">
-                                        <el-select v-model="literature.erIfPresentOpinions1"  @change="(val)=>updateEvidenceMessage(val,'ifPresentOpinions1',item)" placeholder="请选择">
-                                            <el-option label="已陈述"  :value="true"></el-option>
-                                            <el-option label="未陈述"  :value="false"></el-option>
-                                        </el-select>
-                                    </div>
-                                    <div v-else>
-                                        <span v-if="literature.erIfPresentOpinions1==true">
-                                            已陈述
-                                        </span>
-                                        <span v-else-if="literature.erIfPresentOpinions1==false">
-                                            未陈述
-                                        </span>
-                                        <span v-else>
-                                        </span>
-                                    </div>
-                                </td>
-                            <td>
-                                <div v-if="edit">
-                                    <my-RichText v-model="literature.erPresentOpinions1" placeholder="请输入答辩意见" @change="updateEvidenceMessage($event,'presentOpinions1',item)"></my-RichText>
-                                </div>
-                                <div v-else>
-                                   <span v-html="literature.erPresentOpinions1"> </span>
-                                </div>
-                            </td>
-                            <td v-if="!ifSecondInvalid" >
-                                <div v-if="edit">
-                                        <el-select v-model="literature.erRbSummary"  @change="(val)=>updateEvidenceMessage(val,'rbSummary',item.secondEvidenceReason)" placeholder="请选择">
-                                            <el-option label="认可请求人意见"  value="认可请求人意见"></el-option>
-                                            <el-option label="认可权利人意见"  value="认可权利人意见"></el-option>
-                                            <el-option label="均不认可"  value="均不认可"></el-option>
-                                        </el-select>
-                                    </div>
-                                    <div v-else>
-                                        {{ literature.erRbSummary }}
-                                    </div>
-                                </td>
-                            <td v-if="!ifSecondInvalid">
-                                <div v-if="edit">
-                                    <my-RichText v-model="literature.erRbOpinions" placeholder="请输入复审委意见" @change="updateEvidenceMessage($event,'rbOpinions',item)"></my-RichText>
-                                </div>
-                                <div v-else>
-                                   <span v-html="literature.erRbOpinions"> </span>
-                                </div>
-                            </td>
-                            <td v-if="!ifSecondInvalid">
-                                <div v-if="edit">
-                                    <my-RichText v-model="literature.erRbDecisionKey" placeholder="请输入复审委要点提炼" @change="updateEvidenceMessage($event,'rbDecisionKey',item)"></my-RichText>
-                                </div>
-                                <div v-else>
-                                    <span v-html="literature.erRbDecisionKey"> </span>
-                                </div>
-                            </td>
-                        </tr>
-                    </table>
-                </div>
-            </div> -->
             <div class="border"  v-if="['2','3','4','8'].indexOf(row.statutesId) !=-1">
                 <div class="top">无效证据</div>
                 <div class="content" v-for="(literature,i) in item.evidenceList" :key="'literatures'+i">
@@ -474,13 +393,13 @@
                             <div class="right">
                                 <div v-if="edit">
                                     <el-select v-model="literature.erIfPresentOpinions1"  @change="(val)=>updateEvidenceMessage(val,'ifPresentOpinions1',item)" placeholder="请选择">
-                                        <el-option label="陈述"  :value="true"></el-option>
-                                        <el-option label="未陈述"  :value="false"></el-option>
+                                        <el-option label="针对性陈述"  :value="true"></el-option>
+                                        <el-option label="未针对性陈述"  :value="false"></el-option>
                                     </el-select>
                                 </div>
                                 <div v-else>
-                                    <span v-if="literature.erIfPresentOpinions1==true"> 陈述</span>
-                                    <span v-else-if="literature.erIfPresentOpinions1==false">未陈述</span>
+                                    <span v-if="literature.erIfPresentOpinions1==true"> 针对性陈述</span>
+                                    <span v-else-if="literature.erIfPresentOpinions1==false">未针对性陈述</span>
                                     <span v-else></span>
                                 </div>
                             </div>
@@ -661,13 +580,13 @@
                     <div class="right">
                         <div v-if="edit">
                             <el-select v-model="item.feIfPresentOpinions1"  @change="(val)=>updateFeatureMessage(val,'ifPresentOpinions1',item)" placeholder="请选择">
-                                <el-option label="陈述"  :value="true"></el-option>
-                                <el-option label="未陈述"  :value="false"></el-option>
+                                <el-option label="针对性陈述"  :value="true"></el-option>
+                                <el-option label="未针对性陈述"  :value="false"></el-option>
                             </el-select>
                         </div>
                         <div v-else>
-                            <span v-if="item.feIfPresentOpinions1==true"> 陈述</span>
-                            <span v-else-if="item.feIfPresentOpinions1==false">未陈述</span>
+                            <span v-if="item.feIfPresentOpinions1==true"> 针对性陈述</span>
+                            <span v-else-if="item.feIfPresentOpinions1==false">未针对性陈述</span>
                             <span v-else></span>
                         </div>
                     </div>
@@ -687,93 +606,6 @@
                 </div>
             </div>
             <template v-if="ifSecondInvalid">
-                <!-- <div class="border" v-if="item.secondEvidenceReason&&item.secondEvidenceReason.evidenceList && item.secondEvidenceReason.evidenceList.length>0">
-                    <div class="top">第二次无效证据:</div>
-                    <div>
-                        <table class="table">
-                            <tr>
-                                <td>无效证据</td>
-                                <td>无效证据详情</td>
-                                <td>答辩意见陈述情况</td>
-                                <td>答辩意见</td>
-                                <td>复审委意见结论</td>
-                                <td>复审委意见</td>
-                                <td>复审委要点提炼</td>
-                            </tr>
-                            <tr v-for="(literature,i) in item.secondEvidenceReason.evidenceList" :key="'literatures'+i">
-                                <td>
-                                    <span v-for="(evidence,y) in literature.literatures" :key="'evidence'+y">
-                                        <span v-if="evidence.id <= 0">{{ evidence.name }}</span>
-                                        <span v-else>D{{ evidence.sysOrder }}</span>
-                                        <span v-if="y < literature.literatures.length-1"> + </span>
-                                    </span>
-                                </td>
-                                <td>
-                                    <div v-if="edit">
-                                        <my-RichText v-model="literature.evidenceText" placeholder="请输入无效证据详情" @change="updateEvidenceMessage($event,'evidenceText',item.secondEvidenceReason)"></my-RichText>
-                                    </div>
-                                    <div v-else>
-                                        <span v-html="literature.evidenceText"> </span>
-                                    </div>
-                                </td>
-                                <td>
-                                    <div v-if="edit">
-                                        <el-select v-model="literature.erIfPresentOpinions1"  @change="(val)=>updateEvidenceMessage(val,'ifPresentOpinions1',item.secondEvidenceReason)" placeholder="请选择">
-                                            <el-option label="已陈述"  :value="true"></el-option>
-                                            <el-option label="未陈述"  :value="false"></el-option>
-                                        </el-select>
-                                    </div>
-                                    <div v-else>
-                                        <span v-if="literature.erIfPresentOpinions1==true">
-                                            已陈述
-                                        </span>
-                                        <span v-else-if="literature.erIfPresentOpinions1==false">
-                                            未陈述
-                                        </span>
-                                        <span v-else>
-                                        </span>
-                                    </div>
-                                </td>
-                                <td>
-                                    <div v-if="edit">
-                                        <my-RichText v-model="literature.erPresentOpinions1" placeholder="请输入答辩意见" @change="updateEvidenceMessage($event,'presentOpinions1',item.secondEvidenceReason)"></my-RichText>
-                                    </div>
-                                    <div v-else>
-                                        <span v-html="literature.erPresentOpinions1"> </span>
-                                    </div>
-                                </td>
-                                <td>
-                                    <div v-if="edit">
-                                        <el-select v-model="literature.erRbSummary"  @change="(val)=>updateEvidenceMessage(val,'rbSummary',item.secondEvidenceReason)" placeholder="请选择">
-                                            <el-option label="认可请求人意见"  value="认可请求人意见"></el-option>
-                                            <el-option label="认可权利人意见"  value="认可权利人意见"></el-option>
-                                            <el-option label="均不认可"  value="均不认可"></el-option>
-                                        </el-select>
-                                    </div>
-                                    <div v-else>
-                                        {{ literature.erRbSummary }}
-                                    </div>
-                                </td>
-                                <td>
-                                    <div v-if="edit">
-                                        <my-RichText v-model="literature.erRbOpinions" placeholder="请输入复审委意见" @change="updateEvidenceMessage($event,'rbOpinions',item.secondEvidenceReason)"></my-RichText>
-                                    </div>
-                                    <div v-else>
-                                        <span v-html="literature.erRbOpinions"> </span>
-                                    </div>
-                                </td>
-                                <td>
-                                    <div v-if="edit">
-                                        <my-RichText v-model="literature.erRbDecisionKey" placeholder="请输入复审委要点提炼" @change="updateEvidenceMessage($event,'rbDecisionKey',item.secondEvidenceReason)"></my-RichText>
-                                    </div>
-                                    <div v-else> 
-                                        <span v-html="literature.erRbDecisionKey"> </span>
-                                    </div>
-                                </td>
-                            </tr>
-                        </table>
-                    </div>
-                </div> -->
                 <div class="border" v-if="['2','3','4','8'].indexOf(row.statutesId) !=-1 && item.secondEvidenceReason&&item.secondEvidenceReason.evidenceList && item.secondEvidenceReason.evidenceList.length>0">
                     <div class="top">第二次无效证据</div>
                     <div class="content" v-for="(literature,i) in item.secondEvidenceReason.evidenceList" :key="'literatures'+i">
@@ -806,13 +638,13 @@
                                 <div class="right">
                                     <div v-if="edit">
                                         <el-select v-model="literature.erIfPresentOpinions1"  @change="(val)=>updateEvidenceMessage(val,'ifPresentOpinions1',item.secondEvidenceReason,2)" placeholder="请选择">
-                                            <el-option label="陈述"  :value="true"></el-option>
-                                            <el-option label="未陈述"  :value="false"></el-option>
+                                            <el-option label="针对性陈述"  :value="true"></el-option>
+                                            <el-option label="未针对性陈述"  :value="false"></el-option>
                                         </el-select>
                                     </div>
                                     <div v-else>
-                                        <span v-if="literature.erIfPresentOpinions1==true"> 陈述</span>
-                                        <span v-else-if="literature.erIfPresentOpinions1==false">未陈述</span>
+                                        <span v-if="literature.erIfPresentOpinions1==true"> 针对性陈述</span>
+                                        <span v-else-if="literature.erIfPresentOpinions1==false">未针对性陈述</span>
                                         <span v-else></span>
                                     </div>
                                 </div>
@@ -993,13 +825,13 @@
                         <div class="right">
                             <div v-if="edit">
                                 <el-select v-model="item.feIfPresentOpinions2"  @change="(val)=>updateFeatureMessage(val,'ifPresentOpinions2',item,2)" placeholder="请选择">
-                                    <el-option label="陈述"  :value="true"></el-option>
-                                    <el-option label="未陈述"  :value="false"></el-option>
+                                    <el-option label="针对性陈述"  :value="true"></el-option>
+                                    <el-option label="未针对性陈述"  :value="false"></el-option>
                                 </el-select>
                             </div>
                             <div v-else>
-                                <span v-if="item.feIfPresentOpinions2==true"> 陈述</span>
-                                <span v-else-if="item.feIfPresentOpinions2==false">未陈述</span>
+                                <span v-if="item.feIfPresentOpinions2==true"> 针对性陈述</span>
+                                <span v-else-if="item.feIfPresentOpinions2==false">未针对性陈述</span>
                                 <span v-else></span>
                             </div>
                         </div>
@@ -1223,14 +1055,22 @@ export default {
         },
         groupValue:[
             {
-                label:'总无效理由',
+                label:'第一次证据组合',
+                field:'description'
+            },
+            {
+                label:'第一次总无效理由',
                 field:'invalidReasonDetail1'
             },
             {
-                label:'总答辩意见',
+                label:'第一次总答辩意见',
                 field:'presentOpinions1'
             },
             {
+                label:'第二次证据组合',
+                field:'description2'
+            },
+            {
                 label:'第二次总无效理由',
                 field:'invalidReasonDetail2'
             },
@@ -1262,6 +1102,9 @@ export default {
         this.getData()
   },
   methods: {
+    controlShow(){
+        this.$set(this.content,'showFeature',!this.content.showFeature)
+    },
     toTop(){
         let target = this.$refs.detailsHead
         target.scrollTo(
@@ -1288,8 +1131,8 @@ export default {
         this.getData()
     },
     updateData(field,val,type,row,num){
-        var arr = ['evidenceText','ifPresentOpinions1','ifPresentOpinions2','rbSummary','rbDecision','courtDecision1','courtDecision1']
-        var types = [5,1]
+        var arr = ['evidenceText','ifPresentOpinions1','ifPresentOpinions2','rbSummary','rbDecision','courtDecision1','courtDecision1','description','description2']
+        var types = [5,1,3]
         var ifGroup = ['2','3','4','8'].indexOf(this.row.statutesId) !=-1
         if(arr.indexOf(field)!=-1 && types.includes(type)){
             this.$emit('update',field,val,row,num,ifGroup)
@@ -1350,7 +1193,7 @@ export default {
             if(response.code == 200){
                 this.$message.success('编辑成功')
                 this.$forceUpdate()
-                this.updateData(field,val,3)
+                this.updateData(field,val,3,this.content.proofGroupMessage)
             }
         }).catch(error=>{
             this.$message.error('编辑失败')
@@ -1428,15 +1271,14 @@ export default {
             obj[item].feRbDecisionKey = (obj2[item]?obj2[item].feRbDecisionKey:'') || obj[item].feRbDecisionKey
            })
             this.content.FirstEvidenceReason = Object.values(obj)
-            this.content.showFeature = false
+            this.content.showFeature = true
             this.$nextTick(()=>{
-                this.content.showFeature = true
+                this.content.showFeature = false
             })
             this.row.details = this.content
         }else{
            this.content = this.row.details 
         }
-        
     },
     //装载数据
     freightData(FirstEvidenceReason1){
@@ -1489,7 +1331,11 @@ export default {
     --padding:10px;
     padding:15px;
     overflow-y: auto;
-    
+    .controlShow{
+        display: flex;
+        justify-content: flex-start;
+        padding:10px
+    }
     .head{
         width: 100%;
         display: flex;

+ 246 - 23
src/views/report/InvalidResponse/components/reasonsAndEvidence/reasonsAndEvidence.vue

@@ -3,11 +3,12 @@
     <el-container>
         <el-header>
             <div class="head">
-                <el-dropdown split-button type="primary" size="small" @command="handleCommand"  @click="handleCommand('1')">
+                <el-dropdown split-button type="primary" size="small" @command="handleCommand"  @click="handleCommand('0')">
                     <span>
-                        添加无效理由
+                        显示栏位管理
                     </span>
                     <el-dropdown-menu slot="dropdown">
+                        <el-dropdown-item command="1">添加无效理由</el-dropdown-item>
                         <el-dropdown-item command="2">添加证据组合</el-dropdown-item>
                         <el-dropdown-item command="3">添加复审委决定</el-dropdown-item>
                         <el-dropdown-item command="4">添加法院决定</el-dropdown-item>
@@ -26,7 +27,189 @@
                         
                     </template>
                 </el-table-column>
-                <el-table-column prop="claimSort" label="权要/说明书/附图" width="120" align="center">
+
+
+                <el-table-column v-for="item in columnList.filter(item=>!item.ifHidden)" :key="item.value" :prop="item.field" :label="item.name"  align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            <!-- 权要/说明书/附图 -->
+                            <template v-if="item.value == 'claimSort'">
+                                <div>
+                                    <span v-if="scope.row.relatedContent == 1">
+                                        <span :class="getClaimDel(scope.row)?'del':''">权要{{ scope.row.claimSort + 1}} </span>
+                                        <span v-if="['5','4','8'].indexOf(scope.row.statutesId) ==-1">
+                                            <el-popover
+                                                popper-class="reasonAndEvidence"
+                                                placement="bottom"
+                                                width="100"
+                                                trigger="click"
+                                            >
+                                                <div class="menuList">
+                                                    <div class="menuListLi" v-if="!getClaimDel(scope.row)" @click="delClaim(scope.row)">删除</div>
+                                                    <div class="menuListLi" @click="checkHistory(scope.row,1)">查看</div>
+                                                    <div class="menuListLi"  v-if="!getClaimDel(scope.row)" @click="addClaimFeature(scope.row)">添加特征</div>
+                                                </div>
+                                                <i slot="reference" class="el-icon-caret-bottom"></i>
+                                            </el-popover>
+                                        </span>
+                                    </span>
+                                    <span v-else-if="scope.row.relatedContent == 0">说明书</span>
+                                    <span v-else>附图</span>
+                                </div>
+                            </template>
+                            <!-- 无效法条 -->
+                            <template v-if="item.value == 'statutesId'">
+                                <div>
+                                    <span>{{ getProvisionName(scope.row.statutesId) }}</span>
+                                </div>
+                            </template>
+                            <!-- 证据组合 -->
+                            <template v-if="item.value == 'proofGroup'">
+                                <div>
+                                    <div v-if="scope.row.proofGroupDescription">第一次证据组合:{{ scope.row.proofGroupDescription }}</div>
+                                    <div v-if="scope.row.proofGroupDescription2">第二次证据组合:{{ scope.row.proofGroupDescription2 }}</div>
+                                </div>
+                            </template>
+                            <!-- 原权要特征内容 -->
+                            <template v-if="item.value == 'feature'">
+                                <div v-if="scope.row.featureText && ['4','8'].indexOf(scope.row.statutesId) ==-1">
+                                    <span :class="getFeatureDel(scope.row)?'del':''">{{ scope.row.featureText }}</span> 
+                                        <span v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
+                                            <el-popover
+                                                popper-class="reasonAndEvidence"
+                                                placement="bottom"
+                                                width="100"
+                                                trigger="click"
+                                            >
+                                                <div class="menuList">
+                                                    <div class="menuListLi" v-if="!getFeatureDel(scope.row)" @click="delFeature(scope.row)">删除</div>
+                                                    <div class="menuListLi" @click="checkHistory(scope.row,2)">查看</div>
+                                                </div>
+                                                <i slot="reference" class="el-icon-caret-bottom"></i>
+                                            </el-popover>
+                                        </span>  
+                                </div>
+                                <div v-else>
+                                    <div v-if="scope.row.featureText">
+                                        <el-image style="width:120px" :src="$commonJS.checkViewer(scope.row.featureText)" :preview-src-list="[$commonJS.checkViewer(scope.row.featureText)]"></el-image>
+                                    </div>
+                                </div>
+                            </template>
+                            <!-- 第一次无效及补充证据 -->
+                            <template v-if="item.value == 'evidenceText'">
+                                <div v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
+                                    <span v-for="(item,index) in scope.row.literatures" :key="item.id">
+                                            <span v-if="item.id <= 0">{{ item.name }}</span>
+                                            <span v-else class="cursor_pointer" @click="checkEvidenceDetails(item)">D{{ item.sysOrder }}</span>
+                                            <span v-if="index < scope.row.literatures.length-1"> + </span>
+                                    </span>
+                                    <span v-if="['4','8'].indexOf(scope.row.statutesId) !=-1" v-html="getImageHTML(scope.row.evidenceText)"></span>
+                                </div>
+                                <div v-else>
+                                    <span v-html="getEvidenceDescription(scope.row,1)"></span>
+                                </div>
+                            </template>
+                            <!-- 修改后权要特征 -->
+                            <template v-if="item.value == 'feature1'">
+                                <div>
+                                    {{ getFeatureCommon(scope.row,1) }}
+                                </div>
+                            </template>
+                            <!-- 第一次答辩意见 -->
+                            <template v-if="item.value == 'erIfPresentOpinions1'">
+                                <div v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
+                                    <span v-if="scope.row.erIfPresentOpinions1==true">
+                                        针对性陈述
+                                    </span>
+                                    <span v-else-if="scope.row.erIfPresentOpinions1==false">
+                                        未针对性陈述
+                                    </span>
+                                    <span v-else></span>
+                                </div>
+                                <div v-else>
+                                    <span v-if="scope.row.feIfPresentOpinions1==true">
+                                        针对性陈述
+                                    </span>
+                                    <span v-else-if="scope.row.feIfPresentOpinions1==false">
+                                        未针对性陈述
+                                    </span>
+                                    <span v-else></span>
+                                </div>
+                            </template>
+                            <!-- 第二次无效证据 -->
+                            <template v-if="item.value == 'secondEvidence'">
+                                <div  v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
+                                    <span v-for="(item,index) in scope.row.secondLiteratures" :key="item.id">
+                                            <span v-if="item.id <= 0">{{ item.name }}</span>
+                                            <span v-else class="cursor_pointer" @click="checkEvidenceDetails(item)">D{{ item.sysOrder }}</span>
+                                            <span v-if="index < scope.row.secondLiteratures.length-1"> + </span>
+                                    </span>
+                                    <span v-if="['4','8'].indexOf(scope.row.statutesId) !=-1" v-html="getImageHTML(scope.row.secondEvidenceText)"></span>
+                                </div>
+                                <div v-else>
+                                    <span v-html="getEvidenceDescription(scope.row,2)"></span>
+                                </div>
+                            </template>
+                            <!-- 第二次修改后权要特征 -->
+                            <template v-if="item.value == 'feature2'">
+                                <div>
+                                    {{ getFeatureCommon(scope.row,2) }}
+                                </div>
+                            </template>
+                            <!-- 第二次答辩意见 -->
+                            <template v-if="item.value == 'secondErIfPresentOpinions1'">
+                                <div v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
+                                    <span v-if="scope.row.secondErIfPresentOpinions1==true">
+                                        针对性陈述
+                                    </span>
+                                    <span v-else-if="scope.row.secondErIfPresentOpinions1==false">
+                                        未针对性陈述
+                                    </span>
+                                    <span v-else></span>
+                                </div>
+                                <div v-else>
+                                    <span v-if="scope.row.feIfPresentOpinions2==true">
+                                        针对性陈述
+                                    </span>
+                                    <span v-else-if="scope.row.feIfPresentOpinions2==false">
+                                        未针对性陈述
+                                    </span>
+                                    <span v-else></span>
+                                </div>
+                            </template>
+                            <!-- 复审委意见 -->
+                            <template v-if="item.value == 'erRbSummary'">
+                                <div v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
+                                    <span v-html="scope.row.erRbSummary"></span>
+                                </div>
+                                <div>
+                                    <span v-html="scope.row.feRbSummary"></span>
+                                </div>
+                            </template>
+                            <!-- 复审委决定 -->
+                            <template v-if="item.value == 'rbDecision'">
+                                <div>
+                                    <span v-html="scope.row.rbDecision"></span>
+                                </div>
+                            </template>
+                            <!-- 一审法院决定 -->
+                            <template v-if="item.value == 'courtDecision1'">
+                                <div>
+                                    <span v-html="scope.row.courtDecision1"></span>
+                                </div>
+                            </template>
+                            <!-- 二审法院决定 -->
+                            <template v-if="item.value == 'courtDecision2'">
+                                <div>
+                                    <span v-html="scope.row.courtDecision2"></span>
+                                </div>
+                            </template>
+                        </div>
+                    </template>
+                </el-table-column>
+
+
+                <!-- <el-table-column prop="claimSort" label="权要/说明书/附图" width="120" align="center">
                     <template slot-scope="scope">
                         <div>
                             <span v-if="scope.row.relatedContent == 1">
@@ -59,8 +242,15 @@
                         </div>
                     </template>
                 </el-table-column>
-                <el-table-column prop="proofGroupDescription" label="证据组合" align="center"></el-table-column>
-                <el-table-column prop="featureOrder" label="特征内容">
+                <el-table-column prop="proofGroupDescription" label="证据组合" align="center">
+                    <template slot-scope="scope">
+                        <div>
+                            <div v-if="scope.row.proofGroupDescription">第一次证据组合:{{ scope.row.proofGroupDescription }}</div>
+                            <div v-if="scope.row.proofGroupDescription2">第二次证据组合:{{ scope.row.proofGroupDescription2 }}</div>
+                        </div>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="featureOrder" label="特征内容" min-width="250">
                     <template slot-scope="scope" >
                         <div v-if="scope.row.featureText && ['4','8'].indexOf(scope.row.statutesId) ==-1">
                            <span :class="getFeatureDel(scope.row)?'del':''">{{ scope.row.featureText }}</span> 
@@ -113,19 +303,19 @@
                     <template slot-scope="scope">
                         <div v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
                            <span v-if="scope.row.erIfPresentOpinions1==true">
-                                陈述
+                                针对性陈述
                             </span>
                             <span v-else-if="scope.row.erIfPresentOpinions1==false">
-                                未陈述
+                                未针对性陈述
                             </span>
                             <span v-else></span>
                         </div>
                         <div v-else>
                             <span v-if="scope.row.feIfPresentOpinions1==true">
-                                陈述
+                                针对性陈述
                             </span>
                             <span v-else-if="scope.row.feIfPresentOpinions1==false">
-                                未陈述
+                                未针对性陈述
                             </span>
                             <span v-else></span>
                         </div>
@@ -158,19 +348,19 @@
                             <template slot-scope="scope">
                                 <div v-if="['2','3','4','8'].indexOf(scope.row.statutesId) !=-1">
                                     <span v-if="scope.row.secondErIfPresentOpinions1==true">
-                                        陈述
+                                        针对性陈述
                                     </span>
                                     <span v-else-if="scope.row.secondErIfPresentOpinions1==false">
-                                        未陈述
+                                        未针对性陈述
                                     </span>
                                     <span v-else></span>
                                 </div>
                                 <div v-else>
                                     <span v-if="scope.row.feIfPresentOpinions2==true">
-                                        陈述
+                                        针对性陈述
                                     </span>
                                     <span v-else-if="scope.row.feIfPresentOpinions2==false">
-                                        未陈述
+                                        未针对性陈述
                                     </span>
                                     <span v-else></span>
                                 </div>
@@ -207,7 +397,7 @@
                             <span v-html="scope.row.courtDecision2"></span>
                         </div>
                     </template>
-                </el-table-column>
+                </el-table-column> -->
                 <el-table-column prop="proofGroupDescription" label="操作" align="center" min-width="130px">
                     <template slot-scope="scope">
                         <div>
@@ -232,6 +422,7 @@
     <ReviewCommittee ref="ReviewCommittee" :projectId="projectId" :ifSecondInvalid="ifSecondInvalid" @save="getList"></ReviewCommittee>
     <addFeature ref="addFeature" :projectId="projectId" :ifSecondInvalid="ifSecondInvalid" @save="getList"></addFeature>
 
+    <fields ref="field" :projectId="projectId" url="setEvidenceReasonTableColumns" @getFieldList="getFieldList"></fields>
   </div>
 </template>
 
@@ -242,6 +433,7 @@ import claimAndFeatureHistory from '../dialog/claimAndFeatureHistory.vue';
 import reasonsAndEvidenceDetails from './details.vue'
 import ReviewCommittee from '../dialog/ReviewCommittee.vue';
 import addFeature from '../dialog/addFeature.vue'
+import fields from '@/views/components/dialog/fields.vue';
 import { getTableHeight } from '@/views/components/mixins'
 import mixins from './mixins';
 export default {
@@ -251,12 +443,13 @@ export default {
     claimAndFeatureHistory,
     reasonsAndEvidenceDetails,
     ReviewCommittee,
-    addFeature
+    addFeature,
+    fields
   },
   mixins:[getTableHeight,mixins],
   props: {
     projectId:{
-        default:0
+        default:null
     },
     ifSecondInvalid:{
         default:false
@@ -275,7 +468,8 @@ export default {
         mergeArr: ['claimSort','statutesId','proofGroupDescription','featureOrder'],
         expends:[],
         refreshData:true,
-        claims:[]
+        claims:[],
+        columnList:[]
     };
   },
   watch: {},
@@ -285,7 +479,8 @@ export default {
     }
   },
   created() {},
-  mounted() {
+  async mounted() {
+    this.columnList = await this.$commonJS.getCustomField(null,{projectId:this.projectId},'getEvidenceReasonTableColumns')
     this.getList()
     this.getClaims()
   },
@@ -372,7 +567,7 @@ export default {
             return item.featureGen == type
         })
         if(obj){
-            return obj.common
+            return obj.featureText
         }
         return ''
     },
@@ -427,6 +622,18 @@ export default {
     },
     //更新数据
     updateData(field,val,row,num,ifGroup){
+        if(['description2','description'].includes(field)){
+            var proofGroupId = row.id
+            var obj = {
+                description2:'proofGroupDescription2',
+                description:'proofGroupDescription',
+            }
+            var index = this.tableData.findIndex(item=>{
+                return item.proofGroupId == proofGroupId
+            })
+            this.tableData[index][obj[field]] = val
+            return false
+        }
         if(['rbDecision','courtDecision1','courtDecision1'].includes(field)){
             var claimId = row.claimId
             var index = this.tableData.findIndex(item=>{
@@ -542,6 +749,7 @@ export default {
                             ...obj,
                             proofGroupId : obj.proofGroups[j].id,
                             proofGroupDescription : obj.proofGroups[j].description,
+                            proofGroupDescription2 : obj.proofGroups[j].description2,
                             evidenceReason:obj.proofGroups[j].evidenceReason
                         }
                         if( obj.proofGroups[j].evidenceReason &&  obj.proofGroups[j].evidenceReason.length>0){
@@ -876,6 +1084,9 @@ export default {
             return false
         }
         switch(option){
+            case '0':// 显示栏位管理
+                this.showField()
+                break;
             case '1'://添加无效理由(无效法条)
             case '2'://添加证据组合
                 this.addInvalidResponse(option)
@@ -891,6 +1102,14 @@ export default {
                 break;
         }
     },
+    // 显示栏位管理
+    showField() {
+      this.$refs.field.open(this.columnList)
+    },
+    // 显示栏位管理组件返回数据
+    getFieldList(val) {
+      this.columnList = val
+    },
     //添加无效理由、证据组合
     addInvalidResponse(type){
         var titles = {
@@ -933,7 +1152,11 @@ export default {
         if(statutes.indexOf(row.statutesId)==-1 && !row.proofGroupId){
             var params = {
                 projectId:this.projectId,
-                descriptions:[''],
+                descriptions:[
+                    {
+                        description1:'',
+                    }
+                ],
                 statutesId:row.statutesId,
                 claimId:row.claimId
             }
@@ -941,12 +1164,13 @@ export default {
                 if(response.code == 200){
                    row.proofGroupId = response.data.data[0]
                    row.proofGroupDescription = ''
+                   row.proofGroupDescription2 = ''
                    var form = {
                         groupId:row.proofGroupId,
                         claimSort:row.claimSort,
                         claimId:row.claimId,
                         claimText:row.claimText,
-                        proofGroupDescription:row.proofGroupDescription,
+                        proofGroupDescription:this.ifSecondInvalid?row.proofGroupDescription2:row.proofGroupDescription,
                         statutesId:row.statutesId,
                         statutesContent:this.getProvisionName(row.statutesId),
                     }
@@ -971,13 +1195,12 @@ export default {
         var data = this.tableData.filter(item=>{
             return item.proofGroupId == row.proofGroupId && item.featureId
         })
-        console.log(data)
         var form = {
             groupId:row.proofGroupId,
             claimSort:row.claimSort,
             claimId:row.claimId,
             claimText:row.claimText,
-            proofGroupDescription:row.proofGroupDescription,
+            proofGroupDescription:this.ifSecondInvalid?row.proofGroupDescription2:row.proofGroupDescription,
             statutesId:row.statutesId,
             statutesContent:this.getProvisionName(row.statutesId),
         }

+ 4 - 5
src/views/task/components/index.vue

@@ -6,7 +6,7 @@
           <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
         </div>
         <div>
-          <el-button v-if="!show" class="margin-right_10" type="primary" size="small" @click="createTask">创建任务</el-button>
+          <el-button v-if="show" class="margin-right_10" type="primary" size="small" @click="createTask">创建任务</el-button>
         </div>
       </el-header>
       <el-main class="height_100">
@@ -497,8 +497,7 @@ export default {
             value: 'value',
             type: 'type',
           })
-
-          var obj = this.searchFiled.find(item => { return item.label == '任务状态' })
+          var obj = this.searchFiled.find(item => { return item.value == "status" })
           if (obj) {
             obj.options = []
             for (let key in this.taskStatus) {
@@ -508,7 +507,7 @@ export default {
               })
             }
           }
-          var obj2 = this.searchFiled.find(item => { return item.label == '任务类型' })
+          var obj2 = this.searchFiled.find(item => { return item.value == "type" })
           if (obj2) {
             obj2.options = []
             for (let key in this.taskType) {
@@ -518,7 +517,7 @@ export default {
               })
             }
           }
-          var obj3 = this.searchFiled.find(item => { return item.label == '流程节点' })
+          var obj3 = this.searchFiled.find(item => { return item.value == "processId" })
           if(obj3){
             obj3.options = this.pathOptions
           }

+ 1 - 1
src/views/task/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <Table :projectId="projectId" :show="true"></Table>
+    <Table :projectId="projectId"></Table>
   </div>
 </template>
 

+ 1 - 1
src/views/visual/title/index.vue

@@ -35,7 +35,7 @@
       return {
         //事件数量
         QuestionTotal: [],
-        //获取应用场景下流程节点对应项目数量
+        //获取应用场景下所属流程对应项目数量
         total: {},
         //当前的应用场景
         title: this.$route.params.title || this.scenarioName,