坚持学习打卡

vue tinymce 控制图片大小上传,以及富文本编辑框在di

2022-06-27  本文已影响0人  Moment929

项目需求需要用到富文本编辑框,表格中操作富文本编辑框,最后选择用弹框的形式显示,注意弹框和富文本编辑框的坑

问题1:第二次打开弹框,富文本编辑框的内容为第一次的,未更新全新

原因:第一次弹框tinymce 组件未销毁,因此先于第二次dialog弹出,而第二次dialog中的传值也就后于富文本组件初始化,也就未被渲染了。
v-if="dialogFormVisible"

<el-dialog title="富文本编辑" :visible.sync="centerDialogVisible" center>
      <Tinymce v-model="conclusionDesc" v-if="dialogFormVisible"></Tinymce>
      <div slot="footer" class="dialog-footer">
        <el-button @click="centerDialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="submitEdit(conclusionDesc)">保存</el-button>
      </div>
 </el-dialog>

<script>
methods: {
  submitEdit(val) {
      this.centerDialogVisible = false
      this.dialogFormVisible = false
      console.log(Base64.encode(val)) //base64编码
   },
}
</script>

问题2:弹窗中的富文本组件的工具栏点击无响应

原因:tinycme和dialog中的样式冲突了,当我们F12把页面缩小,会发现,并不是点击toolbar没反应,而是菜单栏(toolbar)被置于底层了,dialog盖住了菜单栏
解决:修改tinycme中的样式文件,z-index: 都+00000,此文件中有多处z-index,请全部修改(另外,z-index = -1 这种就不需要修改了)


image.png
image.png

需求:上传图片的大小限制M以内

data() {
    const that = this
    return {
      // 自动生成的id
      tinymceId: this.id,
      init: {
        selector: `#${this.tinymceId}`,
        language_url: '/mtinymce/langs/zh_CN.js', // 语言包的路径
        language: 'zh_CN', //语言
        skin_url: '/mtinymce/skins/ui/oxide', // skin路径
        content_css: "/mtinymce/skins/content/default/content.css",
        icons_url: '/mtinymce/icons/default/icons.js',
        icons: 'default',
        height: this.height, //编辑器高度
        branding: false, //是否禁用“Powered by TinyMCE”
        menubar: false, //顶部菜单栏显示
        statusbar: false, //是否显示底部的状态栏
        plugins: this.plugins,
        toolbar: this.toolbar, // (自定义工具栏)
        // 此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
        // 如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
        images_upload_handler: (blobInfo, success, failure) => {
          console.log(blobInfo, success, failure)
          const isLt10M = blobInfo.blob().size / 1024 / 1024 < 10;
          if (!isLt10M) {
            failure('上传图片大小不能超过 10MB!');
          } else {
            const img = 'data:image/jpeg;base64,' + blobInfo.base64()
            success(img)
          }
        },
        setup: (editor) => {
          // 初次化编辑器
          editor.on('init', () => {
            that.isInit = true //告知是初始化\
            if (that.value) {
              editor.setContent(that.value)
              that.isInit = false
            }
            editor.on('input change undo redo', () => {
              // this.value = editor.getContent()
              //此处设置为false很好解决光标前置问题
              that.isInit = false
            })
          })
        },
      },
      myValue: this.value,
      isInit: false, //是否初始化
    }
  },
上一篇下一篇

猜你喜欢

热点阅读