关于v-form-render自定义表单的pdf导出

96 阅读8分钟

最近遇到关于自定义表单pdf导出的问题,具体包括单表单导出以及多表单导出的情况。单表单实现较容易,多表单导出表单之间需要一个标题间隔。不多废话,直接上菜。

Pdf导出部分

其中使用到jsPDF,大家有需要自行下载,auditFollwoRef为表单子组件部分,setrecordIdInit为暴露出的方法

async function handleExport(item) {

  await nextTick();

  await auditFollwoRef.value.setrecordIdInit(item.id);

  const content = document.getElementById("vFormRef");

  content.querySelectorAll("input").forEach((input) => {

    input.style.height = "32px";

    input.style.lineHeight = "14px";

    input.style.paddingTop = "6px";

    input.style.border = "none";

  });

  content.querySelectorAll(".el-input__wrapper").forEach((item) => {

    item.style.boxShadow = "none";

  });

  content.querySelectorAll(".el-textarea__inner").forEach((item) => {

    item.style.boxShadow = "none";

  });

  const imgsList = content.querySelectorAll("img");

  await nextTick();

  let index = 0;

  imgsList.forEach((r) => {

    const img = new Image();

    img.onload = async () => {

      index++;

    };

    img.src = r.src;

  });

  let timer = setInterval(async () => {

    if (index == imgsList.length) {

      clearInterval(timer);

      const canvas = await html2canvas(content, {

        dpi: window.devicePixelRatio * 2,

        useCORS: true,

        allowTaint: true,

        async: true,

        allowTaint: true,

        scale: 3, // 根据需要调整缩放比例

        scrollY: 0,

      });

      var contentWidth = canvas.width;

      var contentHeight = canvas.height;

      const pageData = canvas.toDataURL("image/jpeg", 1.0);

      var pdfX = ((contentWidth + 10) / 2) * 0.75;

      var pdfY = ((contentHeight + 500) / 2) * 0.75; // 500为底部留白

      var imgX = pdfX;

      var imgY = (contentHeight / 2) * 0.75; //内容图片这里不需要留白的距离

      var PDF = new jsPDF("", "pt", [pdfX, pdfY]);

      PDF.addImage(pageData, "jpeg", 0, 0, imgX, imgY);

      PDF.save(item.caseCollectionRecordVO.name + ".pdf");

    }

  }, 1000);

}

单表单部分

这是获取表单内容部分

/**获取表单详情 */

  const getCaseCollectionRecordAloneDec = async () => {

    const res = await getCaseCollectionRecordAlone({ id: recordId.value });

    fmUserForm.value = res.data.fmUserFormVO;

    fmUserForm.value.fmUserFormItems.forEach((item, index) => {

      let obj = JSON.parse(item.scheme);

      if (index == 0) {

        fmUserRuleFormItemsConfig.value = obj.fmUserRuleFormItemsConfig;

      }

      if (obj && obj.widget) {

        obj.widget.options.disabled = true;

        formJson.value.formConfig = obj.formConfig;

        obj.widget.customId = item.id;

        if (obj.widget.type == "radio" || obj.widget.type == "checkbox") {

          if (item.fmUserFormData && item.fmUserFormData.childData) {

            obj.widget.options.optionItems = JSON.parse(

              item.fmUserFormData.childData

            );

          }

        }

        formJson.value.widgetList.push(obj.widget);

      }

    });

    if (fmUserForm.value.fmUserFormItems.length > 0) {

      for (const item of fmUserForm.value.fmUserFormItems) {

        if (item.fmUserFormData && item.fmUserFormData.originalData) {

          formData[item.formItemId] = JSON.parse(

            item.fmUserFormData.originalData

          );

        }

      }

    }

    for (const key in formData) {

      if (Object.prototype.hasOwnProperty.call(formData, key)) {

        const element = formData[key];

        if (element.length > 0) {

          const temelement = []

          for (const itemFile of element) {

            if (itemFile && itemFile.url && itemFile.url.indexOf("http") > -1) {

              if (itemFile.response) {

                itemFile.url = itemFile.response.data;

                temelement.push(itemFile);

              }

            }

          }

          if (temelement.length > 0) {

            formData[key] = []

            for (const img of temelement) {

              formData[key].push(img)

            }

          }

        }

      }

    }

    temFormData.value = formData;

    await vFormRef.value.setFormJson(formJson.value);

    getRuleOperate();

  };

这是修改规则部分

  const getRuleOperate = () => {

    const ruleOperate = {};

    for (const item of fmUserRuleFormItemsConfig.value) {

      for (const result of item.fmUserFormList) {

        ruleOperate[result] = [];

      }

    }

    for (const element of fmUserRuleFormItemsConfig.value) {

      for (const result of element.fmUserFormList) {

        ruleOperate[result].push(element.fmUsertype);

        ruleOperate[result].push(element.fmRuletype);

        if (element.fmUsertype == 0) {

          // 都要满足

          if (element.fmRuletype == 0) {

            // 显隐

            for (const condition of element.fmUserRuleFormItems) {

              if (condition.fmTypeValue == 0) {

                //等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    areTimesEqual(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 == date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] instanceof Array

                ) {

                  if (

                    arraysEqualIgnoreOrder(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] ==

                    condition.fmUseValue

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              } else if (condition.fmTypeValue == 1) {

                //不等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    areTimesEqual(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  condition.type == "date" &&

                  temFormData.value[condition.formItemId]

                ) {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 != date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] instanceof Array

                ) {

                  if (

                    !arraysEqualIgnoreOrder(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] !=

                    condition.fmUseValue

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              } else if (condition.fmTypeValue == 2) {

                //大于

                if (

                  temFormData.value[condition.formItemId] > condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 3) {

                //大于等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  condition.type == "date" &&

                  temFormData.value[condition.formItemId]

                ) {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 >= date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] >= condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 4) {

                //小于

                if (

                  temFormData.value[condition.formItemId] < condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 5) {

                //小于等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareLessTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 <= date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] <= condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 6) {

                //选择范围

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue[0].slice(11, 19)

                    ) &&

                    compareLessTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue[1].slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue[0]).getTime();

                  const date3 = new Date(condition.fmUseValue[0]).getTime();

                  if (date2 <= date1 && date3 >= date1) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  condition.fmUseValue[0] <=

                  temFormData.value[condition.formItemId] &&

                  condition.fmUseValue[1] >=

                  temFormData.value[condition.formItemId]

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 7) {

                //为空

                if (

                  !isNotNullOrUndefinedOrEmpty(

                    temFormData.value[condition.formItemId]

                  )

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 8) {

                //不为空

                console.log(temFormData.value[condition.formItemId]);

                if (

                  isNotNullOrUndefinedOrEmpty(

                    temFormData.value[condition.formItemId]

                  )

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 9) {

                //包含

                if (temFormData.value[condition.formItemId] instanceof Array) {

                  if (

                    condition.fmUseValue.every((element) =>

                      temFormData.value[condition.formItemId].includes(element)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] &&

                    temFormData.value[condition.formItemId].includes(

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              } else if (condition.fmTypeValue == 10) {

                //不包含

                if (temFormData.value[condition.formItemId] instanceof Array) {

                  if (

                    !condition.fmUseValue.every((element) =>

                      temFormData.value[condition.formItemId].includes(element)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    !temFormData.value[condition.formItemId] ||

                    !temFormData.value[condition.formItemId].includes(

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              }

            }

          }

        } else {

          // 或者

          if (element.fmRuletype == 0) {

            // 显隐

            for (const condition of element.fmUserRuleFormItems) {

              if (condition.fmTypeValue == 0) {

                //等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    areTimesEqual(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 == date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] instanceof Array

                ) {

                  if (

                    arraysEqualIgnoreOrder(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] ==

                    condition.fmUseValue

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              } else if (condition.fmTypeValue == 1) {

                //不等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    areTimesEqual(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  condition.type == "date" &&

                  temFormData.value[condition.formItemId]

                ) {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 != date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] instanceof Array

                ) {

                  if (

                    !arraysEqualIgnoreOrder(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] !=

                    condition.fmUseValue

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              } else if (condition.fmTypeValue == 2) {

                //大于

                if (

                  temFormData.value[condition.formItemId] > condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 3) {

                //大于等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  condition.type == "date" &&

                  temFormData.value[condition.formItemId]

                ) {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 >= date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] >= condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 4) {

                //小于

                if (

                  temFormData.value[condition.formItemId] < condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 5) {

                //小于等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareLessTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 <= date2) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  temFormData.value[condition.formItemId] <= condition.fmUseValue

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 6) {

                //选择范围

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue[0].slice(11, 19)

                    ) &&

                    compareLessTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue[1].slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue[0]).getTime();

                  const date3 = new Date(condition.fmUseValue[0]).getTime();

                  if (date2 <= date1 && date3 >= date1) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else if (

                  condition.fmUseValue[0] <=

                  temFormData.value[condition.formItemId] &&

                  condition.fmUseValue[1] >=

                  temFormData.value[condition.formItemId]

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 7) {

                //为空

                if (

                  !isNotNullOrUndefinedOrEmpty(

                    temFormData.value[condition.formItemId]

                  )

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 8) {

                //不为空

                if (

                  isNotNullOrUndefinedOrEmpty(

                    temFormData.value[condition.formItemId]

                  )

                ) {

                  ruleOperate[result].push(true);

                } else {

                  ruleOperate[result].push(false);

                }

              } else if (condition.fmTypeValue == 9) {

                //包含

                if (temFormData.value[condition.formItemId] instanceof Array) {

                  if (

                    condition.fmUseValue.every((element) =>

                      temFormData.value[condition.formItemId].includes(element)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] &&

                    temFormData.value[condition.formItemId].includes(

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              } else if (condition.fmTypeValue == 10) {

                //不包含

                if (temFormData.value[condition.formItemId] instanceof Array) {

                  if (

                    !condition.fmUseValue.every((element) =>

                      temFormData.value[condition.formItemId].includes(element)

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                } else {

                  if (

                    !temFormData.value[condition.formItemId] ||

                    !temFormData.value[condition.formItemId].includes(

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push(true);

                  } else {

                    ruleOperate[result].push(false);

                  }

                }

              }

            }

          } else {

            // 跳题

            for (const condition of element.fmUserRuleFormItems) {

              if (condition.fmTypeValue == 0) {

                //等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    areTimesEqual(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 == date2) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  temFormData.value[condition.formItemId] instanceof Array

                ) {

                  if (

                    arraysEqualIgnoreOrder(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] ==

                    condition.fmUseValue

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                }

              } else if (condition.fmTypeValue == 1) {

                //不等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    areTimesEqual(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  condition.type == "date" &&

                  temFormData.value[condition.formItemId]

                ) {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 != date2) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  temFormData.value[condition.formItemId] instanceof Array

                ) {

                  if (

                    !arraysEqualIgnoreOrder(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] !=

                    condition.fmUseValue

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                }

              } else if (condition.fmTypeValue == 2) {

                //大于

                if (

                  temFormData.value[condition.formItemId] > condition.fmUseValue

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 3) {

                //大于等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  condition.type == "date" &&

                  temFormData.value[condition.formItemId]

                ) {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 >= date2) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  temFormData.value[condition.formItemId] >= condition.fmUseValue

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 4) {

                //小于

                if (

                  temFormData.value[condition.formItemId] < condition.fmUseValue

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 5) {

                //小于等于

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareLessTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue.slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue).getTime();

                  if (date1 <= date2) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  temFormData.value[condition.formItemId] <= condition.fmUseValue

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 6) {

                //选择范围

                if (

                  condition.type == "time" &&

                  temFormData.value[condition.formItemId]

                ) {

                  if (

                    compareTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue[0].slice(11, 19)

                    ) &&

                    compareLessTimes(

                      temFormData.value[condition.formItemId],

                      condition.fmUseValue[1].slice(11, 19)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (condition.type == "date") {

                  const date1 = new Date(

                    temFormData.value[condition.formItemId]

                  ).getTime();

                  const date2 = new Date(condition.fmUseValue[0]).getTime();

                  const date3 = new Date(condition.fmUseValue[0]).getTime();

                  if (date2 <= date1 && date3 >= date1) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else if (

                  condition.fmUseValue[0] <=

                  temFormData.value[condition.formItemId] &&

                  condition.fmUseValue[1] >=

                  temFormData.value[condition.formItemId]

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 7) {

                //为空

                if (

                  !isNotNullOrUndefinedOrEmpty(

                    temFormData.value[condition.formItemId]

                  )

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 8) {

                //不为空

                if (

                  isNotNullOrUndefinedOrEmpty(

                    temFormData.value[condition.formItemId]

                  )

                ) {

                  ruleOperate[result].push([true, condition.formItemId]);

                } else {

                  ruleOperate[result].push([false, condition.formItemId]);

                }

              } else if (condition.fmTypeValue == 9) {

                //包含

                if (temFormData.value[condition.formItemId] instanceof Array) {

                  if (

                    condition.fmUseValue.every((element) =>

                      temFormData.value[condition.formItemId].includes(element)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else {

                  if (

                    temFormData.value[condition.formItemId] &&

                    temFormData.value[condition.formItemId].includes(

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                }

              } else if (condition.fmTypeValue == 10) {

                //不包含

                if (temFormData.value[condition.formItemId] instanceof Array) {

                  if (

                    !condition.fmUseValue.every((element) =>

                      temFormData.value[condition.formItemId].includes(element)

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                } else {

                  if (

                    !temFormData.value[condition.formItemId] ||

                    !temFormData.value[condition.formItemId].includes(

                      condition.fmUseValue

                    )

                  ) {

                    ruleOperate[result].push([true, condition.formItemId]);

                  } else {

                    ruleOperate[result].push([false, condition.formItemId]);

                  }

                }

              }

            }

          }

        }

      }

    }

    console.log(ruleOperate);

    for (const key in ruleOperate) {

      if (Object.prototype.hasOwnProperty.call(ruleOperate, key)) {

        const element = ruleOperate[key];

        //  [0] 0 - 全部满足 1 - 满足一个  [1] 0 - 隐藏 1 - 跳题

        if (element[0] == 0) {

          if (element[1] == 0) {

            const slicedData = element.slice(2);

            const allTrue = slicedData.every((value) => value == true);

            if (allTrue) {

              vFormRef.value.showWidgets(key);

            } else {

              if (temFormData.value[key] instanceof Array) {

                if (temFormData.value[key].length > 0) {

                  vFormRef.value.setFieldValue(key, []);

                  temFormData.value[key] = [];

                }

              } else {

                if (temFormData.value[key]) {

                  vFormRef.value.setFieldValue(key, null);

                  temFormData.value[key] = null;

                }

              }

              vFormRef.value.hideWidgets(key);

            }

          }

        } else {

          if (element[1] == 0) {

            const slicedData = element.slice(2);

            const allTrue = slicedData.some((value) => value == true);

            if (allTrue) {

              vFormRef.value.showWidgets(key);

            } else {

              if (temFormData.value[key] instanceof Array) {

                if (temFormData.value[key].length > 0) {

                  vFormRef.value.setFieldValue(key, []);

                  temFormData.value[key] = [];

                }

              } else {

                if (temFormData.value[key]) {

                  vFormRef.value.setFieldValue(key, null);

                  temFormData.value[key] = null;

                }

              }

              vFormRef.value.hideWidgets(key);

            }

          } else {

            const slicedData = element.slice(2);

            const allTrue = slicedData.some((value) => value[0] == true);

            if (allTrue) {

              for (const element of slicedData) {

                if (element[0]) {

                  const startIndex = formJson.value.widgetList.findIndex(

                    (item) => item.id === element[1]

                  );

                  const endIndex = formJson.value.widgetList.findIndex(

                    (item) => item.id === key

                  );

                  const filteredList = formJson.value.widgetList.slice(

                    startIndex + 1,

                    endIndex

                  );

                  const idsInRange = filteredList.map((item) => item.id);

                  idsInRange.forEach((id) => {

                    if (temFormData.value[id] instanceof Array) {

                      if (temFormData.value[id].length > 0) {

                        vFormRef.value.setFieldValue(id, []);

                        temFormData.value[id] = [];

                      }

                    } else {

                      if (temFormData.value[id]) {

                        vFormRef.value.setFieldValue(id, null);

                        temFormData.value[id] = null;

                      }

                    }

                    vFormRef.value.hideWidgets(id);

                  });

                }

              }

            } else {

              for (const element of slicedData) {

                if (!element[0]) {

                  const startIndex = formJson.value.widgetList.findIndex(

                    (item) => item.id === element[1]

                  );

                  const endIndex = formJson.value.widgetList.findIndex(

                    (item) => item.id === key

                  );

                  const filteredList = formJson.value.widgetList.slice(

                    startIndex + 1,

                    endIndex

                  );

                  const idsInRange = filteredList.map((item) => item.id);

                  idsInRange.forEach((id) => {

                    vFormRef.value.showWidgets(id);

                  });

                }

              }

            }

          }

        }

      }

    }

  };

这是父组件暴露方法部分使用defineExpose

  const setrecordIdInit = async (id) => {

    recordId.value = id;

    await getCaseCollectionRecordAloneDec();

  };

  defineExpose({

    setrecordIdInit,

  });

多表单部分

1.在每个部分中添加一个static-text作为他们的标题

2.把每个部分的表单都放在一个数组里

const getCaseCollectionRecordFollowDec = async (index=0) => {

    const res = await getFollowRecordInfoFmUserForm({ id: recordId.value });

    caseList.value=res.data.fmUserFormList

    fmUserForm.value = res.data.fmUserFormList;

    formJson.value={formConfig: null,widgetList: []}

    let allFm=[]

    fmUserForm.value.forEach((x, y)=>{

      formJson.value.widgetList.push({

        type: 'static-text',

        icon: 'static-text',

        options: {

          name: '',

          columnWidth: '200px',

          hidden: false,

          textContent: ${x.name},

          textAlign: 'left',

          fontSize: '13px',

          preWrap: false,  //是否自动换行

        },

      });

      x.fmUserFormItems.forEach((item,index) => {

        let obj = JSON.parse(item.scheme);

        if (index == 0) {

          fmUserRuleFormItemsConfig.value = obj.fmUserRuleFormItemsConfig;

        }

        if (obj && obj.widget) {

          obj.widget.options.disabled = true;

          formJson.value.formConfig = obj.formConfig;

          obj.widget.customId = item.id;

          if (obj.widget.type == "radio" || obj.widget.type == "checkbox") {

            if (item.fmUserFormData && item.fmUserFormData.childData) {

              obj.widget.options.optionItems = JSON.parse(

                item.fmUserFormData.childData

              );

            }

          }

          formJson.value.widgetList.push(obj.widget);

          allFm.push(item)

        }

      })

    })

    if (allFm.length > 0) {

      for (const item of allFm) {

        if (item.fmUserFormData && item.fmUserFormData.originalData) {

          formData[item.formItemId] = JSON.parse(

            item.fmUserFormData.originalData

          );

        }

      }

    }

    if (allFm.length > 0) {

      for (const item of allFm) {

        if (item.fmUserFormData && item.fmUserFormData.originalData) {

          formData[item.formItemId] = JSON.parse(

            item.fmUserFormData.originalData

          );

        }

      }

    }

    for (const key in formData) {

      if (Object.prototype.hasOwnProperty.call(formData, key)) {

        const element = formData[key];

        if (element.length > 0) {

          const temelement = []

          for (const itemFile of element) {

            if (itemFile && itemFile.url && itemFile.url.indexOf("http") > -1) {

              if (itemFile.response) {

                itemFile.url = itemFile.response.data;

                temelement.push(itemFile);

              }

            }

          }

          if (temelement.length > 0) {

            formData[key] = []

            for (const img of temelement) {

              formData[key].push(img)

            }

          }

        }

      }

    }

    temFormData.value = formData;

    await vFormRef.value.setFormJson(formJson.value);

    getRuleOperate();

  };