vue中,ueditor百度富文本編輯器換膚蛉鹿、集成秀米滨砍、自定義按鈕、彈窗

前言:ueditor是百度開(kāi)源的一款富文本編輯器妖异,還是比較流行的惋戏,之前有寫(xiě)過(guò)一篇vue后臺(tái)管理項(xiàng)目中使用froala-editor富文本編輯器教程,froala-editor是一個(gè)收費(fèi)的編輯器他膳,主題皮膚都挺好看的响逢,并且支持v-model,十分的方便,但是想要集成第三方的編輯器就不太行了棕孙,比如集成秀米舔亭。看個(gè)人需求吧蟀俊,ueditor百度編輯器的默認(rèn)主題皮膚真心丑钦铺,我是看不下去,所以決定換膚Vぁ矛洞!先上兩張對(duì)比圖~

換膚前

換膚后

1. 先去ueditor官網(wǎng)按照需求下載
image.png
2. 下載解壓后名字改成UEditor,丟到vue項(xiàng)目中的public目錄下(或者static下)
image.png
3. 安裝vue-editor-wrap
cnpm i vue-ueditor-wrap -S
//引入組件
import VueUeditorWrap from 'vue-ueditor-wrap'  //es6
//注冊(cè)組件
components: {
   VueUeditorWrap
},
//template
 <vue-ueditor-wrap v-model="msg" :config='myConfig'></vue-ueditor-wrap>
// data
  msg: '',
  myConfig: {
  // 編輯器不自動(dòng)被內(nèi)容撐高
  autoHeightEnabled: false,
  // 初始容器高度
  initialFrameHeight: 500,
  // 初始容器寬度
  initialFrameWidth: '100%',
  // 上傳文件接口(這個(gè)地址是我為了方便各位體驗(yàn)文件上傳功能搭建的臨時(shí)接口误甚,請(qǐng)勿在生產(chǎn)環(huán)境使用8克ΑF拙弧!)
  serverUrl: 'http://35.201.165.105:8000/controller.php',
  // UEditor 資源文件的存放路徑擅威,如果你使用的是 vue-cli 生成的項(xiàng)目壕探,通常不需要設(shè)置該選項(xiàng),vue-ueditor-wrap 會(huì)自動(dòng)處理常見(jiàn)的情況郊丛,如果需要特殊配置李请,參考下方的常見(jiàn)問(wèn)題2
  UEDITOR_HOME_URL: '/UEditor/'
}

沒(méi)有失誤的話,是這個(gè)樣子的厉熟。


image.png
4. 接下來(lái)就是換膚了导盅。

換膚也比較簡(jiǎn)單,就是重寫(xiě)css揍瑟,在 ueditor.config.js中白翻,把 theme:'default'的注釋打開(kāi),修改成 theme:'notadd'绢片,然后把準(zhǔn)備好的css丟到 public/UEditor/themes下,在public/UEditor/themes/iframe.css中添加

img {
  max-width: 100%;
  height: auto;
}

像這樣滤馍。

image.png

ps:皮膚文件+v 1115009958 索取,不是無(wú)償?shù)模?qǐng)知悉

然后編輯器就變成了這個(gè)樣子底循。

image.png
5.自定義按鈕和彈窗
vue-ueditor-wrap v-model="msg" :config='myConfig'></vue-ueditor-wrap>
改成
vue-ueditor-wrap v-model="msg" :config='myConfig' @ready="ready" @before-init="addCustomButtom"></vue-ueditor-wrap>
//data
editor:{},
myConfig: {
        toolbars: [
          [
            'fullscreen',//全屏
            'source',//源碼
            'undo', //撤銷(xiāo)
            'redo', //前進(jìn)
            'bold', //加粗
            'italic', //斜體
            'underline', //下劃線
            'strikethrough', //刪除線
            'fontborder', //字符邊框
            'formatmatch', //格式刷
            // 'fontfamily', //字體
            'fontsize', //字號(hào)
            'justifyleft', //居左對(duì)齊
            'justifycenter', //居中對(duì)齊
            'justifyright', //居右對(duì)齊
            // 'justifyjustify', //兩端對(duì)齊
            'insertorderedlist', //有序列表
            'insertunorderedlist', //無(wú)序列表
            // 'lineheight',//行間距
          ]
        ],
        // 編輯器不自動(dòng)被內(nèi)容撐高
        autoHeightEnabled: false,
        // 初始容器高度
        initialFrameHeight: 500,
        // 初始容器寬度
        initialFrameWidth: '100%',
        // 上傳文件接口(這個(gè)地址是我為了方便各位體驗(yàn)文件上傳功能搭建的臨時(shí)接口巢株,請(qǐng)勿在生產(chǎn)環(huán)境使用!N醯印8蟀)
        serverUrl: 'http://35.201.165.105:8000/controller.php',
        // UEditor 資源文件的存放路徑,如果你使用的是 vue-cli 生成的項(xiàng)目祠挫,通常不需要設(shè)置該選項(xiàng)那槽,vue-ueditor-wrap 會(huì)自動(dòng)處理常見(jiàn)的情況,如果需要特殊配置等舔,參考下方的常見(jiàn)問(wèn)題2
        UEDITOR_HOME_URL: '/UEditor/'
      },
//methods
ready(editorInstance)  // 富文本初始化完成觸發(fā)
  this.editor = editorInstance
},
// 添加自定義按鈕
    addCustomButtom(editorId) {
      let _this = this
      window.UE.registerUI('test-button', function (editor, uiName) {
        // 注冊(cè)按鈕執(zhí)行時(shí)的 command 命令倦炒,使用命令默認(rèn)就會(huì)帶有回退操作
        editor.registerCommand(uiName, {
          execCommand: function () {
            let html = `<img src='https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif?imageView2/1/w/80/h/80' />`
            editor.execCommand('inserthtml', html);
          }
        });

        // 創(chuàng)建一個(gè) button
        var btn = new window.UE.ui.Button({
          // 按鈕的名字
          name: uiName,
          // 提示
          title: '上傳圖片',
          // 需要添加的額外樣式,可指定 icon 圖標(biāo)软瞎,圖標(biāo)路徑參考常見(jiàn)問(wèn)題 2
          cssRules: "background-image: url('http://erkong.ybc365.com/2644220200815163758435.png') !important;background-size: cover;",
          // 點(diǎn)擊時(shí)執(zhí)行的命令
          onclick: function () {
            // 這里可以不用執(zhí)行命令,做你自己的操作也可
            _this.editor.execCommand('inserthtml', '插入到編輯器的內(nèi)容');
          }
        });

        // 當(dāng)點(diǎn)到編輯內(nèi)容上時(shí)拉讯,按鈕要做的狀態(tài)反射
        editor.addListener('selectionchange', function () {
          var state = editor.queryCommandState(uiName);
          if (state === -1) {
            btn.setDisabled(true);
            btn.setChecked(false);
          } else {
            btn.setDisabled(false);
            btn.setChecked(state);
          }
        });

        // 因?yàn)槟闶翘砑?button涤浇,所以需要返回這個(gè) button
        return btn;
      }/* 指定添加到工具欄上的哪個(gè)位置,默認(rèn)時(shí)追加到最后 */ /* 指定這個(gè) UI 是哪個(gè)編輯器實(shí)例上的魔慷,默認(rèn)是頁(yè)面上所有的編輯器都會(huì)添加這個(gè)按鈕 */);
    },
    // 添加自定義彈窗
    addCustomDialog(editorId) {
      window.UE.registerUI('test-dialog', function (editor, uiName) {
        // 創(chuàng)建 dialog
        var dialog = new window.UE.ui.Dialog({
          // 指定彈出層中頁(yè)面的路徑只锭,這里只能支持頁(yè)面,路徑參考常見(jiàn)問(wèn)題 2
          iframeUrl: '/customizeDialogPage.html',
          // 需要指定當(dāng)前的編輯器實(shí)例
          editor: editor,
          // 指定 dialog 的名字
          name: uiName,
          // dialog 的標(biāo)題
          title: '這是一個(gè)自定義的 Dialog 浮層',
          // 指定 dialog 的外圍樣式
          cssRules: 'width:500px;height:200px;',
          // 如果給出了 buttons 就代表 dialog 有確定和取消
          buttons: [
            {
              className: 'edui-okbutton',
              label: '確定',
              onclick: function () {
                dialog.close(true);
              }
            },
            {
              className: 'edui-cancelbutton',
              label: '取消',
              onclick: function () {
                dialog.close(false);
              }
            }
          ]
        });

        // 參考上面的自定義按鈕
        var btn = new window.UE.ui.Button({
          name: 'dialog-button',
          title: '打開(kāi)秀米',
          cssRules: `background-image: url('/test-dialog.png') !important;background-size: cover;`,
          onclick: function () {
            // 渲染dialog
            dialog.render();
            dialog.open();
          }
        });

        return btn;
      } /* 指定添加到工具欄上的那個(gè)位置院尔,默認(rèn)時(shí)追加到最后 */ /* 指定這個(gè)UI是哪個(gè)編輯器實(shí)例上的蜻展,默認(rèn)是頁(yè)面上所有的編輯器都會(huì)添加這個(gè)按鈕 */);
    },
//main.js
//引入這兩個(gè)文件喉誊,否則自定義的按鈕不出現(xiàn)圖標(biāo)
import '../public/UEditor/ueditor.config'
import '../public/UEditor/ueditor.all.js'

這樣就出現(xiàn)了自定義的按鈕

image.png

在這里你可以寫(xiě)你的邏輯,彈窗同理纵顾,就不多說(shuō)了

image.png

image.png
6.下面開(kāi)始集成秀米
第一步:下載文件 xiumi-ue-dialog-v5.jsxiumi-ue-v5.cssxiumi-ue-dialog-v5.htmlxiumi-ue-internal.js,點(diǎn)這里可以打包下載
第二步:將下載的壓縮文件解壓伍茄,把里面的文件丟到UEditor/dialogs里
image.png
第三步:修改 xiumi-ue-dialog-v5.html,引入 xiumi-ue-internal.js
image.png
第四步:修改ueditor.config.js

 xssFilterRules: false  //本來(lái)是true施逾,改成false
 inputXssFilter: false  //本來(lái)是true敷矫,改成false
 outputXssFilter: false  //本來(lái)是true,改成false
 article: ['style'],   //本來(lái)是[ ]汉额,改成  ['style']
 section: ['class',"style"], //本來(lái)是[ ] 曹仗,改成  ['class',"style"]
 img: ['style', 'src', 'alt', 'title', 'width', 'height', 'id', '_src', '_url', 'loadingclass', 'class', 'data-latex','style','word_img']  //后面多加兩個(gè)值'style','word_img'

 還有其他的,看自己需求更改配置

第五步: 在main.js中引入基本文件
//引入必要的文件 集成秀米所需

import '../public/UEditor/dialogs/xiumi-ue-dialog-v5'
import '../public/UEditor/dialogs/xiumi-ue-v5.css'

最后是這樣

image.png

image.png

image.png

教程到此結(jié)束蠕搜,交流+v 1115009958

補(bǔ)充 :ueditor.all.js

options.cssRules = '.edui-notadd  .edui-for-'+ btnName +' .edui-icon {'+ cssRules +'}' //.edui-default 改成  .edui-notadd

options.cssRules = '.edui-notadd .edui-for-'+ name +' .edui-dialog-content  {'+ cssRules +'}' //.edui-default 改成  .edui-notadd
//notadd/css
注釋掉
/* .edui-notadd .edui-toolbar .edui-button .edui-icon::before,
.edui-notadd .edui-toolbar .edui-menubutton .edui-icon::before,
.edui-notadd .edui-toolbar .edui-splitbutton .edui-icon::before {
    display: none;
} */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怎茫,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妓灌,更是在濱河造成了極大的恐慌轨蛤,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件旬渠,死亡現(xiàn)場(chǎng)離奇詭異俱萍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)告丢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)枪蘑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人岖免,你說(shuō)我怎么就攤上這事岳颇。” “怎么了颅湘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵话侧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我闯参,道長(zhǎng)瞻鹏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任鹿寨,我火速辦了婚禮新博,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脚草。我一直安慰自己赫悄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著埂淮,像睡著了一般姑隅。 火紅的嫁衣襯著肌膚如雪隅肥。 梳的紋絲不亂的頭發(fā)上三椿,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天构诚,我揣著相機(jī)與錄音酬土,去河邊找鬼岗仑。 笑死阿趁,一個(gè)胖子當(dāng)著我的面吹牛厢汹,可吹牛的內(nèi)容都是我干的灰殴。 我是一名探鬼主播霹俺,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼柔吼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丙唧?” 一聲冷哼從身側(cè)響起愈魏,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎想际,沒(méi)想到半個(gè)月后培漏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胡本,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年牌柄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侧甫。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡珊佣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出披粟,到底是詐尸還是另有隱情咒锻,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布守屉,位于F島的核電站惑艇,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拇泛。R本人自食惡果不足惜滨巴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俺叭。 院中可真熱鬧兢卵,春花似錦、人聲如沸绪颖。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)柠横。三九已至窃款,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牍氛,已是汗流浹背晨继。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留搬俊,地道東北人紊扬。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像唉擂,于是被迫代替她去往敵國(guó)和親餐屎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345