Skip to content

【Critical/Bug】设计模式下 Dashboard 设计器无法高亮选中和弹出属性面板 / Widget 无法选中 #808

Description

@hotlong

症状复现

  • 仪表盘进入设计模式后,左侧主区无法选中任何 widget,无蓝色高亮(ring),
  • 右侧 DesignDrawer 只显示 widget 卡片列表,无法弹出任何 widget 属性面板;卡片点击也无效。
  • 适配 iPad、暗色模式表现更差,属性面板即使渲染实际不可见。

截图参考

仪表盘设计模式实际效果

技术调查:代码链路全分析

  1. 所有 widget 缺少 id 字段:生产数据下 DashboardWidgetSchema.id 为 optional,未做 fallback,导致所有点击选中逻辑短路。
  2. DashboardEditor 内部 useUndoRedo 只初始化一次 schema,不跟随外部 schema 变化,���际内部 currentSchema 可能为旧数据。
  3. WidgetPropertyPanel/WidgetCard 硬编码浅色样式(如 bg-white border-gray-200 text-gray-800),夜间模式完全不可用。
  4. sheet.tsx 的 sm:max-w-sm 和 drawer 自定义宽度冲突
  5. iPad 下 hover 样式无效,选中无视觉提示

导致的根本效果

  • 左侧预览区点击 widget 无任何选中或高亮,designMode props 失效。
  • 右侧 widget 列表无法点击(onSelect 返回 null),永远无属性面板。
  • 工具栏、属性面板受宽度影响显示异常。
  • 暗色模式下属性面板不可见。

统一修复建议

  1. Widget id 兜底:所有传入的 schema.widgets 强制补充唯一 id(入口+runtime 双兜底)。
  2. useUndoRedo 添加外部 schema 变化同步
  3. WidgetPropertyPanel/WidgetCard 使用 semantic token 替换硬编码颜色(border-border, bg-card, text-foreground...)。
  4. sheet.right/DesignDrawer 不要内置 max-w,由使用方决定。
  5. Design mode 下所有可选 widget 增加 ring-1+active:ring 明确提示。

验收标准

  • 设计模式下左侧和右侧都能正确选中 widget,蓝色高亮同步出现、属性面板弹出。
  • iPad、暗色模式下视觉完全可用。
  • 必须包含全端到端 E2E 回归测试。

注:详细分析与修复建议见本 Issue 说明。

Metadata

Metadata

Assignees

No one assigned

    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