/uploads/20230530/d3758352238c2204038382d3a3775909.jpg,/uploads/20230530/46c4f3f7360db850647354c431662c8e.jpeg,/uploads/20230530/6446d860dbbfe540e9e2cbab5f98f1e3.png,.JPG,.JPEG" ref="upload" > <el-button size="small" type="primary">点击上传</el-button> </el-upload> <div class="el-upload__tip">图片尺寸:600*200,图片5MB以内,图片格式支持JPG、JPEG、PNG</div> </el-form-item> <!-- 是否推荐 0不推荐 1推荐--> <el-form-item prop="recommend" label="是否推荐" > <el-select v-model="ruleForm.recommend" placeholder="请选择是否推荐" > <el-option label="是" :value="1" ></el-option> <el-option label="否" :value="0" ></el-option> </el-select> </el-form-item> <el-form-item label="特殊资源" prop="share"> <el-radio-group v-model="ruleForm.share"> <el-radio label="线上品牌商赞助"></el-radio> <el-radio label="线下场地免费"></el-radio> </el-radio-group> </el-form-item> <el-form-item label="活动性质" prop="type"> <el-checkbox-group v-model="ruleForm.type"> <el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox> <el-checkbox label="地推活动" name="type"></el-checkbox> <el-checkbox label="线下主题活动" name="type"></el-checkbox> <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox> </el-checkbox-group> </el-form-item> <el-form-item label="活动形式" prop="content"> <el-input type="textarea" v-model="ruleForm.content"></el-input> </el-form-item> </el-form> <template #footer> <span class="dialog-footerData" > <!-- 当使用指令方式时,全屏遮罩需要添加fullscreen修饰符(遮罩会插入至 body 上),此时若需要锁定屏幕的滚动,可以使用lock修饰符;当使用服务方式时,遮罩默认即为全屏,无需额外设置。-->          <el-button  class="bai" @click="dataCancel" >取消</el-button>               <el-button type="primary" @click="dataConfirm(1)" v-loading.fullscreen.lock="fromloading">发布</el-button> </span> </template> </el-dialog>

表单校验 和数据提交

<script>
import { useRoute } from 'vue-router'
import { toRefs, reactive, ref, unref} from 'vue'
import axios from '../../api/news' // axios 接口求情
import router from '../../router';
import {ElMessage} from 'element-plus';
 
export default {
  setup() {
    const route = useRoute();
    const datadialog = ref(false) // 新增弹窗
    const upload = ref("");   //上传
    const ruleFormRef = ref(null); //表单
    let formSize = 'default';
    let ruleForm = reactive({
      title:'',// 标题
      img:'',//图片
      recommend: '',//是否推荐  
      share: '',// 特殊资源
      type: '',// 活动性质
      content:'' ,// 内容
    });
    //表单校验
    const rules = reactive({
      title: {required: true, message: '请输入标题', trigger: 'blur'},
      img: {required: true, message: '请上传图片', trigger: 'blur'},
      content: {required: true, message: '请填写活动形式', trigger: 'blur'},  
      recommend: {required: true, message: '请选择特殊资源 ', trigger: 'change'},
      share: {required: true, message: '请选择是否允许分享', trigger: 'change'},
      type: [{ type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }],
    })
    const data = reactive({  
      infoData:[],
      fileList:[],
      loading: false,
      dialogtitle:'',//弹窗标题
      fullscreen:false,
      fromloading:false,
    }) 
    //  新增弹窗 
    function fundOperation(){
      data.fullscreen = false
      ruleForm.img = ""; // 清空文件图片地址
      data.fileList = [];
      // 清空表单数据
      Object.keys(ruleForm).map(key => {
        delete ruleForm[key]
      })
      data.dialogtitle = '新增'
      datadialog.value = true;  //  显示弹窗
    }
    // 上传图片方法
    function beforeUpload(file, fileList) {
       data.loading = true;
        const isLt10M = file.size / 1024 / 1024 < 5;
        if (!isLt10M) {
          ElMessage('上传头像图片大小不能超过 5MB!');
          data.loading = false;
        }
       return isLt10M;
     
    }  
    // 图片被移除
    function fileRemoved(file, fileList) {
      if (file && file.status === "success") {
        //移除前方法
        ruleForm.img = ""; // 清空文件图片地址
      }
    }
    // 文件上传成功
    function uploadSucceed(res) {
      if (res.code == 200) {
        data.loading = false;
        ruleForm.img = res.data.url; // 图片链接
      }else{
        ruleForm.img = ''; // 图片链接
      }
     
    }
    function uploadError(){
      data.loading = false;
      ElMessage.error("图片上传失败");
      ruleForm.img = ''; // 图片链接
    }
    // 编辑数据 取消
    function dataCancel(){
      data.fileList = [];  
      Object.keys(ruleForm).map(key => {
        delete ruleForm[key]
      })
      data.loading = false;
      datadialog.value = false;
      data.fullscreen = false;
    }
    async function dataConfirm(){  
      data.fromloading = true; //
      const form = unref(ruleFormRef);
      if (!form) return;
      try {
           await ruleFormRef.value.validate((valid) => {
            // 验证通过 请求接口
              if (valid) {
          //写自己的接口地址哦
                 axios.addApi(ruleForm).then(res => {
                    if (res.code == 200) {
                      data.fileList = []; 
                      data.loading = false;
                      datadialog.value = false;
                      data.fullscreen = false;
                      data.fromloading = false; 
                      // ElMessage.success('操作成功');  //默认时间 方式
                      ElMessage.success({
                        message:'操作成功',
                        duration:2500
                      });
                    }else{
                      data.fromloading = false;
                      ElMessage.error(res.message);
                    }
                  })
                 
              } else {
                // 验证失败 取消loading,
                data.fromloading = false;
                return;
              }
            })  
           
        } catch (error){
           // 验证失败 取消loading,
          data.fromloading = false;
        }  
    }
     
    return {
      ...toRefs(data), 
      fundOperation,
      datadialog,
      dataCancel,
      dataConfirm,
      ruleForm,
      formSize,
      rules,  
      fileRemoved,
      uploadSucceed,
      uploadError,
      upload,
      beforeUpload,  
      ruleFormRef
    }
  },
}
</script>

到此这篇关于Vue3   elementplus 表单验证 上传图片  防止表单重复提交的文章就介绍到这了,更多相关Vue3  elementplus表单验证内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Vue3 + elementplus实现表单验证+上传图片+ 防止表单重复提交功能的更多相关文章

  1. HTML5新增form控件和表单属性实例代码详解

    这篇文章主要介绍了HTML5新增form控件和表单属性实例代码详解,需要的朋友可以参考下

  2. wordpress添加Html5的表单验证required方法小结

    这篇文章主要介绍了wordpress添加Html5的表单验证required方法小结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. HTML5表单验证特性(知识点小结)

    这篇文章主要介绍了HTML5表单验证特性的一些知识点,本文通过实例代码截图的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. android – 有没有办法阻止Mobile Safari在HTML表单的数字字段中插入逗号?

    我有一个网站,其中包含一个表单,允许用户输入信用卡详细信息.卡号,发行号,CVC号和他们希望存入的金额的字段使用HTML形式的输入框,类型为“数字”.iOS5附带的更新的MobileSafari会自动在“数字”输入字段中将逗号插入数字中.这不仅在CC编号中看起来很愚蠢,而且会破坏我的验证.有办法阻止这个吗?

  5. vue3获取当前路由地址

    本文详细讲解了vue3获取当前路由地址的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. 十分钟带你快速上手Vue3过渡动画

    在开发中我们想要给一个组件的显示和消失添加某种过渡动画,可以很好的增加用户体验,下面这篇文章主要给大家介绍了关于如何快速上手Vue3过渡动画的相关资料,需要的朋友可以参考下

  7. jquery validate表单验证的基本用法入门

    这篇文章主要为大家介绍了jquery validate表单验证的基本用法入门,jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求,感兴趣的小伙伴们可以参考一下

  8. 用vue3封装一个符合思维且简单实用的弹出层

    最近新项目中需要一个弹窗组件,所以我就做了一个,下面这篇文章主要给大家介绍了关于如何利用vue3封装一个符合思维且简单实用的弹出层,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  9. jQuery插件Validation表单验证详解

    这篇文章主要为大家详细介绍了jQuery插件Validation表单验证的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. 使用Vite+Vue3+Vant全家桶快速构建项目步骤详解

    这篇文章主要为大家介绍了使用Vite+Vue3+Vant全家桶快速构建项目步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部