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

                      
第一张图片是上传之前,第二张图片是上传成功后,第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="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>

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

 
 

Vue + Element 自定义上传封面组件的更多相关文章

  1. vue + element 文件上传 并将文件转 base64

    当时有一个需求 是需要用到上传文件这个功能,并且需要将文件转为 base64 给到后台.网上找的全是啥图片转base64 肯定是因为这类需求比较常见.当时有点懵了.后面一想,都他娘是文件啊.然后就找到 ...

  2. vue element ui 上传 请求接口

    在页面上 http-request: 覆盖默认的上传行为,可以自定义上传的实现 <el-upload  class="avatar-uploader"  action=&qu ...

  3. Element ui 上传文件组件(单文件上传) 点击提交 没反应

    element ui 第一次上传文件后 上传其他文件再次点击不再次提交 需要使用 clearFiles 清空已上传文件列表 这时候在次点击 上传按钮 就会惊喜的发现 可以上传了使用方法 this.$r ...

  4. vue element upload上传、清除等

    如果项目中可以使用file-list,那我们可以点击file-list删除文件列表: 有时候项目中是不要这个文件列表的,所以在上传成功以后,文件列表一直存在,要重新上传就必须刷新页面,所以我们需要手动 ...

  5. vue ----element-ui 文件上传upload 组件 实现 及其后台

    1.前台 action 不用改 :https://jsonplaceholder.typicode.com/posts/ getFile: 获取文件 data(){ return { file: {} ...

  6. vue 阿里云上传组件

    vue 阿里云上传组件 Vue.js上传图片到阿里云OSS存储 测试项目git地址 本测试项目启动方法 示例链接 组件配置项 实践解释 本文主要介绍如何 在vue项目中使用web 直传方式上传阿里云o ...

  7. UI组件--element-ui--Upload多组件自定义上传

    需求: 提交详细信息的表单, 并上传对应图片(如下图), 后台接口要求表单数据和图片需要一次上传完成.. 分析: 实际上, 每个element-ui Upload组件都应发送一次请求, 很明显不符合我 ...

  8. AntD框架的upload组件上传图片时使用customRequest方法自定义上传行为

    本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 我在上一篇文章<AntD框架的upload组件上传图片时使用customRequest方法 ...

  9. vue-resource+element upload上传(遇到formData总是变为object格式)

    文件上传这种业务需求很常见,但是最近用了element,仔细看了文档,按照demo写了上传,与后台传参调取接口时,控制台总是显示未获取到文件,想了又想,发现一开始思路就跑遍了... 写此博记录下遇到的 ...

  10. vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案

    现在前端基本不是vue技术栈就是react技术栈. vue技术栈最常用的就是element-ui的ui框架了. 在项目中,我们经常会碰到这种需求:批量上传文件 element-ui 确实也为我们提供了 ...

随机推荐

  1. day01-3-界面显示&用户登录&餐桌状态显示

    满汉楼01-3 4.功能实现02 4.2菜单界面显示 4.2.1功能说明 显示主菜单.二级菜单和退出系统功能 4.2.2代码实现 先搭建界面显示的大体框架,具体的功能后面再实现 创建MHLView类: ...

  2. ISCTF2022WP

    ISCTF2022改名叫套CTF吧(bushi),博主菜鸡一个,套题太多,挑一些题写下wp,勿喷. MISC 可爱的emoji   下载下来是个加密压缩包,根据hint掩码爆破密码 得到密码:KEYI ...

  3. 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis

    前言 前面有几篇文章讲述了如何使用Terraform创建资源 (基础设施即代码 Terraform 快速入门, 使用 Terraform 创建 Kubernetes) 以及 Kubernetes时代的 ...

  4. JavaScript之数组高阶API—reduce()

    一文搞懂JavaScript数组中最难的数组API--reduce() 前面我们讲了数组的一些基本方法,今天给大家讲一下数组的reduce(),它是数组里面非常重要也是比较难的函数,那么这篇文章就好好 ...

  5. nginx性能监控

    nginx自带监控模块,需要在nginx编译安装时加入监控模块. 1. 编译安装时加入监控模块 ngin编译安装时,加入编译参数为:--with-http_stub_status_module.如下所 ...

  6. docker清空网络配置

    docker 网络 故障 相同的 ip 绑定给了 两个 网卡, 需要 清空 网络 ip addr | grep 10.79 inet 10.79.106.1/24 brd 10.79.106.255 ...

  7. Training: Get Sourced

    原题链接:http://www.wechall.net/challenge/training/get_sourced/index.php 提示告诉我们答案就藏在这个界面中,使用View Sourcec ...

  8. SpringDataJpa源码理解

    SpringDataJpa源码理解 上一篇讲解了SpringDataJpa的基本使用,下面简单说一下源码 我们以其中的一个test为案例进行分析: 我们可以发现resumeDao它是一个代理对象,类型 ...

  9. 移动 VR 开发时要避免的 PC 渲染技术

    更新:本文是为 Quest 1 开发人员编写的.虽然 Quest 2 建立在相同的架构上,但现在更容易为阴影贴图(以及其他需要从先前渲染过程中生成的纹理读取的简单技术)做预算. 尽管移动芯片组可以支持 ...

  10. jmeter中下一接口依赖上一接口的参数,上一个接口存在分页时,如何在下一接口循环读取上一接口的数据?

    问题背景: 工作中性能测试存在接口数据依赖,B接口依赖A接口的数据,希望提取到A接口的数据,传入到B接口,但是A接口存在分页的情况. 如何保证A接口返回的数据未知,且每次从A接口传给B接口的数据不重复 ...