elementUI 非表单格式的校验

news2024/11/26 1:58:46

 在普通表单中对输入框、选择框都有校验案例。

但是在自定义非空中如何进行校验官网并没有说明

关键代码 clearValidate 方法清除校验

 this.$refs.formValue.clearValidate('signinimg')

使用案例

<template>
    <div class="stylebg">
      <Tabs icons="el-icon-shopping-bag-2" :arrs="tabs" />
     
     
      <!--表格  -->
      <div style="margin-top: 20px">
        <el-form ref="formValue"  label-width="120px" :rules="rules" :model="formValue">
            <el-form-item label="标题" prop="title">
              <el-input v-model="formValue.title" placeholder="请输入标题"></el-input>
            </el-form-item>
             
            
            <el-form-item label="单选图">
              <div class="imagelist">
                  <div class="imagelist imgbox" @click="uploadimg('img','1')" v-if="formValue.img">
                      <el-image class="img" :src="formValue.img" fit="cover" ></el-image>
                  </div>  
                  <div  style="border: 1px dashed #d9d9d9;" class="avatar-uploader"   @click="uploadimg('img','1')" v-else>
                      <i class="el-icon-plus" style="width: 100px;height: 100px;display: flex;align-items: center;justify-content: center;"></i>
                </div>
              </div>
            </el-form-item>
            <el-form-item label="多选图">
              <div class="imagelist">
                  <div v-for="(item, i) in formValue.imgs" :key="i" class="imagelist imgbox">
                      <el-image class="img" :src="item" fit="cover" ></el-image>
                      <img src="@/assets/close.png" class="close" @click="handleRemove(i)"/>
                  </div>  
                  <div  style="border: 1px dashed #d9d9d9;" class="avatar-uploader"   @click="uploadimg('imgs','2')">
                      <i class="el-icon-plus" style="width: 100px;height: 100px;display: flex;align-items: center;justify-content: center;"></i>
                </div>
              </div>
            </el-form-item>
            <el-form-item label="电子签名" prop="signinimg">
              <div  @click="signinVisible=true" style="width: 200px;background-color: #d9d9d9;">
                <el-image :src="formValue.signinimg" style="width: 200px;height: 100px;display: flex;align-items: center;justify-content: center;color: #999;">
                  <div slot="error" > 点击签名 </div>
                </el-image>
              </div>
            </el-form-item>
            <el-form-item label="">
              <el-button type="primary" size="small"  @click="upform">确定</el-button>
              <el-button type="primary" size="small"  @click.native="back">返回</el-button>
            </el-form-item>
        </el-form>
        
       
      </div>
      <el-dialog title="选择图片" :visible.sync="dialogVisible" width="900px">
        <uploadDialog  v-if="dialogVisible" @getPic="getPic" :chosetype="picChoseType"></uploadDialog>
      </el-dialog>

      <el-dialog title="电子签名" :visible.sync="signinVisible" width="700px">
       
          <signinDia @setsignin="setsignin"></signinDia>
        
      </el-dialog>


    </div>
  </template>
  
  <script>
 import wueditor from '@/components/wueditor.vue'; // ES6 Module
 import {addcaseAPI,getcaseinfoAPI,updatecaseAPI} from "@/api/article"
 import uploadDialog from "@/components/uploadDialog.vue"
 import signinDia from "@/components/signinDia.vue"
  export default {
    components: {
      wueditor,uploadDialog,signinDia
    },
    data() {
      return {
        formValue:{
          img:"",
          imgs:[],
          status:0
        },
       
        headers:{},
        tabs: ["轮播图管理", "添加轮播图"],
        dynamicTags: [],
        dialogVisible: false,
        signinVisible: false,
      
        inputValue: '',
       

        picTit:"",
        picChoseType:"1",
        rules:{
          title: [ { required: true, message: '名称不能为空', change: 'blur', }],
          signinimg: [ { required: true, message: '电子签名不能为空'  }],
        }
      };
    },
    created() {
      this.headers={
        Authorization:"Bearer " +localStorage.getItem('token')
      }
      this.getinfo()
      
    },
    methods: {
      upform(){
        this.$refs.formValue.validate((valid) => {
          if (valid) {
            alert("success")
          }else{
            if(this.formValue.signinimg) this.$refs.formValue.clearValidate('signinimg')
          }
        })
       
        // if (this.$route.query.id) {
        //   updatecaseAPI(this.formValue).then(res=>{
        //     this.$message.success("成功")
        //     this.$router.back()
        //   })    
        //   return
        // }
        // addcaseAPI(this.formValue).then(res=>{
        //   this.$message.success("成功")
        //   this.$router.back()
        // })    
         
      },
      setsignin(img){
        this.formValue.signinimg=img
        this.signinVisible=false
        this.$refs.formValue.clearValidate('signinimg')
      },
      uploadimg(picTit,picChoseType){
        this.dialogVisible=true
        this.picTit=picTit
        this.picChoseType=picChoseType
      },
      getPic(images){
        console.log(images)
        switch(this.picTit){
          case "img":
            this.formValue.img=images.url
          break
          case "imgs":
            var list=this.formValue.imgs

            this.formValue.imgs=list.concat(images.map(item=> item.url))
          break
        }
        this.dialogVisible=false
      },
      handleRemove(i) {
          this.formValue.imgs.splice(i,1) 
      },










      handleClose(tag) {
        this.dynamicTags.splice(this.dynamicTags.indexOf(tag), 1);
      },

      showInput() {
        this.inputVisible = true;
        this.$nextTick(_ => {
          this.$refs.saveTagInput.$refs.input.focus();
        });
      },

      handleInputConfirm() {
        let inputValue = this.inputValue;
        if (inputValue) {
          this.dynamicTags.push(inputValue);
        }
        this.inputVisible = false;
        this.inputValue = '';
      },
      getinfo(){
        var id=this.$route.query.id
        if (id) {
          getcaseinfoAPI({id}).then(res=>{
            this.formValue=res
            
          })
        }
        
      },
      handleAvatarSuccess2(res){
        this.formValue.img = res.data  
        console.log(res.data  )
      },
   
      back(){
        this.$router.back()
      },
    
  }
  };
  </script>
  
  <style  lang="less">
  .el-tag + .el-tag {
    margin-left: 10px;
  }
  .button-new-tag {
    margin-left: 10px;
    height: 32px;
    line-height: 30px;
    padding-top: 0;
    padding-bottom: 0;
  }
  .input-new-tag {
    width: 90px;
    margin-left: 10px;
    vertical-align: bottom;
  }
  .form {
    margin: 15px 0;
  }
  .page {
    background-color: #fff;
    padding: 10px;
    .el-pagination .btn-next,
    .el-pagination .btn-prev {
      background-color: #ffffff !important;
    }
  }
  .imagelist{
  display: flex;
  align-items: center;
  .imgbox{    
    border: 1px solid #d9d9d9;
    position: relative;
    margin-right: 20px;
    .img{
      width: 100px;
      height: 100px;
      border-radius: 6px;
    }
    .close{
      width: 20px;
      height: 20px;
      position: absolute;
      top: -10px;
      right: -10px;
      cursor: pointer;
    }
  }
}
  </style>
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[QT编程系列-6]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义菜单栏

目录 3. QT窗体设计 3.1 自定义菜单 3.1.1 设计目标​编辑 3.1.2 创建过程​编辑 3. QT窗体设计 3.1 自定义菜单 3.1.1 设计目标 3.1.2 创建过程 在Qt中&#xff0c;Windows窗口和Widget窗口是两种不同的窗口类型&#xff0c;它们在创建方式、功能和用途上有所区别。 创建…

【React】- 组件生命周期连续渲染两次问题

最近在整理生命周期相关的知识内容&#xff0c;然后发现一个奇怪的现象&#xff0c;即组件的生命周期会运行2次&#xff01;经过确认不是代码问题&#xff0c;于是开始找度娘&#xff0c;终于找到其原因-React中的严格模式&#xff0c;在这里记录一下 一、问题重现 如图所示&a…

速通matplotlib库

速通matplotlib库 前言 ​ 最近在复习之前学习过的知识点&#xff0c;因此想到把学过的总结一下&#xff0c;方便后面再次复习&#xff0c;所以有了这个系列。 说明 ​ 由于标题写的是“速通”&#xff0c;因此我的想法是可以让大家看完这篇文章&#xff0c;可以上手matplotlib…

WebSocket从入门到精通

WebSocket 是什么&#xff1f; WebSocket是HTML5规范提出的一种协议&#xff1b;目前除了IE浏览器&#xff0c;其他浏览器都基本支持。它是一种协议&#xff0c;万变不离其宗&#xff0c;也是基于TCP协议的&#xff0c;和HTTP协议是并存的两种协议。HTML5 Web Sockets规范定义了…

快速排序算法解析

快速排序算法解析 快速排序法 快速排序是一种经典的分治算法&#xff0c;它采用递归的方式将待排序数组分割成较小的子数组&#xff0c;然后通过基准元素的选择和元素的交换来达到排序的目的。 快速排序的核心思想是通过选取基准元素&#xff0c;并将其他元素与基准元素进行比…

如何在工作中保持稳定的情绪? – 个人看法和建议

文章目录 每日一句正能量前言情绪波动的原因建议情绪调节技巧和策略身处逆境&#xff0c;如何治愈自己 后记 每日一句正能量 所谓的快乐&#xff0c;是指身体的无痛苦和灵魂的无纷扰。——伊壁鸠鲁 前言 在工作中保持稳定的情绪对于每一个职场人来说都是非常重要的。随着工作压…

什么是vlan为什么要划分vlan

首先了解交换机的数据的转发方式。&#xff0c;有两种情况会使用广播方式进行数据分发&#xff0c;第一种就是目的地址是全F的&#xff08;FF-FF-FF-FF-FF-FF&#xff09;&#xff0c;第二种是位置的单播帧&#xff0c;这样的情况下会带来什么杨的问题呢。 场景引入&#xff1…

Vue2 使用vcolorpicker报错问题解决

1、安装步骤省略 2、全局引入步骤省略 3、引入后注册组件会报如下错误 Failed to mount component: template or render function not defined. 按照文档给的例子直接这样写 不用注册组件就不报错了~

菜鸡shader:L10 帧序列动画和极坐标的使用

文章目录 帧序列动画代码最后效果 极坐标代码最后效果 顶点色 这次笔记就直接放最后的效果了&#xff0c;因为课程上老师也没有给代码图片或是什么技巧说明。 下图左边是帧序列动画(鬼火)&#xff0c;右边是极坐标。 帧序列动画 帧序列的原理是对一张有规律行列排序的序列帧…

35. 反转链表

目录 链接&#xff1a; 题目&#xff1a; 思路&#xff1a; 代码&#xff1a; 图片&#xff1a; 链接&#xff1a; 原题链接 题目&#xff1a; 定义一个函数&#xff0c;输入一个链表的头结点&#xff0c;反转该链表并输出反转后链表的头结点。 思考题&#xff1a; 请同时…

逻辑(css)-背景网格制作(linear-gradient)

目录 linear-gradient需求实现 linear-gradient 语法&#xff1a;linear-gradient([direction], color-stop1, color-stop2, ...) 第一个参数为(可选)方向参数&#xff0c;可以是度数也可以是方位名词,方向与读书的关系如下&#xff1a; 角度方位文字说明示例0degto top从下…

centos7 环境下部署 nacos单机模式

1、官网下载 nacos 官网地址&#xff1a;home 去github上下载nacos-server。我下载的是 nacos-server-1.4.1.tar.gz 2、安装 nacos 下载完成后&#xff0c;将安装包上传到 centos 创建 nacos 目录&#xff08;安装位置任意&#xff09; mkdir -p /usr/local/nacos解压 nac…

springboot html乱码

一、问题重现 二、代码展示 代码的编码都是正常的 修改了File Encodings配置项&#xff0c;结果不管用 三、终极解决方案 终于解决

MATLAB 基于CPD的点云配准 (24)

MATLAB 基于CPD的点云配准 (24) 一、算法简介二、具体使用1.代码(注释详细)2.函数介绍3.使用技巧4.重复叠加配准效果如何一、算法简介 MATLAB 中包含了一种基于CPD的点云配准方法,这里对其进行使用,查看其配准效果,结果来看如上图所示,还是可用的。 二、具体使用 1.代…

模板类和友元

模板类和友元 非模板友元约束模板友元 非模板友元 友元函数不是模板函数&#xff0c;而是利用模板类参数生成的函数&#xff0c;只能在类内实现。 友元函数访问类的私有变量的方法&#xff1a; 将模板类的引用传递给友元函数&#xff1a; 测试调用&#xff1a; 对于有多个…

Android oom_adj 更新原理(二)

源码基于&#xff1a;Android R 接上一篇&#xff1a;Android oom_adj 更新原理(一) 12. computeOomAdjLocked() frameworks/base/services/core/java/com/android/server/am/OomAdjuster.javaprivate final boolean computeOomAdjLocked(ProcessRecord app, int cachedAdj,Pr…

深入解析Android Lifecycle;从基本使用到源码实现,全面掌握生命周期管理

Lifecycle 是 Android Jetpack 中的一个组件&#xff0c;用于管理 Android 应用组件&#xff08;如 Activity 和 Fragment&#xff09;的生命周期。通过使用 Lifecycle&#xff0c;开发者可以更容易地管理组件的生命周期并执行相关的操作。 Lifecycle 提供了一组生命周期事件&…

关于torch.load()更改了cuda位置还是cuda内存不够的问题

关于torch.load()变了cuda位置还是cuda内存不够的问题 问题背景&#xff1a;在一次任务中&#xff0c;由于需要使用cuda进行代码运行&#xff0c;但是分明修改了cuda到一个空闲的卡位置&#xff0c;但是依然抱错cuda out of memory的问题 在任务中&#xff0c;最开始原始代码是…

Node+mysql-注册和登录账号实现(原生)

1.创建数据表 说明&#xff1a;创建id&#xff0c;username,password字段&#xff0c;并设置了类型。 2.导入mysql库 npm i mysql2.18.1 3.创建了db文件夹 说明&#xff1a;创建mysql数据池 // 导入mysql包 const mysqlrequire("mysql") // 创建mysql连接池 const…

react-flow实现dag工作流

1. 官方文档 Introduction to React Flow 2.效果 3. 代码 index.jsx import { useState, useCallback, useEffect } from react; import ReactFlow, {Controls,Background,applyNodeChanges,applyEdgeChanges,addEdge,ReactFlowProvider,useReactFlow } from reactflow;…