前提条件

  1. 当前任务 Task A 和下一个任务 Task B 均绑定了流程表单。
  2. 当前登录用户同时作为审核人存在于 Task ATask B 中。

问题描述

在工作流实例详情页面中,当对 Task A 进行审核通过操作(包括填写绑定的流程表单和审批意见)后,页面会自动重新加载到 Task B 的审核页面。由于当前登录用户也是 Task B 的审核人,因此可以继续进行审批操作。

然而,在对 Task B 进行审核通过操作时,如果未填写流程表单而仅填写审批意见并点击提交,则系统不会校验流程表单的必填项,导致任务直接提交成功。此外,即使用户填写了流程表单内容,这些数据也不会被正确合并到 formVariables 中提交。


复现步骤

  1. 进入工作流实例详情页面。
  2. Task A 进行审核通过操作:
    • 填写绑定的流程表单。
    • 填写审批意见。
    • 提交审核。
  3. 页面自动跳转到 Task B 的审核页面。
  4. Task B 的审核页面中:
    • 不填写流程表单,仅填写审批意见。
    • 点击提交审核。
  5. 观察到系统未校验流程表单的必填项,并直接提交任务。
  6. 如果填写了流程表单内容,发现这些数据未被正确合并到 formVariables 中提交。

问题原因分析

经排查发现,问题的根本原因是在处理加载审批页面时,其子组件 ProcessInstanceOperationButton 中的 loadTodoTask 方法会将 approveFormFApi.value 重置为 {}。这一操作会导致以下情况:

  • 当从 Task A 切换到 Task B 时,approveFormFApi.value 被清空。
  • 在执行 handleAudit 方法时,代码会检查 approveFormFApi 是否存在。由于 approveFormFApi.value 已被清空,系统误认为当前任务节点未绑定流程表单,从而跳过了表单校验逻辑。

注释掉 approveFormFApi.value = {} 这一行代码后,问题得以解决。


解决方案

本 PR 的修改方案是移除 loadTodoTask 方法中对 approveFormFApi.value 的清空操作。具体改动如下:

// 修改前
approveFormFApi.value = {}; // 清空表单状态

// 修改后
// 注释掉清空表单状态的代码
// approveFormFApi.value = {};

通过此修改,确保 approveFormFApi 的状态能够正确保留,从而避免因表单状态丢失而导致的校验逻辑失效问题。


测试结果

经过测试验证,修改后的代码能够有效解决以下问题:

  1. 审核操作时,系统能够正常校验流程表单的必填项。
  2. 流程表单的数据能够正确合并到 formVariables 中提交。

备注

  • 该修改方案仅针对上述问题进行了修复,可能存在其他潜在影响(例如是否会影响其他场景下的表单初始化逻辑,本人前端经验有限 )。