Vue Form 自定应校验规则 和Ant Design自带的校验规则

2023-10-26

<!--
 * @Author: dev-tokyo
 * @Date: 2021-10-26 09:53:56
 * @LastEditTime: 2021-11-19 18:20:14
 * @LastEditors: your name
 * @Description: 
 * @FilePath: \today-stock-cms\src\views\goods\addGoods\AddGoods.vue
-->
<template>
  <a-form
    :model="formState"
    :label-col="labelCol"
    :wrapper-col="wrapperCol"
    class="cms-form"
  >
    <a-form-item label="批次号" v-bind="addGoodsInfo.batchNumber">
      <a-input
        v-model:value="formState.batchNumber"
        type="text"
        maxLength="20"
      />
    </a-form-item>
    <a-form-item label="商品标题" v-bind="addGoodsInfo.bidHead">
      <a-input v-model:value="formState.bidHead" />
    </a-form-item>
    <a-form-item label="商品品牌" v-bind="addGoodsInfo.bidBrands">
      <a-input v-model:value="formState.bidBrands" />
    </a-form-item>
    <a-form-item :wrapper-col="{ span: 14, offset: 4 }">
      <a-button type="primary" @click="onSubmit" :loading="loading"
        >提交</a-button
      >
    </a-form-item>
  </a-form>
</template>

<script lang="ts">
import { defineComponent, reactive, ref } from "vue";
import { Form } from "ant-design-vue";
import type { ValidationRule } from "ant-design-vue/lib/form/Form";
type ValidatorFunc = (rule: ValidationRule, value: string) => Promise<void>;

export default defineComponent({
  setup() {
    const useForm = Form.useForm;

    const formState = reactive<FormState>({
      batchNumber: "",
      bidHead: "",
      bidBrands: "",
    });
    const loading = ref<boolean>(false);

    const rejectFunc = (reason: string) => Promise.reject(new Error(reason));
    // 批次号验证
    const regex = /^\d{0,20}$/;
    const validatePhone: ValidatorFunc = (rule, value) => {
      if (value === "") {
        return rejectFunc("请输入正确的批次号!");
      }
      if (regex.test(value)) {
        return Promise.resolve();
      }
      return rejectFunc("请输入正确的批次号!");
    };

    const addGoodsRules = reactive({
      batchNumber: [
        { validator: validatePhone, required: true, trigger: "change" },
      ],
      bidHead: [{ required: true, message: "请输入商品标题!" }],
      bidBrands: [{ required: true, message: "请输入商品品牌!" }],
    });

    const { validate, validateInfos: addGoodsInfo } = useForm(
      formState,
      addGoodsRules
    );

    return {
      labelCol: { style: { width: "150px" } },
      wrapperCol: { span: 14 },
      addGoodsInfo,
      loading,
    };
  },
});
</script>


我用的是 useForm 基本表单的用法

详细的在 Ant Design 官网

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue Form 自定应校验规则 和Ant Design自带的校验规则 的相关文章

随机推荐

  • Linux内核中网络数据包的接收, 涉及到select/poll/epoll

    转自 https blog csdn net dog250 article details 50528280 与网络数据包的发送不同 网络收包是异步的的 因为你不确定谁会在什么时候突然发一个网络包给你 因此这个网络收包逻辑其实包含两件事 1
  • mysql 登录hang_MySQL客户端连接登入hang住原因分析

    作者 八怪 高鹏 中亦科技数据库专家 原文 https www jianshu com p 93b69955344b 一 问题来源 问题来自一位朋友 如下 mysql客户端无法登陆 查看服务器负载没有发现高负载信息 通过pstack查看线程
  • 普通人是否能从ChatGPT中分一杯羹?

    ChatGPT3 0刚刚推出 最开始的时候 人们只是将ChatGPT看作一个很会聊天的机器人 无论问题多么天马行空 它的答案看上去都有理有据 后来 像打开潘多拉魔盒一样 很多人开始拿它编大纲 撰写文案 编代码 创作剧本 写法律文书 还可以出
  • 服务器数据库怎么导入数据库文件路径,服务器数据库导入sql文件路径

    服务器数据库导入sql文件路径 内容精选 换一换 下载MySQL源码包 includes Boost Headers cd home wget https dev mysql com get Downloads MySQL 5 7 mysq
  • 多个线程访问共享对象和数据的方式

    一 如果每个线程执行的代码相同 可以使用同一个Runnable 对象 这个Runnable对象中有那个共享的数据 例如买票系统就可以这样做 代码如下 package com thread class ShareDataTest1 publi
  • 编译器架构的王者LLVM——(9)栈式符号表的构建

    LLVM平台 短短几年间 改变了众多编程语言的走向 也催生了一大批具有特色的编程语言的出现 不愧为编译器架构的王者 也荣获2012年ACM软件系统奖 题记 版权声明 本文为 西风逍遥游 原创文章 转载请注明出处 西风世界 http blog
  • Centos升级openssh的正确方式

    准备工作 升级ssh可能会造成服务器无法连接 如果不能直接操作服务器 请开启telnet或者vnc 查看openssl版本 openssl version 在这里下载1 0 2版本 https www openssl org source
  • Spring的AOP五大通知注解

    通知注解 声明方法 在方法前加入通知注解 指定要拦截的对象信息 注意 代表任意修饰符号 任意值 AOP五大通知注解 Before 前置通知 在方法执行之前执行 After 后置通知 在方法执行之后执行 无论是否发生异常 还不能访问目标方法执
  • C++复合模式:Compound Pattern

    模式通常被一起使用 并被组合在同一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式 以解决一般或重复发生的问题 注 是为了解决一般或重复发生的问题 而不是简单的认为使用了多个模式就是复合模式 绝不要为了使用模式而使用模式 具体问
  • 基于 Flask 的简易 Mock 平台

    https testerhome com topics 14753
  • Linux——md5命令

    文章目录 介绍 选项 使用案例 生成文件md5值 文本模式或二进制模式 md5值重定向 重定向追加 md5校验 实际开发场景 介绍 md5sum命令用于生成和校验文件的md5值 它会逐位对文件的内容进行校验 是文件的内容 与文件名无关 也就
  • KEIL软件中编译时出现的Error L6200E: symbol multiply defined ...的解决方法

    今天在编程的时候遇到了这个问题 在网上查找了好多办法 都没有什么效果通过ctrl f 发现自己并没有重新定义 而且这两个 c文件都是移植且可以用的 然后我就准备一点一点的删mian c中的内容 看看是哪的问题 当我删掉 include lc
  • 前后端时间比较大小

    前端 this createdTime response createdTime 获取到时间的值 const onLineDate 2023 04 11 23 00 00 if moment this createdTime gt mome
  • JAVA整理总结

    文章目录 JavaSE 面向对象的特点是什么 和equals的区别 String str i 与 String str new String i 一样吗 String 类的常用方法都有那些 Integer a 127 与 Integer b
  • 去除json解析后字符串中的双引号

    const jsonString c 1691715434770 e 253402300799000 v admin const parsedObject JSON parse jsonString 去掉双引号 const valueWit
  • 你需要知道面试中的10个JavaScript概念

    翻译原文出处 10 JavaScript concepts you need to know for interviews 之前不是闹得沸沸扬扬的大漠穷秋文章 为什么只会Vue的都是前端小白 甚至大多数回头看了 也就会jQuery和Vue这
  • SpringBoot+Dubbo项目简单搭建实现斐波那契第n项

    这里写目录标题 step1 新建项目 step2 新建需要的包和接口以及实现类 step3 在两个项目的resource下新建配置文件 step4 代码编写 导入依赖 provider consumer 端口冲突更改 step5 运行 st
  • Acwing-4728. 乘方

    虽然AC了 但自己写的代码确实有点丑陋 呜呜呜呜呜 include
  • OpenGL 光源分类 行为理论及实现

    一 光照分类探讨 上篇博客中 实现的镜面反射光 漫反射光探讨的都是简单点光源 不包括衰减 但是并没有考虑到点光源的衰减 接下来将光分为三类 并根据物理抽象出数学模型进行较为真实的光照计算 共性 对于每一种光源都有漫射光和平行光的两种成分 漫
  • Vue Form 自定应校验规则 和Ant Design自带的校验规则