问题背景
在审批中心列表页面,ApprovalTreeMenu 替代 amis input-tree 后,大多数切换场景性能和功能都正常,未出现重复请求。尤其是同根节点下叶子节点切换(流程分类、具体流程)时,重复请求的问题已彻底解决。
但在跨根节点(如"待审核"与"已审核"、"监控箱"、"草稿"等)下叶子节点快速切换的场景,ApprovalTreeMenu 当前处理逻辑会导致双重 network 请求。具体表现为:
- 页面 UI 和浏览器 URL 都正确
- 最终列表数据正确(功能无 bug)
- 后台会连续发两次 GraphQL 请求(第 1 次多余,第 2 次是最终结果)
- 请求参数和排序方式不同,但过滤条件一致
问题复现步骤
- 登录审批中心页面,进入"待审核"列表视图根节点
- 点击"待审核"下某个流程分类或流程节点,确认列表展示正常且只发一次请求
- 再直接点击"已审核"根节点下某个流程分类(或其他根节点如监控箱、草稿等)的叶子节点
- 观察 network 请求,会出现连续两次 GraphQL 请求,UI 和 URL 都正常,但有性能损耗
- 同样问题在从"监控箱"、"已审核"切到"待审核"也会出现
当前处理逻辑
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
- 按实际情况再评估优化优先级
合并前应补充的完整测试清单
- 同根节点下流程分类、流程节点切换一切正常,0 冗余请求
- 根节点之间切换一切正常,0 冗余请求
- 跨根节点叶子切换(不同 objectName、listViewId)测试:
- UI、URL 正常
- network 仅 1 次请求(如未优化,则 2 次请求,确保最终结果正确)
- 包括所有根节点(待审核、已审核、监控箱、草稿、进行中、已完成)之间快速切换
- 浏览器刷新后能恢复正确列表视图、过滤条件
- ApprovalTreeMenu 角标数值能正确刷新
- plugins 仓库及其它自定义审批页面场景无回归问题
建议
本 issue 作为团队潜在技术债务记录,建议后续有空时评估方案 A 或 B 的可行性与影响(可与 AI 或其它开发协作评估)。短期内优先保证核心场景性能与功能。
如需进一步优化本问题,请基于此 issue 留言并更新优化/测试进度。
问题背景
在审批中心列表页面,ApprovalTreeMenu 替代 amis input-tree 后,大多数切换场景性能和功能都正常,未出现重复请求。尤其是同根节点下叶子节点切换(流程分类、具体流程)时,重复请求的问题已彻底解决。
但在跨根节点(如"待审核"与"已审核"、"监控箱"、"草稿"等)下叶子节点快速切换的场景,ApprovalTreeMenu 当前处理逻辑会导致双重 network 请求。具体表现为:
问题复现步骤
当前处理逻辑
ApprovalTreeMenu 在切换叶子节点时,根据目标 URL 与当前页面 URL 的基础路径做判断:
此问题仅在 ApprovalTreeMenu 作为外部 React 组件时出现,旧版 amis input-tree 作为 amis 内部组件时,由于走内部 link action 不触发 react-router 导航,不会有重复请求(除非有特殊场景或概率性的重复问题没测试到)。
关联问题与相关 Issue
其它关联:
可能的优化方案及评估
A. 在跨根节点场景统一用 postMessage setData(避免 navigate)
B. 修改 PageObject.tsx 的 _reloadKey 逻辑
C. 接受现状
合并前应补充的完整测试清单
建议
本 issue 作为团队潜在技术债务记录,建议后续有空时评估方案 A 或 B 的可行性与影响(可与 AI 或其它开发协作评估)。短期内优先保证核心场景性能与功能。
如需进一步优化本问题,请基于此 issue 留言并更新优化/测试进度。