element-plus [Component] [upload] 在封装upload-img组件时,底层upload组件的beforeUpload方法提前渲染,导致图片未裁剪或未确定就显示在upload组件上。

yvgpqqbh  于 5个月前  发布在  其他
关注(0)|答案(4)|浏览(71)

Bug Type: Component

Environment

  • Vue Version: 3.2.45
  • Element Plus Version: 2.2.30
  • Browser / OS: Google Chrome 111.0.5563.65
  • Build Tool: Webpack

Reproduction

  • el-upload

Element Plus Playground

Steps to reproduce

*背景:封装了cropper裁剪组件,嵌在upload组件里,封装成新的上传图片upload-img组件。
*操作:当选择图片后裁剪组件的模态框打开的时候,尚未裁剪的图片未确定上传之前,底层页面中的upload组件的预览图已展示,并且是完整的图片,不是剪裁好的目标大小的图片。

What is Expected?

期望裁剪组件确定上传之前,底层的upload组件不提前显示未操作的图片,即beforeUpload禁止提前将图片的url传给组件并禁止显示。

What is actually happening?

封装了cropper裁剪组件,嵌在upload组件里,封装成新的上传图片upload-img组件,当点击上传后裁剪组件的模态框打开的时候,尚未裁剪的图片未确定上传之前,底层页面中的upload组件的预览图已上传,并且是未裁剪的图片,不是确定裁剪操作之后的图片。

Additional comments

(empty)

ijnw1ujt

ijnw1ujt1#

before-upload 支持异步回调,内部是会await这个方法执行结束,你可以试试看

2eafrhcq

2eafrhcq2#

before-upload 支持异步回调,内部是会await这个方法执行结束,你可以试试看

before-upload 返回Promise,在 pedding 状态时(并未执行 resolve),图片就已经出现在了预览框里,所以我认为正确的逻辑应该是在执行resolve之前,图片不应该出现在预览框里。

yqkkidmi

yqkkidmi3#

@ZXYforce 手动写一个添加框(样式可以直接cp组件自带的)在裁剪完成后手动调用upload控件的handleStart,传入裁剪后的file文件应该就可以,是否添加到队列全部由你控制

gxwragnw

gxwragnw4#

before-upload 返回Promise,在 pedding 状态时(并未执行 resolve),图片就已经出现在了预览框里,所以我认为正确的逻辑应该是在执行resolve之前,图片不应该出现在预览框里。

认同哈

相关问题