vue中view-design的校验及各种坑

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

1、DatePicker日期

javascript 复制代码
      <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 级联选择

javascript 复制代码
        <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进行校验

javascript 复制代码
          <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、身份证号的校验

javascript 复制代码
          <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、手机号的校验

javascript 复制代码
       <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、动态嵌套表单校验

javascript 复制代码
      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>
相关推荐
乘风gg2 小时前
企业级 Prompt 工程实战指南(下):构建可复用 Prompt 架构平台
前端·面试·架构
宇擎智脑科技2 小时前
AntV G6、X6 与 React Flow 深度对比:核心差异与大模型时代的应用场景分析
前端·人工智能·react.js·前端框架
山核桃&17°2 小时前
基于 Vue + Node.js 批处理bat脚本实现多环境一键部署
运维·前端·自动化
AC赳赳老秦2 小时前
云原生AI趋势:DeepSeek与云3.0架构协同,提升AI部署性能与可移植性
大数据·前端·人工智能·算法·云原生·架构·deepseek
程序哥聊面试2 小时前
React + TS 初始化新项目报错解决方法
前端·react.js·npm
codeGoogle2 小时前
2026 年 IM 怎么选?聊聊 4 家主流即时通讯方案的差异
android·前端·后端
C澒2 小时前
从单体到分布式:SLDS 2.0 全球物流履约网络架构演进之路
前端·分布式·架构·系统架构·教育电商·交通物流
We་ct2 小时前
LeetCode 21. 合并两个有序链表:两种经典解法详解
前端·算法·leetcode·链表·typescript
2501_941982052 小时前
Python开发:外部群消息自动回复
java·前端·数据库