【无标题】

本文介绍了如何在Vue项目中安装和配置Tinymce富文本编辑器,包括设置基础请求工具、上传功能和与表单集成,以及初始化和事件处理的相关代码示例。
摘要由CSDN通过智能技术生成

自定义 tinymce 富文本编辑器在vue中使用,vue 集成 tinymce 富文本编辑器

1.在你的vue项目中安装tinymce4.7
npm install tinymce@4.7.4

2.随便在哪个你喜欢的文件夹下建立一个util.js的文件里面的内容如下,里面的值和地址是用户富文本编辑器的发起请求所用的自己根据需要修改

在这里插入代码片/**
 * @file util.js
 * @author liumapp
 * @email liumapp.com@gmail.com
 * @homepage http://www.liumapp.com
 * @date 6/11/18
 */


import axios from 'axios';
import Cookies from 'js-cookie';
import { Message } from 'iview';

let util = {

};
util.title = function (title) {
  title = title || 'editor demo';
  window.document.title = title;
};

const ajaxUrl = 'http://localhost:2020/';

util.ajaxUrl = ajaxUrl;

util.ajax = axios.create({
  baseURL: ajaxUrl,
  timeout: 30000
});

util.post = function (url, data) {
  const token = Cookies.get('userInfo') ? JSON.parse(Cookies.get('userInfo')).token : '';
  if (!data) {
    data = { token: token };
  } else {
    data.token = token;
  }
  return axios({
    method: 'post',
    baseURL: ajaxUrl,
    url,
    data: data,
    timeout: 10000,
    headers: {
      'X-Requested-With': 'XMLHttpRequest',
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + token
    }
  }).then(
    (response) => {
      return this.checkStatus(response);
    }
  )
};

util.checkStatus = function checkStatus (response) {
  // loading
  // 如果http状态码正常,则直接返回数据
  // console.log(response)
  if (response && (response.status === 200 || response.status === 304 || response.status === 400)) {
    return response;
    // 如果不需要除了data之外的数据,可以直接 return response.data
  }
  Message.warning('网络异常');
  // 异常状态下,把错误信息返回去
  return {
    status: -404,
    msg: '网络异常'
  };
};

export default util;

下面是使用示例,

<template>
  <div>
    <!-- 组件样式不用管 -->
    <Row>
      <Col span="18" offset="3">
        <Card shadow>
          <Upload
            action="http://localhost:2020/upload/word/template"
            :on-success="handleSuccess"
          >
            <Button icon="ios-cloud-upload-outline">上传word文档</Button>
          </Upload>
          <Upload
            action="http://admin.alzhswmu.cn/prod-api/common/upload"
            :on-success="imageUploadedSuccessfully"
          >
            <Button icon="ios-cloud-upload-outline">上传图片</Button>
          </Upload>
          <Form ref="editorModel" :model="editorModel" :rules="editorRules">
            <FormItem prop="content">
              <textarea
                v-model="customEditor"
                class="tinymce-textarea"
                id="tinymceEditer"
                style="height: 800px"
              >
              </textarea>
            </FormItem>
            <FormItem>
              <Button type="primary" @click="handleSubmit('editorModel')">提交</Button>
              <Button type="ghost" @click="handleReset('editorModel')">重置</Button>
              <button @click="gitData">获取值</button>
            </FormItem>
          </Form>

          <Spin fix v-if="spinShow">
            <Icon type="load-c" size="18" class="demo-spin-icon-load"></Icon>
            <div>加载组件中...</div>
          </Spin>
        </Card>
      </Col>
    </Row>
  </div>
</template>

<script>
import tinymce from "tinymce";
import util from "@/libs/util";
export default {
  name: "index",
  data() {
    return {
      spinShow: true,
      editorModel: {
        content: "dfsd",
      },
      content2: "sdds",
      editorRules: {
        content: [
          {
            type: "string",
            min: 5,
            message: "the username size shall be no less than 5 chars ",
            trigger: "blur",
          },
        ],
      },
      customEditor: "富文本测试",
      // 图片上传好的列表
      imgListData: [],
    };
  },
  watch: {
    customEditor: function (newVal) {
      this.editorModel.content = newVal;
    },
  },
  methods: {
    handleSuccess(res) {
      console.log(res);
      this.customEditor = res.content;
      console.log("haoxy" + this.customEditor);
      tinymce.get("tinymceEditer").setContent(this.customEditor);
    },
    init() {
      this.$nextTick(() => {
        let vm = this;
        let height = document.body.offsetHeight - 300;
        tinymce.init({
          selector: "#tinymceEditer",
          branding: false,
          elementpath: false,
          height: height,
          language: "zh_CN.GB2312",
          menubar: "edit insert view format table tools",
          plugins: [
            "advlist autolink lists link image charmap print preview hr anchor pagebreak imagetools",
            "searchreplace visualblocks visualchars code fullpage",
            "insertdatetime media nonbreaking save table contextmenu directionality",
            "emoticons paste textcolor colorpicker textpattern imagetools codesample",
          ],
          toolbar1:
            " newnote print preview | undo redo | insert | styleselect | forecolor backcolor bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent fontsizeselect | link image emoticons media codesample",
          fontsize_formats: "8px 10px 12px 14px 18px 24px 36px 72px 96px 140px 280px",
          autosave_interval: "20s",
          image_advtab: true,
          table_default_styles: {
            width: "100%",
            height: "100%",
            borderCollapse: "collapse",
          },
          image_list: this.imgListData,
          setup: function (editor) {
            editor.on("init", function (e) {
              vm.spinShow = false;
            });

            editor.addButton("customImage", {
              text: "Upload Image",
              icon: false,
              onclick: function () {
                document.getElementById("custom-image-input").click();
              },
            });

            editor.on("change", function (e) {
              vm.customEditor = tinymce.get("tinymceEditer").getContent();
            });
          },
        });
      });
    },

    // 提交按钮  生成pdf
    handleSubmit(name) {
      this.$refs[name].validate((valid) => {
        if (valid) {
          util.post("/html/pdf", this.editorModel).then((res) => {
            this.$Message.success("Success!");
          });
        } else {
          this.$Message.error("Fail!");
        }
      });
    },
    handleReset(name) {
      this.$refs[name].resetFields();
    },
    gitData() {
      console.log(this.customEditor);
    },
    imageUploadedSuccessfully(res) {
      // this.imgListData.push({ title: res.url, value: res.originalFilename });
      this.imgListData.push({ value: res.url, title: res.originalFilename });
      console.log(this.imgListData);
    },
  },
  mounted() {
    this.init();
  },
  destroyed() {
    tinymce.get("tinymceEditer").destroy();
  },
};
</script>

<style>
/* Add your styles here */
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值