首页 前端知识 Vue,在表单中使用el-upload手动上传图片

Vue,在表单中使用el-upload手动上传图片

2024-04-29 11:04:32 前端知识 前端哥 673 527 我要收藏

一、自动上传和手动上传

上传图片分两种,自动上传和手动上传,效果区别:

自动上传:选择图片后立刻调接口上传图片

手动上传:选择图片后只显示图片,自定义何时上传,可以定义点击确定事件里表单验证成功后上传图片

区别:自动上传会造成很多脏数据,手动上传等到上传时才校验图片是否合规

二、手动上传

表单中使用el-upload手动上传图片,组件选择的是照片墙

<template>
<el-form
ref="cardFormRef"
:model="cardForm"
:rules="rules"
label-width="120px"
class="demo-cardForm"
status-icon
>
<el-form-item label="轮播图" prop="photo">
<el-upload
ref="uploadRef"
:class="{ iconVis: fileList.length }"
:action="url" //上传接口
v-model:file-list="fileList"
:limit="1" //限制上传一张
list-type="picture-card" //照片墙
:before-upload="beforeUpload" //上传前
:on-success="handleAvatarSuccess" //上传成功
:headers="headers"
:auto-upload="false" //手动上传
>
<el-icon class="avatar-uploader-icon"><Plus /></el-icon>
</el-upload>
</el-form-item>
</el-form>
</template>
复制
var fileList = ref([]);
var uploadUrl = ref(false); //存图片成功返回的url
const headers = ref({ Authorization: "Bearer " + getToken() });
var url =import.meta.env.VITE_APP_BASE_API + "接口";
var rules = computed(() => ({ //表单校验规则
photo: [
{
required: true,
message: "请上传图片",
trigger: "blur",
},
]
}));
var beforeUpload = (file) => {
console.log("上传前");
const isJPG =
file.type === "image/jpeg" ||
file.type === "image/png" ||
file.type === "image/jpg";
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
proxy.$modal.msgError("上传图片只能是 JPG/PNG 格式!");
}
if (!isLt2M) {
proxy.$modal.msgError("上传图片大小不能超过 2MB!");
}
isJPG && isLt2M ? (uploadUrl.value = true) : (uploadUrl.value = false);
return isJPG && isLt2M;
};
function handleAvatarSuccess(res, file) {
console.log("成功了!");
let { url } = res.data;
uploadUrl.value = url;
sumbitForm(); //表单提交接口,传uploadUrl
}
var cardFormRef=ref(null);
var uploadRef=ref(null);
var sumbit = () => { //点击确定按钮,进行表单校验,校验成功上传图片
cardFormRef.value.validate((val) => {
if (val) {
console.log("上传图片");
uploadRef.value.submit();
}
});
};
复制

点击确定sumbit,表单校验成功 => beforeUpload检查图片符合规格 => handleAvatarSuccess图片上传成功 =>sumbitForm提交表单,包含图片上传成功返回的url

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6256.html
标签
评论
还可以输入200
共0条数据,当前/页
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!