需求:vue3结合naiveui的表单规则写法(回调)

const rules = {
  roleId: {
    key: "edit",//区别规则
    required: true,
    trigger: ["blur", "input"],
    validator(rule: FormItemRule, value: Number) {
      if (value === null) { return new Error("请选择角色") }
    },
  },
  email: [
    {
      key: "edit",
      required: true,
      trigger: ["blur", "change"],
      message: "请输入邮箱",
    },
    {
      pattern: /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/,
      message: "请输入正确格式的邮箱",
      trigger: ["input", "blur"],
    },
  ],
  phone: {
    key: "edit",
    pattern: /^[1][3456789]\d{9}$/,
    message: "请输入正确格式的手机号",
    trigger: ["input", "blur"],
  },
  password: [
    {
      required: true,
      trigger: ["blur", "input"],
      message: "请输入密码",
    },
    {
      trigger: ["blur", "change"],
      pattern: /^(?=^.*?[a-z])(?=^.*?\d).{6,32}$/,
      message: "请输入6-32位包含字母和数字的密码",
    },
  ],
  passwordDb: [
    {
      required: true,
      trigger: ["blur", "input"],
      message: "请再次输入密码",
    },
    {
      trigger: ["blur", "input"],
      validator(rule: FormItemRule, value: string) {
        if (props.editForm.password !== value) {
          return new Error("两次密码输入不一致")
        }
      },
    },
  ],
}

 

const submit = () => {
//editForm.index 判断是编辑还是新增
  if (editForm.index == -1) {
    editFormRef.value?.validate(async (errors) => {
      if (!errors) {
        message.success("添加成功")
        close()
      }
    })
  } else {
    editFormRef.value?.validate(
      async (errors) => {
        if (!errors) {
          message.success("编辑成功")
          close()
        }
      },
    //根据key可以自动识别需要的表单规则去验证
      (rule) => {
        return rule?.key === "edit"
      }
    )
  }
}

 

posted @ 2022-04-25 16:18  ling'er  阅读(2534)  评论(0)    收藏  举报