<template lang="html">
<div class="editor">
    <div ref="toolbar" class="toolbar">
    </div>
    <div ref="editor" class="text">
    </div>
</div>
</template>

<script>
import E from 'wangeditor'
export default {
  name: 'editoritem',
  data () {
    let myToken = localStorage.getItem('token')
    return {
      myToken,
      editor: null,
      info_: null,
      isChange: false,
      loading: null
    }
  },
  model: {
    prop: 'value',
    event: 'change'
  },
  props: {
    value: {
      type: String,
      default: ''
    }
  },
  watch: {
    isClear (val) {
      // 触发清除文本域内容
      if (val) {
        this.editor.txt.clear()
        this.info_ = null
      }
    },
    value: function (value) {
      // if (value !== this.editor.txt.html()) {
      //   this.editor.txt.html(this.value)
      // }
      if (!this.isChange) {
        this.editor.txt.html(this.value)
      }
      this.isChange = false
    }
    // value为编辑框输入的内容，这里我监听了一下值，当父组件调用得时候，如果给value赋值了，子组件将会显示父组件赋给的值
  },
  mounted () {
    this.seteditor()
    this.editor.txt.html(this.value)
  },
  methods: {
    seteditor () {
      // http://192.168.2.125:8080/admin/storage/create
      this.editor = new E(this.$refs.toolbar, this.$refs.editor)
      this.editor.customConfig.uploadImgShowBase64 = false // base 64 存储图片
      this.editor.customConfig.uploadImgServer = this.$url + '/admin/upload/uploadImg' // 配置服务器端地址
      this.editor.customConfig.uploadImgHeaders = {} // 自定义 header
      this.editor.customConfig.uploadFileName = 'file' // 后端接受上传文件的参数名
      this.editor.customConfig.uploadImgMaxSize = 5 * 1024 * 1024 // 将图片大小限制为 10M
      this.editor.customConfig.uploadImgMaxLength = 20 // 限制一次最多上传 20 张图片
      this.editor.customConfig.uploadImgTimeout = 3 * 60 * 1000 // 设置超时时间

      // 配置菜单
      this.editor.customConfig.menus = [
        'head', // 标题
        'bold', // 粗体
        'fontSize', // 字号
        'fontName', // 字体
        'italic', // 斜体
        'underline', // 下划线
        'strikeThrough', // 删除线
        'foreColor', // 文字颜色
        'backColor', // 背景颜色
        // 'link', // 插入链接
        'list', // 列表
        'justify', // 对齐方式
        'quote', // 引用
        'emoticon', // 表情
        'image', // 插入图片
        'table', // 表格
        // 'video', // 插入视频
        // 'code', // 插入代码
        'undo', // 撤销
        'redo', // 重复
        'fullscreen' // 全屏
      ]

      // this.editor.customConfig.debug = true

      this.editor.customConfig.customUploadImg = (files, insert) => {
        console.log(files, '@todo upload')
        this.loading = this.$loading({
          lock: true,
          text: 'Loading',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
        })
        this.UploadImg(files, insert)
      }
      this.editor.customConfig.onchange = (html) => {
        this.isChange = true
        this.info_ = html // 绑定当前逐渐地值
        this.$emit('change', this.info_) // 将内容同步到父组件中
      }
      // 创建富文本编辑器
      this.editor.create()
    },
    UploadImg (files, insert) {
      let formData = new FormData()
      formData.append('file', files[0])
      let file = Array.from(files)
      this.$api.post('/upload/uploadImg', formData).then(res => {
        this.loading.close()
        console.log(res, 'upload is finally')
        const img = this.$img + res
        insert(img)
        file.shift()
        file.length && this.UploadImg(file, insert)
      }).catch(err => {
        this.loading.close()
        console.log(err)
      })
    }
  }
}
</script>

<style lang="css" scoped>
.editor {
    width: 100%;
    margin: 0 auto;
    position: relative;
    z-index: 0;
}

.toolbar {
    border: 1px solid #ccc;
}

.text {
    border: 1px solid #ccc;
    height: 400px;
    width: 100%;
}

img {
    max-width: 100%;
}
</style>
