浏览代码

修改自定义组件富文本

zhuliu 2 年之前
父节点
当前提交
8e5626ab9f
共有 1 个文件被更改,包括 72 次插入41 次删除
  1. 72 41
      RMS-FrontEnd/src/views/components/common/RichText/index.vue

+ 72 - 41
RMS-FrontEnd/src/views/components/common/RichText/index.vue

@@ -50,8 +50,9 @@ export default {
   created() {},
   created() {},
   mounted() {},
   mounted() {},
   methods: {
   methods: {
-   async handlePaste(event){
-      
+   async handlePaste(e){
+    var event = e || window.event
+    event.preventDefault();
       const items = (event.clipboardData || window.clipboardData).items;
       const items = (event.clipboardData || window.clipboardData).items;
       let file = null;
       let file = null;
       if (!items || items.length === 0) {
       if (!items || items.length === 0) {
@@ -59,20 +60,13 @@ export default {
         return;
         return;
       }
       }
       for (let i = 0; i < items.length; i++) {
       for (let i = 0; i < items.length; i++) {
-        // if (items[i].type.indexOf("text") !== -1) {
-        //   var text =  (e.originalEvent || e).clipboardData.getData('text/plain') || prompt('在这里输入文本');
-        //   //清除回车
-        //   text = text.replace(/\[\d+\]|\n|\r/ig,"")
-        //   var content = event.target.innerHTML
-        //   var str2 = content.slice(0, index.endOffset) + text + content.slice(index.endOffset);
-        //   event.target.innerHTML = str2
-        //   this.saveValue(event)
-        //   // this.$forceUpdate()
-        //   // if(this.tableHeight){
-        //   //   this.setHeight()
-        //   // }
-        //   break;
-        // }
+        if (items[i].type.indexOf("text") !== -1) {
+          var text =  (event.originalEvent || event).clipboardData.getData('text/plain') ||'';
+          text = text.replace(/\n{1,}/g,'</br>')
+          var text2 = `<span>${text}</span>`
+          this.setCursor(event,text2,1)
+          break;
+        }
         if (items[i].type.indexOf("image") !== -1) {
         if (items[i].type.indexOf("image") !== -1) {
           var e = event || window.event
           var e = event || window.event
           e.preventDefault();
           e.preventDefault();
@@ -103,29 +97,31 @@ export default {
 //                 selection.addRange(range);
 //                 selection.addRange(range);
 // console.log(event.target.innerHTML)
 // console.log(event.target.innerHTML)
       var index = window.getSelection().getRangeAt(0)
       var index = window.getSelection().getRangeAt(0)
-      var indexText = this.getColumn(event.target,window.getSelection())
-      var index2 = 0
-      var str2 = content.slice(0, indexText) + new_img + content.slice(indexText);
-      event.target.innerHTML = str2
-      this.$nextTick(()=>{
-        var selectedText = window.getSelection();
-      var selectedRange = document.createRange();
-      try{
-        for(var i=0;i<event.target.childNodes.length;i++){
-          if(event.target.childNodes[i].outerHTML == new_img){
-            index2 = i
-            throw new Error()
-          }
-        }
-      }catch{
 
 
-      }
-      selectedRange.setStart(event.target,index2+1);
-      selectedRange.collapse(true);
-      selectedText.removeAllRanges();
-      selectedText.addRange(selectedRange);
-      event.target.parentNode.focus(); 
-      })
+      this.setCursor(event,new_img,2)
+      // var indexText = this.getColumn(event.target,window.getSelection())
+      // var index2 = 0
+      // var str2 = content.slice(0, indexText) + new_img + content.slice(indexText);
+      // event.target.innerHTML = str2
+      // this.$nextTick(()=>{
+      //   var selectedText = window.getSelection();
+      // var selectedRange = document.createRange();
+      // try{
+      //   for(var i=0;i<event.target.childNodes.length;i++){
+      //     if(event.target.childNodes[i].outerHTML == new_img){
+      //       index2 = i
+      //       throw new Error()
+      //     }
+      //   }
+      // }catch{
+
+      // }
+      // selectedRange.setStart(event.target,index2+1);
+      // selectedRange.collapse(true);
+      // selectedText.removeAllRanges();
+      // selectedText.addRange(selectedRange);
+      // event.target.parentNode.focus(); 
+      // })
       
       
       // this.saveValue(event)
       // this.saveValue(event)
       // var selection = window.getSelection()
       // var selection = window.getSelection()
@@ -133,6 +129,41 @@ export default {
       // console.log(window.getSelection().getRangeAt(0))
       // console.log(window.getSelection().getRangeAt(0))
      
      
     },
     },
+    //设置光标位置
+    setCursor(event,str,type){
+      var content = event.target.innerHTML
+          var indexText = this.getColumn(event.target,window.getSelection())
+          var index2 = 0
+          var str2 = content.slice(0, indexText) + str + content.slice(indexText);
+          event.target.innerHTML = str2
+          this.$nextTick(()=>{
+            var selectedText = window.getSelection();
+          var selectedRange = document.createRange();
+          try{
+            for(var i=0;i<event.target.childNodes.length;i++){
+                var html = event.target.childNodes[i].outerHTML
+                if(type == 1){
+                  if(html){
+                    html = html.replace(/\r{1,}|\n{1,}|\r\n{1,}/g,'')
+                    str = html.replace(/\r{1,}|\n{1,}|\r\n{1,}/g,'')
+                  }
+                }
+                if(html == str){
+                  index2 = i
+                  throw new Error()
+                }
+              
+            }
+          }catch{
+
+          }
+          selectedRange.setStart(event.target,index2+1);
+          selectedRange.collapse(true);
+          selectedText.removeAllRanges();
+          selectedText.addRange(selectedRange);
+          event.target.parentNode.focus(); 
+          })
+    },
     getColumn(node, selectObj) {
     getColumn(node, selectObj) {
       var baseNode = node;
       var baseNode = node;
       var anchorNodePosition = this.getPosition(baseNode, selectObj.anchorNode, selectObj.anchorOffset);
       var anchorNodePosition = this.getPosition(baseNode, selectObj.anchorNode, selectObj.anchorOffset);
@@ -195,9 +226,9 @@ export default {
 .edit-box{
 .edit-box{
   overflow-x: hidden;
   overflow-x: hidden;
     text-overflow: ellipsis;
     text-overflow: ellipsis;
-  padding: 0 15px;
-    min-height:40px;
-    line-height: 40px;
+    padding: 10px 15px;
+    // min-height:27px;
+    line-height: 1.5;
     outline: #dcdfe6;
     outline: #dcdfe6;
     border:1px solid #DCDFE6;
     border:1px solid #DCDFE6;
     border-radius:5px;
     border-radius:5px;