<template>
  <a-card style="width:794px">
    <div id="div1" class="toolbar">
    </div>
    <div ref="editorElem" id="div2" class="text"> <!--可使用 min-height 实现编辑区域自动增加高度-->
    </div>
  </a-card>
</template>

<script>
import E from 'wangeditor'
import BaseTool from '@/utils/tool'
const fileUrl = BaseTool.Constant.FILE_URL
export default {
  name: 'WangEditor',
  data () {
    return {
      editor: null,
      editorContent: '',
      isChange: false,
      fileUrl: ''
    }
  },
  props: ['catchData', 'content'], // 接收父组件的方法
  watch: {
    content () {
      // this.editor.txt.html(this.content)
      if (!this.isChange) {
        this.editor.txt.html(this.content)
      }
      this.isChange = false
    }
  },
  mounted () {
    this.editor = new E('#div1', this.$refs.editorElem)
    this.editor.customConfig.onchange = (html) => {
      // this.editorContent = html
      this.isChange = true;
      this.$emit('catchData', html)
    }
    // this.editor.customConfig.onchange = (html) => {
    //   this.editorContent = html
    //   this.$emit('catchData', this.editorContent)
    //   // if (this.catchData) {
    //   //   this.catchData(this.editorContent) // 把这个html通过catchData的方法传入父组件
    //   // }
    // }
    this.editor.customConfig.uploadImgServer = process.env.VUE_APP_API_BASE_URL + '/upms/files/upload'
    this.editor.customConfig.uploadFileName = 'file'
    this.editor.customConfig.menus = [ // 菜单配置
      'head', // 标题
      'bold', // 粗体
      'fontSize', // 字号
      'fontName', // 字体
      'italic', // 斜体
      'underline', // 下划线
      'strikeThrough', // 删除线
      'foreColor', // 文字颜色
      'backColor', // 背景颜色
      'link', // 插入链接
      'list', // 列表
      'justify', // 对齐方式
      'quote', // 引用
      'emoticon', // 表情
      'image', // 插入图片
      'table', // 表格
      'code', // 插入代码
      'undo', // 撤销
      'redo' // 重复
    ]
    this.editor.customConfig.onblur = function (html) {
      // html 即编辑器中的内容
      console.log('onblur', html)
    }
    // 下面是最重要的的方法
    this.editor.customConfig.uploadImgHooks = {
      before: function (xhr, editor, files) {
        // 图片上传之前触发
        // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象，files 是选择的图片文件

        // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传
        // return {
        //     prevent: true,
        //     msg: '放弃上传'
        // }
        var token = localStorage.getItem('pro__Access-Token')
        xhr.setRequestHeader('Authorization', 'bearer ' + JSON.parse(token).value)
      },
      success: function (xhr, editor, result) {
        // 图片上传并返回结果，图片插入成功之后触发
        // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象，result 是服务器端返回的结果
        if (result.code !== 0) {
          this.$message.info('上传图片失败：' + result.message)
          return
        }
        this.imgUrl = fileUrl + result.data.path + result.data.fileFullName
      },
      fail: function (xhr, editor, result) {
        // 图片上传并返回结果，但图片插入错误时触发
        // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象，result 是服务器端返回的结果
      },
      error: function (xhr, editor) {
        // 图片上传出错时触发
        // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象
      },
      timeout: function (xhr, editor) {
        // 图片上传超时时触发
        // xhr 是 XMLHttpRequst 对象，editor 是编辑器对象
      },

      // 如果服务器端返回的不是 {errno:0, data: [...]} 这种格式，可使用该配置
      // （但是，服务器端返回的必须是一个 JSON 格式字符串！！！否则会报错）
      customInsert: function (insertImg, result, editor) {
        // 图片上传并返回结果，自定义插入图片的事件（而不是编辑器自动插入图片！！！）
        // insertImg 是插入图片的函数，editor 是编辑器对象，result 是服务器端返回的结果

        // 举例：假如上传图片成功后，服务器端返回的是 {url:'....'} 这种格式，即可这样插入图片：
        const url = fileUrl + result.data.url // result.data就是服务器返回的图片名字和链接
        console.log('url' + url)
        insertImg(url)
        // result 必须是一个 JSON 格式字符串！！！否则报错
      }
    }
    // this.editor.customConfig.uploadImgShowBase64 = true

    // if (this.langConfig) {
    //   this.editor.customConfig.lang = this.langConfig
    // }
    this.editor.customConfig.zIndex = 100
    this.editor.create() // 创建富文本实例
    if (!this.content) {
      this.editor.txt.html('')
    }
  },
  created () {
  }
}
</script>

<style scoped>
  .toolbar {
    border: 1px solid #ccc;
    border-radius: 3px;
  }

  .text {
    border: 1px solid #ccc;
    height: 400px;
    border-radius: 3px;
  }
</style>
