Skip to content
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
This repository was archived by the owner on Nov 4, 2026. It is now read-only.

评估所有已开发但未集成到 Console 的功能,形成集成建议 #702

Closed

Description

@hotlong

📋 完整评估报告:已开发但未集成到 Console 的功能

评估方法

对比 packages/layout/ 中已实现的组件能力 vs apps/console/src/ 中的实际使用情况,结合 ROADMAP 标记状态。


🔴 功能 1:Navigation Search(侧边栏搜索过滤)

维度 详情
来源 @object-ui/layout — NavigationRenderer + AppSchemaRenderer (PR #698)
Package 状态 ✅ 完成 — filterNavigationItems() 递归过滤, SidebarInput 搜索框, 8个测试用例
Console 状态 ❌ 未集成 — AppSidebar.tsx 没有任何搜索功能
Console 现状 AppSidebar.tsx 自己渲染 NavigationTree 组件,未使用 NavigationRenderer
集成价值 🔥 高 — 导航项多时搜索是核心体验(Airtable 有此功能)
集成难度 ⭐⭐ 中低 — 需在 AppSidebar header 区域加 SidebarInput,调用 filterNavigationItems 过滤 resolvedNavigation
风险 低 — 纯 UI 层面变更,opt-in

🔴 ���能 2:Navigation Pin/Favorites(导航项收藏置顶)

维度 详情
来源 @object-ui/layout — NavigationRenderer (PR #698)
Package 状态 ✅ 完成 — enablePinning + onPinToggle + collectPinnedItems() + Favorites section
Console 状态 ⚠️ 有自己的实现 — AppSidebar.tsx 使用 useFavorites() hook 独立管理收藏
差异分析 Console 的收藏是 record 级别(具体的数据记录),Package 的是 navigation item 级别(侧边栏条目),两者概念不同
集成价值 ⭐⭐ 中 — 互补而非替代。Package 的 pin 功能支持导航条目级别的 pin/unpin,Console 已有的是数据记录级别收藏
集成难度 ⭐⭐⭐ 中 — 需要合并两种收藏逻辑,或保持并存
风险 中 — 需明确 UX 交互:导航 pin 和 record favorites 是否共存于 Favorites section

🔴 功能 3:Navigation Drag Reorder(@dnd-kit 拖拽排序)

维度 详情
来源 @object-ui/layout — NavigationRenderer + SortableNavigationItem (PR #698)
Package 状态 ✅ 完成 — @dnd-kit/sortable + PointerSensor + KeyboardSensor + grip handles
Console 状态 ⚠️ 有自己的实现 — AppSidebar.tsx 使用原生 HTML5 DnD (draggable, onDragStart/Over/Drop) + useNavOrder hook + localStorage 持久化
差异分析 Console 的实现:��生 HTML5 DnD,localStorage 持久化,useNavOrder hook。Package 的实现:@dnd-kit 库(更好的触摸支持、键盘支持、拖拽反馈),但没有持久化
集成价值 🔥 高 — Package 的 @dnd-kit 方案明显优于 Console 的原生 HTML5 DnD(更好的可访问性、触摸设备支持、视觉反馈)
集成难度 ⭐⭐⭐ 中高 — 需要替换 Console 现有 DnD 逻辑,同时保留 localStorage 持久化
风险 中 — 需确保 @dnd-kit 不会与 Console 中其他 DnD 上下文(Kanban 等)冲突

🔴 功能 4:AppSchemaRenderer(整合替代方案)

维度 详情
来源 @object-ui/layout — AppSchemaRenderer (P0.1)
Package 状态 ✅ 完成 — 完整的 AppSchema JSON → sidebar + navigation + areas + mobile
Console 状态 ❌ 未使用 — Console 使用 AppShell + 自己的 AppSidebar 组件,手工拼装所有逻辑
差异分析 Console 的 AppSidebar.tsx(670 行) 手动实现了 AppSchemaRenderer 的大部分逻辑(area switching, navigation tree, icon resolution, visibility, permissions),但还额外包含 Console 特有功能(app switcher dropdown, user footer, recent items, 原生 DnD, swipe gesture)
集成价值 🔥🔥 极高 — 这是架构性改进。迁移到 AppSchemaRenderer 可以:
1. 删除 ~400 行重复代码
2. 自动获得所有 P1.7 增强(search/pin/reorder)
3. 支持 badge indicators(Console 完全没有)
4. 更好的测试覆盖(71 个测试)
集成难度 ⭐⭐⭐⭐ 高 — 需要:
1. 将 Console 特有功能(app switcher, user footer, recent items, swipe)迁移为 AppSchemaRenderer 的 slot/props
2. 可能需要扩展 AppSchemaRenderer 接口
3. 全面回归测试
风险 高 — 涉及 Console 核心布局,回归风险大。建议分阶段迁移

🔴 功能 5:Navigation Badge Indicators(徽标指示器)

维度 详情
来源 @object-ui/layout — NavigationRenderer
Package 状态 ✅ 完成 — 支持 badge + badgeVariant 字段,渲染为 Shadcn Badge 组件
Console 状态 ❌ 未使用 — Console 的 NavigationItemRenderer 没有渲染任何 badge
集成价值 ⭐⭐ 中 — 可用于显示未读消息数、待处理任务数等
集成难度 ⭐ 低 — 只需在 Console 的 NavigationItemRenderer 中添加 badge 渲染逻辑
风险 极低

🔴 功能 6:AreaSwitcher(Package 组件级 Area 切换器)

维度 详情
来源 @object-ui/layout — AppSchemaRenderer 内的 AreaSwitcher 组件
Package 状态 ✅ 完成 — 完整的 area 切换 UI(Airtable 风格)
Console 状态 ⚠️ 有自己的实现 — AppSidebar.tsx 手动渲染 area 切换(简单的 SidebarMenu 按钮列表)
差异分析 Package 的 AreaSwitcher 可能有更好的 UX 设计,Console 的是简单按钮列表
集成价值 ⭐ 低-中 — 功能已有,只是 UX 可能不同
集成难度 ⭐⭐ 中 — 如果不做整体 AppSchemaRenderer 迁移,单独替换 area switcher 意义不大

📊 集成优先级建议

优先级 功能 推荐方案 估时
P0 🔍 Navigation Search 在 AppSidebar 中直接使用 filterNavigationItems() 0.5d
P0 🏷️ Badge Indicators 在 Console NavigationItemRenderer 中加 badge 渲染 0.5d
P1 🔄 Drag Reorder 升级 用 @dnd-kit 替换原生 HTML5 DnD + 保留 localStorage 持久化 1-2d
P2 📌 Navigation Pin 与现有 useFavorites 合并或并存 1d
P3 🏗️ AppSchemaRenderer 整体迁移 分阶段将 AppSidebar 迁移到 AppSchemaRenderer 3-5d

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

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