enroban

最近由于工作的需求,需要在后台管理界面中,添加一个富文本编辑器。

 

富文本编辑器,我们之前用过百度的ueditor,在传统模式开发的时候还是很方便的,可以很便利的进行内容编辑,然后获取到编辑内容的信息

百度的ueditor地址:

https://ueditor.baidu.com/website/

 

但是这次是要整合一个vue的,还没有这么搞过,就试试吧。

富文本编辑器的核心原理其实蛮简单的,但是自己写还是很麻烦,没有那个时间。

1.考虑方式

有两种方式,一种是把ueditor进行vue的移植改造。把传统模式改成webpack可用的模式就可以了。

但是,我觉得ueditor已经很久没有维护了,界面也太丑了,所以试试别的能用的。

 

2.踩坑 froala editor...

搞了很久,按这位老兄说的

https://www.jianshu.com/p/cb782b957a13

也许是因为这个本身是收费的,也许是我哪个地方有问题,没搞出来。

 

3.改换用vue-html5-editor

改换了以后就成功了,上图看看

 

先安装

npm install vue-html5-editor --save

安装完毕之后引入到项目中

这个是编辑的main.js,按照官方说明 https://gitee.com/tai/vue-html5-editor 以全局引入的方式引入的

import VueHtml5Editor from \'vue-html5-editor\'

Vue.use(VueHtml5Editor, {
  // 全局组件名称,使用new VueHtml5Editor(options)时该选项无效
  // global component name
  name: \'vue-html5-editor\',
  // 是否显示模块名称,开启的话会在工具栏的图标后台直接显示名称
  // if set true,will append module name to toolbar after icon
  showModuleName: false,
  // 自定义各个图标的class,默认使用的是font-awesome提供的图标
  // custom icon class of built-in modules,default using font-awesome
  icons: {
    text: \'fa fa-pencil\',
    color: \'fa fa-paint-brush\',
    font: \'fa fa-font\',
    align: \'fa fa-align-justify\',
    list: \'fa fa-list\',
    link: \'fa fa-chain\',
    unlink: \'fa fa-chain-broken\',
    tabulation: \'fa fa-table\',
    image: \'fa fa-file-image-o\',
    hr: \'fa fa-minus\',
    eraser: \'fa fa-eraser\',
    undo: \'fa-undo fa\',
    \'full-screen\': \'fa fa-arrows-alt\',
    info: \'fa fa-info\'
  },
  // 配置图片模块
  // config image module
  image: {
    // 文件最大体积,单位字节  max file size
    sizeLimit: 512 * 1024,
    // 上传参数,默认把图片转为base64而不上传
    // upload config,default null and convert image to base64
    upload: {
      url: \'http://localhost:8080/files/upload\',
      headers: {},
      params: {},
      fieldName: \'file\'
    },
    // 压缩参数,默认使用localResizeIMG进行压缩,设置为null禁止压缩
    // compression config,default resize image by localResizeIMG (https://github.com/think2011/localResizeIMG)
    // set null to disable compression
    compress: null,
    // 响应数据处理,最终返回图片链接
    // handle response data,return image url
    uploadHandler (responseText) {
      // default accept json data like  {ok:false,msg:"unexpected"} or {ok:true,data:"image url"}
      var json = JSON.parse(responseText)
      return json.data.fileurl
    }
  },
  // 语言,内建的有英文(en-us)和中文(zh-cn)
  // default en-us, en-us and zh-cn are built-in
  language: \'zh-cn\',
  // 自定义语言
  i18n: {
    // specify your language here
    \'zh-cn\': {
      \'align\': \'对齐方式\',
      \'image\': \'图片\',
      \'list\': \'列表\',
      \'link\': \'链接\',
      \'unlink\': \'去除链接\',
      \'table\': \'表格\',
      \'font\': \'文字\',
      \'full screen\': \'全屏\',
      \'text\': \'排版\',
      \'eraser\': \'格式清除\',
      \'info\': \'关于\',
      \'color\': \'颜色\',
      \'please enter a url\': \'请输入地址\',
      \'create link\': \'创建链接\',
      \'bold\': \'加粗\',
      \'italic\': \'倾斜\',
      \'underline\': \'下划线\',
      \'strike through\': \'删除线\',
      \'subscript\': \'上标\',
      \'superscript\': \'下标\',
      \'heading\': \'标题\',
      \'font name\': \'字体\',
      \'font size\': \'文字大小\',
      \'left justify\': \'左对齐\',
      \'center justify\': \'居中\',
      \'right justify\': \'右对齐\',
      \'ordered list\': \'有序列表\',
      \'unordered list\': \'无序列表\',
      \'fore color\': \'前景色\',
      \'background color\': \'背景色\',
      \'row count\': \'行数\',
      \'column count\': \'列数\',
      \'save\': \'确定\',
      \'upload\': \'上传\',
      \'progress\': \'进度\',
      \'unknown\': \'未知\',
      \'please wait\': \'请稍等\',
      \'error\': \'错误\',
      \'abort\': \'中断\',
      \'reset\': \'重置\'
    }
  },
  // 隐藏不想要显示出来的模块
  // the modules you don\'t want
  hiddenModules: [
    \'info\'
  ],
  // 自定义要显示的模块,并控制顺序
  // keep only the modules you want and customize the order.
  // can be used with hiddenModules together
  visibleModules: [
    \'text\',
    \'color\',
    \'font\',
    \'align\',
    \'list\',
    \'link\',
    \'unlink\',
    \'tabulation\',
    \'image\',
    \'hr\',
    \'eraser\',
    \'undo\',
    \'full-screen\',
    \'info\'
], // 扩展模块,具体可以参考examples或查看源码 // extended modules  modules: { // omit,reference to source code of build-in modules  } })

 

 在模块中引入

模块 contents.vue

<template>
  <div id="contents">
    <h1>添加内容</h1>
    <br>
    <vue-html5-editor :content="content" @change="updateData" :height="500" :z-index="1000" :auto-height="true" :show-module-name="false"></vue-html5-editor>
  </div>
</template>

<script>

export default {
  name: \'Contents\',
  data () {
    return {
      id: \'\',
      content: \'\'
    }
  },
  methods: {
    updateData (e) {
      this.content = e
    }
  }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>

</style>

 

嘿嘿,运行起来以后,你会发现,有框,但按钮不在,因为这是个坑。 按钮是个开源组件 font-awesome

这个开源组件就是个图标库,有多种引入方式,我采用的是css全局引入的方式,

先下载了http://www.fontawesome.com.cn/download/font-awesome-4.7.0.zip

解压放入 src/assets,再到App.vue的style引入

<style>
@import \'assets/font-awesome-4.7.0/css/font-awesome.min.css\';
</style>

 到此,引入就告一段落。

 

添加文件上传的部分。

文件上传我有两个部分

图片文件上传: http://localhost:8080/files/upload

这个上传要求请求方式为POST,form表单的文件部分字段名为file

返回如下

{
    status: 200,
    data:{
      filename: "2019072935563.png", 
      fileurl: "http://localhost:8080/files/2019072935563.png"
    },
    message: null
}    
  

 

图片文件获取: http://localhost:8080/files/{imgname}

这样就完成了所有功能

 

分类:

技术点:

相关文章: