# 表单关联插件

@sula/plugin-form-dependency提供了表单级联控制的能力,支持值、可见性、数据源、是否禁用四种类型级联控制

示例:

dependency: {
  visible: { // 当type字段输入'fruit'或者'vegetables'时,可见 其余不可见
    relates: ['type'],
    inputs: [['fruit', 'vegetables']],
    output: true,
    defaultOutput: false,
  },
  source: { // type字段输入不同字段对应不同数据源
    relates: ['type'],
    cases: [
      { inputs: [['fruit']], output: fruitSource },
      { inputs: [['vegetables']], output: vegetablesSource },
    ],
    defaultOutput: [],
  },
  value: { // type变化时 清空值
    relates: ['type'],
    defaultOutput: '',
  }
}

# API

dependency支持以下四种属性配置:

  • value
  • visible
  • source
  • disabled

每个属性可配置以下api:

# relates

影响表单组件数据源的数组

# inputs

  • 类型: any[][]
  • 默认值: -

relates数组对应的表单值,每个数组中的值与realtes对应

示例:

{
  dependency: {
    visible: {
      relates: [['input1'], ['input2']],
      inputs: [['a1'], ['b1', 'b2']],  // input1输入a1, input2输入b1或b2时 可见
      output: true
      defaultOutput: false,
  }
  }
}

# output

  • 类型: any
  • 默认值: -

匹配到inputs时,输出值

# ignores

  • 类型: any[][]
  • 默认值: -

数组中的每一个数组分别对应relates中需要忽略的值,当匹配忽略时则采用defaultOutput

# defaultOutput

  • 类型: any
  • 默认值: -

匹配ignores或未匹配到inputs时,输出值

# type

  • 类型: string | (ctx,config) => void
  • 默认值: -

自定义关联,自定义插件查看插件规范

示例:

dependency: {
  value: {
    relates: ['input'],
    type: (ctx, config) => {
      const { form } = ctx;
      if (form.getFieldValue('input') === '95') {  // 当input输入95时,output设置为9527
        form.setFieldValue('output', '9527')
      }
    }
  }
}

类方式插件定义:

class DependencyPlugin {
  key = "custom-dependency";

  apply(api) {
    api.dependencyType("custom::dependency", (ctx, config) => {
      const { form } = ctx;
      if (form.getFieldValue('input') === '95') {
        form.setFieldValue('output', '9527')
      }
    });
  }
}

// 插件引入
<Form
  plugins={[new DependencyPlugin()]}
/>

函数方式插件定义:

function dependencyPlugin(api) {
  api.dependencyType("custom::dependency", (ctx, config) => {
    const { form } = ctx;
    if (form.getFieldValue('input') === '95') {
      form.setFieldValue('output', '9527')
    }
  });
}

// 插件引入
<Form
  plugins={[dependencyPlugin]}
/>

# cases

  • 类型: Array
  • 默认值: -

更多的匹配场景,cases中同名字段优先级更高

示例:

dependency: {
  visible: {
    relates: [['input1'], ['input2']],
    cases: [
      {
        inputs: [['a1'], ['a2']],  // input1输入a1 input2输入a2时输出true
        output: true
      },
      {
        inputs: [['b1'], ['a2', 'b2']], // input1输入b1 input2输入a2或b2时输出true
        output: true,
      },
    ],
    defaultOutput: false,
  }
}
Last Updated: 2019/11/26 下午3:49:56