vue中的tinymce封装

editor.vue

<template>
  <!-- 富文本 -->
  <div>
    <editor
      id="tinymce"
      v-model="content"
      :init="init"
      @onClick="onClick"
    ></editor>
  </div>
</template>
 
 
<script>
import tinymce from "tinymce/tinymce"; // version: 5.0.1
import Editor from "@tinymce/tinymce-vue";  // version: 3.0.1
// import 'tinymce/icons/default/icons';
import "tinymce/themes/silver";
import "tinymce/plugins/image";
import "tinymce/plugins/media";
import "tinymce/plugins/table";
import "tinymce/plugins/lists";
import "tinymce/plugins/contextmenu";
import "tinymce/plugins/wordcount";
import "tinymce/plugins/colorpicker";
import "tinymce/plugins/textcolor";
import "tinymce/plugins/preview";
import "tinymce/plugins/code";
import "tinymce/plugins/link";
import "tinymce/plugins/advlist";
import "tinymce/plugins/codesample";
import "tinymce/plugins/hr";
import "tinymce/plugins/fullscreen";
import "tinymce/plugins/textpattern";
import "tinymce/plugins/searchreplace";
import "tinymce/plugins/autolink";
import "tinymce/plugins/directionality";
import "tinymce/plugins/visualblocks";
import "tinymce/plugins/visualchars";
import "tinymce/plugins/template";
import "tinymce/plugins/charmap";
import "tinymce/plugins/nonbreaking";
import "tinymce/plugins/insertdatetime";
import "tinymce/plugins/imagetools";
import "tinymce/plugins/autosave";
import "tinymce/plugins/autoresize";

export default {
  components: {
    Editor,
  },
  props: {
    value: {
      type: String,
      default: "",
    },
    disabled: {
      type: Boolean,
      default: false,
    },
    plugins: {
      type: [String, Array],
      default:
        "preview searchreplace autolink directionality visualblocks visualchars fullscreen image link media template code codesample table charmap hr nonbreaking insertdatetime advlist lists wordcount imagetools textpattern autosave autoresize",
    },
    toolbar: {
      type: [String, Array],
      default:
        "code undo redo restoredraft | cut copy paste pastetext | forecolor backcolor bold italic underline strikethrough link codesample | alignleft aligncenter alignright alignjustify outdent indent formatpainter | \
    styleselect formatselect fontselect fontsizeselect | bullist numlist | blockquote subscript superscript removeformat | \
    table image media charmap hr pagebreak insertdatetime |  fullscreen preview",
    },
  },
  data() {
    return {
      //初始化配置
      init: {
        language_url:
          process.env.NODE_ENV === "production"
            ? window.SITE_CONFIG.version + "/static/plugins/langs/zh_CN.js"
            : "/static/plugins/langs/zh_CN.js",
        language: "zh_CN",
        skin_url:
          process.env.NODE_ENV === "production"
            ? window.SITE_CONFIG.version + "/static/plugins/skins/ui/oxide"
            : "/static/plugins/skins/ui/oxide",
        height: 350,
        min_height: 350,
        max_height: 350,
        toolbar_mode: "wrap",
        plugins: this.plugins,
        toolbar: this.toolbar,
        content_style: "p {margin: 5px 0;}",
        content_css:
          process.env.NODE_ENV === "production"
            ? window.SITE_CONFIG.version +
              "/static/plugins/skins/content/default/content.css"
            : "/static/plugins/skins/content/default/content.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;",
        branding: false,
        //此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
        //如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
        images_upload_handler: (blobInfo, success, failure) => {
          var xhr, formData;
          xhr = new XMLHttpRequest();
          xhr.withCredentials = false;
          xhr.open("POST", window.SITE_CONFIG.baseUrl + "/sys/upload/file");
          xhr.setRequestHeader("token", this.$cookie.get("token"));
          xhr.onload = function () {
            var json;
            if (xhr.status != 200) {
              failure("上传失败!" + xhr.status);
              return;
            }
            json = JSON.parse(xhr.responseText);
            console.log(json);
            success(window.SITE_CONFIG.imageUrl + json.data);
          };
          formData = new FormData();
          formData.append("file", blobInfo.blob(), blobInfo.filename());
          console.log("formData", formData);
          xhr.send(formData);
        },
      },
      content: this.value,
    };
  },
  methods: {
    onClick(e) {
      this.$emit("onClick", e, tinymce);
    },
  },
  watch: {
    value(newValue) {
      this.content = newValue;
    },
    content(newValue) {
      this.$emit("input", newValue);
    },
  },
};
</script>
<style scoped lang="scss">
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值