Skip to content

ObjectUI 平台级界面风格与交互一致性优化 #820

@hotlong

Description

@hotlong

概述

本 issue 针对 ObjectUI 元数据平台(非某个特定示例应用)提出整体界面风格和交互规范优化建议。所有通过 ObjectUI SDUI 引擎生成的应用界面(Grid、Board、Calendar、Dashboard、Report 等)均应从中受益。

当前平台界面参考

关联 Issues


1️⃣ 全局主题与设计 Token 标准化

涉及packages/core/src/theme/ThemeEngine.tspackages/components/src/index.csscontent/docs/guide/theming.md

现状问题

  • 部分组件直接使用硬编码灰度色(如 GridField.tsxtext-gray-500bg-gray-50),未走 theme token
  • 字体未统一强制使用 Inter(Storybook 配置了,但平台运行时未全局注入)
  • 边框、圆角、间距在不同插件间存在不一致

具体改进

  • 扫描所有硬编码颜色packages/fields/src/widgets/GridField.tsxpackages/plugin-report/src/ReportRenderer.tsx 等组件中 text-gray-*bg-gray-* 全部替换为 theme token(text-muted-foregroundbg-muted
  • 强制全局字体:在 packages/components/src/index.css:root 中注入 font-family: 'Inter', ui-sans-serif, system-ui,确保所有渲染场景生效
  • 统一间距/圆角:所有 card/panel/popover 使用 rounded-lgvar(--radius)),边框统一 border-border/50
  • 过渡动画:所有可交互元素添加 transition-colors duration-150

2️⃣ Sidebar 导航组件(packages/layout + packages/components/src/ui/sidebar.tsx

现状问题

  • SidebarNav 组件缺少分组分隔、活跃项指示强化
  • 折叠态下图标缺少 Tooltip
  • packages/runner/src/LayoutRenderer.tsx 中的手写 sidebar 与 packages/layout/src/SidebarNav.tsx 组件风格不统一

具体改进

  • 活跃项样式强化SidebarMenuButtonisActive 态增加左侧 3px 指示条(before:absolute before:left-0 before:w-[3px] before:bg-primary
  • 分组视觉分隔SidebarGroupLabel 增加 border-t border-border/30 pt-3 mt-2 分隔
  • 统一 LayoutRenderer 和 SidebarNavpackages/runner/src/LayoutRenderer.tsx 的手写 sidebar 迁移使用 @object-ui/layoutSidebarNav 组件,消除两套实现
  • 折叠态 Tooltipcollapsible="icon" 模式下确保所有 SidebarMenuButtontooltip prop

3️⃣ ListView 工具栏布局(packages/plugin-list/src/ListView.tsx

现状问题

  • 工具按钮(Hide fields / Filter / Group / Sort / Color / Density)和快捷过滤器(Status / Priority / Category)平铺在同一行,视觉层次平坦
  • Search 以按钮形态隐藏,不够直观
  • 工具栏按钮在窄屏下溢出处理不佳

具体改进

  • 双行布局:第一行为视图操作工具(Hide fields / Filter / Sort / Group / Color / Density),第二行为 quickFilters pills 和 userFilters
  • 搜索栏改为 inline InputtoolbarFlags.showSearch 为 true 时,右侧固定渲染 <Input> 搜索框(而非点击展开),宽度 w-48
  • 激活态强化:当 Filter/Sort/Group 有值时,对应按钮增加 bg-primary/8 border-primary/20 背景
  • 响应式溢出:窄屏时工具按钮使用 overflow-x-auto 横向滚动,或折叠为 "More" 下拉菜单

4️⃣ ObjectGrid 单元格渲染器(packages/plugin-grid/src/ObjectGrid.tsx + packages/fields/

现状问题

  • inferColumnType() 自动推断类型后的渲染缺少视觉标识——select/status 类字段显示纯文本
  • 日期字段直接输出 ISO 字符串(如 2026-02-26T03:09:07.458Z
  • Boolean 字段无视觉渲染

具体改进

  • select/status 类型:当 field.type 为 select 时,getCellRenderer() 返回 <Badge> 并支持从 field.options 映射颜色
  • 日期类型格式化formatDate()packages/fields/src/formatters.ts 中增加相对时间模式("2 days ago"、"Today"、"Overdue 3d"),并在 ObjectGrid 列推断时默认启用
  • Boolean 类型:渲染为 <Checkbox disabled checked={value} />✓/— 图标
  • 表头样式ObjectGrid 表头行统一使用 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground/70 bg-muted/5

5️⃣ ConfigPanelRenderer(packages/components/src/custom/ + apps/console/src/components/ViewConfigPanel.tsx

现状问题

  • 右侧配置面板 Section 之间缺少明显分隔
  • Toggle/Switch 项密集排列,缺少分组呼吸感
  • 面板宽度在不同场景下不一致(ViewConfig vs Dashboard vs Report)

具体改进

  • Section 间分隔ConfigPanelRenderer 渲染 section 之间插入 <Separator className="my-1" />
  • 折叠 Section 默认策略:低频使用的 Section(Sharing、Accessibility、Advanced)默认折叠(defaultCollapsed: true
  • 统一面板宽度:所有 ConfigPanel 类组件统一使用 CSS 变量 --config-panel-width: 280px,支持 schema 覆盖
  • 标签语言统一:利用 packages/i18n 确保面板标签与主界面语言一致,消除中英混排

6️⃣ 视图 Tab 栏(packages/plugin-view/src/ObjectView.tsx + packages/plugin-list/src/components/TabBar.tsx

现状问题

  • Named View Tabs(All Tasks / Board / Calendar / Active)间距过大
  • 活跃 Tab 指示器不够明显
  • Tab 与 ViewSwitcher 组件视觉风格不统一

具体改进

  • Tab 间距收紧TabsTrigger 间使用 gap-0.5,padding 缩减为 px-3 py-1.5
  • 活跃态指示:底部 border-b-2 border-primary + font-medium text-foreground
  • Badge 标记:带状态标记的 Tab(如 "Active•")使用 <Badge variant="dot" className="bg-green-500"> 替代纯文本圆点

验收标准

  • 所有硬编码灰度色已替换为 theme token
  • 全局字体、间距、圆角通过 CSS custom properties 统一
  • Sidebar 两套实现合并为一套
  • ListView 工具栏改为双行布局
  • ObjectGrid 的 select/date/boolean 类型有视觉化渲染
  • ConfigPanel section 有明确分隔和折叠策略
  • Tab 栏视觉风格统一
  • pnpm test 全量通过
  • ROADMAP.md 相关条目更新

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions