Skip to content

ApprovalTreeMenu跨根节点快速切换导致重复network请求问题(需后续评估优化) #550

Description

@yinlianghui

问题背景

在审批中心列表页面,ApprovalTreeMenu 替代 amis input-tree 后,大多数切换场景性能和功能都正常,未出现重复请求。尤其是同根节点下叶子节点切换(流程分类、具体流程)时,重复请求的问题已彻底解决。

但在跨根节点(如"待审核"与"已审核"、"监控箱"、"草稿"等)下叶子节点快速切换的场景,ApprovalTreeMenu 当前处理逻辑会导致双重 network 请求。具体表现为:

  • 页面 UI 和浏览器 URL 都正确
  • 最终列表数据正确(功能无 bug)
  • 后台会连续发两次 GraphQL 请求(第 1 次多余,第 2 次是最终结果)
  • 请求参数和排序方式不同,但过滤条件一致

问题复现步骤

  1. 登录审批中心页面,进入"待审核"列表视图根节点
  2. 点击"待审核"下某个流程分类或流程节点,确认列表展示正常且只发一次请求
  3. 再直接点击"已审核"根节点下某个流程分类(或其他根节点如监控箱、草稿等)的叶子节点
  4. 观察 network 请求,会出现连续两次 GraphQL 请求,UI 和 URL 都正常,但有性能损耗
  5. 同样问题在从"监控箱"、"已审核"切到"待审核"也会出现

当前处理逻辑

ApprovalTreeMenu 在切换叶子节点时,根据目标 URL 与当前页面 URL 的基础路径做判断:

  • 如果是同一根节点下切换(基础 URL 相同),走 postMessage + replaceState,实现无冗余请求
  • 如果跨根节点切换(基础 URL 不同),走 navigate(react-router 导航),导致 PageObject 重新执行、CRUD remount,出现两次请求

此问题仅在 ApprovalTreeMenu 作为外部 React 组件时出现,旧版 amis input-tree 作为 amis 内部组件时,由于走内部 link action 不触发 react-router 导航,不会有重复请求(除非有特殊场景或概率性的重复问题没测试到)。

关联问题与相关 Issue

其它关联:

  • ApprovalTreeMenu 切换场景优化与重复请求(Input-tree 替代场景的副作用)
  • 审批中心角标刷新/数值不更新问题修复
  • Approval 页面 remount 与 schema 重建逻辑

可能的优化方案及评估

A. 在跨根节点场景统一用 postMessage setData(避免 navigate)

  • 需同时同步 objectName、listViewId 等所有路由参数
  • 可能导致 schema 未重建,页面不正确
  • 复杂度和风险均高

B. 修改 PageObject.tsx 的 _reloadKey 逻辑

  • 去除 additionalFilters
  • 风险较大,baozhoutao 的 fix 目的是确保切换视图数据正常
  • 需全量测试所有对象列表视图相关场景

C. 接受现状

  • 最高频操作场景已经 0 冗余请求
  • 跨根节点切换只有性能问题,功能无 bug
  • 按实际情况再评估优化优先级

合并前应补充的完整测试清单

  1. 同根节点下流程分类、流程节点切换一切正常,0 冗余请求
  2. 根节点之间切换一切正常,0 冗余请求
  3. 跨根节点叶子切换(不同 objectName、listViewId)测试:
    • UI、URL 正常
    • network 仅 1 次请求(如未优化,则 2 次请求,确保最终结果正确)
    • 包括所有根节点(待审核、已审核、监控箱、草稿、进行中、已完成)之间快速切换
  4. 浏览器刷新后能恢复正确列表视图、过滤条件
  5. ApprovalTreeMenu 角标数值能正确刷新
  6. plugins 仓库及其它自定义审批页面场景无回归问题

建议

本 issue 作为团队潜在技术债务记录,建议后续有空时评估方案 A 或 B 的可行性与影响(可与 AI 或其它开发协作评估)。短期内优先保证核心场景性能与功能。


如需进一步优化本问题,请基于此 issue 留言并更新优化/测试进度。

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions