Files

13 KiB
Raw Permalink Blame History

亚克力设计类别与组件使用清单

本文档记录当前前端的亚克力材质体系及实际使用位置。样式定义以 src/styles.css 为准,组件映射以 src/features/ 下的现有代码为准。

总览

当前材质体系分为 3 组,共 13 个语义类:

分组 数量 类别 是否使用背景模糊
外层亚克力与临时玻璃 4 导航、面板、独立控件、临时任务浮层
内部实体表面 4 Dock、控件面、内容凹槽、阅读面
语义状态表面 5 信息、正常、警告、危险、Agent 推理

只有第一组属于真正的亚克力或玻璃外壳。第二组用于亚克力壳层内部,保证文字、表单和密集数据不受底图干扰。第三组只表达业务状态,不承担界面层级。

1. 外层亚克力与临时玻璃

这组样式包含冷色半透明底色、饱和度、明度混合、细噪点、边框和阴影,并使用 backdrop-filter。同一区域只应保留一个带模糊的外层壳体,内部子元素应改用实体表面。

acrylic-navigation

  • 用途:全局导航栏。
  • 模糊:使用面板级模糊,默认 22px,浅色底图 24px,卫星底图 20px。
  • 特征:保留底部分隔和下投影,不使用顶部高光。
  • 当前组件:
    • WorkbenchTopBar,工作台顶部 Header。
  • 文件:src/features/workbench/components/workbench-top-bar.tsx

acrylic-panel

  • 用途:承载持续显示或需要集中阅读的主要浮动面板。
  • 模糊:使用面板级模糊,20px 至 24px。
  • 当前组件:
    • AgentCommandPanelAgent 命令面板外壳。
    • AgentCollapsedRailAgent 收起状态侧栏。
    • ScheduledConditionFeed,预约任务与工况面板,通过 MAP_TOOL_PANEL_SURFACE_CLASS_NAME 间接使用。
    • LayerControlControlPanelLegendBaseLayersControl,地图工具面板,通过共享材质常量间接使用。
    • FeaturePopover,要素详情浮层,通过 MAP_FOCUS_SURFACE_CLASS_NAME 间接使用。
    • FeatureInsightPanel,要素洞察面板。
    • MapDevPanel,地图开发调试面板。
    • AlertMenuScenarioMenuUserMenu,顶部导航下拉菜单。
    • MapNotice,地图通知。
  • 直接或间接涉及文件:
    • src/features/agent/components/agent-command-panel.tsx
    • src/features/agent/components/agent-collapsed-rail.tsx
    • src/features/map/core/components/map-control-styles.ts
    • src/features/map/core/components/notice.tsx
    • src/features/workbench/components/scheduled-condition-feed.tsx
    • src/features/workbench/components/feature-popover.tsx
    • src/features/workbench/components/feature-insight-panel.tsx
    • src/features/workbench/components/map-dev-panel.tsx
    • src/features/workbench/components/workbench-top-bar-menus.tsx

acrylic-control

  • 用途:始终悬浮在地图上的紧凑型独立控件。
  • 模糊:使用控件级模糊,默认 18px,浅色底图 20px,卫星底图 16px。
  • 当前组件:
    • Toolbar,地图主工具栏。
    • DrawToolbar,绘制工具栏。
    • ZoomControl,缩放控件。
    • ScaleLine,比例尺。
    • BaseLayersControl,底图切换入口与预览控件。
    • map-workbench-page.tsx 中的浮动地图控制入口。
  • 使用方式:上述组件主要通过 MAP_CONTROL_SURFACE_CLASS_NAME 间接引用。
  • 共享定义:src/features/map/core/components/map-control-styles.ts

glass-transient

  • 用途:短时出现、需要突出当前任务状态的玻璃浮层。
  • 模糊:沿用控件级模糊,16px 至 20px。
  • 当前组件:
    • AgentTaskTicker 的活动任务卡片。
  • 文件:src/features/workbench/components/agent-task-ticker.tsx
  • 约束:仅用于活动任务浮条,非活动堆叠卡改用 surface-control

2. 内部实体表面

这组样式不使用 backdrop-filter。它们用于亚克力外壳内部,通过不透明度和背景层级提高可读性,避免出现嵌套模糊。

surface-dock

  • 用途:预留给固定 Dock 或侧边停靠区域。
  • 当前状态:已在 src/styles.css 中定义,暂无组件直接使用。
  • 适用组件:
    • 桌面端固定展开的 Agent 侧栏,前提是它从地图浮层改为占据稳定布局宽度的 Dock。
    • 固定展开的预约工况详情侧栏或图层管理侧栏,前提是侧栏长期贴边并参与工作区布局。
    • 后续可能增加的对象目录、调度队列等常驻侧栏。
  • 不适用:临时弹层、悬浮工具面板、下拉菜单和可覆盖地图的短时侧栏。这些组件仍应使用 acrylic-panel

surface-control

  • 用途:面板内部的 Header、输入区域、筛选器、按钮、紧凑控制区和任务堆叠卡。
  • 当前组件范围:
    • Agent 收起侧栏条目、Agent 操作摘要按钮、命令面板快捷入口。
    • 图层、量测和通用控制面板中的交互控件。
    • 预约任务面板与工况详情中的筛选器、元信息块和次级操作。
    • 任务浮条的非活动卡片。
    • 要素洞察面板的内部按钮。
    • Header 下拉菜单的内部控制区。
    • 通用 IconButton
  • 主要文件:
    • src/features/agent/components/agent-collapsed-rail.tsx
    • src/features/agent/components/agent-command-panel.tsx
    • src/features/agent/components/agent-operational-brief.tsx
    • src/features/map/core/components/control-panel.tsx
    • src/features/map/core/components/layer-control.tsx
    • src/features/map/core/components/measure-panel.tsx
    • src/features/workbench/components/agent-task-ticker.tsx
    • src/features/workbench/components/scheduled-condition-feed.tsx
    • src/features/workbench/components/scheduled-condition-detail-panel.tsx
    • src/features/workbench/components/feature-insight-panel.tsx
    • src/features/workbench/components/workbench-top-bar-menus.tsx

surface-well

  • 用途:低密度内容区、空白支撑区、未选中的面板条目和内部凹槽。
  • 当前组件:
    • LayerPanelLayerControl 的未激活条目。
    • MeasurePanelDrawToolbarAnnotationPanel 的内部区域。
    • ControlPanelLegendBaseLayersControl 的分组与空白区域。
    • Header 下拉菜单的普通菜单项。
  • 使用方式:部分组件直接引用,部分通过 MAP_READABLE_SURFACE_CLASS_NAME 间接引用。

surface-reading

  • 用途:消息、报告、表单、属性列表、时间线内容和其他密集阅读区域。
  • 当前组件范围:
    • Agent 消息详情、操作摘要、UI Envelope 内容和命令面板空状态。
    • 预约任务列表、工况详情、KPI、报告内容与下拉列表。
    • 要素洞察、属性列表和底图名称标签。
    • Header 下拉菜单中的详情块与空状态。
  • 主要文件:
    • src/features/agent/components/agent-command-panel.tsx
    • src/features/agent/components/agent-message-details.tsx
    • src/features/agent/components/agent-operational-brief.tsx
    • src/features/agent/components/agent-ui-envelope-renderer.tsx
    • src/features/workbench/components/scheduled-condition-feed.tsx
    • src/features/workbench/components/scheduled-condition-detail-panel.tsx
    • src/features/workbench/components/feature-insight-panel.tsx
    • src/features/workbench/components/feature-property-list.tsx
    • src/features/workbench/components/workbench-top-bar-menus.tsx
    • src/features/map/core/components/base-layers-control.tsx

3. 语义状态表面

语义状态表面不使用模糊,只表达业务含义。它们不能替代 acrylic-panelsurface-controlsurface-reading 来建立界面层级。

类名 含义 当前使用位置
material-tone-info 信息、液位等蓝色状态 FeatureInsightPanel 的雷达液位区块
material-tone-normal 正常、健康、流量或水质状态 FeatureInsightPanel 的水质、综合监测等区块
material-tone-warning 风险、告警、超声流量等橙色状态 FeatureInsightPanel 的告警与超声流量区块
material-tone-danger 严重故障或事故状态 已定义,建议用于严重事故、关键设备故障和高风险工况内容块
material-tone-agent Agent 推理或模型建议 已定义,建议用于 Agent 解释、推理结论和建议动作内容块

未使用样式的建议落点

surface-dock

建议用于参与页面布局的常驻停靠区,而不是覆盖在地图上的浮层。现有组件中,以下场景适合在布局调整后使用:

  • AgentCommandPanel 的桌面常驻模式。只有当面板固定贴左、占据稳定宽度并推动地图安全区时才使用。
  • ScheduledConditionFeedConditionDetailPanel 的常驻右侧模式。适用于调度员持续对照地图与工况详情的工作流。
  • LayerPanel 的常驻图层目录模式。适用于图层较多、需要持续管理的专业工作台。

如果组件仍然悬浮在地图上、可以随时关闭或与其他浮层替换,应继续使用 acrylic-panel

material-tone-danger

建议用于已经确认的严重业务状态,不用于普通校验失败或短暂接口错误。现有组件中适合的落点包括:

  • FeatureInsightPanel:要素状态为 critical、严重故障、爆管或关键设备失效时的状态说明区块。
  • ScheduledConditionDetailPanel:工况风险等级为 critical,或任务状态为 error 且代表真实运行事故时的风险摘要和影响范围区块。
  • MapNotice:仅在需要持续强调严重运行事故时用于通知内容区,不替换通知最外层的 acrylic-panel
  • Agent 权限或确认卡片:仅当待执行动作具有明确的高风险业务后果时使用,不能仅因提交失败就使用。

不应使用在网络请求失败、加载失败、表单校验错误等通用技术错误上。这类错误继续使用局部红色图标、边框或文字即可,避免把技术故障误读为管网事故。

material-tone-agent

建议用于明确由 Agent 或模型生成的内容,帮助用户区分事实数据、业务状态与机器推理。现有组件中适合的落点包括:

  • FeatureInsightPanel 的“Agent 解释”区块。该区块目前使用 material-tone-warning,如果内容只是解释或推理而非风险告警,更适合改用 material-tone-agent
  • AgentOperationalBrief:Agent 生成的任务判断、建议动作或需要人工确认的结论区块。
  • AgentMessageDetails:推理摘要、模型结论、建议方案等非原始证据内容。
  • AgentUiEnvelopeRenderer:由 Agent 返回的建议面板或注册组件中的结论区块。
  • ScheduledConditionDetailPanel:Agent 针对工况生成的处置建议区块。

原始监测值、设备属性、人工录入内容和系统事实不应使用该样式。即使这些内容出现在 Agent 面板内,也应继续使用 surface-reading 或对应的业务状态色。

共享类映射

地图核心组件通过 src/features/map/core/components/map-control-styles.ts 复用材质类,避免在各组件中重复写样式值。

共享常量 实际材质类 典型用途
MAP_CONTROL_SURFACE_CLASS_NAME acrylic-control border 工具栏、缩放、比例尺、底图入口
MAP_TOOL_PANEL_SURFACE_CLASS_NAME acrylic-panel border 图层、图例、控制和预约任务面板
MAP_FOCUS_SURFACE_CLASS_NAME acrylic-panel border 要素详情等焦点浮层
MAP_READABLE_SURFACE_CLASS_NAME surface-well border 面板内部低密度区域
MAP_READABLE_SURFACE_STRONG_CLASS_NAME surface-control border 面板内部高可读控制区

自适应与无障碍规则

  • data-basemap-tone="light" 会提高部分面板模糊强度,并降低导航、控件和任务浮条的背景不透明度。
  • data-basemap-tone="satellite" 会提高背景不透明度、轮廓和阴影强度,压制卫星底图纹理。
  • prefers-reduced-transparency: reduce 下,亚克力和玻璃表面会切换到接近不透明的背景并关闭模糊。
  • 不支持 backdrop-filter 的浏览器使用同样的高不透明度回退。
  • forced-colors: active 下,材质背景和边框改用系统颜色,并关闭背景图与阴影。

使用约束

  1. 一个浮动区域只允许最外层使用 acrylic-*glass-transient
  2. 外层亚克力内部使用 surface-controlsurface-wellsurface-reading,不要叠加第二层模糊。
  3. 密集文字、表格、属性和值必须落在 surface-reading 等高可读表面上。
  4. material-tone-* 只表达状态,不表达层级,也不添加模糊。
  5. 新增地图控件时优先复用 map-control-styles.ts 中的共享常量。
  6. 组件只负责布局、圆角和交互状态,材质颜色、边框和阴影由全局语义类统一维护。

当前待清理项

  • surface-dock 可在固定 Dock 落地时启用。如果产品不计划引入参与布局的常驻侧栏,可以移除该样式。
  • material-tone-danger 应等待明确的严重业务状态落点,不要为了消除未使用状态而套用到通用错误提示。
  • material-tone-agent 可优先用于 FeatureInsightPanel 的“Agent 解释”和 Agent 建议内容,替代不准确的警告语义。
  • Agent 面板仍有少量局部类直接使用 --surface-control--surface-reading 或自定义透明背景。后续统一材质语义时,应评估是否迁移到对应的 surface-* 类。