vue中view-design的校验及闭坑指南

 更新时间:2026年02月21日 09:05:53   作者:k0933  
文章总结了async-validator文档中校验不通过的原因,主要是由于type类型不匹配,文章详细列举了不同类型数据(如number、array等)的校验方法,并提供了具体的示例,感兴趣的朋友一起看看吧

async-validator文档
有值但校验不通的原因:大概率是type的类型不对 。因为表单校验时,不填type,默认string类型,如果值是number类型,需要在校验中加入 type: ‘number’,如果值是array类型,需要在校验中加入 type: ‘array’,等等

1、DatePicker日期

      <FormItem prop="userWorkDate">
            <DatePicker
              type="date"
              :readonly="!isEditor"
              placeholder="请选择"
              v-model="addlist.userWorkDate"
            ></DatePicker>
          </FormItem>
       userWorkDate: [
          {
            required: true,
            message: '参加工作时间不能为空',
            trigger: 'change',
            type: 'date', // 重点
          },
        ],

1、Cascader 级联选择

        <FormItem prop="userNative">
            <Cascader
              :disabled="!isEditor"
              :data="CascaderData"
              :render-format="format"
              v-model="addlist.userNative"
              @on-change="changeArea"
            ></Cascader>
          </FormItem>
      userNative: [
          {
            required: true,
            type: 'array', // 重点
            message: '籍贯不能为空',
            trigger: 'change',
          },
        ],

3、上传组件upload-使用隐藏的Input进行校验

          <MyEpUploader
            ref="basicInfo"
            :preview-custom="true"
            :target="target"
            @file-success="userHighDegreeAttach"
          />
          //重点--使用隐藏的Input进行校验
          <FormItem prop="userHighDegreeAttach">
            <Input v-show="false" v-model="addlist.userHighDegreeAttach" />
          </FormItem>
         userHighDegreeAttach: [
          {
            required: true,
            trigger: 'change',
            validator: validateUplaod,
          },
        ]
    const validateUplaod = (rule, value, callback) => {
      if (!value) {
        return callback(new Error('附件不能为空'))
      }
      callback()
    }

4、身份证号的校验

          <FormItem prop="userCardNumber">
            <Input
              :readonly="!isEditor"
              v-model="addlist.userCardNumber"
              placeholder="身份证号限制18位,X限制大写"
            />
          </FormItem>
      userCardNumber: [
          { required: true, validator: validateIdCard, trigger: 'blur' },
        ]
      // 身份证号正则校验
    const validateIdCard = (rule, value, callback) => {
      if (!value) {
        this.addlist.userBirth = ''
        return callback(new Error('身份证号不能为空'))
      }
      // 身份证号简单校验:18位,18位最后一位是X
      const idCardReg = /^(\d{17}[\dX])$/
      if (!idCardReg.test(value)) {
        this.addlist.userBirth = ''
        return callback(new Error('请输入有效的身份证号'))
      } else {
        // 提取出生年月日
        const birthStr = value.substr(6, 8) // 19800101
        const year = parseInt(birthStr.substr(0, 4))
        const month = parseInt(birthStr.substr(4, 2))
        const day = parseInt(birthStr.substr(6, 2))
        // 校验年月日
        if (month < 1 || month > 12) {
          this.addlist.userBirth = ''
          return callback(new Error('身份证号中月份无效'))
        }
        // 校验日期
        const date = new Date(year, month - 1, day)
        if (
          date.getFullYear() !== year ||
          date.getMonth() + 1 !== month ||
          date.getDate() !== day
        ) {
          this.addlist.userBirth = ''
          return callback(new Error('身份证号中日期无效'))
        }
      }
      // 验证通过后,尝试解析出生年月
      this.parseBirthFromIdCard(value)
      callback()
    }

5、手机号的校验

       <FormItem prop="userPhone">
            <Input
              :readonly="!isEditor"
              v-model="addlist.userPhone"
              placeholder="请输入手机号"
            />
          </FormItem>
      userPhone: [
          { required: true, validator: validatePhone, trigger: 'blur' },
        ]
       // 手机号正则校验
    const validatePhone = (rule, value, callback) => {
      if (!value) {
        return callback(new Error('手机号不能为空'))
      }
      // 简单的手机号格式校验:11位数字,以1开头
      const phoneReg = /^1[3-9]\d{9}$/
      if (!phoneReg.test(value)) {
        return callback(new Error('请输入有效的手机号'))
      }
      callback()
    }

6、动态嵌套表单校验

      formDynamic: {
        annualAssess: [
          {
            startTime: '',
            result: '',
            status: 1,
          },
        ],
      },
    <Form
      class="form info-form"
      ref="formDynamic"
      :model="formDynamic"
    >
    <FormItem
        class="inner-item"
        :class="{ border: item.status }"
        v-for="(item, index) in formDynamic.annualAssess"
        :key="'annualAssess' + index"
      >
        <Row class="form-btn-list">
          <Button
            type="primary"
            :key="'annualAssessadd.' + index"
            v-if="isEditor && formDynamic.annualAssess.length - 1 === index"
            @click="handleAddResult"
            >新增</Button
          >
          <Button
            v-if="isEditor && formDynamic.annualAssess.length !== 1"
            type="error"
            :key="'annualAssessdelete.' + index"
            @click="handleRemoveResult(index)"
            >删除</Button
          >
        </Row>
        <Row class="border-top">
          <Col class="bg ct border-bot" span="3">年度</Col>
          <Col span="9" class="ct p-5">
            <FormItem
              :prop="'annualAssess.' + index + '.startTime'"
            >
              <DatePicker
                type="year"
                :readonly="!isEditor"
                placeholder="请选择"
                v-model="item.startTime"
              ></DatePicker>
            </FormItem>
          </Col>
          <Col class="bg ct" span="3">考核结果</Col>
          <Col span="9" class="p-5 ct">
            <FormItem
              :prop="'annualAssess.' + index + '.result'"
              :key="'annualAssess.' + index + '.result'"
              :rules="{
                required: true,
                message: '考核结果不能为空',
                trigger: 'change',
              }"
            >
              <Select
                :disabled="!isEditor"
                v-model="item.result"
                placeholder="请选择"
              >
                <Option
                  v-for="(item, index) in cangongkaoheOPtion"
                  :key="index"
                  :value="item.value"
                  >{{ item.name }}</Option
                >
              </Select>
            </FormItem>
          </Col>
        </Row>
      </FormItem>
   </Form>

到此这篇关于vue中view-design的校验及闭坑指南的文章就介绍到这了,更多相关vue  view-design校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue 使用自定义指令实现表单校验的方法

    vue 使用自定义指令实现表单校验的方法

    今天小编就为大家分享一篇vue 使用自定义指令实现表单校验的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vue.js中实现登录控制的方法示例

    vue.js中实现登录控制的方法示例

    这篇文章主要介绍了vue.js中实现登录控制的方法,结合实例形式分析 vue.js操作登陆页面流程控制相关实现技巧,需要的朋友可以参考下
    2018-04-04
  • VUE单页面切换动画代码(全网最好的切换效果)

    VUE单页面切换动画代码(全网最好的切换效果)

    今天小编就为大家分享一篇VUE单页面切换动画代码(全网最好的切换效果),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • vue配置nprogress实现页面顶部进度条

    vue配置nprogress实现页面顶部进度条

    这篇文章主要为大家详细介绍了vue配置nprogress实现页面顶部进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Vue中axios的封装(报错、鉴权、跳转、拦截、提示)

    Vue中axios的封装(报错、鉴权、跳转、拦截、提示)

    这篇文章主要介绍了Vue中axios的封装(报错、鉴权、跳转、拦截、提示),本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Vue2路由跳转传参中文问题处理方案

    Vue2路由跳转传参中文问题处理方案

    在el-table中的记录列表中放置了一个 操作按钮,点这个按钮时可以新增一个tab页签,并将通过路由传参方式将一些信息传递到新打开的tab页签中,但发现传递中文参数时会出现报错,所以本文给大家介绍了Vue2路由跳转传参中文问题处理方案,需要的朋友可以参考下
    2024-05-05
  • VUE使用axios调用后台API接口的方法

    VUE使用axios调用后台API接口的方法

    这篇文章主要介绍了VUE使用axios调用后台API接口的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • 详解如何在Vue3中与后端API进行交互

    详解如何在Vue3中与后端API进行交互

    在现代的 web 应用中,与后端 API 的交互成为了不可或缺的一部分,特别是在 Vue 3 这样的前端框架中,如何高效地进行数据请求,处理响应,本文将带您深入了解在 Vue 3 中如何与后端 API 进行交互,并通过示例代码帮助您快速上手,需要的朋友可以参考下
    2025-01-01
  • Vue + Element-ui的下拉框el-select获取额外参数详解

    Vue + Element-ui的下拉框el-select获取额外参数详解

    这篇文章主要介绍了Vue + Element-ui的下拉框el-select获取额外参数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue实现导出word文档功能实例(含多张图片)

    vue实现导出word文档功能实例(含多张图片)

    项目需要导出word,于是乎又是查阅资料,然后自己写,下面这篇文章主要给大家介绍了关于vue实现导出word文档功能(含多张图片)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09

最新评论