[Vue]集成百度UEditor

2020-04-08  本文已影响0人  卓灬不凡

npm i vue-ueditor-wrap

// 引入 'vue-ueditor-wrap' 
import VueUeditorWrap from 'vue-ueditor-wrap'
// 富文本组件
Vue.component('vue-ueditor-wrap', VueUeditorWrap);
// myConfig 编辑器配置
// content 编辑器内容
<vue-ueditor-wrap :config="myConfig" v-model="content"></vue-ueditor-wrap>
// myConfig 配置如下:
myConfig: {
          // 如果需要上传功能,找后端小伙伴要服务器接口地址
          serverUrl:  'http://xxx.com/jsp/ueditor/1',
          // 你的UEditor资源存放的路径,相对于打包后的index.html
          // UEDITOR_HOME_URL: '/static/UEditor/',
          // 编辑器自动被内容撑高
          autoHeightEnabled: false,
          // 初始容器高度
          initialFrameHeight: 280,
          // 初始容器宽度
          initialFrameWidth: "100%",
          // 关闭自动保存
          enableAutoSave: false,
          // 层级
          zIndex: 1500,
          // 菜单配置
          toolbars: [[
                      // 'fullscreen',            // 全屏
                      // 'source', '|',              // 源代码
                      'undo',                     // 撤销
                      'redo', '|',                // 重做
                      'bold',                     // 加粗
                      'italic',                   // 斜体
                      'underline',                // 下划线
                      'fontborder',               // 字符边框
                      'strikethrough',            // 删除线
                      'superscript',              // 上标
                      'subscript',                // 下标
                      'removeformat',             // 清除格式
                      'formatmatch',              // 格式刷
                      'autotypeset',              // 自动排版
                      'blockquote',               // 引用
                      'pasteplain', '|',          // 纯文本粘贴模式
                      'forecolor',                // 字体颜色
                      'backcolor',                // 背景色
                      'insertorderedlist',        // 有序列表
                      'insertunorderedlist',      // 无序列表
                      'selectall',                // 全选
                      'cleardoc', '|',            // 清空文档
                      'rowspacingtop',            // 段前距
                      'rowspacingbottom',         // 段后距
                      'lineheight', '|',          // 行间距
                      'customstyle',              // 自定义标题
                      'paragraph',                // 段落格式
                      'fontfamily',               // 字体
                      'fontsize', '|',            // 字号
                      'directionalityltr',        // 从左向右输入
                      'directionalityrtl',        // 从右向左输入
                      'indent', '|',              // 首行缩进
                      'justifyleft',              // 居左对齐
                      'justifycenter',            // 居中对齐
                      'justifyright',             // 居右对齐
                      'justifyjustify', '|',      // 两端对齐
                      'touppercase',              // 字母大写
                      'tolowercase', '|',         // 字母小写
                      // 'link',                     // 超链接
                      // 'unlink',                   // 取消链接
                      // 'anchor', '|',              // 锚点
                      // 'imagenone',                // 默认
                      // 'imageleft',                // 左浮动
                      // 'imageright',               // 右浮动
                      // 'imagecenter', '|',         // 居中
                      'simpleupload',             // 单图上传
                      'emotion',                  // 表情
                      'map',                      // Baidu地图
                      // 'insertcode',               // 代码语言
                      // 'pagebreak',                // 分页
                      // 'template',                 // 模板
                      'background', '|',          // 背景
                      'horizontal',               // 分隔线
                      'date',                     // 日期
                      'time',                     // 时间
                      'spechars',                 // 特殊字符
                      'wordimage', '|',           // 图片转存
                      // 'print',                    // 打印
                      'preview',                  // 预览
                      // 'searchreplace',            // 查询替换
                      // 'drafts'                    // 从草稿箱加载
                    ]]
        }
@RequestMapping("/ueditor/{type}")
    public Object getConfigInfo(HttpServletRequest request, @PathVariable("type") Integer type) throws Exception {
        // 百度编辑器第一次会默认调用接口初始化
        String callback = request.getParameter("callback");
        String noCache = request.getParameter("noCache");
        if (callback != null || noCache != null) {
            String b = "{\n" +
                    "    \"imageActionName\":\"uploadimage\",\n" +
                    "    \"imageFieldName\":\"upfile\",\n" +
                    "    \"imageMaxSize\":2048000,\n" +
                    "    \"imageAllowFiles\":[\n" +
                    "        \".png\"," +
                    "        \".jpg\"," +
                    "        \".jpeg\"," +
                    "        \".gif\"," +
                    "        \".bmp\"" +
                    "    ],\n" +
                    "    \"imageCompressEnable\":true,\n" +
                    "    \"imageCompressBorder\":1600,\n" +
                    "    \"imageInsertAlign\":\"none\",\n" +
                    "    \"imageUrlPrefix\":\"\",\n" +
                    "    \"imagePathFormat\":\"/test/article/img/{yyyy}{mm}{dd}/{time}{rand:6}\"\n" +
                    "}";
            if(callback != null){
                return callback + "(" + b + ")";
            }
            return b;
        } else {
            // 其余情况 - 上传图片时调用
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile imgFile = multipartRequest.getFile("upfile");
            // 这里写自己上传图片的方法
            ResultResponse resultResponse = (ResultResponse) this.uploadService.uploadImg(imgFile, type + "");
            // 将图片组装返回给百度编辑器 - 格式统一
            Map<String, Object> resultMap = new HashMap<>();
            resultMap.put("state", "SUCCESS");
            Map<String, String> imgMap = (Map<String, String>) resultResponse.getData();
            resultMap.put("url", imgMap.get("imgUrl"));
            return resultMap;
        }
    }

打开 UEditor -》themes -》iframe.css 文件添加

/*可以在这里添加你自己的css*/
img {
  max-width: 100%; /*图片自适应宽度*/
}
body {
  overflow-y: scroll !important;
}
.view {
  word-break: break-all;
}
.vote_area {
  display: block;
}
.vote_iframe {
  background-color: transparent;
  border: 0 none;
  height: 100%;
}

2.点击图片取消图片拉伸

打开 UEditor -》ueditor.all.min.js 文件,找到 UE.plugins.fiximgclick 进行注释,如下:

// UE.plugins.fiximgclick = function() {
      //   function a() {
      //     this.editor = null,
      //       this.resizer = null,
      //       this.cover = null,
      //       this.doc = document,
      //       this.prePos = {
      //         x: 0,
      //         y: 0
      //       },
      //       this.startPos = {
      //         x: 0,
      //         y: 0
      //       }
      //   }
      //   var b = !1;
      //   return function() {
      //     var c = [[0, 0, -1, -1], [0, 0, 0, -1], [0, 0, 1, -1], [0, 0, -1, 0], [0, 0, 1, 0], [0, 0, -1, 1], [0, 0, 0, 1], [0, 0, 1, 1]];
      //     a.prototype = {
      //       init: function(a) {
      //         var b = this;
      //         b.editor = a,
      //           b.startPos = this.prePos = {
      //             x: 0,
      //             y: 0
      //           },
      //           b.dragId = -1;
      //         var c = [],
      //           d = b.cover = document.createElement("div"),
      //           e = b.resizer = document.createElement("div");
      //         for (d.id = b.editor.ui.id + "_imagescale_cover", d.style.cssText = "position:absolute;display:none;z-index:" + b.editor.options.zIndex + ";filter:alpha(opacity=0); opacity:0;background:#CCC;", domUtils.on(d, "mousedown click",
      //           function() {
      //             b.hide()
      //           }), i = 0; i < 8; i++) c.push('<span class="edui-editor-imagescale-hand' + i + '"></span>');
      //         e.id = b.editor.ui.id + "_imagescale",
      //           e.className = "edui-editor-imagescale",
      //           e.innerHTML = c.join(""),
      //           e.style.cssText += ";display:none;border:1px solid #3b77ff;z-index:" + b.editor.options.zIndex + ";",
      //           b.editor.ui.getDom().appendChild(d),
      //           b.editor.ui.getDom().appendChild(e),
      //           b.initStyle(),
      //           b.initEvents()
      //       },
      //       initStyle: function() {
      //         utils.cssRule("imagescale", ".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}.edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}.edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}.edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}")
      //       },
      //       initEvents: function() {
      //         var a = this;
      //         a.startPos.x = a.startPos.y = 0,
      //           a.isDraging = !1
      //       },
      //       _eventHandler: function(a) {
      //         var c = this;
      //         switch (a.type) {
      //           case "mousedown":
      //             var d, d = a.target || a.srcElement;
      //             d.className.indexOf("edui-editor-imagescale-hand") != -1 && c.dragId == -1 && (c.dragId = d.className.slice( - 1), c.startPos.x = c.prePos.x = a.clientX, c.startPos.y = c.prePos.y = a.clientY, domUtils.on(c.doc, "mousemove", c.proxy(c._eventHandler, c)));
      //             break;
      //           case "mousemove":
      //             c.dragId != -1 && (c.updateContainerStyle(c.dragId, {
      //               x: a.clientX - c.prePos.x,
      //               y: a.clientY - c.prePos.y
      //             }), c.prePos.x = a.clientX, c.prePos.y = a.clientY, b = !0, c.updateTargetElement());
      //             break;
      //           case "mouseup":
      //             c.dragId != -1 && (c.updateContainerStyle(c.dragId, {
      //               x: a.clientX - c.prePos.x,
      //               y: a.clientY - c.prePos.y
      //             }), c.updateTargetElement(), c.target.parentNode && c.attachTo(c.target), c.dragId = -1),
      //               domUtils.un(c.doc, "mousemove", c.proxy(c._eventHandler, c)),
      //             b && (b = !1, c.editor.fireEvent("contentchange"))
      //         }
      //       },
      //       updateTargetElement: function() {
      //         var a = this;
      //         domUtils.setStyles(a.target, {
      //           width: a.resizer.style.width,
      //           height: a.resizer.style.height
      //         }),
      //           a.target.width = parseInt(a.resizer.style.width),
      //           a.target.height = parseInt(a.resizer.style.height),
      //           a.attachTo(a.target)
      //       },
      //       updateContainerStyle: function(a, b) {
      //         var d, e = this,
      //           f = e.resizer;
      //         0 != c[a][0] && (d = parseInt(f.style.left) + b.x, f.style.left = e._validScaledProp("left", d) + "px"),
      //         0 != c[a][1] && (d = parseInt(f.style.top) + b.y, f.style.top = e._validScaledProp("top", d) + "px"),
      //         0 != c[a][2] && (d = f.clientWidth + c[a][2] * b.x, f.style.width = e._validScaledProp("width", d) + "px"),
      //         0 != c[a][3] && (d = f.clientHeight + c[a][3] * b.y, f.style.height = e._validScaledProp("height", d) + "px")
      //       },
      //       _validScaledProp: function(a, b) {
      //         var c = this.resizer,
      //           d = document;
      //         switch (b = isNaN(b) ? 0 : b, a) {
      //           case "left":
      //             return b < 0 ? 0 : b + c.clientWidth > d.clientWidth ? d.clientWidth - c.clientWidth: b;
      //           case "top":
      //             return b < 0 ? 0 : b + c.clientHeight > d.clientHeight ? d.clientHeight - c.clientHeight: b;
      //           case "width":
      //             return b <= 0 ? 1 : b + c.offsetLeft > d.clientWidth ? d.clientWidth - c.offsetLeft: b;
      //           case "height":
      //             return b <= 0 ? 1 : b + c.offsetTop > d.clientHeight ? d.clientHeight - c.offsetTop: b
      //         }
      //       },
      //       hideCover: function() {
      //         this.cover.style.display = "none"
      //       },
      //       showCover: function() {
      //         var a = this,
      //           b = domUtils.getXY(a.editor.ui.getDom()),
      //           c = domUtils.getXY(a.editor.iframe);
      //         domUtils.setStyles(a.cover, {
      //           width: a.editor.iframe.offsetWidth + "px",
      //           height: a.editor.iframe.offsetHeight + "px",
      //           top: c.y - b.y + "px",
      //           left: c.x - b.x + "px",
      //           position: "absolute",
      //           display: ""
      //         })
      //       },
      //       show: function(a) {
      //         var b = this;
      //         b.resizer.style.display = "block",
      //         a && b.attachTo(a),
      //           domUtils.on(this.resizer, "mousedown", b.proxy(b._eventHandler, b)),
      //           domUtils.on(b.doc, "mouseup", b.proxy(b._eventHandler, b)),
      //           b.showCover(),
      //           b.editor.fireEvent("afterscaleshow", b),
      //           b.editor.fireEvent("saveScene")
      //       },
      //       hide: function() {
      //         var a = this;
      //         a.hideCover(),
      //           a.resizer.style.display = "none",
      //           domUtils.un(a.resizer, "mousedown", a.proxy(a._eventHandler, a)),
      //           domUtils.un(a.doc, "mouseup", a.proxy(a._eventHandler, a)),
      //           a.editor.fireEvent("afterscalehide", a)
      //       },
      //       proxy: function(a, b) {
      //         return function(c) {
      //           return a.apply(b || this, arguments)
      //         }
      //       },
      //       attachTo: function(a) {
      //         var b = this,
      //           c = b.target = a,
      //           d = this.resizer,
      //           e = domUtils.getXY(c),
      //           f = domUtils.getXY(b.editor.iframe),
      //           g = domUtils.getXY(d.parentNode);
      //         domUtils.setStyles(d, {
      //           width: c.width + "px",
      //           height: c.height + "px",
      //           left: f.x + e.x - b.editor.document.body.scrollLeft - g.x - parseInt(d.style.borderLeftWidth) + "px",
      //           top: f.y + e.y - b.editor.document.body.scrollTop - g.y - parseInt(d.style.borderTopWidth) + "px"
      //         })
      //       }
      //     }
      //   } (),
      //     function() {
      //       var b, c = this;
      //       c.setOpt("imageScaleEnabled", !0),
      //       !browser.ie && c.options.imageScaleEnabled && c.addListener("click",
      //         function(d, e) {
      //           var f = c.selection.getRange(),
      //             g = f.getClosedNode();
      //           if (g && "IMG" == g.tagName && "false" != c.body.contentEditable) {
      //             if (g.className.indexOf("edui-faked-music") != -1 || g.getAttribute("anchorname") || domUtils.hasClass(g, "loadingclass") || domUtils.hasClass(g, "loaderrorclass")) return;
      //             if (!b) {
      //               b = new a,
      //                 b.init(c),
      //                 c.ui.getDom().appendChild(b.resizer);
      //               var h, i = function(a) {
      //                   b.hide(),
      //                   b.target && c.selection.getRange().selectNode(b.target).select()
      //                 },
      //                 j = function(a) {
      //                   var b = a.target || a.srcElement; ! b || void 0 !== b.className && b.className.indexOf("edui-editor-imagescale") != -1 || i(a)
      //                 };
      //               c.addListener("afterscaleshow",
      //                 function(a) {
      //                   c.addListener("beforekeydown", i),
      //                     c.addListener("beforemousedown", j),
      //                     domUtils.on(document, "keydown", i),
      //                     domUtils.on(document, "mousedown", j),
      //                     c.selection.getNative().removeAllRanges()
      //                 }),
      //                 c.addListener("afterscalehide",
      //                   function(a) {
      //                     c.removeListener("beforekeydown", i),
      //                       c.removeListener("beforemousedown", j),
      //                       domUtils.un(document, "keydown", i),
      //                       domUtils.un(document, "mousedown", j);
      //                     var d = b.target;
      //                     d.parentNode && c.selection.getRange().selectNode(d).select()
      //                   }),
      //                 domUtils.on(b.resizer, "mousedown",
      //                   function(a) {
      //                     c.selection.getNative().removeAllRanges();
      //                     var d = a.target || a.srcElement;
      //                     d && d.className.indexOf("edui-editor-imagescale-hand") == -1 && (h = setTimeout(function() {
      //                         b.hide(),
      //                         b.target && c.selection.getRange().selectNode(d).select()
      //                       },
      //                       200))
      //                   }),
      //                 domUtils.on(b.resizer, "mouseup",
      //                   function(a) {
      //                     var b = a.target || a.srcElement;
      //                     b && b.className.indexOf("edui-editor-imagescale-hand") == -1 && clearTimeout(h)
      //                   })
      //             }
      //             b.show(g)
      //           } else b && "none" != b.resizer.style.display && b.hide()
      //         }),
      //       browser.webkit && c.addListener("click",
      //         function(a, b) {
      //           if ("IMG" == b.target.tagName && "false" != c.body.contentEditable) {
      //             var d = new dom.Range(c.document);
      //             d.selectNode(b.target).select()
      //           }
      //         })
      //     }
      // } (),
上一篇下一篇

猜你喜欢

热点阅读