• vue-quill-editor 自定义图片上传调整图片大小保存时删除服务器多余图片


    下载 vue-quill-editor

    npm install vue-quill-editor --save

    引入

    import 'quill/dist/quill.core.css'
    import 'quill/dist/quill.snow.css'
    import 'quill/dist/quill.bubble.css'
    import { quillEditor } from 'vue-quill-editor'
    import Quill from 'quill'

    标签

    <quill-editor
          v-model="content"
          style="height:100%;"
          ref="myQuillEditor"
          :options="editorOption"
          @blur="onEditorBlur($event)"
          @focus="onEditorFocus($event)"
          @ready="onEditorReady($event)"
          @change="onEditorChange($event)"
        ></quill-editor>

    js

    
    
    export default {
      name: 'QuillEditor',
      components: {
        quillEditor
      },
      props: {
        value: {
          type: String
            }
          },
      data() {
        return {
          content: null,
          editorOption: {
            // some quill options
          }
        }
      
      methods: {
       onEditorBlur(quill) {
          console.log('editor blur!', quill)
        },
        onEditorFocus(quill) {
          console.log('editor focus!', quill)
        },
        onEditorReady(quill) {
          console.log('editor ready!', quill)
        },
        onEditorChange({ quill, html, text }) {
          console.log('editor change!', quill, html, text)
          this.$emit('change', html)//实时返回内容
        }
    }
    }

    自定义图片上传

    //外挂一个隐藏的图片上传插件
    <div style="display:none;">
          <a-upload
            name="file"
            listType="picture-card"
            class="avatar-uploader"
            :showUploadList="false"
            @change="handleChange"
            :action="action"
            :headers="headers"
            :data="data"
          >
            <div ref="aUpload">
              <a-icon type="plus" />
              <div class="ant-upload-text">Upload</div>
            </div>
          </a-upload>
     </div>

    富文本编辑器配置也需要改一个

    created() {
        let vm = this
        const 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 [{ direction: 'rtl' }], // text direction [{ size: ['small', false, 'large', 'huge'] }], // custom dropdown [{ header: [1, 2, 3, 4, 5, 6, false] }], [{ color: [] }, { background: [] }], // dropdown with defaults from theme [{ font: [] }], [{ align: [] }], ['link', 'image'], ['clean'] // remove formatting button ], handlers: { image: function(value) { debugger vm.$refs.aUpload.click() //自定义图片上传回调 } } } } vm.editorOption.modules = modules },
    vm.$refs.aUpload.click()  触发图片插件点击事件
    图片插件的handleChange会载入图片数据
    handleChange(info) {
          let { file } = info
          if (file.status == 'done') {
         //图片上传成功后返回值 let url
    =file.response.data.filePathName let quill = this.$refs.myQuillEditor.quill let length = quill.getSelection().index //获取当前鼠标焦点位置 quill.insertEmbed(length, 'image', url)//插入<img src='url'/>
         quill.setSelection(length
    + 1) } } //鼠标焦点位置
    }

    这里图片自定义插入已经完成!

    但是图片不能随意改变大小,使用起来体验很差

    下载quill-image-resize-module

    npm install quill-image-resize-module --save

    导入

    ....
    import ImageResize from 'quill-image-resize-module' //调节图片大小
    Quill.register('modules/imageResize', ImageResize)

    vue.config.js

     module.exports = {
        configureWebpack: {
            plugins: [
                  new webpack.ProvidePlugin({
                    ' window.Quill': 'quill/dist/quill.js',
                    'Quill': 'quill/dist/quill.js'
                  })
            ]
        }
    }
    vm.editorOption.modules 也要修改
    const modules = {
        ......
          imageResize: {
            displayStyles: {
              backgroundColor: 'black',
              border: 'none',
              color: 'white'
            },
            modules: ['Resize', 'DisplaySize', 'Toolbar']
          }
        ......
    }

     效果

    然后又有一个问题,用户如果一直载入图片然后删除图片会造成服务器大量没用图片,所以最好每次操作完把没用的图片删除
    在图片上传返回可以把id加到图片src后面?id=xxx
    //获取富文本所以图片的id和被删除图片id
    const getRemovImgId = (ids, html) => {
      let dom = document.createElement('DIV')
      dom.innerHTML = html
      const imgDom = dom.getElementsByTagName('img')
      const url = window.location.host
      const arr=[]
      for (let i = 0; i < imgDom.length; i++) {
        if (imgDom[i].src.indexOf(url) > -1) {
          let reg = new RegExp('(^|&)id=([^&]*)(&|$)')
          let r = imgDom[i].src.split('?')[1].match(reg)
          let id=unescape(r[2])
          ids.splice(ids.indexOf(id),1)
          arr.push(id)
        }
      }
      return {
        removeIds:ids,
        imgIds:arr
      }
    }
    
    export default {
      name: 'QuillEditor',
         data() {
            return {
              ......
              imgIds: [],//所有图片id
              removeIds:[],//被删除图片id
              ......
            }  
    ......
        methods:{
            ......
            onEditorChange({ quill, html, text }) {
                console.log('editor change!', quill, html, text)
                this.$emit('change', html)
                const ids=getRemovImgId(this.imgIds,html)
                this.imgIds=ids.imgIds
                this.removeIds=[...this.removeIds,...ids.removeIds]
                console.log(this.imgIds)
                console.log(this.removeIds)
             },
            //保存富文本成功后调用删除多余图片
             removeImg(){
                if(this.removeIds.length==0)return
                imageDelete(this.removeIds.join(','))//删除图片
              },
             ......
        }
    }  
    
    
    
    
                
     
     
  • 相关阅读:
    ZOJ 2770 Burn the Linked Camp 差分约束
    作业04 一个简单的扑克牌游戏
    C++友元
    ZOJ 3645高斯消元
    CodeForces 55D 数位统计
    03类的设计和使用
    HDU 4522
    POJ 2559单调栈
    PL/SQL REPORT 开发模拟登陆
    修改报表心得
  • 原文地址:https://www.cnblogs.com/guoyanhui-2016/p/11474652.html
Copyright © 2020-2023  润新知