Skip to content

【列表视图】配置面板属性变更后未实时生效(需点击保存)/ 导航与部分属性未正确同步 #833

@hotlong

Description

@hotlong

问题列表(结合详细排查后已合并):

1. 列表视图(ListView)配置面板中的大部分属性变更(如"显示记录数"、"允许打印"、"添加记录按钮"、选择模式等),仅在点击保存后才会生效,无法实时预览。

  • 预期:修改任何配置应立即反映到主视图组件,达到实时(Live Preview)效果。
  • 实际表现:侧边栏切换/勾选各种选项后,主表格、工具栏等内容未实时刷新,只有保存后才体现。
  • 主要原因:配置变更只更新了viewDraft,但PluginObjectView用了key={refreshKey},只有保存/创建时才会re-mount,普通变动(onViewUpdate)不触发key更换,导致视图不更新。
  • 建议修复方案:
    1. 移除key={refreshKey},或通过依赖viewDraft/activeView保证主组件可以响应props变化重新渲染;
    2. 或在onViewUpdate时同步刷新key(不推荐,性能差,且用户体验差);
    3. 优化数据流:让Live Preview不需要重挂载即可响应配置变更。

2. 导航模式(如Page/Drawer/Modal/Split/Popover)等设置面板切换无效,Overlay详情弹窗的导航配置未能和View配置实时同步。

  • 预期:切换不同的导航模式,应随即生效,改变弹窗/分屏表现。
  • 实际:导航配置(如mode: drawer/modal/...)实际取自objectDef.navigation,只在对象级用,视图级别的navigation未被消费。
  • 建议修复方案:
    • 让详情Overlay支持消费当前视图的navigation(activeView.navigation)或嵌套优先级 objectDef < activeView。

3. 各种Toolbar和Actions属性未实时生效,例如:

  • 添加记录按钮(addRecord/addRecordViaForm)
  • 允许打印(allowPrinting)
  • 显示记录数(showRecordCount)
  • 选择模式(selection)等
  • 相关代码流上,很多prop已经透传到主ListView schema,但因为主视图未及时re-render,所以未生效。

4. 代码一致性与最佳实践建议:

  • PluginObjectView建议React式解耦key依赖,利用useMemo等响应变化。
  • 子组件/Overlay建议向下消费viewDraft或activeView内的所有控制项。

附问题截图��

列表属性变动无效示例

复现步骤

  1. 打开Contacts模块,右侧列表视图配置面板
  2. 切换如添加记录、显示记录数、打印等选项
  3. 观察主表主体和Toolbar无实时响应,需等到点击"保存"才刷新配置
  4. 导航模式切换无效,始终是Drawer/未变成Split/Modal等

期望行为

  • 切换任意面板属性后能立刻在列表中反映出来(Live Preview效果,无需保存)
  • 导航模式等变更能及时同步到Overlay

相关代码位置:

  • apps/console/src/components/ObjectView.tsx (handleViewUpdate, renderListView等)
  • apps/console/src/components/ViewConfigPanel.tsx
  • packages/plugin-list/src/ListView.tsx
  • ...等

参考:

  • ROADMAP 已有相关Phase 2, Phase 3优化记录,但本问题为实际体验断层
  • [ ListView 属性和Live Preview 代码文档与测试用例详见 repo 搜索 ]

需要关注/修复标签:

bug, 配置, live preview


补充说明:建议修复后,务必补充自动化测试,覆盖所有toolbar、显示行为props的变更场景。


请开发修复后:记得运行test、确保所有相关场景通过,必要时补充ROADMAP进度注记。


Metadata

Metadata

Labels

bugSomething isn't working

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions