• antd的upload上传组件,上传成功后清除表单校验——基础积累


    今天在写后台管理系统时,发现之前的一个bug,就是antdupload上传组件,需要进行表单校验

    在这里插入图片描述
    直接上代码:

    1.html部分

     <a-form-model
          ref="ruleForm"
          :model="form"
          :label-col="labelCol"
          :wrapper-col="wrapperCol"
          :rules="rules"
        >
        xxxxxxxxx
          <a-form-model-item label="导入" prop="fileList" ref="upload">
            <a-upload
              name="file"
              :multiple="true"
              action="xxxxx/template-data"
              accept=".xlsx"
              :customRequest="customRequest"
              :fileList="form.fileList"
              :remove="handleRemove"
            >
              <a-button type="primary">
                <a-icon type="cloud-upload" /> 导入
              </a-button>
            </a-upload>
          </a-form-model-item>
          xxxxxxx
    </a-form-model>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    2.js部分

    export default{
    	data(){
    		return{
    			form:{},
    			formData:null,
    			rules: {
    		        quoteSupplierCode: [
    		          { required: true, message: '请选择供应商', trigger: 'change' },
    		        ],
    		        fileList: [
    		          { required: true, message: '请上传文件', trigger: 'change' },
    		        ],
    		      },
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2.1 上传成功的方法——customRequest

    customRequest(files) {
      let file = files.file;
      this.form.fileList = [file];
      this.$forceUpdate();
      this.formData = new FormData();
      this.formData.append('StreamContent', file);
      //this.$refs.ruleForm.clearValidate('fileList'); //清除图片校验文字——这个方法不生效
      delete this.rules['fileList'];
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    this.$refs.ruleForm.clearValidate(‘fileList’); //清除图片校验文字——这个方法不生效
    delete this.rules[‘fileList’]; 这个是生效的,而且页面上 导入 字段左边还是有必填校验的,只是不会走校验而已

    2.2 移除文件的方法——handleRemove

    handleRemove() {
      this.form.fileList = [];
      this.formData = null;
      this.$forceUpdate();
      this.rules['fileList'] = {
        required: true,
        message: '请上传文件',
        trigger: 'change',
      };
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.3 表单校验方法——handleOk

    handleOk() {
      const form = this.$refs.ruleForm;
      form.validate((valid) => {
        if (valid) {
    		xxxxxx
    	}
      })
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.注意:该页面/弹窗打开的时候,需要添加下面的代码,否则就直接没有文件导入的校验了!!!

    我这边是弹窗,所以是在showModal方法里面写的:

    showModal(ids) {
      this.visible = true;
      this.form = { ids: ids, isDelete: true, deliveryDays: 5 };
      this.$nextTick(() => {
        this.$refs.ruleForm.clearValidate();
        this.rules['fileList'] = {
          required: true,
          message: '请上传文件',
          trigger: 'change',
        };
      });
    },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    总结:使用clearValidate(['指定Prop'])或者clearValidate('指定Prop')是不生效的,然后我使用的方法就是上传文件成功后,将rules中的文件prop删除,也就是delete obj['指定prop'],然后在删除文件或者该页面第一次打开时,给rules添加指定prop的校验规则。

    使用clearValidate(['指定Prop'])或者clearValidate('指定Prop')是不生效的,然后我使用的方法就是上传文件成功后,将rules中的文件prop删除,也就是delete obj['指定prop'],然后在删除文件或者该页面第一次打开时,给rules添加指定prop的校验规则

  • 相关阅读:
    张勇云栖大会谈科技担当与责任:做开放共享人人受益的好科技
    用go设计开发一个自己的轻量级登录库/框架吧(业务篇)
    SuperMap iClient3D 11i (2023) SP1 for Cesium之移动实体对象
    记录7种常见字符编码
    TypeScript学习01--安装和基本数据类型
    LeetCode 0952.按公因数计算最大组件大小:建图 / 并查集
    Linux 中变量的取用与设定
    《软件质量保证与测试》第 1 章——引论 重点部分总结
    C Primer Plus(6) 中文版 第4章 字符串和格式化输入/输出 4.2 字符串简介
    BOOST学习:BOOST_FOREACH+boost::assign处理正则表达式(特殊字符$需要单独处理)
  • 原文地址:https://blog.csdn.net/yehaocheng520/article/details/133708971