Skip to content

列表过滤条件在页面切换后未保留 #2294

Description

@baozhoutao

问题

在对象列表(数据模式 ObjectView)中,用户输入搜索词或设置高级筛选(FilterBuilder)条件后,通过侧边栏切换到其他页面,再切回该列表时,过滤条件全部丢失,又变回未过滤的全量列表。

根因:搜索词(searchTerm)和高级筛选(currentFilters)是 ListView 的组件本地 state,导航离开时 ListView 被卸载,state 随之销毁。虽然快速筛选会写入 uf_* URL 参数,但 URL 参数只在刷新 / 浏览器后退时保留 —— 通过应用内导航链接离开(该链接不带查询串)再回来时同样会丢。

期望

用户在列表里输入的过滤条件,切换到其他页面再回到该列表时应自动保留

方案

按 用户 × 对象 × 视图 维度,把运行时过滤状态(高级筛选 + 搜索词)缓存到 localStorage,ListView 挂载时读取并恢复。

  • 新增 packages/app-shell/src/views/listFilterStorage.ts:buildListFilterKey / read / write(300ms 防抖写入,状态为空时删除键)。
  • 存储键形如 list-filters:<userId>:<对象>:<视图ID>,内嵌 userId,避免同一浏览器切换账号时互相读到对方的过滤条件(过滤值可能敏感)。列宽 grid-columns-* 是纯外观、故意不按用户隔离,这里不同。
  • ObjectViewonFilterChange / onSearchChange 时写入,挂载时经新增的 initialFilters / initialSearchTerm 恢复。ListViewkey 在视图切换时重挂载,所以懒初始化能按视图正确重读。
  • 不触碰服务端共享视图定义(persistViewPatch);本永续层是纯用户个人、端末本地的附加层。

先只覆盖普通对象列表(ObjectView);InterfaceListPage 后续视需要再跟进。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions