custom-validation.vue 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <template>
  2. <el-form ref="ruleFormRef" :model="ruleForm" status-icon :rules="rules" label-width="120px" class="demo-ruleForm">
  3. <el-form-item label="Password" prop="pass">
  4. <el-input v-model="ruleForm.pass" type="password" autocomplete="off" />
  5. </el-form-item>
  6. <el-form-item label="Confirm" prop="checkPass">
  7. <el-input v-model="ruleForm.checkPass" type="password" autocomplete="off" />
  8. </el-form-item>
  9. <el-form-item label="Age" prop="age">
  10. <el-input v-model.number="ruleForm.age" />
  11. </el-form-item>
  12. <el-form-item>
  13. <el-button type="primary" @click="submitForm(ruleFormRef)">Submit</el-button>
  14. <el-button @click="resetForm(ruleFormRef)">Reset</el-button>
  15. </el-form-item>
  16. </el-form>
  17. </template>
  18. <script lang="ts" setup>
  19. import { reactive, ref } from 'vue'
  20. import type { FormInstance } from 'element-plus'
  21. const ruleFormRef = ref<FormInstance>()
  22. const checkAge = (rule: any, value: any, callback: any) => {
  23. if (!value) {
  24. return callback(new Error('Please input the age'))
  25. }
  26. setTimeout(() => {
  27. if (!Number.isInteger(value)) {
  28. callback(new Error('Please input digits'))
  29. } else {
  30. if (value < 18) {
  31. callback(new Error('Age must be greater than 18'))
  32. } else {
  33. callback()
  34. }
  35. }
  36. }, 1000)
  37. }
  38. const validatePass = (rule: any, value: any, callback: any) => {
  39. if (value === '') {
  40. callback(new Error('Please input the password'))
  41. } else {
  42. if (ruleForm.checkPass !== '') {
  43. if (!ruleFormRef.value) return
  44. ruleFormRef.value.validateField('checkPass', () => null)
  45. }
  46. callback()
  47. }
  48. }
  49. const validatePass2 = (rule: any, value: any, callback: any) => {
  50. if (value === '') {
  51. callback(new Error('Please input the password again'))
  52. } else if (value !== ruleForm.pass) {
  53. callback(new Error("Two inputs don't match!"))
  54. } else {
  55. callback()
  56. }
  57. }
  58. const ruleForm = reactive({
  59. pass: '',
  60. checkPass: '',
  61. age: '',
  62. })
  63. const rules = reactive({
  64. pass: [{ validator: validatePass, trigger: 'blur' }],
  65. checkPass: [{ validator: validatePass2, trigger: 'blur' }],
  66. age: [{ validator: checkAge, trigger: 'blur' }],
  67. })
  68. const submitForm = (formEl: FormInstance | undefined) => {
  69. if (!formEl) return
  70. formEl.validate(valid => {
  71. if (valid) {
  72. console.log('submit!')
  73. } else {
  74. console.log('error submit!')
  75. return false
  76. }
  77. })
  78. }
  79. const resetForm = (formEl: FormInstance | undefined) => {
  80. if (!formEl) return
  81. formEl.resetFields()
  82. }
  83. </script>