属性扩展
什么是json schema?
Json Schema定义了一套词汇和规则,这套词汇和规则用来定义Json元数据,且元数据也是通过Json数据形式表达的。Json元数据定义了Json数据需要满足的规范,规范包括成员、结构、类型、约束等
相关文档链接: JSON Schema官方文档
根据数据结构生成简单schema工具: 在线JSON转Schema工具
schema的扩展配置
const CustomField = props => {
const { input:{ onChange, value } } = props
retun '我是一个自定义表单项'
}
const mydriver = {
type: 'object',
properties: {
ip: {
type: 'string',
format: 'ipv4',
title: '设备IP',
fieldType: 'ip',
field:{
effect: ({ value }, form) => {
setTimeout(() => {
form.setFieldData('port', { display: value === '1' })
})
}
}
},
port: {
type: 'number',
title: '端口',
},
unit: {
type: 'number',
title: '站号',
field:{ component: CustomField },
description:'生产站的序号',
field:{
validate:(value) => {
if (value < 0 || value > 1) {
return '超出取值范围'
} else {
return ''
}
}
}
},
},
formEffect: form =>{
form.useField('port', state => {
let value = state.value
//port控制unit站号显示和隐藏
if (value) {
form.setFieldData('unit', { display: true })
} else {
form.setFieldData('unit', { display: false })
}
})
},
required:['ip'],
form:['ip','port'],
}
属性 | 说明 |
---|---|
required | 必填项 |
form | 显示的表单项 |
fieldType | 使用内置自定义表单项组件 |
formEffect | 表单钩子 |
description | 字段说明 |
内置的表单项组件可以通过fieldType指定
组件 | 配置 | 其他配置 | |
---|---|---|
文字输入框 | type: 'string', title: '文字' | |
文字输入框(高级) | type: 'string', title: '文字', fieldType: 'input' | textType: 'input'(单行), 'textArea'(多行) textContent: 'text', 'password', 'email', 'tel', 'id' |
文字输入框(带ip校验) | type: 'string', title: 'IP', fieldType: 'ip' | |
数字输入框 | type: 'number', title: '数字' | |
数字输入框(高级) | type: 'number', title: '数字', fieldType:'inputNumber' | max: 100, min:10, unit: '天', (单位) dbType: 'Int32', 'Int64', 'Double' decimal: 3 (小数位数) |
布尔输入 | type: 'boolean', title: '布尔值' | |
选择器 | type: 'string', title: '选择器', enum: ['1', '2', '3'], enum_title:['A','B','C'] | |
时间选择器 | type: 'string', title: '时间', fieldType: 'datePicker' | format: 'date'(年月日), 'datetime'(年月日-时分秒) |
field
参数 | 描述 | 类型 | |
---|---|---|
suffix | 显示单位 | string |
attrs | 当type为’string‘时示例 attrs:{ type: 'number', //输入框的类型 type: 'textarea' //文本地域 placeholder:'请输入' // 默认提示 style: { width: '120px' } ...更多属性请参考ant desig组件Input | |
} | object | |
validate | 校验规则可以是正则,return 出的就是错误信息 默认返回null | function |
effect | effect表单联动与formEffect类似,effect能直接取到当前输入的值 例如 effect: ({ value }, form) => { setTimeout(() => { form.setFieldData('unid', { display: value === '1' }) }) } | function |
component | 自定义输入组件, 在组件本身内props里可取到字段所有信息 (组件输入值必须与字段的type对应) | ReactNode |
formEffect
该属性为函数,传入form参数,常用来处理表单联动,schema 加载时执行 form参数常用方法
useField
监听表单字段修改const fieldKey = 'name'
form.useField(fieldKey, state => {
console.log('表单字段修改了',state.value)
})setFieldData
设置某字段状态// 隐藏fieldKey
const fieldKey = 'name'
form.setFieldData(fieldKey, { display: false })change
设置某字段值// 修改值
const fieldKey = 'name'
form.change('test', 'abc')getState
获取整个表单状态const formState = form.getState()
getFieldState
获取某字段值const fieldKey = 'name'
const formFieldState = form.getFieldState(fieldKey)