vue elementUI 上传非空验证示例代码

 更新时间:2023年12月07日 14:27:06   作者:半兽先生  
这篇文章主要介绍了vue elementUI 上传非空验证,原理就是写一个假的红色*号,每次点击查看的时候执this.rules.staffImg[0].required = false,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧

<el-form-item label="照片" prop="staffImg">
    <template v-slot:label>
        <span v-show="!rules.staffImg[0].required"
            style="color: #ff4949;margin-right: 4px;">*</span>
        <span>照片</span>
    </template>
    <el-upload class="avatar-uploader" :action="action" ref="upload" :show-file-list="false"
        :on-change="uploadChange" :headers="headers" :before-upload="fileBeforeUpload"
        :on-success="fileUploadSuccess" accept=".jpg,.png">
        <img v-if="imageUrl" :src="imageUrl" class="avatar" />
        <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    </el-upload>
</el-form-item>
            // 表单校验
            rules: {
                staffImg: [
                    { required: true, message: "图片不能为空", trigger: ["blur", 'change'] },
                ],
            },
    computed: {
        // 上传头像
        action() {
            let baseUrl = "";
            if (process.env.NODE_ENV === "development") {
                baseUrl = process.env.VUE_APP_BASE_API + "/base/common/uploadFile";
            } else {
                baseUrl = process.env.VUE_APP_BASE_API + "/base/common/uploadFile";
            }
            return baseUrl;
        },
    },
        uploadChange(file, fileList) {
            // console.log("上传进行改变", this.imageUrl);
            this.headFile = file;
            this.rules.staffImg[0].required = false;
        },
        //图片上传之前
        fileBeforeUpload(file) {
            const that = this;
            let size = file.size / 1024 / 1024;
            if (size >= 1) {
                that.$modal.msgError("上传图片过大!请上传1M以内的图片");
                return;
            }
            const isJpgOrPng =
                file.type === "image/jpeg" || file.type === "image/png";
            // const isLt1M = file.size / 1024 / 1024 < 1;
            const isLt1M = true;
            if (!isJpgOrPng) {
                this.$message.error("上传图片只能是 JPG 或 PNG 格式!");
                return false;
            }
            // 加密
            const time = toString(new Date().getTime());
            const p = encrypt(time);
            this.headers["s"] = p;
            this.headers["t"] = time;
            return new Promise((resolve) => {
                // 小于1M 不压缩
                if (isLt1M) {
                    resolve(file);
                }
                // 压缩到400KB,这里的400就是要压缩的大小,可自定义
                imageConversion.compressAccurately(file, 200).then((res) => {
                    resolve(res);
                });
                // compressAccurately有多个参数时传入对象
                imageConversion
                    .compressAccurately(file, {
                        size: 1024, //图片大小压缩到1024kb
                        width: 1280, //宽度压缩到1280
                    })
                    .then((res) => {
                        resolve(res);
                    });
            });
        },
        //照片上传成功
        fileUploadSuccess(res, file) {
            this.form.staffImg = res.data.dbPath;
            this.imageUrl = URL.createObjectURL(file.raw);
            this.rules.staffImg[0].required = false;
        },

原理就是写一个假的红色*号,每次点击查看的时候执行 this.rules.staffImg[0].required = false;

关闭原有的非空验证,打开假的红色*号

表单重置的时候执行this.rules.staffImg[0].required = true;

上传文件改变后执行this.rules.staffImg[0].required = false;

图片上传成功后执行this.rules.staffImg[0].required = false;

到此这篇关于vue elementUI 上传非空验证的文章就介绍到这了,更多相关vue elementUI 非空验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 通过fastclick源码分析彻底解决tap“点透”

    通过fastclick源码分析彻底解决tap“点透”

    这篇文章主要介绍了通过fastclick源码分析彻底解决tap“点透”问题的知识内容,有兴趣的朋友学习一下吧。
    2017-12-12
  • vue使用canvas的教程详解

    vue使用canvas的教程详解

    Vue.js 是一个流行的 JavaScript 框架,用于构建用户界面,它提供了一种简洁的方式来管理和渲染数据,同时也支持与其他库和工具的集成,本文主要来和大家聊聊如何在vue中使用canvas,有需要的可以参考下
    2023-09-09
  • 基于Vue中的父子传值问题解决

    基于Vue中的父子传值问题解决

    这篇文章主要介绍了基于Vue中的父子传值问题解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • 基于Vue2的独立构建与运行时构建的差别(详解)

    基于Vue2的独立构建与运行时构建的差别(详解)

    下面小编就为大家分享一篇基于Vue2的独立构建与运行时构建的差别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • vue实现PC端分辨率适配操作

    vue实现PC端分辨率适配操作

    这篇文章主要介绍了vue实现PC端分辨率适配操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 解析vue路由异步组件和懒加载案例

    解析vue路由异步组件和懒加载案例

    这篇文章主要介绍了解析vue路由异步组件和懒加载案例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Vue中 key keep-alive的实现原理

    Vue中 key keep-alive的实现原理

    这篇文章主要介绍了Vue中 key keep-alive的实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • vue3获取当前路由地址的两种方法

    vue3获取当前路由地址的两种方法

    近期在做ve3的项目时因为功能需要,需要获取当前路由的地址,下面这篇文章主要给大家介绍了关于vue3获取当前路由地址的两种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • vue使用Pinia的五个实用技巧分享

    vue使用Pinia的五个实用技巧分享

    这篇文章主要为大家详细介绍了vue中使用Pinia是五个实用技巧,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-11-11
  • vue2中seo时使用vue-meta-info的方法

    vue2中seo时使用vue-meta-info的方法

    这篇文章主要介绍了vue2中seo时使用vue-meta-info,本文通过实例代码给大家详细讲解,文末给大家补充介绍了vue seo管理 vue-meta-info 动态设置meta和title的相关知识,需要的朋友可以参考下
    2022-10-10

最新评论