소스 검색

解决划词高亮bug

zhuliu 1 년 전
부모
커밋
09a6d7d84f
2개의 변경된 파일69개의 추가작업 그리고 7개의 파일을 삭제
  1. 7 5
      src/utils/axios.js
  2. 62 2
      src/utils/model/RichText/mixins.js

+ 7 - 5
src/utils/axios.js

@@ -82,6 +82,12 @@ _axios.interceptors.response.use(
     }
     if (code === 500) {
       // TODO
+      if(response.data == '未登录'){
+        console.log('未登录')
+        Router.push({
+          path: `/login`
+        }).then(r => {})
+      }
       return Promise.reject(response.data)
     } else if (code === 0) {
       isRefreshing = false
@@ -101,11 +107,7 @@ _axios.interceptors.response.use(
       title: '系统错误',
       message: error.response.data.message
     })
-    if(error.response.data.message == '未登录'){
-      Router.push({
-        path: `/login`
-      }).then(r => {})
-    }
+    
     isRefreshing = false
     return Promise.reject(error);
   }

+ 62 - 2
src/utils/model/RichText/mixins.js

@@ -30,7 +30,7 @@ export default {
 
         //拆分html
         SplitHtmlTag1(el) {
-            let temInnerHtml = el.trim();
+            let temInnerHtml = el;
             let pattern = /<[^>]+>/g;
             let Indexs = [];
             let i = 0
@@ -105,6 +105,20 @@ export default {
             }
             return arr
         },
+        checkBetweenText(data,startIndex,endIndex){
+            var arr = []
+            for(var i = startIndex;i<endIndex;i++){
+                if(data[i].type == 'text'){
+                    arr.push(
+                        {
+                            text: data[i].text,
+                            index:i
+                        }
+                    )
+                }
+            }
+            return arr
+        },
         //修改html
         changeHtml(data,tag){
             var startIndex = 0
@@ -119,6 +133,11 @@ export default {
                         sign = true
                     }else{
                         if(!sign){
+                            if(data[i].text.indexOf('&nbsp;')!=-1){
+                                var a = data[i].text.replace(/&nbsp;/g,' ')
+                                currentIndex += a.length
+                                continue
+                            }
                             currentIndex += data[i].text.length
                         }
                         
@@ -127,12 +146,20 @@ export default {
                         endIndex = i
                         break
                     }else{
+                        if(data[i].text.indexOf('&nbsp;')!=-1){
+                            var a = data[i].text.replace(/&nbsp;/g,' ')
+                            currentIndex1 += a.length
+                            continue
+                        }
                         currentIndex1 += data[i].text.length
                     }
                 }
             }
             var arr = []
             var item = data[startIndex]
+            if(item.text.indexOf('&nbsp;')!=-1){
+                item.text = item.text.replace(/&nbsp;/g,' ')
+            }
             if(startIndex == endIndex){
                 var prevTag = this.checkPrevTag(data,startIndex,tag)
                 var nextTag = this.checkNextTag(data,startIndex,tag)
@@ -214,8 +241,41 @@ export default {
                 var nextTag = this.checkNextTag(data,startIndex,tag)
                 var betweenTag = this.checkBetweenTag(data,startIndex,endIndex,tag)
                 var item1 = data[endIndex]
+                if(item1.text.indexOf('&nbsp;')!=-1){
+                    item1.text = item1.text.replace(/&nbsp;/g,' ')
+                }
                 if(betweenTag.length==0){
+                    var betweenText = this.checkBetweenText(data,startIndex,endIndex)
+                    var prevTag = this.checkPrevTag(data,startIndex,tag)
+                    var nextTag = this.checkNextTag(data,endIndex,tag)
+                    // if(betweenText.length == 0){
+                        if(prevTag.tag == `<${tag}>` && prevTag.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)})
+                            data.splice(startIndex,1,...arr)
+                            var len = arr.length
+                            arr = []
+                            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{
+                            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 = []
+                            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{
 
+                    // }
                 }else{
                     if(betweenTag.length == 1){
                         data[betweenTag[0].index].del = true
@@ -582,9 +642,9 @@ export default {
         },
         //根据节点获取给定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) {