富文本TinyMCE

引入tinymce

<script src="你的网站路径/tinymce/tinymce.min.js"></script>

tinymce 基本插件
具体配置方法’参照官网pai
tingmce包含功能
封装组件

<template>
  <div class="Editors">
    <textarea :id="id" :value="contents"></textarea>
  </div>
</template>

<script>
import { UploadImage } from '@/utils/uploadImage';
export default {
  name: 'Editors',
  props: {
    contents: String
  },
  data() {
    return {
      accept: 'image/jpeg, image/png, image/*',
      videoaccept: 'video/mp4',
      maxSize: 20 * 1024 * 1024,
      videoSize: 50,
      inits: false,
      editor: '',
      id: 'tiny' + new Date().getTime()
    };
  },
  components: {
  },
  created() {},
  mounted() {
    this.init();
  },
  beforeDestroy() {
    this.editor && this.editor.destroy();
  },

  methods: {
    /* eslint-disable */
    init() {
      console.log('init');
      this.$nextTick(() => {
      const that = this;
    tinymce.init({
      selector: `#${that.id}`,
      convert_urls: false,
      branding: false,
      // skin:'oxide-dark',
      language: 'zh_CN',
      plugins: 'print preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template code codesample table charmap hr pagebreak nonbreaking anchor insertdatetime advlist lists wordcount imagetools axupimgs textpattern help emoticons autosave lineheight formatpainter',
      toolbar: 'code undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link anchor | alignleft aligncenter alignright alignjustify outdent indent | styleselect formatselect fontselect fontsizeselect lineheight | bullist numlist | blockquote subscript superscript removeformat | table image axupimgs media charmap emoticons hr pagebreak insertdatetime print preview formatpainter | fullscreen',
      height: 600, // 编辑器高度
      min_height: 600,
      content_style: 'img {max-width:100%;}p{margin: 0}',
      /* content_css: [ //可设置编辑区内容展示的css,谨慎使用
          '/static/reset.css',
          '/static/ax.css',
          '/static/css.css',
      ], */
      fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px',
      font_formats: '微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats;',
      link_list: [
          { title: '预置链接1', value: 'https://www.baidu.com' }
      ],
      image_list: [
          { title: '预置图片2', value: 'https://www.baidu.com/img/bd_logo1.png' }
      ],
      image_class_list: [
      { title: 'None', value: '' },
      { title: 'Some class', value: 'class-name' }
      ],
      // importcss_append: true,
      // 自定义文件选择器的回调内容
      file_picker_callback: function(callback, value, meta) {
          // if (meta.filetype === 'file') {
          //   callback('https://www.baidu.com/img/bd_logo1.png', { text: 'My text' });
          // }
          // if (meta.filetype === 'image') {
          //   callback('https://www.baidu.com/img/bd_logo1.png', { alt: 'My alt text' });
          // }
          // if (meta.filetype === 'media') {
          //   callback('movie.mp4', { source2: 'alt.ogg', poster: 'https://www.baidu.com/img/bd_logo1.png' });
          // }

          if (meta.filetype == 'media') {
            // 创建一个隐藏的type=file的文件选择input
            const input = document.createElement('input');
            input.setAttribute('type', 'file');
            input.setAttribute('accept', 'video/mp4');
            input.onchange = function() {
              const file = this.files[0]; // 只选取第一个文件。如果要选取全部,后面注意做修改
              if (file.size / 1024 / 1024 > that.videoSize) {
                alert('视频不能超过' + that.videoSize + '兆');
                return;
              }

              if (that.videoaccept.indexOf(file.type) >= 0) {
                UploadImage(file, true)
                  .then(res => {
                    console.log(res);
                    callback(res[0].url, { text: res[0].fileName });
                  })
                  .catch(err => {
                    console.log('err', err);
                  });
              } else {
                alert('请上传mp4格式的视频');
              }
            };
            // 触发点击
            input.click();
          }
      },
      // 为内容模板插件提供预置模板
      templates: [
          { title: '模板1', description: '介绍文字1', content: '模板内容' },
          { title: '模板2', description: '介绍文字2', content: '<div class="mceTmpl"><span class="cdate">CDATE</span>,<span class="mdate">MDATE</span>,我的内容</div>' }
      ],
      // content_security_policy: "script-src *;",
      extended_valid_elements: 'script[src]',
      //
      template_cdate_format: '[CDATE: %m/%d/%Y : %H:%M:%S]',
      template_mdate_format: '[MDATE: %m/%d/%Y : %H:%M:%S]',
      autosave_ask_before_unload: false,
      toolbar_mode: 'wrap',
      // images_upload_base_path: '',
      //自定义上传方法
      images_upload_handler: function(blobInfo, successFun, failure) {
        const file = blobInfo.blob();

        if (file.size > that.maxSize) {
          failure('图片不要超过20兆');
          return;
        }

        if (that.accept.indexOf(file.type) >= 0) {
          UploadImage(file)
            .then(res => {
              successFun(res[0].url);
            })
            .catch(err => {
              console.log('err', err);
            });
        } else {
          failure('图片格式错误');
        }
      },
      init_instance_callback: function(editor) {
        this.editor = editor;
        // EDITOR = editor
        // console.log("Editor: " + editor.id + " is now initialized.");
        editor.on('input change undo redo', () => {
          var content = editor.getContent();
          that.$emit('getContent', { content });
        });
      }
      // images_upload_handler: function(blobInfo, succFun, failFun) {
      //   console.log(blobInfo);
      //     succFun('/demo/images/img.jpg');
      // }
      // icons:'ax-color',

    });
    });
    }
  }
};
</script>

<style scoped>
  .Editors {
    width: 100%;
  }
</style>

组件使用方式

<a-form-model-item ref="content" label="活动介绍" prop="introduce">
  <Editor v-if="reload" :contents="form.introduce" @getContent="getContent" />
</a-form-model-item>
getContent(e) {
  // console.log(e);
  this.$set(this.form, 'introduce', e.content);
  this.$refs['content'].onFieldChange();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值