思路

  1. 关联表单填充关联表单主要是通过在关联表单的onchange函数里通过接口查询所选的数据填充到当前表单
  2. 二级数据筛选,多一个下拉单选作为中间组件,在关联表单的onchange函数里搜索符合条件的数据,然后赋值数据给下拉单选,在下拉单选的onchange函数里对另外一个关联表单赋值。

演示场景

一个项目会签多个合同,这里演示:

  1. 选择某个合同,把合同里关联的项目填充到当前表单的关联表单组件
  2. 选择项目后筛选出项目所签的合同

表单结构

  1. 项目(FORM-Y1666L71AA0WEJ5409PDPA9JYK032TZEYF4XKL)
    1. 项目名称:单行文本(textField_kx4fylgi)
  2. 合同(FORM-5L666481WK1WCR6D2USPCB6B3RZ12NHBZF4XKK)
    1. 合同名称:单行文本(textField_kx4fzh5f)
    2. 所属项目:关联表单(associationFormField_kx4fzh5g)
    3. 所属项目名称:单行文本(textField_kx4lrrkd)

      教程

      关联表单填充关联表单

      组件:
  • 合同:关联表单
  • 所属项目:关联表单(associationFormField_kx4g30y8)

数据源里新建远程API

  • 名称:ht 可自定义
  • 自动加载:关闭
  • 请求地址:/alibaba/web/你的APPID/v1/form/getFormDataById.json 流程表单不是这个地址,参考https://www.yuque.com/yida/support/aql605
  • 其他保持默认

合同组件 新建onchange函数,参考如下代码

  1. export function onChange({ value }) {
  2. // console.log(value)
  3. // 选择了值
  4. if (value.length == 1) {
  5. // 生成请求参数
  6. const params = {
  7. formInstId: value[0].instanceId
  8. }
  9. // 请求所选数据
  10. this.dataSourceMap['ht'].load(params).then(res => {
  11. // console.log(res)
  12. // console.log(JSON.parse(JSON.parse(res.formData.associationFormField_kx4fzh5g_id)))
  13. // 给关联表单赋值
  14. this.$("associationFormField_kx4g30y8").setValue(JSON.parse(JSON.parse(res.formData.associationFormField_kx4fzh5g_id)))
  15. })
  16. }
  17. // 清除了选择,重置组件值
  18. else { this.$("associationFormField_kx4g30y8").reset() }
  19. }

1.gif

数据筛选

组件:

  • 项目名称:关联表单
  • 合同名称:下拉单选
  • 关联合同名称:关联表单

数据源里新建远程API

  1. 根据项目名搜索合同名
    1. 名称:ht 可自定义
    2. 自动加载:关闭
    3. 请求地址:/alibaba/web/你的APPID/v1/form/searchFormDatas.json 流程表单不是这个地址,参考https://www.yuque.com/yida/support/aql605
    4. 其他保持默认

项目名称 新建onchange函数,参考如下代码

  1. export function onChange({ value }) {
  2. // console.log('onChange', value);
  3. // 选择了项目名称
  4. if (value.length == 1) {
  5. const params = {
  6. formUuid: 'FORM-5L666481WK1WCR6D2USPCB6B3RZ12NHBZF4XKK',
  7. searchFieldJson: JSON.stringify({ textField_kx4lrrkd: value[0].title })
  8. }
  9. this.dataSourceMap['ht'].load(params).then(res => {
  10. // console.log(res)
  11. const newArr = []
  12. res.data.forEach(item => {
  13. // console.log(item)
  14. newArr.push({
  15. text: item.formData.textField_kx4fzh5f,
  16. value: item.formData.textField_kx4fzh5f
  17. })
  18. })
  19. // console.log(newArr)
  20. this.$("selectField_kx4hfh62").set('dataSource', newArr)
  21. this.$("selectField_kx4hfh62").reset()
  22. this.$("selectField_kx4hfh62").setBehavior('NORMAL')
  23. })
  24. }
  25. // 清除了项目名称
  26. else {
  27. this.$("selectField_kx4hfh62").reset()
  28. this.$("selectField_kx4hfh62").setBehavior('READONLY')
  29. }
  30. }

合同名称 新建onchange2函数,参考如下代码

  1. export function onChange2({ value, actionType, item }) {
  2. console.log('onChange', value);
  3. if (actionType == 'itemClick' || actionType == 'change') {
  4. // 选择某个选项
  5. for (const item of this.state.htFromXm.data) {
  6. if (item.formData.textField_kx4fzh5f == value) {
  7. const data = [{
  8. "appType": "APP_GG4USNCHR387FQKSY3RW",
  9. "formUuid": item.formUuid,
  10. "formType": "receipt",
  11. "instanceId": item.formInstId,
  12. "title": item.title,
  13. "subTitle": ""
  14. }]
  15. this.$('associationFormField_kx4hfh63').setValue(data)
  16. break
  17. }
  18. }
  19. } else if (actionType == 'clear' || actionType == 'setValue') {
  20. this.$('associationFormField_kx4hfh63').reset()
  21. }
  22. }

效果
2.gif