Appearance
低代码项目 JSON Schema 与 ajv、element-plus 表单校验集成
自定义组件如何实现 element-plus 的集成校验
主要是通过 useFormItem
获取到 formItem
对象,然后调用 formItem.validate
方法即可
js
import { useFormItem } from 'element-plus'
const { formItem } = useFormItem()
const handleChange = () => {
formItem.validate('chaneg').catch((err) => {
console.log(err)
})
}
使用 ajv 结合 JSON Schema 对表单提交内容进行校验
ajv 这个库主要是对 JSON Schema 进行校验的(不依赖表单验证就用 ajv)
项目的表单校验
项目采用两种 ajv + element-plus 的结合进行使用。
- ajv:提交按钮时对
pinia
中的渲染数据(blockConfig: [] as BaseBlock[]
)进行校验- 实现:对
blockConfig
中的formData
进行校验,校验不通过,根据渲染物料的id,去找到哪个物料配置不通过,去定位到不通过的表单内容
- 实现:对
- element-plus:表单内容变化时进行校验
- 实现:通过表单每一项的 key 值,去 物料的属性中获取 rules 字段,然后进行校验
对物料组件的 schema 配置新增字段,新增(ajv 校验字段 和 element-plus 表单校验字段)
为什么校验要添加到物料组件上?
便于动态对 form 表单添加校验(可以传入 props 形式)
便于实现每个不同物料组件的不同属性的校验规则
以 image 组件的 src 属性为例:
红色的为 ajv 校验字段,黄色的为 element-plus 表单校验字段
ts
const src = Type.String({
code: 'config-files',
title: '图片',
default: '',
minLength: 1,
errorMessage: {
required: '请上传一个图片'
},
rules: [
{ required: true, min: 1, message: '请上传一个图片', trigger: 'change' }
]
})