首页IT科技vue封装element组件(Vue + Element 自定义上传封面组件)

vue封装element组件(Vue + Element 自定义上传封面组件)

时间2025-04-30 00:32:51分类IT科技浏览3055
导读:前一段时间做项目,频繁使用到上传图片组件,而且只上传一个封面,于是想着自定义一个图片封面上传组件。先来看一下效果:...

前一段时间做项目          ,频繁使用到上传图片组件              ,而且只上传一个封面      ,于是想着自定义一个图片封面上传组件          。先来看一下效果:

第一张图片是上传之前        ,第二张图片是上传成功后             ,第3张图片是鼠标放上去之后的效果!
首先整理需求         ,图片上传我们使用照片墙的方式      ,只能上传一张图片             ,图片上传成功后不能继续上传           ,如果想要更换图片   ,则需要将图片删除后重新上传                。点击图片上面的放大镜可以查看大图    。
需要限制图片上传的格式              ,图片的大小       。
组件代码:
1 <template> 2 <div class="upload"> 3 <el-upload 4 :class="{hidden:mFileList.length > 0}" 5 list-type="picture-card" 6 :on-remove="handleRemove" 7 :action="action" 8 :before-upload="beforeUploadHandle" 9 :on-success="successHandle" 10 :on-change="changeHandle" 11 :limit="1" 12 :accept="accept" 13 :on-exceed="handleExceed" 14 :file-list="fileList" 15 :on-preview="handlePictureCardPreview" 16 > 17 <i class="el-icon-plus"></i> 18 </el-upload> 19 <el-dialog :visible.sync="dialogVisible"> 20 <img width="100%" :src="https://www.cnblogs.com/shang53880/archive/2023/01/10/dialogImageUrl" alt="" /> 21 </el-dialog> 22 </div> 23 </template> 24 25 <script> 26 export default { 27 props: { 28 action: { 29 type: String, 30 default: "", 31 }, 32 accept: { 33 type: String, 34 default: "", 35 }, 36 fileList:{ 37 type: Array, 38 default: () => [], 39 }, 40 }, 41 watch: { 42 fileList(newValue, oldValue) { 43 this.mFileList = newValue 44 } 45 }, 46 data() { 47 return { 48 dialogVisible: false, //图片放大 49 fileImg: "", //上传图片 50 dialogImageUrl: "", //图片地址 51 mFileList:this.fileList, 52 }; 53 }, 54 methods: { 55 handleRemove(file, fileList) { 56 this.$emit("upload-remove", file); 57 }, 58 handlePictureCardPreview(file) { 59 this.dialogImageUrl = file.url; 60 this.dialogVisible = true; 61 }, 62 // 上传之前 63 beforeUploadHandle(file) { 64 if (file.type !== "image/jpeg" && file.type !== "image/png") { 65 this.$message({ 66 message: "只支持jpg          、png格式的图片!", 67 type: "warning", 68 }); 69 return false; 70 } 71 const isLt2M = file.size / 1024 / 1024 < 2; 72 if (!isLt2M) { 73 this.$message({ 74 message: "上传文件大小不能超过 2MB!", 75 type: "warning", 76 }); 77 return false; 78 } 79 }, 80 // 上传成功 81 successHandle(response, file, fileList) { 82 this.mFileList = fileList; 83 if (response && response.code === 200) { 84 this.$message.success("图片上传成功!"); 85 this.$emit("upload-success", response, file); 86 } else { 87 this.$message.error(response.msg); 88 } 89 }, 90 changeHandle(file, fileList) { 91 if(file.response && file.response.code == 500) { 92 this.$emit("upload-error",file); 93 } 94 }, 95 handleExceed(files, fileList) { 96 this.$message.warning("只能上传1张图片!"); 97 }, 98 }, 99 }; 100 </script> 101 <style lang="scss"> 102 .upload .hidden .el-upload--picture-card { 103 display: none; 104 } 105 </style>

调用组件代码:

1 <template> 2 <div> 3 <el-form ref="dataForm" label-width="80px"> 4 <el-form-item label="封面" prop="cover" class="is-required"> 5 <upload list-type="picture-card" :action="url" :accept=".jpg,.png,.JPG,.PNG" :fileList="fileList" 6 :limit="1" @upload-success="uploadFile" @upload-remove="removeFile" @upload-error="uploadError"> 7 </upload> 8 </el-form-item> 9 </el-form> 10 </div> 11 </template> 12 13 <script> 14 import Upload from ../components/cover-upload/index.vue 15 export default { 16 components: { 17 Upload 18 }, 19 data() { 20 return { 21 url: "", 22 fileList: [], 23 } 24 }, 25 methods: { 26 uploadUrl() { 27 this.url = "http://xxx.xxx.xxx.xxx:xxx/yyxt/admin/course/courseInfo/upload?token=075de0303b15a38833a30a7a3b494794"//上传图片的后台接口 28 }, 29 uploadError(file) { 30 this.fileList = []; 31 }, 32 uploadFile(response, file) { 33 this.fileList = [{ 34 url: response.data, 35 }, ]; 36 }, 37 removeFile(file) { 38 this.fileList = []; 39 }, 40 }, 41 mounted() { 42 this.uploadUrl(); 43 } 44 } 45 </script>

点击上传后的图片上的放大镜             ,显示图片大图

声明:本站所有文章,如无特殊说明或标注            ,均为本站原创发布                 。任何个人或组织               ,在未征得本站同意时   ,禁止复制                、盗用    、采集       、发布本站内容到任何网站                 、书籍等各类媒体平台      。如若本站内容侵犯了原著者的合法权益          ,可联系我们进行处理    。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
不花钱玩逆水寒(如何打游戏挣钱-记我的第一次打游戏赚钱,逆水寒ol搬砖挣钱全过程) 手机网站设计模板下载(手机网站设计模板图片)