vue + element-ui 表单校验封装公用方法(1)

2,185 阅读1分钟

1.新建表单验证方法封装 src/utils/formCheck.js

// 手机号码验证
const validatePhone = (rule, value, callback) => {
  const patter = new RegExp('^1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}$')
  if (!patter.test(value)) {
    return callback(new Error('请输入正确格式的手机号!'))
  } else {
    callback() // 必须有此项回调,否则验证会一直不通过
  }
}
// 邮箱的正则
const validateEmail = (rule, value, callback) => {
  const mailbox = new RegExp('^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$')
  if (!mailbox.test(value)) {
    return callback(new Error('请输入正确格式的邮箱!'))
  } else {
    callback()
  }
}
// 身份证号
const validateIdCardNo = (rule, value, callback) => {
  const mailbox = new RegExp('^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx]$')
  if (!mailbox.test(value)) {
    return callback(new Error('请输入正确格式的身份证号!'))
  } else {
    callback()
  }
}
export default {
  common: {
    // ---------------------公共验证方法
    phone: [{// 手机号
      required: true,
      message: '手机号不能为空'
    }, {
      validator: validatePhone,
      trigger: 'blur'
    }],
    email: [{// 邮箱
        required: true,
        message: '邮箱不能为空'
      },
      {
        validator: validateEmail,
        trigger: 'blur'
      }
    ],
    idCardNo: [{// 身份证号码
        required: true,
        message: '身份证号码不能为空'
      },
      {
        validator: validateIdCardNo,
        trigger: 'blur'
      }
    ]
  },
  handle: {
    // ---------------------处理表单的验证方法
    operResult: [{//处理结果
      required: true,
      message: '请选择处理结果'
    }],
    opinion: [{//处理结果描述
      required: true,
      message: '请填写处理结果描述'
    }]
  },
}

export default内可以分类封装验证,封装不同表单的验证方法

2.全局挂载 main.js

import rules from './utils/formCheck.js'
// 全局方法挂载
Vue.prototype.$rules = rules

3.使用

<el-form
      ref="form"
      :model="form"
      label-width="150px"
      :rules="$rules.handle"
      style="padding:0 50px 0 20px;"
    >
      <div class="wrap">
        <el-form-item label="处理结果" prop="operResult">
          <el-select
            v-model="form.operResult"
            placeholder="请选择处理结果"
            clearable
            size="small"
            style="width:50%"
          >
            <el-option
              v-for="item in handle_result"
              :key="item.dictValue"
              :label="item.dictLabel"
              :value="item.dictValue"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="处理结果描述" prop="opinion">
          <el-input type="textarea" v-model="form.opinion" maxlength="320" show-word-limit></el-input>
        </el-form-item>
      </div>
    </el-form>

单独使用 :rules="$rules.handle.opinion"

<el-form-item label="处理结果描述" prop="opinion" :rules="$rules.handle.opinion">
      <el-input type="textarea" v-model="form.opinion" maxlength="320" show-word-limit></el-input>
 </el-form-item>