首页 > 其他分享 >VUE- elementUI使用quill富文本编辑器(编辑文本、上传图片)

VUE- elementUI使用quill富文本编辑器(编辑文本、上传图片)

时间:2023-08-24 18:22:24浏览次数:34  
标签:文本编辑 VUE name elementUI 上传 image file data quill

准备工作:安装  yarn install vue-quill-editor

main.js

// 编辑器
import VueQuillEditor from 'vue-quill-editor'
// 引入样式
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'

// 需要在new VUE之前
Vue.use(VueQuillEditor);

  

test.vue

<template>
  <div>
    <!--    // 新增按钮-->
    <div style="width: 100%; text-align: right;">
      <el-button type="success" style="float: left" @click="addCommodity">新增商品</el-button>
    </div>
    <br><br>


    <div>
      <el-dialog title="新增商品信息" :visible.sync="dialogFormVisible" width="50%" :close-on-click-modal="false">
       
          <el-form-item label="商品介绍" :rules="[{ required: true, message: '请输入商品介绍', trigger: 'blur' }]"><br>
            <quill-editor
                v-model="content"
                :options="editorOption"
                @blur="onEditorBlur($event)"
                @focus="onEditorFocus($event)"
                @change="onEditorChange($event)">
            </quill-editor>
          </el-form-item>

        </el-form>
        <div slot="footer" class="dialog-footer">
          <el-button @click="dialogFormVisible = false">取 消</el-button>
          <el-button type="primary" @click="handleAdd">确 定</el-button>
        </div>
      </el-dialog>
    </div>
  </div>
</template>

<script>
import {quillRedefine} from 'vue-quill-editor-upload'

export default {
  name: "CommodityList",
  data() {
    return {
      dialogFormVisible: false,
      formLabelWidth: 200,
      form: {
        xuni: 0,
      },
      content: '',
      uploadUrl: this.$webSite + "/manage/upload_api/",

    }
  },


  created() {
    this.editorOption = quillRedefine(//修改富文本编辑器图片上传路径
        {
          // 图片上传的设置
          uploadConfig: {
            action: this.uploadUrl,  // 必填参数 图片上传地址\
            too: [['bold', 'italic', 'underline', 'strike'], ['blockquote', 'code-block'], [{'header': 1}, {'header': 2}], [{'list': 'ordered'}, {'list': 'bullet'}], [{'script': 'sub'}, {'script': 'super'}], [{'indent': '-1'}, {'indent': '+1'}], [{'direction': 'rtl'}], [{'size': ['small', false, 'large', 'huge']}], [{'header': [1, 2, 3, 4, 5, 6, false]}], [{'color': []}, {'background': []}], [{'font': []}], [{'align': []}], ['clean'], ['image']],
            header: (xhr) => {
              //关键是这句话
              xhr.setRequestHeader('Authorization', window.localStorage.getItem('token'));
              xhr.setRequestHeader('Username', window.localStorage.getItem('userid'));
              return xhr
            },
            res: (response) => {
              return response.url;//return图片url
            },
            accept: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon',
            name: 'file'  // 图片上传参数名
          }
        })
    this.editorOption.modules = {
      toolbar: [
        ['bold', 'italic', 'underline', 'strike'], //加粗,斜体,下划线,删除线
        ['blockquote', 'code-block'], //引用,代码块
        [{'header': 1}, {'header': 2}], // 标题,键值对的形式;1、2表示字体大小
        [{'list': 'ordered'}, {'list': 'bullet'}], //列表
        [{'script': 'sub'}, {'script': 'super'}], // 上下标
        [{'indent': '-1'}, {'indent': '+1'}], // 缩进
        [{'direction': 'rtl'}], // 文本方向
        [{'size': ['small', false, 'large', 'huge']}], // 字体大小
        [{'header': [1, 2, 3, 4, 5, 6, false]}], //几级标题
        [{'color': []}, {'background': []}], // 字体颜色,字体背景颜色
        [{'font': []}], //字体
        [{'align': []}], //对齐方式
        ['clean'], //清除字体样式
        ['image'] //上传图片、上传视频
      ],
    }
    this.editorOption.placeholder = "请输入商品描述"
  },

  methods: {
    addCommodity() {
      this.dialogFormVisible = true;
    }
  }
}
</script>

<style scoped>

</style>

  

views.py

class ImageArticleView(APIView):
    @check_role
    def post(self, request):
        file_data = request.FILES['file']  # 获取上传的文件数据
        file_type = '.' + file_data.name.split('.')[-1]
        tmp_data = uid()
        file_data.name = tmp_data + file_type
        file_path = 'http://127.0.0.1:8000' + '/media/image_path/' + file_data.name
        image = ImageUpload(
            sid=tmp_data,
            image=file_data,
            account=account(request)
        )
        image.save()
        response_data = {'file_name': file_data.name, 'url': file_path}
        print('upload response: ', response_data)
        return JsonResponse(response_data)

  

至此,只要点击图片并上传后,图片会插入到编辑器当中,以URL的方式进行保存。

 

标签:文本编辑,VUE,name,elementUI,上传,image,file,data,quill
From: https://www.cnblogs.com/lytcreate/p/17654882.html

相关文章

  • vue实现大文件上传下载
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • vue中,一个参数是一个图片网络地址,当重新上传一个图片替换原来的图片后,地址没变,但是图
    这个问题可能是由于浏览器缓存导致的。为了解决这个问题,你可以向图片的URL地址中添加一个随机参数,以确保每次加载图片时都会从服务器获取最新的图片。你可以使用类似于以下方式来添加随机参数:<img:src="imageUrl+'?timestamp='+Date.now()"/>这样,每次你更新了图片后,URL中......
  • Vue组件缓存之keep-alive正确使用姿势
    先来看一个项目中的需求作为苦逼的前端开发者,我们无时无刻都要面对产品经理提的各种需求,比如下图这个场景场景:从首页的点击导航进入列表页,列表页点击列表进入该数据详情页从详情页返回,希望列表页缓存,不重新渲染数据,这样会提高用户体验。分析一下这样需求,如果是小程序......
  • 有关elementuiplus popper 动画报错
     解决方法:局部解决:    ElementPlus的 ElDropdown 组件是基于Popper.js构建的,所以可以使用相同的方式来禁用 adaptive 选项。在 ElDropdown 组件中,你可以使用 popper-options 属性来指定Popper实例的选项。因此,要禁用 adaptive 选项,你可以将 popper-op......
  • Electron,VUEJS3,Vite,TypesSript 开发环境配置
    Electron,VUEJS3,Vite,TypesSript开发环境配置项目早期是vue3+vite开发的,后期由于运营需求,要修改为Win安装包。方案还是比较多的:1.WPF-Webview由于目前只需要兼容win,所以可以选择WPF,但WPF需要WebView的,还需要本地架设服务。整体部署比较复杂以及需要熟悉C#与WPF相关开发。2.......
  • vue3 使用 setup 语法糖时,keep-alive 缓存使用 include / exclude 获取组件名
    <template><router-viewv-slot="{Component,route}"><keep-alive:include="['ComponentName']"><component:is="Component":key="route.name"/></keep-alive>......
  • Vue【原创】数据可视化,复合数字形式展示
    做数据可视化的时候,经常碰到需要很灵活的数字形式展示。先上个效果图: 如图包括名称,数量,别名,单位,上升下降,环比等等的复合数据展示,并且需要支持样式灵活配置。此组件包括2个模块,父容器组件box-group,其中每一项的子组件box。 父组件box-group1<template>2<divcl......
  • vue3 报错:husky - pre-commit hook exited with code 1 (error)
    问题:git提交不上去解决方法:   "format":"prettier--write\"./**/*.{html,vue,ts,js,json,md}\"",......
  • 找不到模块“../view/Home.vue”或其相应的类型声明。
    环境:vue3+ts解决办法:在src目录里面添加env.d.ts文件,在文件里贴上declaremodule'*.vue'{importtype{DefineComponent}from'vue'constcomponent:ComponentOptions|ComponentOptions['setup']exportdefaultcomponent} ......
  • VUE input允许数字 且两位小数
    页面:<[email protected]="onlyNumber()"placeholder="请输入(整数或者小数)金额"v-model="form.ysje"></el-input>方法:onlyNumber(){this.form.ysje=this.onlyNumOnePoint(this.form.ysje);},onlyNumOnePoint(number_on......