vue的ant design多个输入框,输入其中一个输入框自动触发下一个输入框的校验

vue多个输入框,各输入值之间相互影响。

需求描述:

表单含有3个输入框

1)额定电压:必填项,数值,手动录入,最大录入40字,默认单位为V,保留1为小数
2)最大电压:必填项,数值,手动录入,最大录入40字,默认单位为V,数值须大于额定电压数值,保留1为小数
3)最小电压:必填项,数值,手动录入,最大录入40字,默认单位为V,数值须小于额定电压数值,保留1为小数

<template>
   <a-modal
    :title="title"
    :width="800"
    :visible="visible"
    :confirmLoading="confirmLoading"
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭"
    wrapClassName="ant-modal-cust-warp"
    style="top: 5%; height: 85%; overflow-y: hidden"
  >
    <a-spin :spinning="confirmLoading">
      <a-form-model ref="form" v-bind="layout" :model="model" :rules="validatorRules">
        <a-row :gutter="{ xs: 8, sm: 16, md: 24, lg: 32 }">
          <a-col :span="12">
            <a-form-model-item label="额定电压" required prop="ratedVoltage">
              <a-input v-model="model.ratedVoltage" @blur="ratedVoltageInput" suffix="V" :max-length="40" placeholder="请输入" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="最大电压" required prop="maxVoltage">
              <a-input v-model="model.maxVoltage" ref="maxV" :disabled="model.ratedVoltage == null" suffix="V" :max-length="40" placeholder="请先输入额定电压" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="最小电压" required prop="minVoltage">
              <a-input v-model="model.minVoltage" ref="minV" :disabled="model.ratedVoltage == null" suffix="V" :max-length="40" placeholder="请先输入额定电压" />
            </a-form-model-item>
          </a-col>

          <a-col :span="12">
            <a-form-model-item label="最大温度" required prop="maxTemperature">
              <a-input v-model="model.maxTemperature" suffix="℃" :max-length="40" placeholder="请输入" />
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="最小温度" required prop="minTemperature">
              <a-input v-model="model.minTemperature" suffix="℃" :max-length="40" placeholder="请先输入最大温度" />
            </a-form-model-item>
          </a-col>

        </a-row>
      </a-form-model>
    </a-spin>
  </a-modal>
</template>

<script>
import { addApi, editApi } from '@/api/platform/model'
export default {
  name: 'modelAddModal',
  data() {
    return {
      title: '操作',
      visible: false,
      layout: {
        labelCol: { span: 9 },
        wrapperCol: { span: 15 },
      },
      confirmLoading: false,
      model: {},
      validatorRules: {
        
        ratedVoltage: [
          { required: true, message: '请输入额定电压!' },
          { min: 0, max: 40, message: '长度不超过 40 个字符', trigger: 'blur' },
          { validator: this.validateNum }
        ],
        maxVoltage: [
          { required: true, message: '请输入最大电压!' },
          { min: 0, max: 40, message: '长度不超过 40 个字符', trigger: 'blur' },
          { validator: this.validateMaxV }
        ],
        minVoltage: [
          { required: true, message: '请输入最小电压!' },
          { min: 0, max: 40, message: '长度不超过 40 个字符', trigger: 'blur' },
          { validator: this.validateMinV }
        ],
        
        maxTemperature: [
          { required: true, message: '请输入最大温度!' }, 
          { min: 0, max: 40, message: '长度不超过 40 个字符', trigger: 'blur' },
          { validator: this.validateMaxT }
        ],
        minTemperature: [
          { required: true, message: '请输入最小温度!' }, 
          { min: 0, max: 40, message: '长度不超过 40 个字符', trigger: 'blur' },
          { validator: this.validateMinT }
        ],
      },
    }
  },
  created() {
    //备份model原始值
    this.modelDefault = JSON.parse(JSON.stringify(this.model))
  },
  methods: {
    edit(record, type) {
      // console.log(record, this.modelDefault)
      this.model = Object.assign({}, record)
      this.visible = true
    },
    close() {
      this.$refs.form.clearValidate()
      this.visible = false
    },
    handleOk() {
      const that = this
      // 触发表单验证
      this.$refs.form.validate((valid) => {
        if (valid) {
          that.confirmLoading = true
          let obj
          if (!this.model.modelId) {
            obj = addApi(this.model)
          } else {
            obj = editApi(this.model)
          }
          obj
            .then((res) => {
              if (res.success) {
                that.$message.success(res.message)
                that.$emit('ok')
              } else {
                that.$message.warning(res.message)
              }
            })
            .finally(() => {
              that.confirmLoading = false
              that.close()
            })
        } else {
          return false
        }
      })
    },
    handleCancel() {
      this.close()
    },
    
    // 如果修改额定电压的值,则清空最大电压和最小电压
    ratedVoltageInput(e) {
      console.log(e)

      let val = e.target._value
      if(val  < this.model.maxVoltage) {
        this.$refs['form'].clearValidate(['maxVoltage'])
      } else if (val  = this.model.maxVoltage || val  > this.model.maxVoltage) {
        // 聚焦到指定输入框,触发校验
        this.$refs.maxV.focus();
      }
      if(val  > this.model.minVoltage) {
        this.$refs['form'].clearValidate(['minVoltage'])
      } else if (val  = this.model.maxVoltage || val  > this.model.maxVoltage) {
        // 聚焦到指定输入框,触发校验
        this.$refs.minV.focus();
      }
      
      // this.$set(this.model, 'maxVoltage', undefined)
      // this.$set(this.model, 'minVoltage', undefined)
    },
    // 表单校验函数--start
    // 只能输入整数
    validateInt(rule, value, callback) {
      if (new RegExp(/^\d+$/).test(value)) {
        callback()
      } else {
        callback('请输入整数!')
      }
    },
    // 可以输入数字和小数
    validateNum(rule, value, callback) {
      const number = Number(value); // 将输入转换为数字
      if (!Number.isNaN(number)) { // 检查是否为非数字
        callback()
      } else {
        callback('请输入数值!')
      }
    },
    // 最大电压 小于 额定电压数值
    validateMaxV(rule, value, callback) {
      const number = Number(value); // 将输入转换为数字
      if (!Number.isNaN(number)) { // 检查是否为非数字
        if(Number(this.model.ratedVoltage)) {
          if(number > this.model.ratedVoltage) {
            callback()
          } else {
            callback('最大电压 须大于 额定电压数值!')
          }
        } else {
          callback()
        }
      } else {
        callback('请输入数值!')
      }
    },
    // 最小电压 大于 额定电压数值
    validateMinV(rule, value, callback) {
      const number = Number(value); // 将输入转换为数字
      if (!Number.isNaN(number)) { // 检查是否为非数字
        if(Number(this.model.ratedVoltage)) {
          if(number < this.model.ratedVoltage) {
            callback()
          } else {
            callback('最小电压 须小于 额定电压数值!')
          } 
        } else {
          callback()
        }
      } else {
        callback('请输入整数!')
      }
    },
    // 最大温度 大于 最小温度数值
    validateMaxT(rule, value, callback) {
      const number = Number(value); // 将输入转换为数字
      if (new RegExp(/^\d+$/).test(value)) {
        if(Number(this.model.minTemperature)) {
          if(number > this.model.minTemperature) {
            callback()
          } else {
            callback('最大温度 须大于 最小温度数值!')
          }
        } else {
          callback()
        }
      } else {
        callback('请输入整数!')
      }
    },
    // 最小温度 小于 最大温度数值
    validateMinT(rule, value, callback) {
      const number = Number(value); // 将输入转换为数字
      if (new RegExp(/^\d+$/).test(value)) {
        if(Number(this.model.maxTemperature)) {
          if(number < this.model.maxTemperature) {
            callback()
          } else {
            callback('最小温度 须小于 最大温度数值!')
          }
        } else {
          callback()
        }
      } else {
        callback('请输入数值!')
      }
    },
    // 表单校验函数--end
  },
}
</script>

<style scoped>
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

10倍速开发开关电源:PSIM DLL集成指南与如何单步调试你的代码

文末有彩蛋哦。 去年提到要写一篇如何在利用PSIM Visual Studio进行仿真联调&#xff0c;加速实际嵌入式端C代码的开发&#xff0c;但因为懒一直没兑现。 本期简单总结下实现的方法。 特别声明&#xff1a;本文约一半以上内容有kimi/文心一言提问式生成&#xff0c;仅用于技…

mysql表级锁(表锁/元数据锁/意向锁)

文章目录 表级锁的分类1、表锁(分类)1.表共享读锁&#xff08;read lock&#xff09;2.表独占写锁&#xff08;write lock&#xff09;3.语法&#xff1a; 2、元数据锁&#xff08;meta data lock &#xff09;3、意向锁1.意向共享锁&#xff08;IS&#xff09;&#xff1a;由语…

最小相位系统

最小相位系统 1、传递函数 一个线性系统的响应。 比如一个RC低通滤波器&#xff1a; 交流分量在电容的充放电中被滤除掉&#xff0c;通过设置电容器的电容值&#xff0c;以及电阻值&#xff0c;能够控制这种滤除能力&#xff0c;这个参数为RC。 电容的电抗为 1 / j w C 1/j…

【el-tooltips改造】Vue实现文本溢出才显示el-tooltip,否则不显示el-tooltips

实现原理&#xff1a; 使用disabled属性控制el-tooltip的content显示与隐藏&#xff1b; 目标&#xff1a; 1行省略、多行省略、可缩放页面内的文本省略都有效。 实现方式&#xff1a; 1、自定义全局指令&#xff0c;tooltipAutoShow.js代码如下&#xff08;参考的el-table中的…

TH方程学习 (7)

一、内容介绍 TH存在广泛应用&#xff0c;在下面案例中&#xff0c;将介绍几种相对运动模型&#xff0c;斜滑接近模型&#xff0c;本节学习斜滑接近制导方法能够对接近时间、接近方向以及自主接近过程的相对速度进行控制。施加脉冲时刻追踪器的位置连线可构成一条直线&#xf…

http接口上传文件响应413:413 Request Entity Too Large

目录 一、场景简介二、异常展示三、原因四、解决 一、场景简介 1、服务端有经过nginx代理 2、上传文件超过5M时&#xff0c;响应码为413 3、上传文件小于5M时&#xff0c;上传正常 二、异常展示 三、原因 nginx限制了上传数据的大小 四、解决 扩大nginx上传数据的大小 步…

QT4-QT5升级(3)GBK-UTF-8-乱码“常量中有换行符”

乱码有两种&#xff1a;我命名为汉字乱码菱形乱码如下&#xff1a; 1.文件编码为&#xff1a; GB2312 打开编码&#xff1a; GB2312 编译后&#xff1a; QString 部分字符串 常量中有换行符 char * …

MathType7.8学术必备神器 科研利器 教学好帮手

【MathType 7.8】数学公式编辑器&#xff0c;让学术和专业文档制作更高效、更准确&#xff01;&#x1f9ee;✨ 作为一名软件技术专家&#xff0c;我一直在寻找一款能够轻松创建复杂数学公式的工具。幸运的是&#xff0c;我终于找到了MathType 7.8&#xff0c;这款强大的数学公…

[每周一更]-(第100期):介绍 goctl自动生成代码

​ 在自己组件库中&#xff0c;由于部分设计会存在重复引用各个模板的文件&#xff0c;并且基础架构中需要基础模块内容&#xff0c;就想到自动生成代码模板&#xff0c;刚好之前有使用过goctl&#xff0c;以下就简单描述下gozero中goctl场景和逻辑&#xff0c;后续自己借鉴将自…

Aptos Builder Jam 亚洲首站|见证 Aptos 公链 2024 年新突破

4 月下旬的「TinTin DESTINATION MOON」杭州站活动让我们构建下一个 Web3 巅峰的项目生态行动与未来战略。时隔三个月&#xff0c;「TinTin DESTINATION MOON」Aptos 线下活动将再次来到杭州&#xff0c;为 Aptos Builder Jam 亚洲首站火热造势&#xff0c;7 月 6 日诚邀 Web3 …

vuInhub靶场实战系列--Kioptrix Level #1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶机信息1.2 靶场配置 二、信息收集2.1 主机发现2.2 端口扫描2.2.1 masscan2.2.2 nmap 2.3 指纹识别2.4 目录扫描2.4.1 dirb…

AI图书推荐:这就是ChatGPT

这本书《这就是ChatGPT》&#xff08;What Is ChatGPT Doing ... and Why Does It Work &#xff09;由Stephen Wolfram撰写 全书内容概要如下&#xff1a; **引言与预备知识** - 作者首先表达了对ChatGPT技术突破的兴奋之情&#xff0c;指出这不仅是技术的故事&#xff0c;也是…

第六篇红队笔记-百靶精讲之pWnOS2.0

ip修改 主机发现 nmap端口扫描 Web渗透 文件上传漏洞利用 获得初级系统shell 敏感文件获取 MySQL数据获取 Root和总结 直接尝试mysql账号

深度图的方法实现加雾,Synscapes数据集以及D455相机拍摄为例

前言 在次之前&#xff0c;我们已经做了图像加雾的一些研究&#xff0c;这里我们将从深度图的方法实现加雾展开细讲 图像加雾算法的研究与应用_图像加雾 算法-CSDN博客 接下来将要介绍如何使用深度图像生成雾效图像的方法。利用Synscapes数据集&#xff0c;通过读取EXR格式的…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

Android 11 低电量自动关机失效

Android 11 低电量自动关机 概述 安卓系统设计了低电关机功能&#xff0c;旨在当手机电池电量过低时自动关机&#xff0c;以保护手机硬件和数据安全。该功能由以下几个部分组成&#xff1a; 电池电量监测: 安卓系统通过 BatteryService 组件持续监测电池电量。BatteryService…

关于修改Python中pip默认安装路径的终极方法

别想了&#xff0c;终极方法就是手动复制&#xff0c;不过我可以给你参考一下手动复制的方法 关于手动移动pip安装包的方法 别想了&#xff0c;终极方法就是手动复制&#xff0c;不过我可以给你参考一下手动复制的方法一、首先确认一下pip默认安装路径二、再确认一下需要移动到…

王道408数据结构CH3_栈、队列

概述 3.栈、队列和数组 3.1 栈 3.1.1 基本操作 3.1.2 顺序栈 #define Maxsize 50typedef struct{ElemType data[Maxsize];int top; }SqStack;3.1.3 链式栈 typedef struct LinkNode{ElemType data;struct LinkNode *next; }*LiStack;3.2 队列 3.2.1 基本操作 3.2.2 顺序存储…

java异常处理知识点总结

一.前提知识 首先当运行出错的时候&#xff0c;有两种情况&#xff0c;一种叫做“错误”&#xff0c;另一种叫做“异常”。错误指的是运行过程中遇到了硬件或操作系统出错&#xff0c;这种情况程序员是没办法处理的&#xff0c;因为这是硬件和系统的问题&#xff0c;不能靠代码…

linux中dd命令以及如何测试读写速度

dd命令详解 dd命令是一个在Unix和类Unix系统中非常常用的命令行工具&#xff0c;它主要用于复制文件和转换文件数据。下面我会详细介绍一些dd命令的常见用法和功能&#xff1a; 基本语法 dd命令的基本语法如下&#xff1a; bash Copy Code dd [option]...主要选项和参数 if…