vue-quill-editor 自定义上传图片,自定义文字大小封装

在这里插入图片描述
在这里插入图片描述

<template>
  <div>
    <el-upload
      class="upload posAbs"
      action="api/wx/file/upload"
      :http-request="handleUpload"
      name="files"
      accept="image/jpeg, image/png, image/jpg"
      :show-file-list="false"
    >
    </el-upload>
    <quill-editor
      v-model="content"
      :options="editorOption"
      @change="onEditorChange"
      ref="QuillEditor"
    >
    </quill-editor>
  </div>
</template>

<script>
import { uploadFile } from "@/api/common";
import _ from "lodash";
import Quill from "quill";
let fontSizeStyle = Quill.import("attributors/style/size");
fontSizeStyle.whitelist = [
  "12px",
  "14px",
  "16px",
  "18px",
  "20px",
  "22px",
  "24px",
  "26px"
];
Quill.register(fontSizeStyle, true);//解决字体大小设置多个,配合下面的style样式
export default {
  props: {
    data: Object,
    required: true,
  },
  data() {
    return {
      content: "",//拿到的编辑器里的内容
      editorOption: {
        placeholder: "请在此输入公告内容...",
        modules: {
          toolbar: {
            container: [
              ["bold", "italic", "underline", "strike"], // toggled buttons
              ["blockquote", "code-block"],
              [{ header: 1 }, { header: 2 }], // custom button values
              [{ list: "ordered" }, { list: "bullet" }],
              [{ script: "sub" }, { script: "super" }], // superscript/subscript
              [{ indent: "-1" }, { indent: "+1" }], // outdent/indent
              [{ color: [] }, { background: [] }], // dropdown with defaults from theme
              [{ align: [] }],
              [{ size: fontSizeStyle.whitelist }], //"image"上传图片入口 // custom dropdown,
              [{ header: [1, 2, 3, 4, 5, 6, false] }],
              [{ font: [] }],
              ["link""image"],
              
            ],
            handlers: {
              image: value => {
                if (value) {
                  console.log(value, "+2");
                  document.querySelector(".upload input").click();//自定义调起图片
                } else {
                  console.log(value, "+2");
                  this.quill.format("image", false);
                }
              }
            }
          }
        }
      }
    };
  },
  created() {
    this.editorOption.modules.toolbar.container[9][1] =this.data&&data.image ;
    console.log(this.data, "this.props");
  },

  methods: {
    handleUpload(params) {//从后端返回的图片地址插入到编辑器里
      let form = new FormData();
      form.append("file", params.file);
      this.$service.common.uploadFile(form).then(res => {
        let quill = this.$refs.QuillEditor.quill;
        this.$emit("content", this.content);
        let index = quill.getSelection().index;
        quill.insertEmbed(index, "image", res.data);
        quill.setSelection(index + 1);
      });
    },
    onEditorChange(e) {
      console.log(e, "+e");
      this.$emit("content", this.content);
    }
  }
};
</script>

<style scoped lang="scss">
.container {
  padding: 25px;
}
/deep/ .ql-container.ql-snow {
  min-height: 260px;
}
/deep/ .quill-editor.ql-snow.ql-editor {
  padding: 0;
}

/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="12px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="12px"]::before {
  content: "12px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="14px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="14px"]::before {
  content: "14px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="16px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="16px"]::before {
  content: "16px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="18px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="18px"]::before {
  content: "18px";
}

/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="20px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="20px"]::before {
  content: "20px";
}
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="22px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="22px"]::before {
  content: "22px";
}

/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="24px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="24px"]::before {
  content: "24px";
}

/deep/ .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="26px"]::before,
/deep/ .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="26px"]::before {
  content: "26px";
}
</style>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值