其他联动
queryConfig 设置选项
每个表单 ui 配置都有一个queryConfig
用来配置接口,可以将接口某个字段映射到 ui 配置中。
type QueryConfig =
| {
//刷新请求id (id和上一次不一致,会重新请求接口)
refreshId?: number
//请求url
url: string
//请求参数
params: Array<{ key: string; value: string }>
//请求方法
method: 'GET' | 'POST'
//需要获取接口数据返回值的路径
dataPath: string
//使用接口请求设置数据
optionsType: '0'
//映射到ui中的路径
setPath: string
}
| {
//手动设置数据
optionsType: '1'
//映射到ui中的路径
setPath: string
//手动设置的数据
options: Array<{ label: string; value: string }>
}
使用场景:
- 单选框选项由后端下发
- 多选框选项由后端下发
- 选择框选项由后端下发
- ...
请求相关
Drip form
内部使用 原生 fetch Api 实现简易的接口请求。如果对浏览器兼容、请求库、数据拦截、错误统一提示有要求,可以通过 Drip form
提供的 fetchApi prop 进行定制。
代码示例
- App.tsx
- unitedSchema.ts
import DripForm from '@jdfed/drip-form'
import antd from '@jdfed/drip-form-theme-antd'
import unitedSchema from './unitedSchema'
import '@jdfed/drip-form/dist/index.css'
import '@jdfed/drip-form-theme-antd/dist/index.css'
import 'antd/dist/antd.css'
function App() {
return (
<DripForm
// 表单配置文件
unitedSchema={unitedSchema}
// 导入组件
uiComponents={{ antd }}
// 设置表单值
></DripForm>
)
}
export default App
// 表单配置文件
export default {
type: 'object',
showError: 'change',
theme: 'antd',
schema: [
{
type: 'number',
title: '刷新请求',
ui: {
type: 'number',
theme: 'antd',
},
fieldKey: 'refreshId',
},
{
type: 'string',
title: 'get选择器',
ui: {
type: 'select',
theme: 'antd',
style: {
width: 120,
},
queryConfig: {
optionsType: '0',
url: `${location.origin}/getSelectOptions`,
params: [
{
key: '1',
value: '1',
},
],
},
},
fieldKey: 'select_kps22V',
},
{
type: 'string',
title: 'post选择器',
ui: {
type: 'select',
theme: 'antd',
style: {
width: 120,
},
queryConfig: {
optionsType: '0',
url: `${location.origin}/postSelectOptions`,
method: 'POST',
dataPath: 'data',
},
},
fieldKey: 'select_hyScBs',
},
{
type: ['string', 'number', 'array'],
title: '选择器',
ui: {
type: 'select',
theme: 'antd',
style: {
width: 120,
},
queryConfig: {
//手动设置数据
optionsType: '1',
//数据
options: [
{
label: '1',
value: '1',
},
{
label: '2',
value: '2',
},
],
//数据映射到ui.options
setPath: 'options',
},
},
fieldKey: 'select_RB14Wj',
},
],
}
多表单联动
当一页面存在多个 drip-form 表单时,如何控制多个 drip-form 表单之间的联动?
如上图所示,存在两个 drip-form 构建的表单(表单 1 和表单 2)。当表单 1 的输入是123
的时候,表单 2 的开关按钮会被关闭
多表单联动实现步骤:
通过 control prop 控制表单联动
通过
ref.current.set
和control prop
的配合既可以做到任意drip form
表单之间的联动控制。
代码示例
- App.tsx
- unitedSchema.ts
import { useRef } from 'react';
import DripForm, { DripFormRefType } from '@jdfed/drip-form';
import antd from '@jdfed/drip-form-theme-antd';
import { unitedSchema, unitedSchemaMulti } from './unitedSchema';
import '@jdfed/drip-form/dist/index.css';
import '@jdfed/drip-form-theme-antd/dist/index.css';
import 'antd/dist/antd.css';
function App() {
const ref = useRef<DripFormRefType>();
return (
<>
<DripForm
// 表单配置文件
unitedSchema={unitedSchemaMulti}
// 导入组件
uiComponents={{ antd }}
control={({ formData }) => {
if (formData.name === '123') {
ref?.current?.set('switch', 'data', false);
} else {
ref?.current?.set('switch', 'data', true);
}
}}
></DripForm>
<DripForm
ref={ref}
// 表单配置文件
unitedSchema={unitedSchema}
// 导入组件
uiComponents={{ antd }}
></DripForm>
</>
);
}
export default App;
// 表单配置文件
//表单1的unitedSchema
export const unitedSchemaMulti = {
showError: 'change',
type: 'object',
theme: 'antd',
schema: [
{
fieldKey: 'name',
title: '表单1:输入框',
type: 'string',
transform: ['trim'],
ui: {
type: 'text',
placeholder: '当输入123,表单2开关关闭',
description: {
type: 'icon',
title: '表单1',
trigger: 'hover',
},
},
},
],
};
//表单2的unitedSchema
export const unitedSchema = {
showError: 'change',
type: 'object',
theme: 'antd',
schema: [
{
fieldKey: 'switch',
title: '表单2:开关',
type: 'boolean',
default: true,
ui: {
type: 'switch',
disabled: false,
},
},
],
};
联动可配制化
为了支持在表单设计器中配置生成联动。支持 controlFlow
联动配置协议。
具体介绍查看 水滴表单联动可视化配置的实现
- 配置联动功能还在 alpha 测试中↩